[PATCH] D25433: [ELF] Don't crash if relocation target section is discarded
Eugene Leviant via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 12 01:56:00 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL283984: Don't crash if reloc targets discarded section (authored by evgeny777).
Changed prior to commit:
https://reviews.llvm.org/D25433?vs=74229&id=74341#toc
Repository:
rL LLVM
https://reviews.llvm.org/D25433
Files:
lld/trunk/ELF/Symbols.cpp
lld/trunk/test/ELF/linkerscript/discard-section.s
Index: lld/trunk/ELF/Symbols.cpp
===================================================================
--- lld/trunk/ELF/Symbols.cpp
+++ lld/trunk/ELF/Symbols.cpp
@@ -15,6 +15,7 @@
#include "Target.h"
#include "llvm/ADT/STLExtras.h"
+#include "llvm/Support/Path.h"
using namespace llvm;
using namespace llvm::object;
@@ -24,6 +25,12 @@
using namespace lld::elf;
template <class ELFT>
+static std::string getSectionName(InputSectionBase<ELFT> *S) {
+ StringRef Filename = S->getFile()->getName();
+ return (sys::path::filename(Filename) + "(" + S->Name + ")").str();
+}
+
+template <class ELFT>
static typename ELFT::uint getSymVA(const SymbolBody &Body,
typename ELFT::uint &Addend) {
typedef typename ELFT::uint uintX_t;
@@ -53,6 +60,11 @@
if (!SC)
return D.Value;
+ if (!SC->Live) {
+ warn("relocation refers to discarded section '" + getSectionName(SC) + "'");
+ return 0;
+ }
+
uintX_t Offset = D.Value;
if (D.isSection()) {
Offset += Addend;
Index: lld/trunk/test/ELF/linkerscript/discard-section.s
===================================================================
--- lld/trunk/test/ELF/linkerscript/discard-section.s
+++ lld/trunk/test/ELF/linkerscript/discard-section.s
@@ -1,10 +1,15 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
# RUN: echo "SECTIONS { /DISCARD/ : { *(.aaa*) } }" > %t.script
-# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: ld.lld -o %t1 --script %t.script %t 2>&1 | FileCheck --check-prefix=WARN %s
# RUN: llvm-objdump -section-headers %t1 | FileCheck %s
+
+# WARN: relocation refers to discarded section {{.+}}(.aaa)
# CHECK-NOT: .aaa
.section .aaa,"a"
-aaa:
+aab:
.quad 0
+
+.section .zzz,"a"
+ .quad aab
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25433.74341.patch
Type: text/x-patch
Size: 1793 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161012/136396f5/attachment.bin>
More information about the llvm-commits
mailing list