1/* Script for -shared -z separate-code */
2/* Copyright (C) 2014-2021 Free Software Foundation, Inc.
3   Copying and distribution of this script, with or without modification,
4   are permitted in any medium without royalty provided the copyright
5   notice and this notice are preserved.  */
6OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
7	      "elf32-littleaarch64")
8OUTPUT_ARCH(aarch64:ilp32)
9ENTRY(_start)
10SEARCH_DIR("=/aarch64-none-linux-gnu/libilp32"); SEARCH_DIR("=/usr/local/libilp32"); SEARCH_DIR("=/libilp32"); SEARCH_DIR("=/usr/libilp32"); SEARCH_DIR("=/aarch64-none-linux-gnu/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
11SECTIONS
12{
13  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
14  .note.gnu.build-id  : { *(.note.gnu.build-id) }
15  .hash           : { *(.hash) }
16  .gnu.hash       : { *(.gnu.hash) }
17  .dynsym         : { *(.dynsym) }
18  .dynstr         : { *(.dynstr) }
19  .gnu.version    : { *(.gnu.version) }
20  .gnu.version_d  : { *(.gnu.version_d) }
21  .gnu.version_r  : { *(.gnu.version_r) }
22  .rela.init      : { *(.rela.init) }
23  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
24  .rela.fini      : { *(.rela.fini) }
25  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
26  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
27  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
28  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
29  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
30  .rela.ctors     : { *(.rela.ctors) }
31  .rela.dtors     : { *(.rela.dtors) }
32  .rela.got       : { *(.rela.got) }
33  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
34  .rela.ifunc     : { *(.rela.ifunc) }
35  .rela.plt       :
36    {
37      *(.rela.plt)
38      *(.rela.iplt)
39    }
40  . = ALIGN(CONSTANT (MAXPAGESIZE));
41  .init           :
42  {
43    KEEP (*(SORT_NONE(.init)))
44  } =0x1f2003d5
45  .plt            : ALIGN(16) { *(.plt) *(.iplt) }
46  .text           :
47  {
48    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
49    *(.text.exit .text.exit.*)
50    *(.text.startup .text.startup.*)
51    *(.text.hot .text.hot.*)
52    *(SORT(.text.sorted.*))
53    *(.text .stub .text.* .gnu.linkonce.t.*)
54    /* .gnu.warning sections are handled specially by elf.em.  */
55    *(.gnu.warning)
56  } =0x1f2003d5
57  .fini           :
58  {
59    KEEP (*(SORT_NONE(.fini)))
60  } =0x1f2003d5
61  PROVIDE (__etext = .);
62  PROVIDE (_etext = .);
63  PROVIDE (etext = .);
64  . = ALIGN(CONSTANT (MAXPAGESIZE));
65  /* Adjust the address for the rodata segment.  We want to adjust up to
66     the same address within the page on the next page up.  */
67  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
68  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
69  .rodata1        : { *(.rodata1) }
70  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
71  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
72  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
73  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
74  /* These sections are generated by the Sun/Oracle C++ compiler.  */
75  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
76  /* Adjust the address for the data segment.  We want to adjust up to
77     the same address within the page on the next page up.  */
78  . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
79  /* Exception handling  */
80  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
81  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
82  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
83  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
84  /* Thread Local Storage sections  */
85  .tdata	  :
86   {
87     *(.tdata .tdata.* .gnu.linkonce.td.*)
88   }
89  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
90  .preinit_array    :
91  {
92    KEEP (*(.preinit_array))
93  }
94  .init_array    :
95  {
96    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
97    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
98  }
99  .fini_array    :
100  {
101    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
102    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
103  }
104  .ctors          :
105  {
106    /* gcc uses crtbegin.o to find the start of
107       the constructors, so we make sure it is
108       first.  Because this is a wildcard, it
109       doesn't matter if the user does not
110       actually link against crtbegin.o; the
111       linker won't look for a file to match a
112       wildcard.  The wildcard also means that it
113       doesn't matter which directory crtbegin.o
114       is in.  */
115    KEEP (*crtbegin.o(.ctors))
116    KEEP (*crtbegin?.o(.ctors))
117    /* We don't want to include the .ctor section from
118       the crtend.o file until after the sorted ctors.
119       The .ctor section from the crtend file contains the
120       end of ctors marker and it must be last */
121    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
122    KEEP (*(SORT(.ctors.*)))
123    KEEP (*(.ctors))
124  }
125  .dtors          :
126  {
127    KEEP (*crtbegin.o(.dtors))
128    KEEP (*crtbegin?.o(.dtors))
129    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
130    KEEP (*(SORT(.dtors.*)))
131    KEEP (*(.dtors))
132  }
133  .jcr            : { KEEP (*(.jcr)) }
134  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
135  .dynamic        : { *(.dynamic) }
136  .got            : { *(.got) *(.igot) }
137  . = DATA_SEGMENT_RELRO_END (12, .);
138  .got.plt        : { *(.got.plt) *(.igot.plt) }
139  .data           :
140  {
141    PROVIDE (__data_start = .);
142    *(.data .data.* .gnu.linkonce.d.*)
143    SORT(CONSTRUCTORS)
144  }
145  .data1          : { *(.data1) }
146  PROVIDE (_edata = .); PROVIDE (edata = .);
147  . = .;
148  PROVIDE (__bss_start = .);
149  PROVIDE (__bss_start__ = .);
150  .bss            :
151  {
152   *(.dynbss)
153   *(.bss .bss.* .gnu.linkonce.b.*)
154   *(COMMON)
155   /* Align here to ensure that the .bss section occupies space up to
156      _end.  Align after .bss to ensure correct alignment even if the
157      .bss section disappears because there are no input sections.
158      FIXME: Why do we need it? When there is no .bss section, we do not
159      pad the .data section.  */
160   . = ALIGN(. != 0 ? 32 / 8 : 1);
161  }
162  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
163  . = ALIGN(32 / 8);
164  . = SEGMENT_START("ldata-segment", .);
165  . = ALIGN(32 / 8);
166  PROVIDE (__end__ = .);
167  PROVIDE (_end = .); PROVIDE (end = .);
168  . = DATA_SEGMENT_END (.);
169  /* Stabs debugging sections.  */
170  .stab          0 : { *(.stab) }
171  .stabstr       0 : { *(.stabstr) }
172  .stab.excl     0 : { *(.stab.excl) }
173  .stab.exclstr  0 : { *(.stab.exclstr) }
174  .stab.index    0 : { *(.stab.index) }
175  .stab.indexstr 0 : { *(.stab.indexstr) }
176  .comment       0 : { *(.comment) }
177  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
178  /* DWARF debug sections.
179     Symbols in the DWARF debugging sections are relative to the beginning
180     of the section so we begin them at 0.  */
181  /* DWARF 1.  */
182  .debug          0 : { *(.debug) }
183  .line           0 : { *(.line) }
184  /* GNU DWARF 1 extensions.  */
185  .debug_srcinfo  0 : { *(.debug_srcinfo) }
186  .debug_sfnames  0 : { *(.debug_sfnames) }
187  /* DWARF 1.1 and DWARF 2.  */
188  .debug_aranges  0 : { *(.debug_aranges) }
189  .debug_pubnames 0 : { *(.debug_pubnames) }
190  /* DWARF 2.  */
191  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
192  .debug_abbrev   0 : { *(.debug_abbrev) }
193  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
194  .debug_frame    0 : { *(.debug_frame) }
195  .debug_str      0 : { *(.debug_str) }
196  .debug_loc      0 : { *(.debug_loc) }
197  .debug_macinfo  0 : { *(.debug_macinfo) }
198  /* SGI/MIPS DWARF 2 extensions.  */
199  .debug_weaknames 0 : { *(.debug_weaknames) }
200  .debug_funcnames 0 : { *(.debug_funcnames) }
201  .debug_typenames 0 : { *(.debug_typenames) }
202  .debug_varnames  0 : { *(.debug_varnames) }
203  /* DWARF 3.  */
204  .debug_pubtypes 0 : { *(.debug_pubtypes) }
205  .debug_ranges   0 : { *(.debug_ranges) }
206  /* DWARF 5.  */
207  .debug_addr     0 : { *(.debug_addr) }
208  .debug_line_str 0 : { *(.debug_line_str) }
209  .debug_loclists 0 : { *(.debug_loclists) }
210  .debug_macro    0 : { *(.debug_macro) }
211  .debug_names    0 : { *(.debug_names) }
212  .debug_rnglists 0 : { *(.debug_rnglists) }
213  .debug_str_offsets 0 : { *(.debug_str_offsets) }
214  .debug_sup      0 : { *(.debug_sup) }
215  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
216  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
217  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
218}
219