mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 22:07:27 +00:00
[RuntimeDyld][MachO][AArch64] Add assertion to check for duplicate addend definition.
In MachO for AArch64 it is possible to have an explicit addend defined by the ARM64_RELOC_ADDEND relocation or having an addend encoded within the instruction. Only one of them are allowed per relocation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213687 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5b50a3c769
commit
214c554b64
@ -41,16 +41,14 @@ public:
|
||||
// addend for the following relocation. If found: (1) store the associated
|
||||
// addend, (2) consume the next relocation, and (3) use the stored addend to
|
||||
// override the addend.
|
||||
bool HasExplicitAddend = false;
|
||||
int64_t ExplicitAddend = 0;
|
||||
if (Obj.getAnyRelocationType(RelInfo) == MachO::ARM64_RELOC_ADDEND) {
|
||||
assert(!Obj.getPlainRelocationExternal(RelInfo));
|
||||
assert(!Obj.getAnyRelocationPCRel(RelInfo));
|
||||
assert(Obj.getAnyRelocationLength(RelInfo) == 2);
|
||||
HasExplicitAddend = true;
|
||||
int64_t RawAddend = Obj.getPlainRelocationSymbolNum(RelInfo);
|
||||
// Sign-extend the 24-bit to 64-bit.
|
||||
ExplicitAddend = (RawAddend << 40) >> 40;
|
||||
ExplicitAddend = SignExtend64(RawAddend, 24);
|
||||
++RelI;
|
||||
RelInfo = Obj.getRelocation(RelI->getRawDataRefImpl());
|
||||
}
|
||||
@ -59,7 +57,9 @@ public:
|
||||
RelocationValueRef Value(
|
||||
getRelocationValueRef(ObjImg, RelI, RE, ObjSectionToID, Symbols));
|
||||
|
||||
if (HasExplicitAddend) {
|
||||
assert((ExplicitAddend == 0 || RE.Addend == 0) && "Relocation has "\
|
||||
"ARM64_RELOC_ADDEND and embedded addend in the instruction.");
|
||||
if (ExplicitAddend) {
|
||||
RE.Addend = ExplicitAddend;
|
||||
Value.Addend = ExplicitAddend;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user