diff --git a/lib/Target/Alpha/AlphaISelLowering.cpp b/lib/Target/Alpha/AlphaISelLowering.cpp
index 73fab21..a17209e 100644
--- a/lib/Target/Alpha/AlphaISelLowering.cpp
+++ b/lib/Target/Alpha/AlphaISelLowering.cpp
@@ -37,11 +37,11 @@
   void Initialize(MCContext &Ctx, const TargetMachine &TM) {
     TargetLoweringObjectFile::Initialize(Ctx, TM);
     TextSection = getOrCreateSection("_text", true, 
-                                     SectionKind::get(SectionKind::Text));
+                                     SectionKind::getText());
     DataSection = getOrCreateSection("_data", true, 
-                                     SectionKind::get(SectionKind::DataRel));
+                                     SectionKind::getDataRel());
     ReadOnlySection = getOrCreateSection("_rodata", true, 
-                                     SectionKind::get(SectionKind::ReadOnly));
+                                         SectionKind::getReadOnly());
   }
 };
 }
diff --git a/lib/Target/PIC16/PIC16AsmPrinter.cpp b/lib/Target/PIC16/PIC16AsmPrinter.cpp
index 596ec7a..ea45156 100644
--- a/lib/Target/PIC16/PIC16AsmPrinter.cpp
+++ b/lib/Target/PIC16/PIC16AsmPrinter.cpp
@@ -73,7 +73,7 @@
  
   const MCSection *fCodeSection = 
     getObjFileLowering().getOrCreateSection(codeSection, false, 
-                                           SectionKind::get(SectionKind::Text));
+                                           SectionKind::getText());
   // Start the Code Section.
   O <<  "\n";
   SwitchToSection(fCodeSection);
@@ -350,7 +350,7 @@
 
   const MCSection *fPDataSection =
     getObjFileLowering().getOrCreateSection(SectionName, false,
-                                        SectionKind::get(SectionKind::DataRel));
+                                        SectionKind::getDataRel());
   SwitchToSection(fPDataSection);
   
   // Emit function frame label
diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.cpp b/lib/Target/PIC16/PIC16TargetObjectFile.cpp
index 04f2ebf..f287456 100644
--- a/lib/Target/PIC16/PIC16TargetObjectFile.cpp
+++ b/lib/Target/PIC16/PIC16TargetObjectFile.cpp
@@ -20,26 +20,26 @@
   TM = &tm;
   
   BSSSection = getOrCreateSection("udata.# UDATA", false, 
-                                  SectionKind::get(SectionKind::BSS));
+                                  SectionKind::getBSS());
   ReadOnlySection = getOrCreateSection("romdata.# ROMDATA", false,
-                                       SectionKind::get(SectionKind::ReadOnly));
+                                       SectionKind::getReadOnly());
   DataSection = getOrCreateSection("idata.# IDATA", false,
-                                   SectionKind::get(SectionKind::DataRel));
+                                   SectionKind::getDataRel());
   
   // Need because otherwise a .text symbol is emitted by DwarfWriter
   // in BeginModule, and gpasm cribbs for that .text symbol.
   TextSection = getOrCreateSection("", true,
-                                   SectionKind::get(SectionKind::Text));
+                                   SectionKind::getText());
 
   ROSections.push_back(new PIC16Section(ReadOnlySection));
   
   // FIXME: I don't know what the classification of these sections really is.
   ExternalVarDecls = new PIC16Section(getOrCreateSection("ExternalVarDecls",
                                                          false,
-                                      SectionKind::get(SectionKind::Metadata)));
+                                      SectionKind::getMetadata()));
   ExternalVarDefs = new PIC16Section(getOrCreateSection("ExternalVarDefs",
                                                         false,
-                                      SectionKind::get(SectionKind::Metadata)));
+                                      SectionKind::getMetadata()));
 }
 
 
