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]

Call of weakly referenced functions


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.


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