public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/4] arm64: rela relocation
@ 2013-10-03 22:48 Scott Wood
  2013-10-03 22:48 ` [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations Scott Wood
                   ` (4 more replies)
  0 siblings, 5 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-03 22:48 UTC (permalink / raw)
  To: u-boot

This lets us remove the manual relocation stuff from the arm64 patchset
(the symbol itself is removed by this patchset, but not all the new
manual relocations added by the arm64 patchset).

I'm not terribly happy with the way relocate-rela is now, versus something
cleaner that operates on the ELF file, but it's good enough for now and
waiting longer to get rid of the manual relocations would be worse.

This patchset is based on David's arm64 patchset v13.  David, the first
two patches should be applied before your arm64 patches.  Maybe the
fourth as well (except for the removal of the arm64 ifdef you added,
which would then need to be squashed with your patch).  The third patch
should be squashed with your patches (plus you should remove the manual
relocs).

Scott Wood (4):
  arm64: Add tool to statically apply RELA relocations
  arm64: Turn u-boot.bin back into an ELF file after relocate-rela
  arm64: Non-manual relocation
  arm64: Make checkarmreloc accept arm64 relocations

 Makefile                          |  39 ++++++--
 arch/arm/config.mk                |   4 -
 arch/arm/cpu/armv8/config.mk      |   1 -
 arch/arm/cpu/armv8/u-boot.lds     |  32 +++++--
 arch/arm/include/asm/config.h     |   5 --
 arch/arm/lib/crt0_64.S            |   7 +-
 arch/arm/lib/relocate_64.S        |  41 ++++-----
 include/configs/vexpress_aemv8a.h |   3 +
 tools/Makefile                    |   6 ++
 tools/relocate-rela.c             | 185 ++++++++++++++++++++++++++++++++++++++
 10 files changed, 276 insertions(+), 47 deletions(-)
 create mode 100644 tools/relocate-rela.c

-- 
1.8.1.2

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-03 22:48 [U-Boot] [PATCH 0/4] arm64: rela relocation Scott Wood
@ 2013-10-03 22:48 ` Scott Wood
  2013-10-04 16:10   ` FengHua
                     ` (2 more replies)
  2013-10-03 22:48 ` [U-Boot] [PATCH 2/4] arm64: Turn u-boot.bin back into an ELF file after relocate-rela Scott Wood
                   ` (3 subsequent siblings)
  4 siblings, 3 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-03 22:48 UTC (permalink / raw)
  To: u-boot

ARM64 uses the newer RELA-style relocations rather than the older REL.
RELA relocations have an addend in the relocation struct, rather than
expecting the loader to read a value from the location to be updated.

While this is beneficial for ordinary program loading, it's problematic
for U-Boot because the location to be updated starts out with zero,
rather than a pre-relocation value.  Since we need to be able to run C
code before relocation, we need a tool to apply the relocations at
build time.

In theory this tool is applicable to other newer architectures (mainly
64-bit), but currently the only relocations it supports are for arm64,
and it assumes a 64-bit little-endian target.  If the latter limitation
is ever to be changed, we'll need a way to tell the tool what format
the image is in.  Eventually this may be replaced by a tool that uses
libelf or similar and operates directly on the ELF file.  I've written
some code for such an approach but libelf does not make it easy to poke
addresses by memory address (rather than by section), and I was
hesitant to write code to manually parse the program headers and do the
update outside of libelf (or to iterate over sections) -- especially
since it wouldn't get test coverage on things like binaries with
multiple PT_LOAD segments.  This should be good enough for now to let
the manual relocation stuff be removed from the arm64 patches.

Signed-off-by: Scott Wood <scottwood@freescale.com>
---
 Makefile              |  12 ++++
 tools/Makefile        |   6 ++
 tools/relocate-rela.c | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 203 insertions(+)
 create mode 100644 tools/relocate-rela.c

diff --git a/Makefile b/Makefile
index 07abef4..5024dd8 100644
--- a/Makefile
+++ b/Makefile
@@ -392,6 +392,17 @@ else
 BOARD_SIZE_CHECK =
 endif
 
+# Statically apply RELA-style relocations (currently arm64 only)
+ifneq ($(CONFIG_STATIC_RELA),)
+# $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
+DO_STATIC_RELA = \
+	start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
+	end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
+	$(obj)tools/relocate-rela $(2) $(3) $$start $$end
+else
+DO_STATIC_RELA =
+endif
+
 # Always append ALL so that arch config.mk's can add custom ones
 ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
 
@@ -431,6 +442,7 @@ $(obj)u-boot.srec:	$(obj)u-boot
 
 $(obj)u-boot.bin:	$(obj)u-boot
 		$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+		$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
 		$(BOARD_SIZE_CHECK)
 
 $(obj)u-boot.ldr:	$(obj)u-boot
diff --git a/tools/Makefile b/tools/Makefile
index c36cde2..a5eb85e 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -59,6 +59,7 @@ BIN_FILES-$(CONFIG_NETCONSOLE) += ncb$(SFX)
 BIN_FILES-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1$(SFX)
 BIN_FILES-$(CONFIG_KIRKWOOD) += kwboot$(SFX)
 BIN_FILES-y += proftool(SFX)
+BIN_FILES-$(CONFIG_STATIC_RELA) += relocate-rela$(SFX)
 
 # Source files which exist outside the tools directory
 EXT_OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += common/env_embedded.o
@@ -84,6 +85,7 @@ NOPED_OBJ_FILES-y += os_support.o
 NOPED_OBJ_FILES-y += pblimage.o
 NOPED_OBJ_FILES-y += proftool.o
 NOPED_OBJ_FILES-y += ublimage.o
+NOPED_OBJ_FILES-y += relocate-rela.o
 OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc.o
 OBJ_FILES-$(CONFIG_CMD_LOADS) += img2srec.o
 OBJ_FILES-$(CONFIG_CMD_NET) += gen_eth_addr.o
@@ -250,6 +252,10 @@ $(obj)kwboot$(SFX): $(obj)kwboot.o
 	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
 	$(HOSTSTRIP) $@
 
+$(obj)relocate-rela$(SFX): $(obj)relocate-rela.o
+	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
+	$(HOSTSTRIP) $@
+
 # Some of the tool objects need to be accessed from outside the tools directory
 $(obj)%.o: $(SRCTREE)/common/%.c
 	$(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c
new file mode 100644
index 0000000..47afe0b
--- /dev/null
+++ b/tools/relocate-rela.c
@@ -0,0 +1,185 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause
+ *
+ * 64-bit and little-endian target only until we need to support a different
+ * arch that needs this.
+ */
+
+#include <elf.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static const bool debug_en;
+
+static void debug(const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	if (debug_en)
+		vprintf(fmt, args);
+}
+
+static bool supported_rela(Elf64_Rela *rela)
+{
+	uint64_t mask = 0xffffffffULL; /* would be different on 32-bit */
+	uint32_t type = rela->r_info & mask;
+
+	switch (type) {
+#ifdef R_AARCH64_RELATIVE
+	case R_AARCH64_RELATIVE:
+		return true;
+#endif
+	default:
+		fprintf(stderr, "warning: unsupported relocation type %"
+				PRIu32 " at %" PRIx64 "\n",
+			type, rela->r_offset);
+
+		return false;
+	}
+}
+
+static inline uint64_t swap64(uint64_t val)
+{
+	return ((val >> 56) & 0x00000000000000ffULL) |
+	       ((val >> 40) & 0x000000000000ff00ULL) |
+	       ((val >> 24) & 0x0000000000ff0000ULL) |
+	       ((val >>  8) & 0x00000000ff000000ULL) |
+	       ((val <<  8) & 0x000000ff00000000ULL) |
+	       ((val << 24) & 0x0000ff0000000000ULL) |
+	       ((val << 40) & 0x00ff000000000000ULL) |
+	       ((val << 56) & 0xff00000000000000ULL);
+}
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+static inline uint64_t be64(uint64_t val)
+{
+	return swap64(val);
+}
+
+static inline uint64_t le64(uint64_t val)
+{
+	return val;
+}
+#else
+static inline uint64_t le64(uint64_t val)
+{
+	return swap64(val);
+}
+
+static inline uint64_t be64(uint64_t val)
+{
+	return val;
+}
+#endif
+
+static bool read_num(const char *str, uint64_t *num)
+{
+	char *endptr;
+	*num = strtoull(str, &endptr, 16);
+	return str[0] && !endptr[0];
+}
+
+int main(int argc, char **argv)
+{
+	FILE *f;
+	int i, num;
+	uint64_t rela_start, rela_end, text_base;
+
+	if (argc != 5) {
+		fprintf(stderr, "Statically apply ELF rela relocations\n");
+		fprintf(stderr, "Usage: %s <bin file> <text base> <rela start> <rela end>\n",
+			argv[0]);
+		fprintf(stderr, "All numbers in hex.\n");
+		return 1;
+	}
+
+	f = fopen(argv[1], "r+b");
+	if (!f) {
+		fprintf(stderr, "%s: Cannot open %s: %s\n",
+			argv[0], argv[1], strerror(errno));
+		return 2;
+	}
+
+	if (!read_num(argv[2], &text_base) ||
+	    !read_num(argv[3], &rela_start) ||
+	    !read_num(argv[4], &rela_end)) {
+		fprintf(stderr, "%s: bad number\n", argv[0]);
+		return 3;
+	}
+
+	if (rela_start > rela_end || rela_start < text_base ||
+	    (rela_end - rela_start) % 24) {
+		fprintf(stderr, "%s: bad rela bounds\n", argv[0]);
+		return 3;
+	}
+
+	rela_start -= text_base;
+	rela_end -= text_base;
+
+	num = (rela_end - rela_start) / sizeof(Elf64_Rela);
+
+	for (i = 0; i < num; i++) {
+		Elf64_Rela rela, swrela;
+		uint64_t pos = rela_start + sizeof(Elf64_Rela) * i;
+		uint64_t addr;
+
+		if (fseek(f, pos, SEEK_SET) < 0) {
+			fprintf(stderr, "%s: %s: seek to %" PRIx64
+					" failed: %s\n",
+				argv[0], argv[1], pos, strerror(errno));
+		}
+
+		if (fread(&rela, sizeof(rela), 1, f) != 1) {
+			fprintf(stderr, "%s: %s: read rela failed at %"
+					PRIx64 "\n",
+				argv[0], argv[1], pos);
+			return 4;
+		}
+
+		swrela.r_offset = le64(rela.r_offset);
+		swrela.r_info = le64(rela.r_info);
+		swrela.r_addend = le64(rela.r_addend);
+
+		if (!supported_rela(&swrela))
+			continue;
+
+		debug("Rela %" PRIx64 " %" PRIu64 " %" PRIx64 "\n",
+		      swrela.r_offset, swrela.r_info, swrela.r_addend);
+
+		if (swrela.r_offset < text_base) {
+			fprintf(stderr, "%s: %s: bad rela at %" PRIx64 "\n",
+				argv[0], argv[1], pos);
+			return 4;
+		}
+
+		addr = swrela.r_offset - text_base;
+
+		if (fseek(f, addr, SEEK_SET) < 0) {
+			fprintf(stderr, "%s: %s: seek to %"
+					PRIx64 " failed: %s\n",
+				argv[0], argv[1], addr, strerror(errno));
+		}
+
+		if (fwrite(&rela.r_addend, sizeof(rela.r_addend), 1, f) != 1) {
+			fprintf(stderr, "%s: %s: write failed@%" PRIx64 "\n",
+				argv[0], argv[1], addr);
+			return 4;
+		}
+	}
+
+	if (fclose(f) < 0) {
+		fprintf(stderr, "%s: %s: close failed: %s\n",
+			argv[0], argv[1], strerror(errno));
+		return 4;
+	}
+
+	return 0;
+}
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 2/4] arm64: Turn u-boot.bin back into an ELF file after relocate-rela
  2013-10-03 22:48 [U-Boot] [PATCH 0/4] arm64: rela relocation Scott Wood
  2013-10-03 22:48 ` [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations Scott Wood
@ 2013-10-03 22:48 ` Scott Wood
  2013-10-03 22:48 ` [U-Boot] [PATCH 3/4] arm64: Non-manual relocation Scott Wood
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-03 22:48 UTC (permalink / raw)
  To: u-boot

While performing relocations on u-boot.bin should be good enough for
booting on real hardware, some simulators insist on booting an ELF file
(and yet don't perform ELF relocations), so convert the relocated
binary back into an ELF file.  This can go away in the future if we
change relocate-rela to operate directly on the ELF file, or if and
when we stop caring about a simulator with this restriction.

Signed-off-by: Scott Wood <scottwood@freescale.com>
---
 Makefile | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/Makefile b/Makefile
index 5024dd8..1938f60 100644
--- a/Makefile
+++ b/Makefile
@@ -415,6 +415,7 @@ ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
 ifneq ($(CONFIG_SPL_TARGET),)
 ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET))
 endif
