On 1/19/26 13:37, Mark Millard wrote:
> This note is related to:
> 
> <https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=292567>
> 
> (__aeabi_unwind_cpp_pr1 has a similar status.)
> 
> It is not clear to me if other non-tier-1 architectures might have
> something similar at issue, now or in the future.
> 
> 
> Is the following expected? Appropriate?
> 
> In an armv7 context (watch for possible line wraps):
> 
> # readelf --dyn-syms /lib/libsys.so.7 | grep _cpp_
>      2: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __aeabi_unwind_cpp_pr0
>      3: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __aeabi_unwind_cpp_pr1
> 
> In more detail:
> 
> # readelf --dyn-syms /lib/libsys.so.7
> 
> Symbol table '.dynsym' contains 1211 entries:
>    Num:    Value  Size Type    Bind   Vis       Ndx Name
>      0: 00000000     0 NOTYPE  LOCAL  DEFAULT   UND
>      1: 00000000     0 NOTYPE  WEAK   DEFAULT   UND __cxa_finalize
>      2: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __aeabi_unwind_cpp_pr0
>      3: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __aeabi_unwind_cpp_pr1
> . . .
> 
> on aarch64:
> 
> # readelf --dyn-syms /lib/libsys.so.7 | grep _cpp_
> #
> 
> on amd64:
> 
> # readelf --dyn-syms /lib/libsys.so.7 | grep _cpp_
> #
> 
> For armv7 at least, it contributes to the likes of (not specific to
> gcc15 for similar results):
> 
> # gcc15 -static-libgcc main.c
> 
> producing messages like:
> 
> /usr/local/bin/ld: a.out: hidden symbol `__aeabi_unwind_cpp_pr0' in
> /usr/local/lib/gcc15/gcc/armv7-portbld-freebsd16.0/15.2.0/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
> 
> In fact:
> 
> # gcc15 -static-libgcc -fno-exceptions main.c
> 
> also produces:
> 
> /usr/local/bin/ld: a.out: hidden symbol `__aeabi_unwind_cpp_pr0' in
> /usr/local/lib/gcc15/gcc/armv7-portbld-freebsd16.0/15.2.0/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
> 
> Despite the very simple C context.
> 
> In an armv7 14.3-STABLE context (so predating a
> libsys.so.7 existing to be involved with libc.so.7 use):
> 
> # llvm-readelf --dyn-syms /lib/libc.so.7 | grep _cpp_
> #
> 
> So in 14.* there is no such __aeabi_unwind_cpp_pr0 reference involved
> when linking against libc.so.7 . (Same for __aeabi_unwind_cpp_pr1 .)
> 
> Definitely only a FreeBSD 15+ issue for what contexts can run into the
> issue.
> 
> 
> A question here is if, at least for armv7, all use of -static-libgcc for
> FreeBSD 15+ needs to supply a usable/linkable pair:
> 
> __aeabi_unwind_cpp_pr0
> __aeabi_unwind_cpp_pr1
>      
> even if -fno-exceptions is also in use.
> 
> 

The examples of the aarch64 and amd64 grep usage that I copy/pasted into
my notes were poor, assuming naming conventions that need not be
assumed. Better was my test via (watch for potential line wrapping):

aarch64 main:

# readelf --dyn-syms /lib/libsys.so.7 | grep 'NOTYPE  GLOBAL DEFAULT   UN'
# readelf --dyn-syms /lib/libc.so.7   | grep 'NOTYPE  GLOBAL DEFAULT   UN'
     1: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT   UND environ
     2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT   UND __progname


amd64 main:

# readelf --dyn-syms /lib/libsys.so.7 | grep 'NOTYPE  GLOBAL DEFAULT   UN'
# readelf --dyn-syms /lib/libc.so.7   | grep 'NOTYPE  GLOBAL DEFAULT   UN'
     1: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT   UND environ
     2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT   UND __progname


Compared/contrasted with:

armv7 main:

# readelf --dyn-syms /lib/libsys.so.7 | grep 'NOTYPE  GLOBAL DEFAULT   UN'
     2: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __aeabi_unwind_cpp_pr0
     3: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __aeabi_unwind_cpp_pr1
# readelf --dyn-syms /lib/libc.so.7   | grep 'NOTYPE  GLOBAL DEFAULT   UN'
     1: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND environ
     2: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __progname

And with:

armv7 14.3-STABLE:

# llvm-readelf --dyn-syms /lib/libc.so.7 | grep 'NOTYPE  GLOBAL DEFAULT
 UN'
     2: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND environ
     3: 00000000     0 NOTYPE  GLOBAL DEFAULT   UND __progname


-- 
===
Mark Millard
marklmi at yahoo.com

Reply via email to