develop a 'customized ld'

Daniel Jacobowitz drow@false.org
Sat Sep 10 19:17:00 GMT 2005


On Sat, Sep 10, 2005 at 10:19:47AM -0700, Ian Lance Taylor wrote:
> Simon Richter <Simon.Richter@hogyros.de> writes:
> 
> > sean yang wrote:
> > 
> > > For example, I want to find the program counter(i.e., the address of the 
> > > instruction) of "call '@foo'" instruction at link time.
> > 
> > This can be done for assembler code, but obvoisly not for C code as
> > there is no way to make sure the C compiler will always use the same
> > instructions. Just declare an assembler label in front of the
> > instruction of which you want to take the address.
> 
> You can use a gcc extension creatively to approximate this:
> 
> void foo ()
> {
>  lab:
>   printf ("%p\n", &&lab);
> }

But be careful with it - recent versions of GCC are pretty bad about
preserving the addresses of labels not used for control flow.  I assume
Ian's example will be OK, but if you don't have a computed goto which
might target the label, GCC may just put it somewhere else...

-- 
Daniel Jacobowitz
CodeSourcery, LLC



More information about the Binutils mailing list