与内联汇编的弱链接
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))
让编译器自己发出 .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()
我正在尝试将 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))
让编译器自己发出 .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()