pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

gcc10-libjit: add package for gcc10's libjit. Doesn't build



Module Name:	pkgsrc-wip
Committed By:	Thomas Klausner <wiz%gatalith.at@localhost>
Pushed By:	wiz
Date:		Sat Apr 1 07:13:39 2023 +0200
Changeset:	0974e6f175ccded0eb4de0b675875c0063b4a60a

Modified Files:
	Makefile
Added Files:
	gcc10-libjit/DESCR
	gcc10-libjit/Makefile
	gcc10-libjit/PLIST
	gcc10-libjit/distinfo
	gcc10-libjit/options.mk
	gcc10-libjit/patches/patch-contrib_download__prerequisites
	gcc10-libjit/patches/patch-fixincludes_inclhack.def
	gcc10-libjit/patches/patch-gcc_Makefile.in
	gcc10-libjit/patches/patch-gcc_config.gcc
	gcc10-libjit/patches/patch-gcc_config.host
	gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-builtins.c
	gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-netbsd.h
	gcc10-libjit/patches/patch-gcc_config_aarch64_driver-aarch64.c
	gcc10-libjit/patches/patch-gcc_config_arm_arm.h
	gcc10-libjit/patches/patch-gcc_config_arm_bpabi.h
	gcc10-libjit/patches/patch-gcc_config_arm_elf.h
	gcc10-libjit/patches/patch-gcc_config_arm_netbsd-eabi.h
	gcc10-libjit/patches/patch-gcc_config_arm_netbsd-elf.h
	gcc10-libjit/patches/patch-gcc_config_sparc_sparc.c
	gcc10-libjit/patches/patch-gcc_configure
	gcc10-libjit/patches/patch-gcc_ggc-common.c
	gcc10-libjit/patches/patch-gcc_lto_lto.c
	gcc10-libjit/patches/patch-gcc_targhooks.c
	gcc10-libjit/patches/patch-isl_configure
	gcc10-libjit/patches/patch-libffi_configure
	gcc10-libjit/patches/patch-libffi_testsuite_libffi.call_float2.c
	gcc10-libjit/patches/patch-libgcc_config.host
	gcc10-libjit/patches/patch-libgcc_crtstuff.c
	gcc10-libjit/patches/patch-libgfortran_io_format.c
	gcc10-libjit/patches/patch-libgfortran_io_io.h
	gcc10-libjit/patches/patch-libgfortran_io_list__read.c
	gcc10-libjit/patches/patch-libgfortran_io_read.c
	gcc10-libjit/patches/patch-libgfortran_runtime_environ.c
	gcc10-libjit/patches/patch-libquadmath_printf_quadmath-printf.c
	gcc10-libjit/patches/patch-libquadmath_strtod_strtod__l.c
	gcc10-libjit/patches/patch-libstdc++-v3_libsupc++_new__opa.cc
	gcc10-libjit/version.mk

Log Message:
gcc10-libjit: add package for gcc10's libjit. Doesn't build

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=0974e6f175ccded0eb4de0b675875c0063b4a60a

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 Makefile                                           |   1 +
 gcc10-libjit/DESCR                                 |   2 +
 gcc10-libjit/Makefile                              | 103 +++++++++
 gcc10-libjit/PLIST                                 |   2 +
 gcc10-libjit/distinfo                              |  39 ++++
 gcc10-libjit/options.mk                            | 164 ++++++++++++++
 .../patches/patch-contrib_download__prerequisites  |  17 ++
 .../patches/patch-fixincludes_inclhack.def         |  36 ++++
 gcc10-libjit/patches/patch-gcc_Makefile.in         |  15 ++
 gcc10-libjit/patches/patch-gcc_config.gcc          | 239 +++++++++++++++++++++
 gcc10-libjit/patches/patch-gcc_config.host         |  15 ++
 .../patch-gcc_config_aarch64_aarch64-builtins.c    |  18 ++
 .../patch-gcc_config_aarch64_aarch64-netbsd.h      |  18 ++
 .../patch-gcc_config_aarch64_driver-aarch64.c      | 184 ++++++++++++++++
 gcc10-libjit/patches/patch-gcc_config_arm_arm.h    |  45 ++++
 gcc10-libjit/patches/patch-gcc_config_arm_bpabi.h  |  22 ++
 gcc10-libjit/patches/patch-gcc_config_arm_elf.h    |  14 ++
 .../patches/patch-gcc_config_arm_netbsd-eabi.h     |  57 +++++
 .../patches/patch-gcc_config_arm_netbsd-elf.h      |  80 +++++++
 .../patches/patch-gcc_config_sparc_sparc.c         |  18 ++
 gcc10-libjit/patches/patch-gcc_configure           |  15 ++
 gcc10-libjit/patches/patch-gcc_ggc-common.c        |  51 +++++
 gcc10-libjit/patches/patch-gcc_lto_lto.c           |  19 ++
 gcc10-libjit/patches/patch-gcc_targhooks.c         |  17 ++
 gcc10-libjit/patches/patch-isl_configure           |  26 +++
 gcc10-libjit/patches/patch-libffi_configure        |  16 ++
 .../patch-libffi_testsuite_libffi.call_float2.c    |  15 ++
 gcc10-libjit/patches/patch-libgcc_config.host      |  25 +++
 gcc10-libjit/patches/patch-libgcc_crtstuff.c       |  15 ++
 gcc10-libjit/patches/patch-libgfortran_io_format.c |  17 ++
 gcc10-libjit/patches/patch-libgfortran_io_io.h     |  18 ++
 .../patches/patch-libgfortran_io_list__read.c      |  17 ++
 gcc10-libjit/patches/patch-libgfortran_io_read.c   |  44 ++++
 .../patches/patch-libgfortran_runtime_environ.c    |  26 +++
 .../patch-libquadmath_printf_quadmath-printf.c     |  26 +++
 .../patches/patch-libquadmath_strtod_strtod__l.c   |  23 ++
 .../patch-libstdc++-v3_libsupc++_new__opa.cc       |  17 ++
 gcc10-libjit/version.mk                            |   2 +
 38 files changed, 1478 insertions(+)

diffs:
diff --git a/Makefile b/Makefile
index 04fdc9be24..257fbceaf1 100644
--- a/Makefile
+++ b/Makefile
@@ -1092,6 +1092,7 @@ SUBDIR+=	gauche-fastcgi
 SUBDIR+=	gauche-pib
 SUBDIR+=	gcalcli-git
 SUBDIR+=	gcc10-aux
+SUBDIR+=	gcc10-libjit
 SUBDIR+=	gcc10snapshot
 SUBDIR+=	gcc42
 SUBDIR+=	gcc43
