diff options
-rw-r--r-- | lld/ELF/InputFiles.cpp | 6 | ||||
-rw-r--r-- | lld/test/ELF/invalid/mips-multiple-abiflags.test | 21 | ||||
-rw-r--r-- | lld/test/ELF/invalid/mips-multiple-reginfo.test | 25 |
3 files changed, 52 insertions, 0 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 3aafdbb93a7..a5f9b909f11 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -321,6 +321,9 @@ elf::ObjectFile<ELFT>::createInputSection(const Elf_Shdr &Sec) { // they can be used to reason about object compatibility. return &InputSection<ELFT>::Discarded; case SHT_MIPS_REGINFO: + if (MipsReginfo) + fatal(getFilename(this) + + ": multiple SHT_MIPS_REGINFO sections are not allowed"); MipsReginfo.reset(new MipsReginfoInputSection<ELFT>(this, &Sec, Name)); return MipsReginfo.get(); case SHT_MIPS_OPTIONS: @@ -330,6 +333,9 @@ elf::ObjectFile<ELFT>::createInputSection(const Elf_Shdr &Sec) { MipsOptions.reset(new MipsOptionsInputSection<ELFT>(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<ELFT>(this, &Sec, Name)); return MipsAbiFlags.get(); case SHT_RELA: diff --git a/lld/test/ELF/invalid/mips-multiple-abiflags.test b/lld/test/ELF/invalid/mips-multiple-abiflags.test new file mode 100644 index 00000000000..797233e2bd6 --- /dev/null +++ b/lld/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 diff --git a/lld/test/ELF/invalid/mips-multiple-reginfo.test b/lld/test/ELF/invalid/mips-multiple-reginfo.test new file mode 100644 index 00000000000..59aa038fab7 --- /dev/null +++ b/lld/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 |