c-LLVM看不到静态函数



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

因此,我将C代码修改为#include <linux/my_header.h>,在那里我有打印机功能。

页眉看起来像这样。

#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 modulen";
}
else {
// insert function in the code
}

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

任何人都知道如何制作LLVM";参见";静态导入/包含的函数?

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

static意味着对该函数的所有调用对这个编译程序现在都是可见的,并且意味着如果编译器没有看到这样的调用,那么它可以跳过编译该函数的任何输出,因为作为程序员,你已经承诺没有人会想要它。

最新更新