https://gcc.gnu.org/g:525c3940ffbde88050107bd102231e58369a47ea
commit r17-5117-g525c3940ffbde88050107bd102231e58369a47ea Author: Keith Packard <[email protected]> Date: Tue Oct 13 07:26:03 2026 -0600 [picolibc] Include stdc-predef.h in hosted mode This mirrors the existing mechanism used by glibc to to set various required definitions when no C library header file has been included directly. Signed-off-by: Keith Packard <[email protected]> gcc/ * config/picolibc-c.cc: New file. * config/t-picolibc: New file * config.gcc: Use new files. Diff: --- gcc/config.gcc | 4 ++++ gcc/config/picolibc-c.cc | 37 +++++++++++++++++++++++++++++++++++++ gcc/config/t-picolibc | 22 ++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/gcc/config.gcc b/gcc/config.gcc index 328c49ac3839..13a0757c5a61 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -3673,6 +3673,10 @@ case "${target}_${with_picolibc}" in *-picolibc-*|*_yes) default_use_cxa_atexit=yes use_gcc_stdint=none + tmake_file="${tmake_file} t-picolibc" + c_target_objs="${c_target_objs} picolibc-c.o" + cxx_target_objs="${cxx_target_objs} picolibc-c.o" + target_has_targetcm=yes # add newlib-stdint.h if not already present case "${tm_file}" in *newlib-stdint.h*) diff --git a/gcc/config/picolibc-c.cc b/gcc/config/picolibc-c.cc new file mode 100644 index 000000000000..b1ea02b3fd36 --- /dev/null +++ b/gcc/config/picolibc-c.cc @@ -0,0 +1,37 @@ +/* C-family target hooks initializer for targets possibly using picolibc. + Copyright © 2026 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "c-family/c-target.h" +#include "c-family/c-target-def.h" + +/* Implement TARGET_C_PREINCLUDE for picolibc targets. */ + +static const char * +picolibc_c_preinclude (void) +{ + return "stdc-predef.h"; +} + +#undef TARGET_C_PREINCLUDE +#define TARGET_C_PREINCLUDE picolibc_c_preinclude + +struct gcc_targetcm targetcm = TARGETCM_INITIALIZER; diff --git a/gcc/config/t-picolibc b/gcc/config/t-picolibc new file mode 100644 index 000000000000..137a423cafce --- /dev/null +++ b/gcc/config/t-picolibc @@ -0,0 +1,22 @@ +# +# Copyright © 2026 Keith Packard <[email protected]> +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +picolibc-c.o: config/picolibc-c.cc + $(COMPILE) $< + $(POSTCOMPILE)