+ALL-$(CONFIG_REMAKE_ELF) += $(obj)u-boot.elf
 
 # enable combined SPL/u-boot/dtb rules for tegra
 ifneq ($(CONFIG_TEGRA),)
@@ -581,6 +582,18 @@ $(obj)u-boot-img-spl-at-end.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
 			conv=notrunc 2>/dev/null
 		cat $(obj)u-boot-pad.img $(obj)spl/u-boot-spl.bin > $@
 
+# Create a new ELF from a raw binary file.  This is useful for arm64
+# where static relocation needs to be performed on the raw binary,
+# but certain simulators only accept an ELF file (but don't do the
+# relocation).
+# FIXME refactor dts/Makefile to share target/arch detection
+$(obj)u-boot.elf: $(obj)u-boot.bin
+	@$(OBJCOPY)  -B aarch64 -I binary -O elf64-littleaarch64 \
+		$< $(obj)u-boot-elf.o
+	@$(LD) $(obj)u-boot-elf.o -o $@ \
+		--defsym=_start=$(CONFIG_SYS_TEXT_BASE) \
+		-Ttext=$(CONFIG_SYS_TEXT_BASE)
+
 ifeq ($(CONFIG_SANDBOX),y)
 GEN_UBOOT = \
 		cd $(LNDIR) && $(CC) $(SYMS) -T $(obj)u-boot.lds \
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 3/4] arm64: Non-manual relocation
  2013-10-03 22:48 [U-Boot] [PATCH 0/4] arm64: rela relocation Scott Wood
  2013-10-03 22:48 ` [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations Scott Wood
  2013-10-03 22:48 ` [U-Boot] [PATCH 2/4] arm64: Turn u-boot.bin back into an ELF file after relocate-rela Scott Wood
@ 2013-10-03 22:48 ` Scott Wood
  2013-10-04 16:13   ` FengHua
  2013-10-03 22:48 ` [U-Boot] [PATCH 4/4] arm64: Make checkarmreloc accept arm64 relocations Scott Wood
  2013-10-04 15:55 ` [U-Boot] [PATCH 0/4] arm64: rela relocation FengHua
  4 siblings, 1 reply; 21+ messages in thread
From: Scott Wood @ 2013-10-03 22:48 UTC (permalink / raw)
  To: u-boot

This turns off CONFIG_NEEDS_MANUAL_RELOC and turns on -pie.

The bss part of the linker script is changed to be more like arm32,
as the previous arm64 approach was generating bad relocations (even
readelf didn't like them).

relocate_64.S is made to look more like relocate.S, and then changed to
support RELA style relocations rather than REL.

Signed-off-by: Scott Wood <scottwood@freescale.com>
---
 arch/arm/config.mk                |  2 --
 arch/arm/cpu/armv8/config.mk      |  1 -
 arch/arm/cpu/armv8/u-boot.lds     | 32 +++++++++++++++++++++++-------
 arch/arm/include/asm/config.h     |  5 -----
 arch/arm/lib/crt0_64.S            |  7 ++-----
 arch/arm/lib/relocate_64.S        | 41 ++++++++++++++++++++-------------------
 include/configs/vexpress_aemv8a.h |  3 +++
 7 files changed, 51 insertions(+), 40 deletions(-)

diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index 95c07ad..96d2d88 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -74,9 +74,7 @@ endif
 endif
 
 # needed for relocation
-ifndef CONFIG_ARM64
 LDFLAGS_u-boot += -pie
-endif
 
 #
 # FIXME: binutils versions < 2.22 have a bug in the assembler where
diff --git a/arch/arm/cpu/armv8/config.mk b/arch/arm/cpu/armv8/config.mk
index 9f36d59..027a68c 100644
--- a/arch/arm/cpu/armv8/config.mk
+++ b/arch/arm/cpu/armv8/config.mk
@@ -13,4 +13,3 @@ PLATFORM_NO_UNALIGNED := $(PF_NO_UNALIGNED)
 PF_CPPFLAGS_ARMV8 := $(call cc-option, -march=armv8-a)
 PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARMV8)
 PLATFORM_CPPFLAGS += $(PF_NO_UNALIGNED)
-PLATFORM_CPPFLAGS += -fpic
diff --git a/arch/arm/cpu/armv8/u-boot.lds b/arch/arm/cpu/armv8/u-boot.lds
index 328d477..4c12222 100644
--- a/arch/arm/cpu/armv8/u-boot.lds
+++ b/arch/arm/cpu/armv8/u-boot.lds
@@ -41,25 +41,43 @@ SECTIONS
 	}
 
 	. = ALIGN(8);
-	.reloc : {
-		__rel_got_start = .;
-		*(.got)
-		__rel_got_end = .;
-	}
 
 	.image_copy_end :
 	{
 		*(.__image_copy_end)
 	}
 
