From: Graeme Russ <gruss@tss-engineering.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH] dm: Add support for all targets which requires MANUAL_RELOC
Date: Wed, 04 Feb 2015 23:08:43 +1100 [thread overview]
Message-ID: <54D20BCB.2050805@tss-engineering.com> (raw)
In-Reply-To: <20150204113407.764554dc@lilith>
Hi Albert,
>>>>
>>>>>
>>>>> If we use SPL, we do not have to relocate code, I think.
>>>>
>>>> SPL doesn't have relocation that's why this code is not used there.
>>>>
>>>
>>> It is not what I meant.
>>>
>>>
>>> If SPL can directly load the main u-boot image
>>> to the DRAM address where it is linked,
>>> we do not relocate the code in the main image.
>> Current behavior is that SPL is reading u-boot.img entry point which
>> can be in any location and jump to it and u-boot self relocate to the end of
>> memory.
>> If SPL adds u-boot directly to the location where it should run after relocation
>> then relocation is not needed.
>> To ensure this capability (based on my poor GOT/REL/RELA) experience it means
>> that SPL loads u-boot to that location and patch REL/RELA section based on this location
>> and internal relocation should be skipped.
I've always thought the logical approach would be for SPL to calculate
where U-Boot would end up in RAM, copy it from wherever (NAND, NOR, MMC,
whatever) to the final location, perform the relocation fixups, then
jump straight into U-Boot. It's pretty much what the Dynamic Loader does
(particularly with address space layout randomization)
>
> IOW, that SPL perform the work of relocate_code() in U-Boot -- at least,
> on ARM, where REL/RELA is used.
>
>> This is definitely doable for REL/RELA case and it can also speedup boot process
>
> Not sure about the speed-up, but never mind.
It will save a RAM to RAM copy of u-boot's text and data sections.
However, running the relocation code in SPL may be even slower
(depending on configuration of caches).
>> (I don't think there is easy way how to solve this with just GOT relocation because
>> of that MANUAL_RELOC code which is patching arrays with function pointers).
>
> Even without importing SPL in the equation, switching from GOT to
> REL/RELA has enourmous advantages.
I must admit, I'm really rusty with GOT vs REL/RELA - anyone care to
give me a refresher?
But yes, only having to deal with REL/RELA sections will make the
relocation procedures much simpler
Regards,
Graeme
prev parent reply other threads:[~2015-02-04 12:08 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-02 15:31 [U-Boot] [RFC PATCH] dm: Add support for all targets which requires MANUAL_RELOC Michal Simek
2015-02-02 23:57 ` Simon Glass
2015-02-03 2:02 ` Masahiro Yamada
2015-02-03 9:11 ` Michal Simek
2015-02-04 0:40 ` Simon Glass
2015-02-04 5:48 ` Graeme Russ
2015-02-04 9:58 ` Michal Simek
2015-02-05 3:07 ` Simon Glass
2015-02-05 6:31 ` Michal Simek
2015-02-06 5:45 ` Simon Glass
2015-02-09 10:27 ` Michal Simek
2015-02-09 22:14 ` Simon Glass
2015-02-10 9:55 ` Michal Simek
2015-02-12 22:18 ` Simon Glass
2015-02-04 3:11 ` Masahiro Yamada
2015-02-04 9:56 ` Michal Simek
2015-02-04 10:34 ` Albert ARIBAUD
2015-02-04 11:39 ` Michal Simek
2015-02-04 12:08 ` Graeme Russ [this message]
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=54D20BCB.2050805@tss-engineering.com \
--to=gruss@tss-engineering.com \
--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.