[llvm-commits] [llvm-gcc-4.2] r75648 - in /llvm-gcc-4.2/trunk/gcc: llvm-debug.cpp llvm-debug.h
Devang Patel
dpatel at apple.com
Tue Jul 14 11:19:18 PDT 2009
Author: dpatel
Date: Tue Jul 14 13:19:17 2009
New Revision: 75648
URL: http://llvm.org/viewvc/llvm-project?rev=75648&view=rev
Log:
Use LLVM Mangler to mangle linkage names for debug info entries.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
llvm-gcc-4.2/trunk/gcc/llvm-debug.h
Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp?rev=75648&r1=75647&r2=75648&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp Tue Jul 14 13:19:17 2009
@@ -34,7 +34,9 @@
#include "llvm/Intrinsics.h"
#include "llvm/Module.h"
#include "llvm/Support/Dwarf.h"
+#include "llvm/Support/Mangler.h"
#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetAsmInfo.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/SmallVector.h"
@@ -180,12 +182,12 @@
return Location;
}
-static const char *getLinkageName(tree Node) {
+static const char *getLinkageName(tree Node, Mangler *LLVMMangler) {
// Use llvm value name as linkage name if it is available.
if (DECL_LLVM_SET_P(Node)) {
- Value *V = DECL_LLVM(Node);
- return V->getNameStart();
+ GlobalValue *V = dyn_cast<GlobalValue>(DECL_LLVM(Node));
+ return LLVMMangler->getValueName(V).c_str();
}
tree decl_name = DECL_NAME(Node);
@@ -208,7 +210,23 @@
, PrevLineNo(0)
, PrevBB(NULL)
, RegionStack()
-{}
+{
+ assert (TheTarget && "Target is not set!");
+ const TargetAsmInfo *TAI = TheTarget->getTargetAsmInfo();
+ LLVMMangler = new Mangler(*m, TAI->getGlobalPrefix(), TAI->getPrivateGlobalPrefix());
+ // add chars used in ObjC method names so method names aren't mangled
+ LLVMMangler->markCharAcceptable('[');
+ LLVMMangler->markCharAcceptable(']');
+ LLVMMangler->markCharAcceptable('(');
+ LLVMMangler->markCharAcceptable(')');
+ LLVMMangler->markCharAcceptable('-');
+ LLVMMangler->markCharAcceptable('+');
+ LLVMMangler->markCharAcceptable(' ');
+}
+
+DebugInfo::~DebugInfo() {
+ delete LLVMMangler;
+}
/// EmitFunctionStart - Constructs the debug code for entering a function -
/// "llvm.dbg.func.start."
@@ -216,13 +234,12 @@
BasicBlock *CurBB) {
// Gather location information.
expanded_location Loc = GetNodeLocation(FnDecl, false);
- const char *LinkageName = getLinkageName(FnDecl);
DISubprogram SP =
DebugFactory.CreateSubprogram(findRegion(FnDecl),
lang_hooks.dwarf_name(FnDecl, 0),
lang_hooks.dwarf_name(FnDecl, 0),
- LinkageName,
+ LLVMMangler->getValueName(Fn),
getOrCreateCompileUnit(Loc.file), CurLineNo,
getOrCreateType(TREE_TYPE(FnDecl)),
Fn->hasInternalLinkage(),
@@ -355,7 +372,7 @@
DebugFactory.CreateGlobalVariable(getOrCreateCompileUnit(Loc.file),
GV->getNameStr(),
DispName,
- getLinkageName(decl),
+ LLVMMangler->getValueName(GV),
getOrCreateCompileUnit(Loc.file), Loc.line,
TyD, GV->hasInternalLinkage(),
true/*definition*/, GV);
@@ -671,7 +688,7 @@
expanded_location MemLoc = GetNodeLocation(Member, false);
const char *MemberName = lang_hooks.dwarf_name(Member, 0);
- const char *LinkageName = getLinkageName(Member);
+ const char *LinkageName = getLinkageName(Member, LLVMMangler);
DIType SPTy = getOrCreateType(TREE_TYPE(Member));
DISubprogram SP =
DebugFactory.CreateSubprogram(findRegion(Member), MemberName, MemberName,
Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.h?rev=75648&r1=75647&r2=75648&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-debug.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-debug.h Tue Jul 14 13:19:17 2009
@@ -47,12 +47,14 @@
class CallInst;
class Function;
class Module;
+class Mangler;
/// DebugInfo - This class gathers all debug information during compilation and
/// is responsible for emitting to llvm globals or pass directly to the backend.
class DebugInfo {
private:
Module *M; // The current module.
+ Mangler *LLVMMangler; // The mangler to mangle linkage names.
DIFactory DebugFactory;
const char *CurFullPath; // Previous location file encountered.
int CurLineNo; // Previous location line# encountered.
@@ -69,6 +71,7 @@
std::map<tree_node *, DIDescriptor> RegionMap;
public:
DebugInfo(Module *m);
+ ~DebugInfo();
/// Initialize - Initialize debug info by creating compile unit for
/// main_input_filename. This must be invoked after language dependent
More information about the llvm-commits
mailing list