| /* Simple linker script for the ROS kernel. |
| See the GNU ld 'info' manual ("info ld") to learn the syntax. */ |
| |
| OUTPUT_ARCH("riscv") |
| ENTRY(_start) |
| |
| SECTIONS |
| { |
| /* Link the kernel for 0xFFFFFFFF80002000, but load it at 0x2000) */ |
| |
| .text 0xFFFFFFFF80002000 : AT(0x2000) { |
| *(.text .stub .text.* .gnu.linkonce.t.*) |
| } |
| |
| PROVIDE(etext = .); /* Define the 'etext' symbol to this value */ |
| |
| INCLUDE kern/linker_tables.ld |
| |
| .rodata : { |
| *(.rodata .rodata.* .gnu.linkonce.r.*) |
| } |
| |
| /* Include debugging information in kernel memory */ |
| .stab : { |
| PROVIDE(stab = .); |
| PROVIDE(__STAB_BEGIN__ = .); |
| *(.stab); |
| PROVIDE(estab = .); |
| PROVIDE(__STAB_END__ = .); |
| BYTE(0) /* Force the linker to allocate space |
| for this section */ |
| } |
| |
| .stabstr : { |
| PROVIDE(stabstr = .); |
| PROVIDE(__STABSTR_BEGIN__ = .); |
| *(.stabstr); |
| PROVIDE(estabstr = .); |
| PROVIDE(__STABSTR_END__ = .); |
| BYTE(0) /* Force the linker to allocate space |
| for this section */ |
| } |
| |
| /* Adjust the address for the data segment to the next page */ |
| . = ALIGN(0x1000); |
| |
| /* The data segment */ |
| .data : { |
| *(.data) |
| *(.sdata) |
| } |
| |
| PROVIDE(edata = .); |
| |
| .bss : { |
| *(.bss) |
| *(.sbss) |
| } |
| |
| PROVIDE(end = .); |
| |
| /DISCARD/ : { |
| *(.eh_frame .note.GNU-stack) |
| } |
| } |