+	. = ALIGN(8);
+
+	.rel_dyn_start :
+	{
+		*(.__rel_dyn_start)
+	}
+
+	.rela.dyn : {
+		*(.rela*)
+	}
+
+	.rel_dyn_end :
+	{
+		*(.__rel_dyn_end)
+	}
+
 	_end = .;
 
 	. = ALIGN(8);
+
+	.bss_start : {
+		KEEP(*(.__bss_start));
+	}
+
 	.bss : {
-		__bss_start = .;
 		*(.bss*)
 		 . = ALIGN(8);
-		__bss_end = .;
+	}
+
+	.bss_end : {
+		KEEP(*(.__bss_end));
 	}
 
 	/DISCARD/ : { *(.dynsym) }
diff --git a/arch/arm/include/asm/config.h b/arch/arm/include/asm/config.h
index 0ee131d..de4d01e 100644
--- a/arch/arm/include/asm/config.h
+++ b/arch/arm/include/asm/config.h
@@ -11,11 +11,6 @@
 #define CONFIG_SYS_BOOT_RAMDISK_HIGH
 
 #ifdef CONFIG_ARM64
-/*
- * Currently, GOT is used to relocate u-boot and
- * configuration CONFIG_NEEDS_MANUAL_RELOC is needed.
- */
-#define CONFIG_NEEDS_MANUAL_RELOC
 #define CONFIG_PHYS_64BIT
 #endif
 
diff --git a/arch/arm/lib/crt0_64.S b/arch/arm/lib/crt0_64.S
index ddd46eb..7756396 100644
--- a/arch/arm/lib/crt0_64.S
+++ b/arch/arm/lib/crt0_64.S
@@ -94,11 +94,8 @@ relocation_return:
 /*
  * Clear BSS section
  */
