hi Sergei,

> On 23 Oct 2023, at 13:43, Sergei Trofimovich <sly...@gmail.com> wrote:
> 
> From: Sergei Trofimovich <siarh...@google.com>
> 
> To build `libc` for a target one needs to build `gcc` without `libc`
> support first. Commit r14-4823-g8abddb187b3348 "libgcc: support
> heap-based trampolines" added unconditional `libc` dependency and broke
> libc-less `gcc` builds.
> 
> An example failure on `x86_64-unknown-linux-gnu`:
> 
>    $ mkdir -p /tmp/empty
>    $ ../gcc/configure \
>        --disable-multilib \
>        --without-headers \
>        --with-newlib \
>        --enable-languages=c \
>        --disable-bootstrap \
>        --disable-gcov \
>        --disable-threads \
>        --disable-shared \
>        --disable-libssp \
>        --disable-libquadmath \
>        --disable-libgomp \
>        --disable-libatomic \
>        --with-build-sysroot=/tmp/empty
>    $ make
>    ...
>    /tmp/gb/./gcc/xgcc -B/tmp/gb/./gcc/ -B/usr/local/x86_64-pc-linux-gnu/bin/ 
> -B/usr/local/x86_64-pc-linux-gnu/lib/ -isystem 
> /usr/local/x86_64-pc-linux-gnu/include -isystem 
> /usr/local/x86_64-pc-linux-gnu/sys-include --sysroot=/tmp/empty   -g -O2 -O2  
> -g -O2 -DIN_GCC   -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual 
> -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem 
> ./include  -fpic -mlong-double-80 -DUSE_ELF_SYMVER -fcf-protection -mshstk -g 
> -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -Dinhibit_libc -fpic 
> -mlong-double-80 -DUSE_ELF_SYMVER -fcf-protection -mshstk -I. -I. 
> -I../.././gcc -I/home/slyfox/dev/git/gcc/libgcc 
> -I/home/slyfox/dev/git/gcc/libgcc/. -I/home/slyfox/dev/git/gcc/libgcc/../gcc 
> -I/home/slyfox/dev/git/gcc/libgcc/../include  -DHAVE_CC_TLS  -DUSE_TLS  -o 
> heap-trampoline.o -MT heap-trampoline.o -MD -MP -MF heap-trampoline.dep  -c 
> .../gcc/libgcc/config/i386/heap-trampoline.c -fvisibility=hidden 
> -DHIDE_EXPORTS
>    ../gcc/libgcc/config/i386/heap-trampoline.c:3:10: fatal error: unistd.h: 
> No such file or directory
>        3 | #include <unistd.h>
>          |          ^~~~~~~~~~
>    compilation terminated.
>    make[2]: *** [.../gcc/libgcc/static-object.mk:17: heap-trampoline.o] Error 
> 1
>    make[2]: Leaving directory '/tmp/gb/x86_64-pc-linux-gnu/libgcc'
>    make[1]: *** [Makefile:13307: all-target-libgcc] Error 2
> 
> The change inhibits any heap-based trampoline code.

That looks reasonable to me (I was considering using __has_include(), but the 
inhibit_libc is neater).

The fact that this first compiler is buit without heap-trampoline support, 
would become relevant, I guess if libc wanted to use them, it would need 
another iteration.

so, it looks fine, but I cannot actually approve it.
Iain

> 
> libgcc/
> 
>       * libgcc/config/aarch64/heap-trampoline.c: Disable when libc is
>         not present.
> ---
> libgcc/config/aarch64/heap-trampoline.c | 5 +++++
> libgcc/config/i386/heap-trampoline.c    | 5 +++++
> 2 files changed, 10 insertions(+)
> 
> diff --git a/libgcc/config/aarch64/heap-trampoline.c 
> b/libgcc/config/aarch64/heap-trampoline.c
> index c8b83681ed7..f22233987ca 100644
> --- a/libgcc/config/aarch64/heap-trampoline.c
> +++ b/libgcc/config/aarch64/heap-trampoline.c
> @@ -1,5 +1,8 @@
> /* Copyright The GNU Toolchain Authors. */
> 
> +/* libc is required to allocate trampolines.  */
> +#ifndef inhibit_libc
> +
> #include <unistd.h>
> #include <sys/mman.h>
> #include <stdint.h>
> @@ -170,3 +173,5 @@ __builtin_nested_func_ptr_deleted (void)
>       tramp_ctrl_curr = prev;
>     }
> }
> +
> +#endif /* !inhibit_libc */
> diff --git a/libgcc/config/i386/heap-trampoline.c 
> b/libgcc/config/i386/heap-trampoline.c
> index 96e13bf828e..4b9f4365868 100644
> --- a/libgcc/config/i386/heap-trampoline.c
> +++ b/libgcc/config/i386/heap-trampoline.c
> @@ -1,5 +1,8 @@
> /* Copyright The GNU Toolchain Authors. */
> 
> +/* libc is required to allocate trampolines.  */
> +#ifndef inhibit_libc
> +
> #include <unistd.h>
> #include <sys/mman.h>
> #include <stdint.h>
> @@ -170,3 +173,5 @@ __builtin_nested_func_ptr_deleted (void)
>       tramp_ctrl_curr = prev;
>     }
> }
> +
> +#endif /* !inhibit_libc */
> -- 
> 2.42.0
> 

Reply via email to