summaryrefslogtreecommitdiff
path: root/lang/gcc48
diff options
context:
space:
mode:
authorryoon <ryoon>2014-05-31 13:06:25 +0000
committerryoon <ryoon>2014-05-31 13:06:25 +0000
commit6f7567def9f0f42a11ff7773e64cdff8ee1c1504 (patch)
treea67c5bcb5d37c50aa22a8a59d7a19a4e62b88b07 /lang/gcc48
parent408e6a5e9deb903f3bf2d9b5412e707ca3040863 (diff)
downloadpkgsrc-6f7567def9f0f42a11ff7773e64cdff8ee1c1504.tar.gz
Update to 4.8.3
* Convert gcc48 to simple meta-pkg * Potentially fix non-NetBSD packaging * Fix gcc48-libs/gcc48-cc++ build under OpenBSD/amd64 5.5 * Enable graphite option, from wip/gcc48snapshot via Xiyue Deng * Tweak nls option Changelog: GCC 4.8.3 This is the [35]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Support for the new powerpc64le-linux platform has been added. It defaults to generating code that conforms to the ELFV2
Diffstat (limited to 'lang/gcc48')
-rw-r--r--lang/gcc48/Makefile144
-rw-r--r--lang/gcc48/Makefile.common35
-rw-r--r--lang/gcc48/PLIST.java42
-rw-r--r--lang/gcc48/distinfo74
-rw-r--r--lang/gcc48/files/patch-gcc_targhooks.c-openbsd.diff154
-rw-r--r--lang/gcc48/options.mk41
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_configure52
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_dyn__load.c51
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_include_gc__config.h.in14
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_include_gc__config__macros.h24
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_include_gc__pthread__redirects.h26
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_include_private_gcconfig.h355
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_mach__dep.c22
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_misc.c13
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_os__dep.c177
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_pthread__support.c44
-rw-r--r--lang/gcc48/patches/patch-boehm-gc_threadlibs.c14
-rw-r--r--lang/gcc48/patches/patch-fixincludes_fixincl.x18
-rw-r--r--lang/gcc48/patches/patch-fixincludes_inclhack.def16
-rw-r--r--lang/gcc48/patches/patch-gcc_builtins.c56
-rw-r--r--lang/gcc48/patches/patch-gcc_c-family_c-format.c108
-rw-r--r--lang/gcc48/patches/patch-gcc_c-family_c.opt30
-rw-r--r--lang/gcc48/patches/patch-gcc_c_c-decl.c13
-rw-r--r--lang/gcc48/patches/patch-gcc_common.opt99
-rw-r--r--lang/gcc48/patches/patch-gcc_config.gcc149
-rw-r--r--lang/gcc48/patches/patch-gcc_config_exec-stack.h45
-rw-r--r--lang/gcc48/patches/patch-gcc_config_i386_i386.c31
-rw-r--r--lang/gcc48/patches/patch-gcc_config_i386_openbsd.h27
-rw-r--r--lang/gcc48/patches/patch-gcc_config_i386_openbsdelf.h18
-rw-r--r--lang/gcc48/patches/patch-gcc_config_openbsd-libpthread.h11
-rw-r--r--lang/gcc48/patches/patch-gcc_config_openbsd.h32
-rw-r--r--lang/gcc48/patches/patch-gcc_config_openbsd.opt12
-rw-r--r--lang/gcc48/patches/patch-gcc_configure31
-rw-r--r--lang/gcc48/patches/patch-gcc_defaults.h15
-rw-r--r--lang/gcc48/patches/patch-gcc_flags.h16
-rw-r--r--lang/gcc48/patches/patch-gcc_fortran_f95-lang.c14
-rw-r--r--lang/gcc48/patches/patch-gcc_gcc.c13
-rw-r--r--lang/gcc48/patches/patch-gcc_go_go-lang.c17
-rw-r--r--lang/gcc48/patches/patch-gcc_java_lang.c15
-rw-r--r--lang/gcc48/patches/patch-gcc_lto_lto.c17
-rw-r--r--lang/gcc48/patches/patch-gcc_opts.c52
-rw-r--r--lang/gcc48/patches/patch-gcc_testsuite_gcc.dg_format_format.h19
-rw-r--r--lang/gcc48/patches/patch-gcc_toplev.c13
-rw-r--r--lang/gcc48/patches/patch-libffi_configure33
-rw-r--r--lang/gcc48/patches/patch-libffi_include_Makefile.in13
-rw-r--r--lang/gcc48/patches/patch-libgcc_Makefile.in26
-rw-r--r--lang/gcc48/patches/patch-libgcc_config.host12
-rw-r--r--lang/gcc48/patches/patch-libgcc_libgcc2.c12
-rw-r--r--lang/gcc48/patches/patch-libgfortran_configure22
-rw-r--r--lang/gcc48/patches/patch-libgo_config_libtool.m413
-rw-r--r--lang/gcc48/patches/patch-libgomp_configure22
-rw-r--r--lang/gcc48/patches/patch-libiberty_cp-demangle.c22
-rw-r--r--lang/gcc48/patches/patch-libjava_configure37
-rw-r--r--lang/gcc48/patches/patch-libjava_configure.host17
-rw-r--r--lang/gcc48/patches/patch-libjava_libltdl_configure14
-rw-r--r--lang/gcc48/patches/patch-libjava_prims.cc13
-rw-r--r--lang/gcc48/patches/patch-libmudflap_mf-runtime.h16
-rw-r--r--lang/gcc48/patches/patch-libstdc++-v3_config_os_bsd_openbsd_os__defines.h11
-rw-r--r--lang/gcc48/version.mk4
59 files changed, 2112 insertions, 344 deletions
diff --git a/lang/gcc48/Makefile b/lang/gcc48/Makefile
index ccc9b42bebe..21f75bf0988 100644
--- a/lang/gcc48/Makefile
+++ b/lang/gcc48/Makefile
@@ -1,153 +1,21 @@
-# $NetBSD: Makefile,v 1.15 2014/05/29 23:36:42 wiz Exp $
+# $NetBSD: Makefile,v 1.16 2014/05/31 13:06:25 ryoon Exp $
GCC_PKGNAME= gcc48
.include "version.mk"
-DISTNAME= gcc-${GCC48_DIST_VERSION}
PKGNAME= ${GCC_PKGNAME}-${GCC48_DIST_VERSION}
-## When bumping the PKGREVISION of this package the PKGREVISION of
-## lang/gcc48-libs needs to be bump to be at least 1 more than the
-## PKGREVISION of this package!
-PKGREVISION= 5
CATEGORIES= lang
-MASTER_SITES= ${MASTER_SITE_GNU:=gcc/gcc-${GCC48_DIST_VERSION}/}
-EXTRACT_SUFX= .tar.bz2
MAINTAINER= sbd@NetBSD.org
HOMEPAGE= http://gcc.gnu.org/
COMMENT= The GNU Compiler Collection (GCC) - 4.8 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}
+META_PACKAGE= yes
-NOT_FOR_PLATFORM= Interix-*-*
+DEPENDS+= gcc48-libs-[0-9]*:../../lang/gcc48-libs
+DEPENDS+= gcc48-cc++-[0-9]*:../../lang/gcc48-cc++
+DEPENDS+= gcc48-fortran-[0-9]*:../../lang/gcc48-fortran
+DEPENDS+= gcc48-objc-[0-9]*:../../lang/gcc48-objc
-USE_LANGUAGES= c c++
-USE_TOOLS+= gmake makeinfo sed:run
-GNU_CONFIGURE= yes
-## 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
-
-UNLIMIT_RESOURCES+= datasize
-UNLIMIT_RESOURCES+= stacksize
-
-SUBST_CLASSES+= vars
-SUBST_MESSAGE.vars= Setting target machine name path in ${SUBST_FILES.vars}
-SUBST_STAGE.vars= pre-configure
-SUBST_FILES.vars= gcc/Makefile.in
-SUBST_VARS.vars= GCC_TARGET_MACHINE
-
-.include "../../mk/bsd.prefs.mk"
-
-LANGS= c
-
-# In some cases LINKER_RPATH_FLAG needs a trailing space.
-LINKER_RPATH_FLAG:= ${LINKER_RPATH_FLAG:S/-rpath/& /}
-
-## The Library rpath to use in end programs.
-LDFLAGS_FOR_TARGET= ${LDFLAGS:M${COMPILER_RPATH_FLAG}*:N*/usr/lib*}
-
-# The "-static-libstdc++ -static-libgcc" flags are normally added to the
-# boot-ldflags by configure but because we are supply the boot-ldflags
-# we mash supply them.
-BOOT_LDFLAGS= -static-libstdc++ -static-libgcc ${LDFLAGS_FOR_TARGET}
-# Needed on Darwin when LDFLAGS point to a SDK
-BOOT_LDFLAGS+= ${LDFLAGS:M-Wl,-syslibroot*}
-# GCC does not understand this option; remove it, or stage build will fail
-BUILDLINK_TRANSFORM+= rm:-stdlib=libc++
-
-## For target librarys and libjava programs.
-CONFIGURE_ENV+= LDFLAGS_FOR_TARGET=${LDFLAGS_FOR_TARGET:Q}
-
-CONFIGURE_ARGS+= --enable-languages=${LANGS:Q}
-CONFIGURE_ARGS+= --enable-shared
-CONFIGURE_ARGS+= --enable-long-long
-CONFIGURE_ARGS+= --with-local-prefix=${GCC_PREFIX:Q}
-CONFIGURE_ARGS+= --enable-libssp
-CONFIGURE_ARGS+= --enable-threads=posix
-CONFIGURE_ARGS+= --with-boot-ldflags=${BOOT_LDFLAGS:Q}
-.if ${OPSYS} == "NetBSD"
-CONFIGURE_ARGS+= --with-gnu-ld --with-ld=/usr/bin/ld
-CONFIGURE_ARGS+= --with-gnu-as --with-as=/usr/bin/as
-MAKE_ENV+= ac_cv_func_clock_gettime=yes
-.endif
-.if ${OPSYS} == "DragonFly"
-CONFIGURE_ARGS+= --disable-bootstrap
-.endif
-
-.if !empty(MACHINE_PLATFORM:MNetBSD-*-i386) || !empty(MACHINE_PLATFORM:MLinux-*-i386)
-CONFIGURE_ARGS+= --with-arch=i486 --with-tune=i486
-.endif
-
-.include "options.mk"
-
-# ${WRKSRC}/fixincludes/ looks for sed and compiles the path to sed into
-# a binary so we need to make sure we give it the installed sed and not
-# the tool wrapped one.
-MAKE_ENV+= ac_cv_path_SED=${TOOLS_SED}
-MAKE_ENV+= lt_cv_path_SED=${TOOLS_SED}
-
-# Determine whether to use binutils
-.if ${OPSYS} == "SunOS"
-. if exists(/usr/sfw/bin/gobjdump)
-CONFIGURE_ENV+= OBJDUMP=/usr/sfw/bin/gobjdump
-. endif
-. if exists(/usr/bin/ld)
-CONFIGURE_ARGS+= --without-gnu-ld --with-ld=/usr/bin/ld
-. else
-CONFIGURE_ARGS+= --without-gnu-ld --with-ld=/usr/ccs/bin/ld
-. endif
-. if exists(/usr/sfw/bin/gas)
-CONFIGURE_ARGS+= --with-gnu-as --with-as=/usr/sfw/bin/gas
-. elif exists(/usr/ccs/bin/as)
-CONFIGURE_ARGS+= --without-gnu-as --with-as=/usr/ccs/bin/as
-. else
-BUILDLINK_DEPMETHOD.binutils= full
-. include "../../devel/binutils/buildlink3.mk"
-CONFIGURE_ARGS+= --with-gnu-as --with-as=${PREFIX}/bin/gas
-. endif
-.endif
-
-pre-configure:
- ${RUN} cd ${WRKSRC} && ${MKDIR} ${OBJDIR}
-
-TEST_TARGET= -k check || ${TRUE}
-pre-test:
- ${RUN} \
- if runtest --version >/dev/null 2>/dev/null ; then \
- : ; \
- else \
- ${ECHO} "ERROR: Please install devel/dejagnu in order to run the test suite." ; \
- exit 1 ; \
- fi
-post-test:
- ${RUN} cd ${WRKSRC} && cd ${OBJDIR} && \
- ${SHELL} ${WRKSRC}/contrib/test_summary >${WRKDIR}/test_summary.log
- @${INFO_MSG} "Test summary are available in ${WRKDIR}/test_summary.log"
-
-post-install:
- ${TEST} -f ${DESTDIR}${GCC_PREFIX}/bin/cc || \
- ( cd ${DESTDIR}${GCC_PREFIX}/bin ; ${LN} -f gcc cc )
-.if !empty(PKG_OPTIONS:Mgcc-java)
- ${RM} -f ${DESTDIR}${JAVA_HOME}/bin/javadoc
- ${RM} -f ${DESTDIR}${JAVA_HOME}/jre/lib/${JAVA_ARCH}/libjawt.so
-.endif
-.if !empty(MACHINE_PLATFORM:MSunOS-*-*86*) && ${OS_VERSION} != "5.11"
- ${SH} files/values.c ${DESTDIR}${GCC_PREFIX}/bin/gcc -m32 || ${TRUE}
- ${SH} files/values.c ${DESTDIR}${GCC_PREFIX}/bin/gcc -m64 || ${TRUE}
-.endif
-
-GENERATE_PLIST+= \
- cd ${DESTDIR}${PREFIX} && \
- ${FIND} ${GCC_SUBPREFIX} \( -type f -o -type l \) -print | ${SORT} ;
-
-.include "../../mk/dlopen.buildlink3.mk"
-.include "../../mk/pthread.buildlink3.mk"
.include "../../mk/bsd.pkg.mk"
diff --git a/lang/gcc48/Makefile.common b/lang/gcc48/Makefile.common
index f27b5617177..f5fe751ee2d 100644
--- a/lang/gcc48/Makefile.common
+++ b/lang/gcc48/Makefile.common
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.common,v 1.2 2014/05/20 19:12:36 adam Exp $
+# $NetBSD: Makefile.common,v 1.3 2014/05/31 13:06:25 ryoon Exp $
GCC_PKGNAME= gcc48
.include "../../lang/gcc48/version.mk"
@@ -15,16 +15,17 @@ MAINTAINER= sbd@NetBSD.org
HOMEPAGE= http://gcc.gnu.org/
LICENSE= gnu-gpl-v2 AND gnu-gpl-v3 AND gnu-lgpl-v2 AND gnu-lgpl-v3
-DISTFILES= ${DEFAULT_DISTFILES}
-EXTRACT_ONLY= ${DEFAULT_DISTFILES}
+DISTFILES+= ${DEFAULT_DISTFILES}
+EXTRACT_ONLY+= ${DEFAULT_DISTFILES}
DISTINFO_FILE= ${.CURDIR}/../../lang/gcc48/distinfo
PATCHDIR= ${.CURDIR}/../../lang/gcc48/patches
+FILESDIR= ${.CURDIR}/../../lang/gcc48/files
NOT_FOR_PLATFORM= Interix-*-*
USE_LANGUAGES= c c++
-USE_TOOLS+= gmake makeinfo sed:run
+USE_TOOLS+= bison gmake makeinfo perl:build sed:run
USE_LIBTOOL= yes
GNU_CONFIGURE= yes
## Build outside ${WRKSRC}
@@ -36,9 +37,10 @@ GCC_PREFIX= ${PREFIX}/${GCC_SUBPREFIX}
GNU_CONFIGURE_PREFIX= ${GCC_PREFIX}
INFO_FILES= yes
-PLIST_VARS+= java darwin unix
+PLIST_VARS+= java darwin unix libgcc_s nonetbsd
JAVA_MACHINE_ARCH= ${MACHINE_ARCH:S/x86_64/amd64/}
PLIST_SUBST+= JAVA_MACHINE_ARCH=${JAVA_MACHINE_ARCH}
+PLIST_SUBST+= PKGVERSION_NOREV=${PKGVERSION_NOREV}
# Errors in libgo/runtime/runtime.h
#BUILDLINK_TRANSFORM+= rm:-Werror
@@ -58,7 +60,11 @@ SUBST_VARS.vars= GCC_TARGET_MACHINE
.if ${OPSYS} == "Darwin"
PLIST.darwin= yes
-.else
+.elif ${OPSYS} != "NetBSD"
+PLIST.nonetbsd= yes
+PLIST.unix= yes
+.else # NetBSD
+PLIST.libgcc_s= yes
PLIST.unix= yes
.endif
@@ -71,7 +77,11 @@ LDFLAGS_FOR_TARGET= ${LDFLAGS:M${COMPILER_RPATH_FLAG}*:N*/usr/lib*}
# The "-static-libstdc++ -static-libgcc" flags are normally added to the
# boot-ldflags by configure but because we are supply the boot-ldflags
# we mash supply them.
+.if ${OPSYS} == "OpenBSD"
+BOOT_LDFLAGS= -static ${LDFLAGS_FOR_TARGET}
+.else
BOOT_LDFLAGS= -static-libstdc++ -static-libgcc ${LDFLAGS_FOR_TARGET}
+.endif
# Needed on Darwin when LDFLAGS point to a SDK
BOOT_LDFLAGS+= ${LDFLAGS:M-Wl,-syslibroot*}
# GCC does not understand this option; remove it, or stage build will fail
@@ -128,9 +138,22 @@ BUILDLINK_DEPMETHOD.binutils= full
. include "../../devel/binutils/buildlink3.mk"
CONFIGURE_ARGS+= --with-gnu-as --with-as=${PREFIX}/bin/gas
. endif
+.elif ${OPSYS} == "OpenBSD"
+BUILDLINK_DEPMETHOD.binutils= full
+. include "../../devel/binutils/buildlink3.mk"
+CONFIGURE_ARGS+= --with-gnu-as --with-as=${PREFIX}/bin/gas
+.endif
+
+# Create in-tree isl and cloog
+.if !empty(PKG_OPTIONS:Mgcc-graphite)
+post-extract: post-extract-graphite
.endif
pre-configure:
+.if ${OPSYS} == "OpenBSD"
+ cd ${WRKSRC}/gcc && \
+ patch -p1 < ${FILESDIR}/patch-gcc_targhooks.c-openbsd.diff
+.endif
${RUN} cd ${WRKSRC} && ${MKDIR} ${OBJDIR}
TEST_TARGET= -k check || ${TRUE}
diff --git a/lang/gcc48/PLIST.java b/lang/gcc48/PLIST.java
deleted file mode 100644
index d348e399c6b..00000000000
--- a/lang/gcc48/PLIST.java
+++ /dev/null
@@ -1,42 +0,0 @@
-@comment $NetBSD: PLIST.java,v 1.1 2013/04/01 21:06:15 wiz Exp $
-bin/${JAVA_NAME}-appletviewer
-bin/${JAVA_NAME}-jar
-bin/${JAVA_NAME}-jarsigner
-bin/${JAVA_NAME}-java
-bin/${JAVA_NAME}-javah
-bin/${JAVA_NAME}-keytool
-bin/${JAVA_NAME}-native2ascii
-bin/${JAVA_NAME}-orbd
-bin/${JAVA_NAME}-rmic
-bin/${JAVA_NAME}-rmid
-bin/${JAVA_NAME}-rmiregistry
-bin/${JAVA_NAME}-serialver
-bin/${JAVA_NAME}-tnameserv
-java/${JAVA_NAME}/bin/appletviewer
-java/${JAVA_NAME}/bin/jar
-java/${JAVA_NAME}/bin/jarsigner
-java/${JAVA_NAME}/bin/java
-java/${JAVA_NAME}/bin/javah
-java/${JAVA_NAME}/bin/keytool
-java/${JAVA_NAME}/bin/native2ascii
-java/${JAVA_NAME}/bin/orbd
-java/${JAVA_NAME}/bin/rmic
-java/${JAVA_NAME}/bin/rmid
-java/${JAVA_NAME}/bin/rmiregistry
-java/${JAVA_NAME}/bin/serialver
-java/${JAVA_NAME}/bin/tnameserv
-java/${JAVA_NAME}/include/jawt.h
-java/${JAVA_NAME}/include/jni.h
-java/${JAVA_NAME}/include/linux/jawt_md.h
-java/${JAVA_NAME}/include/linux/jni_md.h
-java/${JAVA_NAME}/jre/bin/java
-java/${JAVA_NAME}/jre/bin/keytool
-java/${JAVA_NAME}/jre/bin/orbd
-java/${JAVA_NAME}/jre/bin/rmid
-java/${JAVA_NAME}/jre/bin/rmiregistry
-java/${JAVA_NAME}/jre/bin/tnameserv
-java/${JAVA_NAME}/jre/lib/${JAVA_ARCH}/client/libjvm.so
-java/${JAVA_NAME}/jre/lib/${JAVA_ARCH}/server/libjvm.so
-java/${JAVA_NAME}/jre/lib/rt.jar
-java/${JAVA_NAME}/jre/lib/security/java.security
-java/${JAVA_NAME}/lib/tools.jar
diff --git a/lang/gcc48/distinfo b/lang/gcc48/distinfo
index 59ef383d77e..0fec0ab077a 100644
--- a/lang/gcc48/distinfo
+++ b/lang/gcc48/distinfo
@@ -1,42 +1,91 @@
-$NetBSD: distinfo,v 1.16 2014/05/10 14:14:58 richard Exp $
+$NetBSD: distinfo,v 1.17 2014/05/31 13:06:25 ryoon Exp $
-SHA1 (ecj-4.5.jar) = 58c1d79c64c8cd718550f32a932ccfde8d1e6449
-RMD160 (ecj-4.5.jar) = d3f4da657f086b6423f74e93f001132f4855368a
-Size (ecj-4.5.jar) = 1470676 bytes
-SHA1 (gcc-4.8.2.tar.bz2) = 810fb70bd721e1d9f446b6503afe0a9088b62986
-RMD160 (gcc-4.8.2.tar.bz2) = a417e682baa20877c290f6dc7d3d03a0c3710371
-Size (gcc-4.8.2.tar.bz2) = 85999682 bytes
+SHA1 (cloog-0.18.1.tar.gz) = 2dc70313e8e2c6610b856d627bce9c9c3f848077
+RMD160 (cloog-0.18.1.tar.gz) = 5c4a182efc0d42e7d5c30e6fcca5832776a2e69a
+Size (cloog-0.18.1.tar.gz) = 3857324 bytes
+SHA1 (gcc-4.8.3.tar.bz2) = da0a2b9ec074f2bf624a34f3507f812ebb6e4dce
+RMD160 (gcc-4.8.3.tar.bz2) = 2c7214ff607cbe822282c04d1d6f9fea765c82c5
+Size (gcc-4.8.3.tar.bz2) = 86126808 bytes
+SHA1 (isl-0.12.2.tar.bz2) = ca98a91e35fb3ded10d080342065919764d6f928
+RMD160 (isl-0.12.2.tar.bz2) = e8fb6bad4b579865a6a31c160fc21a0c9ad1e7b8
+Size (isl-0.12.2.tar.bz2) = 1319434 bytes
+SHA1 (patch-boehm-gc_configure) = 4ab0772cede9d4bef0c7eab412359f0700195135
+SHA1 (patch-boehm-gc_dyn__load.c) = 48fa440a1b5c05835550c12039739feb35b8927b
+SHA1 (patch-boehm-gc_include_gc__config.h.in) = cbd88100e8fb371d3d42c531658ce467c823498e
+SHA1 (patch-boehm-gc_include_gc__config__macros.h) = 0edc157309687c793f5ebb6acaf747f209848a6b
+SHA1 (patch-boehm-gc_include_gc__pthread__redirects.h) = 5df4e69665bc69c4a53f80361ed84bc7b7ef7b6f
+SHA1 (patch-boehm-gc_include_private_gcconfig.h) = 72cdf7bb2ddd843dc2f74ac4e09748ec213a343d
+SHA1 (patch-boehm-gc_mach__dep.c) = d91ca0d42357647ccf9fa3f4624bf8eaea2afbf9
+SHA1 (patch-boehm-gc_misc.c) = 11bf4eb2e8c54b195904b3f52bd35d5f979058f1
+SHA1 (patch-boehm-gc_os__dep.c) = add0c7e59739cc7c6a248c68d048ebec6700a037
+SHA1 (patch-boehm-gc_pthread__support.c) = b0d66aba1fbf419eb8cf04fd1fd8584e8f92df8d
+SHA1 (patch-boehm-gc_threadlibs.c) = 4cac00c47354d506f69cc784dfcf0b65c5af3237
+SHA1 (patch-fixincludes_fixincl.x) = b53bf6ae3ef1a0cc6d3ce1153f926ed208816c90
+SHA1 (patch-fixincludes_inclhack.def) = 577021b838b64ff987e28b0017afb3b05e28458f
SHA1 (patch-gcc-config-vax-constraints.md) = e6cea7a5334b5b124ca3e8b62eba45423e788e55
SHA1 (patch-gcc-config-vax-vax.c) = 02e389ec418a0fee1431ecd61d65b7f8d7629785
SHA1 (patch-gcc-config-vax-vax.md) = e06696be85641cbe9131ecc10bb28c45a465916d
SHA1 (patch-gcc_Makefile.in) = 3706889f55dac4f2847301340d95fc11645108eb
-SHA1 (patch-gcc_config.gcc) = ac175c5eecf3dd53508479b30bf5c59cc0a5fca9
+SHA1 (patch-gcc_builtins.c) = 67c66568237b68b22ba99bc76336e001e1634925
+SHA1 (patch-gcc_c-family_c-format.c) = b4893ae251b5b936026bd7cc28b9a8ec29af42cb
+SHA1 (patch-gcc_c-family_c.opt) = 175b3029cac6b7c04a54dcc52c1e832f83b8beff
+SHA1 (patch-gcc_c_c-decl.c) = a6f6d483390beae6d6d983963086e4287c2258c4
+SHA1 (patch-gcc_common.opt) = 31d062306ef6bbeebd85ee6e06c563a006a64aca
+SHA1 (patch-gcc_config.gcc) = 300ccd9dae0e185d43f705f4e9252244ac84117a
SHA1 (patch-gcc_config.host) = 1b1e11cd199eb93f49443d51c0063b09b7327858
SHA1 (patch-gcc_config_dragonfly-stdint.h) = 740dc819b446d5f1476506322c4b280ffdb5a6c0
SHA1 (patch-gcc_config_dragonfly.h) = 82f549cdc7543b4bf413a44d481ef42b10f59c82
SHA1 (patch-gcc_config_dragonfly.opt) = 92f615c73c2e94664bae5b5935ab8b09bca15f73
+SHA1 (patch-gcc_config_exec-stack.h) = 8135806e88c1b136038bb240958a4435b4e0bbe3
SHA1 (patch-gcc_config_host-netbsd.c) = 8f13b09dd7006d456cd1c66e895be504e9537880
SHA1 (patch-gcc_config_i386_dragonfly.h) = 0d3f785434c02beb9c4561fe59842a970e8f7896
+SHA1 (patch-gcc_config_i386_i386.c) = e787cda58beb2908f5656ccab0fde7f2d6d48037
+SHA1 (patch-gcc_config_i386_openbsd.h) = df5b85b5957392138f99085bd8ebeb923e37e9e7
+SHA1 (patch-gcc_config_i386_openbsdelf.h) = 74498a1bd7c339c90b847740d3c474ad3ca4a956
SHA1 (patch-gcc_config_netbsd-stdint.h) = 025fc883101a187e84ed4c0772406720d645d550
+SHA1 (patch-gcc_config_openbsd-libpthread.h) = 5043cf383fb68ff37b0cae22e61a97e26cff899e
+SHA1 (patch-gcc_config_openbsd.h) = 0090d48281c4973a18e8a70b2be9d2e999cca0a6
+SHA1 (patch-gcc_config_openbsd.opt) = 08b01bc4d7e171c3ee2ce5638a5859cff50c8ff8
SHA1 (patch-gcc_config_sol2.h) = de6455ee88f281737501287759b7a83b8db05398
SHA1 (patch-gcc_config_x-netbsd) = 6dc3d78e26df62054ea29f98ca51592858e671e3
-SHA1 (patch-gcc_configure) = a4b670d0c54c410d38715b7a2a572a7048e3ec5e
-SHA1 (patch-gcc_fortran_f95-lang.c) = 945aacf6b307f2120a4105c833b45a40feced68e
+SHA1 (patch-gcc_configure) = 868f4a55d5f6066852e054a334203213a06d49ca
+SHA1 (patch-gcc_defaults.h) = e0e7d489e06fc642e669c5a834838e704a262d75
+SHA1 (patch-gcc_flags.h) = 7301be3bf7bafd52cb99e7d9c722fc0715a3dde3
+SHA1 (patch-gcc_fortran_f95-lang.c) = 98eb68f444544ac55dea5635458bc20c73a50a49
+SHA1 (patch-gcc_gcc.c) = 4524424a24ddf57dfddbe87bf8adf6785198130f
SHA1 (patch-gcc_ggc-common.c) = fa577bc25260d7e6304f166686ba51c0b677d7f6
SHA1 (patch-gcc_ginclude_stddef.h) = 220ec23aecffca81337ae4c06afc18051da89b9a
+SHA1 (patch-gcc_go_go-lang.c) = 2e546c645b82a0ace4635aaaba692f2174bddaca
+SHA1 (patch-gcc_java_lang.c) = 81a38b32519b5a6509635491cda9aea7b9740541
+SHA1 (patch-gcc_lto_lto.c) = 6cde32d8f318dbb55fd4774eab239989624ddff5
+SHA1 (patch-gcc_opts.c) = da9be731d227e4bbc11ba21c1f45ad38ec30d7f0
SHA1 (patch-gcc_system.h) = 4c959a6b1c4d524cbdf44cfb80f0e5758ec20783
SHA1 (patch-gcc_testsuite_g++.dg_eh_unwind-direct.C) = fd85ccee102e9618a8010d2dcbb2d9916b28f1cc
+SHA1 (patch-gcc_testsuite_gcc.dg_format_format.h) = 5bb7af9f355dcd80bfaf4a206d86e4badd4d4b4d
+SHA1 (patch-gcc_toplev.c) = 4f08e99b5cf6960e33cb91f171c9065555ed844a
SHA1 (patch-include_libiberty.h) = ad2c64e9a14405c89b02ff68811b1c889405d0a1
-SHA1 (patch-libgcc_config.host) = 1807e784c9808243d1a99b19534d94752d81ce6d
+SHA1 (patch-libffi_configure) = b7cc1c187b2e0c1dea42509612b4d9ddf9d27daf
+SHA1 (patch-libffi_include_Makefile.in) = 7c3208b1b05c33d9be48683ff5146adbe2bf92a1
+SHA1 (patch-libgcc_Makefile.in) = 547d0a22c5d14e41ebeb6197bc3ed1d24ad63475
+SHA1 (patch-libgcc_config.host) = 0eead41f6a01cbe2b9c6d0f64ee4441841cef521
SHA1 (patch-libgcc_config_i386_dragonfly-unwind.h) = 9d77252dd982495e90f95b82706bab29e581df9f
SHA1 (patch-libgcc_config_t-slibgcc-sld) = 1b3ae1dc03eaad16a51311049ffc9e42c44dfcbc
SHA1 (patch-libgcc_crtstuff.c) = 88500ea895cd683608f8f2b7177149f11947e3b4
+SHA1 (patch-libgcc_libgcc2.c) = c3a1f3a6db9a4591a0858f84b963247634b0dac3
SHA1 (patch-libgcc_unwind-dw2-fde-dip.c) = 770f04f3cbeb0d794fa297b328f06f6e687419c0
+SHA1 (patch-libgfortran_configure) = e466dd7637d7ba61b23c5f24e4497da46e56d60a
SHA1 (patch-libgo_Makefile.in) = 612987541f745c7be6835ce7fb7119884db294c3
+SHA1 (patch-libgo_config_libtool.m4) = d62f00eae3bbd89a878eaf4e0b995ac482a39992
SHA1 (patch-libgo_config_ltmain.sh) = 703a27554e479cc2e48410a6bb0e5f5b4be2c150
+SHA1 (patch-libgomp_configure) = 8527167e1f08ac7e64277ac0d22532dd59394b64
+SHA1 (patch-libiberty_cp-demangle.c) = 2444346cd054f787dcc9704ee9be6acca9b835a3
SHA1 (patch-libjava_boehm.cc) = b18bc9d410a62543583c77e011f50b86f41ca18a
-SHA1 (patch-libjava_configure) = 9c83d60e155d6a9aac542d65ff195a99c5c764ff
+SHA1 (patch-libjava_configure) = 22bf1c472d4b5a823df85307371e50d3f7d89184
+SHA1 (patch-libjava_configure.host) = 194b88bfe2c2ed24fd7bc5b6b84c70d7329bf1b2
SHA1 (patch-libjava_contrib_rebuild-gcj-db.in) = bb01d738fc7db05046ae37e8ade32574de1d8297
+SHA1 (patch-libjava_libltdl_configure) = aed53e3063685d16a9dbd4c494e40be2a2ecede4
+SHA1 (patch-libjava_prims.cc) = ce9160f122885a72850df43134ebe4587b59637d
+SHA1 (patch-libmudflap_mf-runtime.h) = efb0687749fbd8d71e75542a36392d51805c2cc8
SHA1 (patch-libsanitizer_configure.tgt) = a56ba5e2dc6bc413e80358353af16e6910b0e106
SHA1 (patch-libstdc++-v3_config_locale_dragonfly_c__locale.cc) = 5c0ccc6b90e3508b03ed399e8e9e300a6aa9cbb7
SHA1 (patch-libstdc++-v3_config_locale_dragonfly_ctype__members.cc) = 876a754c7fcb1c4a362ca7b2655da6cdbb784ccc
@@ -47,6 +96,7 @@ SHA1 (patch-libstdc++-v3_config_os_bsd_dragonfly_os__defines.h) = 9a45ecb4309c50
SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h) = 014d442c885b9c51d1a4af05205279c274a9559d
SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__configure__char.cc) = b63c2682336c9b6f0e0d7b900d6f40ad6e7a5ec4
SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__inline.h) = 626fc1f9c035ac5cef30a92d525af4e778835ebf
+SHA1 (patch-libstdc++-v3_config_os_bsd_openbsd_os__defines.h) = f899b6ddfabdef82ecee3562a946cecd1b995dd0
SHA1 (patch-libstdc++-v3_configure) = 3821275fa698221d7665ea3c98b0a24f33954a5a
SHA1 (patch-libstdc++-v3_configure.host) = 7426ea4a9735e5f886f4a3ffb4a9ba62734178c4
SHA1 (patch-libstdc++-v3_libsupc++_unwind-cxx.h) = 9784bfa4323f8498b36565d0fea28fce69ffdbb1
diff --git a/lang/gcc48/files/patch-gcc_targhooks.c-openbsd.diff b/lang/gcc48/files/patch-gcc_targhooks.c-openbsd.diff
new file mode 100644
index 00000000000..bb2871b58d0
--- /dev/null
+++ b/lang/gcc48/files/patch-gcc_targhooks.c-openbsd.diff
@@ -0,0 +1,154 @@
+$NetBSD: patch-gcc_targhooks.c-openbsd.diff,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/targhooks.c.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/targhooks.c
+@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3.
+ #include "tree.h"
+ #include "expr.h"
+ #include "output.h"
++#include "c-family/c-common.h"
+ #include "diagnostic-core.h"
+ #include "function.h"
+ #include "target.h"
+@@ -639,7 +640,7 @@ default_stack_protect_guard (void)
+ rtx x;
+
+ t = build_decl (UNKNOWN_LOCATION,
+- VAR_DECL, get_identifier ("__stack_chk_guard"),
++ VAR_DECL, get_identifier ("__guard_local"),
+ ptr_type_node);
+ TREE_STATIC (t) = 1;
+ TREE_PUBLIC (t) = 1;
+@@ -648,6 +649,8 @@ default_stack_protect_guard (void)
+ TREE_THIS_VOLATILE (t) = 1;
+ DECL_ARTIFICIAL (t) = 1;
+ DECL_IGNORED_P (t) = 1;
++ DECL_VISIBILITY (t) = VISIBILITY_HIDDEN;
++ DECL_VISIBILITY_SPECIFIED (t) = 1;
+
+ /* Do not share RTL as the declaration is visible outside of
+ current function. */
+@@ -660,67 +663,72 @@ default_stack_protect_guard (void)
+ return t;
+ }
+
+-static GTY(()) tree stack_chk_fail_decl;
++static GTY(()) int stack_protect_labelno;
+
+ tree
+ default_external_stack_protect_fail (void)
+ {
+- tree t = stack_chk_fail_decl;
+-
+- if (t == NULL_TREE)
+- {
+- t = build_function_type_list (void_type_node, NULL_TREE);
+- t = build_decl (UNKNOWN_LOCATION,
+- FUNCTION_DECL, get_identifier ("__stack_chk_fail"), t);
+- TREE_STATIC (t) = 1;
+- TREE_PUBLIC (t) = 1;
+- DECL_EXTERNAL (t) = 1;
+- TREE_USED (t) = 1;
+- TREE_THIS_VOLATILE (t) = 1;
+- TREE_NOTHROW (t) = 1;
+- DECL_ARTIFICIAL (t) = 1;
+- DECL_IGNORED_P (t) = 1;
+- DECL_VISIBILITY (t) = VISIBILITY_DEFAULT;
+- DECL_VISIBILITY_SPECIFIED (t) = 1;
+-
+- stack_chk_fail_decl = t;
+- }
+-
+- return build_call_expr (t, 0);
++ tree t, func, type, init, stack_smash_handler;
++ const char *tmp_name;
++ char *name;
++ size_t length;
++ char name_buf[32];
++
++ name = (char *)xmalloc(32);
++ if (NULL == (tmp_name = fname_as_string (0))) {
++ strlcpy (name, "*unknown*", 32);
++ } else {
++ strlcpy (name, tmp_name, 32);
++ }
++
++ length = strlen (name);
++ /* Build a decl for __func__. */
++ type = build_array_type (char_type_node,
++ build_index_type (size_int (length)));
++ type = build_qualified_type (type, TYPE_QUAL_CONST);
++
++ init = build_string (length + 1, name);
++ free ((char *) name);
++ TREE_TYPE (init) = type;
++
++ func = build_decl (UNKNOWN_LOCATION, VAR_DECL, NULL_TREE, type);
++ TREE_STATIC (func) = 1;
++ TREE_READONLY (func) = 1;
++ DECL_ARTIFICIAL (func) = 1;
++ ASM_GENERATE_INTERNAL_LABEL (name_buf, "LSSH", stack_protect_labelno++);
++ DECL_NAME (func) = get_identifier (name_buf);
++ DECL_INITIAL (func) = init;
++
++ assemble_variable (func, 0, 0, 0);
++
++ /* Build a decl for __stack_smash_handler. */
++ t = build_pointer_type (TREE_TYPE (func));
++ t = build_function_type_list (void_type_node, t, NULL_TREE);
++ t = build_decl (UNKNOWN_LOCATION,
++ FUNCTION_DECL, get_identifier ("__stack_smash_handler"), t);
++ /* t = build_fn_decl ("__stack_smash_handler", t); */
++ TREE_STATIC (t) = 1;
++ TREE_PUBLIC (t) = 1;
++ DECL_EXTERNAL (t) = 1;
++ TREE_USED (t) = 1;
++ TREE_THIS_VOLATILE (t) = 1;
++ TREE_NOTHROW (t) = 1;
++ DECL_ARTIFICIAL (t) = 1;
++ DECL_IGNORED_P (t) = 1;
++ DECL_VISIBILITY (t) = VISIBILITY_DEFAULT;
++ DECL_VISIBILITY_SPECIFIED (t) = 1;
++
++ stack_smash_handler = t;
++
++ /* Generate a call to __stack_smash_handler(__func__). */
++ t = build_fold_addr_expr (func);
++ return build_call_expr (stack_smash_handler, 1, t);
+ }
+
+ tree
+ default_hidden_stack_protect_fail (void)
+ {
+-#ifndef HAVE_GAS_HIDDEN
+ return default_external_stack_protect_fail ();
+-#else
+- tree t = stack_chk_fail_decl;
+-
+- if (!flag_pic)
+- return default_external_stack_protect_fail ();
+-
+- if (t == NULL_TREE)
+- {
+- t = build_function_type_list (void_type_node, NULL_TREE);
+- t = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
+- get_identifier ("__stack_chk_fail_local"), t);
+- TREE_STATIC (t) = 1;
+- TREE_PUBLIC (t) = 1;
+- DECL_EXTERNAL (t) = 1;
+- TREE_USED (t) = 1;
+- TREE_THIS_VOLATILE (t) = 1;
+- TREE_NOTHROW (t) = 1;
+- DECL_ARTIFICIAL (t) = 1;
+- DECL_IGNORED_P (t) = 1;
+- DECL_VISIBILITY_SPECIFIED (t) = 1;
+- DECL_VISIBILITY (t) = VISIBILITY_HIDDEN;
+-
+- stack_chk_fail_decl = t;
+- }
+-
+- return build_call_expr (t, 0);
+-#endif
+ }
+
+ bool
diff --git a/lang/gcc48/options.mk b/lang/gcc48/options.mk
index 1933375048f..262024e4e16 100644
--- a/lang/gcc48/options.mk
+++ b/lang/gcc48/options.mk
@@ -1,23 +1,24 @@
-# $NetBSD: options.mk,v 1.5 2014/04/23 12:53:36 ryoon Exp $
+# $NetBSD: options.mk,v 1.6 2014/05/31 13:06:25 ryoon Exp $
-PKG_OPTIONS_VAR= PKG_OPTIONS.${GCC_PKGNAME}
+PKG_OPTIONS_VAR= PKG_OPTIONS.gcc48
PKG_SUPPORTED_OPTIONS= nls gcc-inplace-math gcc-graphite gcc-java
-PKG_SUGGESTED_OPTIONS= gcc-graphite
+PKG_SUGGESTED_OPTIONS= gcc-graphite gcc-inplace-math
.include "../../mk/bsd.prefs.mk"
+.if ${OPSYS} == "NetBSD" || ${OPSYS} == "Linux" || ${OPSYS} == "DragonFly"
+PKG_SUGGESTED_OPTIONS+= nls
+#.elif ${OPSYS} == "SunOS"
+#PKG_SUGGESTED_OPTIONS+= gcc-inplace-math
+.endif
+
+.include "../../mk/bsd.options.mk"
+
.if !empty(PKG_OPTIONS:Mgcc-java)
.include "../../lang/gcc48/java.mk"
-PKG_SUGGESTED_OPTIONS+= gcc-java
PLIST.java= yes
.endif
-.if ${OPSYS} == "NetBSD" || ${OPSYS} == "Linux" || ${OPSYS} == "DragonFly"
-PKG_SUGGESTED_OPTIONS+= nls
-.elif ${OPSYS} == "SunOS"
-PKG_SUGGESTED_OPTIONS+= gcc-inplace-math
-.endif
-
###
### Determine if multilib is avalible.
###
@@ -35,8 +36,6 @@ PKG_SUPPORTED_OPTIONS+= gcc-multilib
PKG_SUGGESTED_OPTIONS+= gcc-multilib
.endif
-.include "../../mk/bsd.options.mk"
-
###
### Native Language Support
###
@@ -47,6 +46,9 @@ 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"
+. if ${PKGPATH} == "lang/gcc48-cc++"
+PLIST_SRC+= ${PLIST_SRC_DFLT} PLIST.nls
+. endif
.else
CONFIGURE_ARGS+= --disable-nls
.endif
@@ -82,10 +84,17 @@ LIBS.SunOS+= -lgmp
### Graphite Support
###
.if !empty(PKG_OPTIONS:Mgcc-graphite)
-CONFIGURE_ARGS+= --with-cloog=${BUILDLINK_PREFIX.cloog}
-CONFIGURE_ARGS+= --enable-cloog-backend=isl
-.include "../../math/cloog/buildlink3.mk"
-.include "../../math/isl/buildlink3.mk"
+ISL12= isl-0.12.2
+SITES.${ISL12}.tar.bz2= ${MASTER_SITE_GNU:=gcc/infrastructure/}
+CLOOG18= cloog-0.18.1
+SITES.${CLOOG18}.tar.gz= ${MASTER_SITE_GNU:=gcc/infrastructure/}
+DISTFILES+= ${ISL12}.tar.bz2 ${CLOOG18}.tar.gz
+EXTRACT_ONLY+= ${ISL12}.tar.bz2 ${CLOOG18}.tar.gz
+post-extract-graphite:
+ ${MV} ${WRKDIR}/${ISL12} ${WRKSRC}/isl
+ ${MV} ${WRKDIR}/${CLOOG18} ${WRKSRC}/cloog
+.else
+CONFIGURE_ARGS+= --without-cloog --without-isl
.endif
.include "../../mk/bsd.options.mk"
diff --git a/lang/gcc48/patches/patch-boehm-gc_configure b/lang/gcc48/patches/patch-boehm-gc_configure
new file mode 100644
index 00000000000..8988df8b11b
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_configure
@@ -0,0 +1,52 @@
+$NetBSD: patch-boehm-gc_configure,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/configure.orig 2014-05-22 09:13:48.000000000 +0000
++++ boehm-gc/configure
+@@ -10684,7 +10684,7 @@ netbsd*)
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+@@ -14409,7 +14409,7 @@ openbsd*)
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+@@ -14785,6 +14785,11 @@ $as_echo "#define _REENTRANT 1" >>confde
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Only HP-UX 11 POSIX threads are supported.\"" >&5
+ $as_echo "$as_me: WARNING: \"Only HP-UX 11 POSIX threads are supported.\"" >&2;}
+ ;;
++ *-*-openbsd*)
++ $as_echo "#define GC_OPENBSD_THREADS 1" >>confdefs.h
++ THREADLIBS=-pthread
++ INCLUDES="$INCLUDES -pthread"
++ ;;
+ *-*-kfreebsd*-gnu)
+ $as_echo "#define GC_FREEBSD_THREADS 1" >>confdefs.h
+
+@@ -14914,7 +14919,6 @@ else
+ POWERPC_DARWIN_FALSE=
+ fi
+
+-
+ # Darwin needs a few extra special tests to deal with variation in the
+ # system headers.
+ case "$host" in
+@@ -15225,6 +15229,9 @@ $as_echo "#define DATASTART_IS_ETEXT 1"
+ sparc-*-netbsd*)
+ machdep="sparc_netbsd_mach_dep.lo"
+ ;;
++ sparc*-*-openbsd*)
++ machdep="sparc_mach_dep.lo"
++ ;;
+ sparc-sun-solaris2.3)
+ machdep="sparc_mach_dep.lo"
+
diff --git a/lang/gcc48/patches/patch-boehm-gc_dyn__load.c b/lang/gcc48/patches/patch-boehm-gc_dyn__load.c
new file mode 100644
index 00000000000..373a2121a36
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_dyn__load.c
@@ -0,0 +1,51 @@
+$NetBSD: patch-boehm-gc_dyn__load.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/dyn_load.c.orig 2012-11-04 22:56:02.000000000 +0000
++++ boehm-gc/dyn_load.c
+@@ -61,6 +61,7 @@
+ !defined(HPUX) && !(defined(LINUX) && defined(__ELF__)) && \
+ !defined(RS6000) && !defined(SCO_ELF) && !defined(DGUX) && \
+ !(defined(FREEBSD) && defined(__ELF__)) && \
++ !(defined(OPENBSD) && defined(__ELF__)) && \
+ !(defined(NETBSD) && defined(__ELF__)) && !defined(HURD) && \
+ !defined(DARWIN)
+ --> We only know how to find data segments of dynamic libraries for the
+@@ -100,9 +101,9 @@
+
+ #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
+ (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
++ (defined(OPENBSD) && defined(__ELF__)) || \
+ (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
+ # include <stddef.h>
+-# include <elf.h>
+ # include <link.h>
+ #endif
+
+@@ -116,7 +117,7 @@
+ # define ElfW(type) Elf64_##type
+ # endif
+ # else
+-# ifdef NETBSD
++# if defined(NETBSD) || defined(OPENBSD)
+ # if ELFSIZE == 32
+ # define ElfW(type) Elf32_##type
+ # else
+@@ -365,6 +366,7 @@ void GC_register_dynamic_libraries()
+
+ #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
+ (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
++ (defined(OPENBSD) && defined(__ELF__)) || \
+ (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
+
+
+@@ -476,6 +478,10 @@ GC_bool GC_register_main_static_data()
+ #define HAVE_DL_ITERATE_PHDR
+ #endif
+
++#if defined(OPENBSD)
++#define HAVE_DL_ITERATE_PHDR
++#endif
++
+ #if defined(HAVE_DL_ITERATE_PHDR)
+
+ static int GC_register_dynlib_callback(info, size, ptr)
diff --git a/lang/gcc48/patches/patch-boehm-gc_include_gc__config.h.in b/lang/gcc48/patches/patch-boehm-gc_include_gc__config.h.in
new file mode 100644
index 00000000000..3fc39b290d2
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_include_gc__config.h.in
@@ -0,0 +1,14 @@
+$NetBSD: patch-boehm-gc_include_gc__config.h.in,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/include/gc_config.h.in.orig 2012-11-04 22:56:02.000000000 +0000
++++ boehm-gc/include/gc_config.h.in
+@@ -30,6 +30,9 @@
+ /* support FreeBSD threads */
+ #undef GC_FREEBSD_THREADS
+
++/* support OpenBSD threads */
++#undef GC_OPENBSD_THREADS
++
+ /* include support for gcj */
+ #undef GC_GCJ_SUPPORT
+
diff --git a/lang/gcc48/patches/patch-boehm-gc_include_gc__config__macros.h b/lang/gcc48/patches/patch-boehm-gc_include_gc__config__macros.h
new file mode 100644
index 00000000000..eeafb0563e2
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_include_gc__config__macros.h
@@ -0,0 +1,24 @@
+$NetBSD: patch-boehm-gc_include_gc__config__macros.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/include/gc_config_macros.h.orig 2012-11-04 22:56:02.000000000 +0000
++++ boehm-gc/include/gc_config_macros.h
+@@ -22,7 +22,7 @@
+ defined(GC_GNU_THREADS) || \
+ defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \
+ defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \
+- defined(GC_AIX_THREADS) || \
++ defined(GC_AIX_THREADS) || defined(GC_OPENBSD_THREADS) || \
+ (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__))
+ # define GC_PTHREADS
+ # endif
+@@ -57,6 +57,10 @@
+ # define GC_FREEBSD_THREADS
+ # define GC_PTHREADS
+ # endif
++# if !defined(GC_PTHREADS) && defined(__OpenBSD__)
++# define GC_OPENBSD_THREADS
++# define GC_PTHREADS
++# endif
+ # if defined(DGUX) && (defined(i386) || defined(__i386__))
+ # define GC_DGUX386_THREADS
+ # define GC_PTHREADS
diff --git a/lang/gcc48/patches/patch-boehm-gc_include_gc__pthread__redirects.h b/lang/gcc48/patches/patch-boehm-gc_include_gc__pthread__redirects.h
new file mode 100644
index 00000000000..42f0cfd1caa
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_include_gc__pthread__redirects.h
@@ -0,0 +1,26 @@
+$NetBSD: patch-boehm-gc_include_gc__pthread__redirects.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/include/gc_pthread_redirects.h.orig 2006-08-21 22:07:30.000000000 +0000
++++ boehm-gc/include/gc_pthread_redirects.h
+@@ -52,7 +52,7 @@
+ int GC_pthread_create(pthread_t *new_thread,
+ const pthread_attr_t *attr,
+ void *(*start_routine)(void *), void *arg);
+-#ifndef GC_DARWIN_THREADS
++#if !defined(GC_DARWIN_THREADS) && !defined(GC_OPENBSD_THREADS)
+ int GC_pthread_sigmask(int how, const sigset_t *set, sigset_t *oset);
+ #endif
+ int GC_pthread_join(pthread_t thread, void **retval);
+@@ -72,8 +72,11 @@
+ # define pthread_join GC_pthread_join
+ # define pthread_detach GC_pthread_detach
+
+-#ifndef GC_DARWIN_THREADS
++#if !defined(GC_DARWIN_THREADS) && !defined(GC_OPENBSD_THREADS)
+ # define pthread_sigmask GC_pthread_sigmask
++#endif
++
++#ifndef GC_DARWIN_THREADS
+ # define dlopen GC_dlopen
+ #endif
+
diff --git a/lang/gcc48/patches/patch-boehm-gc_include_private_gcconfig.h b/lang/gcc48/patches/patch-boehm-gc_include_private_gcconfig.h
new file mode 100644
index 00000000000..aad36dffaed
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_include_private_gcconfig.h
@@ -0,0 +1,355 @@
+$NetBSD: patch-boehm-gc_include_private_gcconfig.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/include/private/gcconfig.h.orig 2013-12-29 22:42:08.000000000 +0000
++++ boehm-gc/include/private/gcconfig.h
+@@ -62,7 +62,7 @@
+ /* Determine the machine type: */
+ # if defined(__arm__) || defined(__thumb__)
+ # define ARM32
+-# if !defined(LINUX) && !defined(NETBSD)
++# if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD)
+ # define NOSYS
+ # define mach_type_known
+ # endif
+@@ -77,14 +77,18 @@
+ # define HP
+ # define mach_type_known
+ # endif
+-# if defined(OPENBSD) && defined(m68k)
+-# define M68K
+-# define mach_type_known
+-# endif
+ # if defined(OPENBSD) && defined(__sparc__)
+ # define SPARC
+ # define mach_type_known
+ # endif
++# if defined(OPENBSD) && defined(__arm__)
++# define ARM32
++# define mach_type_known
++# endif
++# if defined(OPENBSD) && defined(__sh__)
++# define SH
++# define mach_type_known
++# endif
+ # if defined(NETBSD) && (defined(m68k) || defined(__m68k__))
+ # define M68K
+ # define mach_type_known
+@@ -101,7 +105,7 @@
+ # define SH
+ # define mach_type_known
+ # endif
+-# if defined(vax)
++# if defined(vax) || defined(__vax__)
+ # define VAX
+ # ifdef ultrix
+ # define ULTRIX
+@@ -119,7 +123,7 @@
+ # if defined(nec_ews) || defined(_nec_ews)
+ # define EWS4800
+ # endif
+-# if !defined(LINUX) && !defined(EWS4800) && !defined(NETBSD)
++# if !defined(LINUX) && !defined(EWS4800) && !defined(NETBSD) && !defined(OPENBSD)
+ # if defined(ultrix) || defined(__ultrix)
+ # define ULTRIX
+ # else
+@@ -210,7 +214,7 @@
+ # if defined(_PA_RISC1_0) || defined(_PA_RISC1_1) || defined(_PA_RISC2_0) \
+ || defined(hppa) || defined(__hppa__)
+ # define HP_PA
+-# if !defined(LINUX) && !defined(HPUX)
++# if !defined(LINUX) && !defined(HPUX) && !defined(OPENBSD)
+ # define HPUX
+ # endif
+ # define mach_type_known
+@@ -231,6 +235,10 @@
+ # define I386
+ # define mach_type_known
+ # endif
++# if defined(OPENBSD) && defined(__amd64)
++# define X86_64
++# define mach_type_known
++# endif
+ # if defined(LINUX) && defined(__x86_64__)
+ # define X86_64
+ # define mach_type_known
+@@ -302,6 +310,11 @@
+ # define MACOS
+ # define mach_type_known
+ # endif
++# if defined(__OpenBSD__) && defined(__powerpc__)
++# define POWERPC
++# define OPENBSD
++# define mach_type_known
++# endif
+ # if defined(macosx) || (defined(__APPLE__) && defined(__MACH__))
+ # define DARWIN
+ # if defined(__ppc__) || defined(__ppc64__)
+@@ -651,18 +664,6 @@
+ # ifdef M68K
+ # define MACH_TYPE "M68K"
+ # define ALIGNMENT 2
+-# ifdef OPENBSD
+-# define OS_TYPE "OPENBSD"
+-# define HEURISTIC2
+-# ifdef __ELF__
+-# define DATASTART GC_data_start
+-# define DYNAMIC_LOADING
+-# else
+- extern char etext[];
+-# define DATASTART ((ptr_t)(etext))
+-# endif
+-# define USE_GENERIC_PUSH_REGS
+-# endif
+ # ifdef NETBSD
+ # define OS_TYPE "NETBSD"
+ # define HEURISTIC2
+@@ -836,6 +837,24 @@
+ should be looked into some more */
+ # define NO_PTHREAD_TRYLOCK
+ # endif
++# ifdef OPENBSD
++# define OS_TYPE "OPENBSD"
++# define ALIGNMENT 4
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
++# endif
+ # ifdef FREEBSD
+ # if defined(__powerpc64__)
+ # define ALIGNMENT 8
+@@ -991,9 +1010,20 @@
+ # endif
+ # ifdef OPENBSD
+ # define OS_TYPE "OPENBSD"
+-# define STACKBOTTOM ((ptr_t) 0xf8000000)
+- extern int etext[];
+-# define DATASTART ((ptr_t)(etext))
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
+ # endif
+ # ifdef NETBSD
+ # define OS_TYPE "NETBSD"
+@@ -1241,6 +1271,20 @@
+ # endif
+ # ifdef OPENBSD
+ # define OS_TYPE "OPENBSD"
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
+ # endif
+ # ifdef FREEBSD
+ # define OS_TYPE "FREEBSD"
+@@ -1276,7 +1320,7 @@
+ # ifdef BSDI
+ # define OS_TYPE "BSDI"
+ # endif
+-# if defined(OPENBSD) || defined(NETBSD) \
++# if defined(NETBSD) \
+ || defined(THREE86BSD) || defined(BSDI)
+ # define HEURISTIC2
+ extern char etext[];
+@@ -1470,6 +1514,24 @@
+ # define STACKBOTTOM ((ptr_t) 0x7ffff000)
+ # endif /* _ELF_ */
+ # endif
++# ifdef OPENBSD
++# define OS_TYPE "OPENBSD"
++# define ALIGNMENT 4
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int _fdata[];
++# define DATASTART ((ptr_t)(_fdata))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
++# endif
+ # endif
+
+ # ifdef RS6000
+@@ -1517,7 +1579,7 @@
+ # define ALIGNMENT 4
+ # define ALIGN_DOUBLE
+ # endif
+-# if !defined(GC_HPUX_THREADS) && !defined(GC_LINUX_THREADS)
++# if !defined(GC_HPUX_THREADS) && !defined(GC_LINUX_THREADS) && !defined(OPENBSD)
+ # ifndef LINUX /* For now. */
+ # define MPROTECT_VDB
+ # endif
+@@ -1569,6 +1631,23 @@
+ extern int _end[];
+ # define DATAEND (&_end)
+ # endif /* LINUX */
++# ifdef OPENBSD
++# define OS_TYPE "OPENBSD"
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
++# endif
+ # endif /* HP_PA */
+
+ # ifdef ALPHA
+@@ -1593,15 +1672,21 @@
+ # endif
+ # ifdef OPENBSD
+ # define OS_TYPE "OPENBSD"
+-# define HEURISTIC2
+-# ifdef __ELF__ /* since OpenBSD/Alpha 2.9 */
+-# define DATASTART GC_data_start
+-# define ELFCLASS32 32
+-# define ELFCLASS64 64
+-# define ELF_CLASS ELFCLASS64
+-# else /* ECOFF, until OpenBSD/Alpha 2.7 */
+-# define DATASTART ((ptr_t) 0x140000000)
+-# endif
++# define ELF_CLASS ELFCLASS64
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
+ # endif
+ # ifdef FREEBSD
+ # define OS_TYPE "FREEBSD"
+@@ -1781,6 +1866,7 @@
+ # ifdef CX_UX
+ # define OS_TYPE "CX_UX"
+ # define DATASTART ((((word)etext + 0x3fffff) & ~0x3fffff) + 0x10000)
++# define STACKBOTTOM ((char*)0xf0000000) /* determined empirically */
+ # endif
+ # ifdef DGUX
+ # define OS_TYPE "DGUX"
+@@ -1891,6 +1977,24 @@
+ # define OS_TYPE "MSWINCE"
+ # define DATAEND /* not needed */
+ # endif
++# ifdef OPENBSD
++# define ALIGNMENT 4
++# define OS_TYPE "OPENBSD"
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
++# endif
+ # ifdef NOSYS
+ /* __data_start is usually defined in the target linker script. */
+ extern int __data_start[];
+@@ -1938,6 +2042,23 @@
+ # define USE_GENERIC_PUSH_REGS
+ # define DYNAMIC_LOADING
+ # endif
++# ifdef OPENBSD
++# define OS_TYPE "OPENBSD"
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
++# endif
+ # endif
+
+ # ifdef SH4
+@@ -1976,6 +2097,24 @@
+ # ifndef HBLKSIZE
+ # define HBLKSIZE 4096
+ # endif
++# ifdef OPENBSD
++# define OS_TYPE "OPENBSD"
++# define ELF_CLASS ELFCLASS64
++# define SIG_SUSPEND SIGXFSZ
++# define SIG_THR_RESTART SIGXCPU
++# ifndef GC_OPENBSD_THREADS
++# include <sys/param.h>
++# include <uvm/uvm_extern.h>
++# define STACKBOTTOM USRSTACK
++# endif
++ extern int __data_start[];
++# define DATASTART ((ptr_t)(__data_start))
++ extern char _end[];
++# define DATAEND ((ptr_t)(&_end))
++# define DYNAMIC_LOADING
++# define USE_MMAP
++# define USE_MMAP_ANON
++# endif
+ # define CACHE_LINE_SIZE 64
+ # define USE_GENERIC_PUSH_REGS
+ # ifdef LINUX
diff --git a/lang/gcc48/patches/patch-boehm-gc_mach__dep.c b/lang/gcc48/patches/patch-boehm-gc_mach__dep.c
new file mode 100644
index 00000000000..9c0b64d10c4
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_mach__dep.c
@@ -0,0 +1,22 @@
+$NetBSD: patch-boehm-gc_mach__dep.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/mach_dep.c.orig 2006-01-25 03:03:14.000000000 +0000
++++ boehm-gc/mach_dep.c
+@@ -27,7 +27,7 @@
+ # endif
+ # endif
+
+-#if defined(RS6000) || defined(POWERPC)
++#if (defined(RS6000) || defined(POWERPC)) && !defined(OPENBSD)
+ # include <ucontext.h>
+ #endif
+
+@@ -417,7 +417,7 @@ ptr_t arg;
+ /* the stack. */
+ __builtin_unwind_init();
+ # else /* !HAVE_BUILTIN_UNWIND_INIT */
+-# if defined(RS6000) || defined(POWERPC)
++# if (defined(RS6000) || defined(POWERPC)) && !defined(OPENBSD)
+ /* FIXME: RS6000 means AIX. */
+ /* This should probably be used in all Posix/non-gcc */
+ /* settings. We defer that change to minimize risk. */
diff --git a/lang/gcc48/patches/patch-boehm-gc_misc.c b/lang/gcc48/patches/patch-boehm-gc_misc.c
new file mode 100644
index 00000000000..892b5d69f18
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_misc.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-boehm-gc_misc.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/misc.c.orig 2006-09-14 18:06:04.000000000 +0000
++++ boehm-gc/misc.c
+@@ -660,7 +660,7 @@ void GC_init_inner()
+ # if defined(SEARCH_FOR_DATA_START)
+ GC_init_linux_data_start();
+ # endif
+-# if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)
++# if defined(NETBSD) && defined(__ELF__)
+ GC_init_netbsd_elf();
+ # endif
+ # if defined(GC_PTHREADS) || defined(GC_SOLARIS_THREADS) \
diff --git a/lang/gcc48/patches/patch-boehm-gc_os__dep.c b/lang/gcc48/patches/patch-boehm-gc_os__dep.c
new file mode 100644
index 00000000000..b29a215a7ff
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_os__dep.c
@@ -0,0 +1,177 @@
+$NetBSD: patch-boehm-gc_os__dep.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/os_dep.c.orig 2013-03-06 15:08:58.000000000 +0000
++++ boehm-gc/os_dep.c
+@@ -380,7 +380,7 @@ static void *tiny_sbrk(ptrdiff_t increme
+ #define sbrk tiny_sbrk
+ # endif /* ECOS */
+
+-#if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)
++#if defined(NETBSD) && defined(__ELF__)
+ ptr_t GC_data_start;
+
+ void GC_init_netbsd_elf()
+@@ -393,6 +393,86 @@ static void *tiny_sbrk(ptrdiff_t increme
+ }
+ #endif
+
++#if defined(OPENBSD)
++ static struct sigaction old_segv_act;
++ sigjmp_buf GC_jmp_buf_openbsd;
++
++ /*ARGSUSED*/
++ void GC_fault_handler_openbsd(int sig)
++ {
++ siglongjmp(GC_jmp_buf_openbsd, 1);
++ }
++
++ /* Return the first nonaddressible location > p or bound */
++ /* Requires allocation lock. */
++ ptr_t GC_find_limit_openbsd(ptr_t p, ptr_t bound)
++ {
++ static volatile ptr_t result;
++ /* Safer if static, since otherwise it may not be */
++ /* preserved across the longjmp. Can safely be */
++ /* static since it's only called with the */
++ /* allocation lock held. */
++ struct sigaction act;
++ size_t pgsz = (size_t)sysconf(_SC_PAGESIZE);
++
++ GC_ASSERT(I_HOLD_LOCK());
++
++ act.sa_handler = GC_fault_handler_openbsd;
++ sigemptyset(&act.sa_mask);
++ act.sa_flags = SA_NODEFER | SA_RESTART;
++ sigaction(SIGSEGV, &act, &old_segv_act);
++
++ if (sigsetjmp(GC_jmp_buf_openbsd, 1) == 0) {
++ result = (ptr_t)(((word)(p)) & ~(pgsz-1));
++ for (;;) {
++ result += pgsz;
++ if (result >= bound) {
++ result = bound;
++ break;
++ }
++ GC_noop1((word)(*result));
++ }
++ }
++
++ sigaction(SIGSEGV, &old_segv_act, 0);
++
++ return(result);
++ }
++
++ /* Return first addressable location > p or bound */
++ /* Requires allocation lock. */
++ ptr_t GC_skip_hole_openbsd(ptr_t p, ptr_t bound)
++ {
++ static volatile ptr_t result;
++ struct sigaction act;
++ size_t pgsz = (size_t)sysconf(_SC_PAGESIZE);
++ static volatile int firstpass;
++
++ GC_ASSERT(I_HOLD_LOCK());
++
++ act.sa_handler = GC_fault_handler_openbsd;
++ sigemptyset(&act.sa_mask);
++ act.sa_flags = SA_NODEFER | SA_RESTART;
++ sigaction(SIGSEGV, &act, &old_segv_act);
++
++ firstpass = 1;
++ result = (ptr_t)(((word)(p)) & ~(pgsz-1));
++ if (sigsetjmp(GC_jmp_buf_openbsd, 1) != 0 || firstpass) {
++ firstpass = 0;
++ result += pgsz;
++ if (result >= bound) {
++ result = bound;
++ } else
++ GC_noop1((word)(*result));
++ }
++
++ sigaction(SIGSEGV, &old_segv_act, 0);
++
++ return(result);
++ }
++#endif
++
++
+ # ifdef OS2
+
+ # include <stddef.h>
+@@ -1057,7 +1137,8 @@ ptr_t GC_get_stack_base()
+ #endif /* GC_SOLARIS_THREADS */
+
+ #if !defined(BEOS) && !defined(AMIGA) && !defined(MSWIN32) \
+- && !defined(MSWINCE) && !defined(OS2) && !defined(NOSYS) && !defined(ECOS)
++ && !defined(MSWINCE) && !defined(OS2) && !defined(NOSYS) && !defined(ECOS) \
++ && !defined(GC_OPENBSD_THREADS)
+
+ ptr_t GC_get_stack_base()
+ {
+@@ -1121,6 +1202,25 @@ ptr_t GC_get_stack_base()
+
+ # endif /* ! AMIGA, !OS 2, ! MS Windows, !BEOS, !NOSYS, !ECOS */
+
++#if defined(GC_OPENBSD_THREADS)
++
++/* Find the stack using pthread_stackseg_np() */
++
++# include <sys/signal.h>
++# include <pthread.h>
++# include <pthread_np.h>
++
++#define HAVE_GET_STACK_BASE
++
++ptr_t GC_get_stack_base()
++{
++ stack_t stack;
++ pthread_stackseg_np(pthread_self(), &stack);
++ return stack.ss_sp;
++}
++#endif /* GC_OPENBSD_THREADS */
++
++
+ /*
+ * Register static data segment(s) as roots.
+ * If more data segments are added later then they need to be registered
+@@ -1492,6 +1592,32 @@ int * etext_addr;
+
+ #else /* !OS2 && !Windows && !AMIGA */
+
++#if defined(OPENBSD)
++
++/*
++ * Depending on arch alignment there can be multiple holes
++ * between DATASTART & DATAEND. Scan from DATASTART - DATAEND
++ * and register each region.
++ */
++void GC_register_data_segments(void)
++{
++ ptr_t region_start, region_end;
++
++ region_start = DATASTART;
++
++ for(;;) {
++ region_end = GC_find_limit_openbsd(region_start, DATAEND);
++ GC_add_roots_inner(region_start, region_end, FALSE);
++ if (region_end < DATAEND)
++ region_start = GC_skip_hole_openbsd(region_end, DATAEND);
++ else
++ break;
++ }
++}
++
++# else /* !OS2 && !Windows && !AMIGA && !OPENBSD */
++
++
+ void GC_register_data_segments()
+ {
+ # if !defined(PCR) && !defined(SRC_M3) && !defined(MACOS)
+@@ -1549,6 +1675,7 @@ void GC_register_data_segments()
+ /* change. */
+ }
+
++# endif /* ! OPENBSD */
+ # endif /* ! AMIGA */
+ # endif /* ! MSWIN32 && ! MSWINCE*/
+ # endif /* ! OS2 */
diff --git a/lang/gcc48/patches/patch-boehm-gc_pthread__support.c b/lang/gcc48/patches/patch-boehm-gc_pthread__support.c
new file mode 100644
index 00000000000..07026cbdf21
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_pthread__support.c
@@ -0,0 +1,44 @@
+$NetBSD: patch-boehm-gc_pthread__support.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/pthread_support.c.orig 2012-11-04 22:56:02.000000000 +0000
++++ boehm-gc/pthread_support.c
+@@ -118,6 +118,10 @@
+ # include <fcntl.h>
+ # include <signal.h>
+
++#if defined(GC_OPENBSD_THREADS)
++# include <pthread_np.h>
++#endif
++
+ #if defined(GC_DARWIN_THREADS)
+ # include "private/darwin_semaphore.h"
+ #else
+@@ -884,7 +888,8 @@ void GC_thr_init()
+ GC_nprocs = pthread_num_processors_np();
+ # endif
+ # if defined(GC_OSF1_THREADS) || defined(GC_AIX_THREADS) \
+- || defined(GC_SOLARIS_PTHREADS) || defined(GC_GNU_THREADS)
++ || defined(GC_SOLARIS_PTHREADS) || defined(GC_GNU_THREADS) \
++ || defined(GC_OPENBSD_THREADS)
+ GC_nprocs = sysconf(_SC_NPROCESSORS_ONLN);
+ if (GC_nprocs <= 0) GC_nprocs = 1;
+ # endif
+@@ -970,7 +975,6 @@ void GC_init_parallel()
+ int WRAP_FUNC(pthread_sigmask)(int how, const sigset_t *set, sigset_t *oset)
+ {
+ sigset_t fudged_set;
+-
+ if (set != NULL && (how == SIG_BLOCK || how == SIG_SETMASK)) {
+ fudged_set = *set;
+ sigdelset(&fudged_set, SIG_SUSPEND);
+@@ -1156,6 +1160,10 @@ GC_PTR GC_get_thread_stack_base()
+ return stack_addr;
+ # endif
+
++# elif defined(GC_OPENBSD_THREADS)
++ stack_t stack;
++ pthread_stackseg_np(pthread_self(), &stack);
++ return stack.ss_sp;
+ # else
+ # ifdef DEBUG_THREADS
+ GC_printf0("Can not determine stack base for attached thread");
diff --git a/lang/gcc48/patches/patch-boehm-gc_threadlibs.c b/lang/gcc48/patches/patch-boehm-gc_threadlibs.c
new file mode 100644
index 00000000000..91553ac4a8f
--- /dev/null
+++ b/lang/gcc48/patches/patch-boehm-gc_threadlibs.c
@@ -0,0 +1,14 @@
+$NetBSD: patch-boehm-gc_threadlibs.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- boehm-gc/threadlibs.c.orig 2012-11-04 22:56:02.000000000 +0000
++++ boehm-gc/threadlibs.c
+@@ -16,6 +16,9 @@ int main()
+ || defined(GC_GNU_THREADS)
+ printf("-lpthread\n");
+ # endif
++# if defined(GC_OPENBSD_THREADS)
++ printf("-pthread\n");
++# endif
+ # if defined(GC_FREEBSD_THREADS)
+ # if (__FREEBSD_version >= 500000)
+ printf("-lpthread\n");
diff --git a/lang/gcc48/patches/patch-fixincludes_fixincl.x b/lang/gcc48/patches/patch-fixincludes_fixincl.x
new file mode 100644
index 00000000000..dc21d9ad9da
--- /dev/null
+++ b/lang/gcc48/patches/patch-fixincludes_fixincl.x
@@ -0,0 +1,18 @@
+$NetBSD: patch-fixincludes_fixincl.x,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- fixincludes/fixincl.x.orig 2013-05-31 11:43:36.000000000 +0000
++++ fixincludes/fixincl.x
+@@ -6154,11 +6154,11 @@ static const char* apzSolaris_Complex_Cx
+ "-e", "/#if[ \t]*!defined(__cplusplus)/c\\\n\
+ #ifdef\t__cplusplus\\\n\
+ extern \"C\" {\\\n\
+-#endif",
++#endif\\\n",
+ "-e", "/#endif[ \t]*\\/\\* !defined(__cplusplus) \\*\\//c\\\n\
+ #ifdef\t__cplusplus\\\n\
+ }\\\n\
+-#endif",
++#endif\\\n",
+ (char*)NULL };
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
diff --git a/lang/gcc48/patches/patch-fixincludes_inclhack.def b/lang/gcc48/patches/patch-fixincludes_inclhack.def
new file mode 100644
index 00000000000..0f070ebc60b
--- /dev/null
+++ b/lang/gcc48/patches/patch-fixincludes_inclhack.def
@@ -0,0 +1,16 @@
+$NetBSD: patch-fixincludes_inclhack.def,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- fixincludes/inclhack.def.orig 2013-05-31 11:43:36.000000000 +0000
++++ fixincludes/inclhack.def
+@@ -3213,9 +3213,9 @@ fix = {
+ mach = "*-*-solaris2.*";
+ files = complex.h;
+ sed = "/#if[ \t]*!defined(__cplusplus)/c\\\n"
+- "#ifdef\t__cplusplus\\\nextern \"C\" {\\\n#endif";
++ "#ifdef\t__cplusplus\\\nextern \"C\" {\\\n#endif\\\n";
+ sed = "/#endif[ \t]*\\/\\* !defined(__cplusplus) \\*\\//c\\\n"
+- "#ifdef\t__cplusplus\\\n}\\\n#endif";
++ "#ifdef\t__cplusplus\\\n}\\\n#endif\\\n";
+ test_text = "#if !defined(__cplusplus)\n"
+ "#endif /* !defined(__cplusplus) */";
+ };
diff --git a/lang/gcc48/patches/patch-gcc_builtins.c b/lang/gcc48/patches/patch-gcc_builtins.c
new file mode 100644
index 00000000000..573156b1395
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_builtins.c
@@ -0,0 +1,56 @@
+$NetBSD: patch-gcc_builtins.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/builtins.c.orig 2014-05-09 10:16:14.000000000 +0000
++++ gcc/builtins.c
+@@ -114,9 +114,11 @@ static rtx expand_builtin_memcpy (tree,
+ static rtx expand_builtin_mempcpy (tree, rtx, enum machine_mode);
+ static rtx expand_builtin_mempcpy_args (tree, tree, tree, rtx,
+ enum machine_mode, int);
++#ifndef NO_UNSAFE_BUILTINS
+ static rtx expand_builtin_strcpy (tree, rtx);
+ static rtx expand_builtin_strcpy_args (tree, tree, rtx);
+ static rtx expand_builtin_stpcpy (tree, rtx, enum machine_mode);
++#endif
+ static rtx expand_builtin_strncpy (tree, rtx);
+ static rtx builtin_memset_gen_str (void *, HOST_WIDE_INT, enum machine_mode);
+ static rtx expand_builtin_memset (tree, rtx, enum machine_mode);
+@@ -3228,6 +3230,7 @@ expand_builtin_mempcpy_args (tree dest,
+ # define CODE_FOR_movstr CODE_FOR_nothing
+ #endif
+
++#ifndef NO_UNSAFE_BUILTINS
+ /* Expand into a movstr instruction, if one is available. Return NULL_RTX if
+ we failed, the caller should emit a normal call, otherwise try to
+ get the result in TARGET, if convenient. If ENDP is 0 return the
+@@ -3378,6 +3381,7 @@ expand_builtin_stpcpy (tree exp, rtx tar
+ return expand_movstr (dst, src, target, /*endp=*/2);
+ }
+ }
++#endif
+
+ /* Callback routine for store_by_pieces. Read GET_MODE_BITSIZE (MODE)
+ bytes from constant string DATA + OFFSET and return it as target
+@@ -6174,9 +6178,11 @@ expand_builtin (tree exp, rtx target, rt
+ break;
+
+ case BUILT_IN_STRCPY:
++#ifndef NO_UNSAFE_BUILTINS
+ target = expand_builtin_strcpy (exp, target);
+ if (target)
+ return target;
++#endif
+ break;
+
+ case BUILT_IN_STRNCPY:
+@@ -6186,9 +6192,11 @@ expand_builtin (tree exp, rtx target, rt
+ break;
+
+ case BUILT_IN_STPCPY:
++#ifndef NO_UNSAFE_BUILTINS
+ target = expand_builtin_stpcpy (exp, target, mode);
+ if (target)
+ return target;
++#endif
+ break;
+
+ case BUILT_IN_MEMCPY:
diff --git a/lang/gcc48/patches/patch-gcc_c-family_c-format.c b/lang/gcc48/patches/patch-gcc_c-family_c-format.c
new file mode 100644
index 00000000000..a5310b910ca
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_c-family_c-format.c
@@ -0,0 +1,108 @@
+$NetBSD: patch-gcc_c-family_c-format.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/c-family/c-format.c.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/c-family/c-format.c
+@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3.
+ format_type_error. Target-specific format types do not have
+ matching enum values. */
+ enum format_type { printf_format_type, asm_fprintf_format_type,
++ kprintf_format_type, syslog_format_type,
+ gcc_diag_format_type, gcc_tdiag_format_type,
+ gcc_cdiag_format_type,
+ gcc_cxxdiag_format_type, gcc_gfc_format_type,
+@@ -51,6 +52,7 @@ typedef struct function_format_info
+ unsigned HOST_WIDE_INT first_arg_num; /* number of first arg (zero for varargs) */
+ } function_format_info;
+
++
+ static bool decode_format_attr (tree, function_format_info *, int);
+ static int decode_format_type (const char *);
+
+@@ -417,6 +419,15 @@ static const format_length_info gcc_diag
+ { NO_FMT, NO_FMT, 0 }
+ };
+
++static const format_length_info kprintf_length_specs[] =
++{
++ { "h", FMT_LEN_h, STD_C89, NO_FMT, 0 },
++ { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C9L, 0 },
++ { "q", FMT_LEN_ll, STD_EXT, NO_FMT, 0 },
++ { "L", FMT_LEN_L, STD_C89, NO_FMT, 0 },
++ { NO_FMT, NO_FMT, 0 }
++};
++
+ /* The custom diagnostics all accept the same length specifiers. */
+ #define gcc_tdiag_length_specs gcc_diag_length_specs
+ #define gcc_cdiag_length_specs gcc_diag_length_specs
+@@ -597,7 +608,6 @@ static const format_flag_pair strfmon_fl
+ { 0, 0, 0, 0 }
+ };
+
+-
+ static const format_char_info print_char_table[] =
+ {
+ /* C89 conversion specifiers. */
+@@ -641,6 +651,44 @@ static const format_char_info asm_fprint
+ { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
+ };
+
++static const format_char_info kprint_char_table[] =
++{
++ /* C89 conversion specifiers. */
++ { "di", 0, STD_C89, { T89_I, BADLEN, T89_S, T89_L, T9L_LL, BADLEN, T99_SST, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp0 +'I", "i", NULL },
++ { "oxX", 0, STD_C89, { T89_UI, BADLEN, T89_US, T89_UL, T9L_ULL, BADLEN, T99_ST, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp0#", "i", NULL },
++ { "u", 0, STD_C89, { T89_UI, BADLEN, T89_US, T89_UL, T9L_ULL, BADLEN, T99_ST, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp0'I", "i", NULL },
++ { "c", 0, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "", NULL },
++ { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "cR", NULL },
++ { "p", 1, STD_C89, { T89_V, BADLEN, BADLEN, T89_UL, T9L_LL, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp0", "c", NULL },
++/* Kernel bitmap formatting */
++ { "b", 0, STD_C89, { T89_I, BADLEN, T89_S, T89_L, T9L_LL, BADLEN, T99_SST, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "", kprint_char_table + 8 },
++ { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL },
++/* Kernel bitmap formatting, second part - similar to "s" except for types[] */
++ { "b", 1, STD_C89, { T89_C, BADLEN, T89_C, T89_C, T89_C, BADLEN, T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, NULL, "cR", NULL }
++};
++
++static const format_char_info syslog_char_table[] =
++{
++ /* C89 conversion specifiers. */
++ { "di", 0, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T9L_LL, TEX_LL, T99_SST, T99_PD, T99_IM }, "-wp0 +'I", "i", NULL },
++ { "oxX", 0, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T9L_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "-wp0#", "i", NULL },
++ { "u", 0, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T9L_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "-wp0'I", "i", NULL },
++ { "fgG", 0, STD_C89, { T89_D, BADLEN, BADLEN, T99_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#'", "", NULL },
++ { "eE", 0, STD_C89, { T89_D, BADLEN, BADLEN, T99_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "", NULL },
++ { "c", 0, STD_C89, { T89_I, BADLEN, BADLEN, T94_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "", NULL },
++ { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "cR", NULL },
++ { "p", 1, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "c", NULL },
++ { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T9L_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "", "W", NULL },
++ /* C99 conversion specifiers. */
++ { "F", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#'", "", NULL },
++ { "aA", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "", NULL },
++ /* X/Open conversion specifiers. */
++ { "C", 0, STD_EXT, { TEX_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "", NULL },
++ { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "R", NULL },
++ { "m", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "", NULL },
++ { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
++};
++
+ static const format_char_info gcc_diag_char_table[] =
+ {
+ /* C89 conversion specifiers. */
+@@ -817,6 +865,18 @@ static const format_kind_info format_typ
+ 'w', 0, 'p', 0, 'L', 0,
+ NULL, NULL
+ },
++ { "kprintf", kprintf_length_specs, kprint_char_table, " +#0-'I", NULL,
++ printf_flag_specs, printf_flag_pairs,
++ FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK,
++ 'w', 0, 'p', 0, 'L', 0,
++ &integer_type_node, &integer_type_node
++ },
++ { "syslog", printf_length_specs, syslog_char_table, " +#0-'I", NULL,
++ printf_flag_specs, printf_flag_pairs,
++ FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK,
++ 'w', 0, 'p', 0, 'L', 0,
++ &integer_type_node, &integer_type_node
++ },
+ { "gcc_diag", gcc_diag_length_specs, gcc_diag_char_table, "q+#", NULL,
+ gcc_diag_flag_specs, gcc_diag_flag_pairs,
+ FMT_FLAG_ARG_CONVERT,
diff --git a/lang/gcc48/patches/patch-gcc_c-family_c.opt b/lang/gcc48/patches/patch-gcc_c-family_c.opt
new file mode 100644
index 00000000000..89efbe1fdfa
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_c-family_c.opt
@@ -0,0 +1,30 @@
+$NetBSD: patch-gcc_c-family_c.opt,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/c-family/c.opt.orig 2014-04-07 06:40:18.000000000 +0000
++++ gcc/c-family/c.opt
+@@ -618,13 +618,9 @@ C ObjC C++ ObjC++ Var(warn_pointer_arith
+ Warn about function pointer arithmetic
+
+ Wpointer-sign
+-C ObjC Var(warn_pointer_sign) Warning LangEnabledBy(C ObjC,Wall)
++C ObjC Var(warn_pointer_sign) Warning LangEnabledBy(C ObjC,Wpedantic)
+ Warn when a pointer differs in signedness in an assignment
+
+-Wpointer-sign
+-C ObjC LangEnabledBy(C ObjC,Wpedantic)
+-;
+-
+ Wpointer-to-int-cast
+ C ObjC Var(warn_pointer_to_int_cast) Init(1) Warning
+ Warn when a pointer is cast to an integer of a different size
+@@ -1172,6 +1168,10 @@ fthreadsafe-statics
+ C++ ObjC++ Optimization Var(flag_threadsafe_statics) Init(1)
+ -fno-threadsafe-statics Do not generate thread-safe code for initializing local statics
+
++ftrampolines
++Common Var(flag_trampolines)
++Allows trampolines
++
+ funsigned-bitfields
+ C ObjC C++ ObjC++ Var(flag_signed_bitfields, 0)
+ When \"signed\" or \"unsigned\" is not given make the bitfield unsigned
diff --git a/lang/gcc48/patches/patch-gcc_c_c-decl.c b/lang/gcc48/patches/patch-gcc_c_c-decl.c
new file mode 100644
index 00000000000..47bd4f187b7
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_c_c-decl.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-gcc_c_c-decl.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/c/c-decl.c.orig 2014-04-10 07:54:08.000000000 +0000
++++ gcc/c/c-decl.c
+@@ -4859,6 +4859,8 @@ warn_variable_length_array (tree name, t
+ "variable length array is used");
+ }
+ }
++ if (warn_variable_decl)
++ warning (OPT_Wvariable_decl, "variable-sized array %qE", name);
+ }
+
+ /* Given declspecs and a declarator,
diff --git a/lang/gcc48/patches/patch-gcc_common.opt b/lang/gcc48/patches/patch-gcc_common.opt
new file mode 100644
index 00000000000..862543b74a1
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_common.opt
@@ -0,0 +1,99 @@
+$NetBSD: patch-gcc_common.opt,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/common.opt.orig 2013-03-14 09:13:36.000000000 +0000
++++ gcc/common.opt
+@@ -572,6 +572,10 @@ Wlarger-than=
+ Common RejectNegative Joined UInteger Warning
+ -Wlarger-than=<number> Warn if an object is larger than <number> bytes
+
++Wstack-larger-than-
++Common RejectNegative Joined UInteger
++-Wstack-larger-than-<number> Warn if a function is using more than <number> bytes of stack space for its local variables.
++
+ Wunsafe-loop-optimizations
+ Common Var(warn_unsafe_loop_optimizations) Warning
+ Warn if the loop cannot be optimized due to nontrivial assumptions.
+@@ -636,7 +640,7 @@ Common Var(warn_suggest_attribute_noretu
+ Warn about functions which might be candidates for __attribute__((noreturn))
+
+ Wsystem-headers
+-Common Var(warn_system_headers) Warning
++Common Var(warn_system_headers) Init(1) Warning
+ Do not suppress warnings from system headers
+
+ Wtrampolines
+@@ -691,6 +695,10 @@ Wunused-variable
+ Common Var(warn_unused_variable) Warning EnabledBy(Wunused)
+ Warn when a variable is unused
+
++Wvariable-decl
++Common Var(warn_variable_decl)
++Warn about variable-sized declarations
++
+ Wcoverage-mismatch
+ Common Var(warn_coverage_mismatch) Init(1) Warning
+ Warn in case profiles in -fprofile-use do not match
+@@ -798,7 +806,7 @@ fabi-version=
+ Common Joined RejectNegative UInteger Var(flag_abi_version) Init(2)
+
+ faggressive-loop-optimizations
+-Common Report Var(flag_aggressive_loop_optimizations) Optimization Init(1)
++Common Report Var(flag_aggressive_loop_optimizations) Optimization
+ Aggressively optimize loops using language constraints
+
+ falign-functions
+@@ -995,7 +1003,7 @@ Common Report Var(flag_delete_dead_excep
+ Delete dead instructions that may throw exceptions
+
+ fdelete-null-pointer-checks
+-Common Report Var(flag_delete_null_pointer_checks) Init(1) Optimization
++Common Report Var(flag_delete_null_pointer_checks)
+ Delete useless null pointer checks
+
+ fdevirtualize
+@@ -1247,7 +1255,7 @@ Enable guessing of branch probabilities
+ ; On SVR4 targets, it also controls whether or not to emit a
+ ; string identifying the compiler.
+ fident
+-Common Report Var(flag_no_ident,0)
++Common Report Var(flag_no_ident,0) Init(1)
+ Process #ident directives
+
+ fif-conversion
+@@ -1599,7 +1607,7 @@ Common Report Var(flag_pic,2) Negative(f
+ Generate position-independent code if possible (large mode)
+
+ fPIE
+-Common Report Var(flag_pie,2) Negative(fpic)
++Common Report Var(flag_pie,2) Negative(fpic) Init(PIE_DEFAULT)
+ Generate position-independent code for executables if possible (large mode)
+
+ fpic
+@@ -1902,7 +1910,7 @@ Common RejectNegative Joined Var(common_
+ -fstack-limit-symbol=<name> Trap if the stack goes past symbol <name>
+
+ fstack-protector
+-Common Report Var(flag_stack_protect, 1)
++Common Report Var(flag_stack_protect, 1) Init(-1)
+ Use propolice as a stack protection method
+
+ fstack-protector-all
+@@ -2307,7 +2315,7 @@ Common JoinedOrMissing Negative(gdwarf-)
+ Generate debug information in COFF format
+
+ gdwarf-
+-Common Joined UInteger Var(dwarf_version) Init(4) Negative(gstabs)
++Common Joined UInteger Var(dwarf_version) Init(2) Negative(gstabs)
+ Generate debug information in DWARF v2 (or later) format
+
+ ggdb
+@@ -2393,6 +2401,9 @@ Driver
+ nodefaultlibs
+ Driver
+
++nopie
++Driver
++
+ nostartfiles
+ Driver
+
diff --git a/lang/gcc48/patches/patch-gcc_config.gcc b/lang/gcc48/patches/patch-gcc_config.gcc
index 3f7fb7bbdab..fb40d27b482 100644
--- a/lang/gcc48/patches/patch-gcc_config.gcc
+++ b/lang/gcc48/patches/patch-gcc_config.gcc
@@ -1,80 +1,91 @@
-$NetBSD: patch-gcc_config.gcc,v 1.1 2013/04/01 21:06:16 wiz Exp $
+$NetBSD: patch-gcc_config.gcc,v 1.2 2014/05/31 13:06:25 ryoon Exp $
---- gcc/config.gcc.orig 2013-02-08 16:02:47.000000000 +0000
+--- gcc/config.gcc.orig 2014-05-06 15:29:04.000000000 +0000
+++ gcc/config.gcc
-@@ -621,6 +621,26 @@ case ${target} in
- # need_64bit_hwint=yes # system compiler has this for all arch!
- use_gcc_stdint=wrap
- ;;
-+*-*-dragonfly*)
-+ gas=yes
-+ gnu_ld=yes
-+ tmake_file="t-slibgcc"
-+ case ${enable_threads} in
-+ "" | yes | posix)
-+ thread_file='posix'
-+ ;;
-+ no | gnat | single)
-+ # Let these non-posix thread selections fall through if requested
+@@ -712,6 +712,14 @@ case ${target} in
+ default_use_cxa_atexit=yes
+ ;;
+ esac
++ case ${target} in
++ *-*-openbsd[0-3].*|*-*-openbsd4.[012])
++ # keep default of no cxa_atexit support for these older releases
+ ;;
+ *)
-+ echo 'Unknown thread configuration for DragonFly BSD'
-+ exit 1
++ default_use_cxa_atexit=yes
+ ;;
+ esac
-+ extra_options="$extra_options rpath.opt dragonfly.opt"
-+ default_use_cxa_atexit=yes
-+ use_gcc_stdint=wrap
-+ ;;
- *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
- extra_options="$extra_options gnu-user.opt"
- gas=yes
-@@ -680,6 +700,7 @@ case ${target} in
- target_has_targetcm=yes
;;
- *-*-netbsd*)
-+ use_gcc_stdint=wrap
- tmake_file="t-slibgcc"
- gas=yes
- gnu_ld=yes
-@@ -1214,6 +1235,14 @@ x86_64-*-rdos*)
- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rdos.h i386/rdos64.h"
- tmake_file="i386/t-i386elf t-svr4"
- ;;
-+i[34567]86-*-dragonfly*)
-+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/dragonfly.h"
-+ tmake_file="${tmake_file} i386/t-crtstuff"
-+ ;;
-+x86_64-*-dragonfly*)
-+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/x86-64.h i386/dragonfly.h"
-+ tmake_file="${tmake_file} i386/t-crtstuff"
-+ ;;
- i[34567]86-*-freebsd*)
- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
+ *-*-openbsd*)
+ tmake_file="t-openbsd"
+@@ -851,7 +859,7 @@ alpha*-*-netbsd*)
+ alpha/elf.opt"
+ ;;
+ alpha*-*-openbsd*)
+- tm_defines="${tm_defines} OBSD_HAS_DECLARE_FUNCTION_NAME OBSD_HAS_DECLARE_FUNCTION_SIZE OBSD_HAS_DECLARE_OBJECT"
++ tm_defines="${tm_defines} OBSD_HAS_DECLARE_FUNCTION_NAME OBSD_HAS_DECLARE_FUNCTION_SIZE OBSD_HAS_DECLARE_OBJECT PIE_DEFAULT=2"
+ tm_file="elfos.h alpha/alpha.h alpha/elf.h openbsd.h openbsd-stdint.h alpha/openbsd.h openbsd-libpthread.h"
+ extra_options="${extra_options} openbsd.opt alpha/elf.opt"
+ # default x-alpha is only appropriate for dec-osf.
+@@ -1070,6 +1078,7 @@ hppa*-*-linux*)
;;
-@@ -1221,12 +1250,14 @@ x86_64-*-freebsd*)
- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
+ hppa*-*-openbsd*)
+ target_cpu_default="MASK_PA_11"
++ tm_defines="${tm_defines} PIE_DEFAULT=1"
+ tm_file="${tm_file} dbxelf.h elfos.h openbsd.h openbsd-stdint.h openbsd-libpthread.h \
+ pa/pa-openbsd.h pa/pa32-regs.h pa/pa32-openbsd.h"
+ tmake_file="${tmake_file} pa/t-openbsd"
+@@ -1245,6 +1254,7 @@ i[34567]86-*-openbsd2.*|i[34567]86-*open
+ use_collect2=yes
;;
- i[34567]86-*-netbsdelf*)
-- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h"
-+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h netbsd-stdint.h"
- extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
-+ tmake_file="${tmake_file} i386/t-crtstuff"
+ i[34567]86-*-openbsd*)
++ tm_defines="${tm_defines} PIE_DEFAULT=1"
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h"
+ tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h i386/openbsdelf.h"
+ extra_options="${extra_options} openbsd.opt"
+@@ -1252,6 +1262,7 @@ i[34567]86-*-openbsd*)
+ gnu_ld=yes
;;
- x86_64-*-netbsd*)
-- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h"
-+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h netbsd-stdint.h"
- extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
-+ tmake_file="${tmake_file} i386/t-crtstuff"
+ x86_64-*-openbsd*)
++ tm_defines="${tm_defines} PIE_DEFAULT=1"
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h"
+ tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h i386/x86-64.h i386/openbsdelf.h"
+ extra_options="${extra_options} openbsd.opt"
+@@ -1981,11 +1992,12 @@ picochip-*)
+ use_gcc_stdint=wrap
+ tmake_file="picochip/t-picochip t-pnt16-warn"
+ ;;
+-# port not yet contributed
+-#powerpc-*-openbsd*)
+-# tmake_file="${tmake_file} rs6000/t-fprules"
+-# extra_headers=
+-# ;;
++powerpc-*-openbsd*)
++ tm_defines="${tm_defines} PIE_DEFAULT=2"
++ tm_file="${tm_file} dbxelf.h elfos.h openbsd.h openbsd-libpthread.h freebsd-spec.h rs6000/sysv4.h rs6000/openbsd.h"
++ tmake_file="${tmake_file} rs6000/t-openbsd"
++ extra_options="${extra_options} rs6000/sysv4.opt openbsd.opt"
++ ;;
+ powerpc-*-darwin*)
+ extra_options="${extra_options} rs6000/darwin.opt"
+ case ${target} in
+@@ -2545,6 +2557,7 @@ sparc64-*-netbsd*)
+ tmake_file="${tmake_file} sparc/t-sparc sparc/t-netbsd64"
;;
- i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123])
- tm_file="i386/i386.h i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h openbsd-oldgas.h openbsd.h i386/openbsd.h"
-@@ -3697,6 +3728,8 @@ case ${target} in
- ;;
- i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
- ;;
-+ i[34567]86-*-dragonfly* | x86_64-*-dragonfly*)
-+ ;;
- i[34567]86-*-freebsd* | x86_64-*-freebsd*)
- ;;
- ia64*-*-linux*)
+ sparc64-*-openbsd*)
++ tm_defines="${tm_defines} PIE_DEFAULT=2"
+ tm_file="sparc/openbsd1-64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp64-elf.h"
+ tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h sparc/openbsd64.h"
+ extra_options="${extra_options} openbsd.opt"
+@@ -2735,6 +2748,12 @@ case ${target} in
+ arch_without_sse2=yes
+ arch_without_64bit=yes
+ ;;
++ i386-*-openbsd*)
++ arch=i486
++ cpu=generic
++ arch_without_sse2=yes
++ arch_without_64bit=yes
++ ;;
+ i386-*-*)
+ arch=i386
+ cpu=i386
diff --git a/lang/gcc48/patches/patch-gcc_config_exec-stack.h b/lang/gcc48/patches/patch-gcc_config_exec-stack.h
new file mode 100644
index 00000000000..3349f5b6305
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_config_exec-stack.h
@@ -0,0 +1,45 @@
+$NetBSD: patch-gcc_config_exec-stack.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/config/exec-stack.h.orig 2014-05-24 12:02:13.000000000 +0000
++++ gcc/config/exec-stack.h
+@@ -0,0 +1,40 @@
++/* Enable stack execute around trampoline address.
++ Copyright (C) 2002 Free Software Foundation, Inc.
++
++This file is part of GNU CC.
++
++GNU CC 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 2, or (at your option)
++any later version.
++
++GNU CC 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 GNU CC; see the file COPYING. If not, write to
++the Free Software Foundation, 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA. */
++
++#undef FINALIZE_TRAMPOLINE
++#define FINALIZE_TRAMPOLINE(TRAMP) \
++ emit_library_call(gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"), \
++ 0, VOIDmode, 1, memory_address (SImode, (TRAMP)), Pmode)
++
++#undef TRANSFER_FROM_TRAMPOLINE
++#define TRANSFER_FROM_TRAMPOLINE \
++extern void __enable_execute_stack (void *); \
++void \
++__enable_execute_stack (addr) \
++ void *addr; \
++{ \
++ long size = getpagesize (); \
++ long mask = ~(size-1); \
++ char *page = (char *) (((long) addr) & mask); \
++ char *end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
++ \
++ if (mprotect (page, end - page, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) \
++ perror ("mprotect of trampoline code"); \
++}
diff --git a/lang/gcc48/patches/patch-gcc_config_i386_i386.c b/lang/gcc48/patches/patch-gcc_config_i386_i386.c
new file mode 100644
index 00000000000..ab13d0eb2b8
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_config_i386_i386.c
@@ -0,0 +1,31 @@
+$NetBSD: patch-gcc_config_i386_i386.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/config/i386/i386.c.orig 2014-05-08 19:32:34.000000000 +0000
++++ gcc/config/i386/i386.c
+@@ -2265,6 +2265,8 @@ struct ix86_frame
+ HOST_WIDE_INT reg_save_offset;
+ HOST_WIDE_INT sse_reg_save_offset;
+
++ HOST_WIDE_INT local_size;
++
+ /* When save_regs_using_mov is set, emit prologue using
+ move instead of push instructions. */
+ bool save_regs_using_mov;
+@@ -8941,6 +8943,7 @@ ix86_compute_frame_layout (struct ix86_f
+ HOST_WIDE_INT size = get_frame_size ();
+ HOST_WIDE_INT to_allocate;
+
++ frame->local_size = size;
+ frame->nregs = ix86_nsaved_regs ();
+ frame->nsseregs = ix86_nsaved_sseregs ();
+
+@@ -10293,6 +10296,9 @@ ix86_expand_prologue (void)
+ m->fs.realigned = true;
+ }
+
++ if (warn_stack_larger_than && frame.local_size > stack_larger_than_size)
++ warning (OPT_Wstack_larger_than_, "stack usage is %ld bytes", frame.local_size);
++
+ int_registers_saved = (frame.nregs == 0);
+ sse_registers_saved = (frame.nsseregs == 0);
+
diff --git a/lang/gcc48/patches/patch-gcc_config_i386_openbsd.h b/lang/gcc48/patches/patch-gcc_config_i386_openbsd.h
new file mode 100644
index 00000000000..dca5c6a5648
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_config_i386_openbsd.h
@@ -0,0 +1,27 @@
+$NetBSD: patch-gcc_config_i386_openbsd.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/config/i386/openbsd.h.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/config/i386/openbsd.h
+@@ -38,10 +38,10 @@ along with GCC; see the file COPYING3.
+
+ /* This must agree with <machine/ansi.h> */
+ #undef SIZE_TYPE
+-#define SIZE_TYPE "unsigned int"
++#define SIZE_TYPE "long unsigned int"
+
+ #undef PTRDIFF_TYPE
+-#define PTRDIFF_TYPE "int"
++#define PTRDIFF_TYPE "long int"
+
+ #undef WCHAR_TYPE
+ #define WCHAR_TYPE "int"
+@@ -49,6 +49,9 @@ along with GCC; see the file COPYING3.
+ #undef WCHAR_TYPE_SIZE
+ #define WCHAR_TYPE_SIZE 32
+
++#undef WINT_TYPE
++#define WINT_TYPE "int"
++
+ /* Assembler format: overall framework. */
+
+ #undef ASM_APP_ON
diff --git a/lang/gcc48/patches/patch-gcc_config_i386_openbsdelf.h b/lang/gcc48/patches/patch-gcc_config_i386_openbsdelf.h
new file mode 100644
index 00000000000..e5963f07ea9
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_config_i386_openbsdelf.h
@@ -0,0 +1,18 @@
+$NetBSD: patch-gcc_config_i386_openbsdelf.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/config/i386/openbsdelf.h.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/config/i386/openbsdelf.h
+@@ -97,10 +97,13 @@ along with GCC; see the file COPYING3.
+ %{shared:-shared} %{R*} \
+ %{static:-Bstatic} \
+ %{!static:-Bdynamic} \
++ %{rdynamic:-export-dynamic} \
+ %{assert*} \
+ -dynamic-linker /usr/libexec/ld.so"
+
+ #undef STARTFILE_SPEC
++
++#define SUBTARGET32_DEFAULT_CPU "i486"
+ #define STARTFILE_SPEC "\
+ %{!shared: %{pg:gcrt0%O%s} %{!pg:%{p:gcrt0%O%s} %{!p:crt0%O%s}} \
+ crtbegin%O%s} %{shared:crtbeginS%O%s}"
diff --git a/lang/gcc48/patches/patch-gcc_config_openbsd-libpthread.h b/lang/gcc48/patches/patch-gcc_config_openbsd-libpthread.h
new file mode 100644
index 00000000000..ba2ca623364
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_config_openbsd-libpthread.h
@@ -0,0 +1,11 @@
+$NetBSD: patch-gcc_config_openbsd-libpthread.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/config/openbsd-libpthread.h.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/config/openbsd-libpthread.h
+@@ -18,5 +18,5 @@
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+-#define OBSD_LIB_SPEC "%{!shared:%{pthread:-lpthread} -lc}"
++#define OBSD_LIB_SPEC "%{pthread:-lpthread%{!shared:%{p|pg:_p}}} %{!shared:-lc%{p:_p}%{!p:%{pg:_p}}}"
+
diff --git a/lang/gcc48/patches/patch-gcc_config_openbsd.h b/lang/gcc48/patches/patch-gcc_config_openbsd.h
new file mode 100644
index 00000000000..ff58c1db279
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_config_openbsd.h
@@ -0,0 +1,32 @@
+$NetBSD: patch-gcc_config_openbsd.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/config/openbsd.h.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/config/openbsd.h
+@@ -108,9 +108,9 @@ while (0)
+ This two-stage defines makes it easy to pick that for targets that
+ have subspecs. */
+ #ifdef CPP_CPU_SPEC
+-#define OBSD_CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}"
++#define OBSD_CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+ #else
+-#define OBSD_CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}"
++#define OBSD_CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+ #endif
+
+ #undef LIB_SPEC
+@@ -283,5 +283,15 @@ do { \
+
+ /* Storage layout. */
+
++/*
++ * Disable the use of unsafe builtin functions, (strcat, strcpy, stpcpy),
++ * making them easier to spot in the object files.
++ */
++#define NO_UNSAFE_BUILTINS
++
++/* The system headers on OpenBSD are C++-aware. */
++#undef NO_IMPLICIT_EXTERN_C
++#define NO_IMPLICIT_EXTERN_C
++
+
+ #define HAVE_ENABLE_EXECUTE_STACK
diff --git a/lang/gcc48/patches/patch-gcc_config_openbsd.opt b/lang/gcc48/patches/patch-gcc_config_openbsd.opt
new file mode 100644
index 00000000000..09d0f4d578f
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_config_openbsd.opt
@@ -0,0 +1,12 @@
+$NetBSD: patch-gcc_config_openbsd.opt,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/config/openbsd.opt.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/config/openbsd.opt
+@@ -32,4 +32,7 @@ Driver
+ pthread
+ Driver
+
++rdynamic
++Driver
++
+ ; This comment is to ensure we retain the blank line above.
diff --git a/lang/gcc48/patches/patch-gcc_configure b/lang/gcc48/patches/patch-gcc_configure
index 698340bdfa1..08709e81305 100644
--- a/lang/gcc48/patches/patch-gcc_configure
+++ b/lang/gcc48/patches/patch-gcc_configure
@@ -1,29 +1,16 @@
-$NetBSD: patch-gcc_configure,v 1.1 2013/04/01 21:06:17 wiz Exp $
+$NetBSD: patch-gcc_configure,v 1.2 2014/05/31 13:06:25 ryoon Exp $
Add dl_iterate_phdr detection for FreeBSD and DragonFly.
Detection for NetBSD and OpenBSD is added but commented out in case this
error handling mechanism is activated for these platforms later.
---- gcc/configure.orig 2012-03-08 13:54:54.000000000 +0000
+--- gcc/configure.orig 2014-04-28 10:05:29.000000000 +0000
+++ gcc/configure
-@@ -26802,6 +26802,20 @@ case "$target" in
- gcc_cv_target_dl_iterate_phdr=no
- fi
- ;;
-+ *-*-dragonfly* | *-*-freebsd*)
-+ 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
-+ gcc_cv_target_dl_iterate_phdr=no
-+ fi
-+ ;;
-+# *-*-netbsd* | *-*-openbsd*)
-+# if grep dl_iterate_phdr $target_header_dir/link_elf.h > /dev/null 2>&1; then
-+# gcc_cv_target_dl_iterate_phdr=yes
-+# else
-+# gcc_cv_target_dl_iterate_phdr=no
-+# fi
-+# ;;
- esac
+@@ -26864,6 +26864,7 @@ else
+ fi
- if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
+ ;;
++ *-*-openbsd*) gcc_cv_libc_provides_ssp=yes ;;
+ *) gcc_cv_libc_provides_ssp=no ;;
+ esac
+ fi
diff --git a/lang/gcc48/patches/patch-gcc_defaults.h b/lang/gcc48/patches/patch-gcc_defaults.h
new file mode 100644
index 00000000000..3e70fdc3234
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_defaults.h
@@ -0,0 +1,15 @@
+$NetBSD: patch-gcc_defaults.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/defaults.h.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/defaults.h
+@@ -1404,6 +1404,10 @@ see the files COPYING3 and COPYING.RUNTI
+ #define SWITCHABLE_TARGET 0
+ #endif
+
++#ifndef PIE_DEFAULT
++#define PIE_DEFAULT 0
++#endif
++
+ #endif /* GCC_INSN_FLAGS_H */
+
+ #endif /* ! GCC_DEFAULTS_H */
diff --git a/lang/gcc48/patches/patch-gcc_flags.h b/lang/gcc48/patches/patch-gcc_flags.h
new file mode 100644
index 00000000000..0c61ea430de
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_flags.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-gcc_flags.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/flags.h.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/flags.h
+@@ -25,6 +25,11 @@ along with GCC; see the file COPYING3.
+
+ #if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
+
++/* Nonzero means warn about any function whose stack usage is larger than N
++ bytes. The value N is `stack_larger_than_size'. */
++extern int warn_stack_larger_than;
++extern HOST_WIDE_INT stack_larger_than_size;
++
+ /* Names of debug_info_type, for error messages. */
+ extern const char *const debug_type_names[];
+
diff --git a/lang/gcc48/patches/patch-gcc_fortran_f95-lang.c b/lang/gcc48/patches/patch-gcc_fortran_f95-lang.c
index 26ce5a67d32..a5a77102ca8 100644
--- a/lang/gcc48/patches/patch-gcc_fortran_f95-lang.c
+++ b/lang/gcc48/patches/patch-gcc_fortran_f95-lang.c
@@ -1,4 +1,4 @@
-$NetBSD: patch-gcc_fortran_f95-lang.c,v 1.2 2014/01/14 19:32:52 wiz Exp $
+$NetBSD: patch-gcc_fortran_f95-lang.c,v 1.3 2014/05/31 13:06:25 ryoon Exp $
No NetBSD the 'cabs' and 'cabsf' functions are are __RENAME so that
thay have '__c99_' prefixes.
@@ -28,3 +28,15 @@ thay have '__c99_' prefixes.
gfc_define_builtin ("__builtin_copysignl", mfunc_longdouble[1],
BUILT_IN_COPYSIGNL, "copysignl",
+@@ -1069,6 +1078,11 @@ gfc_maybe_initialize_eh (void)
+ using_eh_for_cleanups ();
+ }
+
++const char *
++fname_as_string(int pretty_p __attribute__((__unused__)))
++{
++ return NULL;
++}
+
+ #include "gt-fortran-f95-lang.h"
+ #include "gtype-fortran.h"
diff --git a/lang/gcc48/patches/patch-gcc_gcc.c b/lang/gcc48/patches/patch-gcc_gcc.c
new file mode 100644
index 00000000000..b483c0853b1
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_gcc.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-gcc_gcc.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/gcc.c.orig 2014-03-23 11:30:57.000000000 +0000
++++ gcc/gcc.c
+@@ -661,7 +661,7 @@ proper position among the other output f
+
+ #ifndef LINK_PIE_SPEC
+ #ifdef HAVE_LD_PIE
+-#define LINK_PIE_SPEC "%{pie:-pie} "
++#define LINK_PIE_SPEC "%{pie:-pie} %{p|pg|nopie:-nopie} "
+ #else
+ #define LINK_PIE_SPEC "%{pie:} "
+ #endif
diff --git a/lang/gcc48/patches/patch-gcc_go_go-lang.c b/lang/gcc48/patches/patch-gcc_go_go-lang.c
new file mode 100644
index 00000000000..ccf79b25bc9
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_go_go-lang.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-gcc_go_go-lang.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/go/go-lang.c.orig 2013-12-12 02:29:08.000000000 +0000
++++ gcc/go/go-lang.c
+@@ -457,6 +457,12 @@ go_localize_identifier (const char *iden
+ return identifier_to_locale (ident);
+ }
+
++const char *
++fname_as_string(int pretty_p __attribute__((__unused__)))
++{
++ return NULL;
++}
++
+ #undef LANG_HOOKS_NAME
+ #undef LANG_HOOKS_INIT
+ #undef LANG_HOOKS_OPTION_LANG_MASK
diff --git a/lang/gcc48/patches/patch-gcc_java_lang.c b/lang/gcc48/patches/patch-gcc_java_lang.c
new file mode 100644
index 00000000000..9ceaadb78e9
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_java_lang.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-gcc_java_lang.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/java/lang.c.orig 2013-01-10 20:38:27.000000000 +0000
++++ gcc/java/lang.c
+@@ -920,4 +920,10 @@ java_eh_personality (void)
+ return java_eh_personality_decl;
+ }
+
++const char *
++fname_as_string(int pretty_p __attribute__((__unused__)))
++{
++ return NULL;
++}
++
+ #include "gt-java-lang.h"
diff --git a/lang/gcc48/patches/patch-gcc_lto_lto.c b/lang/gcc48/patches/patch-gcc_lto_lto.c
new file mode 100644
index 00000000000..c0532730c4f
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_lto_lto.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-gcc_lto_lto.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/lto/lto.c.orig 2013-02-07 18:01:40.000000000 +0000
++++ gcc/lto/lto.c
+@@ -3102,6 +3102,12 @@ read_cgraph_and_symbols (unsigned nfiles
+ all_file_decl_data = NULL;
+ }
+
++const char *
++fname_as_string(int pretty_p __attribute__((__unused__)))
++{
++ return NULL;
++}
++
+
+ /* Materialize all the bodies for all the nodes in the callgraph. */
+
diff --git a/lang/gcc48/patches/patch-gcc_opts.c b/lang/gcc48/patches/patch-gcc_opts.c
new file mode 100644
index 00000000000..503d81ba216
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_opts.c
@@ -0,0 +1,52 @@
+$NetBSD: patch-gcc_opts.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/opts.c.orig 2014-05-04 07:05:29.000000000 +0000
++++ gcc/opts.c
+@@ -49,6 +49,9 @@ const char *const debug_type_names[] =
+ ((strncmp (prefix, string, sizeof prefix - 1) == 0) \
+ ? ((string += sizeof prefix - 1), 1) : 0)
+
++int warn_stack_larger_than;
++HOST_WIDE_INT stack_larger_than_size;
++
+ void
+ set_struct_debug_option (struct gcc_options *opts, location_t loc,
+ const char *spec)
+@@ -468,8 +471,6 @@ static const struct default_options defa
+ { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 },
+ #endif
+ { OPT_LEVELS_2_PLUS, OPT_fregmove, NULL, 1 },
+- { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 },
+- { OPT_LEVELS_2_PLUS, OPT_fstrict_overflow, NULL, 1 },
+ { OPT_LEVELS_2_PLUS, OPT_freorder_blocks, NULL, 1 },
+ { OPT_LEVELS_2_PLUS, OPT_freorder_functions, NULL, 1 },
+ { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 },
+@@ -488,6 +489,7 @@ static const struct default_options defa
+ { OPT_LEVELS_2_PLUS, OPT_fhoist_adjacent_loads, NULL, 1 },
+
+ /* -O3 optimizations. */
++ { OPT_LEVELS_3_PLUS, OPT_fstrict_aliasing, NULL, 1 },
+ { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
+ { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
+ /* Inlining of functions reducing size is a good idea with -Os
+@@ -701,6 +703,8 @@ finish_options (struct gcc_options *opts
+
+ if (!opts->x_flag_opts_finished)
+ {
++ if (opts->x_flag_pic || opts->x_profile_flag)
++ opts->x_flag_pie = 0;
+ if (opts->x_flag_pie)
+ opts->x_flag_pic = opts->x_flag_pie;
+ if (opts->x_flag_pic && !opts->x_flag_pie)
+@@ -1437,6 +1441,11 @@ common_handle_option (struct gcc_options
+ opts->x_warn_frame_larger_than = value != -1;
+ break;
+
++ case OPT_Wstack_larger_than_:
++ stack_larger_than_size = value;
++ warn_stack_larger_than = stack_larger_than_size != -1;
++ break;
++
+ case OPT_Wstack_usage_:
+ opts->x_warn_stack_usage = value;
+ opts->x_flag_stack_usage_info = value != -1;
diff --git a/lang/gcc48/patches/patch-gcc_testsuite_gcc.dg_format_format.h b/lang/gcc48/patches/patch-gcc_testsuite_gcc.dg_format_format.h
new file mode 100644
index 00000000000..0c9265f08eb
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_testsuite_gcc.dg_format_format.h
@@ -0,0 +1,19 @@
+$NetBSD: patch-gcc_testsuite_gcc.dg_format_format.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/testsuite/gcc.dg/format/format.h.orig 2008-03-20 08:24:42.000000000 +0000
++++ gcc/testsuite/gcc.dg/format/format.h
+@@ -35,12 +35,14 @@
+ #include <stdarg.h>
+ #include <stddef.h>
+
++#ifndef _WINT_T_DEFINED_
+ #ifndef _WINT_T
+ #ifndef __WINT_TYPE__
+ #define __WINT_TYPE__ unsigned int
+ #endif
+ typedef __WINT_TYPE__ wint_t;
+ #endif
++#endif
+
+ #ifdef _WIN64
+ /* Kludges to get types corresponding to size_t and ptrdiff_t. */
diff --git a/lang/gcc48/patches/patch-gcc_toplev.c b/lang/gcc48/patches/patch-gcc_toplev.c
new file mode 100644
index 00000000000..8fe28cedb50
--- /dev/null
+++ b/lang/gcc48/patches/patch-gcc_toplev.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-gcc_toplev.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- gcc/toplev.c.orig 2013-03-28 08:29:51.000000000 +0000
++++ gcc/toplev.c
+@@ -1519,6 +1519,8 @@ process_options (void)
+
+ /* Targets must be able to place spill slots at lower addresses. If the
+ target already uses a soft frame pointer, the transition is trivial. */
++ if (flag_stack_protect == -1)
++ flag_stack_protect = FRAME_GROWS_DOWNWARD ? 1 : 0;
+ if (!FRAME_GROWS_DOWNWARD && flag_stack_protect)
+ {
+ warning (0, "-fstack-protector not supported for this target");
diff --git a/lang/gcc48/patches/patch-libffi_configure b/lang/gcc48/patches/patch-libffi_configure
new file mode 100644
index 00000000000..42542ca308a
--- /dev/null
+++ b/lang/gcc48/patches/patch-libffi_configure
@@ -0,0 +1,33 @@
+$NetBSD: patch-libffi_configure,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libffi/configure.orig 2014-05-22 09:13:48.000000000 +0000
++++ libffi/configure
+@@ -10329,7 +10329,7 @@ openbsd*)
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+@@ -11493,6 +11493,9 @@ case "$host" in
+ hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*)
+ TARGET=PA_LINUX; TARGETDIR=pa
+ ;;
++ hppa-*-openbsd*)
++ TARGET=PA_LINUX; TARGETDIR=pa
++ ;;
+ hppa*64-*-hpux*)
+ TARGET=PA64_HPUX; TARGETDIR=pa
+ ;;
+@@ -11550,6 +11553,9 @@ case "$host" in
+ TARGET=POWERPC; TARGETDIR=powerpc
+ HAVE_LONG_DOUBLE_VARIANT=1
+ ;;
++ powerpc-*-openbsd*)
++ TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
++ ;;
+ powerpc-*-amigaos*)
+ TARGET=POWERPC; TARGETDIR=powerpc
+ ;;
diff --git a/lang/gcc48/patches/patch-libffi_include_Makefile.in b/lang/gcc48/patches/patch-libffi_include_Makefile.in
new file mode 100644
index 00000000000..edf9271ab63
--- /dev/null
+++ b/lang/gcc48/patches/patch-libffi_include_Makefile.in
@@ -0,0 +1,13 @@
+$NetBSD: patch-libffi_include_Makefile.in,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libffi/include/Makefile.in.orig 2014-04-04 14:24:25.000000000 +0000
++++ libffi/include/Makefile.in
+@@ -384,7 +384,7 @@ info: info-am
+
+ info-am:
+
+-install-data-am: install-toollibffiHEADERS
++install-data-am:
+
+ install-dvi: install-dvi-am
+
diff --git a/lang/gcc48/patches/patch-libgcc_Makefile.in b/lang/gcc48/patches/patch-libgcc_Makefile.in
new file mode 100644
index 00000000000..9b4b6c98cec
--- /dev/null
+++ b/lang/gcc48/patches/patch-libgcc_Makefile.in
@@ -0,0 +1,26 @@
+$NetBSD: patch-libgcc_Makefile.in,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libgcc/Makefile.in.orig 2013-02-04 19:06:20.000000000 +0000
++++ libgcc/Makefile.in
+@@ -378,7 +378,7 @@ ASM_HIDDEN_OP = @asm_hidden_op@
+
+ define gen-hide-list
+ $(NM) -pg $< | \
+- $(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ && $$3 !~ /.*_compat/ \
++ $(AWK) 'NF == 3 && $$2 !~ /^[UNF]$$/ && $$3 !~ /.*_compat/ \
+ && $$3 !~ /.*@.*/ \
+ { print "\t$(ASM_HIDDEN_OP)", $$3 }' > $@T
+ mv -f $@T $@
+@@ -1065,10 +1065,10 @@ install-shared:
+ install-leaf: $(install-shared) $(install-libunwind)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
+
+- $(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/
++ cp libgcc.a $(DESTDIR)$(inst_libdir)/
+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc.a
+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc.a
+- $(INSTALL_DATA) libgcov.a $(DESTDIR)$(inst_libdir)/
++ cp libgcov.a $(DESTDIR)$(inst_libdir)/
+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
+
diff --git a/lang/gcc48/patches/patch-libgcc_config.host b/lang/gcc48/patches/patch-libgcc_config.host
index 222d2577356..118d8d68c0c 100644
--- a/lang/gcc48/patches/patch-libgcc_config.host
+++ b/lang/gcc48/patches/patch-libgcc_config.host
@@ -1,6 +1,6 @@
-$NetBSD: patch-libgcc_config.host,v 1.1 2013/04/01 21:06:17 wiz Exp $
+$NetBSD: patch-libgcc_config.host,v 1.2 2014/05/31 13:06:25 ryoon Exp $
---- libgcc/config.host.orig 2013-02-04 19:06:20.000000000 +0000
+--- libgcc/config.host.orig 2014-03-20 16:12:30.000000000 +0000
+++ libgcc/config.host
@@ -176,6 +176,11 @@ case ${host} in
tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin t-libgcc-pic t-slibgcc-darwin"
@@ -39,11 +39,3 @@ $NetBSD: patch-libgcc_config.host,v 1.1 2013/04/01 21:06:17 wiz Exp $
i[34567]86-*-freebsd*)
tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff"
;;
-@@ -1144,6 +1158,7 @@ i[34567]86-*-darwin* | x86_64-*-darwin*
- i[34567]86-*-gnu* | \
- i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]* | \
- i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw* | \
-+ i[34567]86-*-dragonfly* | x86_64-*-dragonfly* | \
- i[34567]86-*-freebsd* | x86_64-*-freebsd* | \
- i[34567]86-*-openbsd* | x86_64-*-openbsd*)
- tmake_file="${tmake_file} t-softfp-tf"
diff --git a/lang/gcc48/patches/patch-libgcc_libgcc2.c b/lang/gcc48/patches/patch-libgcc_libgcc2.c
new file mode 100644
index 00000000000..2ca89dc2b21
--- /dev/null
+++ b/lang/gcc48/patches/patch-libgcc_libgcc2.c
@@ -0,0 +1,12 @@
+$NetBSD: patch-libgcc_libgcc2.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libgcc/libgcc2.c.orig 2013-02-04 19:06:20.000000000 +0000
++++ libgcc/libgcc2.c
+@@ -2117,6 +2117,7 @@ mprotect (char *addr, int len, int prot)
+ #endif /* WINNT && ! __CYGWIN__ */
+
+ #ifdef TRANSFER_FROM_TRAMPOLINE
++#include <sys/mman.h>
+ TRANSFER_FROM_TRAMPOLINE
+ #endif
+ #endif /* L_trampoline */
diff --git a/lang/gcc48/patches/patch-libgfortran_configure b/lang/gcc48/patches/patch-libgfortran_configure
new file mode 100644
index 00000000000..7275e921b63
--- /dev/null
+++ b/lang/gcc48/patches/patch-libgfortran_configure
@@ -0,0 +1,22 @@
+$NetBSD: patch-libgfortran_configure,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libgfortran/configure.orig 2014-05-22 09:13:48.000000000 +0000
++++ libgfortran/configure
+@@ -11746,7 +11746,7 @@ openbsd*)
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+@@ -15369,7 +15369,7 @@ openbsd*)
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
diff --git a/lang/gcc48/patches/patch-libgo_config_libtool.m4 b/lang/gcc48/patches/patch-libgo_config_libtool.m4
new file mode 100644
index 00000000000..c352a4af13c
--- /dev/null
+++ b/lang/gcc48/patches/patch-libgo_config_libtool.m4
@@ -0,0 +1,13 @@
+$NetBSD: patch-libgo_config_libtool.m4,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libgo/config/libtool.m4.orig 2014-04-04 13:53:39.000000000 +0000
++++ libgo/config/libtool.m4
+@@ -2552,7 +2552,7 @@ openbsd*)
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
diff --git a/lang/gcc48/patches/patch-libgomp_configure b/lang/gcc48/patches/patch-libgomp_configure
new file mode 100644
index 00000000000..a34db5b4533
--- /dev/null
+++ b/lang/gcc48/patches/patch-libgomp_configure
@@ -0,0 +1,22 @@
+$NetBSD: patch-libgomp_configure,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libgomp/configure.orig 2014-05-22 09:13:48.000000000 +0000
++++ libgomp/configure
+@@ -10516,7 +10516,7 @@ openbsd*)
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+@@ -14150,7 +14150,7 @@ openbsd*)
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ #finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
diff --git a/lang/gcc48/patches/patch-libiberty_cp-demangle.c b/lang/gcc48/patches/patch-libiberty_cp-demangle.c
new file mode 100644
index 00000000000..a59f0077df7
--- /dev/null
+++ b/lang/gcc48/patches/patch-libiberty_cp-demangle.c
@@ -0,0 +1,22 @@
+$NetBSD: patch-libiberty_cp-demangle.c,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libiberty/cp-demangle.c.orig 2013-04-03 17:25:03.000000000 +0000
++++ libiberty/cp-demangle.c
+@@ -3736,7 +3736,7 @@ static inline void
+ d_append_num (struct d_print_info *dpi, long l)
+ {
+ char buf[25];
+- sprintf (buf,"%ld", l);
++ snprintf (buf, 25, "%ld", l);
+ d_append_string (dpi, buf);
+ }
+
+@@ -5561,7 +5561,7 @@ __cxa_demangle (const char *mangled_name
+ {
+ if (strlen (demangled) < *length)
+ {
+- strcpy (output_buffer, demangled);
++ strlcpy (output_buffer, demangled, *length);
+ free (demangled);
+ demangled = output_buffer;
+ }
diff --git a/lang/gcc48/patches/patch-libjava_configure b/lang/gcc48/patches/patch-libjava_configure
index 874233b7dd6..cd9dd64989d 100644
--- a/lang/gcc48/patches/patch-libjava_configure
+++ b/lang/gcc48/patches/patch-libjava_configure
@@ -1,4 +1,4 @@
-$NetBSD: patch-libjava_configure,v 1.2 2014/04/22 20:46:41 ryoon Exp $
+$NetBSD: patch-libjava_configure,v 1.3 2014/05/31 13:06:25 ryoon Exp $
Detect gethostbyname_r properly.
@@ -6,29 +6,14 @@ Avoid a reference to the wrapped make in the pkgsrc work directory from
showing up in an installed file.
See: libjava/contrib/aotcompile.py.in
---- libjava/configure.orig 2013-06-20 13:12:44.000000000 +0000
+--- libjava/configure.orig 2014-04-04 13:53:39.000000000 +0000
+++ libjava/configure
-@@ -22014,6 +22014,14 @@ do :
- if test "x$ac_cv_func_gethostbyname_r" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
- #define HAVE_GETHOSTBYNAME_R 1
-+#include <netdb.h>
-+int
-+main ()
-+{
-+gethostbyname_r("", 0, 0);
-+;
-+return 0;
-+}
- _ACEOF
-
-
-@@ -24867,7 +24875,7 @@ $as_echo "Python modules dir: ${python_m
-
-
- # needed for aot-compile-rpm
--MAKE=`which make`
-+MAKE=${PKGSRC_MAKE}
-
-
- # Check whether --enable-aot-compile-rpm was given.
+@@ -20760,7 +20760,7 @@ case "$THREADS" in
+ # support for weak references to pthread_* functions ala gthr.h API.
+ THREADSPEC='%{!pthread: %{!shared: %eUnder this configuration, the user must provide -pthread when linking.}}'
+ ;;
+- *-*-freebsd*)
++ *-*-freebsd* | *-*-openbsd*)
+ # FreeBSD >=5.3 implements a model much closer to other modern UNIX
+ # systems which support threads and -lpthread.
+ THREADLDFLAGS=-pthread
diff --git a/lang/gcc48/patches/patch-libjava_configure.host b/lang/gcc48/patches/patch-libjava_configure.host
new file mode 100644
index 00000000000..fb1fc0f88ca
--- /dev/null
+++ b/lang/gcc48/patches/patch-libjava_configure.host
@@ -0,0 +1,17 @@
+$NetBSD: patch-libjava_configure.host,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libjava/configure.host.orig 2012-03-14 16:33:37.000000000 +0000
++++ libjava/configure.host
+@@ -325,6 +325,12 @@ EOF
+ i?86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
+ can_unwind_signal=yes
+ ;;
++ *-*-openbsd*)
++ enable_hash_synchronization_default=no
++ libgcj_flags="${libgcj_flags} -fno-omit-frame-pointer"
++ can_unwind_signal=no
++ slow_pthread_self=no
++ ;;
+ *-*-freebsd*)
+ slow_pthread_self=
+ ;;
diff --git a/lang/gcc48/patches/patch-libjava_libltdl_configure b/lang/gcc48/patches/patch-libjava_libltdl_configure
new file mode 100644
index 00000000000..536a3186371
--- /dev/null
+++ b/lang/gcc48/patches/patch-libjava_libltdl_configure
@@ -0,0 +1,14 @@
+$NetBSD: patch-libjava_libltdl_configure,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libjava/libltdl/configure.orig 2014-05-22 09:13:48.000000000 +0000
++++ libjava/libltdl/configure
+@@ -6897,9 +6897,6 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -
+ with_gnu_ld=no
+ fi
+ ;;
+- openbsd*)
+- with_gnu_ld=no
+- ;;
+ esac
+
+ ld_shlibs=yes
diff --git a/lang/gcc48/patches/patch-libjava_prims.cc b/lang/gcc48/patches/patch-libjava_prims.cc
new file mode 100644
index 00000000000..c0222184706
--- /dev/null
+++ b/lang/gcc48/patches/patch-libjava_prims.cc
@@ -0,0 +1,13 @@
+$NetBSD: patch-libjava_prims.cc,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libjava/prims.cc.orig 2011-11-24 07:18:16.000000000 +0000
++++ libjava/prims.cc
+@@ -1143,7 +1143,7 @@ namespace gcj
+ bool verifyClasses = true;
+
+ // Thread stack size specified by the -Xss runtime argument.
+- size_t stack_size = 0;
++ size_t stack_size = 768*1024;
+
+ // Start time of the VM
+ jlong startTime = 0;
diff --git a/lang/gcc48/patches/patch-libmudflap_mf-runtime.h b/lang/gcc48/patches/patch-libmudflap_mf-runtime.h
new file mode 100644
index 00000000000..bf473677f42
--- /dev/null
+++ b/lang/gcc48/patches/patch-libmudflap_mf-runtime.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-libmudflap_mf-runtime.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libmudflap/mf-runtime.h.orig 2013-02-03 17:48:05.000000000 +0000
++++ libmudflap/mf-runtime.h
+@@ -31,7 +31,11 @@ see the files COPYING3 and COPYING.RUNTI
+ #define MF_RUNTIME_H
+
+ typedef void *__mf_ptr_t;
++#if defined(__OpenBSD__)
++typedef unsigned long __mf_uintptr_t __attribute__ ((__mode__ (__pointer__)));
++#else
+ typedef unsigned int __mf_uintptr_t __attribute__ ((__mode__ (__pointer__)));
++#endif
+ typedef __SIZE_TYPE__ __mf_size_t;
+
+ /* Global declarations used by instrumentation. When _MUDFLAP is
diff --git a/lang/gcc48/patches/patch-libstdc++-v3_config_os_bsd_openbsd_os__defines.h b/lang/gcc48/patches/patch-libstdc++-v3_config_os_bsd_openbsd_os__defines.h
new file mode 100644
index 00000000000..2d04d47f91c
--- /dev/null
+++ b/lang/gcc48/patches/patch-libstdc++-v3_config_os_bsd_openbsd_os__defines.h
@@ -0,0 +1,11 @@
+$NetBSD: patch-libstdc++-v3_config_os_bsd_openbsd_os__defines.h,v 1.1 2014/05/31 13:06:25 ryoon Exp $
+
+--- libstdc++-v3/config/os/bsd/openbsd/os_defines.h.orig 2013-02-03 17:54:05.000000000 +0000
++++ libstdc++-v3/config/os/bsd/openbsd/os_defines.h
+@@ -38,4 +38,6 @@
+ #define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC _GLIBCXX_USE_C99_DYNAMIC
+ #define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC _GLIBCXX_USE_C99_DYNAMIC
+
++#undef _GLIBCXX_HAVE_GETS
++
+ #endif
diff --git a/lang/gcc48/version.mk b/lang/gcc48/version.mk
index 8dc0d46baf8..2a09eedac76 100644
--- a/lang/gcc48/version.mk
+++ b/lang/gcc48/version.mk
@@ -1,2 +1,2 @@
-# $NetBSD: version.mk,v 1.6 2013/10/21 20:26:19 adam Exp $
-GCC48_DIST_VERSION:=4.8.2
+# $NetBSD: version.mk,v 1.7 2014/05/31 13:06:25 ryoon Exp $
+GCC48_DIST_VERSION:=4.8.3