.noinit and .persistent alignment

It's more elegant to make the section match up with its "_start"
symbol.  We could align by setting the address of the section (by
using ALIGN before the colon), but this way we also set sh_addralign
to at least $ALIGNMENT.

	* scripttempl/elf.sc (.noinit, .persistent): Align the output
	section rather than using ". = ALIGN();" at the beginning.
	Set address to zero when not a final link.
This commit is contained in:
Alan Modra
2023-07-07 14:32:00 +09:30
parent 9596ca8194
commit dbe6d432d1

View File

@@ -342,9 +342,8 @@ STACK=".stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
test "${HAVE_NOINIT}" = "yes" && NOINIT="
/* This section contains data that is not initialized during load,
or during the application's initialization sequence. */
.noinit (NOLOAD) :
.noinit ${RELOCATING-0} (NOLOAD) : ${RELOCATING+ALIGN(${ALIGNMENT})}
{
${RELOCATING+. = ALIGN(${ALIGNMENT});}
${RELOCATING+PROVIDE (__noinit_start = .);}
*(.noinit${RELOCATING+ .noinit.* .gnu.linkonce.n.*})
${RELOCATING+. = ALIGN(${ALIGNMENT});}
@@ -353,9 +352,8 @@ test "${HAVE_NOINIT}" = "yes" && NOINIT="
test "${HAVE_PERSISTENT}" = "yes" && PERSISTENT="
/* This section contains data that is initialized during load,
but not during the application's initialization sequence. */
.persistent :
.persistent ${RELOCATING-0} : ${RELOCATING+ALIGN(${ALIGNMENT})}
{
${RELOCATING+. = ALIGN(${ALIGNMENT});}
${RELOCATING+PROVIDE (__persistent_start = .);}
*(.persistent${RELOCATING+ .persistent.* .gnu.linkonce.p.*})
${RELOCATING+. = ALIGN(${ALIGNMENT});}