[PATCH] H8: Add support for preinit/init/fini array

Hans-Peter Nilsson hp@axis.com
Wed Aug 12 02:53:51 GMT 2026


> From: Jan Dubiec <jdx@o2.pl>
> Date: Sun, 12 Jul 2026 21:54:53 +0200

> This patch adds support for .preinit_array, .init_array, and .fini_array
> for the H8 family when binutils and GCC are configured with "--enable-initfini-array".

To accomplish that, there should have been a fix to binutils, per
below.

Instead, this patch broke initfini support for targets with a
USER_LABEL_PREFIX, like cris-elf.  I was alerted to this commit when
people tried to use newlib master with cris-elf in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126518

> The changes to init.c and fini.c ensure that linker-defined symbols
> referenced from C code are not affected by target-specific symbol naming
> conventions. For example, GCC for H8 prefixes external symbol names with
> an underscore, whereas GCC for ARM does not. The asm keyword is used to
> associate C identifiers with the corresponding linker-defined symbol names
> in a target-independent manner.
> 
> The patch has been tested on H8 wher it enables support for the
> initialization and finalization arrays and on ARM in order to verify that
> the changes do not introduce any regressions.

Since ARM isn't a USER_LABEL_PREFIX-target, your patch was neutral
there.  While testing the patch there too makes sense, that target
wasn't in the cross-hairs; it didn't change the symbols.

The parts of this patch to the generic files, should be reverted.
Instead I suggest to correct binutils for h8300 to emit the "_" as a
prefix to those linker-generated initfini-symbols in the default
linker scripts, something like:

diff --git a/ld/emulparams/h8300elf.sh b/ld/emulparams/h8300elf.sh
index 45b3458d1cea..dd007fcd0ffc 100644
--- a/ld/emulparams/h8300elf.sh
+++ b/ld/emulparams/h8300elf.sh
@@ -9,6 +9,7 @@ MAXPAGESIZE=2
 TARGET_PAGE_SIZE=128
 ARCH=h8300
 TEMPLATE_NAME=elf
+USER_LABEL_PREFIX=_
 EMBEDDED=yes
 STACK_ADDR=0xfefc
 TINY_READONLY_SECTION=".tinyrodata :

(cf. emulparams/criself.sh and ld/scripttempl/elf.sc)

That might of course have fallout for other symbols defined in those
scripts, but would align with other targets (no special defines or
asm-renames needed).

brgds, H-P


More information about the Newlib mailing list