Re: [patch] Set calling convention of methods

Jonas Maebe
2009-09-30T11:18:36Z

On 30 Sep 2009, at 02:02, Joel Brobecker wrote:

>> I've attached my first patch. Other patches will modify code in this
>> one, so I'd prefer to get this one out of the way first.
>
> But it looks like this patch actually introduces code that will be
> dead
> until you actually set the calling convention, right? It seems strange
> that you'd prefer to do it this way.

It will already be active for regular functions/procedures, because
the DWARF reader does propagate the calling convention in that case
(as it was already done for the DW_CC_GNU_renesas_sh calling
convention). It simply won't be taken into account yet for methods
(because that requires a patch to the DWARF reader), that will indeed
require a further patch.

> One of the concerns that never got resolved from what I've read in the
> archives, was the use of a DWARF constant outside of DWARF code.
> I am not sure I understand the problem, though. Was it the use of
> constant zero when populating this field when reading stabs debug
> info, or anything else?

Yes, it was the use of an unnamed constant: http://sourceware.org/ml/gdb-patches/2009-04/msg00196.html

> As far as I am concerned, I can't see a problem with using DWARF
> declarations even from stabs.

We could include the dwarf2.h header in the stabs reader and set the
calling convention to DW_CC_normal in all cases.

> Just a couple of formatting nits:
>
>> + if (struct_return
>> + && reg_paras[para_regnum-1] != nargs)
>
> and
>
>> + while (type
>> + && can_dereference (type))
>
> You probably want to join the two lines in one. gdb_indent.sh, our
> automatic indentation program would (though no one uses it, it makes
> pretty bad choices sometimes). I think it'd make the code a little
> easier to read too.

Ok, will do.

> diff --git a/include/elf/dwarf2.h b/include/elf/dwarf2.h
>> index a7448dc..efa786e 100644
>> --- a/include/elf/dwarf2.h
>> +++ b/include/elf/dwarf2.h
>> @@ -662,7 +662,8 @@ enum dwarf_calling_convention
>> DW_CC_normal = 0x1,
>> DW_CC_program = 0x2,
>> DW_CC_nocall = 0x3,
>> - DW_CC_GNU_renesas_sh = 0x40
>> + DW_CC_GNU_renesas_sh = 0x40,
>> + DW_CC_GNU_borland_fastcall_i386 = 0x41
>
> This part is maintained by binutils, I believe. You'll need
> to ask them for approval of this change.

Tom said it came from gcc (http://sourceware.org/ml/gdb-patches/2009-04/msg00063.html
) and I did submit a patch there: http://gcc.gnu.org/ml/gcc-patches/2009-04/msg00301.html
. I did not get any reaction to that patch (and I guess it's not
been applied).

Later on, Tom clarified that he thought that the gdb and gcc versions
of dwarf2.h should actually be merged into a single copy, but that I
shouldn't worry about this since the divergence started before my
patch: http://sourceware.org/ml/gdb-patches/2009-04/msg00099.html

Jonas