diff options
-rw-r--r-- | lld/ELF/InputFiles.cpp | 3 | ||||
-rw-r--r-- | lld/test/ELF/invalid/Inputs/common-symbol-alignment.elf | bin | 0 -> 456 bytes | |||
-rw-r--r-- | lld/test/ELF/invalid/common-symbol-alignment.s | 6 |
3 files changed, 9 insertions, 0 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 9d229564ade..0981e2cd48f 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -400,6 +400,9 @@ SymbolBody *elf::ObjectFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) { /*CanOmitFromDynSym*/ false, this) ->body(); case SHN_COMMON: + if (Sym->st_value == 0) + fatal(getFilename(this) + ": common symbol '" + Name + + "' alignment is 0"); 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-alignment.elf b/lld/test/ELF/invalid/Inputs/common-symbol-alignment.elf Binary files differnew file mode 100644 index 00000000000..9e7823b852b --- /dev/null +++ b/lld/test/ELF/invalid/Inputs/common-symbol-alignment.elf diff --git a/lld/test/ELF/invalid/common-symbol-alignment.s b/lld/test/ELF/invalid/common-symbol-alignment.s new file mode 100644 index 00000000000..671205f87cc --- /dev/null +++ b/lld/test/ELF/invalid/common-symbol-alignment.s @@ -0,0 +1,6 @@ +# REQUIRES: x86 + +## 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 |