[llvm] f4f29b9 - [PowerPC] Fix missing TLS symbol type.

Stefan Pintilie via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 3 03:57:12 PDT 2020


Author: Stefan Pintilie
Date: 2020-09-03T05:57:04-05:00
New Revision: f4f29b956c628dc5029345c97d11c8d198657f87

URL: https://github.com/llvm/llvm-project/commit/f4f29b956c628dc5029345c97d11c8d198657f87
DIFF: https://github.com/llvm/llvm-project/commit/f4f29b956c628dc5029345c97d11c8d198657f87.diff

LOG: [PowerPC] Fix missing TLS symbol type.

Previous implementations for the TLS models General Dynamic and Initial Exec
were missing the ELF::STT_TLS type on symbols that required the type. This patch
adds the type.

Reviewed By: sfertile, MaskRay

Differential Revision: https://reviews.llvm.org/D86777

Added: 
    

Modified: 
    llvm/lib/MC/MCELFStreamer.cpp
    llvm/test/CodeGen/PowerPC/pcrel-tls-general-dynamic.ll
    llvm/test/CodeGen/PowerPC/pcrel-tls-initial-exec.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCELFStreamer.cpp b/llvm/lib/MC/MCELFStreamer.cpp
index 49d863f258bf..5296e2400765 100644
--- a/llvm/lib/MC/MCELFStreamer.cpp
+++ b/llvm/lib/MC/MCELFStreamer.cpp
@@ -433,15 +433,18 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) {
     case MCSymbolRefExpr::VK_PPC_GOT_TPREL_LO:
     case MCSymbolRefExpr::VK_PPC_GOT_TPREL_HI:
     case MCSymbolRefExpr::VK_PPC_GOT_TPREL_HA:
+    case MCSymbolRefExpr::VK_PPC_GOT_TPREL_PCREL:
     case MCSymbolRefExpr::VK_PPC_GOT_DTPREL:
     case MCSymbolRefExpr::VK_PPC_GOT_DTPREL_LO:
     case MCSymbolRefExpr::VK_PPC_GOT_DTPREL_HI:
     case MCSymbolRefExpr::VK_PPC_GOT_DTPREL_HA:
     case MCSymbolRefExpr::VK_PPC_TLS:
+    case MCSymbolRefExpr::VK_PPC_TLS_PCREL:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSGD:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_LO:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HI:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HA:
+    case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_PCREL:
     case MCSymbolRefExpr::VK_PPC_TLSGD:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSLD:
     case MCSymbolRefExpr::VK_PPC_GOT_TLSLD_LO:

diff  --git a/llvm/test/CodeGen/PowerPC/pcrel-tls-general-dynamic.ll b/llvm/test/CodeGen/PowerPC/pcrel-tls-general-dynamic.ll
index d58e8c21509a..dfbcbb3b338b 100644
--- a/llvm/test/CodeGen/PowerPC/pcrel-tls-general-dynamic.ll
+++ b/llvm/test/CodeGen/PowerPC/pcrel-tls-general-dynamic.ll
@@ -3,8 +3,9 @@
 ; RUN:   -enable-ppc-pcrel-tls < %s | FileCheck %s --check-prefix=CHECK-S
 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
 ; RUN:   --relocation-model=pic -mcpu=pwr10 -ppc-asm-full-reg-names \
-; RUN:   -enable-ppc-pcrel-tls --filetype=obj < %s | \
-; RUN:   llvm-objdump --mcpu=pwr10 -dr - | FileCheck %s --check-prefix=CHECK-O
+; RUN:   -enable-ppc-pcrel-tls --filetype=obj -o %t.o < %s
+; RUN: llvm-objdump --mcpu=pwr10 -dr %t.o |FileCheck %s --check-prefix=CHECK-O
+; RUN: llvm-readelf -s %t.o | FileCheck %s --check-prefix=CHECK-SYM
 
 ; These test cases are to ensure that when using pc relative memory operations
 ; ABI correct code and relocations are produced for General Dynamic TLS Model.
@@ -45,6 +46,9 @@ define i32 @GeneralDynamicValueLoad() {
   ; CHECK-O-NEXT:    0000000000000054:  R_PPC64_TLSGD        x
   ; CHECK-O-NEXT:    0000000000000054:  R_PPC64_REL24_NOTOC  __tls_get_addr
   ; CHECK-O-NEXT:    58: 00 00 63 80                   lwz 3, 0(3)
+
+  ; CHECK-SYM-LABEL: Symbol table '.symtab' contains 7 entries
+  ; CHECK-SYM:         6: 0000000000000000     0 TLS     GLOBAL DEFAULT  UND x
   entry:
     %0 = load i32, i32* @x, align 4
     ret i32 %0

diff  --git a/llvm/test/CodeGen/PowerPC/pcrel-tls-initial-exec.ll b/llvm/test/CodeGen/PowerPC/pcrel-tls-initial-exec.ll
index 7789e23515ab..f10ed538d092 100644
--- a/llvm/test/CodeGen/PowerPC/pcrel-tls-initial-exec.ll
+++ b/llvm/test/CodeGen/PowerPC/pcrel-tls-initial-exec.ll
@@ -3,8 +3,9 @@
 ; RUN:   FileCheck %s --check-prefix=CHECK-S
 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
 ; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names --filetype=obj \
-; RUN:   -enable-ppc-pcrel-tls < %s | llvm-objdump --mcpu=pwr10 -dr - | \
-; RUN:   FileCheck %s --check-prefix=CHECK-O
+; RUN:   -enable-ppc-pcrel-tls -o %t.o < %s
+; RUN: llvm-objdump --mcpu=pwr10 -dr %t.o | FileCheck %s --check-prefix=CHECK-O
+; RUN: llvm-readelf -s %t.o | FileCheck %s --check-prefix=CHECK-SYM
 
 ; These test cases are to ensure that when using pc relative memory operations
 ; ABI correct code and relocations are produced for Initial Exec TLS Model.
@@ -42,6 +43,9 @@ define i32 @InitialExecValueLoad() {
 ; CHECK-O-NEXT:    2e 68 63 7c                  	lwzx 3, 3, 13
 ; CHECK-O-NEXT:    0000000000000029:  R_PPC64_TLS	x
 ; CHECK-O-NEXT:    20 00 80 4e                  	blr
+
+; CHECK-SYM-LABEL: Symbol table '.symtab' contains 6 entries
+; CHECK-SYM:         5: 0000000000000000     0 TLS     GLOBAL DEFAULT  UND x
 entry:
   %0 = load i32, i32* @x, align 4
   ret i32 %0


        


More information about the llvm-commits mailing list