Как заставить gcc вызывать функцию непосредственно в коде PIC?

Рассмотрим следующую функцию:

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

Это код, который генерирует GCC без-fpic на amd64 Linux:

test2:
    jmp test1

Когда я собираю с-fpic gcc явно вызывает через PLT, чтобы включить вставку символов:

test2:
    jmp test1@PLT

Это, однако, не является строго необходимым для позиционно-независимого кода и может быть опущено, если я не хочу поддерживать. При необходимости компоновщик переписывает цель перехода в любом случае на символ PLT.

Как я могу, не изменяя исходный код и не делая скомпилированный код неподходящим для разделяемой библиотеки, заставить вызовы функций идти непосредственно к своим целям вместо того, чтобы явно проходить через PLT?

Ответы на вопрос(2)

Ваш ответ на вопрос