首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用llvm-ir分割断层

用llvm-ir分割断层
EN

Stack Overflow用户
提问于 2014-02-01 13:26:41
回答 1查看 1.1K关注 0票数 0

有人能告诉我,这个导致分段错误的LLVM代码有什么问题,以及如何解决它?

代码语言:javascript
复制
%mytype = type {i32 (...)**}
%mytype2 = type {i32, %mytype**}
...
%obj = load %mytype2** %myobj
%get = getelementptr inbounds %mytype2* %obj, i32 0, i32 1
%ml = mul i32 4, 4
%naj = call noalias i8* @_Znaj(i32 %ml)
%cast = bitcast i8* %naj to %mytype**
store %mytype** %cast, %mytype*** %get

%get2 = getelementptr %mytype** %get, i32 0

%ld = load %mytype** %get2
EN

回答 1

Stack Overflow用户

发布于 2014-02-01 14:46:48

线

代码语言:javascript
复制
%get2 = getelementptr %mytype** %get, i32 0

是非法的,因为%get的类型是%mytype***,而不是%mytype**。而且,由于gep something i32 0总是一个nop,我猜你真的想在这里有别的东西。

通常,我建议在您的IR上使用LLVM验证通行证 (运行opt -verify)来检查它是否合法。您也可以尝试我的用于Eclipse的IR编辑器插件,它也不起作用,但是给您一个很好的GUI反馈:

您应该将代码修改为合法的:

代码语言:javascript
复制
%get2 = load %mytype*** %get
%ld = load %mytype** %get2

如果在运行时运行时得到分段错误,则意味着第一次加载或第二次加载访问了未分配的内存。要找到原因,您需要了解如何分配%myobj对象及其字段。

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

https://stackoverflow.com/questions/21498622

复制
相关文章

相似问题

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