[DWARF] Unclamp line table version on Darwin for v5 and later.
authorJonas Devlieghere <jonas@devlieghere.com>
Wed, 8 Aug 2018 21:16:50 +0000 (21:16 +0000)
committerJonas Devlieghere <jonas@devlieghere.com>
Wed, 8 Aug 2018 21:16:50 +0000 (21:16 +0000)
On Darwin we pin the DWARF line tables to version 2. Stop doing so for
DWARF v5 and later.

Differential revision: https://reviews.llvm.org/D49381

llvm-svn: 339288

llvm/lib/MC/MCDwarf.cpp
llvm/test/CodeGen/Generic/dwarf-md5.ll
llvm/test/CodeGen/Generic/dwarf-source.ll
llvm/test/MC/ELF/dwarf-file0.s
llvm/test/MC/ELF/dwarf-loc0.s

index 0461c25..9574379 100644 (file)
@@ -462,11 +462,14 @@ MCDwarfLineTableHeader::Emit(MCStreamer *MCOS, MCDwarfLineTableParams Params,
   emitAbsValue(*MCOS,
                MakeStartMinusEndExpr(*MCOS, *LineStartSym, *LineEndSym, 4), 4);
 
-  // Next 2 bytes is the Version.
-  // FIXME: On Darwin we still default to V2.
   unsigned LineTableVersion = context.getDwarfVersion();
-  if (context.getObjectFileInfo()->getTargetTriple().isOSDarwin())
+
+  // On Darwin we default to v2 for anything before DWARF v5.
+  if (context.getObjectFileInfo()->getTargetTriple().isOSDarwin() &&
+      LineTableVersion < 5)
     LineTableVersion = 2;
+
+  // Next 2 bytes is the Version.
   MCOS->EmitIntValue(LineTableVersion, 2);
 
   // Keep track of the bytes between the very start and where the header length
index fc708f7..c55d7d7 100644 (file)
@@ -1,8 +1,8 @@
 ; MD5 checksums provided by IR should be passed through to asm.
 ; They'll be emitted to an object file only for DWARF 5 or later.
-
-; Darwin clamps the line table at DWARF v2 so XFAIL this test.
-; XFAIL: darwin
+;
+; Note that on Darwin for DWARF 4 or earlier, the line table version is clamped
+; to version 2. However that doesn't affect the output checked in this test.
 
 ; REQUIRES: object-emission
 ; RUN: %llc_dwarf -dwarf-version 4 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM-4
index 0636f92..7b7d9c5 100644 (file)
@@ -1,8 +1,8 @@
 ; Source text provided by IR should be passed through to asm.
 ; It is emitted to an object file only for DWARF 5 or later.
-
-; Darwin clamps the line table at DWARF v2 so XFAIL this test.
-; XFAIL: darwin
+;
+; Note that on Darwin for DWARF 4 or earlier, the line table version is clamped
+; to version 2. However that doesn't affect the output checked in this test.
 
 ; REQUIRES: object-emission
 ; RUN: %llc_dwarf -dwarf-version 4 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM-4
index ef16ee3..1a3afb6 100644 (file)
@@ -4,8 +4,6 @@
 # RUN: llvm-mc -dwarf-version 4 %s -filetype=asm -o - 2>&1 | FileCheck %s --check-prefix=WARN
 # RUN: llvm-mc -dwarf-version 5 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s --check-prefixes=CHECK,CHECK-5
 # RUN: llvm-mc -dwarf-version 5 %s -filetype=asm -o - | FileCheck %s --check-prefixes=ASM,ASM-5
-# Darwin is stuck on DWARF v2.
-# XFAIL: darwin
         .file 0 "/test" "root.cpp"
         .file 1 "/include" "header.h"
         .file 2 "/test" "root.cpp"
index 8fed6bb..b3b11c4 100644 (file)
@@ -1,8 +1,6 @@
 # REQUIRES: default_triple
 # RUN: llvm-mc -dwarf-version 5 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s
 # RUN: not llvm-mc -dwarf-version 4 %s -filetype=asm -o - 2>&1 | FileCheck %s -check-prefix=ERR
-# Darwin line table is stuck on DWARF v2.
-# XFAIL: darwin
 # Show that ".loc 0" works in DWARF v5, gets an error for earlier versions.
         .file 0 "root.cpp"
         .file 1 "header.h"