与内联汇编的弱链接

Weak linkage with inline assembly

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

foo.c

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

foo.s

#APP
    .weak foo
#NO_APP
    .global foo

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

不要使用内联汇编来尝试绕过编译器,使用 __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()