gcc: Add 13.1.0

Add gcc 13.1.0 with rebased patches against the new version.

https://gcc.gnu.org/pipermail/gcc-announce/2023/000175.html
https://gcc.gnu.org/gcc-13/changes.html
https://gcc.gnu.org/gcc-13/porting_to.html

Signed-off-by: Chris Packham <judge.packham@gmail.com>
This commit is contained in:
Chris Packham 2023-04-26 21:56:28 +12:00
parent 8e55ab0607
commit f00a45eba6
14 changed files with 837 additions and 1 deletions

View File

@ -0,0 +1,18 @@
---
libtool-ldflags | 5 +++++
1 file changed, 5 insertions(+)
--- a/libtool-ldflags
+++ b/libtool-ldflags
@@ -36,6 +36,11 @@
for arg
do
case $arg in
+ -framework)
+ # libtool handles this option. It should not be prefixed with
+ # -Xcompiler, as that would split it from the argument that
+ # follows.
+ ;;
-f*|--*|-static-lib*|-shared-lib*|-B*)
# Libtool does not ascribe any special meaning options
# that begin with -f or with a double-dash. So, it will

View File

@ -0,0 +1,14 @@
---
libcc1/connection.cc | 1 +
1 file changed, 1 insertion(+)
--- a/libcc1/connection.cc
+++ b/libcc1/connection.cc
@@ -21,6 +21,7 @@
#include <string>
#include <unistd.h>
#include <sys/types.h>
+#include <sys/select.h>
#include <string.h>
#include <errno.h>
#include "marshall.hh"

View File

@ -0,0 +1,31 @@
---
gcc/config/arm/linux-elf.h | 2 +-
libgcc/config/arm/t-linux | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -58,7 +58,7 @@
%{shared:-lc} \
%{!shared:%{profile:-lc_p}%{!profile:-lc}}"
-#define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
+#define LIBGCC_SPEC "-lgcc"
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
--- a/libgcc/config/arm/t-linux
+++ b/libgcc/config/arm/t-linux
@@ -1,6 +1,11 @@
LIB1ASMSRC = arm/lib1funcs.S
LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \
- _ctzsi2 _arm_addsubdf3 _arm_addsubsf3
+ _ctzsi2 _arm_addsubdf3 _arm_addsubsf3 \
+ _arm_addsubdf3 _arm_addsubsf3 \
+ _arm_negdf2 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
+ _arm_fixdfsi _arm_fixunsdfsi _arm_truncdfsf2 \
+ _arm_negsf2 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \
+ _arm_fixsfsi _arm_fixunssfsi
# Just for these, we omit the frame pointer since it makes such a big
# difference.

View File

@ -0,0 +1,17 @@
disable split-stack for non-thread builds
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
---
libgcc/config/t-stack | 2 ++
1 file changed, 2 insertions(+)
--- a/libgcc/config/t-stack
+++ b/libgcc/config/t-stack
@@ -1,4 +1,6 @@
# Makefile fragment to provide generic support for -fsplit-stack.
# This should be used in config.host for any host which supports
# -fsplit-stack.
+ifeq ($(enable_threads),yes)
LIB2ADD_ST += $(srcdir)/generic-morestack.c $(srcdir)/generic-morestack-thread.c
+endif

View File