-	ldr	x9, [x18, #GD_RELOC_OFF]	/* x9 <- gd->reloc_off */
-	ldr	x0, =__bss_start
-	add	x0, x0, x9			/* x0 <- __bss_start in RAM */
-	ldr	x1, =__bss_end
-	add	x1, x1, x9			/* x1 <- __bss_end in RAM */
+	ldr	x0, =__bss_start		/* this is auto-relocated! */
+	ldr	x1, =__bss_end			/* this is auto-relocated! */
 	mov	x2, #0
 clear_loop:
 	str	x2, [x0]
diff --git a/arch/arm/lib/relocate_64.S b/arch/arm/lib/relocate_64.S
index 29c3239..7fba9e2 100644
--- a/arch/arm/lib/relocate_64.S
+++ b/arch/arm/lib/relocate_64.S
@@ -16,40 +16,41 @@
  * void relocate_code (addr_moni)
  *
  * This function relocates the monitor code.
- *
- * NOTE:
- * GOT is used and configuration CONFIG_NEEDS_MANUAL_RELOC is needed.
+ * x0 holds the destination address.
  */
 ENTRY(relocate_code)
 	/*
 	 * Copy u-boot from flash to RAM
 	 */
-	ldr	x1, =__image_copy_start	/* x1 <- copy source */
-	cmp	x1, x0
+	ldr	x1, =__image_copy_start	/* x1 <- SRC &__image_copy_start */
+	subs	x9, x0, x1		/* x9 <- relocation offset */
 	b.eq	relocate_done		/* skip relocation */
-	mov	x2, x0			/* x2 <- copy destination */
-	ldr	x3, =__image_copy_end	/* x3 <- source end address */
+	ldr	x2, =__image_copy_end	/* x2 <- SRC &__image_copy_end */
 
 copy_loop:
 	ldp	x10, x11, [x1], #16	/* copy from source address [x1] */
-	stp	x10, x11, [x2], #16	/* copy to   target address [x2] */
-	cmp	x1, x3			/* until source end address [x3] */
+	stp	x10, x11, [x0], #16	/* copy to   target address [x0] */
+	cmp	x1, x2			/* until source end address [x2] */
 	b.lo	copy_loop
 
 	/*
-	 * Fix .reloc relocations
+	 * Fix .rela.dyn relocations
 	 */
-	ldr	x9, [x18, #GD_RELOC_OFF]/* x9 <- relocation offset */
-	ldr	x1, =__rel_got_start	/* x1 <- rel got start ofs */
-	add	x1, x1, x9		/* x1 <- rel got start in RAM */
-	ldr	x2, =__rel_got_end	/* x2 <- rel got end ofs */
-	add	x2, x2, x9		/* x2 <- rel got end in RAM */
+	ldr	x2, =__rel_dyn_start	/* x2 <- SRC &__rel_dyn_start */
+	ldr	x3, =__rel_dyn_end	/* x3 <- SRC &__rel_dyn_end */
 fixloop:
-	ldr	x10, [x1]
-	add	x10, x10, x9		/* x10 <- address to be fixed up */
-	str	x10, [x1]
-	add	x1, x1, #8		/* each got entry is 8 bytes */
-	cmp	x1, x2
+	ldp	x0, x1, [x2], #16	/* (x0,x1) <- (SRC location, fixup) */
+	ldr	x4, [x2], #8		/* x4 <- addend */
+	and	x1, x1, #0xffffffff
+	cmp	x1, #1027		/* relative fixup? */
+	bne	fixnext
+
+	/* relative fix: store addend plus offset@dest location */
+	add	x0, x0, x9
+	add	x4, x4, x9
+	str	x4, [x0]
+fixnext:
+	cmp	x2, x3
 	b.lo	fixloop
 
 relocate_done:
diff --git a/include/configs/vexpress_aemv8a.h b/include/configs/vexpress_aemv8a.h
index 01c95f5..3932e00 100644
--- a/include/configs/vexpress_aemv8a.h
+++ b/include/configs/vexpress_aemv8a.h
@@ -10,6 +10,9 @@
 
 #define DEBUG
 
+#define CONFIG_REMAKE_ELF
+#define CONFIG_STATIC_RELA
+
 /*#define CONFIG_BOOTING_EL1*/
 
 /*#define CONFIG_SYS_GENERIC_BOARD*/
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 4/4] arm64: Make checkarmreloc accept arm64 relocations
  2013-10-03 22:48 [U-Boot] [PATCH 0/4] arm64: rela relocation Scott Wood
                   ` (2 preceding siblings ...)
  2013-10-03 22:48 ` [U-Boot] [PATCH 3/4] arm64: Non-manual relocation Scott Wood
@ 2013-10-03 22:48 ` Scott Wood
  2013-10-04 15:55 ` [U-Boot] [PATCH 0/4] arm64: rela relocation FengHua
  4 siblings, 0 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-03 22:48 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Scott Wood <scottwood@freescale.com>
---
 Makefile           | 14 +++++++++-----
 arch/arm/config.mk |  2 --
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/Makefile b/Makefile
index 1938f60..20d48e9 100644
--- a/Makefile
+++ b/Makefile
@@ -805,12 +805,16 @@ tools: $(VERSION_FILE) $(TIMESTAMP_FILE)
 	$(MAKE) -C $@ all
 endif	# config.mk
 
-# ARM relocations should all be R_ARM_RELATIVE.
+# ARM relocations should all be R_ARM_RELATIVE (32-bit) or
+# R_AARCH64_RELATIVE (64-bit).
 checkarmreloc: $(obj)u-boot
-	@if test "R_ARM_RELATIVE" != \
-		"`$(CROSS_COMPILE)readelf -r $< | cut -d ' ' -f 4 | grep R_ARM | sort -u`"; \
-		then echo "$< contains relocations other than \
-		R_ARM_RELATIVE"; false; fi
+	@RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
+		grep R_A | sort -u`"; \
+	if test "$$RELOC" != "R_ARM_RELATIVE" -a \
+		 "$$RELOC" != "R_AARCH64_RELATIVE"; then \
+		echo "$< contains unexpected relocations: $$RELOC"; \
+		false; \
+	fi
 
 $(VERSION_FILE):
 		@mkdir -p $(dir $(VERSION_FILE))
diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index 96d2d88..ce3903b 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -95,8 +95,6 @@ endif
 endif
 
 # check that only R_ARM_RELATIVE relocations are generated
-ifndef CONFIG_ARM64
 ifneq ($(CONFIG_SPL_BUILD),y)
 ALL-y	+= checkarmreloc
 endif
-endif
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 0/4] arm64: rela relocation
  2013-10-03 22:48 [U-Boot] [PATCH 0/4] arm64: rela relocation Scott Wood
                   ` (3 preceding siblings ...)
  2013-10-03 22:48 ` [U-Boot] [PATCH 4/4] arm64: Make checkarmreloc accept arm64 relocations Scott Wood
@ 2013-10-04 15:55 ` FengHua
  2013-10-05  7:55   ` Albert ARIBAUD
  4 siblings, 1 reply; 21+ messages in thread
From: FengHua @ 2013-10-04 15:55 UTC (permalink / raw)
  To: u-boot



> arm64: rela relocation
> 
> This lets us remove the manual relocation stuff from the arm64 patchset
> (the symbol itself is removed by this patchset, but not all the new
> manual relocations added by the arm64 patchset).
> 
> I'm not terribly happy with the way relocate-rela is now, versus something
> cleaner that operates on the ELF file, but it's good enough for now and
> waiting longer to get rid of the manual relocations would be worse.
> 
> This patchset is based on David's arm64 patchset v13.  David, the first
> two patches should be applied before your arm64 patches.  Maybe the
> fourth as well (except for the removal of the arm64 ifdef you added,
> which would then need to be squashed with your patch).  The third patch
> should be squashed with your patches (plus you should remove the manual
> relocs).
> 
> Scott Wood (4):
>   arm64: Add tool to statically apply RELA relocations
>   arm64: Turn u-boot.bin back into an ELF file after relocate-rela
>   arm64: Non-manual relocation
>   arm64: Make checkarmreloc accept arm64 relocations
> 
>  Makefile                          |  39 ++++++--
>  arch/arm/config.mk                |   4 -
>  arch/arm/cpu/armv8/config.mk      |   1 -
>  arch/arm/cpu/armv8/u-boot.lds     |  32 +++++--
>  arch/arm/include/asm/config.h     |   5 --
>  arch/arm/lib/crt0_64.S            |   7 +-
>  arch/arm/lib/relocate_64.S        |  41 ++++-----
>  include/configs/vexpress_aemv8a.h |   3 +
>  tools/Makefile                    |   6 ++
>  tools/relocate-rela.c             | 185 ++++++++++++++++++++++++++++++++++++++
>  10 files changed, 276 insertions(+), 47 deletions(-)
>  create mode 100644 tools/relocate-rela.c
> 
Great, some fixups related with relocation could be removed.
I will modify arm64 patchset according this.

David

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-03 22:48 ` [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations Scott Wood
@ 2013-10-04 16:10   ` FengHua
  2013-10-04 16:57     ` Scott Wood
  2013-10-05  7:52   ` Albert ARIBAUD
  2013-10-08 14:22   ` FengHua
  2 siblings, 1 reply; 21+ messages in thread
From: FengHua @ 2013-10-04 16:10 UTC (permalink / raw)
  To: u-boot


> ARM64 uses the newer RELA-style relocations rather than the older REL.
> RELA relocations have an addend in the relocation struct, rather than
> expecting the loader to read a value from the location to be updated.
>
> While this is beneficial for ordinary program loading, it's problematic

How it is beneficial than rel format?
Why aarch64-gcc use rela format only instead of supporting two format?
these confuse me a few months.

David,

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 3/4] arm64: Non-manual relocation
  2013-10-03 22:48 ` [U-Boot] [PATCH 3/4] arm64: Non-manual relocation Scott Wood
@ 2013-10-04 16:13   ` FengHua
  2013-10-04 16:55     ` Scott Wood
  0 siblings, 1 reply; 21+ messages in thread
From: FengHua @ 2013-10-04 16:13 UTC (permalink / raw)
  To: u-boot


> This turns off CONFIG_NEEDS_MANUAL_RELOC and turns on -pie.
> 
> The bss part of the linker script is changed to be more like arm32,
> as the previous arm64 approach was generating bad relocations (even
> readelf didn't like them).
> 
> relocate_64.S is made to look more like relocate.S, and then changed to
> support RELA style relocations rather than REL.
> 
> Signed-off-by: Scott Wood <scottwood@freescale.com>
> ---
>  arch/arm/config.mk                |  2 --
>  arch/arm/cpu/armv8/config.mk      |  1 -
>  arch/arm/cpu/armv8/u-boot.lds     | 32 +++++++++++++++++++++++-------
>  arch/arm/include/asm/config.h     |  5 -----
>  arch/arm/lib/crt0_64.S            |  7 ++-----
>  arch/arm/lib/relocate_64.S        | 41 ++++++++++++++++++++-------------------
>  include/configs/vexpress_aemv8a.h |  3 +++
>  7 files changed, 51 insertions(+), 40 deletions(-)
> 
> diff --git a/arch/arm/config.mk b/arch/arm/config.mk
> index 95c07ad..96d2d88 100644
> --- a/arch/arm/config.mk
> +++ b/arch/arm/config.mk
> @@ -74,9 +74,7 @@ endif
>  endif
>  
>  # needed for relocation
> -ifndef CONFIG_ARM64
>  LDFLAGS_u-boot += -pie
> -endif
>  
>  #
>  # FIXME: binutils versions < 2.22 have a bug in the assembler where
> diff --git a/arch/arm/cpu/armv8/config.mk b/arch/arm/cpu/armv8/config.mk
> index 9f36d59..027a68c 100644
> --- a/arch/arm/cpu/armv8/config.mk
> +++ b/arch/arm/cpu/armv8/config.mk
> @@ -13,4 +13,3 @@ PLATFORM_NO_UNALIGNED := $(PF_NO_UNALIGNED)
>  PF_CPPFLAGS_ARMV8 := $(call cc-option, -march=armv8-a)
>  PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARMV8)
>  PLATFORM_CPPFLAGS += $(PF_NO_UNALIGNED)
> -PLATFORM_CPPFLAGS += -fpic
> diff --git a/arch/arm/cpu/armv8/u-boot.lds b/arch/arm/cpu/armv8/u-boot.lds
> index 328d477..4c12222 100644
> --- a/arch/arm/cpu/armv8/u-boot.lds
> +++ b/arch/arm/cpu/armv8/u-boot.lds
> @@ -41,25 +41,43 @@ SECTIONS
>  	}
>  
>  	. = ALIGN(8);
> -	.reloc : {
> -		__rel_got_start = .;
> -		*(.got)
> -		__rel_got_end = .;
> -	}
>  
>  	.image_copy_end :
>  	{
>  		*(.__image_copy_end)
>  	}
>  
> +	. = ALIGN(8);
> +
> +	.rel_dyn_start :
> +	{
> +		*(.__rel_dyn_start)
> +	}
> +
> +	.rela.dyn : {
> +		*(.rela*)
> +	}
> +
> +	.rel_dyn_end :
> +	{
> +		*(.__rel_dyn_end)
> +	}
> +
>  	_end = .;
>  
>  	. = ALIGN(8);
> +
> +	.bss_start : {
> +		KEEP(*(.__bss_start));
> +	}
> +
>  	.bss : {
> -		__bss_start = .;
>  		*(.bss*)
>  		 . = ALIGN(8);
> -		__bss_end = .;
> +	}
> +
> +	.bss_end : {
> +		KEEP(*(.__bss_end));
>  	}
>  
>  	/DISCARD/ : { *(.dynsym) }
> diff --git a/arch/arm/include/asm/config.h b/arch/arm/include/asm/config.h
> index 0ee131d..de4d01e 100644
> --- a/arch/arm/include/asm/config.h
> +++ b/arch/arm/include/asm/config.h
> @@ -11,11 +11,6 @@
>  #define CONFIG_SYS_BOOT_RAMDISK_HIGH
>  
>  #ifdef CONFIG_ARM64
> -/*
> - * Currently, GOT is used to relocate u-boot and
> - * configuration CONFIG_NEEDS_MANUAL_RELOC is needed.
> - */
> -#define CONFIG_NEEDS_MANUAL_RELOC
>  #define CONFIG_PHYS_64BIT
>  #endif
>  
> diff --git a/arch/arm/lib/crt0_64.S b/arch/arm/lib/crt0_64.S
> index ddd46eb..7756396 100644
> --- a/arch/arm/lib/crt0_64.S
> +++ b/arch/arm/lib/crt0_64.S
> @@ -94,11 +94,8 @@ relocation_return:
>  /*
>   * Clear BSS section
>   */
> -	ldr	x9, [x18, #GD_RELOC_OFF]	/* x9 <- gd->reloc_off */
> -	ldr	x0, =__bss_start
> -	add	x0, x0, x9			/* x0 <- __bss_start in RAM */
> -	ldr	x1, =__bss_end
> -	add	x1, x1, x9			/* x1 <- __bss_end in RAM */
> +	ldr	x0, =__bss_start		/* this is auto-relocated! */
> +	ldr	x1, =__bss_end			/* this is auto-relocated! */
>  	mov	x2, #0
>  clear_loop:
>  	str	x2, [x0]
> diff --git a/arch/arm/lib/relocate_64.S b/arch/arm/lib/relocate_64.S
> index 29c3239..7fba9e2 100644
> --- a/arch/arm/lib/relocate_64.S
> +++ b/arch/arm/lib/relocate_64.S
> @@ -16,40 +16,41 @@
>   * void relocate_code (addr_moni)
>   *
>   * This function relocates the monitor code.
> - *
> - * NOTE:
> - * GOT is used and configuration CONFIG_NEEDS_MANUAL_RELOC is needed.
> + * x0 holds the destination address.
>   */
>  ENTRY(relocate_code)
>  	/*
>  	 * Copy u-boot from flash to RAM
>  	 */
> -	ldr	x1, =__image_copy_start	/* x1 <- copy source */
> -	cmp	x1, x0
> +	ldr	x1, =__image_copy_start	/* x1 <- SRC &__image_copy_start */
> +	subs	x9, x0, x1		/* x9 <- relocation offset */
>  	b.eq	relocate_done		/* skip relocation */
> -	mov	x2, x0			/* x2 <- copy destination */
> -	ldr	x3, =__image_copy_end	/* x3 <- source end address */
> +	ldr	x2, =__image_copy_end	/* x2 <- SRC &__image_copy_end */
>  
>  copy_loop:
>  	ldp	x10, x11, [x1], #16	/* copy from source address [x1] */
> -	stp	x10, x11, [x2], #16	/* copy to   target address [x2] */
> -	cmp	x1, x3			/* until source end address [x3] */
> +	stp	x10, x11, [x0], #16	/* copy to   target address [x0] */
> +	cmp	x1, x2			/* until source end address [x2] */
>  	b.lo	copy_loop
>  
>  	/*
> -	 * Fix .reloc relocations
> +	 * Fix .rela.dyn relocations
>  	 */
> -	ldr	x9, [x18, #GD_RELOC_OFF]/* x9 <- relocation offset */
> -	ldr	x1, =__rel_got_start	/* x1 <- rel got start ofs */
> -	add	x1, x1, x9		/* x1 <- rel got start in RAM */
> -	ldr	x2, =__rel_got_end	/* x2 <- rel got end ofs */
> -	add	x2, x2, x9		/* x2 <- rel got end in RAM */
> +	ldr	x2, =__rel_dyn_start	/* x2 <- SRC &__rel_dyn_start */
> +	ldr	x3, =__rel_dyn_end	/* x3 <- SRC &__rel_dyn_end */
>  fixloop:
> -	ldr	x10, [x1]
> -	add	x10, x10, x9		/* x10 <- address to be fixed up */
> -	str	x10, [x1]
> -	add	x1, x1, #8		/* each got entry is 8 bytes */
> -	cmp	x1, x2
> +	ldp	x0, x1, [x2], #16	/* (x0,x1) <- (SRC location, fixup) */
> +	ldr	x4, [x2], #8		/* x4 <- addend */
> +	and	x1, x1, #0xffffffff
> +	cmp	x1, #1027		/* relative fixup? */
> +	bne	fixnext
> +
> +	/* relative fix: store addend plus offset at dest location */
> +	add	x0, x0, x9
> +	add	x4, x4, x9
> +	str	x4, [x0]
> +fixnext:
> +	cmp	x2, x3
>  	b.lo	fixloop
>  
>  relocate_done:
> diff --git a/include/configs/vexpress_aemv8a.h b/include/configs/vexpress_aemv8a.h
> index 01c95f5..3932e00 100644
> --- a/include/configs/vexpress_aemv8a.h
> +++ b/include/configs/vexpress_aemv8a.h
> @@ -10,6 +10,9 @@
>  
>  #define DEBUG
>  
> +#define CONFIG_REMAKE_ELF
> +#define CONFIG_STATIC_RELA
> +
CONFIG_STATIC_RELA is always needed, How about remove this macro.

David,

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 3/4] arm64: Non-manual relocation
  2013-10-04 16:13   ` FengHua
@ 2013-10-04 16:55     ` Scott Wood
  0 siblings, 0 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-04 16:55 UTC (permalink / raw)
  To: u-boot

On Sat, 2013-10-05 at 00:13 +0800, FengHua wrote:
> > diff --git a/include/configs/vexpress_aemv8a.h b/include/configs/vexpress_aemv8a.h
> > index 01c95f5..3932e00 100644
> > --- a/include/configs/vexpress_aemv8a.h
> > +++ b/include/configs/vexpress_aemv8a.h
> > @@ -10,6 +10,9 @@
> >  
> >  #define DEBUG
> >  
> > +#define CONFIG_REMAKE_ELF
> > +#define CONFIG_STATIC_RELA
> > +
> CONFIG_STATIC_RELA is always needed, How about remove this macro.

It's always needed for arm64, but not for all architectures.  I don't
want to just use CONFIG_ARM64 because in theory another arch could be
added that needs it.  Eventually this should be moved out of the board
config and into a file that defines general arm64 stuff.

-Scott

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-04 16:10   ` FengHua
@ 2013-10-04 16:57     ` Scott Wood
  0 siblings, 0 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-04 16:57 UTC (permalink / raw)
  To: u-boot

On Sat, 2013-10-05 at 00:10 +0800, FengHua wrote:
> > ARM64 uses the newer RELA-style relocations rather than the older REL.
> > RELA relocations have an addend in the relocation struct, rather than
> > expecting the loader to read a value from the location to be updated.
> >
> > While this is beneficial for ordinary program loading, it's problematic
> 
> How it is beneficial than rel format?

It avoids the need to read anything other than the rela descriptor, and
thus makes relocation faster.

> Why aarch64-gcc use rela format only instead of supporting two format?
> these confuse me a few months.

It's probably specified by the ABI which type to use, and it's not worth
adding toolchain support for something different just for weird cases
like this.

-Scott

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-03 22:48 ` [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations Scott Wood
  2013-10-04 16:10   ` FengHua
@ 2013-10-05  7:52   ` Albert ARIBAUD
  2013-10-08  0:55     ` Scott Wood
  2013-10-08 14:22   ` FengHua
  2 siblings, 1 reply; 21+ messages in thread
From: Albert ARIBAUD @ 2013-10-05  7:52 UTC (permalink / raw)
  To: u-boot

Hi Scott,

On Thu, 3 Oct 2013 17:48:28 -0500, Scott Wood <scottwood@freescale.com>
wrote:

> ARM64 uses the newer RELA-style relocations rather than the older REL.
> RELA relocations have an addend in the relocation struct, rather than
> expecting the loader to read a value from the location to be updated.
>
> While this is beneficial for ordinary program loading, it's problematic
> for U-Boot because the location to be updated starts out with zero,
> rather than a pre-relocation value.  Since we need to be able to run C
> code before relocation, we need a tool to apply the relocations at
> build time.

I love it when support for a feature which offers more capabilities is
replaced with support for one which offers less. What's the point of a
relocation system that produces a binary which will *never* work if
not relocated first? What's the point of zeroing position-dependent
locations instead of putting some useful value in it, like the value
they would have if no relocation occurred? :/

I really don't understand why REL-style relocation is impossible. Is it
an EABI specification? A toolchain limitation? A toolchain design
decision (i.e., a limitation that will not be lifted)?

OTOH, I don't have an EABI doc for arm64. Could someone just
copy-paster its URL to me? Thanks in advance.

> In theory this tool is applicable to other newer architectures (mainly
> 64-bit), but currently the only relocations it supports are for arm64,
> and it assumes a 64-bit little-endian target.  If the latter limitation
> is ever to be changed, we'll need a way to tell the tool what format
> the image is in.  Eventually this may be replaced by a tool that uses
> libelf or similar and operates directly on the ELF file.  I've written
> some code for such an approach but libelf does not make it easy to poke
> addresses by memory address (rather than by section), and I was
> hesitant to write code to manually parse the program headers and do the
> update outside of libelf (or to iterate over sections) -- especially
> since it wouldn't get test coverage on things like binaries with
> multiple PT_LOAD segments.  This should be good enough for now to let
> the manual relocation stuff be removed from the arm64 patches.

Can you clarify what makes this tool beneficial as opposed to e.g.
doing an objcopy from .elf to binary? After all, if we're going to
relocate at build time from address A to B, why not directly build
for address B, objcopy the resulting ELF and be done with it?

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 0/4] arm64: rela relocation
  2013-10-04 15:55 ` [U-Boot] [PATCH 0/4] arm64: rela relocation FengHua
@ 2013-10-05  7:55   ` Albert ARIBAUD
  2013-10-07 16:43     ` Scott Wood
  2013-10-08  3:32     ` FengHua
  0 siblings, 2 replies; 21+ messages in thread
From: Albert ARIBAUD @ 2013-10-05  7:55 UTC (permalink / raw)
  To: u-boot

Hi FengHua,

On Fri, 4 Oct 2013 23:55:01 +0800 (GMT+08:00), FengHua
<fenghua@phytium.com.cn> wrote:

> 
> 
> > arm64: rela relocation
> > 
> > This lets us remove the manual relocation stuff from the arm64 patchset
> > (the symbol itself is removed by this patchset, but not all the new
> > manual relocations added by the arm64 patchset).
> > 
> > I'm not terribly happy with the way relocate-rela is now, versus something
> > cleaner that operates on the ELF file, but it's good enough for now and
> > waiting longer to get rid of the manual relocations would be worse.
> > 
> > This patchset is based on David's arm64 patchset v13.  David, the first
> > two patches should be applied before your arm64 patches.  Maybe the
> > fourth as well (except for the removal of the arm64 ifdef you added,
> > which would then need to be squashed with your patch).  The third patch
> > should be squashed with your patches (plus you should remove the manual
> > relocs).
> > 
> > Scott Wood (4):
> >   arm64: Add tool to statically apply RELA relocations
> >   arm64: Turn u-boot.bin back into an ELF file after relocate-rela
> >   arm64: Non-manual relocation
> >   arm64: Make checkarmreloc accept arm64 relocations
> > 
> >  Makefile                          |  39 ++++++--
> >  arch/arm/config.mk                |   4 -
> >  arch/arm/cpu/armv8/config.mk      |   1 -
> >  arch/arm/cpu/armv8/u-boot.lds     |  32 +++++--
> >  arch/arm/include/asm/config.h     |   5 --
> >  arch/arm/lib/crt0_64.S            |   7 +-
> >  arch/arm/lib/relocate_64.S        |  41 ++++-----
> >  include/configs/vexpress_aemv8a.h |   3 +
> >  tools/Makefile                    |   6 ++
> >  tools/relocate-rela.c             | 185 ++++++++++++++++++++++++++++++++++++++
> >  10 files changed, 276 insertions(+), 47 deletions(-)
> >  create mode 100644 tools/relocate-rela.c
> > 
> Great, some fixups related with relocation could be removed.
> I will modify arm64 patchset according this.

Stop me if I'm missing something, but doesn't Scott's patch series need
yours? And if you remove the manual relocas in yours, doesn't that make
your series unable to function properly until Scott's series is applied
too?

If I am not mistaken, then maybe Scott's and your patches should be
merged in a single series, with adequate attribution of course. 

> David

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 0/4] arm64: rela relocation
  2013-10-05  7:55   ` Albert ARIBAUD
@ 2013-10-07 16:43     ` Scott Wood
  2013-10-08  3:32     ` FengHua
  1 sibling, 0 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-07 16:43 UTC (permalink / raw)
  To: u-boot

On Sat, 2013-10-05 at 09:55 +0200, Albert ARIBAUD wrote:
> Hi FengHua,
> 
> On Fri, 4 Oct 2013 23:55:01 +0800 (GMT+08:00), FengHua
> <fenghua@phytium.com.cn> wrote:
> 
> > 
> > 
> > > arm64: rela relocation
> > > 
> > > This lets us remove the manual relocation stuff from the arm64 patchset
> > > (the symbol itself is removed by this patchset, but not all the new
> > > manual relocations added by the arm64 patchset).
> > > 
> > > I'm not terribly happy with the way relocate-rela is now, versus something
> > > cleaner that operates on the ELF file, but it's good enough for now and
> > > waiting longer to get rid of the manual relocations would be worse.
> > > 
> > > This patchset is based on David's arm64 patchset v13.  David, the first
> > > two patches should be applied before your arm64 patches.  Maybe the
> > > fourth as well (except for the removal of the arm64 ifdef you added,
> > > which would then need to be squashed with your patch).  The third patch
> > > should be squashed with your patches (plus you should remove the manual
> > > relocs).
> > > 
> > > Scott Wood (4):
> > >   arm64: Add tool to statically apply RELA relocations
> > >   arm64: Turn u-boot.bin back into an ELF file after relocate-rela
> > >   arm64: Non-manual relocation
> > >   arm64: Make checkarmreloc accept arm64 relocations
> > > 
> > >  Makefile                          |  39 ++++++--
> > >  arch/arm/config.mk                |   4 -
> > >  arch/arm/cpu/armv8/config.mk      |   1 -
> > >  arch/arm/cpu/armv8/u-boot.lds     |  32 +++++--
> > >  arch/arm/include/asm/config.h     |   5 --
> > >  arch/arm/lib/crt0_64.S            |   7 +-
> > >  arch/arm/lib/relocate_64.S        |  41 ++++-----
> > >  include/configs/vexpress_aemv8a.h |   3 +
> > >  tools/Makefile                    |   6 ++
> > >  tools/relocate-rela.c             | 185 ++++++++++++++++++++++++++++++++++++++
> > >  10 files changed, 276 insertions(+), 47 deletions(-)
> > >  create mode 100644 tools/relocate-rela.c
> > > 
> > Great, some fixups related with relocation could be removed.
> > I will modify arm64 patchset according this.
> 
> Stop me if I'm missing something, but doesn't Scott's patch series need
> yours? And if you remove the manual relocas in yours, doesn't that make
> your series unable to function properly until Scott's series is applied
> too?
> 
> If I am not mistaken, then maybe Scott's and your patches should be
> merged in a single series, with adequate attribution of course. 

What you're missing is the note above where I suggest merging the two
patchsets. :-)

-Scott

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-05  7:52   ` Albert ARIBAUD
@ 2013-10-08  0:55     ` Scott Wood
  2013-10-08  8:10       ` Albert ARIBAUD
  0 siblings, 1 reply; 21+ messages in thread
