summaryrefslogtreecommitdiff
path: root/user/llvm18/dyld-elf-ppc32.patch
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2024-06-16 16:46:56 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2024-06-16 16:46:56 -0500
commite932f36c65e02632d8ffe916a44d444e6087abb5 (patch)
treebdd33079b71ba2e7ac576f6248426f8fb253c1d0 /user/llvm18/dyld-elf-ppc32.patch
parenta5f4a256412f75141511efb5087e9e8637966f07 (diff)
downloadpackages-awilfox/llvm18.tar.gz
packages-awilfox/llvm18.tar.bz2
packages-awilfox/llvm18.tar.xz
packages-awilfox/llvm18.zip
user/llvm18: New packageawilfox/llvm18
Functional, but not ready yet because of upstream bustage with M68k[1]. [1]: https://github.com/llvm/llvm-project/issues/94726
Diffstat (limited to 'user/llvm18/dyld-elf-ppc32.patch')
-rw-r--r--user/llvm18/dyld-elf-ppc32.patch24
1 files changed, 24 insertions, 0 deletions
diff --git a/user/llvm18/dyld-elf-ppc32.patch b/user/llvm18/dyld-elf-ppc32.patch
new file mode 100644
index 000000000..7fb744169
--- /dev/null
+++ b/user/llvm18/dyld-elf-ppc32.patch
@@ -0,0 +1,24 @@
+Author: A. Wilcox <awilfox@adelielinux.org>
+Upstream-Status: Pending
+
+This implements the R_PPC_REL32 relocation type, which is needed for the
+OrcJIT to work properly on 32-bit PowerPC.
+
+Needs more tests before submitting upstream, but seems to DTRT.
+
+--- llvm-14.0.6.src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp.old 2022-06-22 16:46:24.000000000 +0000
++++ llvm-14.0.6.src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp 2022-11-28 06:33:12.239921624 +0000
+@@ -830,6 +830,13 @@
+ case ELF::R_PPC_ADDR16_HA:
+ writeInt16BE(LocalAddress, applyPPCha(Value + Addend));
+ break;
++ case ELF::R_PPC_REL32:
++ uint32_t FinalAddress = Section.getLoadAddressWithOffset(Offset);
++ int64_t delta = static_cast<int64_t>(Value - FinalAddress + Addend);
++ if (SignExtend64<32>(delta) != delta)
++ llvm_unreachable("Relocation R_PPC_REL32 overflow");
++ writeInt32BE(LocalAddress, delta);
++ break;
+ }
+ }
+