Como forço o gcc a chamar uma função diretamente no código PIC?

Considere a seguinte função:

extern void test1(void);
extern void test2(void) {
    test1();
}

Este é o código que o gcc gera sem-fpic no amd64 Linux:

test2:
    jmp test1

Quando eu compilar com-fpic , o gcc chama explicitamente por meio do PLT para ativar a interposição de símbolos:

test2:
    jmp test1@PLT

No entanto, isso não é estritamente necessário para o código independente de posição e pode ser deixado de fora se eu não quiser dar suporte. Se necessário, o vinculador reescreve o alvo de salto no símbolo PLT de qualquer maneira.

Como posso, sem alterar o código-fonte e sem tornar o código compilado inadequado para uma biblioteca compartilhada, fazer chamadas de função ir diretamente para seus destinos em vez de passar explicitamente pelo PLT?

questionAnswers(2)

yourAnswerToTheQuestion