如何在mips上使用gcc在程序集中定义的函数中避免“CALL16重定向不对全局符号”

时间:2018-04-27 21:00:32

标签: gcc linker mips elf

此代码:

__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上有本地功能吗?

0 个答案:

没有答案