summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/InputFiles.cpp6
-rw-r--r--lld/test/ELF/invalid/mips-multiple-abiflags.test21
-rw-r--r--lld/test/ELF/invalid/mips-multiple-reginfo.test25
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
OpenPOWER on IntegriCloud