https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116021

            Bug ID: 116021
           Summary: Ada build on Darwin: gen_il-main: Symbol not found:
                    ___builtin_nested_func_ptr_created
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: build
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: egallager at gcc dot gnu.org
                CC: iains at gcc dot gnu.org
  Target Milestone: ---

I was trying to figure this out with Iain on IRC the other day, but we never
managed to solve it, so I'm putting it here so it doesn't get lost:
Lately (as of r15-1899-g2b3027bea3f218) when I've been trying to build GCC with
Ada, I've been getting errors like the following:

mkdir -p ada/gen_il
cd ada/gen_il; gnatmake -q -g -gnata -gnat2012 -gnatw.g -gnatyg -gnatU
-I/Users/ericgallager/gcc_newgit/gcc/ada gen_il-main
# Ignore errors to work around finalization issues in older compilers
cd ada/gen_il; ./gen_il-main
dyld: lazy symbol binding failed: Symbol not found:
___builtin_nested_func_ptr_created
  Referenced from:
/Users/ericgallager/gcc_newgit/abcdefghijklmnopqrstuvwxyz_01234567890.build/gcc/ada/gen_il/./gen_il-main
  Expected in:
/Users/ericgallager/gcc_newgit/abcdefghijklmnopqrstuvwxyz_01234567890.build/./prev-gcc/libgcc_s.1.1.dylib

dyld: Symbol not found: ___builtin_nested_func_ptr_created
  Referenced from:
/Users/ericgallager/gcc_newgit/abcdefghijklmnopqrstuvwxyz_01234567890.build/gcc/ada/gen_il/./gen_il-main
  Expected in:
/Users/ericgallager/gcc_newgit/abcdefghijklmnopqrstuvwxyz_01234567890.build/./prev-gcc/libgcc_s.1.1.dylib


raised PROGRAM_ERROR : unhandled signal
make[3]: [ada/stamp-gen_il] Error 1 (ignored)
/Users/ericgallager/gcc_newgit/gcc/../move-if-change
ada/gen_il/seinfo_tables.ads ada/seinfo_tables.ads
mv: rename ada/gen_il/seinfo_tables.ads to ada/seinfo_tables.ads: No such file
or directory
make[3]: *** [ada/stamp-gen_il] Error 1
make[2]: *** [all-stage2-gcc] Error 2
make[1]: *** [stage2-bubble] Error 2
make: *** [all] Error 2

Apparently __builtin_nested_func_ptr_created has been renamed to
__gcc_nested_func_ptr_created in recent revisions, so I don't get why the build
process is still looking for the old name? Here's what shows up when I search
the repo for the common part shared between those strings:

$ git grep _nested_func_ptr_created
gcc/ChangeLog:        rename the library fallbacks to
__gcc_nested_func_ptr_created and
gcc/ChangeLog:        * doc/invoke.texi: Rename these to
__gcc_nested_func_ptr_created
gcc/builtins.def:DEF_EXT_LIB_BUILTIN (BUILT_IN_GCC_NESTED_PTR_CREATED,
"__gcc_nested_func_ptr_created", BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
gcc/config/darwin.h:          -U ___gcc_nested_func_ptr_created \
gcc/config/darwin.h:          -exported_symbol ___gcc_nested_func_ptr_created \
gcc/doc/invoke.texi:@code{__gcc_nested_func_ptr_created} and
gcc/tree.cc:      local_define_builtin
("__builtin___gcc_nested_func_ptr_created", ftype,
gcc/tree.cc:                            "__gcc_nested_func_ptr_created",
ECF_NOTHROW);
libgcc/ChangeLog:        (__gcc_nested_func_ptr_created): Implement a basic
trampoline
libgcc/ChangeLog:        * libgcc2.h (__gcc_nested_func_ptr_created): Change
type of last
libgcc/ChangeLog:        * config/i386/heap-trampoline.c
(__gcc_nested_func_ptr_created):
libgcc/ChangeLog:        * config/aarch64/heap-trampoline.c
(__gcc_nested_func_ptr_created):
libgcc/ChangeLog:        (__gcc_nested_func_ptr_created): Likewise.
libgcc/ChangeLog:        (__gcc_nested_func_ptr_created): Likewise.
libgcc/ChangeLog:        __builtin_nested_func_ptr_created to
__gcc_nested_func_ptr_created and
libgcc/ChangeLog:        __gcc_nested_func_ptr_created and
libgcc/ChangeLog:        * libgcc2.h (__builtin_nested_func_ptr_created):
Declare.
libgcc/config/aarch64/heap-trampoline.c:void __gcc_nested_func_ptr_created
(void *chain, void *func, void *dst);
libgcc/config/aarch64/heap-trampoline.c:__gcc_nested_func_ptr_created (void
*chain, void *func, void *dst)
libgcc/config/i386/heap-trampoline.c:void __gcc_nested_func_ptr_created (void
*chain, void *func, void *dst);
libgcc/config/i386/heap-trampoline.c:__gcc_nested_func_ptr_created (void
*chain, void *func, void *dst)
libgcc/libgcc-std.ver.in:  __gcc_nested_func_ptr_created
libgcc/libgcc2.h:extern void __gcc_nested_func_ptr_created (void *, void *,
void *);
$

So, none of the Ada source files used to build gen_il-main contain references
to it... I'm wondering if it might be due to the version of gnatmake I'm using
to bootstrap? Here's its version info:

$ /usr/local/bin/gnatmake --version
GNATMAKE 14.0.0 20231204 (experimental) [master 2fde54ad7be]
Copyright (C) 1995-2023, Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

$

(and yes, I've already tried seeing if this might be due to a configure flag I
was using, but it happens no matter the combination of configure flags that I
try...)

Perhaps related to bug 106487? Except I'm on x86_64...

Reply via email to