1# REQUIRES: x86 2# RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o %t.o 3# RUN: ld.lld %t.o -T %s -o %t 4# RUN: llvm-nm -p %t | FileCheck %s 5 6SECTIONS { 7 _start = .; 8 plus = 1 + 2 + 3; 9 minus = 5 - 1; 10 div = 6 / 2; 11 mod = 20 % 7; 12 mul = 1 + 2 * 3; 13 nospace = 1+2*6/3; 14 braces = 1 + (2 + 3) * 4; 15 and = 0xbb & 0xee; 16 ternary1 = 1 ? 1 : 2; 17 ternary2 = 0 ? 1 : 2; 18 less = 1 < 0 ? 1 : 2; 19 lesseq = 1 <= 1 ? 1 : 2; 20 greater = 0 > 1 ? 1 : 2; 21 greatereq = 1 >= 1 ? 1 : 2; 22 eq = 1 == 1 ? 1 : 2; 23 neq = 1 != 1 ? 1 : 2; 24 plusassign = 1; 25 plusassign += 2; 26 unary = -1 + 3; 27 lshift = 1 << 5; 28 rshift = 0xff >> 3; 29 precedence1 = 1 | 0xff & 1 << 1 + 1 * 2; 30 precedence2 = (1 | (0xff & (1 << (1 + (1 * 2))))); 31 maxpagesize = CONSTANT (MAXPAGESIZE); 32 commonpagesize = CONSTANT (COMMONPAGESIZE); 33 . = 0xfff0; 34 datasegmentalign = DATA_SEGMENT_ALIGN (0xffff, 0); 35 datasegmentalign2 = DATA_SEGMENT_ALIGN (0, 0); 36 _end = .; 37 minus_rel = _end - 0x10; 38 minus_abs = _end - _start; 39 max = MAX(11, 22); 40 min = MIN(11, 22); 41 log2ceil0 = LOG2CEIL(0); 42 log2ceil1 = LOG2CEIL(1); 43 log2ceil2 = LOG2CEIL(2); 44 log2ceil3 = LOG2CEIL(3); 45 log2ceil4 = LOG2CEIL(4); 46 log2ceil100000000 = LOG2CEIL(0x100000000); 47 log2ceil100000001 = LOG2CEIL(0x100000001); 48 log2ceilmax = LOG2CEIL(0xffffffffffffffff); 49 logicaland1 = 0 && 0; 50 logicaland2 = 0 && 1; 51 logicaland3 = 1 && 0; 52 logicaland4 = 1 && 1; 53 logicalor1 = 0 || 0; 54 logicalor2 = 0 || 1; 55 logicalor3 = 1 || 0; 56 logicalor4 = 1 || 1; 57} 58 59# CHECK: 00000000000006 A plus 60# CHECK-NEXT: 00000000000004 A minus 61# CHECK-NEXT: 00000000000003 A div 62# CHECK-NEXT: 00000000000006 A mod 63# CHECK-NEXT: 00000000000007 A mul 64# CHECK-NEXT: 00000000000005 A nospace 65# CHECK-NEXT: 00000000000015 A braces 66# CHECK-NEXT: 000000000000aa A and 67# CHECK-NEXT: 00000000000001 A ternary1 68# CHECK-NEXT: 00000000000002 A ternary2 69# CHECK-NEXT: 00000000000002 A less 70# CHECK-NEXT: 00000000000001 A lesseq 71# CHECK-NEXT: 00000000000002 A greater 72# CHECK-NEXT: 00000000000001 A greatereq 73# CHECK-NEXT: 00000000000001 A eq 74# CHECK-NEXT: 00000000000002 A neq 75# CHECK-NEXT: 00000000000003 A plusassign 76# CHECK-NEXT: 00000000000002 A unary 77# CHECK-NEXT: 00000000000020 A lshift 78# CHECK-NEXT: 0000000000001f A rshift 79# CHECK-NEXT: 00000000000009 A precedence1 80# CHECK-NEXT: 00000000000009 A precedence2 81# CHECK-NEXT: 00000000001000 A maxpagesize 82# CHECK-NEXT: 00000000001000 A commonpagesize 83# CHECK-NEXT: 0000000000ffff A datasegmentalign 84# CHECK-NEXT: 0000000000fff0 A datasegmentalign2 85# CHECK-NEXT: 0000000000ffe0 T minus_rel 86# CHECK-NEXT: 0000000000fff0 A minus_abs 87# CHECK-NEXT: 00000000000016 A max 88# CHECK-NEXT: 0000000000000b A min 89# CHECK-NEXT: 0000000000000000 A log2ceil0 90# CHECK-NEXT: 0000000000000000 A log2ceil1 91# CHECK-NEXT: 0000000000000001 A log2ceil2 92# CHECK-NEXT: 0000000000000002 A log2ceil3 93# CHECK-NEXT: 0000000000000002 A log2ceil4 94# CHECK-NEXT: 0000000000000020 A log2ceil100000000 95# CHECK-NEXT: 0000000000000021 A log2ceil100000001 96# CHECK-NEXT: 0000000000000040 A log2ceilmax 97# CHECK-NEXT: 00000000000000 A logicaland1 98# CHECK-NEXT: 00000000000000 A logicaland2 99# CHECK-NEXT: 00000000000000 A logicaland3 100# CHECK-NEXT: 00000000000001 A logicaland4 101# CHECK-NEXT: 00000000000000 A logicalor1 102# CHECK-NEXT: 00000000000001 A logicalor2 103# CHECK-NEXT: 00000000000001 A logicalor3 104# CHECK-NEXT: 00000000000001 A logicalor4 105 106## Mailformed number error. 107# RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script 108# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 109# RUN: FileCheck --check-prefix=NUMERR %s 110# NUMERR: malformed number: 0x12Q41 111 112## Missing closing bracket. 113# RUN: echo "SECTIONS { . = (1; }" > %t.script 114# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 115# RUN: FileCheck --check-prefix=BRACKETERR %s 116# BRACKETERR: ) expected, but got ; 117 118## Missing opening bracket. 119# RUN: echo "SECTIONS { . = 1); }" > %t.script 120# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 121# RUN: FileCheck --check-prefix=BRACKETERR2 %s 122# BRACKETERR2: ; expected, but got ) 123 124## Empty expression. 125# RUN: echo "SECTIONS { . = ; }" > %t.script 126# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 127# RUN: FileCheck --check-prefix=ERREXPR %s 128# ERREXPR: malformed number: ; 129 130## Div by zero error. 131# RUN: echo "SECTIONS { . = 1 / 0; }" > %t.script 132# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 133# RUN: FileCheck --check-prefix=DIVZERO %s 134# DIVZERO: {{.*}}.script:1: division by zero 135 136## Mod by zero error. 137# RUN: echo "SECTIONS { . = 1 % 0; }" > %t.script 138# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 139# RUN: FileCheck --check-prefix=MODZERO %s 140# MODZERO: {{.*}}.script:1: modulo by zero 141 142## Broken ternary operator expression. 143# RUN: echo "SECTIONS { . = 1 ? 2; }" > %t.script 144# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 145# RUN: FileCheck --check-prefix=TERNERR %s 146# TERNERR: : expected, but got ; 147