Index: lld/trunk/ELF/InputFiles.cpp =================================================================== --- lld/trunk/ELF/InputFiles.cpp +++ lld/trunk/ELF/InputFiles.cpp @@ -321,6 +321,9 @@ // they can be used to reason about object compatibility. return &InputSection::Discarded; case SHT_MIPS_REGINFO: + if (MipsReginfo) + fatal(getFilename(this) + + ": multiple SHT_MIPS_REGINFO sections are not allowed"); MipsReginfo.reset(new MipsReginfoInputSection(this, &Sec, Name)); return MipsReginfo.get(); case SHT_MIPS_OPTIONS: @@ -330,6 +333,9 @@ MipsOptions.reset(new MipsOptionsInputSection(this, &Sec, Name)); return MipsOptions.get(); case SHT_MIPS_ABIFLAGS: + if (MipsAbiFlags) + fatal(getFilename(this) + + ": multiple SHT_MIPS_ABIFLAGS sections are not allowed"); MipsAbiFlags.reset(new MipsAbiFlagsInputSection(this, &Sec, Name)); return MipsAbiFlags.get(); case SHT_RELA: Index: lld/trunk/test/ELF/invalid/mips-multiple-abiflags.test =================================================================== --- lld/trunk/test/ELF/invalid/mips-multiple-abiflags.test +++ lld/trunk/test/ELF/invalid/mips-multiple-abiflags.test @@ -0,0 +1,21 @@ +# RUN: yaml2obj %s -o %t +# RUN: not ld.lld %t -o %tout 2>&1 | FileCheck %s + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_MIPS + Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32] + +Sections: + - Name: .foo1 + Type: SHT_MIPS_ABIFLAGS + ISA: MIPS64 + + - Name: .foo2 + Type: SHT_MIPS_ABIFLAGS + ISA: MIPS64 + +# CHECK: multiple SHT_MIPS_ABIFLAGS sections are not allowed Index: lld/trunk/test/ELF/invalid/mips-multiple-reginfo.test =================================================================== --- lld/trunk/test/ELF/invalid/mips-multiple-reginfo.test +++ lld/trunk/test/ELF/invalid/mips-multiple-reginfo.test @@ -0,0 +1,25 @@ +# RUN: yaml2obj %s -o %t +# RUN: not ld.lld %t -o %tout 2>&1 | FileCheck %s + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_MIPS + Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32] + +Sections: + - Name: .foo1 + Type: SHT_MIPS_REGINFO + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 16 + Content: "000000000000000000000000000000000000000000000000" + + - Name: .foo2 + Type: SHT_MIPS_REGINFO + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 16 + Content: "000000000000000000000000000000000000000000000000" + +# CHECK: multiple SHT_MIPS_REGINFO sections are not allowed