1cb5dbca8SGabor Juhos/* 2cb5dbca8SGabor Juhos * (C) Copyright 2003 3cb5dbca8SGabor Juhos * Wolfgang Denk Engineering, <wd@denx.de> 4cb5dbca8SGabor Juhos * 5*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 6cb5dbca8SGabor Juhos */ 7cb5dbca8SGabor Juhos 8cb5dbca8SGabor Juhos#if defined(CONFIG_64BIT) 9cb5dbca8SGabor Juhos#define PTR_COUNT_SHIFT 3 10cb5dbca8SGabor Juhos#else 11cb5dbca8SGabor Juhos#define PTR_COUNT_SHIFT 2 12cb5dbca8SGabor Juhos#endif 13cb5dbca8SGabor Juhos 14cb5dbca8SGabor JuhosOUTPUT_ARCH(mips) 15cb5dbca8SGabor JuhosENTRY(_start) 16cb5dbca8SGabor JuhosSECTIONS 17cb5dbca8SGabor Juhos{ 18cb5dbca8SGabor Juhos . = 0x00000000; 19cb5dbca8SGabor Juhos 20cb5dbca8SGabor Juhos . = ALIGN(4); 21cb5dbca8SGabor Juhos .text : { 22cb5dbca8SGabor Juhos *(.text*) 23cb5dbca8SGabor Juhos } 24cb5dbca8SGabor Juhos 25cb5dbca8SGabor Juhos . = ALIGN(4); 26cb5dbca8SGabor Juhos .rodata : { 27cb5dbca8SGabor Juhos *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) 28cb5dbca8SGabor Juhos } 29cb5dbca8SGabor Juhos 30cb5dbca8SGabor Juhos . = ALIGN(4); 31cb5dbca8SGabor Juhos .data : { 32cb5dbca8SGabor Juhos *(.data*) 33cb5dbca8SGabor Juhos } 34cb5dbca8SGabor Juhos 35cb5dbca8SGabor Juhos . = .; 36cb5dbca8SGabor Juhos _gp = ALIGN(16) + 0x7ff0; 37cb5dbca8SGabor Juhos 38cb5dbca8SGabor Juhos .got : { 39cb5dbca8SGabor Juhos *(.got) 40cb5dbca8SGabor Juhos } 41cb5dbca8SGabor Juhos 4245397816SGabor Juhos num_got_entries = SIZEOF(.got) >> PTR_COUNT_SHIFT; 4345397816SGabor Juhos 44cb5dbca8SGabor Juhos . = ALIGN(4); 45cb5dbca8SGabor Juhos .sdata : { 46cb5dbca8SGabor Juhos *(.sdata*) 47cb5dbca8SGabor Juhos } 48cb5dbca8SGabor Juhos 49cb5dbca8SGabor Juhos . = ALIGN(4); 50cb5dbca8SGabor Juhos .u_boot_list : { 51ef123c52SAlbert ARIBAUD KEEP(*(SORT(.u_boot_list*))); 52cb5dbca8SGabor Juhos } 53cb5dbca8SGabor Juhos 54cb5dbca8SGabor Juhos . = ALIGN(4); 553420bf1cSDaniel Schwierzeck __image_copy_end = .; 563420bf1cSDaniel Schwierzeck 570ba8926eSGabor Juhos .rel.dyn : { 580ba8926eSGabor Juhos __rel_dyn_start = .; 590ba8926eSGabor Juhos *(.rel.dyn) 600ba8926eSGabor Juhos __rel_dyn_end = .; 610ba8926eSGabor Juhos } 620ba8926eSGabor Juhos 630ba8926eSGabor Juhos .deadcode : { 640ba8926eSGabor Juhos /* 650ba8926eSGabor Juhos * Workaround for a binutils feature (or bug?). 660ba8926eSGabor Juhos * 670ba8926eSGabor Juhos * The GNU ld from binutils puts the dynamic relocation 680ba8926eSGabor Juhos * entries into the .rel.dyn section. Sometimes it 690ba8926eSGabor Juhos * allocates more dynamic relocation entries than it needs 700ba8926eSGabor Juhos * and the unused slots are set to R_MIPS_NONE entries. 710ba8926eSGabor Juhos * 720ba8926eSGabor Juhos * However the size of the .rel.dyn section in the ELF 730ba8926eSGabor Juhos * section header does not cover the unused entries, so 740ba8926eSGabor Juhos * objcopy removes those during stripping. 750ba8926eSGabor Juhos * 760ba8926eSGabor Juhos * Create a small section here to avoid that. 770ba8926eSGabor Juhos */ 780ba8926eSGabor Juhos LONG(0xffffffff); 790ba8926eSGabor Juhos } 800ba8926eSGabor Juhos 810ba8926eSGabor Juhos .dynsym : { 820ba8926eSGabor Juhos *(.dynsym) 830ba8926eSGabor Juhos } 840ba8926eSGabor Juhos 850ba8926eSGabor Juhos .bss __rel_dyn_start (OVERLAY) : { 86a52852c5SDaniel Schwierzeck __bss_start = .; 87a52852c5SDaniel Schwierzeck *(.sbss.*) 88a52852c5SDaniel Schwierzeck *(.bss.*) 89a52852c5SDaniel Schwierzeck *(COMMON) 90a52852c5SDaniel Schwierzeck . = ALIGN(4); 91a52852c5SDaniel Schwierzeck __bss_end = .; 92cb5dbca8SGabor Juhos } 930ba8926eSGabor Juhos 940ba8926eSGabor Juhos /DISCARD/ : { 950ba8926eSGabor Juhos *(.dynbss) 960ba8926eSGabor Juhos *(.dynstr) 970ba8926eSGabor Juhos *(.dynamic) 980ba8926eSGabor Juhos *(.interp) 990ba8926eSGabor Juhos *(.hash) 1000ba8926eSGabor Juhos *(.gnu.*) 1010ba8926eSGabor Juhos *(.plt) 1020ba8926eSGabor Juhos *(.got.plt) 1030ba8926eSGabor Juhos *(.rel.plt) 1040ba8926eSGabor Juhos } 105cb5dbca8SGabor Juhos} 106