summaryrefslogtreecommitdiff
path: root/test/ELF/linkerscript/operators.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/ELF/linkerscript/operators.s')
-rw-r--r--test/ELF/linkerscript/operators.s93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/ELF/linkerscript/operators.s b/test/ELF/linkerscript/operators.s
new file mode 100644
index 000000000000..470558d29df1
--- /dev/null
+++ b/test/ELF/linkerscript/operators.s
@@ -0,0 +1,93 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: echo "SECTIONS { \
+# RUN: plus = 1 + 2 + 3; \
+# RUN: minus = 5 - 1; \
+# RUN: div = 6 / 2; \
+# RUN: mul = 1 + 2 * 3; \
+# RUN: nospace = 1+2*6/3; \
+# RUN: braces = 1 + (2 + 3) * 4; \
+# RUN: and = 0xbb & 0xee; \
+# RUN: ternary1 = 1 ? 1 : 2; \
+# RUN: ternary2 = 0 ? 1 : 2; \
+# RUN: less = 1 < 0 ? 1 : 2; \
+# RUN: lesseq = 1 <= 1 ? 1 : 2; \
+# RUN: greater = 0 > 1 ? 1 : 2; \
+# RUN: greatereq = 1 >= 1 ? 1 : 2; \
+# RUN: eq = 1 == 1 ? 1 : 2; \
+# RUN: neq = 1 != 1 ? 1 : 2; \
+# RUN: plusassign = 1; \
+# RUN: plusassign += 2; \
+# RUN: unary = -1 + 3; \
+# RUN: lshift = 1 << 5; \
+# RUN: rshift = 0xff >> 3; \
+# RUN: maxpagesize = CONSTANT (MAXPAGESIZE); \
+# RUN: commonpagesize = CONSTANT (COMMONPAGESIZE); \
+# RUN: . = 0xfff0; \
+# RUN: datasegmentalign = DATA_SEGMENT_ALIGN (0xffff, 0); \
+# RUN: }" > %t.script
+# RUN: ld.lld %t --script %t.script -o %t2
+# RUN: llvm-objdump -t %t2 | FileCheck %s
+
+# CHECK: 00000000000006 *ABS* 00000000 plus
+# CHECK: 00000000000004 *ABS* 00000000 minus
+# CHECK: 00000000000003 *ABS* 00000000 div
+# CHECK: 00000000000007 *ABS* 00000000 mul
+# CHECK: 00000000000005 *ABS* 00000000 nospace
+# CHECK: 00000000000015 *ABS* 00000000 braces
+# CHECK: 000000000000aa *ABS* 00000000 and
+# CHECK: 00000000000001 *ABS* 00000000 ternary1
+# CHECK: 00000000000002 *ABS* 00000000 ternary2
+# CHECK: 00000000000002 *ABS* 00000000 less
+# CHECK: 00000000000001 *ABS* 00000000 lesseq
+# CHECK: 00000000000002 *ABS* 00000000 greater
+# CHECK: 00000000000001 *ABS* 00000000 greatereq
+# CHECK: 00000000000001 *ABS* 00000000 eq
+# CHECK: 00000000000002 *ABS* 00000000 neq
+# CHECK: 00000000000003 *ABS* 00000000 plusassign
+# CHECK: 00000000000002 *ABS* 00000000 unary
+# CHECK: 00000000000020 *ABS* 00000000 lshift
+# CHECK: 0000000000001f *ABS* 00000000 rshift
+# CHECK: 00000000001000 *ABS* 00000000 maxpagesize
+# CHECK: 00000000001000 *ABS* 00000000 commonpagesize
+# CHECK: 0000000000ffff *ABS* 00000000 datasegmentalign
+
+## Mailformed number error.
+# RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script
+# RUN: not ld.lld %t --script %t.script -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=NUMERR %s
+# NUMERR: malformed number: 0x12Q41
+
+## Missing closing bracket.
+# RUN: echo "SECTIONS { . = (1; }" > %t.script
+# RUN: not ld.lld %t --script %t.script -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=BRACKETERR %s
+# BRACKETERR: ) expected, but got ;
+
+## Missing opening bracket.
+# RUN: echo "SECTIONS { . = 1); }" > %t.script
+# RUN: not ld.lld %t --script %t.script -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=BRACKETERR2 %s
+# BRACKETERR2: ; expected, but got )
+
+## Empty expression.
+# RUN: echo "SECTIONS { . = ; }" > %t.script
+# RUN: not ld.lld %t --script %t.script -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=ERREXPR %s
+# ERREXPR: malformed number: ;
+
+## Div by zero error.
+# RUN: echo "SECTIONS { . = 1 / 0; }" > %t.script
+# RUN: not ld.lld %t --script %t.script -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=DIVZERO %s
+# DIVZERO: division by zero
+
+## Broken ternary operator expression.
+# RUN: echo "SECTIONS { . = 1 ? 2; }" > %t.script
+# RUN: not ld.lld %t --script %t.script -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=TERNERR %s
+# TERNERR: : expected, but got ;
+
+.globl _start
+_start:
+nop