mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Barebox List <barebox@lists.infradead.org>
Subject: [PATCH 2/8] ARM: aarch64: Fix get_runtime_offset after relocation
Date: Thu, 22 Aug 2019 14:51:52 +0200	[thread overview]
Message-ID: <20190822125158.10296-3-s.hauer@pengutronix.de> (raw)
In-Reply-To: <20190822125158.10296-1-s.hauer@pengutronix.de>

get_runtime_offset shall return the offset between the address we are
running at and the address we are linked at. This value obviously
changes when we relocate the binary. cf3b09737b tried to avoid using
R_AARCH64_RELATIVE relocations, but in fact this is exactly what the
function needs to work. Consider barebox starting at 0x10000000
when we are linked at 0x0 then get_runtime_offset() should return
0x10000000 before relocate_to_current_adr(), but afterwards it should
return 0x0.

This patch brings back the previously removed "a" flag. Since gcc5
doesn't put the values of R_AARCH64_RELATIVE fixup'd relocations
into the binary but zeroes instead, we help ourselves by basing
get_runtime_offset on an address which actually is zero. With
CONFIG_RELOCATABLE=y the binary is always linked to 0x0, so _text
is initially zero.

Tested with gcc-5.4.0 (which was "fixed" by cf3b09737b) and gcc-8.2.1.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/lib64/runtime-offset.S | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/arch/arm/lib64/runtime-offset.S b/arch/arm/lib64/runtime-offset.S
index 6624fdfa15..d1b8bdac3c 100644
--- a/arch/arm/lib64/runtime-offset.S
+++ b/arch/arm/lib64/runtime-offset.S
@@ -1,31 +1,19 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 
-/*
- * The .section directive below intentionally omits "a", since that
- * appears to be the simplest way to force assembler to not generate
- * R_AARCH64_RELATIVE relocation for
- *
- * linkadr:
- *	.quad get_runtime_offset
- *
- * statement below. While having that relocating was relatively
- * harmless with GCC8, builging the code with GCC5 resulted in
- * "linkaddr" being initialized to 0 causing complete boot breakdown
- */
-.section ".text_bare_init","x"
+.section ".text_bare_init","ax"
 
 /*
  * Get the offset between the link address and the address
  * we are currently running at.
  */
 ENTRY(get_runtime_offset)
-1:	adr x0, 1b
+1:	adr x0, _text
 	ldr x1, linkadr
 	subs x0, x0, x1
 	ret
 
 .align 3
 linkadr:
-.quad get_runtime_offset
+.quad _text
 ENDPROC(get_runtime_offset)
-- 
2.20.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2019-08-22 12:52 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-22 12:51 [PATCH 0/8] i.MX8 EVK patches Sascha Hauer
2019-08-22 12:51 ` [PATCH 1/8] ARM: aarch64: Fixup relocation table for the second relocation Sascha Hauer
2019-08-22 13:09   ` Rouven Czerwinski
2019-08-22 12:51 ` Sascha Hauer [this message]
2019-08-22 13:08   ` [PATCH 2/8] ARM: aarch64: Fix get_runtime_offset after relocation Rouven Czerwinski
2019-08-22 20:14   ` Andrey Smirnov
2019-08-23  8:11     ` Sascha Hauer
2019-08-22 12:51 ` [PATCH 3/8] pbl: Move piggy verification into pbl_barebox_uncompress() Sascha Hauer
2019-08-22 13:07   ` Rouven Czerwinski
2019-08-22 12:51 ` [PATCH 4/8] ARM: i.MX: imx8-ddrc: Remove debug code Sascha Hauer
2019-08-22 13:04   ` Rouven Czerwinski
2019-08-22 12:51 ` [PATCH 5/8] ARM: nxp-imx8mq-evk: Remove duplicate call to imx8mq_cpu_lowlevel_init() Sascha Hauer
2019-08-22 13:03   ` Rouven Czerwinski
2019-08-22 12:51 ` [PATCH 6/8] ARM: nxp-imx8mq-evk: Replace trampoline Sascha Hauer
2019-08-22 13:03   ` Rouven Czerwinski
2019-08-22 12:51 ` [PATCH 7/8] ARM: i.MX8: Fix piggydata loading Sascha Hauer
2019-08-22 13:02   ` Rouven Czerwinski
2019-08-22 12:51 ` [PATCH 8/8] ARM: nxp-imx8mq-evk: Update comments Sascha Hauer
2019-08-22 12:59   ` Rouven Czerwinski
2019-08-22 13:19 ` [PATCH 0/8] i.MX8 EVK patches Rouven Czerwinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190822125158.10296-3-s.hauer@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox