mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
With commit0535e46d55("scripts/dtc: Update to upstream version v1.7.2-35-g52f07dcca47c") it is now a fatal error to U-Boot if our device tree is not 8-byte aligned. In commit85f586035d("ARM: OMAP2+: Pad SPL binary to 8-byte alignment before DTB") Beleswar Padhi explains that we must have ALIGN(x) statements inside of a section to ensure that padding is included and not simply that the linker address counter is incremented. To that end, this patch: - Remove part of what Marek Vasut did in commit9ed99e2eea("m68k: Assure end of U-Boot is at 8-byte aligned offset") as we now better understand what can trigger failure and check for it. - Rewrite the '.dynsym' section to follow modern practices, and include the 8-byte alignment at the end of the section. - Ensure that we do have alignment by adding an ASSERT so that when not aligned we fail to link (and explain why). Signed-off-by: Tom Rini <trini@konsulko.com>
110 lines
1.6 KiB
Plaintext
110 lines
1.6 KiB
Plaintext
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* (C) Copyright 2000
|
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
* (C) Copyright 2015
|
|
* Angelo Dureghello, Sysam Firmware, angelo@sysam.it
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
OUTPUT_ARCH(m68k)
|
|
ENTRY(_start)
|
|
|
|
#ifndef LDS_BOARD_TEXT
|
|
#define LDS_BOARD_TEXT
|
|
#endif
|
|
|
|
SECTIONS
|
|
{
|
|
.text :
|
|
{
|
|
CPUDIR/start.o (.text*)
|
|
LDS_BOARD_TEXT
|
|
|
|
*(.text*)
|
|
}
|
|
_etext = .;
|
|
PROVIDE (etext = .);
|
|
.rodata :
|
|
{
|
|
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
|
|
}
|
|
|
|
/* Read-write section, merged into data segment: */
|
|
. = (. + 0x00FF) & 0xFFFFFF00;
|
|
_erotext = .;
|
|
PROVIDE (erotext = .);
|
|
|
|
.reloc :
|
|
{
|
|
__got_start = .;
|
|
KEEP(*(.got))
|
|
__got_end = .;
|
|
_GOT2_TABLE_ = .;
|
|
KEEP(*(.got2))
|
|
_FIXUP_TABLE_ = .;
|
|
KEEP(*(.fixup))
|
|
}
|
|
__got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
|
|
__fixup_entries = (. - _FIXUP_TABLE_)>>2;
|
|
|
|
.data :
|
|
{
|
|
*(.data*)
|
|
*(.sdata*)
|
|
}
|
|
_edata = .;
|
|
PROVIDE (edata = .);
|
|
|
|
. = .;
|
|
|
|
. = ALIGN(4);
|
|
__u_boot_list : {
|
|
KEEP(*(SORT(__u_boot_list*)));
|
|
}
|
|
|
|
. = .;
|
|
__start___ex_table = .;
|
|
__ex_table : { *(__ex_table) }
|
|
__stop___ex_table = .;
|
|
|
|
. = ALIGN(4);
|
|
__init_begin = .;
|
|
.text.init : { *(.text.init) }
|
|
.data.init : { *(.data.init) }
|
|
. = ALIGN(4);
|
|
__init_end = .;
|
|
|
|
. = ALIGN(4);
|
|
__rel_dyn_start = .;
|
|
.rela.dyn : {
|
|
*(.rela.dyn)
|
|
}
|
|
__rel_dyn_end = .;
|
|
|
|
.dynsym ALIGN(4) : {
|
|
__dyn_sym_start = .;
|
|
*(.dynsym)
|
|
__dyn_sym_end = .;
|
|
. = ALIGN(8);
|
|
}
|
|
|
|
_end = .;
|
|
|
|
__bss_start = .;
|
|
.bss (NOLOAD) :
|
|
{
|
|
_sbss = .;
|
|
*(.bss*)
|
|
*(.sbss*)
|
|
*(COMMON)
|
|
. = ALIGN(4);
|
|
_ebss = .;
|
|
}
|
|
__bss_end = . ;
|
|
PROVIDE (end = .);
|
|
}
|
|
|
|
ASSERT(_end % 8 == 0, "_end must be 8-byte aligned for device tree");
|