diff --git a/include/llvm/Target/TargetLoweringObjectFile.h b/include/llvm/Target/TargetLoweringObjectFile.h
index 0972dcd..e9533c4 100644
--- a/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/include/llvm/Target/TargetLoweringObjectFile.h
@@ -80,12 +80,11 @@
   const MCSection *DwarfRangesSection;
   const MCSection *DwarfMacroInfoSection;
   
-protected:
-  const MCSection *getOrCreateSection(const char *Name,
-                                      bool isDirective,
-                                      SectionKind K) const;
 public:
   
+  MCContext &getContext() const { return *Ctx; }
+  
+
   virtual ~TargetLoweringObjectFile();
   
   /// Initialize - this method must be called before any actual lowering is
@@ -206,6 +205,11 @@
   const MCSection *MergeableConst4Section;
   const MCSection *MergeableConst8Section;
   const MCSection *MergeableConst16Section;
+  
+protected:
+  const MCSection *getOrCreateSection(const char *Name,
+                                      bool isDirective,
+                                      SectionKind K) const;
 public:
   /// ELF Constructor - AtIsCommentChar is true if the CommentCharacter from TAI
   /// is "@".
@@ -213,9 +217,8 @@
                               // FIXME: REMOVE AFTER UNIQUING IS FIXED.
                               bool hasCrazyBSS = false)
     : AtIsCommentChar(atIsCommentChar), HasCrazyBSS(hasCrazyBSS) {}
-    
-  virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
   
+  virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
   
   /// getSectionForConstant - Given a constant with the SectionKind, return a
   /// section that it should be placed in.
@@ -247,6 +250,10 @@
   const MCSection *FourByteConstantSection;
   const MCSection *EightByteConstantSection;
   const MCSection *SixteenByteConstantSection;
+protected:
+  const MCSection *getOrCreateSection(const char *Name,
+                                      bool isDirective,
+                                      SectionKind K) const;
 public:
   
   virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
@@ -276,6 +283,10 @@
 
 
 class TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
+protected:
+  const MCSection *getOrCreateSection(const char *Name,
+                                      bool isDirective,
+                                      SectionKind K) const;
 public:
   virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
   
diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.cpp b/lib/Target/PIC16/PIC16TargetObjectFile.cpp
index b09ad30..308e09c 100644
--- a/lib/Target/PIC16/PIC16TargetObjectFile.cpp
+++ b/lib/Target/PIC16/PIC16TargetObjectFile.cpp
@@ -13,12 +13,21 @@
 #include "llvm/DerivedTypes.h"
 #include "llvm/Module.h"
 #include "llvm/MC/MCSection.h"
+#include "llvm/MC/MCContext.h"
 using namespace llvm;
 
 PIC16TargetObjectFile::PIC16TargetObjectFile()
   : ExternalVarDecls(0), ExternalVarDefs(0) {
 }
 
+const MCSection *PIC16TargetObjectFile::
+getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
+  if (MCSection *S = getContext().GetSection(Name))
+    return S;
+  return MCSection::Create(Name, isDirective, Kind, getContext());
+}
+
+
 void PIC16TargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &tm){
   TargetLoweringObjectFile::Initialize(Ctx, tm);
   TM = &tm;
diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.h b/lib/Target/PIC16/PIC16TargetObjectFile.h
index c261108..b71a705 100644
--- a/lib/Target/PIC16/PIC16TargetObjectFile.h
+++ b/lib/Target/PIC16/PIC16TargetObjectFile.h
@@ -45,6 +45,10 @@
   
   class PIC16TargetObjectFile : public TargetLoweringObjectFile {
     const TargetMachine *TM;
+    
+    const MCSection *getOrCreateSection(const char *Name,
+                                        bool isDirective,
+                                        SectionKind K) const;
   public:
     mutable std::vector<PIC16Section*> BSSSections;
     mutable std::vector<PIC16Section*> IDATASections;
diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp
index 6aca6da..e983285 100644
--- a/lib/Target/TargetLoweringObjectFile.cpp
+++ b/lib/Target/TargetLoweringObjectFile.cpp
@@ -274,19 +274,18 @@
 }
 
 
-const MCSection *TargetLoweringObjectFile::
-getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
-  if (MCSection *S = Ctx->GetSection(Name))
-    return S;
-  return MCSection::Create(Name, isDirective, Kind, *Ctx);
-}
-
-
 
 //===----------------------------------------------------------------------===//
 //                                  ELF
 //===----------------------------------------------------------------------===//
 
+const MCSection *TargetLoweringObjectFileELF::
+getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
+  if (MCSection *S = getContext().GetSection(Name))
+    return S;
+  return MCSection::Create(Name, isDirective, Kind, getContext());
+}
+
 void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
                                              const TargetMachine &TM) {
   TargetLoweringObjectFile::Initialize(Ctx, TM);
@@ -576,6 +575,13 @@
 //===----------------------------------------------------------------------===//
 
 const MCSection *TargetLoweringObjectFileMachO::
+getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
+  if (MCSection *S = getContext().GetSection(Name))
+    return S;
+  return MCSection::Create(Name, isDirective, Kind, getContext());
+}
+
+const MCSection *TargetLoweringObjectFileMachO::
 getMachOSection(const char *Name, bool isDirective, SectionKind K) {
   // FOR NOW, Just forward.
   return getOrCreateSection(Name, isDirective, K);  
@@ -789,6 +795,13 @@
 //===----------------------------------------------------------------------===//
 
 const MCSection *TargetLoweringObjectFileCOFF::
+getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
+  if (MCSection *S = getContext().GetSection(Name))
+    return S;
+  return MCSection::Create(Name, isDirective, Kind, getContext());
+}
+
+const MCSection *TargetLoweringObjectFileCOFF::
 getCOFFSection(const char *Name, bool isDirective, SectionKind K) {
   return getOrCreateSection(Name, isDirective, K);
 }
