mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
There will clear the BSS in the function clear_bss(), the reset address of the BSS started from the __bss_start, and increased by four-byte increments, finally stoped depending on the address is equal to the _bss_end. If the end address __bss_end is not alignment to 4byte, it will be an infinite loop. 1. The reset action stoped depending on the reset address is greater than or equal the end address of the BSS. 2. The end address of the BSS should be 4byte aligned. Because the reset unit is 4 Bytes. This patch is on top of the patch "powerpc/mpc85xx: support application without resetvec segment in the linker script". Signed-off-by: Ying Zhang <b40530@freescale.com> Signed-off-by: Andy Fleming <afleming@freescale.com>
103 lines
2.3 KiB
Text
103 lines
2.3 KiB
Text
/*
|
|
* (C) Copyright 2006
|
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de
|
|
*
|
|
* Copyright 2009 Freescale Semiconductor, Inc.
|
|
*
|
|
* See file CREDITS for list of people who contributed to this
|
|
* project.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*/
|
|
|
|
#include "config.h" /* CONFIG_BOARDDIR */
|
|
|
|
OUTPUT_ARCH(powerpc)
|
|
#ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC
|
|
PHDRS
|
|
{
|
|
text PT_LOAD;
|
|
bss PT_LOAD;
|
|
}
|
|
#endif
|
|
SECTIONS
|
|
{
|
|
. = CONFIG_SPL_TEXT_BASE;
|
|
.text : {
|
|
*(.text*)
|
|
}
|
|
_etext = .;
|
|
|
|
.reloc : {
|
|
_GOT2_TABLE_ = .;
|
|
KEEP(*(.got2))
|
|
KEEP(*(.got))
|
|
PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
|
|
_FIXUP_TABLE_ = .;
|
|
KEEP(*(.fixup))
|
|
}
|
|
__got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
|
|
__fixup_entries = (. - _FIXUP_TABLE_) >> 2;
|
|
|
|
. = ALIGN(8);
|
|
.data : {
|
|
*(.rodata*)
|
|
*(.data*)
|
|
*(.sdata*)
|
|
}
|
|
_edata = .;
|
|
|
|
. = ALIGN(8);
|
|
__init_begin = .;
|
|
__init_end = .;
|
|
/* FIXME for non-NAND SPL */
|
|
#if defined(CONFIG_FSL_IFC) /* Restrict bootpg at 4K boundry for IFC */
|
|
.bootpg ADDR(.text) + 0x1000 :
|
|
{
|
|
arch/powerpc/cpu/mpc85xx/start.o (.bootpg)
|
|
}
|
|
#define RESET_VECTOR_OFFSET 0x1ffc /* IFC has 8K sram */
|
|
#elif defined(CONFIG_FSL_ELBC)
|
|
#define RESET_VECTOR_OFFSET 0xffc /* LBC has 4k sram */
|
|
#else
|
|
#error unknown NAND controller
|
|
#endif
|
|
#ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC
|
|
.bootpg ADDR(.text) - 0x1000 :
|
|
{
|
|
KEEP(*(.bootpg))
|
|
} :text = 0xffff
|
|
#else
|
|
.resetvec ADDR(.text) + RESET_VECTOR_OFFSET : {
|
|
KEEP(*(.resetvec))
|
|
} = 0xffff
|
|
#endif
|
|
|
|
/*
|
|
* Make sure that the bss segment isn't linked at 0x0, otherwise its
|
|
* address won't be updated during relocation fixups.
|
|
*/
|
|
. |= 0x10;
|
|
|
|
. = ALIGN(4);
|
|
__bss_start = .;
|
|
.bss : {
|
|
*(.sbss*)
|
|
*(.bss*)
|
|
}
|
|
. = ALIGN(4);
|
|
__bss_end = .;
|
|
}
|