【问题标题】:Compiling MIPS to use branch instead of jump编译 MIPS 以使用分支而不是跳转
【发布时间】:2019-02-10 15:12:00
【问题描述】:

有以下非常简单的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

有人知道如何实现这个结果吗?

【问题讨论】:

    标签: gcc compilation mips code-generation addressing


    【解决方案1】:

    您需要使用the -mplt option 告诉编译器使用PLT 进行调用。这需要在工具链的其余部分支持 PLT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 2014-09-17
      • 2017-02-13
      • 1970-01-01
      • 2015-08-23
      • 2015-05-11
      • 1970-01-01
      相关资源
      最近更新 更多