From: Scott Wood @ 2013-10-08  0:55 UTC (permalink / raw)
  To: u-boot

On Sat, 2013-10-05 at 09:52 +0200, Albert ARIBAUD wrote:
> Hi Scott,
> 
> On Thu, 3 Oct 2013 17:48:28 -0500, Scott Wood <scottwood@freescale.com>
> wrote:
> 
> > ARM64 uses the newer RELA-style relocations rather than the older REL.
> > RELA relocations have an addend in the relocation struct, rather than
> > expecting the loader to read a value from the location to be updated.
> >
> > While this is beneficial for ordinary program loading, it's problematic
> > for U-Boot because the location to be updated starts out with zero,
> > rather than a pre-relocation value.  Since we need to be able to run C
> > code before relocation, we need a tool to apply the relocations at
> > build time.
> 
> I love it when support for a feature which offers more capabilities is
> replaced with support for one which offers less. What's the point of a
> relocation system that produces a binary which will *never* work if
> not relocated first? What's the point of zeroing position-dependent
> locations instead of putting some useful value in it, like the value
> they would have if no relocation occurred? :/

Yeah, it's annoying.  It also seems to affect gdb printing global
variables before a program has started.

> I really don't understand why REL-style relocation is impossible. Is it
> an EABI specification? A toolchain limitation? A toolchain design
> decision (i.e., a limitation that will not be lifted)?

