DebugInfo: Do not use the DWARF Version for the .debug_pubnames or .debug_pubtypes...
authorDavid Majnemer <david.majnemer@gmail.com>
Wed, 21 Aug 2013 06:13:34 +0000 (06:13 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Wed, 21 Aug 2013 06:13:34 +0000 (06:13 +0000)
Summary:
LLVM would generate DWARF with version 3 in the .debug_pubname and
.debug_pubtypes version fields.  This would lead SGI dwarfdump to fail
parsing the DWARF with (in the instance of .debug_pubnames) would exit
with:
dwarfdump ERROR:  dwarf_get_globals: DW_DLE_PUBNAMES_VERSION_ERROR (123)

This fixes PR16950.

Reviewers: echristo, dblaikie

Reviewed By: echristo

CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1454

llvm-svn: 188869

llvm/include/llvm/Support/Dwarf.h
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/test/DebugInfo/dwarf-public-names.ll

index d0e2322b2d65a095d6e68e1f07cb5efcd966bae8..d857341ef55b18bb09559ddb720dfcc3aa90f217 100644 (file)
@@ -56,7 +56,9 @@ enum llvm_dwarf_constants {
 
   DW_TAG_user_base = 0x1000,            // Recommended base for user tags.
 
-  DW_CIE_VERSION = 1                    // Common frame information version.
+  DW_CIE_VERSION = 1,                   // Common frame information version.
+  DW_PUBTYPES_VERSION = 2,              // Section version number for .debug_pubtypes.
+  DW_PUBNAMES_VERSION = 2               // Section version number for .debug_pubnames.
 };
 
 
index 01980e6f5edaf4656db4317503b4b37d88595d8e..89531235358828a5521a5848714b1958dfea498c 100644 (file)
@@ -35,6 +35,7 @@
 #include "llvm/MC/MCSymbol.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Debug.h"
+#include "llvm/Support/Dwarf.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FormattedStream.h"
 #include "llvm/Support/MD5.h"
@@ -2321,7 +2322,7 @@ void DwarfDebug::emitDebugPubnames() {
     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
 
     Asm->OutStreamer.AddComment("DWARF Version");
-    Asm->EmitInt16(DwarfVersion);
+    Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
 
     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
     Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
@@ -2368,7 +2369,7 @@ void DwarfDebug::emitDebugPubTypes() {
                                                   TheCU->getUniqueID()));
 
     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
-    Asm->EmitInt16(DwarfVersion);
+    Asm->EmitInt16(dwarf::DW_PUBTYPES_VERSION);
 
     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
     const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
index fd074546dc3e37111b6c2991a5deec79db8b6d80..d90eb19d8cdaf638564c22bd706b32e690ca0ead 100644 (file)
@@ -37,6 +37,7 @@
 
 ; Skip the output to the header of the pubnames section.
 ; CHECK: debug_pubnames
+; CHECK: Version:               2
 
 ; Check for each name in the output.
 ; CHECK: global_namespace_variable