Welcome to mirror list, hosted at ThFree Co, Russian Federation.

sim.ld « crx « libgloss - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a75c03dcd031c74f1aff3b47eb18c1c9198a514e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/* Example Linker Script for linking NS CRX elf32 files. */
OUTPUT_FORMAT("elf32-crx")
OUTPUT_ARCH(crx)

/* 
 The libh.a library includes various CR default handlers.
 The libsim.a library includes low-level functions, which
 are used as an interface to communicate with the simulator.
*/
GROUP(-lc -lsim -lh -lgcc)

/*
 The next line forces the entry point (_start in this script)
 to be entered in the output file as an undefined symbol.
 It is needed in case the entry point is not called explicitly
 (which is the usual case) AND is in an archive.
*/
EXTERN(_start)
ENTRY(_start)

/* Define memory regions */
MEMORY
{
  rom  : ORIGIN = 0x2,  LENGTH = 3M
  ram  : ORIGIN = 4M,   LENGTH = 10M
}

SECTIONS
{
  .init :
  { 
    __INIT_START = .; 
    KEEP (*(.init))
    __INIT_END = .; 
  } > rom

  .fini :
  { 
    __FINI_START = .; 
    KEEP (*(.fini))
    __FINI_END = .; 
  } > rom

  .jcr :
  { 
    KEEP (*(.jcr))
  } > rom

  .text : 
  { 
    __TEXT_START = .; 
    *(.text) *(.text.*) *(.gnu.linkonce.t.*) 
    __TEXT_END = .; 
  } > rom

  .rdata : 
  {
     __RDATA_START = .; 
     *(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) 
     __RDATA_END = .; 
  } > rom

  .ctor ALIGN(4) : 
  { 
    __CTOR_START = .; 
    KEEP (*crtbegin*.o(.ctors))
    KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
    __CTOR_END = .; 
  } > rom

  .dtor ALIGN(4) : 
  { 
    __DTOR_START = .; 
    KEEP (*crtbegin*.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
    __DTOR_END = .; 
  } > rom

  .data : 
  {
    __DATA_START = .; 
    *(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*) 
    __DATA_END = .; 
  } > ram AT > rom

  .bss (NOLOAD) : 
  {
    __BSS_START = .; 
    *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*) 
    __BSS_END = .; 
  } > ram

/*
 You may change the sizes of the following sections to fit the actual
 size your program requires.
 The heap and stack are aligned to the bus width, as a speed optimization
 for accessing data located there.
*/
  .heap : 
  { 
    . = ALIGN(4); 
    __HEAP_START = .; 
    . += 0x2000; 
    __HEAP_MAX = .; 
  } > ram

  .stack : 
  { 
    . = ALIGN(4); 
    . += 0x6000; 
    __STACK_START = .; 
  } > ram

  .istack : 
  { 
    . = ALIGN(4); 
    . += 0x100; 
    __ISTACK_START = .; 
  } > ram
}

__DATA_IMAGE_START = LOADADDR(.data);