[lld] [LLD][COFF] Implement support for hybrid IAT on ARM64X (PR #124189)
Martin Storsjö via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 24 02:14:09 PST 2025
================
@@ -1203,8 +1207,23 @@ void Arm64XDynamicRelocEntry::writeTo(uint8_t *buf) const {
}
break;
case IMAGE_DVRT_ARM64X_FIXUP_TYPE_DELTA:
- case IMAGE_DVRT_ARM64X_FIXUP_TYPE_ZEROFILL:
- llvm_unreachable("unsupported type");
+ int delta = value.get();
+ // Negative offsets use a sign bit in the header.
+ if (delta < 0) {
+ *out |= 1 << 14;
+ delta = -delta;
+ }
+ // Depending on the value, the delta is encoded with a shift of 2 or 3 bits.
+ if (delta & 7) {
+ assert(!(delta & 3));
----------------
mstorsjo wrote:
Can you trigger this assert with quirky user input, or is it a true linker bug if we hit it?
https://github.com/llvm/llvm-project/pull/124189
More information about the llvm-commits
mailing list