LLVM 看不到静态函数

LLVM cannot see static function

我正在尝试检测 linux 内核代码,以便在 BitCast 指令之后立即在每个函数中插入一个函数调用。

所以我将 C 代码修改为 #include <linux/my_header.h> 我有打印机功能的地方。

header 看起来像这样。

#ifndef __header_ID
#define __header_ID

static inline void print_typecast(...){
    printk(...);
}
#endif

然后我使用 Xclang 加载我的 FunctionPass,它看起来像这样。

// M is of type llvm::Module*
Function* f = M->getFunction("print_typecast");
if (f == nullptr) {
    errs() << "Function not found in the module\n";
}
else {
    // insert function in the code
}

然而,我的通行证从未在模块中找到该函数。当我删除 static 时,它会找到该函数,但最后编译步骤中的链接器会抱怨重复定义。

有人知道如何让 LLVM“看到”静态 imported/included 函数吗?

编辑:我也走到了极端,我在内核代码的每个 c 文件中直接编写了相同的函数(#include <linux/kernel.h>

static 意味着所有对此函数的调用都将对 this 编译器 now 可见,并且暗示如果编译器看不到这样的调用,然后它可以跳过编译函数的任何输出,因为你作为程序员已经承诺没有人会想要它。