It looks like one of the latter two.  I don't know which.  I tried
looking at the linker code to see if there was an option to switch, and
had difficulty following it.  If someone else wants to engage with the
binutils people and get a REL option added, that'd be great, but I don't
have the bandwidth right now, and in any case it would be a while before
we could rely on such a solution.

> OTOH, I don't have an EABI doc for arm64. Could someone just
> copy-paster its URL to me? Thanks in advance.

I don't know of an "E"ABI for arm64, but googling "aarch64 abi" turns up
an ELF ABI document as the first result.  I tried to copy and paste the
URL but it's google-encoded crap, and it's PDF so I can't copy it from
the browser window that opens.

That document says that both REL and RELA are acceptable.

> > In theory this tool is applicable to other newer architectures (mainly
> > 64-bit), but currently the only relocations it supports are for arm64,
> > and it assumes a 64-bit little-endian target.  If the latter limitation
> > is ever to be changed, we'll need a way to tell the tool what format
> > the image is in.  Eventually this may be replaced by a tool that uses
> > libelf or similar and operates directly on the ELF file.  I've written
> > some code for such an approach but libelf does not make it easy to poke
> > addresses by memory address (rather than by section), and I was
> > hesitant to write code to manually parse the program headers and do the
> > update outside of libelf (or to iterate over sections) -- especially
> > since it wouldn't get test coverage on things like binaries with
> > multiple PT_LOAD segments.  This should be good enough for now to let
> > the manual relocation stuff be removed from the arm64 patches.
> 
> Can you clarify what makes this tool beneficial as opposed to e.g.
> doing an objcopy from .elf to binary? After all, if we're going to
> relocate at build time from address A to B, why not directly build
> for address B, objcopy the resulting ELF and be done with it?

We do use objcopy, but it doesn't apply the relocations.  It doesn't
matter what address we build for; if the relocations aren't applied, all
to-be-relocated pointers will be zero.

-Scott

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 0/4] arm64: rela relocation
  2013-10-05  7:55   ` Albert ARIBAUD
  2013-10-07 16:43     ` Scott Wood
@ 2013-10-08  3:32     ` FengHua
  2013-10-08  8:13       ` Albert ARIBAUD
  1 sibling, 1 reply; 21+ messages in thread
From: FengHua @ 2013-10-08  3:32 UTC (permalink / raw)
  To: u-boot


