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] Handle GPC specific name for main function


Hi Pierre,

> 2007-10-03  Pierre Muller  <muller@ics.u-strasbg.fr>
> 
>         * p-lang.h (pascal_main_name): New function.
>         p-lang.c (GPC_P_INITIALIZE, GPC_MAIN_PROGRAM_NAME_1),
>         (GPC_MAIN_PROGRAM_NAME_2): New char array constants
>         corresponding to the three minimal symbols used
>         by GPC compiler.
>         (pascal_main_name): Try to find minimal symbol
>         corresponding to the entry of GPC compiled programs.
>         symtab.c: New include p-lang.h.
>         (find_main_name): Try to find pascal specific main name
>         by calling pascal_main_name.
>         * Makefile.in (symtab.o): Add dependency on p-lang header.

This is mostly OK. I feel like I am being a perfectionist on you,
and I apologize, but I think I might have missed something that
feels wrong somehow: You're having to cast your global static const
char into (char *) inside pascal_main_name. I can tell from the code
that everything will be fine, but perhaps we could do better. What
do others think of this cast?

    static const char GPC_MAIN_PROGRAM_NAME_1[]
      = "_p__M0_main_program";

    char *
    pascal_main_name (void)
    {
      [...]
      return (char *) GPC_MAIN_PROGRAM_NAME_1[];
    }

One way I can see to avoid having to do the cast is to return
the SYMBOL_LINKAGE_NAME of the msym we found. Something like this:

    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 program doesn't seem to be compiled with GPC.
         Thus default name "main" should work.  */
      if (msym == NULL)
        return NULL;
    
      msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_1, NULL, NULL);
      if (msym == NULL)
        msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_2, NULL, NULL);
    
      if (msym != NULL)
        return SYMBOL_LINKAGE_NAME (msym);
    
      return NULL;
    }

This is only a small detail, and I can't see anything wrong happening
with your patch, so I suggest you go ahead and commit the change, and
we can adjust it if others also feel the same way.

Just one adjustment:

> +/*  No known entry procedure found, use default 'main' name.
> +    According to Waldek Hebish, this should not happen for any GPC version
> +    after June 2000 and up to 2007-09-27.  */

This comment assumes that the main program is actually always written
in Pascal. But this is not true. This function will also be called for
programs written in any other language. I suggest:

  /* No known entry procedure found.  The main program is probably
     not written in Pascal.  */

The rest of the patch is great!

Thank you,
-- 
Joel


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