Слабая связь со встроенной сборкой - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь использовать 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 голосов
/ 03 декабря 2018

Не используйте встроенный asm, чтобы попытаться обойти компилятор, используйте __attribute__((weak)), чтобы компилятор сам выдал .weak. атрибуты функции gcc в документах

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

Скомпилировано в проводнике компилятора Godbolt с помощью gcc и 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()
...