> Hi FengHua,
> 
> On Fri, 4 Oct 2013 23:55:01 +0800 (GMT+08:00), FengHua
> <fenghua@phytium.com.cn> wrote:
> 
> > 
> > 
> > > arm64: rela relocation
> > > 
> > > This lets us remove the manual relocation stuff from the arm64 patchset
> > > (the symbol itself is removed by this patchset, but not all the new
> > > manual relocations added by the arm64 patchset).
> > > 
> > > I'm not terribly happy with the way relocate-rela is now, versus something
> > > cleaner that operates on the ELF file, but it's good enough for now and
> > > waiting longer to get rid of the manual relocations would be worse.
> > > 
> > > This patchset is based on David's arm64 patchset v13.  David, the first
> > > two patches should be applied before your arm64 patches.  Maybe the
> > > fourth as well (except for the removal of the arm64 ifdef you added,
> > > which would then need to be squashed with your patch).  The third patch
> > > should be squashed with your patches (plus you should remove the manual
> > > relocs).
> > > 
> > > Scott Wood (4):
> > >   arm64: Add tool to statically apply RELA relocations
> > >   arm64: Turn u-boot.bin back into an ELF file after relocate-rela
> > >   arm64: Non-manual relocation
> > >   arm64: Make checkarmreloc accept arm64 relocations
> > > 
> > >  Makefile                          |  39 ++++++--
> > >  arch/arm/config.mk                |   4 -
> > >  arch/arm/cpu/armv8/config.mk      |   1 -
> > >  arch/arm/cpu/armv8/u-boot.lds     |  32 +++++--
> > >  arch/arm/include/asm/config.h     |   5 --
> > >  arch/arm/lib/crt0_64.S            |   7 +-
> > >  arch/arm/lib/relocate_64.S        |  41 ++++-----
> > >  include/configs/vexpress_aemv8a.h |   3 +
> > >  tools/Makefile                    |   6 ++
> > >  tools/relocate-rela.c             | 185 ++++++++++++++++++++++++++++++++++++++
> > >  10 files changed, 276 insertions(+), 47 deletions(-)
> > >  create mode 100644 tools/relocate-rela.c
> > > 
> > Great, some fixups related with relocation could be removed.
> > I will modify arm64 patchset according this.
> 
> Stop me if I'm missing something, but doesn't Scott's patch series need
> yours? And if you remove the manual relocas in yours, doesn't that make
> your series unable to function properly until Scott's series is applied
> too?
> 
> If I am not mistaken, then maybe Scott's and your patches should be
> merged in a single series, with adequate attribution of course. 
> 
> > David
> 
> Amicalement,
> -- 
> Albert.


Yes, these two patches should work together.
We'd better merge them to one patchset.
The point is we should make choice between CONFIG_NEED_MANUAL_RELOC
and relocation-rela tool before aarch64-gcc support rel
relocation format or maybe aarch64-gcc will never do it.
Another motivation to update arm64 patch is that it's too old
and got wrong when applied to current u-boot master.

Best Regards.

David.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-08  0:55     ` Scott Wood
@ 2013-10-08  8:10       ` Albert ARIBAUD
  2013-10-08 16:22         ` Scott Wood
  0 siblings, 1 reply; 21+ messages in thread
From: Albert ARIBAUD @ 2013-10-08  8:10 UTC (permalink / raw)
  To: u-boot

Hi Scott,

On Mon, 7 Oct 2013 19:55:46 -0500, Scott Wood <scottwood@freescale.com>
wrote:

> On Sat, 2013-10-05 at 09:52 +0200, Albert ARIBAUD wrote:
> > Hi Scott,
> > 
> > On Thu, 3 Oct 2013 17:48:28 -0500, Scott Wood <scottwood@freescale.com>
> > wrote:
> > 
> > > ARM64 uses the newer RELA-style relocations rather than the older REL.
> > > RELA relocations have an addend in the relocation struct, rather than
> > > expecting the loader to read a value from the location to be updated.
> > >
> > > While this is beneficial for ordinary program loading, it's problematic
> > > for U-Boot because the location to be updated starts out with zero,
> > > rather than a pre-relocation value.  Since we need to be able to run C
> > > code before relocation, we need a tool to apply the relocations at
> > > build time.
> > 
> > I love it when support for a feature which offers more capabilities is
> > replaced with support for one which offers less. What's the point of a
> > relocation system that produces a binary which will *never* work if
> > not relocated first? What's the point of zeroing position-dependent
> > locations instead of putting some useful value in it, like the value
> > they would have if no relocation occurred? :/
> 
> Yeah, it's annoying.  It also seems to affect gdb printing global
> variables before a program has started.
> 
> > I really don't understand why REL-style relocation is impossible. Is it
> > an EABI specification? A toolchain limitation? A toolchain design
> > decision (i.e., a limitation that will not be lifted)?
> 
> It looks like one of the latter two.  I don't know which.  I tried
> looking at the linker code to see if there was an option to switch, and
> had difficulty following it.  If someone else wants to engage with the
> binutils people and get a REL option added, that'd be great, but I don't
> have the bandwidth right now, and in any case it would be a while before
> we could rely on such a solution.
> 
> > OTOH, I don't have an EABI doc for arm64. Could someone just
> > copy-paster its URL to me? Thanks in advance.
> 
> I don't know of an "E"ABI for arm64, but googling "aarch64 abi" turns up
> an ELF ABI document as the first result.  I tried to copy and paste the
> URL but it's google-encoded crap, and it's PDF so I can't copy it from
> the browser window that opens.
> 
> That document says that both REL and RELA are acceptable.
> 
> > > In theory this tool is applicable to other newer architectures (mainly
> > > 64-bit), but currently the only relocations it supports are for arm64,
> > > and it assumes a 64-bit little-endian target.  If the latter limitation
> > > is ever to be changed, we'll need a way to tell the tool what format
> > > the image is in.  Eventually this may be replaced by a tool that uses
> > > libelf or similar and operates directly on the ELF file.  I've written
> > > some code for such an approach but libelf does not make it easy to poke
> > > addresses by memory address (rather than by section), and I was
> > > hesitant to write code to manually parse the program headers and do the
> > > update outside of libelf (or to iterate over sections) -- especially
> > > since it wouldn't get test coverage on things like binaries with
> > > multiple PT_LOAD segments.  This should be good enough for now to let
> > > the manual relocation stuff be removed from the arm64 patches.
> > 
> > Can you clarify what makes this tool beneficial as opposed to e.g.
> > doing an objcopy from .elf to binary? After all, if we're going to
> > relocate at build time from address A to B, why not directly build
> > for address B, objcopy the resulting ELF and be done with it?
> 
> We do use objcopy, but it doesn't apply the relocations.  It doesn't
> matter what address we build for; if the relocations aren't applied, all
> to-be-relocated pointers will be zero.

Thanks Scott fot the heads-up. I have found the arm64 ABI and traced it
back to this URL:

<http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0056b/index.html>

(Somehow the document can be read in Firefox but evince chokes on it)

I see that some relocation types are deemed mandatory (4.6.1, page 13)
and the way I read it, R_AARCH64_RELATIVE should be one of them...

I'll have a stab at investigating both binutil and gcc.

Meanwhile, even if we end up being able to use R_AARCH64_RELATIVE, part
of the patch series will remain useful, notably the filtering in the
makefile. I would just like a note added somewhere stating that this is
hopefully an interim solution until R_AARCH64_RELATIVE is available.
 
> -Scott

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 0/4] arm64: rela relocation
  2013-10-08  3:32     ` FengHua
