summaryrefslogtreecommitdiffstats
path: root/lld/test/LinkerScript
diff options
context:
space:
mode:
authorMeador Inge <meadori@codesourcery.com>2015-03-11 15:34:44 +0000
committerMeador Inge <meadori@codesourcery.com>2015-03-11 15:34:44 +0000
commit2ce1ea86d0b30436110972f5d5f0814094027a97 (patch)
tree4a795824f4201eb13f4939704b175a62e535a8b5 /lld/test/LinkerScript
parentc04b6f242ca4a16165bea8043c2cdc19407cf240 (diff)
downloadbcm5719-llvm-2ce1ea86d0b30436110972f5d5f0814094027a97.tar.gz
bcm5719-llvm-2ce1ea86d0b30436110972f5d5f0814094027a97.zip
LinkerScript: Add parsing of the MEMORY command
This patch implements parsing of the GNU ld MEMORY command [1]. The command and the memory block definitions are parsed as specified (including the slightly strange "o" and "l" keywords). Evaluation will be added at a later point in time. [1] https://sourceware.org/binutils/docs-2.25/ld/MEMORY.html llvm-svn: 231928
Diffstat (limited to 'lld/test/LinkerScript')
-rw-r--r--lld/test/LinkerScript/memory-empty.test17
-rw-r--r--lld/test/LinkerScript/memory-missing-attrs.test32
-rw-r--r--lld/test/LinkerScript/memory-missing-length.test29
-rw-r--r--lld/test/LinkerScript/memory-missing-name.test31
-rw-r--r--lld/test/LinkerScript/memory-missing-origin.test30
-rw-r--r--lld/test/LinkerScript/memory-valid.test56
6 files changed, 195 insertions, 0 deletions
diff --git a/lld/test/LinkerScript/memory-empty.test b/lld/test/LinkerScript/memory-empty.test
new file mode 100644
index 00000000000..b71022afdff
--- /dev/null
+++ b/lld/test/LinkerScript/memory-empty.test
@@ -0,0 +1,17 @@
+/*
+ RUN: linker-script-test %s | FileCheck %s
+*/
+
+MEMORY
+{
+}
+
+/*
+CHECK: kw_memory: MEMORY
+CHECK: l_brace: {
+CHECK: r_brace: }
+CHECK: eof:
+CHECK: MEMORY
+CHECK: {
+CHECK: }
+*/
diff --git a/lld/test/LinkerScript/memory-missing-attrs.test b/lld/test/LinkerScript/memory-missing-attrs.test
new file mode 100644
index 00000000000..fbbf38b7651
--- /dev/null
+++ b/lld/test/LinkerScript/memory-missing-attrs.test
@@ -0,0 +1,32 @@
+/*
+ RUN: linker-script-test %s 2> %t | FileCheck %s
+ RUN: FileCheck -input-file %t -check-prefix=CHECK-ERR %s
+*/
+
+MEMORY
+{
+ ram () : ORIGIN = 0x20000000, LENGTH = 128M
+/*
+CHECK-ERR: [[@LINE-2]]:8: error: Expected memory attribute string.
+CHECK-ERR-NEXT: {{^ ram \(\) : ORIGIN = 0x20000000, LENGTH = 128M}}
+CHECK-ERR-NEXT: {{^ \^}}
+*/
+}
+
+/*
+CHECK: kw_memory: MEMORY
+CHECK: l_brace: {
+CHECK: identifier: ram
+CHECK: l_paren: (
+CHECK: r_paren: )
+CHECK: colon: :
+CHECK: kw_origin: ORIGIN
+CHECK: equal: =
+CHECK: number: 0x20000000
+CHECK: comma: ,
+CHECK: kw_length: LENGTH
+CHECK: equal: =
+CHECK: number: 128M
+CHECK: r_brace: }
+CHECK: eof:
+*/
diff --git a/lld/test/LinkerScript/memory-missing-length.test b/lld/test/LinkerScript/memory-missing-length.test
new file mode 100644
index 00000000000..f317c9a2678
--- /dev/null
+++ b/lld/test/LinkerScript/memory-missing-length.test
@@ -0,0 +1,29 @@
+/*
+ RUN: linker-script-test %s 2> %t | FileCheck %s
+ RUN: FileCheck -input-file %t -check-prefix=CHECK-ERR %s
+*/
+
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0x20000000,
+}
+/*
+CHECK-ERR: [[@LINE-2]]:1: error: expected LENGTH
+CHECK-ERR-NEXT: {{^}}}
+CHECK-ERR-NEXT: {{^\^}}
+*/
+
+/*
+CHECK: kw_memory: MEMORY
+CHECK: l_brace: {
+CHECK: identifier: ram
+CHECK: l_paren: (
+CHECK: identifier: rwx
+CHECK: r_paren: )
+CHECK: colon: :
+CHECK: kw_origin: ORIGIN
+CHECK: equal: =
+CHECK: number: 0x20000000
+CHECK: r_brace: }
+CHECK: eof:
+*/
diff --git a/lld/test/LinkerScript/memory-missing-name.test b/lld/test/LinkerScript/memory-missing-name.test
new file mode 100644
index 00000000000..46597d4351d
--- /dev/null
+++ b/lld/test/LinkerScript/memory-missing-name.test
@@ -0,0 +1,31 @@
+/*
+ RUN: linker-script-test %s 2> %t | FileCheck %s
+ RUN: FileCheck -input-file %t -check-prefix=CHECK-ERR %s
+*/
+
+MEMORY
+{
+ (rwx) : ORIGIN = 0x20000000, LENGTH = 128M
+/*
+CHECK-ERR: [[@LINE-2]]:3: error: expected memory block definition.
+CHECK-ERR-NEXT: {{^ \(rwx\) : ORIGIN = 0x20000000, LENGTH = 128M}}
+CHECK-ERR-NEXT: {{^ \^}}
+*/
+}
+
+/*
+CHECK: kw_memory: MEMORY
+CHECK: l_brace: {
+CHECK: l_paren: (
+CHECK: r_paren: )
+CHECK: colon: :
+CHECK: kw_origin: ORIGIN
+CHECK: equal: =
+CHECK: number: 0x20000000
+CHECK: comma: ,
+CHECK: kw_length: LENGTH
+CHECK: equal: =
+CHECK: number: 128M
+CHECK: r_brace: }
+CHECK: eof:
+*/
diff --git a/lld/test/LinkerScript/memory-missing-origin.test b/lld/test/LinkerScript/memory-missing-origin.test
new file mode 100644
index 00000000000..50a64d17d6c
--- /dev/null
+++ b/lld/test/LinkerScript/memory-missing-origin.test
@@ -0,0 +1,30 @@
+/*
+ RUN: linker-script-test %s 2> %t | FileCheck %s
+ RUN: FileCheck -input-file %t -check-prefix=CHECK-ERR %s
+*/
+
+MEMORY
+{
+ ram (rwx) : LENGTH = 128M
+/*
+CHECK-ERR: [[@LINE-2]]:15: error: expected ORIGIN
+CHECK-ERR-NEXT: {{^ ram \(rwx\) : LENGTH = 128M}}
+CHECK-ERR-NEXT: {{^ \^}}
+*/
+
+}
+
+/*
+CHECK: kw_memory: MEMORY
+CHECK: l_brace: {
+CHECK: identifier: ram
+CHECK: l_paren: (
+CHECK: identifier: rwx
+CHECK: r_paren: )
+CHECK: colon: :
+CHECK: kw_length: LENGTH
+CHECK: equal: =
+CHECK: number: 128M
+CHECK: r_brace: }
+CHECK: eof:
+*/
diff --git a/lld/test/LinkerScript/memory-valid.test b/lld/test/LinkerScript/memory-valid.test
new file mode 100644
index 00000000000..7a0e906c5fb
--- /dev/null
+++ b/lld/test/LinkerScript/memory-valid.test
@@ -0,0 +1,56 @@
+/*
+ RUN: linker-script-test %s | FileCheck %s
+*/
+
+MEMORY
+{
+ ram (rwx) : ORIGIN = 0x20000000, LENGTH = 96K
+ rom (rx) : org = 0x0, len = 256K
+ boot : o = 0x1000000, l = 0x5f00
+}
+
+/*
+CHECK: kw_memory: MEMORY
+CHECK: l_brace: {
+CHECK: identifier: ram
+CHECK: l_paren: (
+CHECK: identifier: rwx
+CHECK: r_paren: )
+CHECK: colon: :
+CHECK: kw_origin: ORIGIN
+CHECK: equal: =
+CHECK: number: 0x20000000
+CHECK: comma: ,
+CHECK: kw_length: LENGTH
+CHECK: equal: =
+CHECK: number: 96K
+CHECK: identifier: rom
+CHECK: l_paren: (
+CHECK: identifier: rx
+CHECK: r_paren: )
+CHECK: colon: :
+CHECK: kw_origin: org
+CHECK: equal: =
+CHECK: number: 0x0
+CHECK: comma: ,
+CHECK: kw_length: len
+CHECK: equal: =
+CHECK: number: 256K
+CHECK: identifier: boot
+CHECK: colon: :
+CHECK: kw_origin: o
+CHECK: equal: =
+CHECK: number: 0x1000000
+CHECK: comma: ,
+CHECK: kw_length: l
+CHECK: equal: =
+CHECK: number: 0x5f00
+CHECK: r_brace: }
+CHECK: eof:
+CHECK: MEMORY
+CHECK: {
+CHECK: ram (rwx) : ORIGIN = 536870912, LENGTH = 98304
+CHECK: rom (rx) : ORIGIN = 0, LENGTH = 262144
+CHECK: boot : ORIGIN = 16777216, LENGTH = 24320
+CHECK: }
+*/
OpenPOWER on IntegriCloud