@ -0,0 +1,262 @@
From fc4aaba8a3b8fe7815e103cc20f2a36d5de7e8ab Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Sun, 24 Jan 2021 14:20:33 -0800
Subject: [PATCH] Remove use of include_next from c++ headers
Using include_next bypasses the default header search path and lets
files later in the include path take priority over earlier files.
This makes replacing libc impossible as the default libc headers will
occur after the libstdc++ headers, and so be picked up in place of
headers inserted at the begining of the search path or appended to the
end of the search path.
Using include_next is a hack to work-around broken combinations of
libraries, and is not necessary in a well constructed toolchain.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
libstdc++-v3/include/bits/std_abs.h | 4 ++--
libstdc++-v3/include/c/cassert | 2 +-
libstdc++-v3/include/c/cctype | 2 +-
libstdc++-v3/include/c/cerrno | 2 +-
libstdc++-v3/include/c/cfloat | 2 +-
libstdc++-v3/include/c/climits | 2 +-
libstdc++-v3/include/c/clocale | 2 +-
libstdc++-v3/include/c/cmath | 2 +-
libstdc++-v3/include/c/csetjmp | 2 +-
libstdc++-v3/include/c/csignal | 2 +-
libstdc++-v3/include/c/cstdarg | 2 +-
libstdc++-v3/include/c/cstddef | 2 +-
libstdc++-v3/include/c/cstdio | 2 +-
libstdc++-v3/include/c/cstdlib | 2 +-
libstdc++-v3/include/c/cstring | 2 +-
libstdc++-v3/include/c/ctime | 2 +-
libstdc++-v3/include/c/cuchar | 2 +-
libstdc++-v3/include/c/cwchar | 2 +-
libstdc++-v3/include/c/cwctype | 2 +-
libstdc++-v3/include/c_global/cmath | 2 +-
libstdc++-v3/include/c_global/cstdlib | 2 +-
21 files changed, 22 insertions(+), 22 deletions(-)
--- a/libstdc++-v3/include/bits/std_abs.h
+++ b/libstdc++-v3/include/bits/std_abs.h
@@ -35,9 +35,9 @@
#include <bits/c++config.h>
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <stdlib.h>
+#include <stdlib.h>
#ifdef __CORRECT_ISO_CPP_MATH_H_PROTO
-# include_next <math.h>
+# include <math.h>
#endif
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
--- a/libstdc++-v3/include/c/cassert
+++ b/libstdc++-v3/include/c/cassert
@@ -31,4 +31,4 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <assert.h>
+#include <assert.h>
--- a/libstdc++-v3/include/c/cctype
+++ b/libstdc++-v3/include/c/cctype
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <ctype.h>
+#include <ctype.h>
#endif
--- a/libstdc++-v3/include/c/cerrno
+++ b/libstdc++-v3/include/c/cerrno
@@ -41,7 +41,7 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <errno.h>
+#include <errno.h>
// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
#ifndef errno
--- a/libstdc++-v3/include/c/cfloat
+++ b/libstdc++-v3/include/c/cfloat
@@ -32,6 +32,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <float.h>
+#include <float.h>
#endif
--- a/libstdc++-v3/include/c/climits
+++ b/libstdc++-v3/include/c/climits
@@ -32,6 +32,6 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include_next <limits.h>
+#include <limits.h>
#endif
--- a/libstdc++-v3/include/c/clocale
+++ b/libstdc++-v3/include/c/clocale
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <locale.h>
+#include <locale.h>
#endif
--- a/libstdc++-v3/include/c/cmath
+++ b/libstdc++-v3/include/c/cmath
@@ -33,7 +33,7 @@
#include <bits/c++config.h>
-#include_next <math.h>
+#include <math.h>
// Get rid of those macros defined in <math.h> in lieu of real functions.
#undef abs
--- a/libstdc++-v3/include/c/csetjmp
+++ b/libstdc++-v3/include/c/csetjmp
@@ -31,7 +31,7 @@
#pragma GCC system_header
-#include_next <setjmp.h>
+#include <setjmp.h>
// Get rid of those macros defined in <setjmp.h> in lieu of real functions.
#undef longjmp
--- a/libstdc++-v3/include/c/csignal
+++ b/libstdc++-v3/include/c/csignal
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <signal.h>
+#include <signal.h>
#endif
--- a/libstdc++-v3/include/c/cstdarg
+++ b/libstdc++-v3/include/c/cstdarg
@@ -32,6 +32,6 @@
#pragma GCC system_header
#undef __need___va_list
-#include_next <stdarg.h>
+#include <stdarg.h>
#endif
--- a/libstdc++-v3/include/c/cstddef
+++ b/libstdc++-v3/include/c/cstddef
@@ -35,6 +35,6 @@
#define __need_ptrdiff_t
#define __need_NULL
#define __need_offsetof
-#include_next <stddef.h>
+#include <stddef.h>
#endif
--- a/libstdc++-v3/include/c/cstdio
+++ b/libstdc++-v3/include/c/cstdio
@@ -31,7 +31,7 @@
#pragma GCC system_header
-#include_next <stdio.h>
+#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
#undef clearerr
--- a/libstdc++-v3/include/c/cstdlib
+++ b/libstdc++-v3/include/c/cstdlib
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <stdlib.h>
+#include <stdlib.h>
#endif
--- a/libstdc++-v3/include/c/cstring
+++ b/libstdc++-v3/include/c/cstring
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <string.h>
+#include <string.h>
#endif
--- a/libstdc++-v3/include/c/ctime
+++ b/libstdc++-v3/include/c/ctime
@@ -31,6 +31,6 @@
#pragma GCC system_header
-#include_next <time.h>
+#include <time.h>
#endif
--- a/libstdc++-v3/include/c/cuchar
+++ b/libstdc++-v3/include/c/cuchar
@@ -39,7 +39,7 @@
#include <cwchar>
#if _GLIBCXX_USE_C11_UCHAR_CXX11
-# include_next <uchar.h>
+# include <uchar.h>
#endif
#endif // C++11
--- a/libstdc++-v3/include/c/cwchar
+++ b/libstdc++-v3/include/c/cwchar
@@ -36,7 +36,7 @@
#include <ctime>
#if _GLIBCXX_HAVE_WCHAR_H
-#include_next <wchar.h>
+#include <wchar.h>
#endif
// Need to do a bit of trickery here with mbstate_t as char_traits
--- a/libstdc++-v3/include/c/cwctype
+++ b/libstdc++-v3/include/c/cwctype
@@ -34,7 +34,7 @@
#include <bits/c++config.h>
#if _GLIBCXX_HAVE_WCTYPE_H
-#include_next <wctype.h>
+#include <wctype.h>
#endif
#endif
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -44,7 +44,7 @@
#include <bits/cpp_type_traits.h>
#include <ext/type_traits.h>
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <math.h>
+#include <math.h>
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
#include <bits/std_abs.h>
--- a/libstdc++-v3/include/c_global/cstdlib
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -76,7 +76,7 @@
// Need to ensure this finds the C library's <stdlib.h> not a libstdc++
// wrapper that might already be installed later in the include search path.
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
-#include_next <stdlib.h>
+#include <stdlib.h>
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
#include <bits/std_abs.h>

