Index: lld/trunk/ELF/InputFiles.cpp =================================================================== --- lld/trunk/ELF/InputFiles.cpp +++ lld/trunk/ELF/InputFiles.cpp @@ -252,6 +252,14 @@ // they can be used to reason about object compatibility. Sections[I] = &InputSection::Discarded; break; + case SHT_MIPS_REGINFO: + MipsReginfo.reset(new MipsReginfoInputSection(this, &Sec)); + Sections[I] = MipsReginfo.get(); + break; + case SHT_MIPS_OPTIONS: + MipsOptions.reset(new MipsOptionsInputSection(this, &Sec)); + Sections[I] = MipsOptions.get(); + break; default: Sections[I] = createInputSection(Sec); } @@ -298,19 +306,6 @@ if (Config->StripDebug && Name.startswith(".debug")) return &InputSection::Discarded; - // A MIPS object file has a special sections that contain register - // usage info, which need to be handled by the linker specially. - if (Config->EMachine == EM_MIPS) { - switch (Sec.sh_type) { - case SHT_MIPS_REGINFO: - MipsReginfo.reset(new MipsReginfoInputSection(this, &Sec)); - return MipsReginfo.get(); - case SHT_MIPS_OPTIONS: - MipsOptions.reset(new MipsOptionsInputSection(this, &Sec)); - return MipsOptions.get(); - } - } - // The linker merges EH (exception handling) frames and creates a // .eh_frame_hdr section for runtime. So we handle them with a special // class. For relocatable outputs, they are just passed through.