diff options
Diffstat (limited to 'test/ELF/linkerscript/operators.s')
-rw-r--r-- | test/ELF/linkerscript/operators.s | 93 |
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 |