<div dir="ltr">Seems the 'EmitDebugValue' should probably have some mention of 'Thread' in it, given the comment describes this as specifically for thread locals?<br><br><div class="gmail_quote"><div dir="ltr">On Fri, Jan 20, 2017 at 10:04 AM Petar Jovanovic via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: petarj<br class="gmail_msg">
Date: Fri Jan 20 11:53:30 2017<br class="gmail_msg">
New Revision: 292624<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=292624&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=292624&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
[mips] Fix debug information for __thread variable<br class="gmail_msg">
<br class="gmail_msg">
This patch fixes debug information for __thread variable on Mips<br class="gmail_msg">
using .dtprelword and .dtpreldword directives.<br class="gmail_msg">
<br class="gmail_msg">
Patch by Aleksandar Beserminji.<br class="gmail_msg">
<br class="gmail_msg">
Differential Revision: <a href="http://reviews.llvm.org/D28770" rel="noreferrer" class="gmail_msg" target="_blank">http://reviews.llvm.org/D28770</a><br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    llvm/trunk/test/DebugInfo/Mips/tls.ll<br class="gmail_msg">
Modified:<br class="gmail_msg">
    llvm/trunk/include/llvm/CodeGen/AsmPrinter.h<br class="gmail_msg">
    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br class="gmail_msg">
    llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Mips/MipsAsmPrinter.h<br class="gmail_msg">
    llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp<br class="gmail_msg">
    llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=292624&r1=292623&r2=292624&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=292624&r1=292623&r2=292624&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)<br class="gmail_msg">
+++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -480,6 +480,12 @@ public:<br class="gmail_msg">
   /// Get the value for DW_AT_APPLE_isa. Zero if no isa encoding specified.<br class="gmail_msg">
   virtual unsigned getISAEncoding() { return 0; }<br class="gmail_msg">
<br class="gmail_msg">
+  /// Emit the directive and value for debug thread local expression<br class="gmail_msg">
+  ///<br class="gmail_msg">
+  /// \p Value - The value to emit.<br class="gmail_msg">
+  /// \p Size - The size of the integer (in bytes) to emit.<br class="gmail_msg">
+  virtual void EmitDebugValue(const MCExpr *Value, unsigned Size) const;<br class="gmail_msg">
+<br class="gmail_msg">
   //===------------------------------------------------------------------===//<br class="gmail_msg">
   // Dwarf Lowering Routines<br class="gmail_msg">
   //===------------------------------------------------------------------===//<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=292624&r1=292623&r2=292624&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=292624&r1=292623&r2=292624&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -567,6 +567,15 @@ void AsmPrinter::EmitGlobalVariable(cons<br class="gmail_msg">
   OutStreamer->AddBlankLine();<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+/// Emit the directive and value for debug thread local expression<br class="gmail_msg">
