Vhex-kernel/src/kernel/vhex.ld

157 lines
2.5 KiB
Plaintext

OUTPUT_ARCH(sh3)
OUTPUT_FORMAT(elf32-sh)
ENTRY(_start)
MEMORY
{
/*
** bootram is the RAM physical location for global variable
** during the bootloader step.
** This location is realy important because no Casio's OS data
** should be overwrite (specially TLB information stored by Casio).
*/
ram (WX) : o = 0x88040000, l = 252k
rom (RX) : o = 0x00300200, l = 512k
ilram (WX) : o = 0xe5200000, l = 4k
xram (WX) : o = 0xe5007000, l = 8k
}
PHDRS
{
text PT_LOAD ;
data PT_LOAD ;
bss PT_NULL ;
ubc PT_LOAD ;
vbr PT_LOAD ;
}
SECTIONS
{
/*
** ROM sections
*/
. = ORIGIN(rom);
_brom = ABSOLUTE (0x00300000) ;
_srom = ABSOLUTE (0x200 +
SIZEOF(.text) +
SIZEOF(.data) +
SIZEOF(.vhex) +
SIZEOF(.ubc)) ;
.text : {
/* Source Code */
*(.pretext)
*(.text)
/* Read-Only data */
. = ALIGN(4);
*(.rodata)
*(.rodata.*)
/* Constructors, destructors */
_bctors = ALIGN(4) ;
*(SORT_BY_INIT_PRIORITY(.ctors.*))
*(.ctors);
_ectors = . ;
_bdtors = ALIGN(4) ;
*(SORT_BY_INIT_PRIORITY(.dtors.*))
*(.dtors);
_edtors = . ;
/* File System */
_bfilesystem_section = ALIGN(4) ;
*(.filesystem);
_efilesystem_section = . ;
/* Device */
_bdevice_section = ALIGN(4);
*(.device);
_edevice_section = . ;
} > rom : text
/*
** RAM sctions
*/
. = ORIGIN(ram);
/* BootStrap Stack: should be wiped later ! */
/* (we force the section to be non loadable when the program is run) */
.bss (NOLOAD) : {
_bbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4);
} > ram : bss
_sbss = SIZEOF(.bss);
/* Read-write data going to RAM */
.data ALIGN(4) : ALIGN(4) {
_bdata_rom = LOADADDR(.data) ;
_bdata_ram = . ;
*(.data)
_ram_start = ALIGN(4);
} > ram AT> rom : data
_sdata = SIZEOF(.data);
/*
** VBR space !
*/
. = ORIGIN(xram);
/* Interrupt / exception handlers */
.vhex ALIGN(4) : SUBALIGN(4) {
_bvhex_rom = LOADADDR(.vhex) ;
_bvhex_ram = . ;
_vhex_vbr = . - 0x100;
*(.vhex.exception) ;
. = _vhex_vbr + 0x400 ;
*(.vhex.tlb) ;
. = _vhex_vbr + 0x600 ;
*(.vhex.interrupt) ;
. = ALIGN(4);
} > xram AT> rom : vbr
_svhex = SIZEOF(.vhex);
/*
** DBR space !
*/
. = ORIGIN(ilram);
.ubc ALIGN(4) : ALIGN(4) {
_bubc_rom = LOADADDR(.ubc) ;
_bubc_ram = . ;
*(.ubc.handler)
*(.ubc)
. = ALIGN(4);
} > ilram AT> rom : ubc
_subc = SIZEOF(.ubc);
/* unwanted section */
/DISCARD/ : {
*(.debug_info)
*(.debug_abbrev)
*(.debug_loc)
*(.debug_aranges)
*(.debug_ranges)
*(.debug_line)
*(.debug_str)
*(.jcr)
*(.eh_frame_hdr)
*(.eh_frame)
*(.comment)
}
}