View File

@ -0,0 +1,134 @@
From ffb10db6fa080e4c225e16928aec052d4c0baa95 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Fri, 2 Sep 2022 23:07:05 -0700
Subject: [PATCH] Allow default libc to be specified to configure
The default C library is normally computed based on the target
triplet. However, for embedded systems, it can be useful to leave the
triplet alone while changing which C library is used by default. Other
C libraries may still be available on the system so the compiler and
can be used by specifying suitable include and library paths at build
time.
If an unknown --with-default-libc= value is provided, emit an error
and stop.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
gcc/config.gcc | 48 ++++++++++++++++++++++++++++++++++++++++--------
gcc/configure.ac | 4 ++++
2 files changed, 44 insertions(+), 8 deletions(-)
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -664,6 +664,8 @@
# Common C libraries.
tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
+default_libc=""
+
# 32-bit x86 processors supported by --with-arch=. Each processor
# MUST be separated by exactly one space.
x86_archs="athlon athlon-4 athlon-fx athlon-mp athlon-tbird \
@@ -870,16 +872,16 @@
esac
case $target in
*-*-*android*)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_BIONIC"
+ default_libc=LIBC_BIONIC
;;
*-*-*uclibc* | *-*-uclinuxfdpiceabi)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
+ default_libc=LIBC_UCLIBC
;;
*-*-*musl*)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
+ default_libc=LIBC_MUSL
;;
*)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
+ default_libc=LIBC_GLIBC
;;
esac
# Assume that glibc or uClibc or Bionic are being used and so __cxa_atexit
@@ -988,7 +990,8 @@
case ${enable_threads} in
"" | yes | posix) thread_file='posix' ;;
esac
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC SINGLE_LIBC"
+ tm_defines="$tm_defines SINGLE_LIBC"
+ default_libc=LIBC_UCLIBC
;;
*-*-rdos*)
use_gcc_stdint=wrap
@@ -1652,13 +1655,13 @@
case ${target} in
csky-*-linux-gnu*)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
+ default_libc=LIBC_GLIBC
# Force .init_array support. The configure script cannot always
# automatically detect that GAS supports it, yet we require it.
gcc_cv_initfini_array=yes
;;
csky-*-linux-uclibc*)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
+ default_libc=LIBC_UCLIBC
default_use_cxa_atexit=no
;;
*)
@@ -3038,7 +3041,7 @@
tmake_file="${tmake_file} t-linux rs6000/t-linux64 rs6000/t-fprules rs6000/t-ppccomm"
tmake_file="${tmake_file} rs6000/t-vxworks"
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
+ default_libc=LIBC_GLIBC
extra_objs="$extra_objs linux.o rs6000-linux.o"
;;
powerpc-wrs-vxworks*)
@@ -5879,3 +5882,32 @@
fi
;;
esac
+
+case "${with_default_libc}" in
+glibc)
+ default_libc=LIBC_GLIBC
+ ;;
+uclibc)
+ default_libc=LIBC_UCLIBC
+ ;;
+bionic)
+ default_libc=LIBC_BIONIC
+ ;;
+musl)
+ default_libc=LIBC_MUSL
+ ;;
+"")
+ ;;
+*)
+ echo "Unknown libc in --with-default-libc=$with_default_libc" 1>&2
+ exit 1
+ ;;
+esac
+
+case "$default_libc" in
+"")
+ ;;
+*)
+ tm_defines="$tm_defines DEFAULT_LIBC=$default_libc"
+ ;;
+esac
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2502,6 +2502,10 @@
fi
AC_SUBST(inhibit_libc)
+AC_ARG_WITH(default-libc,
+ [AS_HELP_STRING([--with-default-libc],
+ [Use specified default C library])])
+
# When building gcc with a cross-compiler, we need to adjust things so
# that the generator programs are still built with the native compiler.
# Also, we cannot run fixincludes.

