[lld] r289782 - [ELF] - Do not crash when move location counter backward.
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 14 23:27:28 PST 2016
Author: grimar
Date: Thu Dec 15 01:27:28 2016
New Revision: 289782
URL: http://llvm.org/viewvc/llvm-project?rev=289782&view=rev
Log:
[ELF] - Do not crash when move location counter backward.
PR31335 shows that we do that in next case:
SECTIONS { .text 0x2000 : {. = 0x100 ; *(.text) } }
though documentations says that "If . is used inside a section
description however, it refers to the byte offset from the start
of that section, not an absolute address. " looks does not work
as documented in bfd (as mentioned in comments for PR31335).
Until we find out the expected behavior was suggested at least not
to 'crash', what we do after trying to generate huge file.
Differential revision: https://reviews.llvm.org/D27712
Added:
lld/trunk/test/ELF/linkerscript/locationcountererr.s
Modified:
lld/trunk/ELF/LinkerScript.cpp
Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=289782&r1=289781&r2=289782&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Thu Dec 15 01:27:28 2016
@@ -464,7 +464,11 @@ template <class ELFT> void LinkerScript<
if (auto *AssignCmd = dyn_cast<SymbolAssignment>(&Base)) {
if (AssignCmd->Name == ".") {
// Update to location counter means update to section size.
- Dot = AssignCmd->Expression(Dot);
+ uintX_t Val = AssignCmd->Expression(Dot);
+ if (Val < Dot)
+ error("unable to move location counter backward for: " +
+ CurOutSec->Name);
+ Dot = Val;
CurOutSec->Size = Dot - CurOutSec->Addr;
return;
}
Added: lld/trunk/test/ELF/linkerscript/locationcountererr.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/locationcountererr.s?rev=289782&view=auto
==============================================================================
--- lld/trunk/test/ELF/linkerscript/locationcountererr.s (added)
+++ lld/trunk/test/ELF/linkerscript/locationcountererr.s Thu Dec 15 01:27:28 2016
@@ -0,0 +1,9 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: echo "SECTIONS { .text 0x2000 : {. = 0x10 ; *(.text) } }" > %t.script
+# RUN: not ld.lld %t --script %t.script -o %t1 2>&1 | FileCheck %s
+# CHECK: unable to move location counter backward for: .text
+
+.globl _start
+_start:
+nop
More information about the llvm-commits
mailing list