From 4bc5ad4c37483fc250e936189b90fc6682df1b35 Mon Sep 17 00:00:00 2001 From: Igor Kudrin Date: Thu, 19 Nov 2015 19:08:45 +0000 Subject: [PATCH] [ELF] Prevent SEGFAULT in case of conflict with an internally defined symbol. Differential Revision: http://reviews.llvm.org/D14832 llvm-svn: 253588 --- lld/ELF/SymbolTable.cpp | 3 ++- lld/test/ELF/duplicate-internal.s | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 lld/test/ELF/duplicate-internal.s diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index f47035be9ccb..6e4f55ac8325 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -139,7 +139,8 @@ void SymbolTable::reportConflict(const Twine &Message, } std::string Msg = (Message + ": " + Old.getName() + " in " + - OldFile->getName() + " and " + NewFile->getName()) + (OldFile ? OldFile->getName() : "(internal)") + " and " + + (NewFile ? NewFile->getName() : "(internal)")) .str(); if (Warning) warning(Msg); diff --git a/lld/test/ELF/duplicate-internal.s b/lld/test/ELF/duplicate-internal.s new file mode 100644 index 000000000000..2395a6cae0db --- /dev/null +++ b/lld/test/ELF/duplicate-internal.s @@ -0,0 +1,11 @@ +# Should print an expected message in case of conflict with an internally generated symbol. + +# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o +# RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s + +# CHECK: duplicate symbol: _gp in (internal) and {{.*}} + +# REQUIRES: mips + + .globl _gp +_gp = 0