Компилирование MIPS для использования перехода вместо перехода - PullRequest
0 голосов
/ 10 февраля 2019

Имея следующую очень простую программу на c:

#include <stdio.h>
#include <stdlib.h>

int main()
{
        char *buffer = (char*)malloc(20);
}

И компилируя ее с помощью mips-linux-gnu-gcc, похоже, что вызов компилируется в следующие инструкции:

.text:004007EC 24 04 00 14             li      $a0, 0x14
.text:004007F0 8F 82 80 50             la      $v0, malloc      # Load Address
.text:004007F4 00 40 C8 25             move    $t9, $v0
.text:004007F8 03 20 F8 09             jalr    $t9 ; malloc     # Jump And Link Register
.text:004007FC 00 00 00 00             nop

полная командная строка компиляции:

mips-linux-gnu-gcc my_malloc.c -o my_malloc.so

Однако я хотел бы, чтобы вызовы функции компилировались в обычные инструкции ветвления:

jal     malloc
li      $a0, 0x14

Кто-тознаете, как этого добиться?

1 Ответ

0 голосов
/ 10 февраля 2019

Вы должны указать компилятору использовать PLT для вызова, используя параметр -mplt .Это требует поддержки PLT в остальной части цепочки инструментов.

...