diff options
| author | dbarbi1 <dbarbi1@gmail.com> | 2017-05-09 15:41:01 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-09 15:41:01 -0500 | 
| commit | f4318adcedd4cbd6e84a48dda9495ccd5b18e6df (patch) | |
| tree | 6cfe9be277cd21aaec55441b75c45f54c0a3f153 /FreedomStudio/E31FPGA/global_interrupts/link.lds | |
| parent | 0357ba87797afa49b5d5ddebb988458d80df91c5 (diff) | |
| parent | 403db45ffb075abf0c23e89a028db330efddc96d (diff) | |
Merge pull request #57 from sifive/freedom-studio
Freedom studio
Diffstat (limited to 'FreedomStudio/E31FPGA/global_interrupts/link.lds')
| -rw-r--r-- | FreedomStudio/E31FPGA/global_interrupts/link.lds | 167 | 
1 files changed, 167 insertions, 0 deletions
diff --git a/FreedomStudio/E31FPGA/global_interrupts/link.lds b/FreedomStudio/E31FPGA/global_interrupts/link.lds new file mode 100644 index 0000000..45a82d7 --- /dev/null +++ b/FreedomStudio/E31FPGA/global_interrupts/link.lds @@ -0,0 +1,167 @@ +OUTPUT_ARCH( "riscv" ) + +ENTRY( _start ) + +MEMORY +{ +  flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M +  ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K +} + +PHDRS +{ +  flash PT_LOAD; +  ram_init PT_LOAD; +  ram PT_NULL; +} + +SECTIONS +{ +  __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; + +  .init           : +  { +    KEEP (*(SORT_NONE(.init))) +  } >flash AT>flash :flash + +  .text           : +  { +    *(.text.unlikely .text.unlikely.*) +    *(.text.startup .text.startup.*) +    *(.text .text.*) +    *(.gnu.linkonce.t.*) +  } >flash AT>flash :flash + +  .fini           : +  { +    KEEP (*(SORT_NONE(.fini))) +  } >flash AT>flash :flash + +  PROVIDE (__etext = .); +  PROVIDE (_etext = .); +  PROVIDE (etext = .); + +  .rodata         : +  { +    *(.rdata) +    *(.rodata .rodata.*) +    *(.gnu.linkonce.r.*) +  } >flash AT>flash :flash + +  . = ALIGN(4); + +  .preinit_array  : +  { +    PROVIDE_HIDDEN (__preinit_array_start = .); +    KEEP (*(.preinit_array)) +    PROVIDE_HIDDEN (__preinit_array_end = .); +  } >flash AT>flash :flash + +  .init_array     : +  { +    PROVIDE_HIDDEN (__init_array_start = .); +    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) +    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) +    PROVIDE_HIDDEN (__init_array_end = .); +  } >flash AT>flash :flash + +  .fini_array     : +  { +    PROVIDE_HIDDEN (__fini_array_start = .); +    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) +    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) +    PROVIDE_HIDDEN (__fini_array_end = .); +  } >flash AT>flash :flash + +  .ctors          : +  { +    /* gcc uses crtbegin.o to find the start of +       the constructors, so we make sure it is +       first.  Because this is a wildcard, it +       doesn't matter if the user does not +       actually link against crtbegin.o; the +       linker won't look for a file to match a +       wildcard.  The wildcard also means that it +       doesn't matter which directory crtbegin.o +       is in.  */ +    KEEP (*crtbegin.o(.ctors)) +    KEEP (*crtbegin?.o(.ctors)) +    /* We don't want to include the .ctor section from +       the crtend.o file until after the sorted ctors. +       The .ctor section from the crtend file contains the +       end of ctors marker and it must be last */ +    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) +    KEEP (*(SORT(.ctors.*))) +    KEEP (*(.ctors)) +  } >flash AT>flash :flash + +  .dtors          : +  { +    KEEP (*crtbegin.o(.dtors)) +    KEEP (*crtbegin?.o(.dtors)) +    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) +    KEEP (*(SORT(.dtors.*))) +    KEEP (*(.dtors)) +  } >flash AT>flash :flash + +  .lalign         : +  { +    . = ALIGN(4); +    PROVIDE( _data_lma = . ); +  } >flash AT>flash :flash + +  .dalign         : +  { +    . = ALIGN(4); +    PROVIDE( _data = . ); +  } >ram AT>flash :ram_init + +  .data          : +  { +    *(.data .data.*) +    *(.gnu.linkonce.d.*) +  } >ram AT>flash :ram_init + +  .srodata        : +  { +    PROVIDE( _gp = . + 0x800 ); +    *(.srodata.cst16) +    *(.srodata.cst8) +    *(.srodata.cst4) +    *(.srodata.cst2) +    *(.srodata .srodata.*) +  } >ram AT>flash :ram_init + +  .sdata          : +  { +    *(.sdata .sdata.*) +    *(.gnu.linkonce.s.*) +  } >ram AT>flash :ram_init + +  . = ALIGN(4); +  PROVIDE( _edata = . ); +  PROVIDE( edata = . ); + +  PROVIDE( _fbss = . ); +  PROVIDE( __bss_start = . ); +  .bss            : +  { +    *(.sbss*) +    *(.gnu.linkonce.sb.*) +    *(.bss .bss.*) +    *(.gnu.linkonce.b.*) +    *(COMMON) +    . = ALIGN(4); +  } >ram AT>ram :ram + +  . = ALIGN(8); +  PROVIDE( _end = . ); +  PROVIDE( end = . ); + +  .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : +  { +    PROVIDE( _heap_end = . ); +    . = __stack_size; +    PROVIDE( _sp = . ); +  } >ram AT>ram :ram +}  | 
