Unshift the GDB index/GNU pubnames constants modified in r191025
Based on code review feedback from Eric Christopher, unshifting these
constants as they can appear in the gdb_index itself, shifted a further
24 bits. This means that keeping them preshifted is a bit inflexible, so
let's not do that.
Given the motivation, wrap up some nicer enums, more type safety, and
some utility functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191035 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 22533f9..a814b72 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -2322,10 +2322,11 @@
// reference in the pubname header doesn't change.
/// computeIndexValue - Compute the gdb index value for the DIE and CU.
-static uint8_t computeIndexValue(CompileUnit *CU, DIE *Die) {
- uint8_t IsStatic = Die->findAttribute(dwarf::DW_AT_external)
- ? dwarf::GDB_INDEX_SYMBOL_NON_STATIC
- : dwarf::GDB_INDEX_SYMBOL_STATIC;
+static dwarf::PubIndexEntryDescriptor computeIndexValue(CompileUnit *CU,
+ DIE *Die) {
+ dwarf::GDBIndexEntryLinkage IsStatic =
+ Die->findAttribute(dwarf::DW_AT_external) ? dwarf::GIEL_EXTERNAL
+ : dwarf::GIEL_STATIC;
switch (Die->getTag()) {
case dwarf::DW_TAG_class_type:
@@ -2335,19 +2336,19 @@
case dwarf::DW_TAG_typedef:
case dwarf::DW_TAG_base_type:
case dwarf::DW_TAG_subrange_type:
- return dwarf::GDB_INDEX_SYMBOL_KIND_TYPE | dwarf::GDB_INDEX_SYMBOL_STATIC;
+ return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
case dwarf::DW_TAG_namespace:
- return dwarf::GDB_INDEX_SYMBOL_KIND_TYPE;
+ return dwarf::GIEK_TYPE;
case dwarf::DW_TAG_subprogram:
- return dwarf::GDB_INDEX_SYMBOL_KIND_FUNCTION | IsStatic;
+ return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, IsStatic);
case dwarf::DW_TAG_constant:
case dwarf::DW_TAG_variable:
- return dwarf::GDB_INDEX_SYMBOL_KIND_VARIABLE | IsStatic;
+ return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, IsStatic);
case dwarf::DW_TAG_enumerator:
- return dwarf::GDB_INDEX_SYMBOL_KIND_VARIABLE |
- dwarf::GDB_INDEX_SYMBOL_STATIC;
+ return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
+ dwarf::GIEL_STATIC);
default:
- return dwarf::GDB_INDEX_SYMBOL_KIND_NONE;
+ return dwarf::GIEK_NONE;
}
}
@@ -2401,7 +2402,7 @@
if (GnuStyle) {
Asm->OutStreamer.AddComment("Index value");
- Asm->EmitInt8(computeIndexValue(TheCU, Entity));
+ Asm->EmitInt8(computeIndexValue(TheCU, Entity).toBits());
}
if (Asm->isVerbose())
@@ -2460,7 +2461,7 @@
if (GnuStyle) {
Asm->OutStreamer.AddComment("Index value");
- Asm->EmitInt8(computeIndexValue(TheCU, Entity));
+ Asm->EmitInt8(computeIndexValue(TheCU, Entity).toBits());
}
if (Asm->isVerbose())