| /* |
| * Linker script for RISC-V SBI images |
| * |
| */ |
| |
| SECTIONS { |
| |
| /* Weak symbols that need zero values if not otherwise defined */ |
| saved_pos = .; |
| .weak 0x0 : { |
| _weak = .; |
| *(.weak) |
| *(.weak.*) |
| _eweak = .; |
| } |
| _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" ); |
| _assert = ASSERT ( ( . == saved_pos ), ".weak altered current position" ); |
| |
| /* Prefix code */ |
| .prefix : { |
| _prefix = .; |
| *(.prefix) |
| *(.prefix.*) |
| _eprefix = .; |
| } |
| |
| /* Program code */ |
| .text : { |
| _text = .; |
| *(.text) |
| *(.text.*) |
| _etext = .; |
| } |
| |
| /* Align to page size to allow linker to generate W^X segments */ |
| . = ALIGN ( 4096 ); |
| |
| /* Read-only data */ |
| .rodata : { |
| _rodata = .; |
| *(.srodata) |
| *(.srodata.*) |
| *(.rodata) |
| *(.rodata.*) |
| _erodata = .; |
| } |
| |
| /* Writable data */ |
| .data : { |
| _data = .; |
| *(.sdata) |
| *(.sdata.*) |
| *(.data) |
| *(.data.*) |
| KEEP(*(SORT(.tbl.*))) /* Various tables. See include/tables.h */ |
| KEEP(*(.provided)) |
| KEEP(*(.provided.*)) |
| *(.got) |
| *(.got.plt) |
| /* Ensure compressed relocations end up aligned */ |
| . = ALIGN ( 16 ); |
| _edata = .; |
| } |
| |
| /* Uninitialised and discardable data */ |
| OVERLAY : { |
| |
| /* Runtime relocations (discarded after use) */ |
| .rela.dyn { |
| *(.rela) |
| *(.rela.dyn) |
| } |
| |
| /* Compressor information block */ |
| .zinfo { |
| _zinfo = .; |
| KEEP(*(.zinfo)) |
| KEEP(*(.zinfo.*)) |
| _ezinfo = .; |
| } |
| |
| /* Uninitialised data */ |
| .bss { |
| _bss = .; |
| *(.sbss) |
| *(.sbss.*) |
| *(.bss) |
| *(.bss.*) |
| *(COMMON) |
| *(.stack) |
| *(.stack.*) |
| /* Align to allow for easy zeroing by prefix code */ |
| . = ALIGN ( 16 ); |
| _ebss = .; |
| } |
| } |
| |
| /* End virtual address */ |
| _end = .; |
| |
| /* Base virtual address */ |
| _base = ABSOLUTE ( _prefix ); |
| |
| /* Relocations */ |
| _reloc_offset = ( LOADADDR ( .rela.dyn ) - LOADADDR ( .prefix ) ); |
| _reloc_filesz = SIZEOF ( .rela.dyn ); |
| |
| /* Length of initialised data */ |
| _filesz = ( ABSOLUTE ( _edata ) - ABSOLUTE ( _prefix ) ); |
| |
| /* Length of in-memory image */ |
| _memsz = ( ABSOLUTE ( _end ) - ABSOLUTE ( _prefix ) ); |
| |
| /* Unwanted sections */ |
| /DISCARD/ : { |
| *(.comment) |
| *(.comment.*) |
| *(.note) |
| *(.note.*) |
| *(.eh_frame) |
| *(.eh_frame.*) |
| *(.dynamic) |
| *(.dynsym) |
| *(.dynstr) |
| *(.hash) |
| *(.gnu.hash) |
| *(.einfo) |
| *(.einfo.*) |
| *(.discard) |
| *(.discard.*) |
| *(.pci_devlist.*) |
| } |
| } |