我刚开始使用 LLVM。我正在阅读位于 lib/CodeGen/StackProtector.cpp 中的堆栈保护代码。在此文件中,InsertStackProtectors 函数将对 llvm.stackprotect 的调用插入到代码中:
// entry:
// StackGuardSlot = alloca i8*
// StackGuard = load __stack_chk_guard
// call void @llvm.stackprotect.create(StackGuard, StackGuardSlot)
// ...(Skip some lines)
CallInst::
Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector),
Args, "", InsPt);
这个llvm.strackprotect( http://llvm.org/docs/LangRef.html#llvm-stackprotector-intrinsic )似乎是llvm的一个内在函数,所以我试图找到这个函数的源代码。但是,我找不到它...
我确实在 include/llvm/IR/Intrinsics.td 中找到了这个函数的一行定义,但它没有说明它是如何实现的。
所以我的问题是:
- 我在哪里可以找到这个 llvm.strackprotect 函数的代码?
- 这些 *.td 文件的目的是什么?
非常感谢!