xref: /llvm-project/lld/test/ELF/linkerscript/sort-init.s (revision 447aa48b4a02fa9e22fa45b2fb7a85c12df2e6c3)
1# REQUIRES: x86
2## Test SORT_BY_INIT_PRIORITY can be used to convert .ctors into .init_array
3
4# RUN: split-file %s %t
5# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/asm -o %t.o
6# RUN: ld.lld -T %t/lds %t.o -o %t.out
7# RUN: llvm-readelf -x .init_array %t.out | FileCheck %s
8
9# CHECK:      Hex dump of section '.init_array':
10# CHECK-NEXT: 0x00000001 00010203 04050607
11
12## Test REVERSE can be used to reverse the order of .init_array and .ctors
13
14# RUN: ld.lld -T %t/reverse.lds %t.o -o %t2.out
15# RUN: llvm-readelf -x .init_array %t2.out | FileCheck %s --check-prefix=CHECK2
16
17# CHECK2:      Hex dump of section '.init_array':
18# CHECK2-NEXT: 0x00000001 04030201 00050706
19
20#--- asm
21.globl _start
22_start:
23  nop
24
25.section foo, "aw", @init_array
26  .byte 5
27
28.section .ctors.65435, "a"
29  .byte 3
30.section .init_array.100, "aw", @init_array
31  .byte 4
32
33.section .init_array.7, "aw", @init_array
34  .byte 2
35.section .ctors.65529,"a"
36  .byte 1
37.section .init_array.5, "aw", @init_array
38  .byte 0
39
40.section .init_array, "aw", @init_array
41  .byte 6
42.section .ctors, "a"
43  .byte 7
44
45#--- lds
46SECTIONS {
47  .init_array : {
48    *(SORT_BY_INIT_PRIORITY(.init_array.* .ctors.*) SORT_BY_INIT_PRIORITY(foo*))
49    *(.init_array .ctors)
50  }
51}
52
53#--- reverse.lds
54SECTIONS {
55  .init_array : {
56    *(REVERSE(SORT_BY_INIT_PRIORITY(.init_array.* .ctors.*)) SORT_BY_INIT_PRIORITY(foo*))
57    *(REVERSE(.init_array .ctors))
58  }
59}
60