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

foo.c

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


foo.s

#APP
    .weak foo
#NO_APP
    .global foo


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

最佳答案

不要使用内联汇编来尝试解决编译器,而要使用__attribute__((weak))来使编译器发出.weak本身。 gcc 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()

关于c - 与内联装配的连接弱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53590498/

10-11 15:33