On 27.04.2025 4:55, Mark Millard wrote:
On Apr 26, 2025, at 11:53, Mark Millard <mark...@yahoo.com> wrote:
On Apr 26, 2025, at 07:45, Michal Meloun <m...@freebsd.org> wrote:
On 26.04.2025 9:23, Mark Millard wrote:
FreeBSD has not and does not support all the __aeabi_ prefixed
symbols to make everything work for all the lang/gcc* .
It has gotten to the point that for lang/gcc14 (so modern) that
the likes of:
__aeabi_unwind_cpp_pr0
__aeabi_unwind_cpp_pr1
__aeabi_unwind_cpp_pr2
lead to the likes of:
/usr/local/bin/ld: a.out: hidden symbol `__aeabi_unwind_cpp_pr0' in
/wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/libgcc_eh.a(unwind-arm.o)
is referenced by DSO
I am afraid that this is an incorrect and misleading analysis:
Okay. These specific symbols are apparently not analogous
to others that have been run into in the past. I assumed
too much common context.
1) FreeBSD provides (and has provided for a long time) __aeabi_unwind_cpp_pr*
symbols in /usr/lib/libgcc_eh.lib in very similar manner as gcc.
FYI: lang/gcc13 builds with STANDARD_BOOTSTRAP okay. lang/gcc14 and lang gcc15
do not.
The below explores the installed package materials, not the
bootstrap materials that failed. (I've not gotten to that
yet.)
When I look for definitions in the installed /usr/local/lib/gcc13/
I find:
# find /usr/local/lib/gcc13/ -type f -exec readelf -a {} \; -print 2>&1 | grep -e __aeabi_unwind_cpp_pr -e ^/
-e ^File: | grep -v "readelf: Not an ELF file" | grep -v " UND " | grep -v "
R_ARM_NONE" | more
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/plugin/libcc1plugin.so.0.0.0
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/plugin/libcp1plugin.so.0.0.0
File:
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/libgcc_eh.a(unwind-arm.o)
000000f8 0000291a R_ARM_GOT_BREL 00000c34 __aeabi_unwind_cpp_pr2
000000fc 00002a1a R_ARM_GOT_BREL 00000c2c __aeabi_unwind_cpp_pr1
40: 0000000000000c24 8 FUNC GLOBAL HIDDEN 1
__aeabi_unwind_cpp_pr0
41: 0000000000000c34 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr2
42: 0000000000000c2c 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr1
File:
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/libgcc_eh.a(libunwind.o)
File:
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/libgcc_eh.a(pr-support.o)
File:
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/libgcc_eh.a(unwind-c.o)
File:
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/libgcc_eh.a(emutls.o)
/usr/local/lib/gcc13/gcc/armv7-portbld-freebsd15.0/13.3.0/libgcc_eh.a
. . .
0001e6cc 00005715 R_ARM_GLOB_DAT 0001bc84 __aeabi_unwind_cpp_pr2
0001e6d0 00005115 R_ARM_GLOB_DAT 0001bc74 __aeabi_unwind_cpp_pr0
0001e6e8 00005515 R_ARM_GLOB_DAT 0001bc7c __aeabi_unwind_cpp_pr1
81: 000000000001bc74 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0@@GCC_3.5 (12)
85: 000000000001bc7c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1@@GCC_3.5 (12)
87: 000000000001bc84 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2@@GCC_3.5 (12)
3974: 000000000001bc84 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2
3984: 000000000001bc74 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0
4557: 000000000001bc7c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1
/usr/local/lib/gcc13/libgcc_s.so.1
(Note that each file path was listed after the content instead
of before.)
My work around build of lang/gcc14 ends up with:
# find /usr/local/lib/gcc14/ -type f -exec readelf -a {} \; -print 2>&1 | grep -e __aeabi_unwind_cpp_pr -e ^/
-e ^File: | grep -v "readelf: Not an ELF file" | grep -v " UND " | grep -v "
R_ARM_NONE" | more
. . .
File:
/usr/local/lib/gcc14/gcc/armv7-portbld-freebsd15.0/14.2.0/libgcc_eh.a(unwind-arm.o)
000000f8 00002f1a R_ARM_GOT_BREL 00000c30 __aeabi_unwind_cpp_pr2
000000fc 0000301a R_ARM_GOT_BREL 00000c28 __aeabi_unwind_cpp_pr1
46: 0000000000000c20 8 FUNC GLOBAL HIDDEN 1
__aeabi_unwind_cpp_pr0
47: 0000000000000c30 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr2
48: 0000000000000c28 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr1
File:
/usr/local/lib/gcc14/gcc/armv7-portbld-freebsd15.0/14.2.0/libgcc_eh.a(libunwind.o)
File:
/usr/local/lib/gcc14/gcc/armv7-portbld-freebsd15.0/14.2.0/libgcc_eh.a(pr-support.o)
File:
/usr/local/lib/gcc14/gcc/armv7-portbld-freebsd15.0/14.2.0/libgcc_eh.a(unwind-c.o)
File:
/usr/local/lib/gcc14/gcc/armv7-portbld-freebsd15.0/14.2.0/libgcc_eh.a(emutls.o)
/usr/local/lib/gcc14/gcc/armv7-portbld-freebsd15.0/14.2.0/libgcc_eh.a
. . .
0001eb90 00005715 R_ARM_GLOB_DAT 0001c12c __aeabi_unwind_cpp_pr2
0001eb94 00005115 R_ARM_GLOB_DAT 0001c11c __aeabi_unwind_cpp_pr0
0001ebac 00005515 R_ARM_GLOB_DAT 0001c124 __aeabi_unwind_cpp_pr1
81: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0@@GCC_3.5 (14)
85: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1@@GCC_3.5 (14)
87: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2@@GCC_3.5 (14)
4007: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2
4017: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0
4593: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1
/usr/local/lib/gcc14/libgcc_s.so.1
(Note that each file path was listed after the content instead
of before.)
What I see in FreeBSD's /usr/lib/libgcc* are:
# readelf -a /usr/lib/libgcc* -print 2>&1 | grep -e __aeabi_unwind_cpp_pr -e ^File: | grep -v "readelf: Not an ELF #
readelf -a /usr/lib/libgcc* 2>&1 | grep -e __aeabi_unwind_cpp_pr -e ^File: | grep -v "readelf: Not an ELF file"
| grep -v " UND " | grep -v " R_ARM_NONE" | more
. . .
File: /usr/lib/libgcc_eh.a
File: /usr/lib/libgcc_eh.a(int_util.o)
File: /usr/lib/libgcc_eh.a(gcc_personality_v0.o)
File: /usr/lib/libgcc_eh.a(Unwind-EHABI.o)
44: 00000000000009f4 12 FUNC GLOBAL DEFAULT 2
__aeabi_unwind_cpp_pr0
56: 0000000000000bc4 12 FUNC GLOBAL DEFAULT 2
__aeabi_unwind_cpp_pr1
61: 0000000000000bd0 12 FUNC GLOBAL DEFAULT 2
__aeabi_unwind_cpp_pr2
File: /usr/lib/libgcc_eh.a(Unwind-sjlj.o)
File: /usr/lib/libgcc_eh.a(UnwindLevel1-gcc-ext.o)
File: /usr/lib/libgcc_eh.a(UnwindLevel1.o)
File: /usr/lib/libgcc_eh.a(UnwindRegistersRestore.o)
File: /usr/lib/libgcc_eh.a(UnwindRegistersSave.o)
File: /usr/lib/libgcc_eh.a(libunwind.o)
000001e4 0000af60 R_ARM_GOT_PREL 00000000 __aeabi_unwind_cpp_pr1
000001e8 0000b560 R_ARM_GOT_PREL 00000000 __aeabi_unwind_cpp_pr0
000001fc 0000de60 R_ARM_GOT_PREL 00000000 __aeabi_unwind_cpp_pr2
File: /usr/lib/libgcc_s.so
00028f98 00001515 R_ARM_GLOB_DAT 0001674c __aeabi_unwind_cpp_pr2
00028f88 00005515 R_ARM_GLOB_DAT 00016570 __aeabi_unwind_cpp_pr0
00028f90 00005c15 R_ARM_GLOB_DAT 00016740 __aeabi_unwind_cpp_pr1
21: 000000000001674c 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr2@@GCC_3.5 (8)
85: 0000000000016570 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr0@@GCC_3.5 (8)
92: 0000000000016740 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr1@@GCC_3.5 (8)
256: 0000000000016570 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr0
273: 0000000000016740 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr1
326: 000000000001674c 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr2
[Note that each file path was listed before the content instead
of after. There is a "File: " prefix but no '(*.o)' suffix on
the just-file-name lines.]
I do not know if the below is of any significance or not.
Note the libgcc_eh.a (R_ARM_NONE examples filtered out)
gcc14 vs. FreeBSD has:
000000f8 00002f1a R_ARM_GOT_BREL 00000c30 __aeabi_unwind_cpp_pr2
000000fc 0000301a R_ARM_GOT_BREL 00000c28 __aeabi_unwind_cpp_pr1
vs.
000001e4 0000af60 R_ARM_GOT_PREL 00000000 __aeabi_unwind_cpp_pr1
000001e8 0000b560 R_ARM_GOT_PREL 00000000 __aeabi_unwind_cpp_pr0
000001fc 0000de60 R_ARM_GOT_PREL 00000000 __aeabi_unwind_cpp_pr2
That suggests gcc14 has R_ARM_NONE for all __aeabi_unwind_cpp_pr0
references in libgcc_eh.a .
Also, the libgcc_eh.a gcc14 vs. FreeBSD has:
46: 0000000000000c20 8 FUNC GLOBAL HIDDEN 1
__aeabi_unwind_cpp_pr0
47: 0000000000000c30 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr2
48: 0000000000000c28 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr1
vs.
44: 00000000000009f4 12 FUNC GLOBAL DEFAULT 2
__aeabi_unwind_cpp_pr0
56: 0000000000000bc4 12 FUNC GLOBAL DEFAULT 2
__aeabi_unwind_cpp_pr1
61: 0000000000000bd0 12 FUNC GLOBAL DEFAULT 2
__aeabi_unwind_cpp_pr2
And libgcc_eh.a has the Unwind-EHABI.o / libunwind.o split in FreeBSD vs.
the just unwind-arm.o in gcc14.
There is the libgcc_s.so.1 (gcc14) vs. libgcc_s.so (FreeBSD) having:
81: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0@@GCC_3.5 (14)
85: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1@@GCC_3.5 (14)
87: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2@@GCC_3.5 (14)
4007: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2
4017: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0
4593: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1
vs.
21: 000000000001674c 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr2@@GCC_3.5 (8)
85: 0000000000016570 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr0@@GCC_3.5 (8)
92: 0000000000016740 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr1@@GCC_3.5 (8)
256: 0000000000016570 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr0
273: 0000000000016740 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr1
326: 000000000001674c 12 FUNC GLOBAL DEFAULT 14
__aeabi_unwind_cpp_pr2
Again: I do not know the significance vs. lack of such.
But lang/gcc13 and lang/gcc14 seem to agree for those sorts
of things. So it seems I should ignore such gcc* vs. FreeBSD
distinctions when I later look at the bootstrap failure
materials.
2) The problem is exactly the opposite, gcc14 does not provide these symbols.
When I look in a failed build tree I see what I saw in the
installed materials, though under a build path:
. . .
File:
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(unwind-arm.o)
000000f8 00002f1a R_ARM_GOT_BREL 00000c30 __aeabi_unwind_cpp_pr2
000000fc 0000301a R_ARM_GOT_BREL 00000c28 __aeabi_unwind_cpp_pr1
46: 0000000000000c20 8 FUNC GLOBAL HIDDEN 1
__aeabi_unwind_cpp_pr0
47: 0000000000000c30 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr2
48: 0000000000000c28 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr1
File:
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(libunwind.o)
File:
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(pr-support.o)
File: /wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(unwind-c.o)
File: /wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(emutls.o)
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a
0001eb90 00005715 R_ARM_GLOB_DAT 0001c12c __aeabi_unwind_cpp_pr2
0001eb94 00005115 R_ARM_GLOB_DAT 0001c11c __aeabi_unwind_cpp_pr0
0001ebac 00005515 R_ARM_GLOB_DAT 0001c124 __aeabi_unwind_cpp_pr1
81: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0@@GCC_3.5 (14)
85: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1@@GCC_3.5 (14)
87: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2@@GCC_3.5 (14)
4007: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2
4017: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0
4593: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_s.so.1
. . .
(Related details are shown later.)
It looks like the lang/gcc13 and lang/gcc14 installed material
that I provided in a previous Email, other than path details.
>
It's hard to respond in the right place because of tons of unrelated
statements, but you overlooked that gcc14 uses the '-static-libgcc'
option for the failed test. *That's different from gcc13*, and it also
takes libgcc_s.so out of the picture because it's not used at all (in
the case of gcc14).
Just what are you proposing that lang/gcc14 should change
related to the above?
> >> For the above, I did not look at the bootstrap stage materials
yet. So I'm not making any claim about this at this point here.
In the configuration phase, configure builds executable with the bootstrap
libgcc(in this case the static libgcc.a), but with the host(FBSD) libc. The
FBSD libc uses unwinder, but the bootstrap libgcc.a does not provide it.
Just what is wrong with the above that needs to change?
>
I don't know the internals of gcc, but the problem is clear and simple.
gcc14 does not provide unwinder symbols in the case of '-static-libgcc'
and the FBSD configuration in default(implicit) libraries. I can only
assume that there is some problem with the implicit library definition
related to the FBSD configuration.
IMHO '-static-libgcc' should imply '-lgcc_eh', but again this is just
gues. Or the default linker script needs more love.
But I don't have the time and energy to address this more precisely.
Sorry,
Michal
see:
"/usr/ports/lang/gcc14/work/.build/./prev-gcc/xgcc
-B/usr/ports/lang/gcc14/work/.build/./prev-gcc/
-B/usr/local/armv7-portbld-freebsd15.0/bin/
-B/usr/local/armv7-portbld-freebsd15.0/bin/
-B/usr/local/armv7-portbld-freebsd15.0/lib/ -isystem
/usr/local/armv7-portbld-freebsd15.0/include -isystem
/usr/local/armv7-portbld-freebsd15.0/sys-include -fno-checking -g -O2
-fno-checking -gtoggle -DLIBICONV_PLUG -static-libstdc++ -static-libgcc conftest.c
The "hidden symbol `__aeabi_unwind_cpp_pr0'" error message
below looks like the symbol was found to me. The problem
looks to instead be tied to a disallowed hidden symbol
status? Is this some sort of ABI mismatch that one side
or the other needs to be made to match to avoid the
disallowed status?
configure:3479: /wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/xgcc
-B/wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/
-B/usr/local/armv7-portbld-freebsd15.0/bin/ -B/usr/local/armv7-portbl
d-freebsd15.0/bin/ -B/usr/local/armv7-portbld-freebsd15.0/lib/ -isystem
/usr/local/armv7-portbld-freebsd15.0/include -isystem
/usr/local/armv7-portbld-freebsd15.0/sys-include -fno-checking -o confte
st -g -O2 -fno-checking -gtoggle -mcpu=cortex-a7 -DLIBICONV_PLUG -static-libstdc++
-static-libgcc conftest.c >&5
/usr/local/bin/ld: warning: libunwind.o: missing .note.GNU-stack section
implies executable stack
/usr/local/bin/ld: NOTE: This behaviour is deprecated and will be removed in a
future version of the linker
/usr/local/bin/ld: conftest: hidden symbol `__aeabi_unwind_cpp_pr0' in
/wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/libgcc_eh.a(unwind-arm.o)
is referenced by DSO
/usr/local/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
For reference:
# ls -lodT /usr/local/armv7-portbld-freebsd15.0/*
drwxr-xr-x 2 root wheel - 1024 Apr 26 09:35:00 2025
/usr/local/armv7-portbld-freebsd15.0/bin
drwxr-xr-x 3 root wheel - 512 Feb 21 06:35:04 2025
/usr/local/armv7-portbld-freebsd15.0/lib
# ls -lodT /usr/local/armv7-portbld-freebsd15.0/*/*
-r-xr-xr-x 2 root wheel - 58744 Mar 13 16:01:53 2025
/usr/local/armv7-portbld-freebsd15.0/bin/ar
-r-xr-xr-x 2 root wheel - 705080 Mar 13 16:02:13 2025
/usr/local/armv7-portbld-freebsd15.0/bin/as
-r-xr-xr-x 1 root wheel - 85760 Mar 13 16:01:58 2025
/usr/local/armv7-portbld-freebsd15.0/bin/dlltool
-r-xr-xr-x 4 root wheel - 2037008 Mar 13 16:02:29 2025
/usr/local/armv7-portbld-freebsd15.0/bin/ld
-r-xr-xr-x 4 root wheel - 2037008 Mar 13 16:02:29 2025
/usr/local/armv7-portbld-freebsd15.0/bin/ld.bfd
-r-xr-xr-x 2 root wheel - 4100236 Mar 13 16:02:17 2025
/usr/local/armv7-portbld-freebsd15.0/bin/ld.gold
-r-xr-xr-x 2 root wheel - 44800 Mar 13 16:02:03 2025
/usr/local/armv7-portbld-freebsd15.0/bin/nm
-r-xr-xr-x 2 root wheel - 170292 Mar 13 16:01:55 2025
/usr/local/armv7-portbld-freebsd15.0/bin/objcopy
-r-xr-xr-x 2 root wheel - 506448 Mar 13 16:01:52 2025
/usr/local/armv7-portbld-freebsd15.0/bin/objdump
-r-xr-xr-x 2 root wheel - 58748 Mar 13 16:01:54 2025
/usr/local/armv7-portbld-freebsd15.0/bin/ranlib
-r-xr-xr-x 2 root wheel - 800524 Mar 13 16:02:01 2025
/usr/local/armv7-portbld-freebsd15.0/bin/readelf
-r-xr-xr-x 2 root wheel - 170296 Mar 13 16:02:04 2025
/usr/local/armv7-portbld-freebsd15.0/bin/strip
drwxr-xr-x 2 root wheel - 282112 Apr 26 09:35:00 2025
/usr/local/armv7-portbld-freebsd15.0/lib/ldscripts
In any case, I don't see any way to fix this on the FBSD (kernel, userland)
side. There is only one little strange item: that each single object references
__aeabi_unwind_cpp_p* symbols...
Michal
when attempting a build of lang/gcc14 for:
OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP
# find /wrkdirs/ -name config.log -exec grep -q __aeabi_unwind_cpp_pr0 {} \;
-print | more
/wrkdirs/usr/ports/lang/gcc14/work/.build/libdecnumber/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/libbacktrace/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/libiberty/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/lto-plugin/config.log
Note: The poudriere log file ends up instead reporting the likes of:
checking for library containing strerror... configure: error: Link tests are
not allowed after GCC_NO_EXECUTABLES.
So: Giving no clue about the specifics.
Going in the direction of instead having:
#OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP
so that gcc is not used at all, the "jit" in:
LANGUAGES:= c,c++,objc,fortran,jit
prevents having the system clang/clang++ do all
the build: after the early stages, gcc/g++
depends on library coding conventions specific
to gcc/g++ and clang/clang++ based builds do
not follow those conventions in libc++ or such.
(Poisoned names are detected and stop the build.)
As I do not need jit, I do the following in
order to have lang/gcc14 build on/for armv7
(and, presumably could for armv6 as well) :
# git -C /usr/ports/ diff lang/gcc14/ | cat
diff --git a/lang/gcc14/Makefile b/lang/gcc14/Makefile
index 74c59905c48d..7f082e68ecfe 100644
--- a/lang/gcc14/Makefile
+++ b/lang/gcc14/Makefile
@@ -39,8 +39,8 @@ CXXFLAGS:= ${CXXFLAGS:N-mretpoline}
OPTIONS_DEFINE= GRAPHITE
OPTIONS_DEFAULT_aarch64=STANDARD_BOOTSTRAP
-OPTIONS_DEFAULT_armv6= STANDARD_BOOTSTRAP
-OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP
+#OPTIONS_DEFAULT_armv6= STANDARD_BOOTSTRAP
+#OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_amd64= STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_i386= STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_powerpc= STANDARD_BOOTSTRAP
@@ -80,7 +80,11 @@ CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL}
CONFIGURE_ARGS+= --with-abi=elfv2
.endif
+.if ${ARCH} == armv7 || ${ARCH} == armv6
+LANGUAGES:= c,c++,objc,fortran
+.else
LANGUAGES:= c,c++,objc,fortran,jit
+.endif
TARGLIB= ${PREFIX}/lib/gcc${SUFFIX}
TARGLIB32= ${PREFIX}/lib32 # The version information is added later
LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX}
(I do not show my disabling of install-strip use,
which is done for other reasons.)
At least for now that allows me to have lang/gcc14
other than for the jit language that I do not use.
But gcc14 or g++14 is not involved in producing
that gcc14 and g++14 .
What I see in the failing build's tree for:
# find -s /wrkdirs/usr/ports/lang/gcc14/work/ -name 'libgcc_eh*' -exec ls -lodT
{} \;
-rw-r--r-- 1 root wheel - 90994 Apr 26 18:18:35 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-armv7-portbld-freebsd15.0/libgcc/libgcc_eh.a
-rw-r--r-- 1 root wheel - 90994 Apr 26 18:18:43 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a
# diff
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-armv7-portbld-freebsd15.0/libgcc/libgcc_eh.a
wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a
#
# find -s /wrkdirs/usr/ports/lang/gcc14/work/ -name 'libgcc_s*' -exec ls -lodT
{} \;
lrwxr-xr-x 1 root wheel - 13 Apr 26 18:18:38 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-armv7-portbld-freebsd15.0/libgcc/libgcc_s.so
-> libgcc_s.so.1
-rwxr-xr-x 1 root wheel - 2855412 Apr 26 18:18:38 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-armv7-portbld-freebsd15.0/libgcc/libgcc_s.so.1
lrwxr-xr-x 1 root wheel - 13 Apr 26 18:18:43 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_s.so -> libgcc_s.so.1
-rw-r--r-- 1 root wheel - 2855412 Apr 26 18:18:43 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_s.so.1
# diff
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-armv7-portbld-freebsd15.0/libgcc/libgcc_s.so.1
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_s.so.1
#
find /wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/ -type f -exec readelf -a {} \; -print 2>&1 | grep -e
__aeabi_unwind_cpp_pr -e ^/ -e ^File: | grep -v "readelf: Not an ELF file" | grep -v " UND " |
grep -v " R_ARM_NONE" | more
. . .
File:
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(unwind-arm.o)
000000f8 00002f1a R_ARM_GOT_BREL 00000c30 __aeabi_unwind_cpp_pr2
000000fc 0000301a R_ARM_GOT_BREL 00000c28 __aeabi_unwind_cpp_pr1
46: 0000000000000c20 8 FUNC GLOBAL HIDDEN 1
__aeabi_unwind_cpp_pr0
47: 0000000000000c30 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr2
48: 0000000000000c28 8 FUNC WEAK HIDDEN 1
__aeabi_unwind_cpp_pr1
File:
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(libunwind.o)
File:
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(pr-support.o)
File: /wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(unwind-c.o)
File: /wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a(emutls.o)
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_eh.a
0001eb90 00005715 R_ARM_GLOB_DAT 0001c12c __aeabi_unwind_cpp_pr2
0001eb94 00005115 R_ARM_GLOB_DAT 0001c11c __aeabi_unwind_cpp_pr0
0001ebac 00005515 R_ARM_GLOB_DAT 0001c124 __aeabi_unwind_cpp_pr1
81: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0@@GCC_3.5 (14)
85: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1@@GCC_3.5 (14)
87: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2@@GCC_3.5 (14)
4007: 000000000001c12c 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr2
4017: 000000000001c11c 8 FUNC GLOBAL DEFAULT 12
__aeabi_unwind_cpp_pr0
4593: 000000000001c124 8 FUNC WEAK DEFAULT 12
__aeabi_unwind_cpp_pr1
/wrkdirs/usr/ports/lang/gcc14/work/.build/prev-gcc/libgcc_s.so.1
. . .
But I also see:
# find -s /wrkdirs/usr/ports/lang/gcc14/work/ -name '*.log' -exec grep
__aeabi_unwind_cpp_pr {} \; -print | less
/usr/local/bin/ld: a.out: hidden symbol `__aeabi_unwind_cpp_pr0' in
/wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/libgcc_eh.a(unwind-arm.o)
is referenced by DSO
/wrkdirs/usr/ports/lang/gcc14/work/.build/libbacktrace/config.log
/usr/local/bin/ld: a.out: hidden symbol `__aeabi_unwind_cpp_pr0' in
/wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/libgcc_eh.a(unwind-arm.o)
is referenced by DSO
/wrkdirs/usr/ports/lang/gcc14/work/.build/libdecnumber/config.log
/usr/local/bin/ld: conftest: hidden symbol `__aeabi_unwind_cpp_pr0' in
/wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/libgcc_eh.a(unwind-arm.o)
is referenced by DSO
/wrkdirs/usr/ports/lang/gcc14/work/.build/libiberty/config.log
/usr/local/bin/ld: a.out: hidden symbol `__aeabi_unwind_cpp_pr0' in
/wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/libgcc_eh.a(unwind-arm.o)
is referenced by DSO
/wrkdirs/usr/ports/lang/gcc14/work/.build/lto-plugin/config.log
# ls -lodTt /wrkdirs/usr/ports/lang/gcc14/work/.build/libbacktrace/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/libdecnumber/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/libiberty/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/lto-plugin/config.log
-rw-r--r-- 1 root wheel - 121955 Apr 26 18:26:51 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/libiberty/config.log
-rw-r--r-- 1 root wheel - 14883 Apr 26 18:26:39 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/lto-plugin/config.log
-rw-r--r-- 1 root wheel - 13880 Apr 26 18:26:38 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/libbacktrace/config.log
-rw-r--r-- 1 root wheel - 11524 Apr 26 18:26:38 2025
/wrkdirs/usr/ports/lang/gcc14/work/.build/libdecnumber/config.log
===
Mark Millard
marklmi at yahoo.com