This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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: RISC-V problem with weak function references and -mcmodel=medany


Changing the code to something like this

void f(void) __attribute__((__weak__));

void _start(void)
{
        void (*g)(void) = f;

        if (g != 0) {
                (*g)();
        }
}

doesn't work either, since this is optimized to

        .option nopic
        .text
        .align  1
        .globl  _start
        .type   _start, @function
_start:
        lla     a5,f
        beqz    a5,.L1
        tail    f
.L1:
        ret
        .size   _start, .-_start
        .weak   f

Why doesn't the RISC-V generate a trampoline code to call far functions?

The non-optimized example code with "tail f" replaced by "jalr a5" links well:

        .option nopic
        .text
        .align  1
        .globl  _start
        .type   _start, @function
_start:
        addi    sp,sp,-32
        sd      ra,24(sp)
        sd      s0,16(sp)
        addi    s0,sp,32
        lla     a5,f
        sd      a5,-24(s0)
        ld      a5,-24(s0)
        beqz    a5,.L3
        ld      a5,-24(s0)
        jalr    a5
.L3:
        nop
        ld      ra,24(sp)
        ld      s0,16(sp)
        addi    sp,sp,32
        jr      ra
        .size   _start, .-_start
        .weak   f

--
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]