+///<br class="gmail_msg">
+/// \p Value - The value to emit.<br class="gmail_msg">
+/// \p Size - The size of the integer (in bytes) to emit.<br class="gmail_msg">
+void AsmPrinter::EmitDebugValue(const MCExpr *Value,<br class="gmail_msg">
+                                      unsigned Size) const {<br class="gmail_msg">
+  OutStreamer->EmitValue(Value, Size);<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 /// EmitFunctionHeader - This method emits the header for the current<br class="gmail_msg">
 /// function.<br class="gmail_msg">
 void AsmPrinter::EmitFunctionHeader() {<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp?rev=292624&r1=292623&r2=292624&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp?rev=292624&r1=292623&r2=292624&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -484,7 +484,7 @@ void DIEInteger::print(raw_ostream &O) c<br class="gmail_msg">
 /// EmitValue - Emit expression value.<br class="gmail_msg">
 ///<br class="gmail_msg">
 void DIEExpr::EmitValue(const AsmPrinter *AP, dwarf::Form Form) const {<br class="gmail_msg">
-  AP->OutStreamer->EmitValue(Expr, SizeOf(AP, Form));<br class="gmail_msg">
+  AP->EmitDebugValue(Expr, SizeOf(AP, Form));<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 /// SizeOf - Determine size of expression value in bytes.<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp?rev=292624&r1=292623&r2=292624&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp?rev=292624&r1=292623&r2=292624&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -1037,6 +1037,22 @@ void MipsAsmPrinter::PrintDebugValueComm<br class="gmail_msg">
   // TODO: implement<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+// Emit .dtprelword or .dtpreldword directive<br class="gmail_msg">
+// and value for debug thread local expression.<br class="gmail_msg">
+void MipsAsmPrinter::EmitDebugValue(const MCExpr *Value,<br class="gmail_msg">
+                                          unsigned Size) const {<br class="gmail_msg">
+  switch (Size) {<br class="gmail_msg">
+  case 4:<br class="gmail_msg">
+    OutStreamer->EmitDTPRel32Value(Value);<br class="gmail_msg">
+    break;<br class="gmail_msg">
+  case 8:<br class="gmail_msg">
+    OutStreamer->EmitDTPRel64Value(Value);<br class="gmail_msg">
+    break;<br class="gmail_msg">
+  default:<br class="gmail_msg">
+    llvm_unreachable("Unexpected size of expression value.");<br class="gmail_msg">
+  }<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 // Align all targets of indirect branches on bundle size.  Used only if target<br class="gmail_msg">
 // is NaCl.<br class="gmail_msg">
 void MipsAsmPrinter::NaClAlignIndirectJumpTargets(MachineFunction &MF) {<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Mips/MipsAsmPrinter.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.h?rev=292624&r1=292623&r2=292624&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.h?rev=292624&r1=292623&r2=292624&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Mips/MipsAsmPrinter.h (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Mips/MipsAsmPrinter.h Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -140,6 +140,7 @@ public:<br class="gmail_msg">
   void EmitStartOfAsmFile(Module &M) override;<br class="gmail_msg">
   void EmitEndOfAsmFile(Module &M) override;<br class="gmail_msg">
   void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS);<br class="gmail_msg">
+  void EmitDebugValue(const MCExpr *Value, unsigned Size) const override;<br class="gmail_msg">
 };<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp?rev=292624&r1=292623&r2=292624&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp?rev=292624&r1=292623&r2=292624&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -148,3 +148,11 @@ MCSection *MipsTargetObjectFile::getSect<br class="gmail_msg">
   // Otherwise, we work the same as ELF.<br class="gmail_msg">
   return TargetLoweringObjectFileELF::getSectionForConstant(DL, Kind, C, Align);<br class="gmail_msg">
 }<br class="gmail_msg">
+<br class="gmail_msg">
+const MCExpr *<br class="gmail_msg">
+MipsTargetObjectFile::getDebugThreadLocalSymbol(const MCSymbol *Sym) const {<br class="gmail_msg">
+  const MCExpr *Expr =<br class="gmail_msg">
+      MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());<br class="gmail_msg">
+  return MCBinaryExpr::createAdd(<br class="gmail_msg">
+      Expr, MCConstantExpr::create(0x8000, getContext()), getContext());<br class="gmail_msg">
+}<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h?rev=292624&r1=292623&r2=292624&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h?rev=292624&r1=292623&r2=292624&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -42,6 +42,8 @@ class MipsTargetMachine;<br class="gmail_msg">
     MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind,<br class="gmail_msg">
                                      const Constant *C,<br class="gmail_msg">
                                      unsigned &Align) const override;<br class="gmail_msg">
+    /// Describe a TLS variable address within debug info.<br class="gmail_msg">
+    const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override;<br class="gmail_msg">
   };<br class="gmail_msg">
 } // end namespace llvm<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Added: llvm/trunk/test/DebugInfo/Mips/tls.ll<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Mips/tls.ll?rev=292624&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Mips/tls.ll?rev=292624&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/test/DebugInfo/Mips/tls.ll (added)<br class="gmail_msg">
+++ llvm/trunk/test/DebugInfo/Mips/tls.ll Fri Jan 20 11:53:30 2017<br class="gmail_msg">
@@ -0,0 +1,22 @@<br class="gmail_msg">
+; RUN: llc -O0 -march=mips -mcpu=mips32r2 -filetype=asm < %s | FileCheck %s -check-prefix=CHECK-WORD<br class="gmail_msg">
+; RUN: llc -O0 -march=mips64 -mcpu=mips64r2 -filetype=asm < %s | FileCheck %s -check-prefix=CHECK-DWORD<br class="gmail_msg">
+<br class="gmail_msg">
+@x = thread_local global i32 5, align 4, !dbg !0<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-WORD: .dtprelword x+32768<br class="gmail_msg">
+; CHECK-DWORD: .dtpreldword x+32768<br class="gmail_msg">
+<br class="gmail_msg">
+!<a href="http://llvm.dbg.cu" rel="noreferrer" class="gmail_msg" target="_blank">llvm.dbg.cu</a> = !{!2}<br class="gmail_msg">
+!llvm.module.flags = !{!7, !8}<br class="gmail_msg">
+!llvm.ident = !{!9}<br class="gmail_msg">
+<br class="gmail_msg">
+!0 = !DIGlobalVariableExpression(var: !1)<br class="gmail_msg">
+!1 = distinct !DIGlobalVariable(name: "x", scope: !2, file: !3, line: 1, type: !6, isLocal: false, isDefinition: true)<br class="gmail_msg">
+!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 4.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)<br class="gmail_msg">
+!3 = !DIFile(filename: "tls.c", directory: "/tmp")<br class="gmail_msg">
+!4 = !{}<br class="gmail_msg">
+!5 = !{!0}<br class="gmail_msg">
+!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br class="gmail_msg">
+!7 = !{i32 2, !"Dwarf Version", i32 4}<br class="gmail_msg">
+!8 = !{i32 2, !"Debug Info Version", i32 3}<br class="gmail_msg">
+!9 = !{!"clang version 4.0.0"}<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div></div>