[PATCH] D30889: [ELF] Fix error reporting for eh_frame and other synthetic sections

Eugene Leviant via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 14 01:45:49 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL297711: [ELF] Fix error reporting for synthetic sections (authored by evgeny777).

Changed prior to commit:
  https://reviews.llvm.org/D30889?vs=91544&id=91682#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D30889

Files:
  lld/trunk/ELF/InputSection.cpp
  lld/trunk/test/ELF/linkerscript/eh-frame-reloc-out-of-range.s


Index: lld/trunk/test/ELF/linkerscript/eh-frame-reloc-out-of-range.s
===================================================================
--- lld/trunk/test/ELF/linkerscript/eh-frame-reloc-out-of-range.s
+++ lld/trunk/test/ELF/linkerscript/eh-frame-reloc-out-of-range.s
@@ -0,0 +1,27 @@
+## Check that error is correctly reported when .eh_frame reloc
+## is out of range
+
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+# RUN: echo "PHDRS { eh PT_LOAD; text PT_LOAD; }  \
+# RUN:       SECTIONS { . = 0x10000; \
+# RUN:         .eh_frame_hdr : { *(.eh_frame_hdr*) } : eh \
+# RUN:         .eh_frame : { *(.eh_frame) } : eh \
+# RUN:         . = 0xF00000000; \
+# RUN:         .text : { *(.text*) } : text \
+# RUN:       }" > %t.script
+# RUN: not ld.lld %t.o -T %t.script -o %t 2>&1 | FileCheck %s
+
+# CHECK: error: {{.*}}:(.eh_frame+0x20): relocation R_X86_64_PC32 out of range
+
+	.text
+  .globl _start
+_start:
+	.cfi_startproc
+  .cfi_lsda 0, _ex
+  nop
+	.cfi_endproc
+
+  .data
+_ex:
+  .word 0
Index: lld/trunk/ELF/InputSection.cpp
===================================================================
--- lld/trunk/ELF/InputSection.cpp
+++ lld/trunk/ELF/InputSection.cpp
@@ -172,6 +172,11 @@
 // Returns a source location string. Used to construct an error message.
 template <class ELFT>
 std::string InputSectionBase::getLocation(uint64_t Offset) {
+  // We don't have file for synthetic sections.
+  if (getFile<ELFT>() == nullptr)
+    return (Config->OutputFile + ":(" + Name + "+0x" + utohexstr(Offset) + ")")
+        .str();
+
   // First check if we can get desired values from debugging information.
   std::string LineInfo = getFile<ELFT>()->getLineInfo(this, Offset);
   if (!LineInfo.empty())


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D30889.91682.patch
Type: text/x-patch
Size: 1755 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170314/123bb2a3/attachment.bin>


More information about the llvm-commits mailing list