此代码:
__asm__
(
"f_asm:\n"
"jr $ra\n"
"nop\n"
);
void f(void) __asm__("f_asm");
int main(void)
{
f();
return 0;
}
使用mips-linux-gnu-gcc
主机上的Debian x64
进行编译时产生此错误:
/usr/lib/gcc-cross/mips-linux-gnu/6/../../../../mips-linux-gnu/bin/ld: /tmp/ccjejLxv.o: CALL16 reloc at 0x2c not against global symbol
/tmp/ccjejLxv.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
如果我添加.globl f_asm
,它会有效...但为什么这有必要?不能在mips
ABI上有本地功能吗?