diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -1395,13 +1395,6 @@ if (!hasRelocationAddend()) return true; } - - // Most TLS relocations use a got, so they need the symbol. Even those that - // are just an offset (@tpoff), require a symbol in gold versions before - // 5efeedf61e4fe720fd3e9a08e6c91c10abb66d42 (2014-09-26) which fixed - // http://sourceware.org/PR16773. - if (Flags & ELF::SHF_TLS) - return true; } // If the symbol is a thumb function the final relocation must set the lowest diff --git a/llvm/test/CodeGen/SPARC/tls.ll b/llvm/test/CodeGen/SPARC/tls.ll --- a/llvm/test/CodeGen/SPARC/tls.ll +++ b/llvm/test/CodeGen/SPARC/tls.ll @@ -76,8 +76,8 @@ ; v8abs-obj: Relocations [ -; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 local_symbol 0x0 -; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 local_symbol 0x0 +; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 .tbss 0x0 +; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 .tbss 0x0 ; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_ 0x0 ; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_ 0x0 ; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_HI22 extern_symbol 0x0 @@ -87,8 +87,8 @@ ; v8abs-obj: ] ; v9abs-obj: Relocations [ -; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 local_symbol 0x0 -; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 local_symbol 0x0 +; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 .tbss 0x0 +; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 .tbss 0x0 ; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_H44 _GLOBAL_OFFSET_TABLE_ 0x0 ; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_M44 _GLOBAL_OFFSET_TABLE_ 0x0 ; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_L44 _GLOBAL_OFFSET_TABLE_ 0x0 @@ -102,13 +102,13 @@ ; pic-obj: Section {{.*}} .rela.text { ; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC22 _GLOBAL_OFFSET_TABLE_ 0x4 ; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_ 0x8 -; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_HIX22 local_symbol 0x0 -; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_HI22 local_symbol 0x0 -; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_LO10 local_symbol 0x0 -; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_ADD local_symbol 0x0 -; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_LOX10 local_symbol 0x0 -; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_CALL local_symbol 0x0 -; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_ADD local_symbol 0x0 +; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_HIX22 .tbss 0x0 +; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_HI22 .tbss 0x0 +; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_LO10 .tbss 0x0 +; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_ADD .tbss 0x0 +; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_LOX10 .tbss 0x0 +; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_CALL .tbss 0x0 +; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_ADD .tbss 0x0 ; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC22 _GLOBAL_OFFSET_TABLE_ 0x4 ; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_ 0x8 ; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_GD_HI22 extern_symbol 0x0 diff --git a/llvm/test/MC/ELF/relocation-386.s b/llvm/test/MC/ELF/relocation-386.s --- a/llvm/test/MC/ELF/relocation-386.s +++ b/llvm/test/MC/ELF/relocation-386.s @@ -125,6 +125,7 @@ .byte foo .section zedsec,"awT",@progbits +.globl zed zed: .long 0 diff --git a/llvm/test/MC/PowerPC/tls-ld-v2-abi.s b/llvm/test/MC/PowerPC/tls-ld-v2-abi.s --- a/llvm/test/MC/PowerPC/tls-ld-v2-abi.s +++ b/llvm/test/MC/PowerPC/tls-ld-v2-abi.s @@ -137,7 +137,7 @@ mtlr 0 blr - .type i,@object + .globl i .section .tdata,"awT",@progbits .p2align 2 i: diff --git a/llvm/test/MC/PowerPC/tls-le-v2-abi.s b/llvm/test/MC/PowerPC/tls-le-v2-abi.s --- a/llvm/test/MC/PowerPC/tls-le-v2-abi.s +++ b/llvm/test/MC/PowerPC/tls-le-v2-abi.s @@ -66,7 +66,7 @@ lwax 3, 3, 13 blr - .type i,@object + .globl i .section .tdata,"awT",@progbits .p2align 2 i: diff --git a/llvm/test/MC/Sparc/sparc-tls-relocations.s b/llvm/test/MC/Sparc/sparc-tls-relocations.s --- a/llvm/test/MC/Sparc/sparc-tls-relocations.s +++ b/llvm/test/MC/Sparc/sparc-tls-relocations.s @@ -10,12 +10,12 @@ ! REL: Arch: sparc ! REL: Relocations [ -! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 Local 0x0 -! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 Local 0x0 -! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_HIX22 Local 0x0 -! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_HI22 Local 0x0 -! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_LO10 Local 0x0 -! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_LOX10 Local 0x0 +! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 .tbss 0x0 +! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 .tbss 0x0 +! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_HIX22 .tbss 0x0 +! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_HI22 .tbss 0x0 +! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_LO10 .tbss 0x0 +! REL: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_LOX10 .tbss 0x0 ! REL: ] @@ -29,13 +29,13 @@ ! LE_HIX22/LE_LOX10 ! OBJDUMP: {{[0-9,a-f]+}}: 31 00 00 00 sethi 0, %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_HIX22 Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_HIX22 .tbss ! ASM: sethi %tle_hix22(Local), %i0 ! encoding: [0x31,0x00,0x00,0x00] ! ASM: ! fixup A - offset: 0, value: %tle_hix22(Local), kind: fixup_sparc_tls_le_hix22 sethi %tle_hix22(Local), %i0 ! OBJDUMP: {{[0-9,a-f]+}}: b0 1e 20 00 xor %i0, 0, %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_LOX10 Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_LOX10 .tbss ! ASM: xor %i0, %tle_lox10(Local), %i0 ! encoding: [0xb0,0x1e,0x20,0x00] ! ASM: ! fixup A - offset: 0, value: %tle_lox10(Local), kind: fixup_sparc_tls_le_lox10 xor %i0, %tle_lox10(Local), %i0 @@ -46,44 +46,44 @@ ! LDO_HIX22/LDO_LOX10/LDO_ADD/LDM_HI22/LDM_LO10/LDM_ADD/LDM_CALL ! OBJDUMP: {{[0-9,a-f]+}}: 33 00 00 00 sethi 0, %i1 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_HIX22 Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_HIX22 .tbss ! ASM: sethi %tldo_hix22(Local), %i1 ! encoding: [0x33,0b00AAAAAA,A,A] ! ASM: ! fixup A - offset: 0, value: %tldo_hix22(Local), kind: fixup_sparc_tls_ldo_hix22 sethi %tldo_hix22(Local), %i1 ! OBJDUMP: {{[0-9,a-f]+}}: 35 00 00 00 sethi 0, %i2 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_HI22 Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_HI22 .tbss ! ASM: sethi %tldm_hi22(Local), %i2 ! encoding: [0x35,0b00AAAAAA,A,A] ! ASM: ! fixup A - offset: 0, value: %tldm_hi22(Local), kind: fixup_sparc_tls_ldm_hi22 sethi %tldm_hi22(Local), %i2 ! OBJDUMP: {{[0-9,a-f]+}}: b4 06 a0 00 add %i2, 0, %i2 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_LO10 Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_LO10 .tbss ! ASM: add %i2, %tldm_lo10(Local), %i2 ! encoding: [0xb4,0x06,0b101000AA,A] ! ASM: ! fixup A - offset: 0, value: %tldm_lo10(Local), kind: fixup_sparc_tls_ldm_lo10 add %i2, %tldm_lo10(Local), %i2 ! OBJDUMP: {{[0-9,a-f]+}}: 90 06 00 1a add %i0, %i2, %o0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_ADD Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_ADD .tbss ! ASM: add %i0, %i2, %o0, %tldm_add(Local) ! encoding: [0x90,0x06,0x00,0x1a] ! ASM: ! fixup A - offset: 0, value: %tldm_add(Local), kind: fixup_sparc_tls_ldm_add add %i0, %i2, %o0, %tldm_add(Local) ! OBJDUMP: {{[0-9,a-f]+}}: b0 1e 60 00 xor %i1, 0, %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_LOX10 Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_LOX10 .tbss ! ASM: xor %i1, %tldo_lox10(Local), %i0 ! encoding: [0xb0,0x1e,0b011000AA,A] ! ASM: ! fixup A - offset: 0, value: %tldo_lox10(Local), kind: fixup_sparc_tls_ldo_lox10 xor %i1, %tldo_lox10(Local), %i0 ! OBJDUMP: {{[0-9,a-f]+}}: 40 00 00 00 call 0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_CALL Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_CALL .tbss ! ASM: call __tls_get_addr, %tldm_call(Local) ! encoding: [0x40,0x00,0x00,0x00] ! ASM: ! fixup A - offset: 0, value: %tldm_call(Local), kind: fixup_sparc_tls_ldm_call call __tls_get_addr, %tldm_call(Local) nop ! OBJDUMP: {{[0-9,a-f]+}}: 90 02 00 18 add %o0, %i0, %o0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_ADD Local +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_ADD .tbss ! ASM: add %o0, %i0, %o0, %tldo_add(Local) ! encoding: [0x90,0x02,0x00,0x18] ! ASM: ! fixup A - offset: 0, value: %tldo_add(Local), kind: fixup_sparc_tls_ldo_add add %o0, %i0, %o0, %tldo_add(Local)