现今绝大多数计算机都是用的是64位系统了,于是默认生成的代码的target也是64位的。 可是。。模拟器只支持32位的指令集,于是只能想办法生成32位的代码。

MIPS:

mips-img-elf-gcc -march=mips32 -mno-local-sdata ...

https://reviews.llvm.org/D4903?id=12672#inline-47153 这里提到了%gp_rel的功能,但是并看不懂 通过-mno-local-sdata使得编译时不生成该标识符。(还是模拟器不支持)

RISC-V: 需要通过编译的时候指定目标架构。 方法之一是只生成32位的编译器:

./configure --prefix=/path/to/installation --with-arch=rv32gc --with-abi=ilp32

似乎还可以通过--enable-multilib的方法在编译程序时指定。(未研究)

补充一个操作:

gcc -E -march=help -xc /dev/null

https://stackoverflow.com/questions/47299458/how-can-i-determine-what-architectures-gcc-supports 使用该命令,版本较新的gcc会把支持的架构作为报错信息输出来。 原作者说的最低版本是gcc7,但是我的gcc6.4也能用

标签: none

添加新评论