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] dwarf2_physname


On Mon, Aug 31, 2009 at 04:19:02PM -0700, Keith Seitz wrote:
> On 08/31/2009 03:55 PM, Michael Eager wrote:
> 
> >Does this mean that (eventually) the DW_AT_MIPS_linkage_name attribute
> >will not be needed by GDB?
> 
> That is exactly what it is intended to do. MIPS_linkage_name is not
> needed in any case I've been able to invent on my
> archer-keiths-expr-cumulative branch, and that branch has MUCH
> tougher C++ tests than FSF gdb does.

I assume this patch is a distant descendant of the one I sent you a
while back.  Is its goal to create a useful name for each symbol, or
to match the one produced by some other source - probably the
demangler?  What sort of template cases have you looked at?

As you know, I spent several some time trying to do without
DW_AT_MIPS_linkage_name.  My main goals were cleanliness and
compatibility with a non-GCC compiler (ARM RealView).  I came across a
lot of cases where the output from neither GCC nor any other compiler
I could get my hands on made sense without a linkage name in the debug
info - and I couldn't find a way to get sensible representation in
DWARF, either.

Here's one case I remember having trouble with.

template<char *S> int f()
{
  return S[0];
}

char Foo[3];
char Bar[3];

int main()
{
  return f<Foo>() + f<Bar>();
}

0000000000000000 W int f<&Bar>()
0000000000000000 W int f<&Foo>()

 <1><31>: Abbrev Number: 2 (DW_TAG_subprogram)
    <32>   DW_AT_external    : 1
    <33>   DW_AT_name        : (indirect string, offset: 0x47): f<((char*)(& Foo))>
    <37>   DW_AT_decl_file   : 1
    <38>   DW_AT_decl_line   : 1
    <39>   DW_AT_MIPS_linkage_name: (indirect string, offset: 0x1f): _Z1fIXadL_Z3FooEEEiv
    <3d>   DW_AT_type        : <0x55>
    <41>   DW_AT_low_pc      : 0x0
    <49>   DW_AT_high_pc     : 0x10
    <51>   DW_AT_frame_base  : 0x0      (location list)

You have to represent the name "Foo" in the debug info - the address
isn't enough, there could be other symbols apparently at the same
address.  The name this older GCC emits is not useful.  Most other
compilers just punted.  While hopefully Dodji has made HEAD GCC do
something sensible now, we have to handle all those field compilers :-)

-- 
Daniel Jacobowitz
CodeSourcery


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