[ELF] - Do not crash if common symbol has alignment 0.
authorGeorge Rimar <grimar@accesssoftek.com>
Tue, 4 Oct 2016 08:49:52 +0000 (08:49 +0000)
committerGeorge Rimar <grimar@accesssoftek.com>
Tue, 4 Oct 2016 08:49:52 +0000 (08:49 +0000)
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
lld/test/ELF/invalid/Inputs/common-symbol-alignment.elf [new file with mode: 0644]
lld/test/ELF/invalid/common-symbol-alignment.s [new file with mode: 0644]

index 9d22956..0981e2c 100644 (file)
@@ -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
new file mode 100644 (file)
index 0000000..9e7823b
Binary files /dev/null and b/lld/test/ELF/invalid/Inputs/common-symbol-alignment.elf differ
diff --git a/lld/test/ELF/invalid/common-symbol-alignment.s b/lld/test/ELF/invalid/common-symbol-alignment.s
new file mode 100644 (file)
index 0000000..671205f
--- /dev/null
@@ -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