如果寄存器包含在clobber列表中,则GCC Inline asm会产生编译错误

时间:2017-09-15 13:55:13

标签: gcc x86-64 system-calls inline-assembly

关于GCC扩展ASM有无数问题,但似乎没有人能够解决我的问题。我正在尝试编写一个简单的代码块来触发对open的系统调用。我想出了以下内容:

int fd;
char file[] = "/path/to/file";
asm volatile ("int $0x80"
               : "=a"(fd) 
               : "0"(__SYS_open), "D"(file), "S"(O_RDONLY)
               : "cc","%edi","%esi");

尝试编译包含上述asm引用的代码会导致:

error: ‘asm’ operand has impossible constraints

我注意到从clobber列表中删除"%edi","%esi"允许代码编译而不会出错。我可以在clobber列表中包含我没有在约束中明确请求的寄存器(例如ecx),所以也许我误解了clobber列表。

将执行此代码的二进制文件是x86_64。

0 个答案:

没有答案