This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [RFA-2] Handle GPC specific name for main function


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  <muller@ics.u-strasbg.fr>
> 
>         * 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)
> \
> 




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]