[PATCH] D91180: [ELF] Support multiple SORT in an input section description

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 11 10:56:40 PST 2020


MaskRay added inline comments.


================
Comment at: lld/ELF/ScriptParser.cpp:659
+    // SORT(.bar))) where we should break the loop.
+    while (!errorCount() && peek() != ")" && peek2() != "(")
       SectionMatcher.addPattern(unquote(next()));
----------------
grimar wrote:
> I'd reformat the comment to have the sample on a single line, it is hard to read currently.
> 
> ```
>     // peek2() is used to detect "EXCLUDE_FILE(" or "SORT("
>     // (e.g. *(.foo SORT(.bar)) ) where we should break the loop.
> ```
> 
> Also, our current grammar is LL(2), but we tried to use LL(1) where was possible.
> See (a bit outdated) comment in ScriptLexer.cpp.
> 
> // Our grammar of the linker script is LL(2), meaning that it needs at
> // most two-token lookahead to parse. The only place we need two-token
> // lookahead is labels in version scripts, where we need to parse "local :"
> // as if "local:".
> 
> Given above I'd go with explicit version:
> 
> ```
>     while (!errorCount() && peek() != ")" && peek() != "SORT" &&
>            peek() != "EXCLUDE_FILE")
> ```
> 
> Note:
> 1) That "(" is a valid file name. Your version goes into infinite loop with the following input (added the `FOO (` to script from test case):
> `# RUN: echo "SECTIONS { .abc : { *(SORT(.foo.*) .a* .a* SORT(.bar.*) FOO ( .b*) } }" > %t1.script`
> 2) Perhaps, the comment for `readInputSectionsList` should be updated.
> 
> 
Thanks for spotting the infinite loop problem! I added peekSortKind and changed back to LL(1).


================
Comment at: lld/test/ELF/linkerscript/sort2.s:8
 
-# CHECK:  Contents of section .abc:
-# CHECK:   01000000 00000000 02000000 00000000
-# CHECK:   03000000 00000000 04000000 00000000
-# CHECK:   06000000 00000000 05000000 00000000
+## FIXME Some input sections are duplicated in .abc and their second occurrences are zeros.
+# CHECK:      Hex dump of section '.abc'
----------------
grimar wrote:
> This is what is fixed by D91127, right?
Yes.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91180/new/

https://reviews.llvm.org/D91180



More information about the llvm-commits mailing list