我正在尝试将weak
格式的ELF
符号属性与内联汇编一起使用。当我尝试使用.weak
汇编指令时,汇编输出同时包含.weak
和.global
指令。
foo.c
__asm(".weak foo");
void foo(void)
{
/* EMPTY FUNCTION! */
}
foo.s
#APP
.weak foo
#NO_APP
.global foo
代码运行正常;但是在这种情况下,当链接器看到符号既是全局符号又是弱符号时,是否会引起任何问题?
答案 0 :(得分:1)
不要使用内联汇编来尝试解决编译器问题,请使用__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()