reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux /dev/null -o %t
# RUN: ld.lld %t --script %s -o %t2
# RUN: llvm-objdump -t %t2 | FileCheck %s

SECTIONS {
  _start = .;
  plus = 1 + 2 + 3;
  minus = 5 - 1;
  div = 6 / 2;
  mod = 20 % 7;
  mul = 1 + 2 * 3;
  nospace = 1+2*6/3;
  braces = 1 + (2 + 3) * 4;
  and = 0xbb & 0xee;
  ternary1 = 1 ? 1 : 2;
  ternary2 = 0 ? 1 : 2;
  less = 1 < 0 ? 1 : 2;
  lesseq = 1 <= 1 ? 1 : 2;
  greater = 0 > 1 ? 1 : 2;
  greatereq = 1 >= 1 ? 1 : 2;
  eq = 1 == 1 ? 1 : 2;
  neq = 1 != 1 ? 1 : 2;
  plusassign = 1;
  plusassign += 2;
  unary = -1 + 3;
  lshift = 1 << 5;
  rshift = 0xff >> 3;
  precedence1 = 1 | 0xff & 1 << 1 + 1 * 2;
  precedence2 = (1 | (0xff & (1 << (1 + (1 * 2)))));
  maxpagesize = CONSTANT (MAXPAGESIZE);
  commonpagesize = CONSTANT (COMMONPAGESIZE);
  . = 0xfff0;
  datasegmentalign = DATA_SEGMENT_ALIGN (0xffff, 0);
  datasegmentalign2 = DATA_SEGMENT_ALIGN (0, 0);
  _end = .;
  minus_rel = _end - 0x10;
  minus_abs = _end - _start;
  max = MAX(11, 22);
  min = MIN(11, 22);
  logicaland1 = 0 && 0;
  logicaland2 = 0 && 1;
  logicaland3 = 1 && 0;
  logicaland4 = 1 && 1;
  logicalor1 = 0 || 0;
  logicalor2 = 0 || 1;
  logicalor3 = 1 || 0;
  logicalor4 = 1 || 1;
}

# CHECK: 00000000000006 *ABS* 00000000 plus
# CHECK: 00000000000004 *ABS* 00000000 minus
# CHECK: 00000000000003 *ABS* 00000000 div
# CHECK: 00000000000006 *ABS* 00000000 mod
# 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: 00000000000009 *ABS* 00000000 precedence1
# CHECK: 00000000000009 *ABS* 00000000 precedence2
# CHECK: 00000000001000 *ABS* 00000000 maxpagesize
# CHECK: 00000000001000 *ABS* 00000000 commonpagesize
# CHECK: 0000000000ffff *ABS* 00000000 datasegmentalign
# CHECK: 0000000000fff0 *ABS* 00000000 datasegmentalign2
# CHECK: 0000000000ffe0 .text 00000000 minus_rel
# CHECK: 0000000000fff0 *ABS* 00000000 minus_abs
# CHECK: 00000000000016 *ABS* 00000000 max
# CHECK: 0000000000000b *ABS* 00000000 min
# CHECK: 00000000000000 *ABS* 00000000 logicaland1
# CHECK: 00000000000000 *ABS* 00000000 logicaland2
# CHECK: 00000000000000 *ABS* 00000000 logicaland3
# CHECK: 00000000000001 *ABS* 00000000 logicaland4
# CHECK: 00000000000000 *ABS* 00000000 logicalor1
# CHECK: 00000000000001 *ABS* 00000000 logicalor2
# CHECK: 00000000000001 *ABS* 00000000 logicalor3
# CHECK: 00000000000001 *ABS* 00000000 logicalor4

## 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: {{.*}}.script:1: division by zero

## Mod 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=MODZERO %s
# MODZERO: {{.*}}.script:1: modulo 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 ;