[PATCH] h8300-elf: ld: Use USER_LABEL_PREFIX when generating linker scripts.
Jan Dubiec
jdx@o2.pl
Sat Aug 15 07:33:08 GMT 2026
This patch is a spin-off of the following thread: https://inbox.sourceware.org/newlib/CAOox84s_SjpbEZsAx9EprDrTxB-bT0pgbavt8NXY7iiph8h6Vg@mail.gmail.com/T/#t .
Gcc sets USER_LABEL_PREFIX: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/h8300/elf.h;hb=HEAD .
Strangely, ld does not. As a result, ld exports a symbol without a leading
underscore, while gcc expects the symbol to have one. For example:
linker scirpt:
[...]
PROVIDE_HIDDEN (__preinit_array_start = .);
[...]
C source code (the compiler adds 3rd underscore):
[...]
extern void (*__preinit_array_start []) (void) __attribute__((weak));
[...]
This can lead to sneaky bugs when the symbol is declared as weak. It also
creates maintenance issues when the C code is intended to be multiplatform.
Signed-off-by: Jan Dubiec <jdx@o2.pl>
---
ld/emulparams/h8300elf.sh | 2 ++
1 file changed, 2 insertions(+)
diff --git a/ld/emulparams/h8300elf.sh b/ld/emulparams/h8300elf.sh
index 45b3458d1ce..cb85989e2db 100644
--- a/ld/emulparams/h8300elf.sh
+++ b/ld/emulparams/h8300elf.sh
@@ -9,7 +9,9 @@ MAXPAGESIZE=2
TARGET_PAGE_SIZE=128
ARCH=h8300
TEMPLATE_NAME=elf
+USER_LABEL_PREFIX=_
EMBEDDED=yes
+ENTRY=_start
STACK_ADDR=0xfefc
TINY_READONLY_SECTION=".tinyrodata :
{
--
2.55.0
More information about the Binutils
mailing list