diff options
author | Rafael Auler <rafaelauler@gmail.com> | 2014-11-03 04:09:51 +0000 |
---|---|---|
committer | Rafael Auler <rafaelauler@gmail.com> | 2014-11-03 04:09:51 +0000 |
commit | 347fb020932b617116ee01259ade235669c51d46 (patch) | |
tree | 7960a63ecbf41fa0a9d5f01e940bbd07068a10fe /lld/test/LinkerScript/missing-input-file-name.test | |
parent | 5f2764d88687910b6eb013b6e1c1e9744fc1ce93 (diff) | |
download | bcm5719-llvm-347fb020932b617116ee01259ade235669c51d46.tar.gz bcm5719-llvm-347fb020932b617116ee01259ade235669c51d46.zip |
[lld] Teach LLD how to parse most linker scripts
This patch does *not* implement any semantic actions, but it is a first step to
teach LLD how to read complete linker scripts. The additional linker scripts
statements whose parsing is now supported are:
* SEARCH_DIR directive
* SECTIONS directive
* Symbol definitions inside SECTIONS including PROVIDE and PROVIDE_HIDDEN
* C-like expressions used in many places in linker scripts
* Input to output sections mapping
The goal of this commit was guided towards completely parsing a default GNU ld
linker script and the linker script used to link the FreeBSD kernel. Thus, it
also adds a test case based on the default linker script used in GNU ld for
x86_64 ELF targets. I tested SPEC userland programs linked by GNU ld, using the
linker script dump'ed by this parser, and everything went fine. I then tested
linking the FreeBSD kernel with a dump'ed linker script, installed the new
kernel and booted it, everything went fine.
Directives that still need to be implemented:
* MEMORY
* PHDRS
Reviewers: silvas, shankarke and ruiu
http://reviews.llvm.org/D5852
llvm-svn: 221126
Diffstat (limited to 'lld/test/LinkerScript/missing-input-file-name.test')
-rw-r--r-- | lld/test/LinkerScript/missing-input-file-name.test | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lld/test/LinkerScript/missing-input-file-name.test b/lld/test/LinkerScript/missing-input-file-name.test new file mode 100644 index 00000000000..c4218ccef32 --- /dev/null +++ b/lld/test/LinkerScript/missing-input-file-name.test @@ -0,0 +1,25 @@ +/* + RUN: linker-script-test %s 2> %t | FileCheck %s + RUN: FileCheck -input-file %t -check-prefix=CHECK-ERR %s +*/ +SECTIONS { + .text : { ()} +/* +CHECK-ERR: [[@LINE-2]]:15: error: expected symbol assignment or input file name. +CHECK-ERR-NEXT: {{^ \.text : { \(\)}}} +CHECK-ERR-NEXT: {{^ \^}} +*/ +} + +/* +CHECK: kw_sections: SECTIONS +CHECK: l_brace: { +CHECK: identifier: .text +CHECK: colon: : +CHECK: l_brace: { +CHECK: l_paren: ( +CHECK: r_paren: ) +CHECK: r_brace: } +CHECK: r_brace: } +CHECK: eof: +*/ |