/* Linker script for the Raspberry Pi 5 native (non-UEFI) kernel image. * * Linked from the same objects as the aarch64 kernel ELF, entered at * rpi5_native_start (arch/aarch64/native_rpi5_entry.S, section * .text.entry -- placed first so it sits at the load address), then * flattened with `objcopy -O binary` into kernel_2712.img. * * Load address 0x80000 must match boards/raspi/config.txt's * kernel_address=0x80000: Pi 5 firmware's own default for * kernel_2712.img is 0x200000, so the address is pinned on both sides * rather than left to the firmware default. * * __kernel_start/__kernel_end span the whole image including .bss so * pmm_init() reserves every page the image occupies (aarch64 boot.S's * zero-length substitutes are only correct for the UEFI loader path, * where UEFI owns the image pages). __bss_start/__bss_end are 16-byte * aligned for the entry stub's zeroing loop: firmware does not clear * memory past the end of the file it loads. */ OUTPUT_FORMAT("elf64-littleaarch64") OUTPUT_ARCH(aarch64) ENTRY(rpi5_native_start) SECTIONS { . = 0x80000; __kernel_start = .; .text : { __text_start = .; KEEP(*(.text.entry)) *(.text .text.*) __text_end = .; } .rodata : ALIGN(4K) { __rodata_start = .; *(.rodata .rodata.*) __rodata_end = .; } .data : ALIGN(4K) { __data_start = .; *(.data .data.*) *(.got .got.*) __data_end = .; } .rela.dyn : ALIGN(8) { *(.rela .rela.*) } .bss (NOLOAD) : ALIGN(4K) { __bss_start = .; *(.bss .bss.*) *(COMMON) . = ALIGN(16); __bss_end = .; } . = ALIGN(4K); __kernel_end = .; /DISCARD/ : { *(.comment) *(.note*) *(.eh_frame) *(.dynamic) *(.dynsym) *(.interp) } }