| /* | |
| * 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.*) | |
| } | |
| } |