#include "config.h" ENTRY(start) OUTPUT_FORMAT(elf32-littlearm) OUTPUT_ARCH(arm) STARTUP(target/arm/s3c2440/crt0.o) #define PLUGINSIZE PLUGIN_BUFFER_SIZE #define CODECSIZE CODEC_SIZE #include "cpu.h" #define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE #define DRAMORIG 0x00000000 /* End of the audio buffer, where the codec buffer starts */ #define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) /* Where the codec buffer ends, and the plugin buffer starts */ #define ENDADDR (ENDAUDIOADDR + CODECSIZE) MEMORY { DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE } SECTIONS { /* This nice little hack is to trick ROLO into loading in a certain place * CRT0.s takes care of making sure the code is where it needs to be */ loadaddress = 0x31000000; .vectors DRAMORIG : { _vectorstart = .; *(.vectors*); *(.init.text) . = ALIGN(0x4); } > DRAM .text : { _textstart = .; *(.text) *(.text*) *(.icode) *(.glue_7) *(.glue_7t) . = ALIGN(0x4); } > DRAM _textcopy = LOADADDR(.text); .rodata : { *(.rodata) /* problems without this, dunno why */ *(.rodata*) *(.rodata.str1.1) *(.rodata.str1.4) *(.irodata*) . = ALIGN(0x4); } > DRAM .data : { *(.data*) *(.idata*) . = ALIGN(0x4); } > DRAM /DISCARD/ : { *(.eh_frame) } _initdata_end =.; .stack (NOLOAD) : { *(.stack) stackbegin = .; . += 0x2000; stackend = .; } > DRAM .bss (NOLOAD) : { _edata = .; *(.bss*) *(.ibss*) *(COMMON) . = ALIGN(0x4); _end = .; } > DRAM .audiobuf (NOLOAD) : { . = ALIGN(4); _audiobuffer = .; audiobuffer = .; } > DRAM .audiobufend ENDAUDIOADDR (NOLOAD) : { audiobufend = .; _audiobufend = .; } > DRAM .codec ENDAUDIOADDR (NOLOAD) : { codecbuf = .; _codecbuf = .; } .plugin ENDADDR (NOLOAD) : { _pluginbuf = .; pluginbuf = .; } }