View File

@ -0,0 +1,95 @@
From fd6aa8e67aec185b0d84ba9551fd38c90c9d6d8a Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Fri, 26 Aug 2022 14:30:03 -0700
Subject: [PATCH] driver: Extend 'getenv' function to allow default value
Right now, a missing environment variable provided to the 'getenv'
function in a .specs file causes a fatal error. That makes writing a
spec file that uses the GCC_EXEC_PREFIX value difficult as that
variable is only set when the driver has been relocated, but not when
run from the defined location. This makes building a relocatable
toolchain difficult to extend to other ancilary pieces which use specs
files to locate header and library files adjacent to the toolchain.
This patch adds an optional third argument to the getenv function that
can be used to fall back to the standard installation path when the
driver hasn't set GCC_EXEC_PREFIX in the environment.
For example, if an alternate C library is installed in
${prefix}/extra, then this change allows the specs file to locate that
relative to the gcc directory, if gcc is located in the original
installation directory (which would leave GCC_EXEC_PREFIX unset), or
if the gcc tree has been moved to a different location (where gcc
would set GCC_EXEC_PREFIX itself):
*cpp:
-isystem %:getenv(GCC_EXEC_PREFIX ../../extra/include ${prefix}/extra/include)
I considered changing the behavior of either the %R sequence so that
it had a defined behavior when there was no sysroot defined, or making
the driver always set the GCC_EXEC_PREFIX environment variable and
decided that the approach of adding functionality to getenv where it
was previously invalid would cause the least potential for affecting
existing usage.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
gcc/doc/invoke.texi | 18 +++++++++++-------
gcc/gcc.cc | 10 +++++++++-
2 files changed, 20 insertions(+), 8 deletions(-)
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -34780,17 +34780,21 @@
@table @code
@item @code{getenv}
-The @code{getenv} spec function takes two arguments: an environment
-variable name and a string. If the environment variable is not
-defined, a fatal error is issued. Otherwise, the return value is the
-value of the environment variable concatenated with the string. For
-example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
+
+The @code{getenv} spec function takes two or three arguments: an
+environment variable name, a string and an optional default value. If
+the environment variable is not defined and a default value is
+provided, that is used as the return value; otherwise a fatal error is
+issued. Otherwise, the return value is the value of the environment
+variable concatenated with the string. For example, if @env{TOPDIR}
+is defined as @file{/path/to/top}, then:
@smallexample
-%:getenv(TOPDIR /include)
+%:getenv(TOPDIR /include /path/to/default/include)
@end smallexample
-expands to @file{/path/to/top/include}.
+expands to @file{/path/to/top/include}. If @env{TOPDIR} is not
+defined, then this expands to @file{/path/to/default/include}.
@item @code{if-exists}
The @code{if-exists} spec function takes one argument, an absolute
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -10155,12 +10155,20 @@
char *ptr;
size_t len;
- if (argc != 2)
+ if (argc != 2 && argc != 3)
return NULL;
varname = argv[0];
value = env.get (varname);
+ if (!value && argc == 3)
+ {
+ value = argv[2];
+ result = XNEWVAR(char, strlen(value) + 1);
+ strcpy(result, value);
+ return result;
+ }
+
/* If the variable isn't defined and this is allowed, craft our expected
return value. Assume variable names used in specs strings don't contain
any active spec character so don't need escaping. */

