aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/DwarfWriter.cpp
diff options
context:
space:
mode:
authorJim Laskey <jlaskey@mac.com>2006-09-18 14:47:26 +0000
committerJim Laskey <jlaskey@mac.com>2006-09-18 14:47:26 +0000
commite85fb6719a3cdd011359b9cdee27a175bfe5baf7 (patch)
tree516416c382275da2c7a6f273895b55f0c887207b /lib/CodeGen/DwarfWriter.cpp
parent4af90abc13a7406efdb3f2261fce8ecd7d38bbd7 (diff)
Sort out mangled names for globals
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30460 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/DwarfWriter.cpp')
-rw-r--r--lib/CodeGen/DwarfWriter.cpp36
1 files changed, 23 insertions, 13 deletions
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 22d67449e1..0921cc5c64 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -1592,20 +1592,23 @@ DIE *DwarfWriter::NewGlobalVariable(GlobalVariableDesc *GVD) {
// Get the global variable itself.
GlobalVariable *GV = GVD->getGlobalVariable();
- // Generate the mangled name.
- std::string MangledName = Asm->Mang->getValueName(GV);
- // Gather the details (simplify add attribute code.)
- const std::string &Name = GVD->getName();
-
+ const std::string &Name = GVD->hasMangledName() ? GVD->getDisplayName()
+ : GVD->getName();
+ const std::string &MangledName = GVD->hasMangledName() ? GVD->getName()
+ : "";
// Get the global's type.
DIE *Type = NewType(Unit->getDie(), GVD->getType(), Unit);
// Create the globale variable DIE.
DIE *VariableDie = new DIE(DW_TAG_variable);
- VariableDie->AddString (DW_AT_name, DW_FORM_string, Name);
- VariableDie->AddDIEntry (DW_AT_type, DW_FORM_ref4, Type);
- VariableDie->AddUInt (DW_AT_external, DW_FORM_flag, 1);
+ VariableDie->AddString(DW_AT_name, DW_FORM_string, Name);
+ if (!MangledName.empty()) {
+ VariableDie->AddString(DW_AT_MIPS_linkage_name, DW_FORM_string,
+ MangledName);
+ }
+ VariableDie->AddDIEntry(DW_AT_type, DW_FORM_ref4, Type);
+ VariableDie->AddUInt(DW_AT_external, DW_FORM_flag, 1);
// Add source line info if available.
AddSourceLine(VariableDie, UnitDesc, GVD->getLine());
@@ -1642,17 +1645,24 @@ DIE *DwarfWriter::NewSubprogram(SubprogramDesc *SPD) {
if (Slot) return Slot;
// Gather the details (simplify add attribute code.)
- const std::string &Name = SPD->getName();
+ const std::string &Name = SPD->hasMangledName() ? SPD->getDisplayName()
+ : SPD->getName();
+ const std::string &MangledName = SPD->hasMangledName() ? SPD->getName()
+ : "";
DIE *Type = NewType(Unit->getDie(), SPD->getType(), Unit);
unsigned IsExternal = SPD->isStatic() ? 0 : 1;
DIE *SubprogramDie = new DIE(DW_TAG_subprogram);
- SubprogramDie->AddString (DW_AT_name, DW_FORM_string, Name);
+ SubprogramDie->AddString(DW_AT_name, DW_FORM_string, Name);
+ if (!MangledName.empty()) {
+ SubprogramDie->AddString(DW_AT_MIPS_linkage_name, DW_FORM_string,
+ MangledName);
+ }
if (Type) {
- SubprogramDie->AddDIEntry (DW_AT_type, DW_FORM_ref4, Type);
+ SubprogramDie->AddDIEntry(DW_AT_type, DW_FORM_ref4, Type);
}
- SubprogramDie->AddUInt (DW_AT_external, DW_FORM_flag, IsExternal);
- SubprogramDie->AddUInt (DW_AT_prototyped, DW_FORM_flag, 1);
+ SubprogramDie->AddUInt(DW_AT_external, DW_FORM_flag, IsExternal);
+ SubprogramDie->AddUInt(DW_AT_prototyped, DW_FORM_flag, 1);
// Add source line info if available.
AddSourceLine(SubprogramDie, UnitDesc, SPD->getLine());