From: Albert ARIBAUD <albert.u.boot@aribaud.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/4] arm64: Add tool to statically apply RELA relocations
Date: Tue, 8 Oct 2013 10:10:02 +0200 [thread overview]
Message-ID: <20131008101002.2dc8ee33@lilith> (raw)
In-Reply-To: <1381193746.7979.186.camel@snotra.buserror.net>
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.
next prev parent reply other threads:[~2013-10-08 8:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
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=20131008101002.2dc8ee33@lilith \
--to=albert.u.boot@aribaud.net \
--cc=u-boot@lists.denx.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.