与内联装配的弱连接

时间:2018-12-03 09:09:20

标签: c gcc elf inline-assembly

我正在尝试将weak格式的ELF符号属性与内联汇编一起使用。当我尝试使用.weak汇编指令时,汇编输出同时包含.weak.global指令。

foo.c

__asm(".weak foo");
void foo(void)
{
    /* EMPTY FUNCTION! */
}

foo.s

#APP
    .weak foo
#NO_APP
    .global foo

代码运行正常;但是在这种情况下,当链接器看到符号既是全局符号又是弱符号时,是否会引起任何问题?

1 个答案:

答案 0 :(得分:1)

不要使用内联汇编来尝试解决编译器问题,请使用__attribute__((weak))来使编译器本身发出.weakgcc function attributes in the docs

__attribute__((weak))
void foo(void){
}

Compiled on the Godbolt compiler explorer with gcc and clang

    .text
    .intel_syntax noprefix
    .file   "example.cpp"
    .weak   foo()                 # -- Begin function foo()
    .p2align        4, 0x90
    .type   foo(),@function
foo():                                # @foo()
.Lfunc_begin0:
        ret
.Lfunc_end0:
    .size   foo(), .Lfunc_end0-foo()