Files
clang-p2996/lld/test/LinkerScript/expr-precedence.test
Rafael Auler 347fb02093 [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
2014-11-03 04:09:51 +00:00

35 lines
593 B
Plaintext

/*
RUN: linker-script-test %s | FileCheck %s
*/
SECTIONS {
. = foo >= bar + 1 ? bar : 1- - - -1;
}
/*
CHECK: kw_sections: SECTIONS
CHECK: l_brace: {
CHECK: identifier: .
CHECK: equal: =
CHECK: identifier: foo
CHECK: greaterequal: >=
CHECK: identifier: bar
CHECK: plus: +
CHECK: number: 1
CHECK: question: ?
CHECK: identifier: bar
CHECK: colon: :
CHECK: number: 1
CHECK: minus: -
CHECK: minus: -
CHECK: minus: -
CHECK: minus: -
CHECK: number: 1
CHECK: semicolon: ;
CHECK: r_brace: }
CHECK: eof:
CHECK: SECTIONS
CHECK: {
CHECK: . = (foo >= (bar + 1)) ? bar : (1 - (-(-(-1))))
CHECK: }
*/