微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

llvm/ompiler-rt sanitizer 不支持 aarch64 ilp32:asan_interceptors_vfork.S 与 aarch64 ilp32 不兼容

如何解决llvm/ompiler-rt sanitizer 不支持 aarch64 ilp32:asan_interceptors_vfork.S 与 aarch64 ilp32 不兼容

我正在从 compiler-rt(https://github.com/llvm/llvm-project) 构建 libasan.so,在使用 https://patches.linaro.org/patch/129368/ 修补源代码后,所有 cpp 都可以正确构建。 但是我被 ASM (asan/asan_interceptors_vfork.S) 阻止了,在 aarch64 中这指的是 https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S

错误信息:

aarch64_be-linux-gnu/bin/ld: warning: alignment 4 of symbol `_ZN14__interception10real_vforkE' in CMakeFiles/asan.dir/asan/asan_interceptors.cpp.o is smaller than 8 in CMakeFiles/asan.dir/asan/asan_interceptors_vfork.S.o
aarch64_be-linux-gnu/7.3.0/../../../../aarch64_be-linux-gnu/bin/ld: CMakeFiles/asan.dir/asan/asan_interceptors_vfork.S.o: relocation R_AARCH64_P32_ADR_PREL_PG_HI21 against symbol `_ZN14__interception10real_vforkE' which may bind externally can not be used when making a shared object; recompile with -fPIC
CMakeFiles/asan.dir/asan/asan_interceptors_vfork.S.o: in function `__interceptor_vfork':
llvm-project/compiler-rt/lib/./sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S:19:(.text+0x10): dangerous relocation: unsupported relocation
llvm-project/compiler-rt/lib/./sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S:20:(.text+0x14): relocation truncated to fit: R_AARCH64_P32_LDST64_ABS_LO12_NC against symbol `__interception::real_vfork' defined in .bss section in CMakeFiles/asan.dir/asan/asan_interceptors.cpp.o
aarch64_be-linux-gnu/7.3.0/../../../../aarch64_be-linux-gnu/bin/ld: /cdev/ASAN/llvm-project/compiler-rt/lib/./sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S:20: warning: one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined
collect2: error: ld returned 1 exit status
lib/CMakeFiles/asan.dir/build.make:1770: recipe for target 'lib/libasan.so' Failed

我猜背后的原因是 asan_interceptors_vfork.S 是认的 ILP64 格式?

ps:我在构建 asan_interceptors_vfork.S.o 时确实有 -fPIC

解决方法

需要修改compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S:

ldr     x0,[x0,:lo12:_ZN14__interception10real_vforkE]

应该

ldr     w0,:lo12:_ZN14__interception10real_vforkE]

在构建 ILP32 代码时。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。