在QEMU存储库中找不到i386目标的compute_all_xxx函数的定义?

时间:2016-11-09 16:04:19

标签: qemu emulation x86-emulation eflags

我正在阅读Qemu的源代码并想知道Qemu如何为x86处理器模拟eflags,在target-i386/cc-helper.c文件中我发现像compute_all_addw这样的函数可以完成工作,我想知道Qemu如何实现那些功能,但我找不到所有这些功能的定义。我错过了什么?请帮助。

1 个答案:

答案 0 :(得分:1)

QEMU在这里经常使用一种技巧 - 使用C预处理器创建多个非常相似的函数,而不必手动将它们全部写出来。

在这种特定情况下,代码位于target-i386 / cc_helper_template.h中:

spark-submit

其中static int glue(compute_all_add, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { int cf, pf, af, zf, sf, of; [...] } 是一个只将其参数组合在一起的宏。基于glue()的值,先前在.h文件中定义了SUFFIXDATA_TYPESHIFT然后target-i386/cc_helper.c模板.h文件多次,每次都以不同方式定义#include。这会导致从单个模板生成SHIFTcompute_all_addbcompute_all_addwcompute_all_addl的函数定义。

一般情况下,如果你在QEMU的源代码中找不到'grep'的函数定义,那么自动生成这样的机会很好 - 搜索函数名的子字符串可能会有所帮助。