ENTRY(_start) /* defined in boot.S */ SECTIONS { /* Starts at 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). */ /* rpi-open-firmware, on the other hand, loads kernel at 0x2000000! */ /* This is not really a problem, since: */ /* 1. We can use out bootloader to load the kernel at 0x8000 */ /* 2. We compile kernel with -fPIC, so it should be able to work with */ /* any load addr. /* 3. In qemu, we can load kernel.elf instead of raw binary */ /* (qemu will do the loading then) */ . = 0x8000; /* For AArch64, use . = 0x80000 */ __start = .; .boot : { boot.o } __kernel_start = .; .kernel : { *(EXCLUDE_FILE (libkernel.o interrupt_vector.o interrupts.o) *) } . = ALIGN(4096); /* align to page size */ __kernel_end = .; __kernel_size = __kernel_end - __kernel_start; /* libkernel */ .libkernel : { __libkernel_start = .; libkernel.o __libkernel_end = .; } __libkernel_size = __libkernel_end - __libkernel_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 = .; }