This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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: Replacement for the .stabs directive


On 08/24/2016 02:56 PM, Jim Wilson wrote:
On 08/19/2016 12:55 PM, Umesh Kalappa via llvm-dev wrote:
We have the legacy code  ,that uses the .stabs directive quiet often
in the source code like

.stabs "symbol_name", 100, 0, 0, 0 + .label_one f;

.label_one
         stmt
and ,the above code is wrapped with the  inline asm in the c source file .

Presumably the ".label_one f" is actually "1f" and the ".label_one" is "1:".  That would make more
sense, as this is a use of the GNU as local label feature.

Unfortunately, there is no easy to do this in dwarf, as dwarf debug info is split across multiple
sections and encoded.  Maybe this could work if you handled it like a comdat symbol, but that would
be inconvenient, and might not even work.  This seems like a option not worth pursuing.

The fact that this worked for stabs is more accident by design.  The code never should have been
written this way in the first place.

You can make the association between a symbol name and an address by using an equivalence.  E.g. you
could do
     asm ("symbol_name = 1f");
but this puts the symbol_name in the symbol table, which works only if symbol_name is unique or
maybe unique within its scope if function local.  If the name was unique, you probably wouldn't have
used the ugly stabs trick in the first place, so this might not work.  If the symbol names aren't
unique, maybe you can change the code to make them unique? Using an equivalence gives the same
effective result as using
     symbol_name: stmt

Jim

PS Cross posting like this is discouraged.  I would suggest just asking assembler questions on the
binutils list.

Trimming the CC list, as Jim suggested.

Umesh --

I'm not sure I understand what you are trying to do.

If you want a code label to be described in DWARF, you can create a DIE:

  DW_TAG_label
    DW_AT_name  "symbol_name"
    DW_AT_low_pc  .label_one

See DWARF Ver. 4 standard, section 3.5.

--
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077


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