forked from OSchip/llvm-project
ELF can handle some relocations of the form -sym + constant.
Remove code that was assuming that this would never work. Thanks to Colin LeMahie for finding and diagnosing the bug. llvm-svn: 251818
This commit is contained in:
parent
84f4cb8ba5
commit
dcbac6285a
|
@ -35,10 +35,6 @@ class raw_ostream;
|
|||
/// relocation modifiers apply to the closest symbol or the whole
|
||||
/// expression.
|
||||
///
|
||||
/// In the general form, SymbolB can only be defined if SymbolA is, and both
|
||||
/// must be in the same (non-external) section. The latter constraint is not
|
||||
/// enforced, since a symbol's section may not be known at construction.
|
||||
///
|
||||
/// Note that this class must remain a simple POD value class, because we need
|
||||
/// it to live in unions etc.
|
||||
class MCValue {
|
||||
|
@ -67,7 +63,6 @@ public:
|
|||
const MCSymbolRefExpr *SymB = nullptr,
|
||||
int64_t Val = 0, uint32_t RefKind = 0) {
|
||||
MCValue R;
|
||||
assert((!SymB || SymA) && "Invalid relocatable MCValue!");
|
||||
R.Cst = Val;
|
||||
R.SymA = SymA;
|
||||
R.SymB = SymB;
|
||||
|
|
|
@ -585,11 +585,6 @@ EvaluateSymbolicAdd(const MCAssembler *Asm, const MCAsmLayout *Layout,
|
|||
const MCSymbolRefExpr *A = LHS_A ? LHS_A : RHS_A;
|
||||
const MCSymbolRefExpr *B = LHS_B ? LHS_B : RHS_B;
|
||||
|
||||
// If we have a negated symbol, then we must have also have a non-negated
|
||||
// symbol in order to encode the expression.
|
||||
if (B && !A)
|
||||
return false;
|
||||
|
||||
Res = MCValue::get(A, B, Result_Cst);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
loope 0 # R_X86_64_PC8
|
||||
jmp -256 # R_X86_64_PC32
|
||||
.word 0x42 - . # R_X86_64_PC16
|
||||
|
||||
// CHECK: Section {
|
||||
// CHECK: Index:
|
||||
|
@ -13,7 +14,7 @@
|
|||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: Address: 0x0
|
||||
// CHECK-NEXT: Offset:
|
||||
// CHECK-NEXT: Size: 48
|
||||
// CHECK-NEXT: Size:
|
||||
// CHECK-NEXT: Link:
|
||||
// CHECK-NEXT: Info:
|
||||
// CHECK-NEXT: AddressAlignment: 8
|
||||
|
@ -21,5 +22,6 @@
|
|||
// CHECK-NEXT: Relocations [
|
||||
// CHECK-NEXT: 0x1 R_X86_64_PC8 - 0xFFFFFFFFFFFFFFFF
|
||||
// CHECK-NEXT: 0x3 R_X86_64_PC32 - 0xFFFFFFFFFFFFFEFC
|
||||
// CHECK-NEXT: 0x7 R_X86_64_PC16 - 0x42
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
|
|
Loading…
Reference in New Issue