mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-11 05:42:58 +00:00
83d290c56f
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
115 lines
4.1 KiB
Text
115 lines
4.1 KiB
Text
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* (C) Copyright 2008 - 2013 Tensilica, Inc.
|
|
* (C) Copyright 2014 - 2016 Cadence Design Systems Inc.
|
|
*/
|
|
|
|
#include <config.h>
|
|
#include <asm/ldscript.h>
|
|
#include <asm/arch/core.h>
|
|
#include <asm/addrspace.h>
|
|
#include <asm-offsets.h>
|
|
|
|
OUTPUT_ARCH(xtensa)
|
|
ENTRY(_start)
|
|
|
|
/*
|
|
* U-Boot resets from SYSROM and unpacks itself from a ROM store to RAM.
|
|
* The reset vector is usually near the base of SYSROM and has room
|
|
* above it for the ROM store into which the rest of U-Boot is packed.
|
|
* The ROM store also needs to be above any other vectors that are in ROM.
|
|
* If a core has its vectors near the top of ROM, this must be edited.
|
|
*
|
|
* Note that to run C code out of ROM, the processor would have to support
|
|
* 'relocatable' exception vectors and provide a scratch memory for the
|
|
* initial stack. Not all Xtensa processor configurations support that, so
|
|
* we can simplify the boot process and unpack U-Boot to RAM immediately.
|
|
* This, however, requires that memory have been initialized throug some
|
|
* other means (serial ROM, for example) or are initialized early (requiring
|
|
* an assembler function. See start.S for more details)
|
|
*/
|
|
|
|
SECTIONS
|
|
{
|
|
. = + SIZEOF_HEADERS;
|
|
SECTION_ResetVector(XCHAL_RESET_VECTOR_VADDR, LMA_EQ_VMA)
|
|
|
|
.reloc_table ALIGN(4) : FOLLOWING(.ResetVector.text)
|
|
{
|
|
__reloc_table_start = ABSOLUTE(.);
|
|
#if XCHAL_HAVE_WINDOWED
|
|
RELOCATE2(WindowVectors,text);
|
|
#endif
|
|
RELOCATE2(KernelExceptionVector,literal);
|
|
RELOCATE2(KernelExceptionVector,text);
|
|
RELOCATE2(UserExceptionVector,literal);
|
|
RELOCATE2(UserExceptionVector,text);
|
|
RELOCATE2(DoubleExceptionVector,literal);
|
|
RELOCATE2(DoubleExceptionVector,text);
|
|
RELOCATE1(text);
|
|
RELOCATE1(rodata);
|
|
RELOCATE1(data);
|
|
RELOCATE1(u_boot_list);
|
|
__reloc_table_end = ABSOLUTE(.);
|
|
}
|
|
|
|
#if XCHAL_HAVE_WINDOWED
|
|
SECTION_VECTOR(WindowVectors,text,XCHAL_WINDOW_VECTORS_VADDR,
|
|
FOLLOWING(.reloc_table))
|
|
SECTION_VECTOR(KernelExceptionVector,literal,XCHAL_KERNEL_VECTOR_VADDR-8,
|
|
FOLLOWING(.WindowVectors.text))
|
|
#else
|
|
SECTION_VECTOR(KernelExceptionVector,literal,XCHAL_KERNEL_VECTOR_VADDR-8,
|
|
FOLLOWING(.reloc_table))
|
|
#endif
|
|
SECTION_VECTOR(KernelExceptionVector,text,XCHAL_KERNEL_VECTOR_VADDR,
|
|
FOLLOWING(.KernelExceptionVector.literal))
|
|
SECTION_VECTOR(UserExceptionVector,literal,XCHAL_USER_VECTOR_VADDR-8,
|
|
FOLLOWING(.KernelExceptionVector.text))
|
|
SECTION_VECTOR(UserExceptionVector,text,XCHAL_USER_VECTOR_VADDR,
|
|
FOLLOWING(.UserExceptionVector.literal))
|
|
SECTION_VECTOR(DoubleExceptionVector,literal,XCHAL_DOUBLEEXC_VECTOR_VADDR-8,
|
|
FOLLOWING(.UserExceptionVector.text))
|
|
SECTION_VECTOR(DoubleExceptionVector,text,XCHAL_DOUBLEEXC_VECTOR_VADDR,
|
|
FOLLOWING(.DoubleExceptionVector.literal))
|
|
|
|
__monitor_start = XTENSA_SYS_TEXT_ADDR;
|
|
|
|
SECTION_text(XTENSA_SYS_TEXT_ADDR, FOLLOWING(.DoubleExceptionVector.text))
|
|
SECTION_rodata(ALIGN(16), FOLLOWING(.text))
|
|
SECTION_u_boot_list(ALIGN(16), FOLLOWING(.rodata))
|
|
SECTION_data(ALIGN(16), FOLLOWING(.u_boot_list))
|
|
|
|
__reloc_end = .;
|
|
__init_end = .;
|
|
|
|
SECTION_bss(__init_end (OVERLAY),)
|
|
|
|
__monitor_end = .;
|
|
|
|
/*
|
|
* On many Xtensa boards a region of RAM may be mapped to the ROM address
|
|
* space to facilitate on-chip-debug, and U-Boot must fit with that region.
|
|
* The config variables CONFIG_SYS_MONITOR_* define the region.
|
|
* If U-Boot extends beyond this region it will appear discontiguous in the
|
|
* address space and is in danger of overwriting itself during unpacking
|
|
* ("relocation").
|
|
* This causes U-Boot to crash in a way that is difficult to debug. On some
|
|
* boards (such as xtav60) the region is small enough that U-Boot will not
|
|
* fit if compiled entirely with -O0 (a common scenario). To avoid a lengthy
|
|
* debugging session when this happens, ensure a link-time error occurs.
|
|
*
|
|
*/
|
|
|
|
ASSERT(__monitor_end - __monitor_start <= CONFIG_SYS_MONITOR_LEN,
|
|
"U-Boot ROM image is too large. Check optimization level.")
|
|
|
|
SECTION_xtensa
|
|
SECTION_debug
|
|
|
|
/DISCARD/ : { *(.dynstr*) }
|
|
/DISCARD/ : { *(.hash*) }
|
|
/DISCARD/ : { *(.interp) }
|
|
/DISCARD/ : { *(.got*) }
|
|
/DISCARD/ : { *(.dynsym) }
|
|
}
|