This is the mail archive of the
mailing list for the GCC project.
Re: [RFC] Wrong register numbers in .dwarf_frame on Linux/PowerPC
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: dje dot gcc at gmail dot com (David Edelsohn)
- Cc: geoffk at geoffk dot org, jakub at redhat dot com, gcc-patches at gcc dot gnu dot org, binutils at sourceware dot org, gdb-patches at sourceware dot org
- Date: Tue, 27 Nov 2012 20:12:02 +0100 (CET)
- Subject: Re: [RFC] Wrong register numbers in .dwarf_frame on Linux/PowerPC
David Edelsohn wrote:
> On Mon, Nov 26, 2012 at 2:10 PM, Ulrich Weigand <firstname.lastname@example.org> wrote:
> > So I'm wondering where to go from here. I guess we could:
> > 1. Bring GCC (and gas) behaviour in compliance with the documented ABI
> > by removing the #undef DBX_REGISTER_NUMBER and changing gas's
> > md_reg_eh_frame_to_debug_frame to the original implementation from
> > Jakub's patch. That would make GDB work well on new files, but
> > there are a large number of binaries out there where we continue
> > to have the same behaviour as today ...
> > 2. Leave GCC and gas as-is and modify GDB to expect GCC numbering in
> > .dwarf_frame, except for the condition code register. This would
> > break debugging of files built with GCC 4.0 and 4.1 unless we
> > want to add a special hack for that.
> > 3. Like 2., but remove the condition code hack: simply use identical
> > numbers in .eh_frame and .dwarf_frame. This would make PowerPC
> > like other Linux platforms in that respect.
> > Thoughts?
> I vote for (3).
I'd agree, in particular given that XLC and LLVM seem to match this
behaviour as well.
Looking into this further, it turns out that on Linux not only .debug_frame
is affected, but also .debug_info and all the other .debug_... sections.
DBX_REGISTER_NUMBER is used for register numbers in those sections too ...
This again doesn't match what GDB is expecting: For regular debug info
(not frame info), GDB only distinguished between stabs and DWARF, and
assumes GCC numbering for stabs, and DWARF numbering for DWARF. This
holds for any PowerPC operating system.
However, looking at GCC behaviour, we have instead GCC numbering used
in either stabs or DWARF on Linux, but DWARF numbering apparently used
in either stabs or DWARF on AIX/BSD/Darwin.
Here, comparison with other compilers is less clear. I wasn't able to
get XLC on Linux to generate any .debug_info containing a register
number for non-GPR/FPR registers (it would always put such variables
on the stack). The XLC on AIX I have access to is quite old and only
generates stabs; again I wasn't able to see any non-GPR register
assignments. LLVM consistently uses the GCC numbering on all operating
systems it supports (I think that's Linux, Darwin, and FreeBSD).
As far as Linux is concerned, leaving the compilers as-is and changing
GDB to expect GCC numbering might be the best option. Not sure about
other operating systems ...
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE