| Issue |
52921
|
| Summary |
JITLink: __eh_frame emission/JIT EH frame registration on aarch64-darwin
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
dnadlinger
|
To be able to `unw_step` through JIT-ed frames on aarch64-darwin, it is necessary to emit __eh_frame unwind information, as there is no way to register compact unwind info with libunwind.
However, JITLink drops all that unwind information on MachO-arm64, as the `EHFrame{Splitter, EdgeFixer}` passes are only added to the default link graph on x86_64. This effectively makes `EHFrameRegistrationPlugin` a no-op.
Just adding the passes the same way as on x86_64 appears to work, although I haven't checked whether there are any extra relocations to support, …:
```diff
commit 57eb8c10025bdbca8f8260bd43a46d0aca369fe8 (HEAD -> julia-main, dnadlinger/julia-main)
Author: David Nadlinger <[email protected]>
Date: Thu Dec 30 04:23:23 2021 +0100
[JITLink] Also include EHFrame* passes on MachO_arm64
Without the non-compact unwind info there is no way to register
the EH frames with libunwind (e.g. for backtrace generation).
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
index f2a029d35cd5..4d958b302ff9 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
@@ -705,6 +705,10 @@ void link_MachO_arm64(std::unique_ptr<LinkGraph> G,
Config.PrePrunePasses.push_back(
CompactUnwindSplitter("__LD,__compact_unwind"));
+ Config.PrePrunePasses.push_back(EHFrameSplitter("__TEXT,__eh_frame"));
+ Config.PrePrunePasses.push_back(EHFrameEdgeFixer("__TEXT,__eh_frame",
+ 8, Delta64, Delta32, NegDelta32));
+
// Add an in-place GOT/Stubs pass.
Config.PostPrunePasses.push_back(
PerGraphGOTAndPLTStubsBuilder_MachO_arm64::asPass);
```
(There is also the somewhat related, non-JITLink-specific issue of __eh_frame sometimes being elided, for which Julia currently carries a patch: https://github.com/JuliaLang/llvm-project/commit/60e041894288848e37870c42749a1aabcc2c2274.)
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs