首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LLVM的llvm.stackprotect

LLVM的llvm.stackprotect
EN

Stack Overflow用户
提问于 2013-11-04 19:43:11
回答 1查看 358关注 0票数 2

我刚开始学习LLVM。我正在阅读堆栈保护代码,它位于lib/CodeGen/StackProtector.cpp中。在此文件中,InsertStackProtectors函数将对代码插入对llvm.stackprotect的调用:

代码语言:javascript
复制
  //   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文件的目的是什么?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-04 22:01:40

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19775744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档