addGlobalType(Ty);
}
+// Accelerator table mutators - add each name along with its companion
+// DIE to the proper table while ensuring that the name that we're going
+// to reference is in the string table. We do this since the names we
+// add may not only be identical to the names in the DIE.
+void CompileUnit::addAccelName(StringRef Name, DIE *Die) {
+ DU->getStringPoolEntry(Name);
+ std::vector<DIE*> &DIEs = AccelNames[Name];
+ DIEs.push_back(Die);
+}
+
+void CompileUnit::addAccelObjC(StringRef Name, DIE *Die) {
+ DU->getStringPoolEntry(Name);
+ std::vector<DIE*> &DIEs = AccelObjC[Name];
+ DIEs.push_back(Die);
+}
+
+void CompileUnit::addAccelNamespace(StringRef Name, DIE *Die) {
+ DU->getStringPoolEntry(Name);
+ std::vector<DIE*> &DIEs = AccelNamespace[Name];
+ DIEs.push_back(Die);
+}
+
+void CompileUnit::addAccelType(StringRef Name, std::pair<DIE *, unsigned> Die) {
+ DU->getStringPoolEntry(Name);
+ std::vector<std::pair<DIE *, unsigned> > &DIEs = AccelTypes[Name];
+ DIEs.push_back(Die);
+}
+
/// addGlobalName - Add a new global name to the compile unit.
void CompileUnit::addGlobalName(StringRef Name, DIE *Die) {
GlobalNames[Name] = Die;
void addGlobalType(DIType Ty);
/// addAccelName - Add a new name to the name accelerator table.
- void addAccelName(StringRef Name, DIE *Die) {
- std::vector<DIE*> &DIEs = AccelNames[Name];
- DIEs.push_back(Die);
- }
- void addAccelObjC(StringRef Name, DIE *Die) {
- std::vector<DIE*> &DIEs = AccelObjC[Name];
- DIEs.push_back(Die);
- }
- void addAccelNamespace(StringRef Name, DIE *Die) {
- std::vector<DIE*> &DIEs = AccelNamespace[Name];
- DIEs.push_back(Die);
- }
- void addAccelType(StringRef Name, std::pair<DIE *, unsigned> Die) {
- std::vector<std::pair<DIE *, unsigned> > &DIEs = AccelTypes[Name];
- DIEs.push_back(Die);
- }
+ void addAccelName(StringRef Name, DIE *Die);
+
+ /// addAccelObjC - Add a new name to the ObjC accelerator table.
+ void addAccelObjC(StringRef Name, DIE *Die);
+
+ /// addAccelNamespace - Add a new name to the namespace accelerator table.
+ void addAccelNamespace(StringRef Name, DIE *Die);
+
+ /// addAccelType - Add a new type to the type accelerator table.
+ void addAccelType(StringRef Name, std::pair<DIE *, unsigned> Die);
/// getDIE - Returns the debug information entry map slot for the
/// specified debug variable.
}
// Add the various names to the Dwarf accelerator table names.
+// TODO: Determine whether or not we should add names for programs
+// that do not have a DW_AT_name or DW_AT_linkage_name field - this
+// is only slightly different than the lookup of non-standard ObjC names.
static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
DIE* Die) {
if (!SP.isDefinition()) return;
-
TheCU->addAccelName(SP.getName(), Die);
// If the linkage name is different than the name, go ahead and output
finalizeModuleInfo();
if (!useSplitDwarf()) {
+ emitDebugStr();
+
// Emit all the DIEs into a debug info section.
emitDebugInfo();
} else {
// TODO: Fill this in for separated debug sections and separate
// out information into new sections.
+ emitDebugStr();
+ if (useSplitDwarf())
+ emitDebugStrDWO();
// Emit the debug info section and compile units.
emitDebugInfo();
emitDebugPubTypes(GenerateGnuPubSections);
}
- // Finally emit string information into a string table.
- emitDebugStr();
- if (useSplitDwarf())
- emitDebugStrDWO();
-
// clean up.
SPMap.clear();
for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
; CHECK: add x29, sp, #416
; CHECK: add {{x[0-9]+}}, sp, #4
- ; Now check the debugging information reflects this:
+; CHECK: .Linfo_string7:
+; CHECK-NEXT: main_arr
+
+; Now check the debugging information reflects this:
; CHECK: DW_TAG_variable
; CHECK-NEXT: .word .Linfo_string7
; CHECK-NEXT: .byte 145
; CHECK-NEXT: .ascii "\344|"
-; CHECK: .Linfo_string7:
-; CHECK-NEXT: main_arr
target datalayout = "e-p:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-f128:128:128-n32:64-S128"
; CHECK: la %r2, 164(%r11)
; CHECK: brasl %r14, populate_array@PLT
;
+; CHECK: .Linfo_string7:
+; CHECK-NEXT: main_arr
+;
; Now check that the debugging information reflects this:
; CHECK: DW_TAG_variable
; CHECK-NEXT: .long .Linfo_string7
; CHECK-NEXT: .byte 145
; CHECK-NEXT: .ascii "\244\001"
;
-; CHECK: .Linfo_string7:
-; CHECK-NEXT: main_arr
@.str = private unnamed_addr constant [13 x i8] c"Total is %d\0A\00", align 2
!7 = metadata !{i32 720932, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
!8 = metadata !{metadata !"z.c", metadata !"/home/nicholas"}
+; Verify that "yyyy" ended up in the stringpool.
+; LINUX: .section .debug_str,"MS",@progbits,1
+; LINUX: yyyy
+; DARWIN: .section __DWARF,__debug_str,regular,debug
+; DARWIN: yyyy
+
; Verify that we refer to 'yyyy' with a relocation.
; LINUX: .long .Linfo_string3 # DW_AT_name
; LINUX-NEXT: .long 38 # DW_AT_type
; DARWIN-NEXT: .byte 9 ## DW_AT_location
; DARWIN-NEXT: .byte 3
; DARWIN-NEXT: .quad _yyyy
-
-; Verify that "yyyy" ended up in the stringpool.
-; LINUX: .section .debug_str,"MS",@progbits,1
-; LINUX-NOT: .section
-; LINUX: yyyy
-; DARWIN: .section __DWARF,__debug_str,regular,debug
-; DARWIN-NOT: .section
-; DARWIN: yyyy