forked from OSchip/llvm-project
ADD64ri32 sign extends its argument, so we need to use a R_X86_64_32S.
Fixes PR9934. We really need to start tblgening the relocation info :-( llvm-svn: 131669
This commit is contained in:
parent
9e6a8cca5d
commit
0fc5e89c82
|
@ -1015,7 +1015,8 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS,
|
|||
} else {
|
||||
unsigned FixupKind;
|
||||
// FIXME: Is there a better way to know that we need a signed relocation?
|
||||
if (MI.getOpcode() == X86::MOV64ri32 ||
|
||||
if (MI.getOpcode() == X86::ADD64ri32 ||
|
||||
MI.getOpcode() == X86::MOV64ri32 ||
|
||||
MI.getOpcode() == X86::MOV64mi32 ||
|
||||
MI.getOpcode() == X86::PUSH64i32)
|
||||
FixupKind = X86::reloc_signed_4byte;
|
||||
|
|
|
@ -17,6 +17,7 @@ bar:
|
|||
pushq $bar
|
||||
movq foo(%rip), %rdx
|
||||
leaq foo-bar(%r14),%r14
|
||||
addq $bar,%rax # R_X86_64_32S
|
||||
|
||||
|
||||
// CHECK: # Section 0x00000001
|
||||
|
@ -106,6 +107,12 @@ bar:
|
|||
// CHECK-NEXT: ('r_type', 0x00000002)
|
||||
// CHECK-NEXT: ('r_addend', 0x0000005c)
|
||||
|
||||
// CHECK: # Relocation 0x0000000e
|
||||
// CHECK-NEXT: (('r_offset', 0x00000063)
|
||||
// CHECK-NEXT: ('r_sym', 0x00000002)
|
||||
// CHECK-NEXT: ('r_type', 0x0000000b)
|
||||
// CHECK-NEXT: ('r_addend', 0x00000000)
|
||||
|
||||
// CHECK: # Symbol 0x00000002
|
||||
// CHECK: (('st_name', 0x00000000) # ''
|
||||
// CHECK: ('st_bind', 0x00000000)
|
||||
|
|
Loading…
Reference in New Issue