LLVM 插桩 LLVM IR LandingPadInst Invoke 指令

2024-04-17 08:12

本文主要是介绍LLVM 插桩 LLVM IR LandingPadInst Invoke 指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

刚刚遇到的报错如下:

The unwind destination does not have an exception handling instruction!%170 = invoke noundef ptr @_ZN6icu_668TimeZone14createTimeZoneERKNS_13UnicodeStringE(ptr noundef nonnull align 8 dereferenceable(64) %8)to label %171 unwind label %253, !dbg !2355
The unwind destination does not have an exception handling instruction!%181 = invoke noundef nonnull align 8 dereferenceable(72) ptr @_ZN6icu_668TimeZone10getUnknownEv()to label %182 unwind label %253, !dbg !2356
The unwind destination does not have an exception handling instruction!%195 = invoke noundef signext i8 %194(ptr noundef nonnull align 8 dereferenceable(72) %170, ptr noundef nonnull align 8 dereferenceable(72) %181)to label %196 unwind label %253, !dbg !2358
The unwind destination does not have an exception handling instruction!%217 = invoke i64 (ptr, i64, ptr, ...) @zend_spprintf(ptr noundef nonnull %7, i64 noundef 0, ptr noundef nonnull @.str.2, ptr noundef %4, ptr noundef %160)to label %218 unwind label %253, !dbg !2363
The unwind destination does not have an exception handling instruction!invoke void @intl_errors_set(ptr noundef %3, i32 noundef 1, ptr noundef %228, i32 noundef 1)to label %229 unwind label %253, !dbg !2366
The unwind destination does not have an exception handling instruction!invoke void @_efree(ptr noundef %239)to label %240 unwind label %253, !dbg !2367
LandingPadInst not the first non-PHI instruction in the block.%254 = landingpad { ptr, i32 }cleanup, !dbg !2370
LLVM ERROR: Broken module found, compilation aborted!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: llc-17 -filetype=obj ext/intl/common/common_date.o -o ext/intl/common/common_date.o#0 0x00007f8f72562ce6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xccbce6)#1 0x00007f8f72560e80 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xcc9e80)#2 0x00007f8f72563380 (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xccc380)#3 0x00007f8f7186b420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)#4 0x00007f8f712c600b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)#5 0x00007f8f712a5859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)#6 0x00007f8f724c534c llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xc2e34c)#7 0x00007f8f724c5176 (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xc2e176)#8 0x00007f8f725aa8de (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xd138de)#9 0x00007f8f752acc7e llvm::LLParser::validateEndOfModule(bool) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0x3a15c7e)
#10 0x00007f8f752abda9 llvm::LLParser::Run(bool, llvm::function_ref<std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (llvm::StringRef, llvm::StringRef)>) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0x3a14da9)
#11 0x00007f8f752ea25b (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0x3a5325b)
#12 0x00007f8f752ea3f9 llvm::parseAssembly(llvm::MemoryBufferRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::SlotMapping*, llvm::function_ref<std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (llvm::StringRef, llvm::StringRef)>) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0x3a533f9)
#13 0x00007f8f727694da llvm::parseIR(llvm::MemoryBufferRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xed24da)
#14 0x00007f8f727698ac llvm::parseIRFile(llvm::StringRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::ParserCallbacks) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xed28ac)
#15 0x000055769b4b6e17 main (/usr/lib/llvm-17/bin/llc+0xfe17)
#16 0x00007f8f712a7083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#17 0x000055769b4b32be _start (/usr/lib/llvm-17/bin/llc+0xc2be)
fish: “llc-17 -filetype=obj ext/intl/c…” terminated by signal SIGABRT (Abort)

根据 CHATGPT4

这个错误信息表明你的 LLVM IR(中间表示)代码中存在一些问题,主要与异常处理有关。
具体来说,这个错误提示是在使用 invoke 指令时出现的,该指令用于调用可能抛出异常的函数。
如果调用的函数抛出了异常,控制权会转移到 unwind label 指定的标签。
但是,你的代码中指定的 unwind 目的地(标签 %253)缺少必要的异常处理指令。LandingPadInst not the first non-PHI instruction in the block 是另一个错误,
表明 landingpad 指令没有放在基本块的开始位置,或者没有紧跟在 PHI 指令之后。
landingpad 指令是用来处理异常的,它应该是基本块中第一个非 PHI 指令。为了解决这些问题,你需要确保:1.异常处理指令存在:检查 %253 标签所在的基本块是否包含了正确的异常处理指令,比如 landingpad 指令。
如果不存在,你需要添加适当的异常处理逻辑。2.landingpad 指令位置正确:确保每个使用 invoke 指令的基本块的 unwind 目的地都有一个 landingpad 指令,
并且它是第一个非 PHI 指令(如果有 PHI 指令的话)。3.你可以调整 LLVM IR 代码,确保每个可能抛出异常的 invoke 指令后都有正确配置的异常处理。
如果需要更具体的帮助来修改代码,你可以分享相关的基本块代码部分,我可以提供更具体的建议。

总结一下,就是说,如果有 LandingPadInst 指令,那么它必须是一个基本块的第一个非phi指令

这篇关于LLVM 插桩 LLVM IR LandingPadInst Invoke 指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911250

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

mysql中导入txt文件数据的操作指令

1 表tt的格式:    CREATE TABLE `tt` (   `ind` int NOT NULL auto_increment,   `name` char(100) default NULL,   PRIMARY KEY  (`ind`)  )   2 文件d.txt的内容示例:  1,a  2,b  3,c

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

探索Invoke:Python自动化任务的瑞士军刀

文章目录 探索Invoke:Python自动化任务的瑞士军刀背景:为何选择Invoke?`invoke`是什么?如何安装`invoke`?简单的`invoke`库函数使用方法场景应用:`invoke`在实际项目中的使用场景一:自动化测试场景二:代码格式化场景三:部署应用 常见问题与解决方案问题一:命令执行失败问题二:权限不足问题三:并发执行问题 总结 探索Invoke:P

matlab一些基本重要的指令

重点内容 运行MATLAB的帮助demo,在Command Window 输入 “demo”,或在Launch Pad 选项卡“demos” 任何时候都可以: 清除Command Window内容:clc 清除Figure Window(图形窗口) clf 清除workspace 变量内容: clear 注意:M脚本文件和输入指令中的变量都在workspace中,为避免变量冲突,一般在