@@ -69,7 +69,7 @@
     std::string name = PAN::getUdataSectionName(BSSSections.size());
     const MCSection *NewSection = getOrCreateSection(name.c_str(), false,
                                                      // FIXME.
-                                       SectionKind::get(SectionKind::Metadata));
+                                                    SectionKind::getMetadata());
 
     FoundBSS = new PIC16Section(NewSection);
 
@@ -111,7 +111,7 @@
     std::string name = PAN::getIdataSectionName(IDATASections.size());
     const MCSection *NewSection = getOrCreateSection(name.c_str(), false,
                                                    // FIXME.
-                                       SectionKind::get(SectionKind::Metadata));
+                                                    SectionKind::getMetadata());
 
     FoundIDATA = new PIC16Section(NewSection);
 
@@ -147,7 +147,7 @@
     const MCSection *NewSection = getOrCreateSection(name.c_str(),
                                                      // FIXME.
                                                      false,
-                                       SectionKind::get(SectionKind::Metadata));
+                                       SectionKind::getMetadata());
 
     FoundAutoSec = new PIC16Section(NewSection);
 
@@ -300,7 +300,7 @@
   PIC16Section *NewBSS = FoundBSS;
   if (NewBSS == NULL) {
     const MCSection *NewSection = getOrCreateSection(Name.c_str(), false,
-                                            SectionKind::get(SectionKind::BSS));
+                                            SectionKind::getBSS());
     NewBSS = new PIC16Section(NewSection);
     BSSSections.push_back(NewBSS);
   }
@@ -353,7 +353,7 @@
   if (NewIDATASec == NULL) {
     const MCSection *NewSection = getOrCreateSection(Name.c_str(), false,
                                                    // FIXME:
-                                       SectionKind::get(SectionKind::Metadata));
+                                       SectionKind::getMetadata());
     NewIDATASec = new PIC16Section(NewSection);
     IDATASections.push_back(NewIDATASec);
   }
@@ -392,7 +392,7 @@
   PIC16Section *NewRomSec = FoundROSec;
   if (NewRomSec == NULL) {
     const MCSection *NewSection = getOrCreateSection(Name.c_str(), false,
-                                       SectionKind::get(SectionKind::ReadOnly));
+                                       SectionKind::getReadOnly());
     NewRomSec = new PIC16Section(NewSection);
     ROSections.push_back(NewRomSec);
   }
diff --git a/lib/Target/XCore/XCoreTargetObjectFile.cpp b/lib/Target/XCore/XCoreTargetObjectFile.cpp
index e4d83dd..644b024 100644
--- a/lib/Target/XCore/XCoreTargetObjectFile.cpp
+++ b/lib/Target/XCore/XCoreTargetObjectFile.cpp
@@ -17,11 +17,11 @@
   TargetLoweringObjectFileELF::Initialize(Ctx, TM);
 
   TextSection = getOrCreateSection("\t.text", true, 
-                                   SectionKind::get(SectionKind::Text));
+                                   SectionKind::getText());
   DataSection = getOrCreateSection("\t.dp.data", false, 
-                                   SectionKind::get(SectionKind::DataRel));
+                                   SectionKind::getDataRel());
   BSSSection = getOrCreateSection("\t.dp.bss", false, 
-                                  SectionKind::get(SectionKind::BSS));
+                                  SectionKind::getBSS());
   
   // TLS globals are lowered in the backend to arrays indexed by the current
   // thread id. After lowering they require no special handling by the linker
@@ -32,8 +32,8 @@
   if (TM.getSubtarget<XCoreSubtarget>().isXS1A())
     // FIXME: Why is this writable ("datarel")???
     ReadOnlySection = getOrCreateSection("\t.dp.rodata", false,
-                                        SectionKind::get(SectionKind::DataRel));
+                                        SectionKind::getDataRel());
   else
     ReadOnlySection = getOrCreateSection("\t.cp.rodata", false,
-                                       SectionKind::get(SectionKind::ReadOnly));
+                                       SectionKind::getReadOnly());
 }
