1be78e799SBastian Koppelmann/* Default linker script, for normal executables */ 2be78e799SBastian KoppelmannOUTPUT_FORMAT("elf32-tricore") 3be78e799SBastian KoppelmannOUTPUT_ARCH(tricore) 4be78e799SBastian KoppelmannENTRY(_start) 5be78e799SBastian Koppelmann 6be78e799SBastian Koppelmann/* the internal ram description */ 7be78e799SBastian KoppelmannMEMORY 8be78e799SBastian Koppelmann{ 9be78e799SBastian Koppelmann text_ram (rx!p): org = 0x80000000, len = 15K 10be78e799SBastian Koppelmann data_ram (w!xp): org = 0xd0000000, len = 130K 11be78e799SBastian Koppelmann} 12be78e799SBastian Koppelmann/* 13be78e799SBastian Koppelmann * Define the sizes of the user and system stacks. 14be78e799SBastian Koppelmann */ 15*0e45f7beSBastian Koppelmann__ISTACK_SIZE = DEFINED (__ISTACK_SIZE) ? __ISTACK_SIZE : 256 ; 16be78e799SBastian Koppelmann__USTACK_SIZE = DEFINED (__USTACK_SIZE) ? __USTACK_SIZE : 1K ; 17be78e799SBastian Koppelmann/* 18be78e799SBastian Koppelmann * Define the start address and the size of the context save area. 19be78e799SBastian Koppelmann */ 20be78e799SBastian Koppelmann__CSA_BEGIN = 0xd0000000 ; 21be78e799SBastian Koppelmann__CSA_SIZE = 8k ; 22be78e799SBastian Koppelmann__CSA_END = __CSA_BEGIN + __CSA_SIZE ; 23be78e799SBastian Koppelmann 24*0e45f7beSBastian Koppelmann__TESTDEVICE = 0xf0000000 ; 25*0e45f7beSBastian Koppelmann 26be78e799SBastian KoppelmannSECTIONS 27be78e799SBastian Koppelmann{ 28be78e799SBastian Koppelmann .text : 29be78e799SBastian Koppelmann { 30be78e799SBastian Koppelmann *(.text) 31be78e799SBastian Koppelmann . = ALIGN(8); 32be78e799SBastian Koppelmann } > text_ram 33be78e799SBastian Koppelmann 34be78e799SBastian Koppelmann .rodata : 35be78e799SBastian Koppelmann { 36be78e799SBastian Koppelmann *(.rodata) 37be78e799SBastian Koppelmann *(.rodata1) 38*0e45f7beSBastian Koppelmann /* 39*0e45f7beSBastian Koppelmann * Create the clear and copy tables that tell the startup code 40*0e45f7beSBastian Koppelmann * which memory areas to clear and to copy, respectively. 41*0e45f7beSBastian Koppelmann */ 42*0e45f7beSBastian Koppelmann . = ALIGN(4) ; 43*0e45f7beSBastian Koppelmann PROVIDE(__clear_table = .) ; 44*0e45f7beSBastian Koppelmann LONG(0 + ADDR(.bss)); LONG(SIZEOF(.bss)); 45*0e45f7beSBastian Koppelmann LONG(-1); LONG(-1); 46*0e45f7beSBastian Koppelmann PROVIDE(__copy_table = .) ; 47*0e45f7beSBastian Koppelmann LONG(LOADADDR(.data)); LONG(0 + ADDR(.data)); LONG(SIZEOF(.data)); 48*0e45f7beSBastian Koppelmann LONG(-1); LONG(-1); LONG(-1); 49*0e45f7beSBastian Koppelmann . = ALIGN(8); 50be78e799SBastian Koppelmann } > data_ram 51be78e799SBastian Koppelmann 52be78e799SBastian Koppelmann .data : 53be78e799SBastian Koppelmann { 54be78e799SBastian Koppelmann . = ALIGN(8) ; 55be78e799SBastian Koppelmann *(.data) 56be78e799SBastian Koppelmann *(.data.*) 57be78e799SBastian Koppelmann . = ALIGN(8) ; 58*0e45f7beSBastian Koppelmann __ISTACK = . + __ISTACK_SIZE ; 59be78e799SBastian Koppelmann __USTACK = . + __USTACK_SIZE -768; 60be78e799SBastian Koppelmann 61be78e799SBastian Koppelmann } > data_ram 62be78e799SBastian Koppelmann /* 63be78e799SBastian Koppelmann * Allocate space for BSS sections. 64be78e799SBastian Koppelmann */ 65be78e799SBastian Koppelmann .bss : 66be78e799SBastian Koppelmann { 67be78e799SBastian Koppelmann BSS_BASE = . ; 68be78e799SBastian Koppelmann *(.bss) 69be78e799SBastian Koppelmann *(COMMON) 70be78e799SBastian Koppelmann . = ALIGN(8) ; 71be78e799SBastian Koppelmann } > data_ram 72be78e799SBastian Koppelmann /* Make sure CSA, stack and heap addresses are properly aligned. */ 73be78e799SBastian Koppelmann _. = ASSERT ((__CSA_BEGIN & 0x3f) == 0 , "illegal CSA start address") ; 74be78e799SBastian Koppelmann _. = ASSERT ((__CSA_SIZE & 0x3f) == 0 , "illegal CSA size") ; 75be78e799SBastian Koppelmann 76be78e799SBastian Koppelmann} 77