[PATCH v1 0/7 SECTOR: Support aligning to flash sector boundary
Michael Matz
matz@suse.de
Fri Mar 10 17:30:56 GMT 2023
Hello.
On Fri, 10 Mar 2023, Ulf Samuelsson wrote:
> > . = ALIGN(TOSECTOR)
>
> I considered it, but came to the conclusion that it opens a bag of worms.
>
> To fit this into the grammar, TOSECTOR (or maybe just SECTOR)
> needs to be a valid expression, returning the size of the flash sector
> where the location counter is.
>
> Since expressions are available everywhere, you run into situations
> where it really does not make sense for "SECTOR" to have a value.
So, make SECTOR an expression taking an address as well. Call it
SECTORSIZE and make it return the sector size for the given argument (an
address, so that 'dot' can be given in output sections), or 1 if no sector
is associated with the argument. Then your alignment expression will
become
. = ALIGN(SECTORSIZE(.))
and SECTORSIZE now _can_ make sense in other than output sections (when
you for instance give it, say, a symbolname defined elsewhere in an
utput section).
> To create an function which collapses 100+ statements into a single
> expression may stress the expression evaluator in unpredictable ways.
>
> Have the linker been tested with 100-200 lines+ expressions?
Yes. Such thoughts shouldn't prevent an orthogonal implementation of
features anyway. You can also open-code the implementation of SECTORSIZE
with a helper routine, not resorting to linkerscript expressions at all,
if you worry about performance of that.
> The alternative that I could consider is to add it in the Output Section
> Description There you can specify ALIGN_WITH_INPUT which has a similar
> syntax as ALIGN_SECTOR so alignment is specified either using an
> expression or a special keyword already today.
I think having it available as expression to be used in ALIGN (or other)
expressions is the better choice.
Ciao,
Michael.
More information about the Binutils
mailing list