Replacement for the .stabs directive

Jim Wilson jim.wilson@linaro.org
Wed Aug 24 21:56:00 GMT 2016


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.



More information about the Binutils mailing list