From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10851 invoked by alias); 8 Oct 2007 15:45:55 -0000 Received: (qmail 10841 invoked by uid 22791); 8 Oct 2007 15:45:54 -0000 X-Spam-Check-By: sourceware.org Received: from ics.u-strasbg.fr (HELO ics.u-strasbg.fr) (130.79.112.250) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 08 Oct 2007 15:45:51 +0000 Received: from ICSMULLER (laocoon.u-strasbg.fr [130.79.112.72]) by ics.u-strasbg.fr (Postfix) with ESMTP id D0F1818701E; Mon, 8 Oct 2007 17:50:32 +0200 (CEST) From: "Pierre Muller" To: "'Pierre Muller'" , "'Joel Brobecker'" Cc: "'Eli Zaretskii'" , , References: <001701c805a0$1da99b60$58fcd220$@u-strasbg.fr> <20071005181620.GB3570@adacore.com> <20071007071713.GG3570@adacore.com> <20071008063451.GI3570@adacore.com> <005801c8097d$cd45e110$67d1a330$@u-strasbg.fr> <20071008151408.GN3570@adacore.com> <000601c809c1$f278cbc0$d76a6340$@u-strasbg.fr> In-Reply-To: <000601c809c1$f278cbc0$d76a6340$@u-strasbg.fr> Subject: RE: [RFA-2] Handle GPC specific name for main function Date: Mon, 08 Oct 2007 15:45:00 -0000 Message-ID: <000701c809c2$53bd4f00$fb37ed00$@u-strasbg.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Content-Language: en-us Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2007-10/txt/msg00165.txt.bz2 Whoops, I forgot to tell you that this patch does reduce the number of failures for GNU pascal compiler on the newly added gdb.pascal directory in the testsuite. I will try to run a complete testsuite, Pierre > -----Original Message----- > From: gdb-patches-owner@sourceware.org [mailto:gdb-patches- > owner@sourceware.org] On Behalf Of Pierre Muller > Sent: Monday, October 08, 2007 5:43 PM > To: 'Joel Brobecker' > Cc: 'Eli Zaretskii'; gdb-patches@sourceware.org; gpc@gnu.de > Subject: [RFA-2] Handle GPC specific name for main function > > Thanks to Joel for all his contribution, > I resubmit a modified version, which is > the same as Joel proposed, to the exception that > I used "const char *" instead of "const char const *" > that I did not find anywhere else in the GDB sources > and seems really strange to me... > I also modified the final comment inside pascal_main_name. > > > > ChangeLog entry: > > 2007-10-08 Pierre Muller > > * p-lang.h (pascal_main_name): Add declaration. > * p-lang.c (GPC_P_INITIALIZE, GPC_MAIN_PROGRAM_NAME_1) > (GPC_MAIN_PROGRAM_NAME_2): New constants. > (pascal_main_name): New function. > * symtab.c: Include p-lang.h. > (find_main_name): Add call to pascal_main_name. > * Makefile.in (symtab.o): Add dependency on p-lang.h. > > > Index: p-lang.h > =================================================================== > RCS file: /cvs/src/src/gdb/p-lang.h,v > retrieving revision 1.12 > diff -u -p -r1.12 p-lang.h > --- p-lang.h 23 Aug 2007 18:08:36 -0000 1.12 > +++ p-lang.h 8 Oct 2007 15:41:43 -0000 > @@ -21,6 +21,9 @@ > > struct value; > > +/* Defined in p-lang.c */ > +extern const char *pascal_main_name (void); > + > extern int pascal_parse (void); /* Defined in p-exp.y */ > > extern void pascal_error (char *); /* Defined in p-exp.y */ > Index: p-lang.c > =================================================================== > RCS file: /cvs/src/src/gdb/p-lang.c,v > retrieving revision 1.33 > diff -u -p -r1.33 p-lang.c > --- p-lang.c 23 Sep 2007 16:25:05 -0000 1.33 > +++ p-lang.c 8 Oct 2007 15:41:43 -0000 > @@ -35,6 +35,56 @@ > extern void _initialize_pascal_language (void); > > > +/* All GPC versions until now (2007-09-27) also define a symbol called > + '_p_initialize'. Check for the presence of this symbol first. */ > +static const char GPC_P_INITIALIZE[] = "_p_initialize"; > + > +/* The name of the symbol that GPC uses as the name of the main > + procedure (since version 20050212). */ > +static const char GPC_MAIN_PROGRAM_NAME_1[] = "_p__M0_main_program"; > + > +/* Older versions of GPC (versions older than 20050212) were using > + a different name for the main procedure. */ > +static const char GPC_MAIN_PROGRAM_NAME_2[] = "pascal_main_program"; > + > +/* Function returning the special symbol name used > + by GPC for the main procedure in the main program > + if it is found in minimal symbol list. > + This function tries to find minimal symbols generated by GPC > + so that it finds the even if the program was compiled > + without debugging information. > + According to information supplied by Waldeck Hebisch, > + this should work for all versions posterior to June 2000. */ > + > +const char * > +pascal_main_name (void) > +{ > + struct minimal_symbol *msym; > + > + msym = lookup_minimal_symbol (GPC_P_INITIALIZE, NULL, NULL); > + > + /* If '_p_initialize' was not found, the main program is likely not > + written in Pascal. */ > + if (msym == NULL) > + return NULL; > + > + msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_1, NULL, NULL); > + if (msym != NULL) > + { > + return GPC_MAIN_PROGRAM_NAME_1; > + } > + > + msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_2, NULL, NULL); > + if (msym != NULL) > + { > + return GPC_MAIN_PROGRAM_NAME_2; > + } > + > + /* No known entry procedure found, the main program is probably > + not compiled with GPC. */ > + return NULL; > +} > + > /* Determines if type TYPE is a pascal string type. > Returns 1 if the type is a known pascal type > This function is used by p-valprint.c code to allow better string > display. > Index: symtab.c > =================================================================== > RCS file: /cvs/src/src/gdb/symtab.c,v > retrieving revision 1.165 > diff -u -p -r1.165 symtab.c > --- symtab.c 24 Sep 2007 07:40:32 -0000 1.165 > +++ symtab.c 8 Oct 2007 15:41:44 -0000 > @@ -40,6 +40,7 @@ > #include "filenames.h" /* for FILENAME_CMP */ > #include "objc-lang.h" > #include "ada-lang.h" > +#include "p-lang.h" > > #include "hashtab.h" > > @@ -4126,7 +4127,7 @@ set_main_name (const char *name) > static void > find_main_name (void) > { > - char *new_main_name; > + const char *new_main_name; > > /* Try to see if the main procedure is in Ada. */ > /* FIXME: brobecker/2005-03-07: Another way of doing this would > @@ -4151,6 +4152,13 @@ find_main_name (void) > return; > } > > + new_main_name = pascal_main_name (); > + if (new_main_name != NULL) > + { > + set_main_name (new_main_name); > + return; > + } > + > /* The languages above didn't identify the name of the main > procedure. > Fallback to "main". */ > set_main_name ("main"); > Index: Makefile.in > =================================================================== > RCS file: /cvs/src/src/gdb/Makefile.in,v > retrieving revision 1.941 > diff -u -p -r1.941 Makefile.in > --- Makefile.in 8 Oct 2007 15:09:04 -0000 1.941 > +++ Makefile.in 8 Oct 2007 15:41:45 -0000 > @@ -2751,7 +2751,7 @@ symtab.o: symtab.c $(defs_h) $(symtab_h) > $(filenames_h) $(objc_lang_h) $(ada_lang_h) $(hashtab_h) \ > $(gdb_obstack_h) $(block_h) $(dictionary_h) $(gdb_string_h) \ > $(gdb_stat_h) $(cp_abi_h) $(observer_h) $(gdb_assert_h) \ > - $(solist_h) $(ada_lang_h) > + $(solist_h) $(p_lang_h) > target.o: target.c $(defs_h) $(gdb_string_h) $(target_h) $(gdbcmd_h) \ > $(symtab_h) $(inferior_h) $(bfd_h) $(symfile_h) $(objfiles_h) \ > $(gdb_wait_h) $(dcache_h) $(regcache_h) $(gdb_assert_h) > $(gdbcore_h) > \ >