ENTRY(_start) SECTIONS { /* Starts at LOADER_ADDR, which is 0x8000 - that's where RPis in */ /* 32-bit mode load kernel at. */ /* My experiments do, however, show, that qemu emulating RPi2 */ /* loads the kernel at 0x10000! (took some pain to find out). */ /* Since we're using a bootloader now, we can compile the kernel */ /* for 0x8000 and bootloader will load it properly (although it */ /* itself still has to be compiled for 0x10000) */ /* rpi-open-firmware, ont he other hand, loads kernel at 0x2000000 */ /* This issue is also to be avoided by the use of bootloader */ . = 0x8000; /* For AArch64, use . = 0x80000; Unless this too is wrong in qemu… */ __start = .; __text_start = .; .text : { KEEP(*(.text.boot)) *(.text) } . = ALIGN(4096); /* align to page size */ __text_end = .; __rodata_start = .; .rodata : { *(.rodata) } . = ALIGN(4096); /* align to page size */ __rodata_end = .; __data_start = .; .data : { *(.data) } . = ALIGN(4096); /* align to page size */ __data_end = .; __bss_start = .; .bss : { bss = .; *(.bss) } . = ALIGN(4096); /* align to page size */ __bss_end = .; __bss_size = __bss_end - __bss_start; /* Here come the definitions for renamed sections */ __renamed_start = .; __renamed_text_start = .; .renamed_text : { *(.renamed_text) } . = ALIGN(4096); /* align to page size */ __renamed_text_end = .; __renamed_rodata_start = .; .renamed_rodata : { *(.renamed_rodata) } . = ALIGN(4096); /* align to page size */ __renamed_rodata_end = .; __renamed_data_start = .; .renamed_data : { *(.renamed_data) } . = ALIGN(4096); /* align to page size */ __renamed_data_end = .; __renamed_bss_start = .; .renamed_bss : { renamed_bss = .; *(.renamed_bss) } . = ALIGN(4096); /* align to page size */ __renamed_bss_end = .; __renamed_bss_size = __renamed_bss_end - __renamed_bss_start; __renamed_end = .; __renamed_size = __renamed_end - __renamed_start; . = ALIGN(4096); /* align to page size */ __interrupt_vectors_start = .; .interrupt_vectors : { interrupt_vectors = .; *(.interrupt_vectors.text) *(.interrupt_vectors.data) } . = ALIGN(4096); /* align to page size */ __interrupt_vectors_end = .; __interrupt_vectors_size = __interrupt_vectors_end - __interrupt_vectors_start; __end = .; }