@ 2013-10-08  8:13       ` Albert ARIBAUD
  0 siblings, 0 replies; 21+ messages in thread
From: Albert ARIBAUD @ 2013-10-08  8:13 UTC (permalink / raw)
  To: u-boot

Hi FengHua,

On Tue, 8 Oct 2013 11:32:39 +0800 (GMT+08:00), FengHua
<fenghua@phytium.com.cn> wrote:

> 
> > Hi FengHua,
> > 
> > On Fri, 4 Oct 2013 23:55:01 +0800 (GMT+08:00), FengHua
> > <fenghua@phytium.com.cn> wrote:
> > 
> > > 
> > > 
> > > > arm64: rela relocation
> > > > 
> > > > This lets us remove the manual relocation stuff from the arm64 patchset
> > > > (the symbol itself is removed by this patchset, but not all the new
> > > > manual relocations added by the arm64 patchset).
> > > > 
> > > > I'm not terribly happy with the way relocate-rela is now, versus something
> > > > cleaner that operates on the ELF file, but it's good enough for now and
> > > > waiting longer to get rid of the manual relocations would be worse.
> > > > 
> > > > This patchset is based on David's arm64 patchset v13.  David, the first
> > > > two patches should be applied before your arm64 patches.  Maybe the
> > > > fourth as well (except for the removal of the arm64 ifdef you added,
> > > > which would then need to be squashed with your patch).  The third patch
> > > > should be squashed with your patches (plus you should remove the manual
> > > > relocs).
> > > > 
> > > > Scott Wood (4):
> > > >   arm64: Add tool to statically apply RELA relocations
> > > >   arm64: Turn u-boot.bin back into an ELF file after relocate-rela
> > > >   arm64: Non-manual relocation
> > > >   arm64: Make checkarmreloc accept arm64 relocations
> > > > 
> > > >  Makefile                          |  39 ++++++--
> > > >  arch/arm/config.mk                |   4 -
> > > >  arch/arm/cpu/armv8/config.mk      |   1 -
> > > >  arch/arm/cpu/armv8/u-boot.lds     |  32 +++++--
> > > >  arch/arm/include/asm/config.h     |   5 --
> > > >  arch/arm/lib/crt0_64.S            |   7 +-
> > > >  arch/arm/lib/relocate_64.S        |  41 ++++-----
> > > >  include/configs/vexpress_aemv8a.h |   3 +
> > > >  tools/Makefile                    |   6 ++
> > > >  tools/relocate-rela.c             | 185 ++++++++++++++++++++++++++++++++++++++
> > > >  10 files changed, 276 insertions(+), 47 deletions(-)
> > > >  create mode 100644 tools/relocate-rela.c
> > > > 
> > > Great, some fixups related with relocation could be removed.
> > > I will modify arm64 patchset according this.
> > 
> > Stop me if I'm missing something, but doesn't Scott's patch series need
> > yours? And if you remove the manual relocas in yours, doesn't that make
> > your series unable to function properly until Scott's series is applied
> > too?
> > 
> > If I am not mistaken, then maybe Scott's and your patches should be
> > merged in a single series, with adequate attribution of course. 
> > 
> > > David
> > 
> > Amicalement,
> > -- 
> > Albert.
> 
> 
> Yes, these two patches should work together.

Yep, Scott pointed me to where my eyes would not look. Must have been a
SEP field. :)

> We'd better merge them to one patchset.
> The point is we should make choice between CONFIG_NEED_MANUAL_RELOC
> and relocation-rela tool before aarch64-gcc support rel
> relocation format or maybe aarch64-gcc will never do it.
> Another motivation to update arm64 patch is that it's too old
> and got wrong when applied to current u-boot master.

I am in favor of going for relocation-rela, if only because manual
relocations are a major pain in the long run, so I want relocation
handling to be automated.
 
> Best Regards.
> 
> David.

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-03 22:48 ` [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations Scott Wood
  2013-10-04 16:10   ` FengHua
  2013-10-05  7:52   ` Albert ARIBAUD
@ 2013-10-08 14:22   ` FengHua
  2013-10-08 15:06     ` Scott Wood
  2 siblings, 1 reply; 21+ messages in thread
From: FengHua @ 2013-10-08 14:22 UTC (permalink / raw)
  To: u-boot


> diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c
> new file mode 100644
> index 0000000..47afe0b
> --- /dev/null
> +++ b/tools/relocate-rela.c
> @@ -0,0 +1,185 @@
> +/*
> + * Copyright 2013 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause
> + *
> + * 64-bit and little-endian target only until we need to support a different
> + * arch that needs this.
> + */
> +
> +#include <elf.h>
> +#include <errno.h>
> +#include <inttypes.h>
> +#include <stdarg.h>
> +#include <stdbool.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +
> +static const bool debug_en;
> +
> +static void debug(const char *fmt, ...)
> +{
> +	va_list args;
> +
> +	va_start(args, fmt);
> +	if (debug_en)
> +		vprintf(fmt, args);
> +}
> +
> +static bool supported_rela(Elf64_Rela *rela)
> +{
> +	uint64_t mask = 0xffffffffULL; /* would be different on 32-bit */
> +	uint32_t type = rela->r_info & mask;
> +
> +	switch (type) {
> +#ifdef R_AARCH64_RELATIVE
> +	case R_AARCH64_RELATIVE:
> +		return true;
> +#endif

hi Scott,
     the R_AARCH64_RELATIVE is not deinfed in my system. Whether we should define it at somewhere?

David

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-08 14:22   ` FengHua
@ 2013-10-08 15:06     ` Scott Wood
  0 siblings, 0 replies; 21+ messages in thread
From: Scott Wood @ 2013-10-08 15:06 UTC (permalink / raw)
  To: u-boot

On Tue, 2013-10-08 at 22:22 +0800, FengHua wrote:
> > diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c
> > new file mode 100644
> > index 0000000..47afe0b
> > --- /dev/null
> > +++ b/tools/relocate-rela.c
> > @@ -0,0 +1,185 @@
> > +/*
> > + * Copyright 2013 Freescale Semiconductor, Inc.
> > + *
> > + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause
> > + *
> > + * 64-bit and little-endian target only until we need to support a different
> > + * arch that needs this.
> > + */
> > +
> > +#include <elf.h>
> > +#include <errno.h>
> > +#include <inttypes.h>
> > +#include <stdarg.h>
> > +#include <stdbool.h>
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <string.h>
> > +
> > +static const bool debug_en;
> > +
> > +static void debug(const char *fmt, ...)
> > +{
> > +	va_list args;
> > +
> > +	va_start(args, fmt);
> > +	if (debug_en)
> > +		vprintf(fmt, args);
> > +}
> > +
> > +static bool supported_rela(Elf64_Rela *rela)
> > +{
> > +	uint64_t mask = 0xffffffffULL; /* would be different on 32-bit */
> > +	uint32_t type = rela->r_info & mask;
> > +
> > +	switch (type) {
> > +#ifdef R_AARCH64_RELATIVE
> > +	case R_AARCH64_RELATIVE:
> > +		return true;
> > +#endif
> 
> hi Scott,
>      the R_AARCH64_RELATIVE is not deinfed in my system. Whether we should define it at somewhere?

A newer host elf.h should fix this, but if it's going to be a problem
maybe we should just define it ourselves (value is 1027).

-Scott

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-08  8:10       ` Albert ARIBAUD
@ 2013-10-08 16:22         ` Scott Wood
  2013-10-09  9:04           ` Albert ARIBAUD
  0 siblings, 1 reply; 21+ messages in thread
From: Scott Wood @ 2013-10-08 16:22 UTC (permalink / raw)
  To: u-boot

On Tue, 2013-10-08 at 10:10 +0200, Albert ARIBAUD wrote:
> Thanks Scott fot the heads-up. I have found the arm64 ABI and traced it
> back to this URL:
> 
> <http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0056b/index.html>
> 
> (Somehow the document can be read in Firefox but evince chokes on it)

It works for me in evince 3.6.1.

-Scott

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
  2013-10-08 16:22         ` Scott Wood
@ 2013-10-09  9:04           ` Albert ARIBAUD
  0 siblings, 0 replies; 21+ messages in thread
From: Albert ARIBAUD @ 2013-10-09  9:04 UTC (permalink / raw)
  To: u-boot

Hi Scott,

On Tue, 8 Oct 2013 11:22:15 -0500, Scott Wood <scottwood@freescale.com>
wrote:

> On Tue, 2013-10-08 at 10:10 +0200, Albert ARIBAUD wrote:
> > Thanks Scott fot the heads-up. I have found the arm64 ABI and traced it
> > back to this URL:
> > 
> > <http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0056b/index.html>
> > 
> > (Somehow the document can be read in Firefox but evince chokes on it)
> 
> It works for me in evince 3.6.1.

Thanks. Mine is 3.10.0. Could be a regression.

> -Scott

Amicalement,
-- 
Albert.

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2013-10-09  9:04 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-03 22:48 [U-Boot] [PATCH 0/4] arm64: rela relocation Scott Wood
2013-10-03 22:48 ` [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations Scott Wood
2013-10-04 16:10   ` FengHua
2013-10-04 16:57     ` Scott Wood
2013-10-05  7:52   ` Albert ARIBAUD
2013-10-08  0:55     ` Scott Wood
2013-10-08  8:10       ` Albert ARIBAUD
2013-10-08 16:22         ` Scott Wood
2013-10-09  9:04           ` Albert ARIBAUD
2013-10-08 14:22   ` FengHua
2013-10-08 15:06     ` Scott Wood
2013-10-03 22:48 ` [U-Boot] [PATCH 2/4] arm64: Turn u-boot.bin back into an ELF file after relocate-rela Scott Wood
2013-10-03 22:48 ` [U-Boot] [PATCH 3/4] arm64: Non-manual relocation Scott Wood
2013-10-04 16:13   ` FengHua
2013-10-04 16:55     ` Scott Wood
2013-10-03 22:48 ` [U-Boot] [PATCH 4/4] arm64: Make checkarmreloc accept arm64 relocations Scott Wood
2013-10-04 15:55 ` [U-Boot] [PATCH 0/4] arm64: rela relocation FengHua
2013-10-05  7:55   ` Albert ARIBAUD
2013-10-07 16:43     ` Scott Wood
2013-10-08  3:32     ` FengHua
2013-10-08  8:13       ` Albert ARIBAUD

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox