[ELF] Emit DF_STATIC_TLS only for -shared · llvm/llvm-project@6ca8fde

4 files changed

lines changed

Original file line numberDiff line numberDiff line change

@@ -1382,7 +1382,7 @@ template <class ELFT> void DynamicSection<ELFT>::finalizeContents() {

13821382

}

13831383

if (!config->zText)

13841384

dtFlags |= DF_TEXTREL;

1385-

if (config->hasTlsIe)

1385+

if (config->hasTlsIe && config->shared)

13861386

dtFlags |= DF_STATIC_TLS;

13871387
13881388

if (dtFlags)

Original file line numberDiff line numberDiff line change

@@ -14,8 +14,8 @@

1414

// GOTREL-NEXT: SHF_ALLOC

1515

// GOTREL-NEXT: SHF_WRITE

1616

// GOTREL-NEXT: ]

17-

// GOTREL-NEXT: Address: 0x402258

18-

// GOTREL-NEXT: Offset: 0x258

17+

// GOTREL-NEXT: Address: 0x402250

18+

// GOTREL-NEXT: Offset: 0x250

1919

// GOTREL-NEXT: Size: 8

2020

// GOTREL-NEXT: Link: 0

2121

// GOTREL-NEXT: Info: 0

@@ -24,8 +24,8 @@

2424

// GOTREL-NEXT: }

2525

// GOTREL: Relocations [

2626

// GOTREL-NEXT: Section ({{.*}}) .rel.dyn {

27-

// GOTREL-NEXT: 0x402258 R_386_TLS_TPOFF tlsshared0

28-

// GOTREL-NEXT: 0x40225C R_386_TLS_TPOFF tlsshared1

27+

// GOTREL-NEXT: 0x402250 R_386_TLS_TPOFF tlsshared0

28+

// GOTREL-NEXT: 0x402254 R_386_TLS_TPOFF tlsshared1

2929

// GOTREL-NEXT: }

3030

// GOTREL-NEXT: ]

3131

@@ -45,10 +45,10 @@

4545

// DISASM-NEXT: addl $0xfffffffc, %ecx

4646

// DISASM-NEXT: movl %gs:(%ecx), %eax

4747

/// &.got[0]

48-

// DISASM-NEXT: movl 0x402258, %ecx

48+

// DISASM-NEXT: movl 0x402250, %ecx

4949

// DISASM-NEXT: movl %gs:(%ecx), %eax

5050

/// &.got[1]

51-

// DISASM-NEXT: addl 0x40225c, %ecx

51+

// DISASM-NEXT: addl 0x402254, %ecx

5252

// DISASM-NEXT: movl %gs:(%ecx), %eax

5353
5454

.type tlslocal0,@object

Original file line numberDiff line numberDiff line change

@@ -1,15 +1,19 @@

11

# REQUIRES: x86

22
33

## In this test R_X86_64_GOTTPOFF is a IE relocation (static TLS model),

4-

## test check we add STATIC_TLS flag.

4+

## test check we add STATIC_TLS flag for -shared.

55
66

# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o

7-

# RUN: ld.lld %t.o -o %t1 -shared

8-

# RUN: llvm-readobj --dynamic-table %t1 | FileCheck %s

7+

# RUN: ld.lld %t.o -o %t.so -shared

8+

# RUN: llvm-readobj --dynamic-table %t.so | FileCheck %s

9+

# RUN: ld.lld %t.o -o %t -pie

10+

# RUN: llvm-readobj --dynamic-table %t | FileCheck %s --check-prefix=EXE

911
1012

# CHECK: DynamicSection [

1113

# CHECK: FLAGS STATIC_TLS

1214
15+

# EXE-NOT: FLAGS STATIC_TLS

16+
1317

.section ".tdata", "awT", @progbits

1418

.globl var

1519

var:

Original file line numberDiff line numberDiff line change

@@ -15,7 +15,7 @@

1515

// CHECK-NEXT: SHF_WRITE

1616

// CHECK-NEXT: ]

1717

// CHECK-NEXT: Address: [[ADDR:.*]]

18-

// CHECK-NEXT: Offset: 0x3C0

18+

// CHECK-NEXT: Offset: 0x3B0

1919

// CHECK-NEXT: Size: 16

2020

// CHECK-NEXT: Link: 0

2121

// CHECK-NEXT: Info: 0

@@ -26,21 +26,21 @@

2626

// CHECK: Relocations [

2727

// CHECK-NEXT: Section (5) .rela.dyn {

2828

// CHECK-NEXT: [[ADDR]] R_X86_64_TPOFF64 tls1 0x0

29-

// CHECK-NEXT: 0x2023C8 R_X86_64_TPOFF64 tls0 0x0

29+

// CHECK-NEXT: 0x2023B8 R_X86_64_TPOFF64 tls0 0x0

3030

// CHECK-NEXT: }

3131

// CHECK-NEXT: ]

3232
33-

// 0x2012d0 + 4329 + 7 = 0x2023C0

34-

// 0x2012dA + 4327 + 7 = 0x2023C8

35-

// 0x2012e4 + 4317 + 7 = 0x2023C8

33+

// 0x2012d0 + 4313 + 7 = 0x2023B0

34+

// 0x2012dA + 4311 + 7 = 0x2023B8

35+

// 0x2012e4 + 4301 + 7 = 0x2023B8

3636

// DISASM: Disassembly of section .text:

3737

// DISASM-EMPTY:

3838

// DISASM-NEXT: <main>:

39-

// DISASM-NEXT: 2012d0: {{.*}} movq 4329(%rip), %rax

39+

// DISASM-NEXT: 2012d0: {{.*}} movq 4313(%rip), %rax

4040

// DISASM-NEXT: 2012d7: {{.*}} movl %fs:(%rax), %eax

41-

// DISASM-NEXT: 2012da: {{.*}} movq 4327(%rip), %rax

41+

// DISASM-NEXT: 2012da: {{.*}} movq 4311(%rip), %rax

4242

// DISASM-NEXT: 2012e1: {{.*}} movl %fs:(%rax), %eax

43-

// DISASM-NEXT: 2012e4: {{.*}} movq 4317(%rip), %rax

43+

// DISASM-NEXT: 2012e4: {{.*}} movq 4301(%rip), %rax

4444

// DISASM-NEXT: 2012eb: {{.*}} movl %fs:(%rax), %eax

4545

// DISASM-NEXT: 2012ee: {{.*}} retq

4646