diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp
index 610f6856067..9b399eb29eb 100644
--- a/lib/MC/ELFObjectWriter.cpp
+++ b/lib/MC/ELFObjectWriter.cpp
@@ -459,7 +459,7 @@ void ELFObjectWriterImpl::WriteSymbolTable(MCDataFragment *F,
       static_cast<const MCSectionELF&>(it->getSection());
     // Leave out relocations so we don't have indexes within
     // the relocations messed up
-    if (Section.getType() == ELF::SHT_RELA)
+    if (Section.getType() == ELF::SHT_RELA || Section.getType() == ELF::SHT_REL)
       continue;
     if (Index == Asm.size())
       continue;
@@ -747,12 +747,13 @@ void ELFObjectWriterImpl::WriteRelocation(MCAssembler &Asm, MCAsmLayout &Layout,
       static_cast<const MCSectionELF&>(SD.getSection());
 
     const StringRef SectionName = Section.getSectionName();
-    std::string RelaSectionName = ".rela";
+    std::string RelaSectionName = HasRelocationAddend ? ".rela" : ".rel";
 
     RelaSectionName += SectionName;
     unsigned EntrySize = Is64Bit ? ELF::SYMENTRY_SIZE64 : ELF::SYMENTRY_SIZE32; 
 
-    RelaSection = Ctx.getELFSection(RelaSectionName, ELF::SHT_RELA, 0,
+    RelaSection = Ctx.getELFSection(RelaSectionName, HasRelocationAddend ?
+                                    ELF::SHT_RELA : ELF::SHT_REL, 0,
                                     SectionKind::getReadOnly(),
                                     false, EntrySize);
 
@@ -945,7 +946,6 @@ void ELFObjectWriterImpl::WriteObject(const MCAssembler &Asm,
     case ELF::SHT_RELA: {
       const MCSection *SymtabSection;
       const MCSection *InfoSection;
-      StringRef SectionName;
       const MCSectionData *SymtabSD;
       const MCSectionData *InfoSD;
 
@@ -956,8 +956,10 @@ void ELFObjectWriterImpl::WriteObject(const MCAssembler &Asm,
       // we have to count the empty section in too
       sh_link = SymtabSD->getLayoutOrder() + 1;
 
-      SectionName = Section.getSectionName();
-      SectionName = SectionName.slice(5, SectionName.size());
+      // Remove ".rel" and ".rela" prefixes.
+      unsigned SecNameLen = (Section.getType() == ELF::SHT_REL) ? 4 : 5;
+      StringRef SectionName = Section.getSectionName().substr(SecNameLen);
+
       InfoSection = Asm.getContext().getELFSection(SectionName,
                                                    ELF::SHT_PROGBITS, 0,
                                                    SectionKind::getReadOnly(),