forked from OSchip/llvm-project
[ELF] Account for R_386_TLS_LDO_32 addend
This relocation type has an implicit addend. Account for it when processing the relocation. Add an offset to an existing test to ensure it gets processed correctly. Fixes PR32634. Differential Revision: https://reviews.llvm.org/D32336 llvm-svn: 301207
This commit is contained in:
parent
3e02538a02
commit
b573b4b04d
|
@ -532,6 +532,7 @@ int64_t X86TargetInfo::getImplicitAddend(const uint8_t *Buf,
|
|||
case R_386_GOTPC:
|
||||
case R_386_PC32:
|
||||
case R_386_PLT32:
|
||||
case R_386_TLS_LDO_32:
|
||||
case R_386_TLS_LE:
|
||||
return SignExtend64<32>(read32le(Buf));
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ tls1:
|
|||
.align 4
|
||||
tls2:
|
||||
.long 0
|
||||
.size tls2, 4
|
||||
.size tls2, 8
|
||||
|
||||
.section .text
|
||||
.globl _start
|
||||
|
@ -42,7 +42,7 @@ leal tls2@dtpoff(%eax),%edx
|
|||
|
||||
leal tls2@tlsldm(%ebx),%eax
|
||||
call __tls_get_addr@plt
|
||||
leal tls2@dtpoff(%eax),%edx
|
||||
leal tls2@dtpoff+4(%eax),%edx
|
||||
|
||||
movl %gs:0,%eax
|
||||
addl tls0@gotntpoff(%ebx),%eax
|
||||
|
@ -91,7 +91,7 @@ addl tls1@gotntpoff(%ebx),%eax
|
|||
// DIS-NEXT: 1023: 8d 90 08 00 00 00 leal 8(%eax), %edx
|
||||
// DIS-NEXT: 1029: 8d 83 f0 ff ff ff leal -16(%ebx), %eax
|
||||
// DIS-NEXT: 102f: e8 3c 00 00 00 calll 60
|
||||
// DIS-NEXT: 1034: 8d 90 08 00 00 00 leal 8(%eax), %edx
|
||||
// DIS-NEXT: 1034: 8d 90 0c 00 00 00 leal 12(%eax), %edx
|
||||
// Initial exec model:
|
||||
// DIS-NEXT: 103a: 65 a1 00 00 00 00 movl %gs:0, %eax
|
||||
// DIS-NEXT: 1040: 03 83 f8 ff ff ff addl -8(%ebx), %eax
|
||||
|
|
Loading…
Reference in New Issue