lang/gcc16-devel: Add port

GCC, the GNU Compiler Collection, supports a number of languages.
This port installs the C, C++, and Fortran front ends as gcc16, g++16,
and gfortran16, respectively.

This is the first snapshot from trunk with the GCC 16 designation. It
largely is a copy of lang/gcc15-devel.

Note: files/patch-libgcc_unwind.inc will get obsolete once all supported
FreeBSD releases include commit
22e564c74eb20e14bd93fd9fdde20e38a29cfcf1. [1]

PR:             285711 [1]
This commit is contained in:
Lorenzo Salvadore
2025-04-29 15:31:51 +02:00
parent bfcb6f38f0
commit 3e400b40c3
17 changed files with 583 additions and 0 deletions
+1
View File
@@ -99,6 +99,7 @@
SUBDIR += gcc14-devel
SUBDIR += gcc15
SUBDIR += gcc15-devel
SUBDIR += gcc16-devel
SUBDIR += gcc6-aux
SUBDIR += gforth
SUBDIR += ghc
+194
View File
@@ -0,0 +1,194 @@
PORTNAME= gcc
PORTVERSION= 16.0.1.s20250427
CATEGORIES= lang
MASTER_SITES= GCC/snapshots/${DIST_VERSION}
PKGNAMESUFFIX= ${SUFFIX}-devel
DISTNAME= gcc-${DIST_VERSION}
MAINTAINER= salvadore@FreeBSD.org
COMMENT= GNU Compiler Collection 16
WWW= https://gcc.gnu.org
LICENSE= GPLv3 GPLv3RLE
LICENSE_COMB= multi
ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc powerpc64 powerpc64le
LIB_DEPENDS= libgmp.so:math/gmp \
libmpfr.so:math/mpfr \
libmpc.so:math/mpc
BUILD_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
RUN_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
.if defined(MAINTAINER_MODE)
BUILD_DEPENDS+= runtest:misc/dejagnu
.endif
USES= compiler:c++11-lang cpe gmake iconv libtool makeinfo perl5 tar:xz
USE_BINUTILS= yes
USE_PERL5= build
CPE_VENDOR= gnu
CPE_VERSION= ${GCC_VERSION}
# DIST_VERSION relates to downloads, GCC_VERSION and SUFFIX to names
# of executables and directories once installed. A PORTVERSION of
# Y.2.1.s20140817 results in values of Y-20140817, Y.2.1, and Y
# for these three.
DIST_VERSION= ${PORTVERSION:C/([0-9]+).*\.s([0-9]+)/\1-\2/}
GCC_VERSION= ${PORTVERSION:C/(.+)\.s[0-9]{8}/\1/}
SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/}
CFLAGS:= ${CFLAGS:N-mretpoline} -D__USE_ISOC11
CXXFLAGS:= ${CXXFLAGS:N-mretpoline}
OPTIONS_DEFINE= GRAPHITE
OPTIONS_DEFAULT_aarch64=STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_armv6= STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_amd64= STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_i386= STANDARD_BOOTSTRAP
OPTIONS_DEFAULT_powerpc=LTO_BOOTSTRAP
OPTIONS_DEFAULT_powerpc64=LTO_BOOTSTRAP
OPTIONS_DEFAULT_powerpc64le=LTO_BOOTSTRAP
OPTIONS_SINGLE= BOOTSTRAP
OPTIONS_SINGLE_BOOTSTRAP= LTO_BOOTSTRAP STANDARD_BOOTSTRAP
LTO_BOOTSTRAP_DESC= Build using a full LTO bootstrap
STANDARD_BOOTSTRAP_DESC= Build using a full bootstrap without LTO
GRAPHITE_DESC= Support for Graphite loop optimizations
.if exists(/usr/lib32/libc.so)
OPTIONS_DEFINE_amd64+= MULTILIB
OPTIONS_DEFAULT_amd64+= MULTILIB
OPTIONS_DEFINE_powerpc64+= MULTILIB
#OPTIONS_DEFAULT_powerpc64+= MULTILIB # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105010
MULTILIB_DESC= Build support for 32-bit and 64-bit targets
MULTILIB_CONFIGURE_ENABLE= multilib
.else
CONFIGURE_ARGS+= --disable-multilib
.endif
.if defined(CPUTYPE) && ${CPUTYPE:Mg[3-5]}
CFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/}
CXXFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/}
.endif
GRAPHITE_LIB_DEPENDS= libisl.so:devel/isl
GRAPHITE_CONFIGURE_WITH+= isl
.include <bsd.port.pre.mk>
.if ${ARCH} == amd64
CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL}
.elif ${ARCH} == powerpc64
CONFIGURE_ARGS+= --with-abi=elfv2
USE_GCC= yes
.elif ${ARCH} == powerpc64le
USE_GCC= yes
.endif
.if ${ARCH} == i386
LANGUAGES:= c,c++,objc,fortran
.else
LANGUAGES:= c,c++,objc,fortran,jit
.endif
TARGLIB= ${PREFIX}/lib/gcc${SUFFIX}
TARGLIB32= ${PREFIX}/lib32 # The version information is added later
LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX}
GNU_CONFIGURE= yes
GNU_CONFIGURE_MANPREFIX=${PREFIX}/share
CONFIGURE_OUTSOURCE= yes
.if ${PORT_OPTIONS:MLTO_BOOTSTRAP}
CONFIGURE_ARGS+=--with-build-config=bootstrap-lto-noplugin
ALL_TARGET= bootstrap-lean
PIE_UNSAFE= yes
.else
CONFIGURE_ARGS+=--with-build-config=bootstrap-debug
ALL_TARGET= bootstrap-lean
PIE_UNSAFE= yes
.endif
INSTALL_TARGET= install-strip
.if ${UID} != 0
BINMODE= 755
.endif
CONFIGURE_ARGS+=--disable-nls \
--disable-libssp \
--enable-gnu-indirect-function \
--enable-host-shared \
--enable-plugin \
--libdir=${TARGLIB} \
--libexecdir=${LIBEXEC} \
--program-suffix=${SUFFIX} \
--with-as=${LOCALBASE}/bin/as \
--with-gmp=${LOCALBASE} \
--with-gxx-include-dir=${TARGLIB}/include/c++/ \
--with-gxx-libcxx-include-dir=/usr/include/c++/v1 \
--with-ld=${LOCALBASE}/bin/ld \
${ICONV_CONFIGURE_ARG} \
--with-pkgversion="FreeBSD Ports Collection" \
--with-system-zlib \
--without-zstd
MAKE_ARGS+= MAKEINFOFLAGS="--no-split"
USE_LDCONFIG= ${TARGLIB}
PLIST_SUB+= GCC_VERSION=${GCC_VERSION} \
GNU_HOST=${CONFIGURE_TARGET} \
SUFFIX=${SUFFIX}
INFO= gcc${SUFFIX}/cpp \
gcc${SUFFIX}/cppinternals \
gcc${SUFFIX}/gcc \
gcc${SUFFIX}/gccinstall \
gcc${SUFFIX}/gccint \
gcc${SUFFIX}/gfortran \
gcc${SUFFIX}/libgccjit \
gcc${SUFFIX}/libgomp
.if ${ARCH} == amd64 || ${ARCH} == i386
INFO+= gcc${SUFFIX}/libquadmath
.endif
.if ${ARCH} == amd64 || ${ARCH} == i386 || ${ARCH} == aarch64 || ${ARCH:Marmv?}
INFO+= gcc${SUFFIX}/libitm
.endif
SUB_FILES= pkg-message
SUB_LIST+= TARGLIB=${TARGLIB}
CONFIGURE_ARGS+=--enable-languages=${LANGUAGES}
.if (${ARCH} == amd64 || ${ARCH} == powerpc64) && ${PORT_OPTIONS:MMULTILIB}
USE_LDCONFIG32= ${TARGLIB32}/gcc${SUFFIX}
.endif
pre-everything::
@${ECHO_MSG} "Making GCC ${PORTVERSION} for ${CONFIGURE_TARGET} [${LANGUAGES}]"
pre-configure:
cd ${WRKSRC} ; contrib/gcc_update --touch
@${RM} ${WRKSRC}/gcc/*/*.info*
.if defined(MAINTAINER_MODE)
full-regression-test: build
cd ${TEST_WRKSRC}; ${MAKE_CMD} -sk check \
; ${WRKSRC}/contrib/test_summary
.endif
post-stage:
${RM} ${STAGEDIR}${PREFIX}/share/man/man7/*
${RM} -r ${STAGEDIR}${TARGLIB}/gcc/*/${GCC_VERSION}/include-fixed/
# Install ISO_Fortran_binding.h in an easily findable directory
${MKDIR} ${STAGEDIR}${PREFIX}/include/gcc${SUFFIX}
${INSTALL_DATA} ${STAGEDIR}${PREFIX}/lib/gcc${SUFFIX}/gcc/${CONFIGURE_TARGET}/${GCC_VERSION}/include/ISO_Fortran_binding.h \
${STAGEDIR}${PREFIX}/include/gcc${SUFFIX}
# Add target libraries and include files to packaging list.
${RM} ${WRKDIR}/PLIST.lib
.if (${ARCH} == amd64 || ${ARCH} == powerpc64) && ${PORT_OPTIONS:MMULTILIB}
${MKDIR} ${STAGEDIR}${TARGLIB32}
${MV} ${STAGEDIR}${PREFIX}/lib/lib32 ${STAGEDIR}${TARGLIB32}/gcc${SUFFIX}
.endif
.for d in ${TARGLIB:S/^${PREFIX}\///} ${TARGLIB32:S/^${PREFIX}\///} ${LIBEXEC:S/^${PREFIX}\///}
cd ${STAGEDIR}${PREFIX} ; if [ -d $d ]; then \
${FIND} $d -type f -o -type l >>${WRKDIR}/PLIST.lib ;\
fi
.endfor
cd ${WRKDIR} ; ${SED} -i -e "/PLIST.lib/ r PLIST.lib" ${TMPPLIST}
.include <bsd.port.post.mk>
+3
View File
@@ -0,0 +1,3 @@
TIMESTAMP = 1745932552
SHA256 (gcc-16-20250427.tar.xz) = 545b46c123dcc303c2bcd319ceda174733c30cd4574f8ed732f582c3aba7af5e
SIZE (gcc-16-20250427.tar.xz) = 92158556
@@ -0,0 +1,106 @@
--- UTC
Index: gcc/ginclude/unwind-arm-common.h
===================================================================
--- gcc/ginclude/unwind-arm-common.h (revision 219113)
+++ gcc/ginclude/unwind-arm-common.h (working copy)
@@ -82,7 +82,11 @@
struct _Unwind_Control_Block
{
+#ifdef __FreeBSD__
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+#else
char exception_class[8];
+#endif
void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *);
/* Unwinder cache, private fields for the unwinder's use */
struct
@@ -181,7 +185,11 @@
/* Support functions for the PR. */
#define _Unwind_Exception _Unwind_Control_Block
+#ifdef __FreeBSD__
+ typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
+#else
typedef char _Unwind_Exception_Class[8];
+#endif
void * _Unwind_GetLanguageSpecificData (_Unwind_Context *);
_Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *);
Index: libstdc++-v3/libsupc++/unwind-cxx.h
===================================================================
--- libstdc++-v3/libsupc++/unwind-cxx.h (revision 219147)
+++ libstdc++-v3/libsupc++/unwind-cxx.h (working copy)
@@ -235,7 +235,7 @@
return reinterpret_cast<__cxa_dependent_exception *>(exc + 1) - 1;
}
-#ifdef __ARM_EABI_UNWINDER__
+#if defined(__ARM_EABI_UNWINDER__) && !defined(__FreeBSD__)
static inline bool
__is_gxx_exception_class(_Unwind_Exception_Class c)
{
@@ -309,13 +309,7 @@
c[6] = 'R';
c[7] = '\0';
}
-
-static inline void*
-__gxx_caught_object(_Unwind_Exception* eo)
-{
- return (void*)eo->barrier_cache.bitpattern[0];
-}
-#else // !__ARM_EABI_UNWINDER__
+#else // !__ARM_EABI_UNWINDER__ || __FreeBSD__
// This is the primary exception class we report -- "GNUCC++\0".
const _Unwind_Exception_Class __gxx_primary_exception_class
= ((((((((_Unwind_Exception_Class) 'G'
@@ -339,6 +333,16 @@
<< 8 | (_Unwind_Exception_Class) '+')
<< 8 | (_Unwind_Exception_Class) '\x01');
+const _Unwind_Exception_Class __gxx_forced_unwind_class
+= ((((((((_Unwind_Exception_Class) 'G'
+ << 8 | (_Unwind_Exception_Class) 'N')
+ << 8 | (_Unwind_Exception_Class) 'U')
+ << 8 | (_Unwind_Exception_Class) 'C')
+ << 8 | (_Unwind_Exception_Class) 'F')
+ << 8 | (_Unwind_Exception_Class) 'O')
+ << 8 | (_Unwind_Exception_Class) 'R')
+ << 8 | (_Unwind_Exception_Class) '\0');
+
static inline bool
__is_gxx_exception_class(_Unwind_Exception_Class c)
{
@@ -346,6 +350,12 @@
|| c == __gxx_dependent_exception_class;
}
+static inline bool
+__is_gxx_forced_unwind_class(_Unwind_Exception_Class c)
+{
+ return c == __gxx_forced_unwind_class;
+}
+
// Only checks for primary or dependent, but not that it is a C++ exception at
// all.
static inline bool
@@ -357,7 +367,18 @@
#define __GXX_INIT_PRIMARY_EXCEPTION_CLASS(c) c = __gxx_primary_exception_class
#define __GXX_INIT_DEPENDENT_EXCEPTION_CLASS(c) \
c = __gxx_dependent_exception_class
+#define __GXX_INIT_FORCED_UNWIND_CLASS(c) c = __gxx_forced_unwind_class
+#endif // __ARM_EABI_UNWINDER__ && !__FreeBSD__
+#ifdef __ARM_EABI_UNWINDER__
+static inline void*
+__gxx_caught_object(_Unwind_Exception* eo)
+{
+ return (void*)eo->barrier_cache.bitpattern[0];
+}
+
+#else // !__ARM_EABI_UNWINDER__
+
// GNU C++ personality routine, Version 0.
extern "C" _Unwind_Reason_Code __gxx_personality_v0
(int, _Unwind_Action, _Unwind_Exception_Class,
@@ -0,0 +1,19 @@
--- gcc/Makefile.in.orig 2024-02-25 22:32:27 UTC
+++ gcc/Makefile.in
@@ -671,6 +671,8 @@ libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/
# Directory in which the compiler finds libraries etc.
libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
+# Directory in which the compiler finds headers.
+libsubincludedir = $(libdir)/gcc/$(target_alias)/$(version)/include
# Directory in which the compiler finds executables
libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
# Directory in which all plugin resources are installed
@@ -3821,6 +3823,7 @@ installdirs:
# $(libdir)/gcc/include isn't currently searched by cpp.
installdirs:
$(mkinstalldirs) $(DESTDIR)$(libsubdir)
+ $(mkinstalldirs) $(DESTDIR)$(libsubincludedir)
$(mkinstalldirs) $(DESTDIR)$(libexecsubdir)
$(mkinstalldirs) $(DESTDIR)$(bindir)
$(mkinstalldirs) $(DESTDIR)$(includedir)
@@ -0,0 +1,22 @@
Enable support for .init_array and .fini_array, which FreeBSD supports
since commit 83aa9cc00c2d83d05a0efe7a1496d8aab4a153bb in the src
repository.
There __FreeBSD_version is 1000009, so we start enabling the support
from __FreeBSD_version == 1000010.
--- gcc/configure.orig 2023-05-11 22:33:34 UTC
+++ gcc/configure
@@ -24214,6 +24214,13 @@ EOF
#else
# if defined __sun__ && defined __svr4__
/* Solaris ld.so.1 supports .init_array/.fini_array since Solaris 8. */
+# elif defined __FreeBSD__
+# include <sys/param.h>
+# if __FreeBSD_version >= 1000010
+ /* FreeBSD supports .init_array/.fini_array since FreeBSD 10. */
+# else
+# error The C library not known to support .init_array/.fini_array
+# endif
# else
# error The C library not known to support .init_array/.fini_array
# endif
@@ -0,0 +1,14 @@
--- gcc/jit/Make-lang.in.orig 2024-02-25 22:32:31 UTC
+++ gcc/jit/Make-lang.in
@@ -360,9 +360,9 @@ jit.install-headers: installdirs
# Install hooks:
jit.install-headers: installdirs
$(INSTALL_DATA) $(srcdir)/jit/libgccjit.h \
- $(DESTDIR)$(includedir)/libgccjit.h
+ $(DESTDIR)$(libsubincludedir)/libgccjit.h
$(INSTALL_DATA) $(srcdir)/jit/libgccjit++.h \
- $(DESTDIR)$(includedir)/libgccjit++.h
+ $(DESTDIR)$(libsubincludedir)/libgccjit++.h
ifneq (,$(findstring mingw,$(target)))
jit.install-common: installdirs jit.install-headers
@@ -0,0 +1,69 @@
GCC has two runtime libraries: The static library libgcc.a (-lgcc) and
the shared library libgcc_s.so (-lgcc_s). Both implement many of the
same functions but they also each have their unique functions. When
gcc links programs and libraries there are three possibilities:
1. gcc -static-libgcc or gcc -static: -lgcc
=> Just use libgcc.a.
2. gcc -shared-libgcc: -lgcc_s -lgcc
=> Link with libgcc_s first, so libgcc.a is only used for its unique
functions.
3. gcc: -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed
=> Link with libgcc.a first so libgcc_s is only used for its unique
functions (_Unwind_* functions).
Approach 3 is the default for gcc and it's also what clang and clang++ use;
approach 2 is the default for gfortran, g++ and probably other front ends.
This patch makes 3 the default for gfortran. It significantly reduces
the use of libgcc_s. The _Unwind_* functions are also available in the
old base system libgcc_s which means this reduces the need for
-rpath /usr/local/lib/gccN in ports that depend on libraries built with
gfortran. Consider a dependency tree like this:
prog -> libA -> libgcc_s (old base system libgcc_s is fine)
-> libB -> libgcc_s (libB built with gfortran, needs new libgcc_s)
Here prog needs to be linked with -rpath /usr/local/lib/gccN even if it's
a normal C program compiled with clang. Without -rpath it will fail to
start because it loads old libgcc_s first as a dependency of libA and then
it fails to load libB. With this patch libB works with old base system
libgcc_s or may not need libgcc_s at all, so prog does not need to be
linked with -rpath.
Upstream is unlikely accept a patch like this because libgfortran calls
some _Unwind_* functions and so always needs libgcc_s. Also because
every Fortran program and library links to libgfortran it makes sense
that option 2 above is the default. On FreeBSD where clang and GCC
compiled code can be mixed and where multiple libgcc_s may be installed,
option 3 is just a lot easier to deal with.
The bug that sparked this is PR 208120 (but note there's a lot of
misleading information in that bug. CMake is not actually doing
anything wrong.)
--- UTC
--- gcc/fortran/gfortranspec.cc.orig 2022-01-23 22:32:06.000000000 +0000
+++ gcc/fortran/gfortranspec.cc 2022-02-06 08:56:31.018286000 +0000
@@ -406,7 +406,7 @@
}
}
-#ifdef ENABLE_SHARED_LIBGCC
+#if 0
if (library)
{
unsigned int i;
--- libgfortran/Makefile.in.orig
+++ libgfortran/Makefile.in
@@ -759,7 +759,7 @@
$(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \
$(HWCAP_LDFLAGS) \
$(LIBM) $(extra_darwin_ldflags_libgfortran) \
- $(version_arg) -Wc,-shared-libgcc
+ $(version_arg)
libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP)
cafexeclib_LTLIBRARIES = libcaf_single.la
+18
View File
@@ -0,0 +1,18 @@
libc++ on FreeBSD always uses PathScale libcxxrt and cannot change to
LLVM libc++abi without breaking backward compatibility. Besides, mixing
different C++ ABIs is not supported unless subset via DT_FILTER.
https://github.com/llvm/llvm-project/commit/35479ffb1251
https://github.com/freebsd/freebsd-src/commit/cf56074e5271
--- gcc/cp/g++spec.cc.orig 2022-07-31 22:32:16 UTC
+++ gcc/cp/g++spec.cc
@@ -60,7 +60,7 @@ along with GCC; see the file COPYING3. If not see
#endif
#ifndef LIBCXXABI
-#define LIBCXXABI "c++abi"
+#define LIBCXXABI "cxxrt"
#endif
#ifndef LIBCXXABI_PROFILE
#define LIBCXXABI_PROFILE LIBCXXABI
@@ -0,0 +1,15 @@
--- libgcc/enable-execute-stack-mprotect.c.orig 2024-11-23 12:39:04 UTC
+++ libgcc/enable-execute-stack-mprotect.c
@@ -30,10 +30,11 @@ static int need_enable_exec_stack;
static int need_enable_exec_stack;
-static void check_enabling (void) __attribute__ ((unused));
extern void __enable_execute_stack (void *);
#if defined __sun__ && defined __svr4__
+static void check_enabling (void) __attribute__ ((unused));
+
static void __attribute__ ((constructor))
check_enabling (void)
{
@@ -0,0 +1,31 @@
GCC generates instructions that require variables to be aligned in memory on
certain CPUs. Our libthr does not have the required alignment so these CPUs fail
to execute these instructions. The instructions generation is driven by CPUTYPE.
Some CPUs are fine to execute these instructions on unaligned data.
This patch explicitly forbids GCC to generate instructions that require
alignment of the data.
If the entire program is compiled by LLVM or GCC, there is no problem (with GCC
everything is aligned, with LLVM vmovdqa is not used to assign both variables
at once).
Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
to build everything with GCC.
This patch will become obsolete once all supported FreeBSD releases
include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
+++ libgcc/unwind.inc
@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
uw_init_context (&this_context);
cur_context = this_context;
- exc->private_1 = (_Unwind_Ptr) stop;
- exc->private_2 = (_Unwind_Ptr) stop_argument;
+ __builtin_memcpy(&exc->private_1, &stop, sizeof(_Unwind_Ptr));
+ __builtin_memcpy(&exc->private_2, &stop_argument, sizeof(_Unwind_Ptr));
code = _Unwind_ForcedUnwind_Phase2 (exc, &cur_context, &frames);
if (code != _URC_INSTALL_CONTEXT)
@@ -0,0 +1,23 @@
Since the vDSO shared librares on Linux and FreeBSD are called
differently, the initialization order check fails on FreeBSD.
This patch fixes it by ignoring [vdso] instead of linux-vdso.so.
GCC gets the original file from the LLVM Project, so this patch should
probably be upstreamed directly to the LLVM Project rather than to GCC.
--- libsanitizer/asan/asan_linux.cpp.orig 2022-11-23 11:22:41 UTC
+++ libsanitizer/asan/asan_linux.cpp
@@ -148,6 +148,12 @@ static int FindFirstDSOCallback(struct dl_phdr_info *i
return 0;
# endif
+# if SANITIZER_FREEBSD
+ // Ignore vDSO
+ if (internal_strncmp(info->dlpi_name, "[vdso]", sizeof("[vdso]") - 1) == 0)
+ return 0;
+# endif
+
*name = info->dlpi_name;
return 1;
}
@@ -0,0 +1,13 @@
--- libsanitizer/asan/asan_thread.cpp.orig 2024-01-12 13:45:52 UTC
+++ libsanitizer/asan/asan_thread.cpp
@@ -323,7 +323,9 @@ void AsanThread::ClearShadowForThreadStackAndTLS() {
if (tls_begin_ != tls_end_) {
uptr tls_begin_aligned = RoundDownTo(tls_begin_, ASAN_SHADOW_GRANULARITY);
uptr tls_end_aligned = RoundUpTo(tls_end_, ASAN_SHADOW_GRANULARITY);
- FastPoisonShadow(tls_begin_aligned, tls_end_aligned - tls_begin_aligned, 0);
+ FastPoisonShadowPartialRightRedzone(tls_begin_aligned,
+ tls_end_ - tls_begin_aligned,
+ tls_end_aligned - tls_end_, 0);
}
}
+13
View File
@@ -0,0 +1,13 @@
[
{ type: install
message: <<EOD
To ensure binaries built with this toolchain find appropriate versions
of the necessary run-time libraries, you may want to link using
-Wl,-rpath=%%TARGLIB%%
For ports leveraging USE_GCC, USES=compiler, or USES=fortran this happens
transparently.
EOD
}
]
+3
View File
@@ -0,0 +1,3 @@
GCC, the GNU Compiler Collection, supports a number of languages.
This port installs the C, C++, and Fortran front ends as gcc16, g++16,
and gfortran16, respectively.
+3
View File
@@ -0,0 +1,3 @@
Building this port with LTO_BOOTSTRAP enabled requires significant amounts of
memory and time. Consider disabling LTO_BOOTSTRAP in favor of STANDARD_BOOTSTRAP
(or disabling BOOTSTRAP altogether) in case that is a problem.
+36
View File
@@ -0,0 +1,36 @@
bin/%%GNU_HOST%%-c++%%SUFFIX%%
bin/%%GNU_HOST%%-g++%%SUFFIX%%
bin/%%GNU_HOST%%-gcc%%SUFFIX%%
bin/%%GNU_HOST%%-gcc-%%GCC_VERSION%%
bin/%%GNU_HOST%%-gcc-ar%%SUFFIX%%
bin/%%GNU_HOST%%-gcc-nm%%SUFFIX%%
bin/%%GNU_HOST%%-gcc-ranlib%%SUFFIX%%
bin/%%GNU_HOST%%-gfortran%%SUFFIX%%
bin/c++%%SUFFIX%%
bin/cpp%%SUFFIX%%
bin/g++%%SUFFIX%%
bin/gcc%%SUFFIX%%
bin/gcc-ar%%SUFFIX%%
bin/gcc-nm%%SUFFIX%%
bin/gcc-ranlib%%SUFFIX%%
bin/gcov%%SUFFIX%%
bin/gcov-dump%%SUFFIX%%
bin/gcov-tool%%SUFFIX%%
bin/gfortran%%SUFFIX%%
bin/lto-dump%%SUFFIX%%
include/gcc%%SUFFIX%%/ISO_Fortran_binding.h
share/man/man1/cpp%%SUFFIX%%.1.gz
share/man/man1/g++%%SUFFIX%%.1.gz
share/man/man1/gcc%%SUFFIX%%.1.gz
share/man/man1/gcov%%SUFFIX%%.1.gz
share/man/man1/gcov-dump%%SUFFIX%%.1.gz
share/man/man1/gcov-tool%%SUFFIX%%.1.gz
share/man/man1/gfortran%%SUFFIX%%.1.gz
share/man/man1/lto-dump%%SUFFIX%%.1.gz
share/gcc-%%GCC_VERSION%%/python/libstdcxx/__init__.py
share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/__init__.py
share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/printers.py
share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/xmethods.py
@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
@comment Insert PLIST.lib here