diff --git a/gcc10-libjit/DESCR b/gcc10-libjit/DESCR
new file mode 100644
index 0000000000..902190a230
--- /dev/null
+++ b/gcc10-libjit/DESCR
@@ -0,0 +1,2 @@
+The GNU Compiler Collection (GCC) includes front ends for C, C++, Objective-C,
+Fortran, and Go.
diff --git a/gcc10-libjit/Makefile b/gcc10-libjit/Makefile
new file mode 100644
index 0000000000..3ddffd4ce8
--- /dev/null
+++ b/gcc10-libjit/Makefile
@@ -0,0 +1,103 @@
+# $NetBSD: Makefile,v 1.19 2022/07/03 15:59:17 wiz Exp $
+
+GCC_PKGNAME=		gcc10
+.include		"version.mk"
+
+DISTNAME=	gcc-${GCC10_DIST_VERSION}
+PKGNAME=	${GCC_PKGNAME}-libjit-${GCC10_DIST_VERSION}
+## When bumping the PKGREVISION of this package the PKGREVISION of
+## lang/gcc10-libs needs to be bumped to be at least 1 more than the
+## PKGREVISION of this package!
+CATEGORIES=	lang
+MASTER_SITES=	${MASTER_SITE_GNU:=gcc/gcc-${GCC10_DIST_VERSION}/}
+EXTRACT_SUFX=	.tar.xz
+
+MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
+HOMEPAGE=	https://gcc.gnu.org/
+COMMENT=	The GNU Compiler Collection (GCC) - 10.0 Release Series
+LICENSE=	gnu-gpl-v2 AND gnu-gpl-v3 AND gnu-lgpl-v2 AND gnu-lgpl-v3
+
+DISTFILES=		${DEFAULT_DISTFILES}
+EXTRACT_ONLY=		${DEFAULT_DISTFILES}
+
+# Relocations result in a linker error on AArch64, but not x86.
+MKPIE_SUPPORTED=	no
+CHECK_RELRO_SKIP+=	${GCC_PKGNAME}/lib/*
+
+NOT_FOR_PLATFORM=	Interix-*-*
+
+USE_LANGUAGES=		c99 c++
+USE_TOOLS+=		gmake makeinfo sed:run tar:build
+USE_TOOLS.NetBSD+=	gsed
+
+# /usr/bin/ld: ./../intl/libintl.a(bindtextdom.o): relocation R_X86_64_32 against symbol `libintl_nl_default_dirname' can not be used when making a shared object; recompile with -fPIC
+CFLAGS+=	-fPIC
+# ld: /usr/lib/libstdc++.a(eh_globals.o): relocation R_X86_64_TPOFF32 against `_ZZN12_GLOBAL__N_110get_globalEvE6global' can not be used when making a shared object; recompile with -fPIC
+CXXFLAGS+=	-fPIC
+
+GNU_CONFIGURE=		yes
+GNU_CONFIGURE_STRICT=	no
+## Build outside ${WRKSRC}
+OBJDIR=			../build
+CONFIGURE_DIRS=		${OBJDIR}
+CONFIGURE_SCRIPT=	../${DISTNAME}/configure
+GCC_SUBPREFIX=		${GCC_PKGNAME}
+GCC_PREFIX=		${PREFIX}/${GCC_SUBPREFIX}
+GNU_CONFIGURE_PREFIX=	${GCC_PREFIX}
+INFO_FILES=		yes
+CONFIGURE_ARGS+=	--disable-libstdcxx-pch
+
+UNLIMIT_RESOURCES+=	datasize
+UNLIMIT_RESOURCES+=	stacksize
+
+CHECK_PORTABILITY_SKIP+=	contrib/*
+
+.include "options.mk"
+
+## For graphite support.
+.if !empty(PKG_OPTIONS:Mgcc-graphite)
+
+post-extract:
+	${TAR} -jxf ${DISTDIR}/${ISL16}.tar.bz2 -C ${WRKSRC}
+	${MV} ${WRKSRC}/${ISL16} ${WRKSRC}/isl
+.endif
+
+.include "../../mk/bsd.prefs.mk"
+
+CONFIGURE_ARGS+=	--enable-languages=jit
+CONFIGURE_ARGS+=	--disable-bootstrap
+CONFIGURE_ARGS+=	--enable-host-shared
+CONFIGURE_ARGS.NetBSD+=	--with-gnu-ld --with-ld=/usr/bin/ld
+CONFIGURE_ARGS.NetBSD+=	--with-gnu-as --with-as=/usr/bin/as
+MAKE_ENV.NetBSD+=	ac_cv_func_clock_gettime=yes
+MAKE_ENV.NetBSD+=	ac_cv_func_gethostbyname_r=no
+MAKE_ENV.NetBSD+=	ac_cv_func_freelocale=no
+MAKE_ENV.NetBSD+=	ac_cv_func_newlocale=no
+MAKE_ENV.NetBSD+=	ac_cv_func_uselocale=no
+
+MAKE_FLAGS+=		BOOT_CFLAGS=${CFLAGS:Q}
+MAKE_FLAGS+=		BOOT_CXXFLAGS=${CXXFLAGS:Q}
+MAKE_FLAGS+=		BOOT_LDFLAGS=${LDFLAGS:Q}
+MAKE_FLAGS+=		LDFLAGS_FOR_TARGET=${LDFLAGS:Q}
+MAKE_FLAGS+=		CFLAGS=${CFLAGS:Q}
+MAKE_FLAGS+=		CXXFLAGS=${CXXFLAGS:Q}
+
+BUILD_TARGET=		all-gcc
+
+pre-configure:
+	${RUN} cd ${WRKSRC} && ${MKDIR} ${OBJDIR}
+
+do-install:
+	${INSTALL_LIB} ${OBJDIR}/gcc/libgccjit.so* ${DESTDIR}${PREFIX}/lib
+
+CHECK_BUILTIN.zlib:= yes
+.include "../../devel/zlib/builtin.mk"
+CHECK_BUILTIN.zlib:= no
+.if ${USE_BUILTIN.zlib:tl} == yes
+CONFIGURE_ARGS+=	--with-system-zlib
+.else
+CONFIGURE_ARGS+=	--without-system-zlib
+.endif
+.include "../../mk/dlopen.buildlink3.mk"
+.include "../../mk/pthread.buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/gcc10-libjit/PLIST b/gcc10-libjit/PLIST
new file mode 100644
index 0000000000..08b8828b4f
--- /dev/null
+++ b/gcc10-libjit/PLIST
@@ -0,0 +1,2 @@
+@comment $NetBSD$
+lib/libgcc-jit.so
diff --git a/gcc10-libjit/distinfo b/gcc10-libjit/distinfo
new file mode 100644
index 0000000000..ed533fc35d
--- /dev/null
+++ b/gcc10-libjit/distinfo
@@ -0,0 +1,39 @@
+$NetBSD: distinfo,v 1.14 2022/07/03 15:59:17 wiz Exp $
+
+BLAKE2s (gcc-10.4.0.tar.xz) = e033158e7c950ad52645d85003a37d3ab04dbdb7cf825a62881dc5b942a9f5d9
+SHA512 (gcc-10.4.0.tar.xz) = 440c08ca746da450d9a1b35e8fd2305cb27e7e6987cd9d0f7d375f3b1fc9e4b0bd7acb3cd7bf795e72fcbead59cdef5b6c152862f5d35cd9fbfe6902101ce648
+Size (gcc-10.4.0.tar.xz) = 75018092 bytes
+BLAKE2s (isl-0.16.1.tar.bz2) = 01c3fc657326e81414986eb7ede6f73e540b97009745ced125cdf7f4a8d80f61
+SHA512 (isl-0.16.1.tar.bz2) = c188667a84dc5bdddb4ab7c35f89c91bf15a8171f4fcaf41301cf285fb7328846d9a367c096012fec4cc69d244f0bc9e95d84c09ec097394cd4093076f2a041b
+Size (isl-0.16.1.tar.bz2) = 1626446 bytes
+SHA1 (patch-contrib_download__prerequisites) = 9cdcde21ab174052911447d20762ddfd40aa8791
+SHA1 (patch-fixincludes_inclhack.def) = 7b00974d3f52a8364190a607f52a5d7e8a6db41a
+SHA1 (patch-gcc_Makefile.in) = c0f97c75ba1d37eae894141edd58bb36b734f651
+SHA1 (patch-gcc_config.gcc) = 8729fc44778fb94856cd3861a440cfdf9c962214
+SHA1 (patch-gcc_config.host) = 8920ce841f6088b365c9b590e3ea9535bd880b40
+SHA1 (patch-gcc_config_aarch64_aarch64-builtins.c) = 87185f5c2e2dbe4195cb19fe6213d2d616d5519b
+SHA1 (patch-gcc_config_aarch64_aarch64-netbsd.h) = abf19e2445bce1773162bddef16cd7f41eb36827
+SHA1 (patch-gcc_config_aarch64_driver-aarch64.c) = 7e17b49924ddd9ff33d049d6539e4df77d14d3e5
+SHA1 (patch-gcc_config_arm_arm.h) = 9d554349869d67d6393552c33a7824f0dd53cb11
+SHA1 (patch-gcc_config_arm_bpabi.h) = 0b0de5ad95442e34397cb46739ef6e36048d6f45
+SHA1 (patch-gcc_config_arm_elf.h) = 57748157084319cb92d892f2ea5b2f3355567551
+SHA1 (patch-gcc_config_arm_netbsd-eabi.h) = 85eb89de6f2e64fac50251f06d7e4eab35903dae
+SHA1 (patch-gcc_config_arm_netbsd-elf.h) = 367d83c808fd7b5b1989d0490b532ad06b425b31
+SHA1 (patch-gcc_config_sparc_sparc.c) = e9cb956f3769642bcd0ba4a477d16c73dea46014
+SHA1 (patch-gcc_configure) = 6a2d8eeeed2bf08c3c81291178e669dc91c913ce
+SHA1 (patch-gcc_ggc-common.c) = 3e325767922ab7d2079fdb9a3d6b6aa531a2fea5
+SHA1 (patch-gcc_lto_lto.c) = 7bd85ac8ade76a28c394f6fbe5d495f91824f79f
+SHA1 (patch-gcc_targhooks.c) = b28d8a9696d07bbfb00b7d8c55193ba99447ff1d
+SHA1 (patch-isl_configure) = 5523c76d95b229b3cd25461b4c2b7af24bf2534e
+SHA1 (patch-libffi_configure) = 22006b20d7f655e2455a7ad613d676703b6c1ccc
+SHA1 (patch-libffi_testsuite_libffi.call_float2.c) = 27b84a11378fb648dfaad0c70abedd77a0a1c1a8
+SHA1 (patch-libgcc_config.host) = d40d4d08c807eeff98cc246d1ea756b5b2c749b0
+SHA1 (patch-libgcc_crtstuff.c) = a16d465039de00c195cf0694560140a9c38f3a25
+SHA1 (patch-libgfortran_io_format.c) = 9bbc5e4f6277bdec785b3690fd08259939a2aa1a
+SHA1 (patch-libgfortran_io_io.h) = d44676239a7f45e42054d24bd5224f43c20055c0
+SHA1 (patch-libgfortran_io_list__read.c) = 589cdb8dcd180b781ededc086e8775224fca5779
+SHA1 (patch-libgfortran_io_read.c) = cf21493396d07a5e8ad0dfb70a8d25a11482fc98
+SHA1 (patch-libgfortran_runtime_environ.c) = c7217704a00f4c0314bbc1838ac6fc966cc854d0
+SHA1 (patch-libquadmath_printf_quadmath-printf.c) = 78e09f1e6d61ee57cee83275093cf46b2335d204
+SHA1 (patch-libquadmath_strtod_strtod__l.c) = 6142c10d34174174cce7f06c37eab04dc431b2dc
+SHA1 (patch-libstdc++-v3_libsupc++_new__opa.cc) = 4183b00a5ee6e61524da4755c825a0c08fd01ed6
diff --git a/gcc10-libjit/options.mk b/gcc10-libjit/options.mk
new file mode 100644
index 0000000000..9b33db4846
--- /dev/null
+++ b/gcc10-libjit/options.mk
@@ -0,0 +1,164 @@
+# $NetBSD: options.mk,v 1.2 2021/10/01 11:56:13 nia Exp $
+
+PKG_OPTIONS_VAR=	PKG_OPTIONS.${GCC_PKGNAME}
+PKG_SUPPORTED_OPTIONS=	nls gcc-inplace-math gcc-c++ gcc-fortran \
+			gcc-go gcc-objc gcc-objc++ gcc-graphite \
+			always-libgcc
+PKG_SUGGESTED_OPTIONS=	gcc-c++ gcc-fortran gcc-objc gcc-objc++ \
+			gcc-graphite gcc-inplace-math
+
+.include "../../mk/bsd.fast.prefs.mk"
+
+.if ${OPSYS} == "NetBSD"
+PKG_SUGGESTED_OPTIONS+=	nls
+.elif ${OPSYS} == "Linux"
+PKG_SUGGESTED_OPTIONS+=	nls
+.elif ${OPSYS} == "DragonFly"
+PKG_SUGGESTED_OPTIONS+=	nls
+.elif ${OPSYS} == "SunOS"
+PKG_SUGGESTED_OPTIONS+=	gcc-inplace-math always-libgcc
+.else
+.endif
+
+.include "../../mk/compiler.mk"
+.if empty(PKGSRC_COMPILER:Mgcc)
+PKG_SUGGESTED_OPTIONS+=			always-libgcc
+.endif
+
+###
+### Determine if multilib is avalible.
+###
+MULTILIB_SUPPORTED?=	unknown
+.if ${MACHINE_PLATFORM:MLinux-*-x86_64}
+.  if exists(/usr/include/x86_64-linux-gnu/gnu)
+_GNU_INCLUDE_DIR=	/usr/include/x86_64-linux-gnu/gnu
+.  else
+_GNU_INCLUDE_DIR=	/usr/include/gnu
+.  endif
+.  if exists(${_GNU_INCLUDE_DIR}/stubs-64.h) && \
+     !exists(${_GNU_INCLUDE_DIR}/stubs-32.h)
+MULTILIB_SUPPORTED=	No
+.  else
+MULTILIB_SUPPORTED=	Yes
+.  endif
+.endif
+.if !empty(MULTILIB_SUPPORTED:M[Yy][Ee][Ss])
+PKG_SUPPORTED_OPTIONS+=	gcc-multilib
+PKG_SUGGESTED_OPTIONS+=	gcc-multilib
+.endif
+
+.include "../../mk/bsd.options.mk"
+
+###
+### Don't install libgcc if it's older than the system one
+###
+.if empty(PKG_OPTIONS:Malways-libgcc)
+
+.  for _libdir_ in ${_OPSYS_LIB_DIRS}
+.    if exists(${_libdir_})
+BASE_LIBGCC!=			find ${_libdir_} -name libgcc_s.so
+BASE_LIBGCC_MATCH_STRING!=	${ECHO} ${BASE_LIBGCC} ${GCC10_DIST_VERSION} | \
+				${AWK} -f ../../mk/scripts/larger_symbol_version.awk
+.      if ${BASE_LIBGCC_MATCH_STRING:Mnewer}
+DELETE_INSTALLED_LIBGCC=	yes
+.      endif
+.    endif
+.  endfor
+
+.  if ${DELETE_INSTALLED_LIBGCC:Uno}
+post-install:	delete-installed-libgcc
+
+.PHONY: delete-installed-libgcc
+delete-installed-libgcc:
+	${FIND} ${DESTDIR} -name 'libgcc_s.so*' -delete
+
+.  endif
+
+.endif
+
+###
+### Native Language Support
+###
+.if !empty(PKG_OPTIONS:Mnls)
+USE_TOOLS+=		msgfmt
+CONFIGURE_ARGS+=	--enable-nls
+CONFIGURE_ARGS+=	--with-libiconv-prefix=${BUILDLINK_PREFIX.iconv}
+MAKE_ENV+=		ICONVPREFIX=${BUILDLINK_PREFIX.iconv}
+.include "../../converters/libiconv/buildlink3.mk"
+.include "../../devel/gettext-lib/buildlink3.mk"
+.else
+CONFIGURE_ARGS+=	--disable-nls
+.endif
+
+###
+### Multilib Support
+###
+.if (!empty(MULTILIB_SUPPORTED:M[Yy][Ee][Ss]) && \
+      empty(PKG_OPTIONS:Mgcc-multilib) ) || \
+    !empty(MULTILIB_SUPPORTED:M[Nn][Oo])
+CONFIGURE_ARGS+=	--disable-multilib
+.endif
+
+###
+### Build math libraries in place
+###
+.if !empty(PKG_OPTIONS:Mgcc-inplace-math)
+.  include "../../devel/gmp/inplace.mk"
+.  include "../../math/mpcomplex/inplace.mk"
+.  include "../../math/mpfr/inplace.mk"
+.else
+CONFIGURE_ARGS+=	--with-gmp=${BUILDLINK_PREFIX.gmp}
+CONFIGURE_ARGS+=	--with-mpc=${BUILDLINK_PREFIX.mpcomplex}
+CONFIGURE_ARGS+=	--with-mpfr=${BUILDLINK_PREFIX.mpfr}
+LIBS.SunOS+=		-lgmp
+.  include "../../devel/gmp/buildlink3.mk"
+.  include "../../math/mpcomplex/buildlink3.mk"
+.  include "../../math/mpfr/buildlink3.mk"
+.endif
+
+
+###
+### Graphite Support
+###
+.if !empty(PKG_OPTIONS:Mgcc-graphite)
+ISL16=			isl-0.16.1
+SITES.${ISL16}.tar.bz2=	${MASTER_SITE_GNU:=gcc/infrastructure/}
+DISTFILES+=		${ISL16}.tar.bz2
+.endif
+
+###
+### Optional languages
+### Ada could be added although there is a bootstrapping issue.
+###
+
+.if !empty(PKG_OPTIONS:Mgcc-objc++)
+.  if empty(PKG_OPTIONS:Mgcc-c++)
+PKG_OPTIONS+=		gcc-c++
+.  endif
+.  if empty(PKG_OPTIONS:Mgcc-objc)
+PKG_OPTIONS+=		gcc-objc
+.  endif
+LANGS+=			obj-c++
+.endif
+
+.if !empty(PKG_OPTIONS:Mgcc-objc)
+LANGS+=			objc
+.endif
+
+.if !empty(PKG_OPTIONS:Mgcc-go)
+LANGS+=			go
+.endif
+
+.if !empty(PKG_OPTIONS:Mgcc-fortran)
+LANGS+=			fortran
+.endif
+
+.if !empty(PKG_OPTIONS:Mgcc-c++)
+LANGS+=			c++
+USE_TOOLS+=		perl
+CONFIGURE_ARGS+=	--enable-__cxa_atexit
+CONFIGURE_ARGS+=	--with-gxx-include-dir=${GCC_PREFIX}/include/c++/
+.else
+CONFIGURE_ARGS+=	--disable-build-with-cxx
+CONFIGURE_ARGS+=	--disable-build-poststage1-with-cxx
+.endif
diff --git a/gcc10-libjit/patches/patch-contrib_download__prerequisites b/gcc10-libjit/patches/patch-contrib_download__prerequisites
new file mode 100644
index 0000000000..9f8a76a0d1
--- /dev/null
+++ b/gcc10-libjit/patches/patch-contrib_download__prerequisites
@@ -0,0 +1,17 @@
+$NetBSD: patch-contrib_download__prerequisites,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+Non-portable test
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90142
+
+--- contrib/download_prerequisites.orig	2017-04-11 16:34:07.000000000 +0000
++++ contrib/download_prerequisites
+@@ -122,7 +122,7 @@ md5_check() {
+   md5_checksum_output=$(md5 -r "${file_to_check}")
+   # Grab the text before the first space
+   md5_checksum_detected="${md5_checksum_output%% *}"
+-  [ "${md5_checksum_expected}" == "${md5_checksum_detected}" ] \
++  [ "${md5_checksum_expected}" = "${md5_checksum_detected}" ] \
+     || die "Cannot verify integrity of possibly corrupted file ${file_to_check}"
+   echo "${file_to_check}: OK"
+ }
diff --git a/gcc10-libjit/patches/patch-fixincludes_inclhack.def b/gcc10-libjit/patches/patch-fixincludes_inclhack.def
new file mode 100644
index 0000000000..fff9437cfe
--- /dev/null
+++ b/gcc10-libjit/patches/patch-fixincludes_inclhack.def
@@ -0,0 +1,36 @@
+$NetBSD: patch-fixincludes_inclhack.def,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+A workaround for Catalina SDK bug from
+https://github.com/Homebrew/homebrew-core/pull/44762
+
+--- fixincludes/inclhack.def.orig	2020-03-04 08:29:59.000000000 +0000
++++ fixincludes/inclhack.def
+@@ -1269,6 +1269,28 @@ fix = {
+ };
+ 
+ /*
++ *  macOS 10.15 <Availability.h> does not define __OSX_AVAILABLE_STARTING on
++ *  non-clang compilers.
++ */
++fix = {
++    hackname  = darwin_availability;
++    mach      = "*-*-darwin*";
++    files     = Availability.h;
++    select    = "#endif /\\* __OSX_AVAILABLE_STARTING \\*/";
++    c_fix     = format;
++    c_fix_arg = <<- _EOFix_
++	#endif /* __OSX_AVAILABLE_STARTING */
++	#ifndef __OSX_AVAILABLE_STARTING
++	  #define __OSX_AVAILABLE_STARTING(_osx, _ios)
++	  #define __OSX_AVAILABLE_BUT_DEPRECATED(_osxIntro, _osxDep, _iosIntro, _iosDep)
++	  #define __OSX_AVAILABLE_BUT_DEPRECATED_MSG(_osxIntro, _osxDep, _iosIntro, _iosDep, _msg)
++	#endif
++	_EOFix_;
++
++    test_text = "#endif /* __OSX_AVAILABLE_STARTING */";
++};
++
++/*
+  *  macOS 10.12 <AvailabilityInternal.h> uses __attribute__((availability))
+  *  unconditionally.
+  */
diff --git a/gcc10-libjit/patches/patch-gcc_Makefile.in b/gcc10-libjit/patches/patch-gcc_Makefile.in
new file mode 100644
index 0000000000..cd32c67b2f
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_Makefile.in
@@ -0,0 +1,15 @@
+$NetBSD: patch-gcc_Makefile.in,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+Add gcc libdir to a programs rpath so that _this gcc's_ support libraries
+are found.
+
+--- gcc/Makefile.in.orig	2017-04-18 18:10:27.000000000 +0000
++++ gcc/Makefile.in
+@@ -2112,6 +2112,7 @@ prefix.o: $(BASEVER)
+ # Language-independent files.
+ 
+ DRIVER_DEFINES = \
++  -DLINK_LIBGCC_SPEC="\"%D $(LINKER_RPATH_FLAG) $(prefix)//lib/%M $(LINKER_RPATH_FLAG) $(libdir)/%M \"" \
+   -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \
+   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \
+   -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" \
diff --git a/gcc10-libjit/patches/patch-gcc_config.gcc b/gcc10-libjit/patches/patch-gcc_config.gcc
new file mode 100644
index 0000000000..d8a661887c
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config.gcc
@@ -0,0 +1,239 @@
+$NetBSD: patch-gcc_config.gcc,v 1.4 2022/07/03 15:59:17 wiz Exp $
+
+Match what is in NetBSD src. Fixes at least aarch64eb, and
+probably several others.
+
+Allow builds on Darwin 21.
+
+--- gcc/config.gcc.orig	2021-04-08 04:56:28.033740243 -0700
++++ gcc/config.gcc	2022-02-02 10:27:44.252878051 -0800
+@@ -462,6 +462,16 @@
+         cpu_type=m32r
+ 	extra_options="${extra_options} g.opt"
+         ;;
++m5200-*-*|m5407-*-*)
++	cpu_type=m68k
++	extra_headers=math-68881.h
++	extra_options="${extra_options} m68k/m68k-tables.opt"
++	;;
++m680[012]0-*-*)
++	cpu_type=m68k
++	extra_headers=math-68881.h
++	extra_options="${extra_options} m68k/m68k-tables.opt"
++	;;
+ m68k-*-*)
+ 	extra_headers=math-68881.h
+ 	extra_options="${extra_options} m68k/m68k-tables.opt"
+@@ -877,6 +887,11 @@
+   case ${enable_threads} in
+     "" | yes | posix) thread_file='posix' ;;
+   esac
++  case ${target} in
++    arm*-* | i[34567]86-* | powerpc*-* | sparc*-* | x86_64-*)
++      default_gnu_indirect_function=yes
++      ;;
++  esac
+   nbsd_tm_file="netbsd.h netbsd-stdint.h netbsd-elf.h"
+   default_use_cxa_atexit=yes
+   target_has_targetdm=yes
+@@ -1111,6 +1126,11 @@
+ 	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-netbsd.h"
+ 	tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-netbsd"
+ 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
++	case $target in
++	aarch64_be-*)
++		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
++		;;
++	esac
+ 	;;
+ aarch64*-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h"
+@@ -1252,7 +1272,6 @@
+ 	with_tls=${with_tls:-gnu}
+ 	;;
+ arm*-*-netbsdelf*)
+-	target_cpu_cname="strongarm"
+ 	tmake_file="${tmake_file} arm/t-arm"
+ 	tm_file="dbxelf.h elfos.h ${nbsd_tm_file} arm/elf.h"
+ 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
+@@ -1261,26 +1280,34 @@
+ 	esac
+ 	case ${target} in
+ 	arm*-*-netbsdelf-*eabi*)
+-	    tm_file="$tm_file arm/bpabi.h arm/netbsd-elf.h arm/netbsd-eabi.h"
+-	    tmake_file="$tmake_file arm/t-bpabi arm/t-netbsdeabi"
++	    tm_file="${tm_file} arm/bpabi.h arm/netbsd-elf.h arm/netbsd-eabi.h"
++	    #tmake_file="$tmake_file arm/t-bpabi"
++	    # The EABI requires the use of __cxa_atexit.
++	    default_use_cxa_atexit=yes
++	    # NetBSD native configuration pulls this in, not sure why this must
++	    # be here explicitly for pkgsrc.
++	    gcc_cv_initfini_array=yes
+ 	    ;;
+ 	*)
+-	    tm_file="$tm_file arm/netbsd-elf.h"
++	    tm_file="$tm_file arm/bpabi.h arm/netbsd-elf.h"
++	    #tmake_file="$tmake_file arm/t-bpabi arm/t-netbsdeabi"
+ 	    tmake_file="$tmake_file arm/t-netbsd"
+ 	    ;;
+ 	esac
+ 	tm_file="${tm_file} arm/aout.h arm/arm.h"
+ 	case ${target} in
+ 	arm*-*-netbsdelf-*eabihf*)
+-	    # Hard-float requires at least Arm v5te
+-	    target_cpu_cname="arm10e"
+ 	    tm_defines="${tm_defines} TARGET_DEFAULT_FLOAT_ABI=ARM_FLOAT_ABI_HARD"
+ 	    ;;
+ 	esac
+ 	case ${target} in
+-	armv6*) target_cpu_cname="arm1176jzf-s";;
+-	armv7*) target_cpu_cname="generic-armv7-a";;
++	armv4*) with_cpu=${with_cpu:-strongarm};;
++	armv6*) with_cpu=${with_cpu:-arm1176jzf-s};;
++	armv7*) with_cpu=${with_cpu:-cortex-a8};;
++	arm*eabihf*) with_cpu=${with_cpu:-arm10e};;
++	arm*) with_cpu=${with_cpu:-arm9e};;
+ 	esac
++	target_cpu_cname="$with_cpu"
+ 	;;
+ arm*-*-linux-* | arm*-*-uclinuxfdpiceabi)
+ 	tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
+@@ -1928,6 +1955,7 @@
+ 	;;
+ x86_64-*-netbsd*)
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${nbsd_tm_file} i386/x86-64.h i386/netbsd64.h"
++	tmake_file="${tmake_file} i386/t-netbsd64"
+ 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
+ 	;;
+ i[34567]86-*-openbsd*)
+@@ -2250,6 +2278,16 @@
+ 		target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
+ 	fi
+ 	;;
++ia64*-*-netbsd*)
++	tm_file="${tm_file} dbxelf.h elfos.h ${nbsd_tm_file} ia64/sysv4.h ia64/netbsd.h"
++	target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
++	tmake_file="${tmake_file} ia64/t-ia64"
++	if test x$with_system_libunwind != xyes ; then
++		tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
++	fi
++	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
++	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
++	;;
+ ia64*-*-freebsd*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file} ia64/sysv4.h ia64/freebsd.h"
+ 	target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
+@@ -2362,8 +2400,25 @@
+ 		;;
+ 	esac
+ 	;;
+-m68k*-*-netbsdelf*)
++m68010-*-netbsdelf* | m68k-*-netbsdelf* | m5407-*-netbsdelf*)
+ 	default_m68k_cpu=68020
++	case ${target} in
++	m5407*)
++		with_arch=${with_arch:-cf}
++		target_cpu_default="mcf5475"
++#	        target="`echo ${target} | sed 's/m68kcf/m68k/'`"
++		;;
++	m68010*)
++		target_cpu_default="m68010"
++		tmake_file="${tmake_file} m68k/t-m68kelf m68k/t-m68010-netbsd"
++		default_m68k_cpu=68010
++		tmake_file="${tmake_file} m68k/t-floatlib"
++		;;
++	*)
++		with_arch=${with_arch:-m68k}
++		tmake_file="${tmake_file} m68k/t-floatlib"
++		;;
++	esac
+ 	default_cf_cpu=5475
+ 	tm_file="${tm_file} dbxelf.h elfos.h ${nbsd_tm_file} m68k/netbsd-elf.h"
+ 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
+@@ -2503,6 +2558,26 @@
+ 	# automatically detect that GAS supports it, yet we require it.
+ 	gcc_cv_initfini_array=yes
+ 	;;
++riscv*-*-netbsd*)			# NetBSD RISC-V
++	tm_file="elfos.h ${tm_file} ${nbsd_tm_file} riscv/netbsd.h"
++	tm_defines="${tm_defines} CHAR_FAST8=1 SHORT_FAST16=1"
++	case ${target} in
++	  riscv32*) tm_defines="${tm_defines} TARGET_64BIT_DEFAULT=0" ;;
++	  *) tmake_file="${tmake_file} riscv/t-netbsd64" ;;
++	esac
++	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
++	tmake_file="${tmake_file} riscv/t-riscv"
++	gnu_ld=yes
++	gas=yes
++	gcc_cv_initfini_array=yes
++	;;
++mips64*-*-netbsd*)			# NetBSD/mips64, either endian.
++	target_cpu_default="MASK_ABICALLS|MASK_FLOAT64|MASK_SOFT_FLOAT_ABI"
++	tm_file="elfos.h ${tm_file} mips/elf.h ${nbsd_tm_file} mips/netbsd.h mips/netbsd64.h"
++	tmake_file="${tmake_file} mips/t-netbsd64"
++	tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_N32"
++	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
++	;;
+ mips*-*-netbsd*)			# NetBSD/mips, either endian.
+ 	target_cpu_default="MASK_ABICALLS"
+ 	tm_file="elfos.h ${tm_file} mips/elf.h ${nbsd_tm_file} mips/netbsd.h"
+@@ -2918,11 +2993,24 @@
+ 		;;
+ 	esac
+ 	;;
+-powerpc-*-netbsd*)
+-	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h ${nbsd_tm_file} freebsd-spec.h rs6000/sysv4.h rs6000/netbsd.h"
++powerpc*-*-netbsd*)
++	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h ${nbsd_tm_file} freebsd-spec.h"
++	case ${target} in
++	    powerpc64*)
++		tm_file="rs6000/biarch64.h ${tm_file}"
++		tm_file="${tm_file} rs6000/sysv4.h rs6000/default64.h rs6000/netbsd64.h"
++		tmake_file="${tmake_file} rs6000/t-netbsd64"
++		;;
++	    *)
++		tm_file="${tm_file} rs6000/sysv4.h rs6000/netbsd.h"
++		tmake_file="${tmake_file} rs6000/t-netbsd"
++		;;
++	esac
+ 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
+-	tmake_file="${tmake_file} rs6000/t-netbsd"
+-	extra_options="${extra_options} rs6000/sysv4.opt"
++	extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
++	if test x${enable_secureplt} != xno; then
++	    tm_file="rs6000/secureplt.h ${tm_file}"
++	fi
+ 	;;
+ powerpc-*-eabisimaltivec*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabisim.h rs6000/eabialtivec.h"
+@@ -3394,9 +3482,11 @@
+ sparc64-*-netbsd*)
+ 	tm_file="sparc/biarch64.h ${tm_file}"
+ 	tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h ${nbsd_tm_file} sparc/netbsd-elf.h"
++	tm_file="${tm_file} sparc/default64.h"
+ 	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
+ 	extra_options="${extra_options} sparc/long-double-switch.opt"
+ 	tmake_file="${tmake_file} sparc/t-sparc sparc/t-netbsd64"
++	with_cpu=ultrasparc
+ 	;;
+ sparc64-*-openbsd*)
+ 	tm_file="sparc/openbsd1-64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp64-elf.h"
+@@ -3911,6 +4001,9 @@
+     frv550-*-*linux*)
+       with_cpu=fr550
+       ;;
++    m5200-*-*|m5407-*-*)
++      with_cpu=${default_cf_cpu}
++      ;;
+     m68k*-*-*)
+       case "$with_arch" in
+ 	"cf")
+@@ -4421,7 +4514,7 @@
+ 		esac
+ 		;;
+ 
+-	fido-*-* | m68k*-*-*)
++	fido-*-* | m68k*-*-* | m5200-*-* | m5407-*-*)
+ 		supported_defaults="arch cpu"
+ 		case "$with_arch" in
+ 		"" | "m68k"| "cf")
diff --git a/gcc10-libjit/patches/patch-gcc_config.host b/gcc10-libjit/patches/patch-gcc_config.host
new file mode 100644
index 0000000000..80c5c521fd
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config.host
@@ -0,0 +1,15 @@
+$NetBSD: patch-gcc_config.host,v 1.1 2020/10/20 18:37:37 tnn Exp $
+
+Add aarch64*-*-netbsd*.
+
+--- gcc/config.host.orig	2020-07-23 06:35:17.316384243 +0000
++++ gcc/config.host
+@@ -99,7 +99,7 @@ case ${host} in
+ esac
+ 
+ case ${host} in
+-  aarch64*-*-freebsd* | aarch64*-*-linux* | aarch64*-*-fuchsia*)
++  aarch64*-*-freebsd* | aarch64*-*-netbsd* | aarch64*-*-linux* | aarch64*-*-fuchsia*)
+     case ${target} in
+       aarch64*-*-*)
+ 	host_extra_gcc_objs="driver-aarch64.o"
diff --git a/gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-builtins.c b/gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-builtins.c
new file mode 100644
index 0000000000..dac4d994e7
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-builtins.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-gcc_config_aarch64_aarch64-builtins.c,v 1.2 2021/02/13 15:56:17 maya Exp $
+
+initialise subtarget builtins so cabs*() are renamed.
+https://gcc.gnu.org/pipermail/gcc-patches/2021-February/565289.html
+
+--- gcc/config/aarch64/aarch64-builtins.c.orig	2017-01-20 21:03:41.000000000 +0000
++++ gcc/config/aarch64/aarch64-builtins.c	2018-11-10 00:44:41.905576216 +0000
+@@ -1303,6 +1303,10 @@ aarch64_general_init_builtins (void)
+ 
+   if (TARGET_MEMTAG)
+     aarch64_init_memtag_builtins ();
++
++#ifdef SUBTARGET_INIT_BUILTINS
++  SUBTARGET_INIT_BUILTINS;
++#endif
+ }
+ 
+ /* Implement TARGET_BUILTIN_DECL for the AARCH64_BUILTIN_GENERAL group.  */
diff --git a/gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-netbsd.h b/gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-netbsd.h
new file mode 100644
index 0000000000..c94f2cbd37
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_aarch64_aarch64-netbsd.h
@@ -0,0 +1,18 @@
+$NetBSD: patch-gcc_config_aarch64_aarch64-netbsd.h,v 1.1 2021/04/24 09:35:31 mrg Exp $
+
+Match what is in NetBSD src.  Fixes at least aarch64eb, and
+probably several others.
+
+--- gcc/config/aarch64/aarch64-netbsd.h.orig	2021-04-08 04:56:28.033740243 -0700
++++ gcc/config/aarch64/aarch64-netbsd.h	2021-04-24 00:16:41.451665444 -0700
+@@ -20,6 +20,10 @@
+ #ifndef GCC_AARCH64_NETBSD_H
+ #define GCC_AARCH64_NETBSD_H
+ 
++/* NetBSD malloc(3) does 64, not 128 bytes. */
++#undef MALLOC_ABI_ALIGNMENT
++#define MALLOC_ABI_ALIGNMENT  64
++
+ #define TARGET_LINKER_BIG_EMULATION "aarch64nbsdb"
+ #define TARGET_LINKER_LITTLE_EMULATION "aarch64nbsd"
+ 
diff --git a/gcc10-libjit/patches/patch-gcc_config_aarch64_driver-aarch64.c b/gcc10-libjit/patches/patch-gcc_config_aarch64_driver-aarch64.c
new file mode 100644
index 0000000000..f0f2bfef5f
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_aarch64_driver-aarch64.c
@@ -0,0 +1,184 @@
+$NetBSD: patch-gcc_config_aarch64_driver-aarch64.c,v 1.1 2021/04/24 09:35:31 mrg Exp $
+
+Match what is in NetBSD src.  Fixes at least aarch64eb, and
+probably several others.
+
+--- gcc/config/aarch64/driver-aarch64.c.orig	2021-04-08 04:56:28.041740341 -0700
++++ gcc/config/aarch64/driver-aarch64.c	2021-04-24 00:16:45.471750258 -0700
+@@ -25,6 +25,7 @@
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
++#include "diagnostic-core.h"
+ 
+ /* Defined in common/config/aarch64/aarch64-common.c.  */
+ std::string aarch64_get_extension_string_for_isa_flags (uint64_t, uint64_t);
+@@ -244,6 +245,14 @@
+    ARGC and ARGV are set depending on the actual arguments given
+    in the spec.  */
+ 
++#ifdef __NetBSD__
++/* The NetBSD/arm64 platform may not export linux-style /proc/cpuinfo,
++   but the data is available via a sysctl(3) interface.  */
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#include <aarch64/armreg.h>
++#endif
++
+ const char *
+ host_detect_local_cpu (int argc, const char **argv)
+ {
+@@ -282,6 +291,7 @@
+   if (!arch && !tune && !cpu)
+     goto not_found;
+ 
++#ifndef __NetBSD__
+   fcpu_info = getenv ("GCC_CPUINFO");
+   if (fcpu_info)
+     f = fopen (fcpu_info, "r");
+@@ -374,6 +384,145 @@
+ 
+   fclose (f);
+   f = NULL;
++#else
++  unsigned int curcpu;
++  size_t len;
++  char impl_buf[8];
++  int mib[2], ncpu;
++
++  mib[0] = CTL_HW;
++  mib[1] = HW_NCPU; 
++  len = sizeof(ncpu);
++  if (sysctl(mib, 2, &ncpu, &len, NULL, 0) == -1)
++    goto not_found;
++
++  for (curcpu = 0; curcpu < ncpu; curcpu++)
++    {
++      char path[128];
++      struct aarch64_sysctl_cpu_id id;
++
++      len = sizeof id;
++      snprintf(path, sizeof path, "machdep.cpu%d.cpu_id", curcpu);
++      if (sysctlbyname(path, &id, &len, NULL, 0) != 0)
++        goto not_found;
++
++      unsigned cimp = __SHIFTOUT(id.ac_midr, MIDR_EL1_IMPL);
++      if (cimp == INVALID_IMP)
++        goto not_found;
++
++      if (imp == INVALID_IMP)
++        imp = cimp;
++	/* FIXME: BIG.little implementers are always equal. */
++      else if (imp != cimp)
++        goto not_found;
++  
++      unsigned cvariant = __SHIFTOUT(id.ac_midr, MIDR_EL1_VARIANT);
++      if (!contains_core_p (variants, cvariant))
++        {
++          if (n_variants == 2)
++            goto not_found;
++  
++          variants[n_variants++] = cvariant;
++  	}
++
++      unsigned ccore = __SHIFTOUT(id.ac_midr, MIDR_EL1_PARTNUM);
++      if (!contains_core_p (cores, ccore))
++  	{
++  	  if (n_cores == 2)
++  	    goto not_found;
++  
++  	  cores[n_cores++] = ccore;
++  	}
++
++      if (!tune && !processed_exts)
++        {
++          std::string exts;
++
++	  /* These are all the extensions from aarch64-option-extensions.def.  */
++          if (__SHIFTOUT(id.ac_aa64pfr0, ID_AA64PFR0_EL1_FP) == ID_AA64PFR0_EL1_FP_IMPL)
++	    exts += "fp ";
++          if (__SHIFTOUT(id.ac_aa64pfr0, ID_AA64PFR0_EL1_ADVSIMD) == ID_AA64PFR0_EL1_ADV_SIMD_IMPL)
++	    exts += "asimd ";
++#ifdef ID_AA64ISAR0_EL1_RDM
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_RDM) == ID_AA64ISAR0_EL1_RDM_SQRDML)
++	    exts += "asimdrdm ";
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_DP) == ID_AA64ISAR0_EL1_DP_UDOT)
++	    exts += "asimddp ";
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_FHM) == ID_AA64ISAR0_EL1_FHM_FMLAL)
++	    exts += "asimdfml ";
++#endif
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_AES) == ID_AA64ISAR0_EL1_AES_AES)
++	    exts += "aes ";
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_AES) == ID_AA64ISAR0_EL1_AES_PMUL)
++	    exts += "aes pmull ";
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_CRC32) == ID_AA64ISAR0_EL1_CRC32_CRC32X)
++	    exts += "crc32 ";
++#ifdef ID_AA64ISAR0_EL1_ATOMIC
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_ATOMIC) == ID_AA64ISAR0_EL1_ATOMIC_SWP)
++	    exts += "atomics ";
++#endif
++          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA1) & ID_AA64ISAR0_EL1_SHA1_SHA1CPMHSU) != 0)
++	    exts += "sha1 ";
++          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA2) & ID_AA64ISAR0_EL1_SHA2_SHA256HSU) != 0)
++	    exts += "sha2 ";
++#ifdef ID_AA64ISAR0_EL1_SHA2_SHA512HSU
++          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA2) & ID_AA64ISAR0_EL1_SHA2_SHA512HSU) != 0)
++	    exts += "sha512 ";
++          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA3) & ID_AA64ISAR0_EL1_SHA3_EOR3) != 0)
++	    exts += "sha3 ";
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SM3) == ID_AA64ISAR0_EL1_SM3_SM3)
++	    exts += "sm3 ";
++          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SM4) == ID_AA64ISAR0_EL1_SM4_SM4)
++	    exts += "sm4 ";
++          if (__SHIFTOUT(id.ac_aa64pfr0, ID_AA64PFR0_EL1_SVE) == ID_AA64PFR0_EL1_SVE_IMPL)
++	    exts += "sve ";
++          if (__SHIFTOUT(id.ac_aa64isar1, ID_AA64ISAR1_EL1_LRCPC) == ID_AA64ISAR1_EL1_LRCPC_PR)
++	    exts += "lrcpc ";
++#endif
++
++          for (i = 0; i < num_exts; i++)
++            {
++	      const char *p = aarch64_extensions[i].feat_string;
++
++	      /* If the feature contains no HWCAPS string then ignore it for the
++		 auto detection.  */
++	      if (*p == '\0')
++		continue;
++
++	      bool enabled = true;
++
++	      /* This may be a multi-token feature string.  We need
++		 to match all parts, which could be in any order.  */
++	      size_t len = strlen (exts.c_str());
++	      do
++		{
++		  const char *end = strchr (p, ' ');
++		  if (end == NULL)
++		    end = strchr (p, '\0');
++		  if (memmem (exts.c_str(), len, p, end - p) == NULL)
++		    {
++		      /* Failed to match this token.  Turn off the
++			 features we'd otherwise enable.  */
++		      enabled = false;
++		      break;
++		    }
++		  if (*end == '\0')
++		    break;
++		  p = end + 1;
++		}
++	      while (1);
++
++              if (enabled)
++                extension_flags |= aarch64_extensions[i].flag;
++              else
++                extension_flags &= ~(aarch64_extensions[i].flag);
++            }
++
++          processed_exts = true;
++	}
++    }
++  /* End of NetBSD specific section.  */
++#endif
+ 
+   /* Weird cpuinfo format that we don't know how to handle.  */
+   if (n_cores == 0
diff --git a/gcc10-libjit/patches/patch-gcc_config_arm_arm.h b/gcc10-libjit/patches/patch-gcc_config_arm_arm.h
new file mode 100644
index 0000000000..8978522653
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_arm_arm.h
@@ -0,0 +1,45 @@
+$NetBSD: patch-gcc_config_arm_arm.h,v 1.1 2022/02/02 22:07:28 mrg Exp $
+
+--- gcc/config/arm/arm.h.orig	2021-04-08 04:56:28.057740534 -0700
++++ gcc/config/arm/arm.h	2022-01-31 21:11:39.595024008 -0800
+@@ -937,6 +937,11 @@
+ #define ARM_UNWIND_INFO  0
+ #endif
+ 
++/* Overriden by config/arm/netbsd-eabi.h.  */
++#ifndef ARM_DWARF_UNWIND_TABLES
++#define ARM_DWARF_UNWIND_TABLES 0
++#endif
++
+ /* Use r0 and r1 to pass exception handling information.  */
+ #define EH_RETURN_DATA_REGNO(N) (((N) < 2) ? N : INVALID_REGNUM)
+ 
+@@ -948,11 +953,19 @@
+ #define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_pcrel
+ #endif
+ 
++#if ARM_DWARF_UNWIND_TABLES
++/* DWARF unwinding uses the normal indirect/pcrel vs absptr format
++   for 32bit platforms. */
++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
++  (flag_pic ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \
++            : DW_EH_PE_absptr)
++#else
+ /* ttype entries (the only interesting data references used)
+    use TARGET2 relocations.  */
+ #define ASM_PREFERRED_EH_DATA_FORMAT(code, data) \
+   (((code) == 0 && (data) == 1 && ARM_UNWIND_INFO) ? ARM_TARGET2_DWARF_FORMAT \
+ 			       : DW_EH_PE_absptr)
++#endif
+ 
+ /* The native (Norcroft) Pascal compiler for the ARM passes the static chain
+    as an invisible last argument (possible since varargs don't exist in
+@@ -2342,7 +2355,7 @@
+ 
+ /* -mcpu=native handling only makes sense with compiler running on
+    an ARM chip.  */
+-#if defined(__arm__)
++#if defined(__arm__) && defined(__linux__)
+ extern const char *host_detect_local_cpu (int argc, const char **argv);
+ #define HAVE_LOCAL_CPU_DETECT
+ # define MCPU_MTUNE_NATIVE_FUNCTIONS			\
diff --git a/gcc10-libjit/patches/patch-gcc_config_arm_bpabi.h b/gcc10-libjit/patches/patch-gcc_config_arm_bpabi.h
new file mode 100644
index 0000000000..c06eacf5b9
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_arm_bpabi.h
@@ -0,0 +1,22 @@
+$NetBSD: patch-gcc_config_arm_bpabi.h,v 1.1 2022/02/02 22:07:28 mrg Exp $
+
+--- gcc/config/arm/bpabi.h.orig	2021-04-08 04:56:28.061740583 -0700
++++ gcc/config/arm/bpabi.h	2022-01-31 21:13:16.734263818 -0800
+@@ -24,6 +24,7 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ /* Use the AAPCS ABI by default.  */
++#undef ARM_DEFAULT_ABI
+ #define ARM_DEFAULT_ABI ARM_ABI_AAPCS
+ 
+ /* Assume that AAPCS ABIs should adhere to the full BPABI.  */
+@@ -107,7 +108,9 @@
+ /* The BPABI specifies the use of .{init,fini}_array.  Therefore, we
+    do not want GCC to put anything into the .{init,fini} sections.  */
+ #undef INIT_SECTION_ASM_OP
++#define INIT_SECTION_ASM_OP ""
+ #undef FINI_SECTION_ASM_OP
++#define FINI_SECTION_ASM_OP ""
+ #define INIT_ARRAY_SECTION_ASM_OP ARM_EABI_CTORS_SECTION_OP
+ #define FINI_ARRAY_SECTION_ASM_OP ARM_EABI_DTORS_SECTION_OP
+ 
diff --git a/gcc10-libjit/patches/patch-gcc_config_arm_elf.h b/gcc10-libjit/patches/patch-gcc_config_arm_elf.h
new file mode 100644
index 0000000000..5ac636464f
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_arm_elf.h
@@ -0,0 +1,14 @@
+$NetBSD: patch-gcc_config_arm_elf.h,v 1.1 2022/02/02 22:07:28 mrg Exp $
+
+--- gcc/config/arm/elf.h.orig	2021-04-08 04:56:28.065740630 -0700
++++ gcc/config/arm/elf.h	2022-01-31 21:14:04.684223580 -0800
+@@ -147,6 +147,8 @@
+ #undef L_floatdidf
+ #undef L_floatdisf
+ #undef L_floatundidf
++/* XXXMRG: don't take this out, we need it! */
++# ifndef __NetBSD__
+ #undef L_floatundisf
++# endif
+ #endif
+-
diff --git a/gcc10-libjit/patches/patch-gcc_config_arm_netbsd-eabi.h b/gcc10-libjit/patches/patch-gcc_config_arm_netbsd-eabi.h
new file mode 100644
index 0000000000..3c07c84d32
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_arm_netbsd-eabi.h
@@ -0,0 +1,57 @@
+$NetBSD: patch-gcc_config_arm_netbsd-eabi.h,v 1.1 2022/02/02 22:07:28 mrg Exp $
+
+--- gcc/config/arm/netbsd-eabi.h.orig	2021-04-08 04:56:28.065740630 -0700
++++ gcc/config/arm/netbsd-eabi.h	2022-01-31 21:15:29.555403989 -0800
+@@ -49,8 +49,8 @@
+ 
+ #undef ARM_UNWIND_INFO
+ #define ARM_UNWIND_INFO 0
+-#undef DWARF2_UNWIND_INFO
+-#define DWARF2_UNWIND_INFO 1
++#undef ARM_DWARF_UNWIND_TABLES
++#define ARM_DWARF_UNWIND_TABLES 1
+ 
+ #undef TARGET_OS_CPP_BUILTINS
+ #define TARGET_OS_CPP_BUILTINS()		\
+@@ -59,7 +59,7 @@
+       if (TARGET_AAPCS_BASED)			\
+ 	TARGET_BPABI_CPP_BUILTINS();		\
+       NETBSD_OS_CPP_BUILTINS_ELF();		\
+-      if (DWARF2_UNWIND_INFO)			\
++      if (ARM_DWARF_UNWIND_TABLES)		\
+ 	builtin_define ("__ARM_DWARF_EH__");	\
+     }						\
+   while (0)
+@@ -81,17 +81,25 @@
+ 
+ #undef SUBTARGET_EXTRA_ASM_SPEC
+ #define SUBTARGET_EXTRA_ASM_SPEC		\
+-  "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu} "	\
++  "-matpcs %{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu} "	\
+   "%{fpic|fpie:-k} "				\
+   "%{fPIC|fPIE:-k}"
+ 
++/* Default to full VFP if -mhard-float is specified.  */
++#undef SUBTARGET_ASM_FLOAT_SPEC
++#define SUBTARGET_ASM_FLOAT_SPEC	\
++  "%{mhard-float:%{!mfpu=*:-mfpu=vfp}}   \
++   %{mfloat-abi=hard:%{!mfpu=*:-mfpu=vfp}}"
++
+ #undef SUBTARGET_EXTRA_SPECS
+ #define SUBTARGET_EXTRA_SPECS						\
+   { "subtarget_extra_asm_spec",	SUBTARGET_EXTRA_ASM_SPEC },		\
++  { "subtarget_asm_float_spec", SUBTARGET_ASM_FLOAT_SPEC }, 		\
+   { "linker_eabi_suffix",	TARGET_LINKER_EABI_SUFFIX },		\
+   { "linker_emulation",		TARGET_LINKER_EMULATION },		\
+   { "linker_big_emulation",	TARGET_LINKER_BIG_EMULATION },		\
+   { "linker_little_emulation",	TARGET_LINKER_LITTLE_EMULATION },	\
++  { "be8_link_spec",		BE8_LINK_SPEC }, 			\
+   { "target_fix_v4bx_spec",	TARGET_FIX_V4BX_SPEC },			\
+   NETBSD_SUBTARGET_EXTRA_SPECS
+ 
+@@ -102,4 +110,5 @@
+   "-X %{mbig-endian:-EB -m %(linker_big_emulation)} "		\
+   "%{mlittle-endian:-EL -m %(linker_liitle_emulation)} "	\
+   "%{!mbig-endian:%{!mlittle-endian:-m %(linker_emulation)}} "	\
++  "%(be8_link_spec) "						\
+   "%(target_fix_v4bx_spec) %(netbsd_link_spec)"
diff --git a/gcc10-libjit/patches/patch-gcc_config_arm_netbsd-elf.h b/gcc10-libjit/patches/patch-gcc_config_arm_netbsd-elf.h
new file mode 100644
index 0000000000..a308e8b317
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_arm_netbsd-elf.h
@@ -0,0 +1,80 @@
+$NetBSD: patch-gcc_config_arm_netbsd-elf.h,v 1.1 2022/02/02 22:07:28 mrg Exp $
+
+--- gcc/config/arm/netbsd-elf.h.orig	2021-04-08 04:56:28.065740630 -0700
++++ gcc/config/arm/netbsd-elf.h	2022-01-31 21:14:32.314234515 -0800
+@@ -27,9 +27,20 @@
+ 
+ /* arm.h defaults to ARM6 CPU.  */
+ 
+-/* This defaults us to little-endian.  */
+-#ifndef TARGET_ENDIAN_DEFAULT
+-#define TARGET_ENDIAN_DEFAULT 0
++/* Default EABI to armv5t so that thumb shared libraries work.
++   The ARM926EH-S core is the default for armv5te, so set
++   SUBTARGET_CPU_DEFAULT to achieve this.  */
++
++#define SUBTARGET_CPU_DEFAULT \
++	(ARM_DEFAULT_ABI != ARM_ABI_APCS && ARM_DEFAULT_ABI != ARM_ABI_ATPCS \
++	    ? TARGET_CPU_arm926ejs : TARGET_CPU_arm6)
++
++/* TARGET_BIG_ENDIAN_DEFAULT is set in
++   config.gcc for big endian configurations.  */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT    MASK_BIG_END
++#else
++#define TARGET_ENDIAN_DEFAULT    0
+ #endif
+ 
+ #undef MULTILIB_DEFAULTS
+@@ -56,25 +67,28 @@
+ 
+ #undef SUBTARGET_EXTRA_ASM_SPEC
+ #define SUBTARGET_EXTRA_ASM_SPEC	\
++  "-matpcs %{mabi=aapcs*:-meabi=5} "	\
+   "%{" FPIE_OR_FPIC_SPEC ":-k}"
+ 
++#undef SUBTARGET_EXTRA_SPECS
++#define SUBTARGET_EXTRA_SPECS					\
++  { "subtarget_extra_asm_spec",	SUBTARGET_EXTRA_ASM_SPEC },	\
++  { "subtarget_asm_float_spec", SUBTARGET_ASM_FLOAT_SPEC },	\
++  NETBSD_SUBTARGET_EXTRA_SPECS
++
+ /* Default to full VFP if -mfloat-abi=hard is specified.  */
+ #undef SUBTARGET_ASM_FLOAT_SPEC
+-#define SUBTARGET_ASM_FLOAT_SPEC	\
+-  "%{mfloat-abi=hard:{!mfpu=*:-mfpu=vfp}}"
+-
+-#undef SUBTARGET_EXTRA_SPECS
+-#define SUBTARGET_EXTRA_SPECS				\
+-  { "subtarget_extra_asm_spec",	SUBTARGET_EXTRA_ASM_SPEC }, \
+-  { "subtarget_asm_float_spec", SUBTARGET_ASM_FLOAT_SPEC }, \
+-  { "netbsd_link_spec",		NETBSD_LINK_SPEC_ELF },	\
+-  { "netbsd_entry_point",	NETBSD_ENTRY_POINT },
++#define SUBTARGET_ASM_FLOAT_SPEC		\
++  "%{mhard-float:%{!mfpu=*:-mfpu=vfp}}		\
++   %{mfloat-abi=hard:%{!mfpu=*:-mfpu=vfp}}"
+ 
+ #define NETBSD_ENTRY_POINT "__start"
+ 
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+-  "-X %{mbig-endian:-EB} %{mlittle-endian:-EL} \
++  "-X \
++   %{mbig-endian:-EB %{-mabi=aapcs*:-m armelfb_nbsd_eabi}} \
++   %{mlittle-endian:-EL %{-mabi=aapcs*:-m armelf_nbsd_eabi}} \
+    %(netbsd_link_spec)"
+ 
+ /* Make GCC agree with <machine/ansi.h>.  */
+@@ -85,6 +99,12 @@
+ #undef PTRDIFF_TYPE
+ #define PTRDIFF_TYPE "long int"
+ 
++#undef INTPTR_TYPE
++#define INTPTR_TYPE PTRDIFF_TYPE
++
++#undef UINTPTR_TYPE
++#define UINTPTR_TYPE SIZE_TYPE
++
+ /* We don't have any limit on the length as out debugger is GDB.  */
+ #undef DBX_CONTIN_LENGTH
+ 
diff --git a/gcc10-libjit/patches/patch-gcc_config_sparc_sparc.c b/gcc10-libjit/patches/patch-gcc_config_sparc_sparc.c
new file mode 100644
index 0000000000..7d7de959c8
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_config_sparc_sparc.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-gcc_config_sparc_sparc.c,v 1.1 2021/02/13 15:56:17 maya Exp $
+
+Invoke subtarget-specific code for replacing builtin functions.
+Causes "cabsl" to be converted to _c99_cabsl on NetBSD.
+https://gcc.gnu.org/pipermail/gcc-patches/2021-February/565290.html
+
+--- gcc/config/sparc/sparc.c.orig	2020-07-23 06:35:17.480386051 +0000
++++ gcc/config/sparc/sparc.c
+@@ -10993,6 +10993,9 @@ sparc_init_builtins (void)
+ 
+   if (TARGET_VIS)
+     sparc_vis_init_builtins ();
++#ifdef SUBTARGET_INIT_BUILTINS
++  SUBTARGET_INIT_BUILTINS;
++#endif
+ }
+ 
+ /* Create builtin functions for FPU instructions.  */
diff --git a/gcc10-libjit/patches/patch-gcc_configure b/gcc10-libjit/patches/patch-gcc_configure
new file mode 100644
index 0000000000..95acb48aa1
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_configure
@@ -0,0 +1,15 @@
+$NetBSD: patch-gcc_configure,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90143
+
+--- gcc/configure.orig	2015-09-30 23:06:11.000000000 +0000
++++ gcc/configure
+@@ -28321,7 +28321,7 @@ case "$target" in
+       gcc_cv_target_dl_iterate_phdr=no
+     fi
+     ;;
+-  *-*-dragonfly* | *-*-freebsd*)
++  *-*-dragonfly* | *-*-freebsd* | *-*-netbsd* )
+     if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
+       gcc_cv_target_dl_iterate_phdr=yes
+     else
diff --git a/gcc10-libjit/patches/patch-gcc_ggc-common.c b/gcc10-libjit/patches/patch-gcc_ggc-common.c
new file mode 100644
index 0000000000..8dddadeefa
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_ggc-common.c
@@ -0,0 +1,51 @@
+$NetBSD: patch-gcc_ggc-common.c,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+--- gcc/ggc-common.c.orig	2014-12-10 03:45:40.000000000 +0000
++++ gcc/ggc-common.c
+@@ -591,6 +591,8 @@ gt_pch_restore (FILE *f)
+   size_t i;
+   struct mmap_info mmi;
+   int result;
++  struct line_maps * old_line_table = line_table;
++  location_t old_input_loc = input_location;
+ 
+   /* Delete any deletable objects.  This makes ggc_pch_read much
+      faster, as it can be sure that no GCable objects remain other
+@@ -603,7 +605,7 @@ gt_pch_restore (FILE *f)
+   for (rt = gt_pch_scalar_rtab; *rt; rt++)
+     for (rti = *rt; rti->base != NULL; rti++)
+       if (fread (rti->base, rti->stride, 1, f) != 1)
+-	fatal_error (input_location, "cannot read PCH file: %m");
++	{ line_table = old_line_table; input_location = old_input_loc; fatal_error (input_location, "cannot read PCH file: %m"); }
+ 
+   /* Read in all the global pointers, in 6 easy loops.  */
+   for (rt = gt_ggc_rtab; *rt; rt++)
+@@ -611,23 +613,23 @@ gt_pch_restore (FILE *f)
+       for (i = 0; i < rti->nelt; i++)
+ 	if (fread ((char *)rti->base + rti->stride * i,
+ 		   sizeof (void *), 1, f) != 1)
+-	  fatal_error (input_location, "cannot read PCH file: %m");
++	  { line_table = old_line_table; input_location = old_input_loc; fatal_error (input_location, "cannot read PCH file: %m"); }
+ 
+   if (fread (&mmi, sizeof (mmi), 1, f) != 1)
+-    fatal_error (input_location, "cannot read PCH file: %m");
++    { line_table = old_line_table; input_location = old_input_loc; fatal_error (input_location, "cannot read PCH file: %m"); }
+ 
+   result = host_hooks.gt_pch_use_address (mmi.preferred_base, mmi.size,
+ 					  fileno (f), mmi.offset);
+   if (result < 0)
+-    fatal_error (input_location, "had to relocate PCH");
++    { line_table = old_line_table; input_location = old_input_loc; fatal_error (input_location, "had to relocate PCH"); }
+   if (result == 0)
+     {
+       if (fseek (f, mmi.offset, SEEK_SET) != 0
+ 	  || fread (mmi.preferred_base, mmi.size, 1, f) != 1)
+-	fatal_error (input_location, "cannot read PCH file: %m");
++	{ line_table = old_line_table; input_location = old_input_loc; fatal_error (input_location, "cannot read PCH file: %m"); }
+     }
+   else if (fseek (f, mmi.offset + mmi.size, SEEK_SET) != 0)
+-    fatal_error (input_location, "cannot read PCH file: %m");
++    { line_table = old_line_table; input_location = old_input_loc; fatal_error (input_location, "cannot read PCH file: %m"); }
+ 
+   ggc_pch_read (f, mmi.preferred_base);
+ 
diff --git a/gcc10-libjit/patches/patch-gcc_lto_lto.c b/gcc10-libjit/patches/patch-gcc_lto_lto.c
new file mode 100644
index 0000000000..9bef18044a
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_lto_lto.c
@@ -0,0 +1,19 @@
+$NetBSD: patch-gcc_lto_lto.c,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+Better fallback for netbsd<8 lacking WALLSIG.
+
+--- gcc/lto/lto.c.orig	2018-01-03 21:42:12.000000000 +0000
++++ gcc/lto/lto.c
+@@ -2321,7 +2321,11 @@ wait_for_child ()
+   do
+     {
+ #ifndef WCONTINUED
+-#define WCONTINUED 0
++#  ifdef WALLSIG
++#    define WCONTINUED WALLSIG
++#  else
++#    define WCONTINUED 0
++#  endif
+ #endif
+       int w = waitpid (0, &status, WUNTRACED | WCONTINUED);
+       if (w == -1)
diff --git a/gcc10-libjit/patches/patch-gcc_targhooks.c b/gcc10-libjit/patches/patch-gcc_targhooks.c
new file mode 100644
index 0000000000..1b93af0599
--- /dev/null
+++ b/gcc10-libjit/patches/patch-gcc_targhooks.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-gcc_targhooks.c,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+PR pkg/53436
+netbsd can't handle hidden reference to stack_chk_fail_local.
+(note: this code is only happening if targeting i386)
+
+--- gcc/targhooks.c.orig	2018-01-13 18:00:59.000000000 +0000
++++ gcc/targhooks.c
+@@ -919,7 +919,7 @@ default_external_stack_protect_fail (voi
+ tree
+ default_hidden_stack_protect_fail (void)
+ {
+-#ifndef HAVE_GAS_HIDDEN
++#if !defined(HAVE_GAS_HIDDEN) || defined(__NetBSD__) || defined(__sun)
+   return default_external_stack_protect_fail ();
+ #else
+   tree t = stack_chk_fail_decl;
diff --git a/gcc10-libjit/patches/patch-isl_configure b/gcc10-libjit/patches/patch-isl_configure
new file mode 100644
index 0000000000..4ea4dfdf1f
--- /dev/null
+++ b/gcc10-libjit/patches/patch-isl_configure
@@ -0,0 +1,26 @@
+$NetBSD: patch-isl_configure,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+Make test portable
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90144
+
+--- isl/configure.orig	2016-01-14 17:26:10.000000000 +0000
++++ isl/configure
+@@ -17561,7 +17561,7 @@ else
+ fi
+ 
+ 
+- if test "x$with_int" == "ximath-32"; then
++ if test "x$with_int" = "ximath-32"; then
+   SMALL_INT_OPT_TRUE=
+   SMALL_INT_OPT_FALSE='#'
+ else
+@@ -17569,7 +17569,7 @@ else
+   SMALL_INT_OPT_FALSE=
+ fi
+ 
+-if test "x$with_int" == "ximath-32"; then :
++if test "x$with_int" = "ximath-32"; then :
+ 
+ 
+ $as_echo "#define USE_SMALL_INT_OPT /**/" >>confdefs.h
diff --git a/gcc10-libjit/patches/patch-libffi_configure b/gcc10-libjit/patches/patch-libffi_configure
new file mode 100644
index 0000000000..28e1d2b649
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libffi_configure
@@ -0,0 +1,16 @@
+$NetBSD: patch-libffi_configure,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90146
+https://github.com/libffi/libffi/issues/485
+
+--- libffi/configure.orig	2013-06-01 17:03:49.000000000 +0000
++++ libffi/configure
+@@ -12689,7 +12689,7 @@ case "$target" in
+ $as_echo "#define FFI_EXEC_TRAMPOLINE_TABLE 1" >>confdefs.h
+ 
+      ;;
+-     *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*)
++     *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-netbsd* | *-*-openbsd* | *-pc-solaris*)
+ 
+ $as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h
+ 
diff --git a/gcc10-libjit/patches/patch-libffi_testsuite_libffi.call_float2.c b/gcc10-libjit/patches/patch-libffi_testsuite_libffi.call_float2.c
new file mode 100644
index 0000000000..42b011cd6e
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libffi_testsuite_libffi.call_float2.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-libffi_testsuite_libffi.call_float2.c,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90146
+
+--- libffi/testsuite/libffi.call/float2.c.orig	2013-06-01 17:08:18.000000000 +0000
++++ libffi/testsuite/libffi.call/float2.c
+@@ -45,7 +45,7 @@ int main (void)
+   /* This is ifdef'd out for now. long double support under SunOS/gcc
+      is pretty much non-existent.  You'll get the odd bus error in library
+      routines like printf().  */
+-  printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON);
++  printf ("%Lf, %Lf, %Lf, %Lf\n", (long double)ld, (long double)ldblit(f), (long double)(ld - ldblit(f)), (long double)LDBL_EPSILON);
+ #endif
+ 
+   /* These are not always the same!! Check for a reasonable delta */
diff --git a/gcc10-libjit/patches/patch-libgcc_config.host b/gcc10-libjit/patches/patch-libgcc_config.host
new file mode 100644
index 0000000000..d793ea38f5
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libgcc_config.host
@@ -0,0 +1,25 @@
+$NetBSD: patch-libgcc_config.host,v 1.2 2022/02/02 22:07:28 mrg Exp $
+
+This is needed for arm64 to get Out-of-line LSE atomics linked into libgcc.
+libsupc++ fails to link without this, and for arm to build.
+
+--- libgcc/config.host.orig	2021-04-08 04:56:29.805761640 -0700
++++ libgcc/config.host	2022-02-02 04:08:51.653635705 -0800
+@@ -377,6 +377,7 @@
+ aarch64*-*-netbsd*)
+ 	extra_parts="$extra_parts crtfastmath.o"
+ 	tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
++	tmake_file="${tmake_file} ${cpu_type}/t-lse"
+ 	tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm"
+ 	md_unwind_header=aarch64/aarch64-unwind.h
+ 	;;
+@@ -463,7 +464,8 @@
+ 	case ${host} in
+ 	  arm*-*-netbsdelf-*eabi*)
+ 	    tmake_file="${tmake_file} arm/t-netbsd-eabi"
+-	    unwind_header=config/arm/unwind-arm.h
++	    # GCC 7 vs NetBSD/eabi -> avoid arm unwinder
++	    #unwind_header=config/arm/unwind-arm.h
+ 	    ;;
+ 	  *)
+ 	    tmake_file="${tmake_file} arm/t-netbsd t-slibgcc-gld-nover"
diff --git a/gcc10-libjit/patches/patch-libgcc_crtstuff.c b/gcc10-libjit/patches/patch-libgcc_crtstuff.c
new file mode 100644
index 0000000000..e7f1249f21
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libgcc_crtstuff.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-libgcc_crtstuff.c,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90147
+
+--- libgcc/crtstuff.c.orig	2017-01-01 12:07:43.000000000 +0000
++++ libgcc/crtstuff.c
+@@ -81,7 +81,7 @@ call_ ## FUNC (void)					\
+ #endif
+ 
+ #if defined(TARGET_DL_ITERATE_PHDR) && \
+-   (defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__))
++   (defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__))
+ #define BSD_DL_ITERATE_PHDR_AVAILABLE
+ #endif
+  
diff --git a/gcc10-libjit/patches/patch-libgfortran_io_format.c b/gcc10-libjit/patches/patch-libgfortran_io_format.c
new file mode 100644
index 0000000000..19ba74633f
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libgfortran_io_format.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-libgfortran_io_format.c,v 1.1 2020/05/17 19:47:19 rillig Exp $
+
+Fix -Werror=char-subscripts.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95177
+
+--- libgfortran/io/format.c.orig	2020-05-07 10:50:02.000000000 +0000
++++ libgfortran/io/format.c
+@@ -193,7 +193,7 @@ next_char (format_data *fmt, int literal
+ 	return -1;
+ 
+       fmt->format_string_len--;
+-      c = toupper (*fmt->format_string++);
++      c = toupper ((unsigned char) *fmt->format_string++);
+       fmt->error_element = c;
+     }
+   while ((c == ' ' || c == '\t') && !literal);
diff --git a/gcc10-libjit/patches/patch-libgfortran_io_io.h b/gcc10-libjit/patches/patch-libgfortran_io_io.h
new file mode 100644
index 0000000000..caaa4e5dbb
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libgfortran_io_io.h
@@ -0,0 +1,18 @@
+$NetBSD: patch-libgfortran_io_io.h,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+Don't declare old_locale* an internal_proto to avoid linking problems
+
+--- libgfortran/io/io.h.orig	2018-01-07 10:17:52.000000000 +0000
++++ libgfortran/io/io.h
+@@ -57,11 +57,8 @@ extern locale_t c_locale;
+ internal_proto(c_locale);
+ #else
+ extern char* old_locale;
+-internal_proto(old_locale);
+ extern int old_locale_ctr;
+-internal_proto(old_locale_ctr);
+ extern __gthread_mutex_t old_locale_lock;
+-internal_proto(old_locale_lock);
+ #endif
+ 
+ 
diff --git a/gcc10-libjit/patches/patch-libgfortran_io_list__read.c b/gcc10-libjit/patches/patch-libgfortran_io_list__read.c
new file mode 100644
index 0000000000..2f8c73c770
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libgfortran_io_list__read.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-libgfortran_io_list__read.c,v 1.1 2020/05/17 19:47:19 rillig Exp $
+
+Fix -Werror=char-subscripts.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95177
+
+--- libgfortran/io/list_read.c.orig	2020-05-07 10:50:02.000000000 +0000
++++ libgfortran/io/list_read.c
+@@ -2757,7 +2757,7 @@ nml_match_name (st_parameter_dt *dtp, co
+   for (i = 0; i < len; i++)
+     {
+       c = next_char (dtp);
+-      if (c == EOF || (tolower (c) != tolower (name[i])))
++      if (c == EOF || (tolower (c) != tolower ((unsigned char) name[i])))
+ 	{
+ 	  dtp->u.p.nml_read_error = 1;
+ 	  break;
diff --git a/gcc10-libjit/patches/patch-libgfortran_io_read.c b/gcc10-libjit/patches/patch-libgfortran_io_read.c
new file mode 100644
index 0000000000..00204accb3
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libgfortran_io_read.c
@@ -0,0 +1,44 @@
+$NetBSD: patch-libgfortran_io_read.c,v 1.1 2020/05/17 19:47:20 rillig Exp $
+
+Fix -Werror=char-subscripts.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95177
+
+--- libgfortran/io/read.c.orig	2020-05-07 10:50:02.000000000 +0000
++++ libgfortran/io/read.c
+@@ -959,7 +959,7 @@ read_f (st_parameter_dt *dtp, const fnod
+ 	 between "NaN" and the optional perenthesis is not permitted.  */
+       while (w > 0)
+ 	{
+-	  *out = tolower (*p);
++	  *out = tolower ((unsigned char) *p);
+ 	  switch (*p)
+ 	    {
+ 	    case ' ':
+@@ -981,7 +981,7 @@ read_f (st_parameter_dt *dtp, const fnod
+ 		goto bad_float;
+ 	      break;
+ 	    default:
+-	      if (!isalnum (*out))
++	      if (!isalnum ((unsigned char) *out))
+ 		goto bad_float;
+ 	    }
+ 	  --w;
+@@ -1109,7 +1109,7 @@ exponent:
+ 
+   if (dtp->u.p.blank_status == BLANK_UNSPECIFIED)
+     {
+-      while (w > 0 && isdigit (*p))
++      while (w > 0 && isdigit ((unsigned char) *p))
+ 	{
+ 	  exponent *= 10;
+ 	  exponent += *p - '0';
+@@ -1137,7 +1137,7 @@ exponent:
+ 	      else
+ 		assert (dtp->u.p.blank_status == BLANK_NULL);
+ 	    }
+-	  else if (!isdigit (*p))
++	  else if (!isdigit ((unsigned char) *p))
+ 	    goto bad_float;
+ 	  else
+ 	    {
diff --git a/gcc10-libjit/patches/patch-libgfortran_runtime_environ.c b/gcc10-libjit/patches/patch-libgfortran_runtime_environ.c
new file mode 100644
index 0000000000..3133da4530
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libgfortran_runtime_environ.c
@@ -0,0 +1,26 @@
+$NetBSD: patch-libgfortran_runtime_environ.c,v 1.1 2020/05/17 19:47:20 rillig Exp $
+
+Fix -Werror=char-subscripts.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95177
+
+--- libgfortran/runtime/environ.c.orig	2020-05-07 10:50:02.000000000 +0000
++++ libgfortran/runtime/environ.c
+@@ -91,7 +91,7 @@ init_integer (variable * v)
+     return;
+ 
+   for (q = p; *q; q++)
+-    if (!isdigit (*q) && (p != q || *q != '-'))
++    if (!isdigit ((unsigned char) *q) && (p != q || *q != '-'))
+       return;
+ 
+   *v->var = atoi (p);
+@@ -344,7 +344,7 @@ static int
+ match_integer (void)
+ {
+   unit_num = 0;
+-  while (isdigit (*p))
++  while (isdigit ((unsigned char) *p))
+     unit_num = unit_num * 10 + (*p++ - '0');
+   return INTEGER;
+ }
diff --git a/gcc10-libjit/patches/patch-libquadmath_printf_quadmath-printf.c b/gcc10-libjit/patches/patch-libquadmath_printf_quadmath-printf.c
new file mode 100644
index 0000000000..f29a224185
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libquadmath_printf_quadmath-printf.c
@@ -0,0 +1,26 @@
+$NetBSD: patch-libquadmath_printf_quadmath-printf.c,v 1.1 2020/05/17 19:47:20 rillig Exp $
+
+Fix -Werror=char-subscripts.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95178
+
+--- libquadmath/printf/quadmath-printf.c.orig	2020-05-07 10:50:02.000000000 +0000
++++ libquadmath/printf/quadmath-printf.c
+@@ -189,7 +189,7 @@ quadmath_snprintf (char *str, size_t siz
+       ++format;
+       info.width = va_arg (ap, int);
+     }
+-  else if (isdigit (*format))
++  else if (isdigit ((unsigned char) *format))
+     /* Constant width specification.  */
+     info.width = read_int (&format);
+ 
+@@ -206,7 +206,7 @@ quadmath_snprintf (char *str, size_t siz
+ 
+ 	  info.prec = va_arg (ap, int);
+ 	}
+-      else if (isdigit (*format))
++      else if (isdigit ((unsigned char) *format))
+ 	info.prec = read_int (&format);
+       else
+ 	/* "%.?" is treated like "%.0?".  */
diff --git a/gcc10-libjit/patches/patch-libquadmath_strtod_strtod__l.c b/gcc10-libjit/patches/patch-libquadmath_strtod_strtod__l.c
new file mode 100644
index 0000000000..d7ce1be4f7
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libquadmath_strtod_strtod__l.c
@@ -0,0 +1,23 @@
+$NetBSD: patch-libquadmath_strtod_strtod__l.c,v 1.1 2020/05/17 19:47:20 rillig Exp $
+
+Fix -Werror=char-subscripts.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95178
+
+--- libquadmath/strtod/strtod_l.c.orig	2020-05-07 10:50:02.000000000 +0000
++++ libquadmath/strtod/strtod_l.c
+@@ -57,10 +57,10 @@
+ # define STRING_TYPE char
+ # define CHAR_TYPE char
+ # define L_(Ch) Ch
+-# define ISSPACE(Ch) isspace (Ch)
+-# define ISDIGIT(Ch) isdigit (Ch)
+-# define ISXDIGIT(Ch) isxdigit (Ch)
+-# define TOLOWER(Ch) tolower (Ch)
++# define ISSPACE(Ch) isspace ((unsigned char) Ch)
++# define ISDIGIT(Ch) isdigit ((unsigned char) Ch)
++# define ISXDIGIT(Ch) isxdigit ((unsigned char) Ch)
++# define TOLOWER(Ch) tolower ((unsigned char) Ch)
+ # define TOLOWER_C(Ch) \
+   ({__typeof(Ch) __tlc = (Ch); \
+     (__tlc >= 'A' && __tlc <= 'Z') ? __tlc - 'A' + 'a' : __tlc; })
diff --git a/gcc10-libjit/patches/patch-libstdc++-v3_libsupc++_new__opa.cc b/gcc10-libjit/patches/patch-libstdc++-v3_libsupc++_new__opa.cc
new file mode 100644
index 0000000000..b9a6111a86
--- /dev/null
+++ b/gcc10-libjit/patches/patch-libstdc++-v3_libsupc++_new__opa.cc
@@ -0,0 +1,17 @@
+$NetBSD: patch-libstdc++-v3_libsupc++_new__opa.cc,v 1.1 2020/05/10 15:02:44 maya Exp $
+
+Ensure we can find SunOS std::aligned_alloc if using it.
+
+--- libstdc++-v3/libsupc++/new_opa.cc.orig	2020-03-04 08:30:03.000000000 +0000
++++ libstdc++-v3/libsupc++/new_opa.cc
+@@ -57,6 +57,10 @@ extern "C"
+ }
+ #endif
+ 
++#if defined(__sun) && _GLIBCXX_HAVE_ALIGNED_ALLOC
++using std::aligned_alloc;
++#endif
++
+ namespace __gnu_cxx {
+ #if _GLIBCXX_HAVE_ALIGNED_ALLOC
+ using ::aligned_alloc;
diff --git a/gcc10-libjit/version.mk b/gcc10-libjit/version.mk
new file mode 100644
index 0000000000..7c05ed0148
--- /dev/null
+++ b/gcc10-libjit/version.mk
@@ -0,0 +1,2 @@
+# $NetBSD: version.mk,v 1.4 2022/07/03 15:59:17 wiz Exp $
+GCC10_DIST_VERSION:=	10.4.0


Home | Main Index | Thread Index | Old Index