[llvm] Do not replace dead constant references in metadata with undef
[llvm-project.git] / lld / test / ELF / linkerscript / memory-attr.test
blob5ea6e77ee2540b5253ba0e6f598a048cc976cffa
1 REQUIRES: x86
3 RUN: split-file %s %ts
4 RUN: llvm-mc -filetype=obj -triple=x86_64 %ts/s -o %t.o
6 ## Check assigning sections to memory regions by attributes.
8 #--- s
9   .text
10   .zero 8
12   .rodata
13   .zero 8
15   .data
16   .zero 8
18 #--- t1
19 ## Check memory region attribute 'a'.
21 # RUN: ld.lld -o %t1 -T %ts/t1 %t.o
22 # RUN: llvm-readelf -S %t1 | FileCheck %s --check-prefix=TEST1
24 # TEST1:      Name     Type      Address
25 # TEST1:      .text    PROGBITS  0000000000002000
26 # TEST1-NEXT: .rodata  PROGBITS  0000000000002008
27 # TEST1-NEXT: .data    PROGBITS  0000000000002010
29 MEMORY
31   ## All sections have SHF_ALLOC attribute, so no one can be added here.
32   NOMEM (rwx!a) : org = 0x1000, l = 1K
33   ## All sections are assigned to this memory region.
34   MEM   (a)     : org = 0x2000, l = 1K
37 SECTIONS
39   .text   : { *(.text) }
40   .rodata : { *(.rodata) }
41   .data   : { *(.data) }
44 #--- t2
45 ## Check that memory region attributes 'r', 'w', and 'x' are supported both in
46 ## positive and negative forms.
48 # RUN: ld.lld -o %t2 -T %ts/t2 %t.o
49 # RUN: llvm-readelf -S %t2 | FileCheck %s --check-prefix=TEST2
51 # TEST2:      Name     Type      Address
52 # TEST2:      .text    PROGBITS  0000000000004000
53 # TEST2-NEXT: .rodata  PROGBITS  0000000000003000
54 # TEST2-NEXT: .data    PROGBITS  0000000000002000
56 MEMORY
58   ## While all sections are allocatable, '.text' and '.rodata' are read-only and
59   ## '.data' is writable, so no sections should be assigned to this region.
60   NOMEM (a!rw) : org = 0x1000, l = 1K
61   ## Only writable section '.data' is allowed here.
62   RAM   (w)    : org = 0x2000, l = 1K
63   ## Executable sections are not allowed here, so only '.rodata' should be
64   ## assigned to the region.
65   ROM   (r!x)  : org = 0x3000, l = 1K
66   ## An executable section '.text' comes here.
67   EXEC  (x)    : org = 0x4000, l = 1K
70 SECTIONS
72   .text   : { *(.text) }
73   .rodata : { *(.rodata) }
74   .data   : { *(.data) }