首页 > 解决方案 > 我可以通过 llvm opt 工具快速加载我的 llvm 通行证吗?

问题描述

我想快速加载我的通行证。我现在正在 Linux 上进行测试。首先我使用 swiftc 生成 llvm IR 代码

swiftc -emit-ir  test.swift -o test.ll
llvm-as-10 test.ll

其次,我使用 opt 加载 mypass.so。

opt-10 -load /pass/to/libmypass.so -mypass test.bc -o test.bc

然后生成obj文件

llc-10 -filetype=obj test.bc

下一个链接 swift 的基本库

clang -m64 test.o -L ./lib/swift/linux  -lswiftCore -lswiftSwiftOnoneSupport -o test

上次运行测试 LD_LIBRARY_PATH=/home/xxx/swift-5.4.1-RELEASE-ubuntu20.04/usr/lib/swift/linux/ ./test

但是我发现swift代码是否像print(“aa”)一样有标准输出,发生分段错误(核心转储),如果只有标准输入就像readLine()一样,发生总线错误(核心转储)。我试图通过这个过程没有加载mypass,还是错误的。如果代码中没有标准输出和标准输入,似乎没有问题。

标签: swiftclangllvmllvm-ir

解决方案


推荐阅读