File: memory-attr.test

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (75 lines) | stat: -rw-r--r-- 1,896 bytes parent folder | download | duplicates (18)
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
REQUIRES: x86

RUN: split-file %s %ts
RUN: llvm-mc -filetype=obj -triple=x86_64 %ts/s -o %t.o

## Check assigning sections to memory regions by attributes.

#--- s
  .text
  .zero 8

  .rodata
  .zero 8

  .data
  .zero 8

#--- t1
## Check memory region attribute 'a'.

# RUN: ld.lld -o %t1 -T %ts/t1 %t.o
# RUN: llvm-readelf -S %t1 | FileCheck %s --check-prefix=TEST1

# TEST1:      Name     Type      Address
# TEST1:      .text    PROGBITS  0000000000002000
# TEST1-NEXT: .rodata  PROGBITS  0000000000002008
# TEST1-NEXT: .data    PROGBITS  0000000000002010

MEMORY
{
  ## All sections have SHF_ALLOC attribute, so no one can be added here.
  NOMEM (rwx!a) : org = 0x1000, l = 1K
  ## All sections are assigned to this memory region.
  MEM   (a)     : org = 0x2000, l = 1K
}

SECTIONS
{
  .text   : { *(.text) }
  .rodata : { *(.rodata) }
  .data   : { *(.data) }
}

#--- t2
## Check that memory region attributes 'r', 'w', and 'x' are supported both in
## positive and negative forms.

# RUN: ld.lld -o %t2 -T %ts/t2 %t.o
# RUN: llvm-readelf -S %t2 | FileCheck %s --check-prefix=TEST2

# TEST2:      Name     Type      Address
# TEST2:      .text    PROGBITS  0000000000004000
# TEST2-NEXT: .rodata  PROGBITS  0000000000003000
# TEST2-NEXT: .data    PROGBITS  0000000000002000

MEMORY
{
  ## While all sections are allocatable, '.text' and '.rodata' are read-only and
  ## '.data' is writable, so no sections should be assigned to this region.
  NOMEM (a!rw) : org = 0x1000, l = 1K
  ## Only writable section '.data' is allowed here.
  RAM   (w)    : org = 0x2000, l = 1K
  ## Executable sections are not allowed here, so only '.rodata' should be
  ## assigned to the region.
  ROM   (r!x)  : org = 0x3000, l = 1K
  ## An executable section '.text' comes here.
  EXEC  (x)    : org = 0x4000, l = 1K
}

SECTIONS
{
  .text   : { *(.text) }
  .rodata : { *(.rodata) }
  .data   : { *(.data) }
}