OUTPUT_ARCH(mips) ENTRY(__start) /* Flash is located at 0xb8c00000 when boot_rom_enable=1 */ flash_start = 0x9fc00000; MEMORY { FLASH(R) : ORIGIN = 0x9fc00000, LENGTH = 0x0007C000 RAM(RW) : ORIGIN = (0x80000000+0x02000000), LENGTH = (0x2000000-((0x80000000+0x01000000)-0x80000000)) S2_RAM(RW): ORIGIN = (0x80001000), LENGTH = (0x16000) } SECTIONS { .stage1 : AT ( flash_start ) { bootloader_s1l.o(.text) bootloader_s1l.o(.text.*) bootloader_s1l.o(.rodata) bootloader_s1l.o(.rodata1) bootloader_s1l.o(.rodata.str1.4) bootloader_s1l.o(.rodata.cst4) bootloader_s1l.o(.rodata.cst8) bootloader_s1l.o(.fini) . = ALIGN(0x40); } > FLASH .bsec : { __bsp_key0 = .; KEEP(*(.bsec_key0)) __bsp_fw = .; KEEP(*(.bsec_fw)) . = ALIGN(0x40); } > FLASH __bsp_key0 &= 0x1fffffff; __bsp_fw &= 0x1fffffff; .text : AT ( LOADADDR(.bsec) + SIZEOF(.bsec) ) { _ftext = .; *(.text) *(.text.*) *(.rodata) *(.rodata1) *(.rodata.str1.4) *(.rodata.cst4) *(.rodata.cst8) *(.fini) . = ALIGN(0x40); } > S2_RAM _etext = ( LOADADDR(.text) + SIZEOF(.text) ); etext = ( LOADADDR(.text) + SIZEOF(.text) ); .data : AT (_etext) { _fdata = .; *(data) SORT(CONSTRUCTORS) . = ALIGN(0x40); } > RAM _edata = .; _fbss = .; _stage2_start = LOADADDR(.text); _stage2_size = ( LOADADDR(.data) + SIZEOF(.data) - LOADADDR(.text)); _bootloader_size = LOADADDR(.data) + SIZEOF(.data) - LOADADDR(.stage1); _ram_image_start = flash_start + 0x030000; _ram_image2_start = flash_start + 0x400000; .sbss (NOLOAD) : { *(.sbss) *(.scommon) } .bss (NOLOAD) : { _bss_start = .; *(.bss) *(COMMON) . = ALIGN(4); } > RAM . = ALIGN(4); _end = .; PROVIDE(_end = .); end = .; PROVIDE(end = .); }