[U-Boot] [PATCH] zynq: Fix elf header generation

This patch is here because of: "arm: keep all sections in ELF file" (sha1: 47ed5dd031d7d2c587e6afd386e79ccec1a1b7f7)
Our tools expect to have elf with only LOAD header. Without this fix also PHDR, INTERP and DYNAMIC headers are available in ELF.
Signed-off-by: Michal Simek michal.simek@xilinx.com ---
Albert: We have discussed about patch via IRC that this is reasonable solution. I am sending it for a record and if it is fine I will add it to my zynq branch and then will send you pull request.
--- arch/arm/cpu/armv7/zynq/u-boot.lds | 103 +++++++++++++++++++++++++++++++++++++ include/configs/zynq-common.h | 3 ++ 2 files changed, 106 insertions(+) create mode 100644 arch/arm/cpu/armv7/zynq/u-boot.lds
diff --git a/arch/arm/cpu/armv7/zynq/u-boot.lds b/arch/arm/cpu/armv7/zynq/u-boot.lds new file mode 100644 index 0000000..764f04b --- /dev/null +++ b/arch/arm/cpu/armv7/zynq/u-boot.lds @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2004-2008 Texas Instruments + * + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, garyj@denx.de + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0x00000000; + + . = ALIGN(4); + .text : + { + *(.__image_copy_start) + CPUDIR/start.o (.text*) + *(.text*) + } + + . = ALIGN(4); + .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } + + . = ALIGN(4); + .data : { + *(.data*) + } + + . = ALIGN(4); + + . = .; + + . = ALIGN(4); + .u_boot_list : { + KEEP(*(SORT(.u_boot_list*))); + } + + . = ALIGN(4); + + .image_copy_end : + { + *(.__image_copy_end) + } + + .rel_dyn_start : + { + *(.__rel_dyn_start) + } + + .rel.dyn : { + *(.rel*) + } + + .rel_dyn_end : + { + *(.__rel_dyn_end) + } + + _end = .; + + /* + * Deprecated: this MMU section is used by pxa at present but + * should not be used by new boards/CPUs. + */ + . = ALIGN(4096); + .mmutable : { + *(.mmutable) + } + +/* + * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c + * __bss_base and __bss_limit are for linker only (overlay ordering) + */ + + .bss_start __rel_dyn_start (OVERLAY) : { + KEEP(*(.__bss_start)); + __bss_base = .; + } + + .bss __bss_base (OVERLAY) : { + *(.bss*) + . = ALIGN(4); + __bss_limit = .; + } + + .bss_end __bss_limit (OVERLAY) : { + KEEP(*(.__bss_end)); + } + + /DISCARD/ : { *(.dynsym) } + /DISCARD/ : { *(.dynbss*) } + /DISCARD/ : { *(.dynstr*) } + /DISCARD/ : { *(.dynamic*) } + /DISCARD/ : { *(.plt*) } + /DISCARD/ : { *(.interp*) } + /DISCARD/ : { *(.gnu*) } + /DISCARD/ : { *(.ARM.exidx*) } + /DISCARD/ : { *(.gnu.linkonce.armexidx.*) } +} diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h index dfa337f..36b9508 100644 --- a/include/configs/zynq-common.h +++ b/include/configs/zynq-common.h @@ -216,6 +216,8 @@ # define CONFIG_SYS_MMC_MAX_DEVICE 1 #endif
+#define CONFIG_SYS_LDSCRIPT "arch/arm/cpu/armv7/zynq/u-boot.lds" + /* Commands */ #include <config_cmd_default.h>
@@ -224,4 +226,5 @@ #define CONFIG_CMD_MII #define CONFIG_CMD_TFTPPUT
+ #endif /* __CONFIG_ZYNQ_COMMON_H */ -- 1.8.2.3

On Tue, Feb 04, 2014 at 04:59:45PM +0100, Michal Simek wrote:
This patch is here because of: "arm: keep all sections in ELF file" (sha1: 47ed5dd031d7d2c587e6afd386e79ccec1a1b7f7)
Our tools expect to have elf with only LOAD header. Without this fix also PHDR, INTERP and DYNAMIC headers are available in ELF.
Signed-off-by: Michal Simek michal.simek@xilinx.com
[snip]
Two things..
- /*
* Deprecated: this MMU section is used by pxa at present but
* should not be used by new boards/CPUs.
*/
- . = ALIGN(4096);
- .mmutable : {
*(.mmutable)
- }
You don't need this do you? If not, drop it..
[snip]
- /DISCARD/ : { *(.dynsym) }
- /DISCARD/ : { *(.dynbss*) }
- /DISCARD/ : { *(.dynstr*) }
- /DISCARD/ : { *(.dynamic*) }
- /DISCARD/ : { *(.plt*) }
- /DISCARD/ : { *(.interp*) }
- /DISCARD/ : { *(.gnu*) }
- /DISCARD/ : { *(.ARM.exidx*) }
- /DISCARD/ : { *(.gnu.linkonce.armexidx.*) }
Here is the difference between your linker script and the main ARM one. Please add a comment block that explains that you need to discard more sections because the user is expected to pass this image on to tools that require them to be dropped so it's clear why there is this delta between the scripts. Thanks!

On 02/04/2014 09:35 PM, Tom Rini wrote:
On Tue, Feb 04, 2014 at 04:59:45PM +0100, Michal Simek wrote:
This patch is here because of: "arm: keep all sections in ELF file" (sha1: 47ed5dd031d7d2c587e6afd386e79ccec1a1b7f7)
Our tools expect to have elf with only LOAD header. Without this fix also PHDR, INTERP and DYNAMIC headers are available in ELF.
Signed-off-by: Michal Simek michal.simek@xilinx.com
[snip]
Two things..
- /*
* Deprecated: this MMU section is used by pxa at present but
* should not be used by new boards/CPUs.
*/
- . = ALIGN(4096);
- .mmutable : {
*(.mmutable)
- }
You don't need this do you? If not, drop it..
I don't need it.
[snip]
- /DISCARD/ : { *(.dynsym) }
- /DISCARD/ : { *(.dynbss*) }
- /DISCARD/ : { *(.dynstr*) }
- /DISCARD/ : { *(.dynamic*) }
- /DISCARD/ : { *(.plt*) }
- /DISCARD/ : { *(.interp*) }
- /DISCARD/ : { *(.gnu*) }
- /DISCARD/ : { *(.ARM.exidx*) }
- /DISCARD/ : { *(.gnu.linkonce.armexidx.*) }
Here is the difference between your linker script and the main ARM one. Please add a comment block that explains that you need to discard more sections because the user is expected to pass this image on to tools that require them to be dropped so it's clear why there is this delta between the scripts. Thanks!
Fixed in v2.
Thanks, Michal

On 02/05/2014 04:00 AM, Masahiro Yamada wrote:
Hello Michal,
@@ -224,4 +226,5 @@ #define CONFIG_CMD_MII #define CONFIG_CMD_TFTPPUT
#endif /* __CONFIG_ZYNQ_COMMON_H */
1.8.2.3
Please do not double empty lines.
Sure.
Just sent v2.
Thanks, Michal
participants (4)
-
Masahiro Yamada
-
Michal Simek
-
Michal Simek
-
Tom Rini