在编译一个老版本for x86的uboot,其中用到了内联汇编如下
extern char realmode_enter;
.....
__asm__ __volatile__(
"lcall $0x20,%0"
:
:"i"(&realmode_enter) );
编译的时候编译器报错,
realmode.c:67:2: warning asm’ operand 0 probably does not match constraints
67 | __asm__ __volatile__(
| ^~~~~~~
realmode.c:67:2: error: impossible constraint in ‘asm’
这个应该是新版本gcc和旧版本不兼容的问题,应该是"i"(&realmode_enter)引起的,试过改成"i"(55)就可以了。问题是这样跳转的地址就不是
realmode_enter了,现在的gcc对于这样的立即数应该怎么写呢?
--
修改:wjie FROM 114.214.197.*
FROM 114.214.197.*