• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1OUTPUT_ARCH( "riscv" )
2ENTRY(_start)
3
4MEMORY
5{
6    /* ram for stack */
7    STACK(xrw) : ORIGIN = 0x100000,LENGTH = 8K
8    /* ram for common bss and data */
9    SRAM(xrw) : ORIGIN = 0x100000+8K,LENGTH = 8K
10    /* ram for fix rom bss and data */
11    ROM_BSS_DATA(rx): ORIGIN = 0x100000+16K,LENGTH = 2K
12    /* ram for code rom bss and data */
13    CODE_ROM_BSS_DATA(rx): ORIGIN = 0x100000+18K,LENGTH = 2K
14    /* ram for heap */
15    HEAP(xrw): ORIGIN = 0x100000+20K,LENGTH = 20K
16    /* ram for loaderboot */
17    LOADER_BOOT_ADDR(rx): ORIGIN = 0x100000+40K+0x040,LENGTH = 80K
18    /* rom for fixed rom */
19    FIXED_ROM_ADDR(rx): ORIGIN = 0x00000000+11K,LENGTH = 21K
20    /* rom for code rom */
21    CODE_ROM_ADDR(rx): ORIGIN = 0x003b8000+278K,LENGTH = 10K
22}
23
24STACK_SIZE      = 6k;
25NMI_STACK_SIZE  = 2K;
26
27SECTIONS
28{
29      /* The startup code goes first into FLASH */
30    .text.entry : ALIGN(4)
31    {
32        KEEP(*(.text.entry))
33    } > LOADER_BOOT_ADDR
34
35    .rom.text :
36    {
37        . = ALIGN(4);
38        KEEP(SORT(libbase.o)(.text*))
39        KEEP(SORT(libbase.o)(.rodata*))
40        . = ALIGN(4);
41    } > FIXED_ROM_ADDR
42
43    .rom.code.text :
44    {
45        . = ALIGN(4);
46        KEEP(SORT(libcodebase.o)(.text*))
47        KEEP(SORT(libcodebase.o)(.rodata*))
48        . = ALIGN(4);
49    } > CODE_ROM_ADDR
50
51    /* Stack in SRAM at Highest addresses */
52    .stacks (NOLOAD) :
53    {
54        . = ALIGN(4);
55        __SYSTEM_STACK_BEGIN__ = ORIGIN(STACK);
56        KEEP(*(.stacks))
57        __SYSTEM_STACK_END__ = ORIGIN(STACK) + STACK_SIZE;
58        . = ALIGN(0x20);
59        __nmi_stack_bottom = .;
60        . += NMI_STACK_SIZE;
61        __nmi_stack_top = .;
62    } > STACK
63    __SYSTEM_STACK_SIZE__ = __SYSTEM_STACK_END__ - __SYSTEM_STACK_BEGIN__;
64    __stack_top = __SYSTEM_STACK_END__;
65
66    .rom.data :
67    {
68        . = ALIGN(4);
69        __rom_copy_start = LOADADDR(.rom.data);
70        . = ALIGN(4);
71        __rom_copy_ram_start = .;
72        __global_pointer$ = .;
73        KEEP(SORT(libbase.o) (.data*))
74        . = ALIGN(4);
75        __rom_copy_ram_end = .;
76    } > ROM_BSS_DATA AT>FIXED_ROM_ADDR
77    __rom_copy_size = __rom_copy_ram_end - __rom_copy_ram_start;
78
79    .rom.code.data :
80    {
81        . = ALIGN(4);
82        __code_rom_copy_start = LOADADDR(.rom.code.data);
83        . = ALIGN(4);
84        __code_rom_copy_ram_start = .;
85        KEEP(SORT(libcodebase.o) (.data*))
86        . = ALIGN(4);
87        __code_rom_copy_ram_end = .;
88    }>CODE_ROM_BSS_DATA AT>CODE_ROM_ADDR
89    __code_rom_copy_size = __code_rom_copy_ram_end - __code_rom_copy_ram_start;
90
91    .rom.bss :
92    {
93        . = ALIGN(4);
94        __rom_bss_start = .;
95        KEEP(libbase.o (.bss))
96        KEEP(libbase.o (.bss*))
97        KEEP(libbase.o (COMMON))
98        . = ALIGN(4);
99        __rom_bss_end = .;
100    } > ROM_BSS_DATA AT>FIXED_ROM_ADDR
101
102    .rom.code.bss :
103    {
104        . = ALIGN(4);
105        __code_rom_bss_start = .;
106        KEEP(libcodebase.o (.bss))
107        KEEP(libcodebase.o (.bss*))
108        KEEP(libcodebase.o (COMMON))
109        . = ALIGN(4);
110        __code_rom_bss_end = .;
111    }>CODE_ROM_BSS_DATA AT>CODE_ROM_ADDR
112
113    .text : ALIGN(4)
114    {
115        __start_addr = .;
116        *(.text*)
117        *(.ram.text*)
118        . = ALIGN(4);
119        __rodata_start = .;
120        *(.rodata*)
121        . = ALIGN(4);
122        __rodata_end = .;
123        __text_end = .;
124    } > LOADER_BOOT_ADDR
125
126    /* data section */
127    .data : ALIGN(4)
128    {
129        __data_load = LOADADDR(.data);
130        __data_start = .;
131        *(.data*)
132        . = ALIGN(4);
133        __data_end = .;
134    } > LOADER_BOOT_ADDR
135
136    /* bss section */
137    .bss (NOLOAD) : ALIGN(4)
138    {
139        __bss_begin__ = .;
140        *(.bss*)
141        *(COMMON)
142        . = ALIGN(4);
143        __bss_end__ = .;
144    } > LOADER_BOOT_ADDR
145    __bss_size__ = __bss_end__ - __bss_begin__;
146
147    .heap (NOLOAD) :
148    {
149        . = ALIGN(4);
150        __heap_begin__ = ORIGIN(HEAP);
151        KEEP(*(.heap))
152        __heap_end__ =  __heap_begin__ + LENGTH(HEAP);
153    } > HEAP
154}
155