From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Wilson To: robertlipe@usa.net Cc: egcs@egcs.cygnus.com Subject: Re: dwarf2 debug dependent upon GAS? Date: Sun, 28 Feb 1999 22:53:00 -0000 Message-ID: <199902230124.RAA24440@rtl.cygnus.com> References: <19990221144644.M8783.cygnus.egcs@rjlhome.sco.com> X-SW-Source: 1999-02n/msg01118.html Message-ID: <19990228225300.x65CQgBisV2Vz2st2BNj6jIgqB2DKTnEAyQ2ZILy0eQ@z> In article <19990221144644.M8783.cygnus.egcs@rjlhome.sco.com> you write: >I've had it on my list to examine Dwarf2 debugging for System V. I'm >finding that it seems to depend upon a curiosity of the GNU assembler. >Is this accurate? It works with GNU as and SGI Irix6 as. Those are the only dwarf2 aware assemblers that I know about. There are clear advantages to having a dwarf2 aware assembler when emitting dwarf2 debug info. There is only this one curiousity we need for correctness, but there are a number of cases where special assembler support would give us more compact debug info. We currently don't take advantage of any GNU as features for this yet, but I expect we will eventually. This will mean that we'll have smaller debug info if we use GNU as. >I'm seeing EGCS (current trunk) generate refences to symbols that don't >exist. There are SECTIONS of that name, but no symbols. Apparently >GAS treat them interchangably. Is it the intent for these to reference >the beginning of the section in this file (i.e. local labels) or the >beginning of that section once linked? (without making them global, I >don't know how I would synthesize that.) The latter, sort of. The dwarf2 standard says that some fields are offsets relative to the address of the final linked section. This means that we can't compute these offsets until link time. You can get this effect by using a section name as a symbol name in GNU as and SGI irix6 as. If you don't have relocations and assembler syntax for this, then it will be hard to synthesize it. It might be possible to get the same effect by creating a file that always gets linked first, and which contains special labels to mark the start of each section, and then use label subtraction to get an offset. There are cases where this won't work, but I don't recall the details. I've discussed this before with other people and never found a satisfactory solution. There is some language in the MIPS processor supplement to the SVR4 ABI that seems to document this. In the section Relocation, it defines a symbol (S) relocation as Represents the value of the symbol whose index resides in the relocation entry, unless the symbol is STB_LOCAL and is of type STT_SECTION, in which case S represents the original sh_addr minus the final sh_addr. and that gives the result that we want. I haven't found similar language in any other SVR4 ABI. I don't know how this got into the MIPS SVR4 ABI. This is a 1990 copyright document, but dwarf2 didn't exist until several years later, so it seems unlikely that it was added specifically for dwarf2. If we can't get the exact result that the standard asks for, then perhaps we can create a dwarf2-variant for dwarf2-unaware assemblers. For instance, substituting in an absolute address where the standard wants a section-relative offset might make some of these problems go away. This would require some support in gdb for the dwarf2-variant though. Jim