¿Cómo fuerzo a gcc a llamar a una función directamente en el código PIC?

Considere la siguiente función:

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

Este es el código que genera gcc sin-fpic en amd64 Linux:

test2:
    jmp test1

Cuando compilo con-fpic , gcc llama explícitamente a través del PLT para habilitar la interposición de símbolos:

test2:
    jmp test1@PLT

Sin embargo, esto no es estrictamente necesario para el código independiente de la posición y podría omitirse si no quiero admitirlo. Si es necesario, el vinculador reescribe el objetivo de salto al símbolo PLT de todos modos.

¿Cómo puedo, sin cambiar el código fuente y sin hacer que el código compilado no sea adecuado para una biblioteca compartida, hacer que las llamadas a funciones vayan directamente a sus destinos en lugar de pasar explícitamente por el PLT?

Respuestas a la pregunta(2)

Su respuesta a la pregunta