ABI (Application Binary Interface)
Data Model
- LP64: long & pointer are 64 bit, int is 32 bit
- ILP32: long, pointer & int are 32 bit
MIPS
MIPS 有多种 ABI:
- O32 ABI: original/old 32 位 ILP32 ABI,32 位 MIPS 用的多,
mips*-linux-gnu
target$4-$7($a0-$a3)
传整数参数$f12-$f15
传浮点参数$2-$3($v0-$v1)
传返回数据- 16 个浮点寄存器
- N64 ABI: new 64 位 LP64 ABI,64 位 MIPS 用的多,
mips*64*-linux-gnuabi64
target$4-$11($a0-$a7)
传整数参数$f12-$f19
传浮点参数$2-$3($v0-$v1)
传返回数据- 32 个浮点寄存器
- N32 ABI:把 N64 从 LP64 移植 ILP32,即只用 32 位地址,但寄存器还是 64 位,
mips*64*-linux-gnuabin32
target - O64 ABI: 把 O32 移植到 64 位,64 位寄存器
- EABI: 有 32 位和 64 位版本:eabi32/eabi64
参考:
x86
- i386 abi: i*86-linux-gnu
- amd64 abi: x86_64-linux-gnu
- x32 abi: AMD64 上的 ILP32 ABI,32 位指针, x86_64-linux-gnux32 target