1a9c94277SMarkus Armbruster#include "core-isa.h" 220303e42SMax Filippov 3*906da882SMax Filippov#ifndef XCHAL_VECBASE_RESET_VADDR 4*906da882SMax Filippov#define XCHAL_VECBASE_RESET_VADDR XCHAL_WINDOW_VECTORS_VADDR 5*906da882SMax Filippov#define XCHAL_WINDOW_OF4_VECOFS 0x00000000 6*906da882SMax Filippov#define XCHAL_WINDOW_UF4_VECOFS 0x00000040 7*906da882SMax Filippov#define XCHAL_WINDOW_OF8_VECOFS 0x00000080 8*906da882SMax Filippov#define XCHAL_WINDOW_UF8_VECOFS 0x000000C0 9*906da882SMax Filippov#define XCHAL_WINDOW_OF12_VECOFS 0x00000100 10*906da882SMax Filippov#define XCHAL_WINDOW_UF12_VECOFS 0x00000140 11*906da882SMax Filippov#endif 12*906da882SMax Filippov 13*906da882SMax Filippov#define RAM_SIZE 0x08000000 /* 128M */ 14*906da882SMax Filippov#define ROM_SIZE 0x00001000 /* 4k */ 15*906da882SMax Filippov#define VECTORS_RESERVED_SIZE 0x1000 16*906da882SMax Filippov 17*906da882SMax Filippov#if XCHAL_HAVE_BE 1820303e42SMax FilippovOUTPUT_FORMAT("elf32-xtensa-be") 1920303e42SMax Filippov#else 2020303e42SMax FilippovOUTPUT_FORMAT("elf32-xtensa-le") 2120303e42SMax Filippov#endif 2220303e42SMax FilippovENTRY(_start) 2320303e42SMax Filippov 2420303e42SMax FilippovMEMORY { 25*906da882SMax Filippov ram : ORIGIN = XCHAL_VECBASE_RESET_VADDR, LENGTH = RAM_SIZE 26*906da882SMax Filippov rom : ORIGIN = XCHAL_RESET_VECTOR_VADDR, LENGTH = ROM_SIZE 2720303e42SMax Filippov} 2820303e42SMax Filippov 2920303e42SMax FilippovSECTIONS 3020303e42SMax Filippov{ 3120303e42SMax Filippov .init : 3220303e42SMax Filippov { 3320303e42SMax Filippov *(.init) 3420303e42SMax Filippov *(.init.*) 3520303e42SMax Filippov } > rom 3620303e42SMax Filippov 37f81aa02eSMax Filippov#if XCHAL_HAVE_WINDOWED 38*906da882SMax Filippov .vector.window XCHAL_WINDOW_VECTORS_VADDR : 39*906da882SMax Filippov { 4020303e42SMax Filippov . = XCHAL_WINDOW_OF4_VECOFS; 4120303e42SMax Filippov *(.vector.window_overflow_4) 4220303e42SMax Filippov . = XCHAL_WINDOW_UF4_VECOFS; 4320303e42SMax Filippov *(.vector.window_underflow_4) 4420303e42SMax Filippov . = XCHAL_WINDOW_OF8_VECOFS; 4520303e42SMax Filippov *(.vector.window_overflow_8) 4620303e42SMax Filippov . = XCHAL_WINDOW_UF8_VECOFS; 4720303e42SMax Filippov *(.vector.window_underflow_8) 4820303e42SMax Filippov . = XCHAL_WINDOW_OF12_VECOFS; 4920303e42SMax Filippov *(.vector.window_overflow_12) 5020303e42SMax Filippov . = XCHAL_WINDOW_UF12_VECOFS; 5120303e42SMax Filippov *(.vector.window_underflow_12) 52*906da882SMax Filippov } 53f81aa02eSMax Filippov#endif 5420303e42SMax Filippov#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 2 55*906da882SMax Filippov .vector.level2 XCHAL_INTLEVEL2_VECTOR_VADDR : 56*906da882SMax Filippov { 5720303e42SMax Filippov *(.vector.level2) 58*906da882SMax Filippov } 5920303e42SMax Filippov#endif 6020303e42SMax Filippov#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 3 61*906da882SMax Filippov .vector.level3 XCHAL_INTLEVEL3_VECTOR_VADDR : 62*906da882SMax Filippov { 6320303e42SMax Filippov *(.vector.level3) 64*906da882SMax Filippov } 6520303e42SMax Filippov#endif 6620303e42SMax Filippov#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 4 67*906da882SMax Filippov .vector.level4 XCHAL_INTLEVEL4_VECTOR_VADDR : 68*906da882SMax Filippov { 6920303e42SMax Filippov *(.vector.level4) 70*906da882SMax Filippov } 7120303e42SMax Filippov#endif 7220303e42SMax Filippov#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 5 73*906da882SMax Filippov .vector.level5 XCHAL_INTLEVEL5_VECTOR_VADDR : 74*906da882SMax Filippov { 7520303e42SMax Filippov *(.vector.level5) 76*906da882SMax Filippov } 7720303e42SMax Filippov#endif 7820303e42SMax Filippov#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 6 79*906da882SMax Filippov .vector.level6 XCHAL_INTLEVEL6_VECTOR_VADDR : 80*906da882SMax Filippov { 8120303e42SMax Filippov *(.vector.level6) 82*906da882SMax Filippov } 8320303e42SMax Filippov#endif 8420303e42SMax Filippov#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 7 85*906da882SMax Filippov .vector.level7 XCHAL_INTLEVEL7_VECTOR_VADDR : 86*906da882SMax Filippov { 8720303e42SMax Filippov *(.vector.level7) 88*906da882SMax Filippov } 8920303e42SMax Filippov#endif 90*906da882SMax Filippov .vector.kernel XCHAL_KERNEL_VECTOR_VADDR : 91*906da882SMax Filippov { 9220303e42SMax Filippov *(.vector.kernel) 93*906da882SMax Filippov } 94*906da882SMax Filippov .vector.user XCHAL_USER_VECTOR_VADDR : 95*906da882SMax Filippov { 9620303e42SMax Filippov *(.vector.user) 97*906da882SMax Filippov } 98*906da882SMax Filippov .vector.double XCHAL_DOUBLEEXC_VECTOR_VADDR : 99*906da882SMax Filippov { 10020303e42SMax Filippov *(.vector.double) 101*906da882SMax Filippov } 102f81aa02eSMax Filippov 103*906da882SMax Filippov .vector.text XCHAL_VECBASE_RESET_VADDR + VECTORS_RESERVED_SIZE : 104f81aa02eSMax Filippov { 105f81aa02eSMax Filippov *(.vector.window_overflow_4.*) 106f81aa02eSMax Filippov *(.vector.window_underflow_4.*) 107f81aa02eSMax Filippov *(.vector.window_overflow_8.*) 108f81aa02eSMax Filippov *(.vector.window_underflow_8.*) 109f81aa02eSMax Filippov *(.vector.window_overflow_12.*) 110f81aa02eSMax Filippov *(.vector.window_underflow_12.*) 111f81aa02eSMax Filippov 112f81aa02eSMax Filippov *(.vector.level2.*) 113f81aa02eSMax Filippov *(.vector.level3.*) 114f81aa02eSMax Filippov *(.vector.level4.*) 115f81aa02eSMax Filippov *(.vector.level5.*) 116f81aa02eSMax Filippov *(.vector.level6.*) 117f81aa02eSMax Filippov *(.vector.level7.*) 118f81aa02eSMax Filippov 119f81aa02eSMax Filippov *(.vector.kernel.*) 120f81aa02eSMax Filippov *(.vector.user.*) 12120303e42SMax Filippov *(.vector.double.*) 12220303e42SMax Filippov } > ram 12320303e42SMax Filippov 12420303e42SMax Filippov .text : 12520303e42SMax Filippov { 12620303e42SMax Filippov _ftext = .; 12720303e42SMax Filippov *(.text .stub .text.* .gnu.linkonce.t.* .literal .literal.*) 12820303e42SMax Filippov _etext = .; 12920303e42SMax Filippov } > ram 13020303e42SMax Filippov 13120303e42SMax Filippov .rodata : 13220303e42SMax Filippov { 13320303e42SMax Filippov . = ALIGN(4); 13420303e42SMax Filippov _frodata = .; 13520303e42SMax Filippov *(.rodata .rodata.* .gnu.linkonce.r.*) 13620303e42SMax Filippov *(.rodata1) 13720303e42SMax Filippov _erodata = .; 13820303e42SMax Filippov } > ram 13920303e42SMax Filippov 14020303e42SMax Filippov .data : 14120303e42SMax Filippov { 14220303e42SMax Filippov . = ALIGN(4); 14320303e42SMax Filippov _fdata = .; 14420303e42SMax Filippov *(.data .data.* .gnu.linkonce.d.*) 14520303e42SMax Filippov *(.data1) 14620303e42SMax Filippov _gp = ALIGN(16); 14720303e42SMax Filippov *(.sdata .sdata.* .gnu.linkonce.s.*) 14820303e42SMax Filippov _edata = .; 14920303e42SMax Filippov } > ram 15020303e42SMax Filippov 15120303e42SMax Filippov .bss : 15220303e42SMax Filippov { 15320303e42SMax Filippov . = ALIGN(4); 15420303e42SMax Filippov _fbss = .; 15520303e42SMax Filippov *(.dynsbss) 15620303e42SMax Filippov *(.sbss .sbss.* .gnu.linkonce.sb.*) 15720303e42SMax Filippov *(.scommon) 15820303e42SMax Filippov *(.dynbss) 15920303e42SMax Filippov *(.bss .bss.* .gnu.linkonce.b.*) 16020303e42SMax Filippov *(COMMON) 16120303e42SMax Filippov _ebss = .; 16220303e42SMax Filippov _end = .; 16320303e42SMax Filippov } > ram 16420303e42SMax Filippov} 16520303e42SMax Filippov 16620303e42SMax FilippovPROVIDE(_fstack = (ORIGIN(ram) & 0xf0000000) + LENGTH(ram) - 16); 167