1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * (C) Copyright 2004, Psyent Corporation <www.psyent.com> 3*4882a593Smuzhiyun * Scott McNutt <smcnutt@psyent.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun#include <config.h> 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunOUTPUT_FORMAT("elf32-littlenios2") 11*4882a593SmuzhiyunOUTPUT_ARCH(nios2) 12*4882a593SmuzhiyunENTRY(_start) 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunSECTIONS 15*4882a593Smuzhiyun{ 16*4882a593Smuzhiyun . = CONFIG_SYS_MONITOR_BASE; 17*4882a593Smuzhiyun .text : 18*4882a593Smuzhiyun { 19*4882a593Smuzhiyun arch/nios2/cpu/start.o (.text) 20*4882a593Smuzhiyun *(.text) 21*4882a593Smuzhiyun *(.text.*) 22*4882a593Smuzhiyun *(.gnu.linkonce.t*) 23*4882a593Smuzhiyun *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) 24*4882a593Smuzhiyun *(.gnu.linkonce.r*) 25*4882a593Smuzhiyun } 26*4882a593Smuzhiyun . = ALIGN (4); 27*4882a593Smuzhiyun _etext = .; 28*4882a593Smuzhiyun PROVIDE (etext = .); 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* CMD TABLE - sandwich this in between text and data so 31*4882a593Smuzhiyun * the initialization code relocates the command table as 32*4882a593Smuzhiyun * well -- admittedly, this is just pure laziness ;-) 33*4882a593Smuzhiyun */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun . = ALIGN(4); 36*4882a593Smuzhiyun .u_boot_list : { 37*4882a593Smuzhiyun KEEP(*(SORT(.u_boot_list*))); 38*4882a593Smuzhiyun } 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* INIT DATA sections - "Small" data (see the gcc -G option) 41*4882a593Smuzhiyun * is always gp-relative. Here we make all init data sections 42*4882a593Smuzhiyun * adjacent to simplify the startup code -- and provide 43*4882a593Smuzhiyun * the global pointer for gp-relative access. 44*4882a593Smuzhiyun */ 45*4882a593Smuzhiyun _data = .; 46*4882a593Smuzhiyun .data : 47*4882a593Smuzhiyun { 48*4882a593Smuzhiyun *(.data) 49*4882a593Smuzhiyun *(.data.*) 50*4882a593Smuzhiyun *(.gnu.linkonce.d*) 51*4882a593Smuzhiyun } 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* 54*4882a593Smuzhiyun * gp - Since we don't use gp for small data with option "-G0", 55*4882a593Smuzhiyun * we will use gp as global data pointer. The _gp location is 56*4882a593Smuzhiyun * not needed. 57*4882a593Smuzhiyun */ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun .sdata : 60*4882a593Smuzhiyun { 61*4882a593Smuzhiyun *(.sdata) 62*4882a593Smuzhiyun *(.sdata.*) 63*4882a593Smuzhiyun *(.gnu.linkonce.s.*) 64*4882a593Smuzhiyun } 65*4882a593Smuzhiyun . = ALIGN(4); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun _edata = .; 68*4882a593Smuzhiyun PROVIDE (edata = .); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun /* 71*4882a593Smuzhiyun * _end - This is end of u-boot.bin image. 72*4882a593Smuzhiyun * dtb will be appended here to make u-boot-dtb.bin 73*4882a593Smuzhiyun */ 74*4882a593Smuzhiyun _end = .; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* UNINIT DATA - Small uninitialized data is first so it's 77*4882a593Smuzhiyun * adjacent to sdata and can be referenced via gp. The normal 78*4882a593Smuzhiyun * bss follows. We keep it adjacent to simplify init code. 79*4882a593Smuzhiyun */ 80*4882a593Smuzhiyun __bss_start = .; 81*4882a593Smuzhiyun .sbss (NOLOAD) : 82*4882a593Smuzhiyun { 83*4882a593Smuzhiyun *(.sbss) 84*4882a593Smuzhiyun *(.sbss.*) 85*4882a593Smuzhiyun *(.gnu.linkonce.sb.*) 86*4882a593Smuzhiyun *(.scommon) 87*4882a593Smuzhiyun } 88*4882a593Smuzhiyun . = ALIGN(4); 89*4882a593Smuzhiyun .bss (NOLOAD) : 90*4882a593Smuzhiyun { 91*4882a593Smuzhiyun *(.bss) 92*4882a593Smuzhiyun *(.bss.*) 93*4882a593Smuzhiyun *(.dynbss) 94*4882a593Smuzhiyun *(COMMON) 95*4882a593Smuzhiyun *(.scommon) 96*4882a593Smuzhiyun } 97*4882a593Smuzhiyun . = ALIGN(4); 98*4882a593Smuzhiyun __bss_end = .; 99*4882a593Smuzhiyun PROVIDE (end = .); 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* DEBUG -- symbol table, string table, etc. etc. 102*4882a593Smuzhiyun */ 103*4882a593Smuzhiyun .stab 0 : { *(.stab) } 104*4882a593Smuzhiyun .stabstr 0 : { *(.stabstr) } 105*4882a593Smuzhiyun .stab.excl 0 : { *(.stab.excl) } 106*4882a593Smuzhiyun .stab.exclstr 0 : { *(.stab.exclstr) } 107*4882a593Smuzhiyun .stab.index 0 : { *(.stab.index) } 108*4882a593Smuzhiyun .stab.indexstr 0 : { *(.stab.indexstr) } 109*4882a593Smuzhiyun .comment 0 : { *(.comment) } 110*4882a593Smuzhiyun .debug 0 : { *(.debug) } 111*4882a593Smuzhiyun .line 0 : { *(.line) } 112*4882a593Smuzhiyun .debug_srcinfo 0 : { *(.debug_srcinfo) } 113*4882a593Smuzhiyun .debug_sfnames 0 : { *(.debug_sfnames) } 114*4882a593Smuzhiyun .debug_aranges 0 : { *(.debug_aranges) } 115*4882a593Smuzhiyun .debug_pubnames 0 : { *(.debug_pubnames) } 116*4882a593Smuzhiyun .debug_info 0 : { *(.debug_info) } 117*4882a593Smuzhiyun .debug_abbrev 0 : { *(.debug_abbrev) } 118*4882a593Smuzhiyun .debug_line 0 : { *(.debug_line) } 119*4882a593Smuzhiyun .debug_frame 0 : { *(.debug_frame) } 120*4882a593Smuzhiyun .debug_str 0 : { *(.debug_str) } 121*4882a593Smuzhiyun .debug_loc 0 : { *(.debug_loc) } 122*4882a593Smuzhiyun .debug_macinfo 0 : { *(.debug_macinfo) } 123*4882a593Smuzhiyun .debug_weaknames 0 : { *(.debug_weaknames) } 124*4882a593Smuzhiyun .debug_funcnames 0 : { *(.debug_funcnames) } 125*4882a593Smuzhiyun .debug_typenames 0 : { *(.debug_typenames) } 126*4882a593Smuzhiyun .debug_varnames 0 : { *(.debug_varnames) } 127*4882a593Smuzhiyun} 128