[PATCH RFC v2] Add support for non-contiguous memory regions
Christophe Lyon
christophe.lyon@linaro.org
Mon Jan 13 16:24:00 GMT 2020
On Mon, 13 Jan 2020 at 15:37, Simon Richter <Simon.Richter@hogyros.de> wrote:
>
> Hi,
>
> sorry, overlooked the original email.
>
> > > > Wait, this option means that if an input section is listed multiple times,
> > > > it isn't duplicated like it used to be?
>
> > > > That might be a problem for people who are building overlays for banked
> > > > memory, or to conserve RAM.
>
> > > I haven't checked that. Is there an existing testcase?
>
> > I should probably have phrased that differently: I ran the testsuite
> > for arm and powerpc, no regression.
> > Do you have a case in mind that is not covered by the existing testsuite?
>
> Did you run the testsuite with --enable-non-contiguous-regions? If so, that
Yes, but after I sent my previous email.... and it shows a few
regressions, which I'm looking at.
However the *overlay* tests under ld-elf still work.
> looks like a gap in test coverage to me, e.g. I'd fully expect to be able
> to do something like
>
> trampoline.S:
>
> .section .text.trampoline
> stmdb sp, {r10}
> ldr r10, =BANK_SWITCH
> str r11, [r10]
> ldmia sp, {r10}
> nop
> nop
> nop
> nop
> nop
> b r11
>
> and then reuse that section on every bank:
>
> SECTIONS {
> .bank0 0x0 : {
> *(.text.trampoline)
> *(.text.bank0)
> } >BANK0
> .bank1 0x10000 : {
> *(.text.trampoline)
> *(.text.bank1)
> } >BANK1
> }
>
> in order to generate binary images that contain the repeated parts for all
> memory banks.
>
> The official method
>
> SECTIONS {
> .text.trampoline : {
> *(.text.trampoline)
> }
> OVERLAY : {
> .bank0 : {
> *(.text.bank0)
> }
> .bank1 : {
> *(.text.bank1)
> }
> }
> }
>
> is a lot less useful for generating images ready for programming, because
> it assumes that we are building a single image that a loader will pull into
> RAM piecewise.
>
> I'm certain there are other use cases for repeated sections as well, bank
> switching is more of a thing on smaller CPUs like the 8051, which have
> interrupt trampolines on every bank because the interrupt handling logic
> does not know about the memory map[1].
>
> As usual, I'm only looking for possible problems here, with an emphasis on
> "possible" -- whether these are relevant from a project management POV is
> up to the actual project maintainers.
>
> As a user, it'd be awesome to be able to use the combination of
> non-contiguous regions, banking with a trampoline and linker relaxations to
> automatically distribute code over multiple banks and generate the most
> efficient jump instructions between them, but that would be a rather
> monumental task.
>
> Simon
>
> [1] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka8894.html
More information about the Binutils
mailing list