Имея следующую очень простую программу на 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
Кто-тознаете, как этого добиться?