diff --git a/include/llvm/CodeGen/MachineDebugInfo.h b/include/llvm/CodeGen/MachineDebugInfo.h
index 3fad875..f48e357 100644
--- a/include/llvm/CodeGen/MachineDebugInfo.h
+++ b/include/llvm/CodeGen/MachineDebugInfo.h
@@ -142,16 +142,18 @@
 //===----------------------------------------------------------------------===//
 /// AnchorDesc - Descriptors of this class act as markers for identifying
 /// descriptors of certain groups.
+class AnchoredDesc;
 class AnchorDesc : public DebugInfoDesc {
-private:  
-  std::string Name;                     // Anchor type string.
+private:
+  unsigned AnchorTag;                   // Tag number of descriptors anchored
+                                        // by this object.
   
 public:
   AnchorDesc();
-  AnchorDesc(const std::string &N);
+  AnchorDesc(AnchoredDesc *D);
   
   // Accessors
-  const std::string &getName() const { return Name; }
+  unsigned getAnchorTag() const { return AnchorTag; }
 
   // Implement isa/cast/dyncast.
   static bool classof(const AnchorDesc *) { return true; }
@@ -198,6 +200,10 @@
   //===--------------------------------------------------------------------===//
   // Subclasses should supply the following virtual methods.
   
+  /// getAnchorString - Return a string used to label descriptor's anchor.
+  ///
+  virtual const char *getAnchorString() const = 0;
+    
   /// ApplyToFields - Target the visitor to the fields of the AnchoredDesc.
   ///
   virtual void ApplyToFields(DIVisitor *Visitor);
@@ -217,6 +223,7 @@
 public:
   CompileUnitDesc();
   
+  
   // Accessors
   unsigned getDebugVersion()              const { return DebugVersion; }
   unsigned getLanguage()                  const { return Language; }
@@ -252,6 +259,7 @@
   
   /// getAnchorString - Return a string used to label this descriptor's anchor.
   ///
+  static const char *AnchorString;
   virtual const char *getAnchorString() const;
     
 #ifndef NDEBUG
@@ -553,6 +561,7 @@
   
   /// getAnchorString - Return a string used to label this descriptor's anchor.
   ///
+  static const char *AnchorString;
   virtual const char *getAnchorString() const;
     
 #ifndef NDEBUG
@@ -591,6 +600,7 @@
   
   /// getAnchorString - Return a string used to label this descriptor's anchor.
   ///
+  static const char *AnchorString;
   virtual const char *getAnchorString() const;
     
 #ifndef NDEBUG
diff --git a/lib/CodeGen/MachineDebugInfo.cpp b/lib/CodeGen/MachineDebugInfo.cpp
index 8e1d8f2..ba5bf03 100644
--- a/lib/CodeGen/MachineDebugInfo.cpp
+++ b/lib/CodeGen/MachineDebugInfo.cpp
@@ -53,7 +53,7 @@
   
   std::vector<const Type*> FieldTypes;
   FieldTypes.push_back(Type::UIntTy);
-  FieldTypes.push_back(PointerType::get(Type::SByteTy));
+  FieldTypes.push_back(Type::UIntTy);
 
   // Get the GlobalVariable root.
   GlobalVariable *UseRoot = M.getGlobalVariable(RootName,
@@ -539,11 +539,11 @@
 
 AnchorDesc::AnchorDesc()
 : DebugInfoDesc(DW_TAG_anchor)
-, Name("")
+, AnchorTag(0)
 {}
-AnchorDesc::AnchorDesc(const std::string &N)
+AnchorDesc::AnchorDesc(AnchoredDesc *D)
 : DebugInfoDesc(DW_TAG_anchor)
-, Name(N)
+, AnchorTag(D->getTag())
 {}
 
 // Implement isa/cast/dyncast.
@@ -562,13 +562,26 @@
 void AnchorDesc::ApplyToFields(DIVisitor *Visitor) {
   DebugInfoDesc::ApplyToFields(Visitor);
   
-  Visitor->Apply(Name);
+  Visitor->Apply(AnchorTag);
 }
 
-/// getDescString - Return a string used to compose global names and labels.
-///
+/// getDescString - Return a string used to compose global names and labels. A
+/// A global variable name needs to be defined for each debug descriptor that is
+/// anchored. NOTE: that each global variable name here also needs to be added
+/// to the list of names left external in the internalizer.
+///   ExternalNames.insert("llvm.dbg.compile_units");
+///   ExternalNames.insert("llvm.dbg.global_variables");
+///   ExternalNames.insert("llvm.dbg.subprograms");
 const char *AnchorDesc::getDescString() const {
-  return Name.c_str();
+  switch (AnchorTag) {
+  case DW_TAG_compile_unit: return CompileUnitDesc::AnchorString;
+  case DW_TAG_variable:     return GlobalVariableDesc::AnchorString;
+  case DW_TAG_subprogram:   return SubprogramDesc::AnchorString;
+  default: break;
+  }
+
+  assert(0 && "Tag does not have a case for anchor string");
+  return "";
 }
 
 /// getTypeString - Return a string used to label this descriptors type.
@@ -581,7 +594,7 @@
 void AnchorDesc::dump() {
   std::cerr << getDescString() << " "
             << "Tag(" << getTag() << "), "
-            << "Name(" << Name << ")\n";
+            << "AnchorTag(" << AnchorTag << ")\n";
 }
 #endif
 
@@ -649,8 +662,9 @@
 
 /// getAnchorString - Return a string used to label this descriptor's anchor.
 ///
+const char *CompileUnitDesc::AnchorString = "llvm.dbg.compile_units";
 const char *CompileUnitDesc::getAnchorString() const {
-  return "llvm.dbg.compile_units";
+  return AnchorString;
 }
 
 #ifndef NDEBUG
@@ -1014,8 +1028,9 @@
 
 /// getAnchorString - Return a string used to label this descriptor's anchor.
 ///
+const char *GlobalVariableDesc::AnchorString = "llvm.dbg.global_variables";
 const char *GlobalVariableDesc::getAnchorString() const {
-  return "llvm.dbg.global_variables";
+  return AnchorString;
 }
 
 #ifndef NDEBUG
@@ -1063,8 +1078,9 @@
 
 /// getAnchorString - Return a string used to label this descriptor's anchor.
 ///
+const char *SubprogramDesc::AnchorString = "llvm.dbg.subprograms";
 const char *SubprogramDesc::getAnchorString() const {
-  return "llvm.dbg.subprograms";
+  return AnchorString;
 }
 
 #ifndef NDEBUG
diff --git a/lib/Transforms/IPO/Internalize.cpp b/lib/Transforms/IPO/Internalize.cpp
index 2f2f06b..4bfc5a2 100644
--- a/lib/Transforms/IPO/Internalize.cpp
+++ b/lib/Transforms/IPO/Internalize.cpp
@@ -112,9 +112,10 @@
   ExternalNames.insert("llvm.used");
   
   // Never internalize anchors used by the debugger, else the debugger won't
-  // find them.
-  ExternalNames.insert("llvm.dbg.translation_units");
-  ExternalNames.insert("llvm.dbg.globals");
+  // find them.  (see MachineDebugInfo.)
+  ExternalNames.insert("llvm.dbg.compile_units");
+  ExternalNames.insert("llvm.dbg.global_variables");
+  ExternalNames.insert("llvm.dbg.subprograms");
       
   // Mark all global variables with initializers as internal as well.
   for (Module::global_iterator I = M.global_begin(), E = M.global_end();
