2014-06-19 26 views

回答

0

如果存在compat条目,则几乎可以肯定意味着系统调用原型已经更改,并且为了兼容性维护了以前原型的一个版本。通常你会看到compat_sys_xxx只是调用了sys_xxx,其参数适当地转换了(或者两者都调用一个具有稍微不同转换的通用函数)。作为一个或多或少随机的例子,compat_sys_msgsnd带有三个“int”参数,后面跟着一个指向compat_msgbuf结构的指针(其中第一个表面上“长”的字段被强制为32位大小)。 OTOH,sys_msgsnd以不同的顺序列出参数,并且选择参数类型以适当地为体系结构进行变形(即根据自然长整数大小的长浮点数,size_t在一个地方替换int等)。

毫无疑问,系统调用接口被改变了,因为当移动到不同的(非i386)体系结构时,原始接口在某种程度上是不明确的。 compat_版本允许现有的二进制文件无需修改即可继续工作。

相关问题