Index: lld/trunk/ELF/Target.cpp =================================================================== --- lld/trunk/ELF/Target.cpp +++ lld/trunk/ELF/Target.cpp @@ -532,6 +532,7 @@ 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)); } Index: lld/trunk/test/ELF/tls-dynamic-i686.s =================================================================== --- lld/trunk/test/ELF/tls-dynamic-i686.s +++ lld/trunk/test/ELF/tls-dynamic-i686.s @@ -25,7 +25,7 @@ .align 4 tls2: .long 0 - .size tls2, 4 + .size tls2, 8 .section .text .globl _start @@ -42,7 +42,7 @@ 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 @@ // 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