View File

@ -0,0 +1,37 @@
From be5d482de0099012288e617af0583772fac21714 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Tue, 23 Aug 2022 22:12:06 -0700
Subject: [PATCH] Add newlib and picolibc as default C library choices
Signed-off-by: Keith Packard <keithp@keithp.com>
---
gcc/config.gcc | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -662,7 +662,7 @@
esac
# Common C libraries.
-tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
+tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4 LIBC_NEWLIB=5 LIBC_PICOLIBC=6"
default_libc=""
@@ -5896,6 +5896,15 @@
musl)
default_libc=LIBC_MUSL
;;
+newlib)
+ # Newlib configurations don't set the DEFAULT_LIBC variable, so
+ # avoid changing those by allowing --with-default-libc=newlib but
+ # not actually setting the DEFAULT_LIBC variable.
+ default_libc=
+ ;;
+picolibc)
+ default_libc=LIBC_PICOLIBC
+ ;;
"")
;;
*)

View File

@ -0,0 +1,33 @@
From c9c22fe9ce182e48282e2bf0a8830381d3c55dd4 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Sun, 12 Feb 2023 14:23:32 -0800
Subject: [PATCH] Support picolibc targets
Match *-picolibc-* and select picolibc as the default C library, plus continuing to use
the newlib-based logic for other configuration items.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
gcc/config.gcc | 11 +++++++++++
1 file changed, 11 insertions(+)
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1116,6 +1116,17 @@
;;
esac
;;
+*-picolibc-*)
+ # __cxa_atexit is provided.
+ default_use_cxa_atexit=yes
+ use_gcc_stdint=wrap
+ default_libc=LIBC_PICOLIBC
+ case "${with_newlib}-${with_headers}" in
+ no-no) use_gcc_stdint=provide ;;
+ *) ;;
+ esac
+ ;;
+
*-*-elf|arc*-*-elf*)
# Assume that newlib is being used and so __cxa_atexit is provided.
default_use_cxa_atexit=yes

View File

