qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

linker.ld.S (3905B)


      1 #include "core-isa.h"
      2 
      3 #ifndef XCHAL_VECBASE_RESET_VADDR
      4 #define XCHAL_VECBASE_RESET_VADDR XCHAL_WINDOW_VECTORS_VADDR
      5 #define XCHAL_WINDOW_OF4_VECOFS   0x00000000
      6 #define XCHAL_WINDOW_UF4_VECOFS   0x00000040
      7 #define XCHAL_WINDOW_OF8_VECOFS   0x00000080
      8 #define XCHAL_WINDOW_UF8_VECOFS   0x000000C0
      9 #define XCHAL_WINDOW_OF12_VECOFS  0x00000100
     10 #define XCHAL_WINDOW_UF12_VECOFS  0x00000140
     11 #endif
     12 
     13 #define RAM_SIZE 0x08000000  /* 128M */
     14 #define ROM_SIZE 0x00001000  /* 4k */
     15 #define VECTORS_RESERVED_SIZE 0x1000
     16 
     17 #if XCHAL_HAVE_BE
     18 OUTPUT_FORMAT("elf32-xtensa-be")
     19 #else
     20 OUTPUT_FORMAT("elf32-xtensa-le")
     21 #endif
     22 ENTRY(_start)
     23 
     24 MEMORY {
     25     ram : ORIGIN = XCHAL_VECBASE_RESET_VADDR, LENGTH = RAM_SIZE
     26     rom : ORIGIN = XCHAL_RESET_VECTOR_VADDR, LENGTH = ROM_SIZE
     27 }
     28 
     29 SECTIONS
     30 {
     31     .init :
     32     {
     33         *(.init)
     34         *(.init.*)
     35     } > rom
     36 
     37 #if XCHAL_HAVE_WINDOWED
     38     .vector.window XCHAL_WINDOW_VECTORS_VADDR :
     39     {
     40     . = XCHAL_WINDOW_OF4_VECOFS;
     41         *(.vector.window_overflow_4)
     42     . = XCHAL_WINDOW_UF4_VECOFS;
     43         *(.vector.window_underflow_4)
     44     . = XCHAL_WINDOW_OF8_VECOFS;
     45         *(.vector.window_overflow_8)
     46     . = XCHAL_WINDOW_UF8_VECOFS;
     47         *(.vector.window_underflow_8)
     48     . = XCHAL_WINDOW_OF12_VECOFS;
     49         *(.vector.window_overflow_12)
     50     . = XCHAL_WINDOW_UF12_VECOFS;
     51         *(.vector.window_underflow_12)
     52     }
     53 #endif
     54 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 2
     55     .vector.level2 XCHAL_INTLEVEL2_VECTOR_VADDR :
     56     {
     57         *(.vector.level2)
     58     }
     59 #endif
     60 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 3
     61     .vector.level3 XCHAL_INTLEVEL3_VECTOR_VADDR :
     62     {
     63         *(.vector.level3)
     64     }
     65 #endif
     66 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 4
     67     .vector.level4 XCHAL_INTLEVEL4_VECTOR_VADDR :
     68     {
     69         *(.vector.level4)
     70     }
     71 #endif
     72 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 5
     73     .vector.level5 XCHAL_INTLEVEL5_VECTOR_VADDR :
     74     {
     75         *(.vector.level5)
     76     }
     77 #endif
     78 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 6
     79     .vector.level6 XCHAL_INTLEVEL6_VECTOR_VADDR :
     80     {
     81         *(.vector.level6)
     82     }
     83 #endif
     84 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 7
     85     .vector.level7 XCHAL_INTLEVEL7_VECTOR_VADDR :
     86     {
     87         *(.vector.level7)
     88     }
     89 #endif
     90     .vector.kernel XCHAL_KERNEL_VECTOR_VADDR :
     91     {
     92         *(.vector.kernel)
     93     }
     94     .vector.user XCHAL_USER_VECTOR_VADDR :
     95     {
     96         *(.vector.user)
     97     }
     98     .vector.double XCHAL_DOUBLEEXC_VECTOR_VADDR :
     99     {
    100         *(.vector.double)
    101     }
    102 
    103     .vector.text XCHAL_VECBASE_RESET_VADDR + VECTORS_RESERVED_SIZE :
    104     {
    105         *(.vector.window_overflow_4.*)
    106         *(.vector.window_underflow_4.*)
    107         *(.vector.window_overflow_8.*)
    108         *(.vector.window_underflow_8.*)
    109         *(.vector.window_overflow_12.*)
    110         *(.vector.window_underflow_12.*)
    111 
    112         *(.vector.level2.*)
    113         *(.vector.level3.*)
    114         *(.vector.level4.*)
    115         *(.vector.level5.*)
    116         *(.vector.level6.*)
    117         *(.vector.level7.*)
    118 
    119         *(.vector.kernel.*)
    120         *(.vector.user.*)
    121         *(.vector.double.*)
    122     } > ram
    123 
    124     .text :
    125     {
    126         _ftext = .;
    127         *(.text .stub .text.* .gnu.linkonce.t.* .literal .literal.*)
    128         _etext = .;
    129     } > ram
    130 
    131     .rodata :
    132     {
    133         . = ALIGN(4);
    134         _frodata = .;
    135         *(.rodata .rodata.* .gnu.linkonce.r.*)
    136         *(.rodata1)
    137         _erodata = .;
    138     } > ram
    139 
    140     .data :
    141     {
    142         . = ALIGN(4);
    143         _fdata = .;
    144         *(.data .data.* .gnu.linkonce.d.*)
    145         *(.data1)
    146         _gp = ALIGN(16);
    147         *(.sdata .sdata.* .gnu.linkonce.s.*)
    148         _edata = .;
    149     } > ram
    150 
    151     .bss :
    152     {
    153         . = ALIGN(4);
    154         _fbss = .;
    155         *(.dynsbss)
    156         *(.sbss .sbss.* .gnu.linkonce.sb.*)
    157         *(.scommon)
    158         *(.dynbss)
    159         *(.bss .bss.* .gnu.linkonce.b.*)
    160         *(COMMON)
    161         _ebss = .;
    162         _end = .;
    163     } > ram
    164 }
    165 
    166 PROVIDE(_fstack = (ORIGIN(ram) & 0xf0000000) + LENGTH(ram) - 16);