在此页面上:http://www.scs.stanford.edu/histar/src/pkg/uclibc/libc/sysdeps/linux/x86_64/sigaction.c
我看到这两行:
extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
extern void restore (void) asm ("__restore") attribute_hidden;
这是什么语法?是否将restore_rt
设置为内联asm("__restore_rt")
作为其正文的函数?
谢谢!
答案 0 :(得分:3)
显然,这是一种替换C函数的符号名称的方法......
为了更改函数的名称,您需要一个原型声明,因为编译器不会在函数定义中接受asm关键字:
extern long Calc(void) asm ("CALCULATE");
中搜索“替换C函数的符号名称”调用函数Calc()将创建汇编程序指令以调用函数CALCULATE。
答案 1 :(得分:3)
在函数声明中使用asm
是名为GCC的Clang/LLVM扩展名(也由asm-label支持)。它设置汇编程序和链接器已知的函数名称。
BTW,代码attribute_hidden
可能是某些function attribute的宏,可能是__attribute__ ((visibility ("hidden")))