helloyifa 31f179cb76 init
2025-05-15 14:19:56 +08:00

257 lines
11 KiB
Plaintext
Executable File

/* This file is generated by nds_ldsag (version (2022-05-18) ). */
ENTRY(_start)
SECTIONS
{
PROVIDE (__executable_start = 0x1e0000);
NDS_SAG_LMA_CPU1 = 0x1e0000 ;
CPU1_BEGIN = NDS_SAG_LMA_CPU1;
. = 0 + NDS_SAG_LMA_CPU1;
. = ALIGN(ALIGNOF(.nds_vector));
.nds_vector : { KEEP(*(.nds_vector )) KEEP(*(SORT(.nds_vector.* ))) }
. = ALIGN(8);
. = ALIGN(ALIGNOF(.nds_init));
.nds_init : { KEEP(*(.nds_init )) } = 0x0100
. = ALIGN(ALIGNOF(.interp));
.interp : { *(.interp ) }
. = ALIGN(ALIGNOF(.note.gnu.build-id));
.note.gnu.build-id : { *(.note.gnu.build-id ) }
. = ALIGN(ALIGNOF(.note.ABI-tag));
.note.ABI-tag : { *(.note.ABI-tag ) }
. = ALIGN(ALIGNOF(.hash));
.hash : { *(.hash ) }
. = ALIGN(ALIGNOF(.gnu.hash));
.gnu.hash : { *(.gnu.hash ) }
. = ALIGN(ALIGNOF(.dynsym));
.dynsym : { *(.dynsym ) }
. = ALIGN(ALIGNOF(.dynstr));
.dynstr : { *(.dynstr ) }
. = ALIGN(ALIGNOF(.gnu.version));
.gnu.version : { *(.gnu.version ) }
. = ALIGN(ALIGNOF(.gnu.version_d));
.gnu.version_d : { *(.gnu.version_d ) }
. = ALIGN(ALIGNOF(.gnu.version_r));
.gnu.version_r : { *(.gnu.version_r ) }
. = ALIGN(ALIGNOF(.rela.init));
.rela.init : { *(.rela.init ) }
. = ALIGN(ALIGNOF(.rela.text));
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.* ) }
. = ALIGN(ALIGNOF(.rela.fini));
.rela.fini : { *(.rela.fini ) }
. = ALIGN(ALIGNOF(.rela.rodata));
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.* ) }
. = ALIGN(ALIGNOF(.rela.data.rel.ro));
.rela.data.rel.ro : { *(.rel.data.rel.ro* ) }
. = ALIGN(ALIGNOF(.rela.data));
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.* ) }
. = ALIGN(ALIGNOF(.rela.tdata));
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.* ) }
. = ALIGN(ALIGNOF(.rela.tbss));
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.* ) }
. = ALIGN(ALIGNOF(.rela.ctors));
.rela.ctors : { *(.rela.ctors ) }
. = ALIGN(ALIGNOF(.rela.dtors));
.rela.dtors : { *(.rela.dtors ) }
. = ALIGN(ALIGNOF(.rela.dyn));
.rela.dyn : { *(rela.dyn ) *(.rela__libc_subfreeres ) *(.rela__libc_atexit ) *(.rela__libc_thread_subfreeres ) *(.rela.init_array ) *(.rela.fini_array ) }
. = ALIGN(ALIGNOF(.rela.got));
.rela.got : { *(.rela.got ) }
. = ALIGN(ALIGNOF(.rela.sdata));
.rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.* ) }
. = ALIGN(ALIGNOF(.rela.sbss));
.rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.* ) }
. = ALIGN(ALIGNOF(.rela.sdata2));
.rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.* ) }
. = ALIGN(ALIGNOF(.rela.sbss2));
.rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.* ) }
. = ALIGN(ALIGNOF(.rela.bss));
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.* ) }
. = ALIGN(ALIGNOF(.rela.plt));
.rela.plt : { *(.rela.plt ) }
. = ALIGN(ALIGNOF(.init));
.init : { KEEP(*(.init )) }
. = ALIGN(ALIGNOF(.plt));
.plt : { *(.plt ) }
. = ALIGN(ALIGNOF(.text));
.text : { *(.text .stub .text.* .gnu.linkonce.t.* ) KEEP(*(.text.*personality* )) *(.gnu.warning ) . = ALIGN(4); } = 0x0100
. = ALIGN(ALIGNOF(.fini));
.fini : { KEEP(*(.fini )) }
. = ALIGN(ALIGNOF(.exec.itable));
.exec.itable : { *(.exec.itable ) }
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
. = ALIGN(ALIGNOF(.rodata));
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.* ) }
. = ALIGN(ALIGNOF(.rodata1));
.rodata1 : { *(.rodata1 ) }
. = ALIGN(ALIGNOF(.sdata2));
.sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.* ) }
. = ALIGN(ALIGNOF(.sbss2));
.sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.* ) }
. = ALIGN(ALIGNOF(.eh_frame_hdr));
.eh_frame_hdr : { *(.eh_frame_hdr ) }
. = 0x10000000;
ITCM_BEGIN = .;
.itcm_sec_code : AT(LOADADDR (.eh_frame_hdr) + SIZEOF (.eh_frame_hdr))
{ KEEP(*(.itcm_sec_code )) }
_itcm_lma_start = LOADADDR (.itcm_sec_code);
_itcm_ema_start = ADDR(.itcm_sec_code);
_itcm_lma_end = LOADADDR (.itcm_sec_code) + SIZEOF (.itcm_sec_code);
_itcm_ema_end = .;
_itcm_bss_start = .;
.itcm_sec_bss : AT(LOADADDR (.itcm_sec_code) + SIZEOF (.itcm_sec_code))
{ KEEP(*(.itcm_sec_bss )) }
_itcm_bss_end = .;
ITCM_SIZE = . - ITCM_BEGIN;
. = 0x20000400;
DTCM_BEGIN = .;
.dtcm_sec_data : AT(LOADADDR (.itcm_sec_bss) + SIZEOF (.itcm_sec_bss))
{ KEEP(*(.dtcm_sec_data )) }
_dtcm_lma_start = LOADADDR (.dtcm_sec_data);
_dtcm_ema_start = ADDR(.dtcm_sec_data);
_dtcm_lma_end = LOADADDR (.dtcm_sec_data) + SIZEOF (.dtcm_sec_data);
_dtcm_ema_end = .;
_dtcm_bss_start = .;
.dtcm_sec_bss : AT(LOADADDR (.dtcm_sec_data) + SIZEOF (.dtcm_sec_data))
{ KEEP(*(.dtcm_sec_bss )) }
_dtcm_bss_end = .;
DTCM_SIZE = . - DTCM_BEGIN;
. = 0x30000000;
SRAM1_BEGIN = .;
.video_spec_data : AT(LOADADDR (.dtcm_sec_bss) + SIZEOF (.dtcm_sec_bss))
{ KEEP(*(.video_spec_data )) }
_video_start = ADDR(.video_spec_data);
SRAM1_SIZE = . - SRAM1_BEGIN;
. = 0x30078C00;
SRAM2_BEGIN = .;
. = ALIGN(8);
. = ALIGN(0x20);
. = ALIGN(ALIGNOF(.eh_frame));
.eh_frame : AT(ALIGN(LOADADDR (.video_spec_data) + SIZEOF (.video_spec_data), 32))
{ KEEP(*(.eh_frame )) }
_data_lmastart = LOADADDR (.eh_frame);
_data_start = ADDR(.eh_frame);
. = ALIGN(ALIGNOF(.gcc_except_table));
.gcc_except_table : AT(ALIGN(LOADADDR (.eh_frame) + SIZEOF (.eh_frame), ALIGNOF(.gcc_except_table)))
{ KEEP(*(.gcc_except_table )) *(.gcc_except_table.* ) }
. = ALIGN(ALIGNOF(.tdata));
.tdata : AT(ALIGN(LOADADDR (.gcc_except_table) + SIZEOF (.gcc_except_table), ALIGNOF(.tdata)))
{ *(.tdata .tdata.* .gnu.linkonce.td.* ) }
. = ALIGN(8);
. = ALIGN(ALIGNOF(.preinit_array));
.preinit_array : AT(ALIGN(ALIGN(LOADADDR (.tdata) + SIZEOF (.tdata), ALIGNOF(.preinit_array)), 8))
{; PROVIDE (__preinit_array_start = .); KEEP(*(.preinit_array )); PROVIDE (__preinit_array_end = .); }
. = ALIGN(ALIGNOF(.init_array));
.init_array : AT(ALIGN(LOADADDR (.preinit_array) + SIZEOF (.preinit_array), ALIGNOF(.init_array)))
{; PROVIDE (__init_array_start = .); KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.* ))) KEEP(*(.init_array )); PROVIDE (__init_array_end = .); }
. = ALIGN(ALIGNOF(.fini_array));
.fini_array : AT(ALIGN(LOADADDR (.init_array) + SIZEOF (.init_array), ALIGNOF(.fini_array)))
{; PROVIDE (__fini_array_start = .); KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.* ))) KEEP(*(.fini_array )); PROVIDE (__fini_array_end = .); }
. = ALIGN(ALIGNOF(.tm_clone_table));
.tm_clone_table : AT(ALIGN(LOADADDR (.fini_array) + SIZEOF (.fini_array), ALIGNOF(.tm_clone_table)))
{ *(.tm_clone_table ) }
. = ALIGN(ALIGNOF(.ctors));
.ctors : AT(ALIGN(LOADADDR (.tm_clone_table) + SIZEOF (.tm_clone_table), ALIGNOF(.ctors)))
{ KEEP(*crtbegin*.o(.ctors)) KEEP(*(EXCLUDE_FILE (*crtend*.o) .ctors)) KEEP(*(SORT(.ctors.* ))) KEEP(*(.ctors )) }
. = ALIGN(ALIGNOF(.dtors));
.dtors : AT(ALIGN(LOADADDR (.ctors) + SIZEOF (.ctors), ALIGNOF(.dtors)))
{ KEEP(*crtbegin*.o(.dtors)) KEEP(*(EXCLUDE_FILE (*crtend*.o) .dtors)) KEEP(*(SORT(.dtors.* ))) KEEP(*(.dtors )) }
. = ALIGN(ALIGNOF(.jcr));
.jcr : AT(ALIGN(LOADADDR (.dtors) + SIZEOF (.dtors), ALIGNOF(.jcr)))
{ KEEP(*(.jcr )) }
. = ALIGN(ALIGNOF(.data.rel.ro));
.data.rel.ro : AT(ALIGN(LOADADDR (.jcr) + SIZEOF (.jcr), ALIGNOF(.data.rel.ro)))
{ *(.data.rel.ro.local ) *(.data.rel.ro* ) }
. = ALIGN(ALIGNOF(.dynamic));
.dynamic : AT(ALIGN(LOADADDR (.data.rel.ro) + SIZEOF (.data.rel.ro), ALIGNOF(.dynamic)))
{ *(.dynamic ) }
. = ALIGN(8);
. = ALIGN(ALIGNOF(.got));
.got : AT(ALIGN(ALIGN(LOADADDR (.dynamic) + SIZEOF (.dynamic), ALIGNOF(.got)), 8))
{ *(.got.plt ) *(.got ) }
. = ALIGN(ALIGNOF(.data));
.data : AT(ALIGN(LOADADDR (.got) + SIZEOF (.got), ALIGNOF(.data)))
{ *(.data .data.* .gnu.linkonce.d.* ) KEEP(*(.gnu.linkonce.d.*personality* )) SORT(CONSTRUCTORS) . = ALIGN(8); }
. = ALIGN(ALIGNOF(.data1));
.data1 : AT(ALIGN(LOADADDR (.data) + SIZEOF (.data), ALIGNOF(.data1)))
{ *(.data1 ) . = ALIGN(8); }
. = ALIGN(8);
. = ALIGN(ALIGNOF(.sdata));
.sdata : AT(ALIGN(ALIGN(LOADADDR (.data1) + SIZEOF (.data1), ALIGNOF(.sdata)), 8))
{ *(.srodata.cst16 ) *(.srodata.cst8 ) *(.srodata.cst4 ) *(.srodata.cst2 ) *(.srodata .srodata.* ) *(.sdata .sdata.* .gnu.linkonce.s.* ) }
. = ALIGN(ALIGNOF(.sdata_d));
.sdata_d : AT(ALIGN(LOADADDR (.sdata) + SIZEOF (.sdata), ALIGNOF(.sdata_d)))
{ *(.sdata_d .sdata_d.* ) }
. = ALIGN(ALIGNOF(.sdata_w));
.sdata_w : AT(ALIGN(LOADADDR (.sdata_d) + SIZEOF (.sdata_d), ALIGNOF(.sdata_w)))
{ *(.sdata_w .sdata_w.* ) }
. = ALIGN(ALIGNOF(.sdata_h));
.sdata_h : AT(ALIGN(LOADADDR (.sdata_w) + SIZEOF (.sdata_w), ALIGNOF(.sdata_h)))
{ *(.sdata_h .sdata_h.* ) }
. = ALIGN(ALIGNOF(.sdata_b));
.sdata_b : AT(ALIGN(LOADADDR (.sdata_h) + SIZEOF (.sdata_h), ALIGNOF(.sdata_b)))
{ *(.sdata_b .sdata_b.* ) }
. = ALIGN(ALIGNOF(.sdata_f));
.sdata_f : AT(ALIGN(LOADADDR (.sdata_b) + SIZEOF (.sdata_b), ALIGNOF(.sdata_f)))
{ *(.sdata_f .sdata_f.* ) }
. = ALIGN(8);
_edata = .;
PROVIDE (edata = .);
. = ALIGN(8);
__bss_start = .;
PROVIDE (__sbss_start = .);
PROVIDE (___sbss_start = .);
.tbss (NOLOAD) : { *(.tbss .tbss.* .gnu.linkonce.tb.* ) *(.tcommon ) }
.sbss (NOLOAD) : { *(.dynsbss ) *(.sbss .sbss.* .gnu.linkonce.sb.* ) *(.scommon .scommon.* ) }
.sbss_f (NOLOAD) : { *(.sbss_f .sbss_f.* ) *(.scommon_f .scommon_f.* ) }
.sbss_b (NOLOAD) : { *(.sbss_b .sbss_b.* ) *(.scommon_b .scommon_b.* ) . = ALIGN(2); }
.sbss_h (NOLOAD) : { *(.sbss_h .sbss_h.* ) *(.scommon_h .scommon_h.* ) . = ALIGN(4); }
.sbss_w (NOLOAD) : { *(.sbss_w .sbss_w.* ) *(.scommon_w .scommon_w.* ) *(.dynsbss ) *(.scommon ) . = ALIGN(8); }
.sbss_d (NOLOAD) : { *(.sbss_d .sbss_d.* ) *(.scommon_d .scommon_d.* ) }
.bss (NOLOAD) : { *(.dynbss ) *(.bss .bss.* .gnu.linkonce.b.* ) *(COMMON ) . = ALIGN(8); }
PROVIDE (__sbss_end = .);
PROVIDE (___sbss_end = .);
. = ALIGN(8);
_end = .;
PROVIDE (end = .);
PROVIDE (_stack = 0x20007FE0);
SRAM2_SIZE = . - SRAM2_BEGIN;
. = 0x3007FC00;
SWAP_BEGIN = .;
.swap_data : AT(LOADADDR (.sdata_f) + SIZEOF (.sdata_f))
{ KEEP(*(.swap_data )) }
_swap_start = ADDR(.swap_data);
SWAP_SIZE = . - SWAP_BEGIN;
CPU1_SIZE = LOADADDR(.swap_data) + SIZEOF(.swap_data) - CPU1_BEGIN;
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
}
ASSERT((DEFINED (_RELAX_END_) ? ITCM_SIZE : 0x0)<= 0x8000, "ITCM OVERFLOW");
ASSERT((DEFINED (_RELAX_END_) ? DTCM_SIZE : 0x0)<= 0x6C00, "DTCM OVERFLOW");
ASSERT((DEFINED (_RELAX_END_) ? SRAM1_SIZE : 0x0)<= 0xA000, "SRAM1 OVERFLOW");
ASSERT((DEFINED (_RELAX_END_) ? SRAM2_SIZE : 0x0)<= 0x7000, "SRAM2 OVERFLOW");
ASSERT((DEFINED (_RELAX_END_) ? SWAP_SIZE : 0x0)<= 0x400, "SWAP OVERFLOW");
ASSERT((DEFINED (_RELAX_END_) ? CPU1_SIZE : 0x0)<= 0x40000, "CPU1 OVERFLOW");