diff options
-rw-r--r-- | lld/ELF/InputFiles.cpp | 4 | ||||
-rw-r--r-- | lld/test/ELF/invalid/Inputs/common-symbol-alignment2.elf | bin | 0 -> 456 bytes | |||
-rw-r--r-- | lld/test/ELF/invalid/common-symbol-alignment.s | 8 |
3 files changed, 9 insertions, 3 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index cc8a8492327..e3266f17634 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -437,9 +437,9 @@ SymbolBody *elf::ObjectFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) { /*CanOmitFromDynSym*/ false, this) ->body(); case SHN_COMMON: - if (Sym->st_value == 0) + if (Sym->st_value == 0 || Sym->st_value >= UINT32_MAX) fatal(getFilename(this) + ": common symbol '" + Name + - "' alignment is 0"); + "' has invalid alignment: " + Twine(Sym->st_value)); return elf::Symtab<ELFT>::X->addCommon(Name, Sym->st_size, Sym->st_value, Binding, Sym->st_other, Sym->getType(), this) diff --git a/lld/test/ELF/invalid/Inputs/common-symbol-alignment2.elf b/lld/test/ELF/invalid/Inputs/common-symbol-alignment2.elf Binary files differnew file mode 100644 index 00000000000..21c2457cbea --- /dev/null +++ b/lld/test/ELF/invalid/Inputs/common-symbol-alignment2.elf diff --git a/lld/test/ELF/invalid/common-symbol-alignment.s b/lld/test/ELF/invalid/common-symbol-alignment.s index 671205f87cc..2a654b11479 100644 --- a/lld/test/ELF/invalid/common-symbol-alignment.s +++ b/lld/test/ELF/invalid/common-symbol-alignment.s @@ -3,4 +3,10 @@ ## common-symbol-alignment.elf contains common symbol with zero alignment. # RUN: not ld.lld %S/Inputs/common-symbol-alignment.elf \ # RUN: -o %t 2>&1 | FileCheck %s -# CHECK: common symbol 'bar' alignment is 0 +# CHECK: common symbol 'bar' has invalid alignment: 0 + +## common-symbol-alignment2.elf contains common symbol alignment greater +## than UINT32_MAX. +# RUN: not ld.lld %S/Inputs/common-symbol-alignment2.elf \ +# RUN: -o %t 2>&1 | FileCheck %s --check-prefix=BIG +# BIG: common symbol 'bar' has invalid alignment: 271644049215 |