Call of weakly referenced functions

Sebastian Huber sebastian.huber@embedded-brains.de
Wed Jul 17 19:41:00 GMT 2013
Hello,

I have a question regarding the call of weakly referenced functions.  On 
ARM for example we have this:

extern void weak(void);

__attribute__((weak)) extern void weak(void);

void _start(void)
{
     weak();
}

GCC output:

         .global _start
         .type   _start, %function
_start:
         @ Function supports interworking.
         @ args = 0, pretend = 0, frame = 0
         @ frame_needed = 0, uses_anonymous_args = 0
         stmfd   sp!, {r3, lr}
         bl      weak
         ldmfd   sp!, {r3, lr}
         bx      lr
         .size   _start, .-_start
         .weak   weak

Linker output:

00008444 <_start>:
     8444:       e92d4008        push    {r3, lr}
     8448:       e1a00000        nop                     ; (mov r0, r0)
     844c:       e8bd4008        pop     {r3, lr}
     8450:       e12fff1e        bx      lr

So this looks really nice.  Does this work on all ELF targets supported 
by the GNU linker?

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the Binutils mailing list