1

在程序上运行 KLEE 时遇到错误“KLEE:错误:未知内在:llvm.objectsize.i64.p0i8”。

我知道我应该在 IntrinsicCleaner pass 中添加对它的支持。但是我没有找到这个内在函数的文档。有人知道这个内在函数的目的吗?

以下是涉及该功能的LLCM代码行:
%6 = call i64 @llvm.objectsize.i64.p0i8(i8* %5, i1 false)

4

2 回答 2

1

它在LLVM 文档中是正确的:

declare i64 @llvm.objectsize.i64(i8* <object>, i1 <min>)

llvm.objectsize 内部函数旨在向优化器提供信息,以便在编译时确定 a) 操作(如 memcpy)是否会溢出与对象对应的缓冲区,或 b) 不需要运行时检查溢出. 在此上下文中的对象表示特定类、结构、数组或其他对象的分配。

于 2014-10-29T12:16:33.597 回答
0

我将扩展Marco的答案以解决丁宝的问题。'p0' 表示指向地址空间 0 的指针;'i8' 表示一个 8 位整数。请参阅LLLVM 语言参考

于 2021-03-10T03:54:46.197 回答