rockbox/firmware/target/arm/s5l8702/boot.lds
Cástor Muñoz 882921efb6 ipod6g: bootloader v1
- dual boot
- USB mode
- battery trap

Change-Id: I8586cfeb21ee63f45ab965430725225fdfc4212d
2017-02-09 20:47:16 +01:00

122 lines
2.4 KiB
Text

#define ASM
#include "config.h"
#include "cpu.h"
ENTRY(start)
#ifdef ROCKBOX_LITTLE_ENDIAN
OUTPUT_FORMAT(elf32-littlearm)
#else
OUTPUT_FORMAT(elf32-bigarm)
#endif
OUTPUT_ARCH(arm)
STARTUP(target/arm/s5l8702/crt0.o)
#define MAX_LOADSIZE 8M /* reserved for loading Rockbox binary */
#ifdef IPOD_NANO2G
#define DRAMORIG 0x08000000 + ((MEMORYSIZE - 1) * 0x100000)
#define DRAMSIZE 0x00100000
#define IRAMORIG 0x22000000
#define IRAMSIZE 256K
MEMORY
{
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
}
#define LOAD_AREA IRAM
#define VECT_AREA IRAM
#define BSS_AREA DRAM
#elif defined(IPOD_6G)
MEMORY
{
DRAM : ORIGIN = DRAM_ORIG, LENGTH = DRAM_SIZE
IRAM : ORIGIN = IRAM_ORIG, LENGTH = IRAM_SIZE
/* s5l8702 maps address 0 to ROM, IRAM or DRAM */
VECT_AREA : ORIGIN = 0, LENGTH = 1K
/* IRAM region where loaded IM3 body will be moved and executed,
preserving the loaded IM3 header (0x800 bytes) at IRAM1_ORIG */
MOVE_AREA : ORIGIN = IRAM1_ORIG + 0x800,
LENGTH = IRAM1_SIZE - 0x800
/* DRAM region for BSS */
BSS_AREA : ORIGIN = DRAM_ORIG + MAX_LOADSIZE,
LENGTH = DRAM_SIZE - MAX_LOADSIZE - TTB_SIZE
}
#define LOAD_AREA MOVE_AREA
#else
#error No target defined!
#endif
SECTIONS
{
_dfuloadaddr = IRAM0_ORIG ;
_movestart = LOADADDR(.text) ;
_moveend = LOADADDR(.data) + SIZEOF(.data) ;
#ifdef NEEDS_INTVECT_COPYING
.intvect : {
_intvectstart = . ;
*(.intvect)
_intvectend = _newstart ;
} >VECT_AREA AT> LOAD_AREA
_intvectcopy = LOADADDR(.intvect) ;
#endif
.text : {
#ifndef NEEDS_INTVECT_COPYING
*(.intvect)
#endif
*(.init.text)
*(.text*)
*(.glue_7*)
} > LOAD_AREA
.rodata : {
*(.rodata*)
. = ALIGN(0x4);
} > LOAD_AREA
.data : {
_datastart = . ;
*(.irodata*)
*(.icode*)
*(.idata*)
*(.data*)
*(.ncdata*);
. = ALIGN(0x20); /* align move size */
_dataend = . ;
} > LOAD_AREA
.stack (NOLOAD) :
{
*(.stack)
_stackbegin = .;
stackbegin = .;
. += 0x2000;
_stackend = .;
stackend = .;
_irqstackbegin = .;
. += 0x400;
_irqstackend = .;
_fiqstackbegin = .;
. += 0x400;
_fiqstackend = .;
} > LOAD_AREA
.bss (NOLOAD) : {
_edata = .;
*(.bss*);
*(.ibss*);
*(.ncbss*);
*(COMMON);
. = ALIGN(0x20); /* align bzero size */
_end = .;
} > BSS_AREA
}