CeDOS - link.txt

link.txt (view raw)

OUTPUT_ARCH(i386)
OUTPUT_FORMAT(elf32-i386)

PAGE_SIZE = 1 << 12;

MEMORY
{
  BOOT_VMA :   ORIGIN = 0x00007C00, LENGTH = 0x00001000
  KERNEL_VMA :        ORIGIN = 0xC0000000, LENGTH = 0x30000000
  APPLICATION_VMA :   ORIGIN = 0x10000000, LENGTH = 0xB0000000
}

SECTIONS
{
  BOOT : AT(0x0000)
  {
    */boot.o(.*)
  } >BOOT_VMA

  KERNEL : AT(0x5E00)
  {
    */kernel.o(.*)
    */kernel.o(.bss)
  } >KERNEL_VMA

  APPLICATION : AT(LOADADDR(KERNEL) + SIZEOF(KERNEL))
  {
    */apps.o(.*)
  } >APPLICATION_VMA

  ELF : AT(0xB600)
  {
    */apps_raw.o(.*)
  } >APPLICATION_VMA

  .bss : AT(LOADADDR(ELF) + SIZEOF(ELF))
  {

  } >KERNEL_VMA
}

__BOOT_LMA = LOADADDR(BOOT);
__BOOT_VMA = ADDR(BOOT);
__BOOT_SIZE = SIZEOF(BOOT);

__KERNEL_LMA = LOADADDR(KERNEL);
__KERNEL_VMA = ADDR(KERNEL);
__KERNEL_SIZE = SIZEOF(KERNEL);

__ELF_LMA = LOADADDR(ELF);
__ELF_VMA = ADDR(ELF);
__ELF_SIZE = SIZEOF(ELF);

__KERNEL_STACK_ADDR = 0xC0400000;

ASSERT(__BOOT_SIZE <= 0x1000, "bootloader too big!");
ASSERT(__KERNEL_SIZE <= 0x5000, "bootloader too big!");
ASSERT(__ELF_SIZE <= 0x3000, "bootloader too big!");