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 可见,并且暗示如果编译器看不到这样的调用,然后它可以跳过编译函数的任何输出,因为你作为程序员已经承诺没有人会想要它。
我正在尝试检测 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 可见,并且暗示如果编译器看不到这样的调用,然后它可以跳过编译函数的任何输出,因为你作为程序员已经承诺没有人会想要它。