[lld] r293612 - [ELF] - Linkerscript: do not fail on additional semicolons in linkerscript.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 31 00:50:12 PST 2017


Author: grimar
Date: Tue Jan 31 02:50:11 2017
New Revision: 293612

URL: http://llvm.org/viewvc/llvm-project?rev=293612&view=rev
Log:
[ELF] - Linkerscript: do not fail on additional semicolons in linkerscript.

Linux kernel linkerscript contains additional semicolon (last line):

.apicdrivers : AT(ADDR(.apicdrivers) - LOAD_OFFSET) {
  __apicdrivers = .;
  *(.apicdrivers);

I checked that both gold and bfd are able to parse something like:

.text : { ;;*(.text);;S = 0;; } }

Patch do the same.

Differential revision: https://reviews.llvm.org/D29276

Modified:
    lld/trunk/ELF/LinkerScript.cpp
    lld/trunk/test/ELF/linkerscript/sections.s

Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=293612&r1=293611&r2=293612&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Tue Jan 31 02:50:11 2017
@@ -1493,7 +1493,10 @@ ScriptParser::readOutputSectionDescripti
 
   while (!Error && !consume("}")) {
     StringRef Tok = next();
-    if (SymbolAssignment *Assignment = readProvideOrAssignment(Tok)) {
+    if (Tok == ";") {
+      // Commands may contain excessive additional semicolons around.
+      // We should be able to parse it.
+    } else if (SymbolAssignment *Assignment = readProvideOrAssignment(Tok)) {
       Cmd->Commands.emplace_back(Assignment);
     } else if (BytesDataCommand *Data = readBytesDataCommand(Tok)) {
       Cmd->Commands.emplace_back(Data);

Modified: lld/trunk/test/ELF/linkerscript/sections.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/sections.s?rev=293612&r1=293611&r2=293612&view=diff
==============================================================================
--- lld/trunk/test/ELF/linkerscript/sections.s (original)
+++ lld/trunk/test/ELF/linkerscript/sections.s Tue Jan 31 02:50:11 2017
@@ -93,6 +93,11 @@
 # SEC-MULTI: 6 .shstrtab     00000035 {{[0-9a-f]*}}
 # SEC-MULTI: 7 .strtab       00000008 {{[0-9a-f]*}}
 
+# Input section pattern contains additional semicolon.
+# Case found in linux kernel script. Check we are able to parse it.
+# RUN: echo "SECTIONS { .text : { ;;*(.text);;S = 0;; } }" > %t.script
+# RUN: ld.lld -o /dev/null --script %t.script %t
+
 .globl _start
 _start:
     mov $60, %rax




More information about the llvm-commits mailing list