gpt4 book ai didi

LLVM 的 llvm.stackprotect

转载 作者:行者123 更新时间:2023-12-04 04:35:44 24 4
gpt4 key购买 nike

我刚刚开始使用 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 文件的用途是什么?

  • 非常感谢!

    最佳答案

    .td文件是 LLVM 使用代码生成来减少样板代码的数量。在这种特殊情况下,./include/llvm/IR/Intrinsics.gen在构建目录中生成并包含描述在 .td 中指定的内在函数的代码。文件。

    至于stackprotector ,后端有一堆代码来处理它。参见例如 lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp - 在 SelectionDAGBuilder::visitIntrinsicCall它生成实现这个内在的实际 DAG 节点

    关于LLVM 的 llvm.stackprotect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775744/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com