• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# REQUIRES: x86
2# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
3
4# RUN: ld.lld %t.o -o %t
5# RUN: llvm-readelf -x .init -x .fini -x .init_array -x .fini_array %t | \
6# RUN:   FileCheck --check-prefixes=CHECK,ORDERED %s
7
8# RUN: ld.lld %t.o --shuffle-sections=1 -o %t1
9# RUN: llvm-readelf -x .init -x .fini -x .init_array -x .fini_array %t1 | \
10# RUN:   FileCheck --check-prefixes=CHECK,SHUFFLED %s
11
12## .init and .fini rely on a particular order, e.g. crti.o crtbegin.o crtend.o crtn.o
13## Don't shuffle them.
14# CHECK:      Hex dump of section '.init'
15# CHECK-NEXT: 00010203 04050607 08090a0b
16
17# CHECK:      Hex dump of section '.fini'
18# CHECK-NEXT: 00010203 04050607 08090a0b
19
20## SHT_INIT_ARRAY/SHT_FINI_ARRAY with explicit priorities are still ordered.
21# CHECK:      Hex dump of section '.init_array'
22# CHECK-NEXT: 0x{{[0-9a-f]+}} ff
23# ORDERED-SAME: 000102 03040506 0708090a 0b
24# SHUFFLED-SAME: 04000b 06010a08 09070203 05
25
26# CHECK:      Hex dump of section '.fini_array'
27# CHECK-NEXT: 0x{{[0-9a-f]+}} ff
28# ORDERED-SAME:  000102 03040506 0708090a 0b
29# SHUFFLED-SAME: 090401 070b0003 080a0605 02
30
31## With a SECTIONS command, SHT_INIT_ARRAY prirotities are ignored.
32## All .init_array* are shuffled together.
33# RUN: echo 'SECTIONS { \
34# RUN:   .init_array : { *(.init_array*) } \
35# RUN:   .fini_array : { *(.fini_array*) }}' > %t.script
36# RUN: ld.lld -T %t.script %t.o -o %t2
37# RUN: llvm-readelf -x .init -x .fini -x .init_array -x .fini_array %t2 | \
38# RUN:   FileCheck --check-prefixes=CHECK2,ORDERED2 %s
39# RUN: ld.lld -T %t.script %t.o --shuffle-sections=1 -o %t3
40# RUN: llvm-readelf -x .init -x .fini -x .init_array -x .fini_array %t3 | \
41# RUN:   FileCheck --check-prefixes=CHECK2,SHUFFLED2 %s
42
43# CHECK2:       Hex dump of section '.init_array'
44# ORDERED2-NEXT:  0x{{[0-9a-f]+}} 00010203 04050607 08090a0b ff
45# SHUFFLED2-NEXT: 0x{{[0-9a-f]+}} 04000b06 010a0809 07ff0203 05
46
47.irp i,0,1,2,3,4,5,6,7,8,9,10,11
48  .section .init,"ax",@progbits,unique,\i
49  .byte \i
50  .section .fini,"ax",@progbits,unique,\i
51  .byte \i
52  .section .init_array,"aw",@init_array,unique,\i
53  .byte \i
54  .section .fini_array,"aw",@fini_array,unique,\i
55  .byte \i
56.endr
57
58.section .init_array.1,"aw",@init_array
59.byte 255
60.section .fini_array.1,"aw",@fini_array
61.byte 255
62