From 0c82561c4c5aced6caaf3a1d56d7704d95e3eae8 Mon Sep 17 00:00:00 2001 From: George Rimar Date: Tue, 4 Oct 2016 08:49:52 +0000 Subject: [PATCH] [ELF] - Do not crash if common symbol has alignment 0. Testcase contains a common symbol with zero alignment, previously lld would crash, patch fixes that. Differential revision: https://reviews.llvm.org/D25085 llvm-svn: 283197 --- lld/ELF/InputFiles.cpp | 3 +++ lld/test/ELF/invalid/Inputs/common-symbol-alignment.elf | Bin 0 -> 456 bytes lld/test/ELF/invalid/common-symbol-alignment.s | 6 ++++++ 3 files changed, 9 insertions(+) create mode 100644 lld/test/ELF/invalid/Inputs/common-symbol-alignment.elf create mode 100644 lld/test/ELF/invalid/common-symbol-alignment.s diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 9d22956..0981e2c 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -400,6 +400,9 @@ SymbolBody *elf::ObjectFile::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::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 new file mode 100644 index 0000000000000000000000000000000000000000..9e7823b852b2c82881c6f44d75edc268eeafcbd8 GIT binary patch literal 456 zcmb<-^>JfjWMqH=Mg}_u1P><4z;FV=WN-kp9T-@!s)Q(H2U0=|pZ-I52vQy_&V&$v zvbce?00X8tgI-B$MF~SvVi7}CY6^p1aY<20ViJ(9%mvXvaU%?~$PwTNYGTHsaRF3J t1x*e;j6i%4W`> literal 0 HcmV?d00001 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 0000000..671205f --- /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 -- 2.7.4