@ -0,0 +1,60 @@
From ef327a7c2a36b63e8a372bef88e3700460b51c34 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Sat, 11 Feb 2023 23:07:08 -0800
Subject: [PATCH] gcc: Allow g++ to work differently from gcc
Compile gcc.cc with -DIN_GPP defined when building g++ so that the
code can respond appropriately for the default target language. This
allows the driver to customize the specs used, selecting different
linker scripts, adjusting the use of crtbegin.o/crtend.o etc.
By default, this change has no effect; targets need to explicitly
check for IN_GPP to have alternate behavior.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
gcc/cp/Make-lang.in | 7 ++++++-
gcc/gpp.cc | 21 +++++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
create mode 100644 gcc/gpp.cc
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -77,7 +77,12 @@
endif
# Create the compiler driver for g++.
-GXX_OBJS = $(GCC_OBJS) cp/g++spec.o
+GXX_OBJS = $(GCC_OBJS:gcc.o=gpp.o) cp/g++spec.o
+
+CFLAGS-gpp.o = $(CFLAGS-gcc.o)
+gpp.o: $(BASEVER)
+gpp.o: gcc.o
+
xg++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS)
+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
$(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
--- /dev/null
+++ b/gcc/gpp.cc
@@ -0,0 +1,21 @@
+/* Compiler driver program that can handle many languages.
+ Copyright (C) 1987-2022 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/>. */
+
+#define IN_GPP
+#include "gcc.cc"

8
packages/gcc/13.1.0/chksum vendored Normal file
View File

@ -0,0 +1,8 @@
md5 gcc-13.1.0.tar.xz 43e4de77f2218c83ca675257ea1af9ef
sha1 gcc-13.1.0.tar.xz 13366f554858f548282b5701a0add1d19d1325ee
sha256 gcc-13.1.0.tar.xz 61d684f0aa5e76ac6585ad8898a2427aade8979ed5e7f85492286c4dfc13ee86
sha512 gcc-13.1.0.tar.xz 6cf06dfc48f57f5e67f7efe3248019329a14d690c728d9f2f7ef5fa0d58f1816f309586ba7ea2eac20d0b60a2d1b701f68392e9067dd46f827ba0efd7192db33
md5 gcc-13.1.0.tar.gz acbd81e95b3d9f11ea0b3462d88107b1
sha1 gcc-13.1.0.tar.gz 10ff6f714012562294da5819c023a8ffe9de8786
sha256 gcc-13.1.0.tar.gz bacd4c614d8bd5983404585e53478d467a254249e0f1bb747c8bc6d787bd4fa2
sha512 gcc-13.1.0.tar.gz 73244f830b748d5fe2645a21c9c01bcffa5b34c73a9244a22dfb39fc3abd5bc61ab851bf2ca65999ce642fe60a5de2aadb07c02f40210c555003b5e16f1f7fa3

View File

@ -0,0 +1,127 @@
From b0f9ac365f91952f6f920c8e6aa4ddb819f47cc8 Mon Sep 17 00:00:00 2001
From: Keith Packard <keithp@keithp.com>
Date: Tue, 23 Aug 2022 22:13:08 -0700
Subject: [PATCH] picolibc: Add custom spec file fragments for using
picolibc
The '--oslib=' option allows targets to insert an OS library after the
C library in the LIB_PATH spec file fragment. This library maps a few
POSIX APIs used by picolibc to underlying system capabilities.
The '--crt0=' option allows targets to use an alternate crt0 in place
of the usual one as provided by Picolibc.
For example, picolibc provides 'libsemihost' and 'crt0-semihost.o' on
various targets which maps some POSIX APIs to semihosting capabilities
and signals the semihosting environment when 'main' returns. These
would be used by specifying --oslib=semihost --crt0=semihost.
This patch also takes advantage of the IN_GPP conditional when
building g++ to elide exception handling contents from the executable
when not linking with the g++ driver.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
gcc/config.gcc | 7 +++++++
gcc/config/picolibc.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
gcc/config/picolibc.opt | 33 +++++++++++++++++++++++++++++++++
3 files changed, 84 insertions(+)
create mode 100644 gcc/config/picolibc.h
create mode 100644 gcc/config/picolibc.opt
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -5931,3 +5931,10 @@
tm_defines="$tm_defines DEFAULT_LIBC=$default_libc"
;;
esac
+
+case "$default_libc" in
+ LIBC_PICOLIBC)
+ extra_options="${extra_options} picolibc.opt"
+ tm_file="${tm_file} picolibc.h"
+ ;;
+esac
--- /dev/null
+++ b/gcc/config/picolibc.h
@@ -0,0 +1,44 @@
+/* Configuration common to all targets running Picolibc.
+ Copyright (C) 2023 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.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef IN_GPP
+#define PICOLIBC_LD "picolibcpp.ld"
+#define PICOLIBC_BEGIN " crtbegin%O%s"
+#define PICOLIBC_END "crtend%O%s"
+#else
+#define PICOLIBC_LD "picolibc.ld"
+#define PICOLIBC_BEGIN ""
+#define PICOLIBC_END ""
+#endif
+
+#undef LIB_SPEC
+#define LIB_SPEC "%{!T:-T" PICOLIBC_LD "} --start-group -lc %{-oslib=*:-l%*} %(libgcc) --end-group"
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "%{-crt0=*:crt0-%*%O%s; :crt0%O%s}" PICOLIBC_BEGIN
+
+#undef ENDFILE_SPEC
+#define ENDFILE_SPEC PICOLIBC_END
+
+#define EH_TABLES_CAN_BE_READ_ONLY 1
--- /dev/null
+++ b/gcc/config/picolibc.opt
@@ -0,0 +1,33 @@
+; Processor-independent options for picolibc.
+;
+; Copyright (C) 2022 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/>.
+
+-oslib
+Driver Separate Alias(-oslib=)
+
+-oslib=
+Driver Joined
+Specify an OS support library to load after libc.
+
+-crt0
+Driver Separate Alias(-crt0=)
+
+-crt0=
+Driver Joined
+Specify an alternate startup file.

0
packages/gcc/13.1.0/version.desc vendored Normal file
View File

View File

@ -2,5 +2,5 @@ repository='git git://gcc.gnu.org/git/gcc.git'
mirrors='$(CT_Mirrors GNU gcc/gcc-${CT_GCC_VERSION}) $(CT_Mirrors sourceware gcc/releases/gcc-${CT_GCC_VERSION})'
relevantpattern='4.*|. *|.'
origin='GNU'
milestones='4.9 5 6 7 8 9 10 11 12'
milestones='4.9 5 6 7 8 9 10 11 12 13'
archive_formats='.tar.xz .tar.gz'