xref: /netbsd-src/sys/arch/evbarm/conf/ldscript.evbarm (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1/*	$NetBSD: ldscript.evbarm,v 1.8 2014/01/30 15:36:44 matt Exp $	*/
2
3OUTPUT_ARCH(arm)
4ENTRY(KERNEL_BASE_phys)
5SECTIONS
6{
7  KERNEL_BASE_phys = @KERNEL_BASE_PHYS@;
8  KERNEL_BASE_virt = @KERNEL_BASE_VIRT@;
9
10  /* Kernel start: */
11  .start (KERNEL_BASE_phys) :
12  {
13    *(.start)
14  } =0
15
16  /* Read-only sections, merged into text segment: */
17  .text (KERNEL_BASE_virt + SIZEOF(.start)) :
18  AT (LOADADDR(.start) + SIZEOF(.start))
19  {
20    *(.text)
21    *(.text.*)
22    *(.stub)
23    *(.glue_7t) *(.glue_7)
24    *(.rodata) *(.rodata.*)
25  } =0
26  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
27  PROVIDE (__exidx_start = .);
28  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
29  PROVIDE (__exidx_end = .);
30  PROVIDE (__etext = .);
31  PROVIDE (_etext = .);
32  PROVIDE (etext = .);
33  /* Adjust the address for the data segment to start on the next large page
34     boundary.  */
35  . = ALIGN(0x10000);
36  .data    :
37  AT (LOADADDR(.text) + (ADDR(.data) - ADDR(.text)))
38  {
39    __data_start = . ;
40    *(.data)
41    *(.data.*)
42  }
43  .sdata     :
44  AT (LOADADDR(.data) + (ADDR(.sdata) - ADDR(.data)))
45  {
46    *(.sdata)
47    *(.sdata.*)
48  }
49  . = ALIGN(8);
50  _edata = .;
51  PROVIDE (edata = .);
52  __bss_start = .;
53  __bss_start__ = .;
54  .sbss      :
55  AT (LOADADDR(.sdata) + (ADDR(.sbss) - ADDR(.sdata)))
56  {
57    PROVIDE (__sbss_start = .);
58    PROVIDE (___sbss_start = .);
59    *(.dynsbss)
60    *(.sbss)
61    *(.sbss.*)
62    *(.scommon)
63    PROVIDE (__sbss_end = .);
64    PROVIDE (___sbss_end = .);
65  }
66  .bss       :
67  AT (LOADADDR(.sbss) + (ADDR(.bss) - ADDR(.sbss)))
68  {
69   *(.dynbss)
70   *(.bss)
71   *(.bss.*)
72   *(COMMON)
73   /* Align here to ensure that the .bss section occupies space up to
74      _end.  Align after .bss to ensure correct alignment even if the
75      .bss section disappears because there are no input sections.  */
76   . = ALIGN(32 / 8);
77  }
78  . = ALIGN(32 / 8);
79  _end = .;
80  _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
81  PROVIDE (end = .);
82}
83