From fd3fc37955fb4a79190f74a1e0b83b22744cc36e Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Sat, 13 May 2017 01:14:39 +0200 Subject: [PATCH] gcc7: add recipe for version 7.1.0. --- sys-devel/gcc/gcc7-7.1.0_2017_05_12.recipe | 410 +++ .../gcc/patches/gcc-7.1.0_2017_05_12.patchset | 3259 +++++++++++++++++ 2 files changed, 3669 insertions(+) create mode 100644 sys-devel/gcc/gcc7-7.1.0_2017_05_12.recipe create mode 100644 sys-devel/gcc/patches/gcc-7.1.0_2017_05_12.patchset diff --git a/sys-devel/gcc/gcc7-7.1.0_2017_05_12.recipe b/sys-devel/gcc/gcc7-7.1.0_2017_05_12.recipe new file mode 100644 index 000000000..51eff63c0 --- /dev/null +++ b/sys-devel/gcc/gcc7-7.1.0_2017_05_12.recipe @@ -0,0 +1,410 @@ +SUMMARY="C/C++ compiler for target ${effectiveTargetMachineTriple}" +DESCRIPTION="The standard compiler for non-legacy Haiku (i.e. for all \ +architectures other than x86_gcc2)." +HOMEPAGE="http://gcc.gnu.org" +COPYRIGHT="1988-2017 Free Software Foundation, Inc." +LICENSE="GNU GPL v3 + GNU LGPL v3 + " +REVISION="1" +gccVersion="7.1.0" +SOURCE_URI="https://ftp.gnu.org/gnu/gcc/gcc-$gccVersion/gcc-$gccVersion.tar.bz2" +CHECKSUM_SHA256="8a8136c235f64c6fef69cac0d73a46a1a09bb250776a050aec8f9fc880bebc17" +SOURCE_DIR="gcc-$gccVersion" +PATCHES="gcc-$portVersion.patchset" + +ARCHITECTURES="!x86_gcc2 ?x86 ?x86_64 ?arm" +SECONDARY_ARCHITECTURES="?x86" + +libatomicSoVersion="1" +libatomicLibVersion="1.2.0" + +libgccSoVersion="1" +libgccLibVersion="1" + +libgfortranSoVersion="4" +libgfortranLibVersion="4.0.0" + +libgompSoVersion="1" +libgompLibVersion="1.0.0" + +libquadmathSoVersion="0" +libquadmathLibVersion="0.0.0" + +libstdcxxSoVersion="6" +libstdcxxLibVersion="6.0.23" + +PROVIDES=" + gcc7$secondaryArchSuffix = $portVersion compat >= 7 + cmd:c++$secondaryArchSuffix = $portVersion compat >= 7 + cmd:cc$secondaryArchSuffix = $portVersion compat >= 7 + cmd:cpp$secondaryArchSuffix = $portVersion compat >= 7 + cmd:g++$secondaryArchSuffix = $portVersion compat >= 7 + cmd:gcc$secondaryArchSuffix = $portVersion compat >= 7 + cmd:gcc_$portVersion$secondaryArchSuffix = $portVersion compat >= 7 + cmd:gcov$secondaryArchSuffix = $portVersion compat >= 7 + " +REQUIRES=" + haiku$secondaryArchSuffix + cmd:as$secondaryArchSuffix + lib:libgmp$secondaryArchSuffix + lib:libmpc$secondaryArchSuffix + lib:libmpfr$secondaryArchSuffix + lib:libz$secondaryArchSuffix + " + +SUMMARY_fortran="C/C++-runtime static libraries and C++ headers, needed for gfortran" +DESCRIPTION_fortran="This package is not of general interest - it \ +contains the set of gcc's C/C++-runtime libraries and headers that is \ +required by gfortran to build fortran source code." +PROVIDES_fortran=" + gcc7${secondaryArchSuffix}_fortran = $portVersion compat >= 7 + cmd:gfortran$secondaryArchSuffix = $portVersion compat >= 7 + cmd:f951$secondaryArchSuffix = $portVersion compat >= 7 + devel:libgfortran$secondaryArchSuffix = $libgfortranLibVersion compat >= $libgfortranSoVersion + devel:libcaf_single$secondaryArchSuffix = $libgfortranLibVersion compat >= $libgfortranSoVersion + " +REQUIRES_fortran=" + haiku$secondaryArchSuffix + gcc7${secondaryArchSuffix}_syslibs == $portVersion base + " + +SUMMARY_syslibs="C/C++-runtime shared libraries, needed to execute C/C++ programs" +DESCRIPTION_syslibs="The C/C++-runtime libraries that are part of the gcc \ +distribution. This package contains the shared libraries for the runtime \ +loader, so it is required for executing most c/c++ programs." +PROVIDES_syslibs=" + gcc7${secondaryArchSuffix}_syslibs = $portVersion compat >= 7 + lib:libatomic$secondaryArchSuffix = $libatomicLibVersion compat >= $libatomicSoVersion + lib:libgcc_s$secondaryArchSuffix = $libgccLibVersion compat >= $libgccSoVersion + lib:libgfortran$secondaryArchSuffix = $libgfortranLibVersion compat >= $libgfortranSoVersion + lib:libgomp$secondaryArchSuffix = $libgompLibVersion compat >= $libgompSoVersion + lib:libquadmath$secondaryArchSuffix = $libquadmathLibVersion compat >= $libquadmathSoVersion + lib:libstdc++$secondaryArchSuffix = $libstdcxxLibVersion compat >= $libstdcxxSoVersion + lib:libsupc++$secondaryArchSuffix = $portVersion compat >= 7 + " +REQUIRES_syslibs=" + haiku$secondaryArchSuffix + " + +SUMMARY_syslibs_devel="C/C++-runtime static libraries and C++ headers, needed to build Haiku" +DESCRIPTION_syslibs_devel="This package is not of general interest - it \ +contains the set of gcc's C/C++-runtime libraries and headers that is \ +required by Haiku's build system when building Haiku." +PROVIDES_syslibs_devel=" + gcc7${secondaryArchSuffix}_syslibs_devel = $portVersion compat >= 7 + devel:libatomic$secondaryArchSuffix = $libatomicLibVersion compat >= $libatomicSoVersion + devel:libgcc_kernel$secondaryArchSuffix = $libgccLibVersion compat >= $libgccSoVersion + devel:libgcc$secondaryArchSuffix = $libgccLibVersion compat >= $libgccSoVersion + devel:libgcc_eh_kernel$secondaryArchSuffix = $libgccLibVersion compat >= $libgccSoVersion + devel:libgcc_eh$secondaryArchSuffix = $libgccLibVersion compat >= $libgccSoVersion + devel:libgfortran$secondaryArchSuffix = $libgfortranLibVersion compat >= $libgfortranSoVersion + devel:libgomp$secondaryArchSuffix = $libgompLibVersion compat >= $libgompSoVersion + devel:libquadmath$secondaryArchSuffix = $libquadmathLibVersion compat >= $libquadmathSoVersion + devel:libstdc++$secondaryArchSuffix = $libstdcxxLibVersion compat >= $libstdcxxSoVersion + devel:libsupc++$secondaryArchSuffix = $portVersion compat >= 7 + devel:libsupc++_kernel$secondaryArchSuffix = $portVersion compat >= 7 + " +REQUIRES_syslibs_devel="" + +BUILD_REQUIRES=" + haiku${secondaryArchSuffix}_devel + devel:libgmp$secondaryArchSuffix >= 10.3.0 + devel:libmpc$secondaryArchSuffix >= 3.0.0 + devel:libmpfr$secondaryArchSuffix >= 4.1.4 + devel:libz$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + cmd:autoconf + cmd:awk + cmd:find + cmd:flex + cmd:gcc$secondaryArchSuffix + cmd:ld$secondaryArchSuffix + cmd:make + cmd:makeinfo + cmd:sed + cmd:strip + cmd:tar + cmd:xargs + " + +sourceDir=$(pwd) +relativeInstallDir="develop/tools$secondaryArchSubDir" +installDir="$prefix/$relativeInstallDir" +objectsDir=$(pwd)/../${portVersionedName}-obj +gccVersion=$(echo $portVersion | cut -d_ -f1) + +BUILD() +{ + rm -rf $objectsDir + + # Touch some files generated by bison, so that bison won't run to update + # them. Fixes issues with newer bison versions. + # And while at it, touch gperf target, too (as gperf may not be installed). + (cd $sourceDir/gcc; touch c-parse.c c-parse.h cexp.c cp/parse.c \ + cp/parse.h c-gperf.h) + + mkdir -p $objectsDir + cd $objectsDir + + local additionalConfigureFlags + if [ -n "$secondaryArchSuffix" ]; then + additionalConfigureFlags="\ + --with-hybrid-secondary=${effectiveTargetArchitecture}" + fi + local kernelCcFlags="-D_KERNEL_MODE" + if [ $effectiveTargetArchitecture == x86_64 ]; then + # disable multilib support, as x86_64 by default tries to build the + # 32-bit libraries, too, which fails as no 32-bit libroot is available + additionalConfigureFlags+=" --disable-multilib" + + # deactivate red zone for x86_64 + kernelCcFlags="$kernelCcFlags -mno-red-zone" + fi + + "$sourceDir/configure" \ + --build=$effectiveTargetMachineTriple \ + --prefix=$installDir --libexecdir=$installDir/lib --mandir=$manDir \ + --docdir=$docDir --enable-threads=posix \ + --disable-nls --enable-shared --with-gnu-ld --with-gnu-as \ + --enable-version-specific-runtime-libs \ + --enable-languages=c,c++,fortran --enable-lto --enable-frame-pointer \ + --with-pkgversion=$(echo $portVersion | cut -d_ -f2-) \ + --enable-__cxa-atexit --with-system-zlib --enable-checking=release \ + --with-bug-url=http://dev.haiku-os.org/ \ + --with-default-libstdcxx-abi=gcc4-compatible \ + $additionalConfigureFlags + + make $jobArgs + + echo "######################## building special libraries ################" + + echo "### libgcc" + + # build kernel versions of libgcc.a and libgcc_eh.a (no threads or TLS) + cd $objectsDir/$effectiveTargetMachineTriple/libgcc + mkdir -p saved + mv libgcc.a libgcc_eh.a libgcc_s* libgcov* saved/ + make clean + ln -sfn "$sourceDir/libgcc/gthr-single.h" gthr-default.h + make CFLAGS="-O2 $kernelCcFlags" CXXFLAGS="-O2 $kernelCcFlags" + mv libgcc.a libgcc-kernel.a + mv libgcc_eh.a libgcc_eh-kernel.a + ln -sfn "$sourceDir/libgcc/gthr-posix.h" gthr-default.h + mv saved/* . + rmdir saved + + # build kernel version of libsupc++.a (without threads or TLS) + cd $objectsDir/$effectiveTargetMachineTriple/libstdc++-v3/libsupc++ + mkdir -p saved + mv .libs/libsupc++* saved/ + cp "../include/$effectiveTargetMachineTriple/bits/gthr-default.h" \ + "../config.h" \ + "../include/$effectiveTargetMachineTriple/bits/c++config.h" \ + saved/ + make clean + cp "../include/$effectiveTargetMachineTriple/bits/gthr-single.h" \ + "../include/$effectiveTargetMachineTriple/bits/gthr-default.h" + sed -i -e 's,#define _GLIBCXX_HAS_GTHREADS 1,/* #undef _GLIBCXX_HAS_GTHREADS */,' \ + "../config.h" + sed -i -e 's,#define _GLIBCXX_HAVE_TLS 1,/* #undef _GLIBCXX_HAVE_TLS */,' \ + "../include/$effectiveTargetMachineTriple/bits/c++config.h" + make CFLAGS="-O2 $kernelCcFlags" CXXFLAGS="-O2 $kernelCcFlags" + mv .libs/libsupc++.a .libs/libsupc++-kernel.a + mv saved/libsupc++* .libs/ + mv saved/gthr-default.h "../include/$effectiveTargetMachineTriple/bits/" + mv saved/config.h .. + mv saved/c++config.h "../include/$effectiveTargetMachineTriple/bits/" + rmdir saved +} + +INSTALL() +{ + cd $objectsDir + + make install + make install-html + + ### HTML documentation #################################### + + echo "Organizing HTML documentation..." + cd $docDir + for dir in libquadmath; do + mv ${dir}.html $dir + ln -s $dir/index.html ${dir}.html + done + + ### Libraries ############################################# + + echo "Moving libraries around" + + # Move/copy libraries such that copies of the runtime (shared) libs exist + # in $libDir and copies of static libraries exist in $developLibDir. These + # are put into separate packages gcc_syslibs and gcc_syslibs_devel, which + # are both used by Haiku's build system. + mkdir -p $libDir + mkdir -p $developLibDir + cd $installDir + gccLibDir=lib/gcc/$effectiveTargetMachineTriple/$gccVersion + + # libatomic + strip --strip-debug $gccLibDir/libatomic.so.$libatomicLibVersion + cp -d $gccLibDir/libatomic.so \ + $gccLibDir/libatomic.so.$libatomicSoVersion \ + $gccLibDir/libatomic.so.$libatomicLibVersion \ + $libDir/ + cp $gccLibDir/libatomic*.a $developLibDir/ + + # libgfortran + strip --strip-debug $gccLibDir/libgfortran.so.$libgfortranLibVersion + cp -d $gccLibDir/libgfortran.so \ + $gccLibDir/libgfortran.so.$libgfortranSoVersion \ + $gccLibDir/libgfortran.so.$libgfortranLibVersion \ + $libDir/ + cp $gccLibDir/libgfortran*.a $developLibDir/ + + # libgomp + strip --strip-debug $gccLibDir/libgomp.so.$libgompLibVersion + cp -d $gccLibDir/libgomp.so \ + $gccLibDir/libgomp.so.$libgompSoVersion \ + $gccLibDir/libgomp.so.$libgompLibVersion \ + $libDir/ + cp $gccLibDir/libgomp*.a $developLibDir/ + + # libquadmath + strip --strip-debug $gccLibDir/libquadmath.so.$libquadmathLibVersion + cp -d $gccLibDir/libquadmath.so \ + $gccLibDir/libquadmath.so.$libquadmathSoVersion \ + $gccLibDir/libquadmath.so.$libquadmathLibVersion \ + $libDir/ + cp $gccLibDir/libquadmath*.a $developLibDir + + # libstdc++ + strip --strip-debug $gccLibDir/libstdc++.so.$libstdcxxLibVersion + cp -d $gccLibDir/libstdc++.so \ + $gccLibDir/libstdc++.so.$libstdcxxSoVersion \ + $gccLibDir/libstdc++.so.$libstdcxxLibVersion \ + $libDir/ + cp $gccLibDir/libstdc++*.a $developLibDir/ + + # libsupc++ + libstdcxxDir=$objectsDir/$effectiveTargetMachineTriple/libstdc++-v3 + cp $libstdcxxDir/libsupc++/.libs/libsupc++-kernel.a \ + $gccLibDir/ + ln -s libstdc++.so $libDir/libsupc++.so + cp $gccLibDir/libsupc++*.a $developLibDir/ + + # libgcc + cp $objectsDir/$effectiveTargetMachineTriple/libgcc/libgcc-kernel.a \ + $objectsDir/$effectiveTargetMachineTriple/libgcc/libgcc_eh-kernel.a \ + $gccLibDir/ + strip --strip-debug $gccLibDir/libgcc_s.so.$libgccSoVersion + cp -d $gccLibDir/libgcc_s.so \ + $gccLibDir/libgcc_s.so.$libgccSoVersion \ + $libDir/ + cp $gccLibDir/libgcc*.a $developLibDir/ + + # gcc and c++ headers + mkdir -p $includeDir/gcc + cp -r $gccLibDir/include $includeDir/gcc/ + cp -r $gccLibDir/include-fixed $includeDir/gcc/ + mv $includeDir/gcc/include/c++ $includeDir/ + + ### Strip ################################################# + + echo "Strip" + + cd $installDir + strip bin/* + for f in cc1 cc1plus collect2 f951 lto1 lto-wrapper; do + strip $gccLibDir/$f + done + + strip --strip-debug \ + $gccLibDir/*.a \ + $developLibDir/*.a + + ### Disable ASLR ########################################## + + echo "Add SYS:ENV attribute to disable ASLR" + + cd $installDir + for f in bin/*; do + if [ -r "$f" ]; then + addattr SYS:ENV DISABLE_ASLR=1 $f + fi + done + for f in cc1 cc1plus collect2 f951 lto1; do + addattr SYS:ENV DISABLE_ASLR=1 \ + $gccLibDir/$f + done + + ### Symlinks ############################################## + + echo "Creating required symlinks" + + # create missing cc symlink + ln -sf gcc $installDir/bin/cc + + # make all tools available via default paths + mkdir -p $binDir + for f in c++ cc cpp g++ gcc gcov gfortran; do + symlinkRelative -sfn $installDir/bin/$f $binDir + done + + ### Cleanup ############################################### + + echo "Cleanup" + rm -rf $installDir/info + rm -rf $installDir/share + + ### Sub Packages ########################################## + + packageEntries "fortran" \ + $relativeBinDir/gfortran \ + $developDir/tools/bin/*gfortran \ + $installDir/$gccLibDir/f951 \ + $installDir/$gccLibDir/finclude \ + $installDir/$gccLibDir/libcaf_single.a \ + $installDir/$gccLibDir/libgfortran.a \ + $installDir/$gccLibDir/libgfortran.spec + + rm -rf $installDir/$gccLibDir/{f951, finclude, libcaf_single*, libgfortran*} + + packageEntries "syslibs" \ + $relativeLibDir/libatomic.so \ + $relativeLibDir/libatomic.so.$libatomicSoVersion \ + $relativeLibDir/libatomic.so.$libatomicLibVersion \ + $relativeLibDir/libgcc_s.so \ + $relativeLibDir/libgcc_s.so.$libgccSoVersion \ + $relativeLibDir/libgfortran.so \ + $relativeLibDir/libgfortran.so.$libgfortranSoVersion \ + $relativeLibDir/libgfortran.so.$libgfortranLibVersion \ + $relativeLibDir/libgomp.so \ + $relativeLibDir/libgomp.so.$libgompSoVersion \ + $relativeLibDir/libgomp.so.$libgompLibVersion \ + $relativeLibDir/libquadmath.so \ + $relativeLibDir/libquadmath.so.$libquadmathSoVersion \ + $relativeLibDir/libquadmath.so.$libquadmathLibVersion \ + $relativeLibDir/libstdc++.so \ + $relativeLibDir/libstdc++.so.$libstdcxxSoVersion \ + $relativeLibDir/libstdc++.so.$libstdcxxLibVersion \ + $relativeLibDir/libsupc++.so + + packageEntries "syslibs_devel" \ + $relativeDevelopLibDir/libatomic.a \ + $relativeDevelopLibDir/libgcc.a \ + $relativeDevelopLibDir/libgcc-kernel.a \ + $relativeDevelopLibDir/libgcc_eh.a \ + $relativeDevelopLibDir/libgcc_eh-kernel.a \ + $relativeDevelopLibDir/libgomp.a \ + $relativeDevelopLibDir/libquadmath.a \ + $relativeDevelopLibDir/libstdc++.a \ + $relativeDevelopLibDir/libsupc++.a \ + $relativeDevelopLibDir/libsupc++-kernel.a \ + $relativeIncludeDir + + rm -rf $includeDir + rm -rf $developLibDir +} diff --git a/sys-devel/gcc/patches/gcc-7.1.0_2017_05_12.patchset b/sys-devel/gcc/patches/gcc-7.1.0_2017_05_12.patchset new file mode 100644 index 000000000..2b771490d --- /dev/null +++ b/sys-devel/gcc/patches/gcc-7.1.0_2017_05_12.patchset @@ -0,0 +1,3259 @@ +From 45b750bafb91b055cc5284ef5d5780e6a1194af9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= +Date: Sun, 19 Jul 2015 18:55:34 +0200 +Subject: Haiku patch + + +diff --git a/compile b/compile +old mode 100755 +new mode 100644 +diff --git a/config.rpath b/config.rpath +index 4dea759..5bcc5be 100755 +--- a/config.rpath ++++ b/config.rpath +@@ -161,6 +161,8 @@ if test "$with_gnu_ld" = yes; then + ;; + netbsd*) + ;; ++ haiku*) ++ ;; + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no +diff --git a/config/acx.m4 b/config/acx.m4 +index aa1d34b..6eb6480 100644 +--- a/config/acx.m4 ++++ b/config/acx.m4 +@@ -428,24 +428,30 @@ dnl for the parameter format "cmp file1 file2 skip1 skip2" which is + dnl accepted by cmp on some systems. + AC_DEFUN([ACX_PROG_CMP_IGNORE_INITIAL], + [AC_CACHE_CHECK([how to compare bootstrapped objects], gcc_cv_prog_cmp_skip, +-[ echo abfoo >t1 +- echo cdfoo >t2 +- gcc_cv_prog_cmp_skip='tail -c +17 $$f1 > tmp-foo1; tail -c +17 $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2' +- if cmp t1 t2 2 2 > /dev/null 2>&1; then +- if cmp t1 t2 1 1 > /dev/null 2>&1; then +- : +- else +- gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16' ++[# comparing object files via cmp doesn't work on haiku (files will seemingly ++ # always differ), so we disassemble both files and compare the results: ++ if uname -o | grep -iq haiku; then ++ gcc_cv_prog_cmp_skip='objdump -Dz $$f1 | tail +6 >tmp-foo1; objdump -Dz $$f2 | tail +6 >tmp-foo2; cmp tmp-foo1 tmp-foo2' ++ else ++ echo abfoo >t1 ++ echo cdfoo >t2 ++ gcc_cv_prog_cmp_skip='tail -c +17 $$f1 > tmp-foo1; tail -c +17 $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2' ++ if cmp t1 t2 2 2 > /dev/null 2>&1; then ++ if cmp t1 t2 1 1 > /dev/null 2>&1; then ++ : ++ else ++ gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16' ++ fi + fi +- fi +- if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then +- if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then +- : +- else +- gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2' ++ if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then ++ if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then ++ : ++ else ++ gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2' ++ fi + fi ++ rm t1 t2 + fi +- rm t1 t2 + ]) + do_compare="$gcc_cv_prog_cmp_skip" + AC_SUBST(do_compare) +diff --git a/configure.ac b/configure.ac +index 1237749..cd4182c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -420,6 +420,9 @@ case "${host}" in + i[[3456789]]86-*-msdosdjgpp*) + noconfigdirs="$noconfigdirs tcl tk itcl" + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs tk itcl libgui gdb" ++ ;; + esac + + +@@ -511,7 +514,7 @@ if test x$enable_libgomp = x ; then + ;; + *-*-solaris2* | *-*-hpux11*) + ;; +- *-*-darwin* | *-*-aix*) ++ *-*-darwin* | *-*-aix* | *-*-haiku*) + ;; + nvptx*-*-*) + ;; +@@ -726,6 +729,9 @@ case "${target}" in + *-*-darwin*) + noconfigdirs="$noconfigdirs target-libffi" + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs ${libgcj}" ++ ;; + *-*-netware*) + noconfigdirs="$noconfigdirs target-libffi" + ;; +@@ -910,6 +916,9 @@ case "${target}" in + *-*-freebsd*) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs target-newlib target-libgloss" ++ ;; + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + ;; +@@ -971,6 +980,9 @@ case "${target}" in + with_gmp=/usr/local + fi + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs gdb target-libiberty" ++ ;; + *-*-kaos*) + # Remove unsupported stuff on all kaOS configurations. + noconfigdirs="$noconfigdirs target-libgloss" +diff --git a/gcc/Makefile.in b/gcc/Makefile.in +index 74d1912..61bf974 100644 +--- a/gcc/Makefile.in ++++ b/gcc/Makefile.in +@@ -105,6 +105,8 @@ build_objdir := $(toplevel_builddir)/$(build_subdir) + build_libobjdir := $(toplevel_builddir)/$(build_libsubdir) + target_objdir := $(toplevel_builddir)/$(target_subdir) + ++HYBRID_SECONDARY = @HYBRID_SECONDARY@ ++ + # -------- + # Defined vpaths + # -------- +@@ -2126,6 +2128,10 @@ DRIVER_DEFINES = \ + $(if $(SHLIB),$(if $(filter yes,@enable_shared@),-DENABLE_SHARED_LIBGCC)) \ + -DCONFIGURE_SPECS="\"@CONFIGURE_SPECS@\"" + ++ifneq ($(HYBRID_SECONDARY),) ++DRIVER_DEFINES += -DHYBRID_SECONDARY="\"$(HYBRID_SECONDARY)\"" ++endif ++ + CFLAGS-gcc.o += $(DRIVER_DEFINES) -DBASEVER=$(BASEVER_s) + gcc.o: $(BASEVER) + +@@ -2735,7 +2741,7 @@ $(genprogerr:%=build/gen%$(build_exeext)): $(BUILD_ERRORS) + genprog = $(genprogerr) check checksum condmd match + + # These programs need libs over and above what they get from the above list. +-build/genautomata$(build_exeext) : BUILD_LIBS += -lm ++build/genautomata$(build_exeext) : BUILD_LIBS += @build_math_library@ + + build/genrecog$(build_exeext) : build/hash-table.o build/inchash.o + build/gencfn-macros$(build_exeext) : build/hash-table.o build/ggc-none.o +@@ -2800,6 +2806,10 @@ PREPROCESSOR_DEFINES = \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + ++ifneq ($(HYBRID_SECONDARY),) ++PREPROCESSOR_DEFINES += -DHYBRID_SECONDARY="\"$(HYBRID_SECONDARY)\"" ++endif ++ + CFLAGS-cppbuiltin.o += $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) + cppbuiltin.o: $(BASEVER) + +diff --git a/gcc/config.gcc b/gcc/config.gcc +index b8bb4d6..d96ca20 100644 +--- a/gcc/config.gcc ++++ b/gcc/config.gcc +@@ -716,6 +716,19 @@ case ${target} in + *-*-fuchsia*) + native_system_header_dir=/include + ;; ++*-*-haiku*) ++ # This is the generic ELF configuration of Haiku. Later ++ # machine-specific sections may refine and add to this ++ # configuration. ++ # ++ gas=yes ++ gnu_ld=yes ++ tmake_file="t-slibgcc" ++ case ${enable_threads} in ++ "" | yes | posix) thread_file='posix' ;; ++ esac ++ default_use_cxa_atexit=yes ++ ;; + *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu) + extra_options="$extra_options gnu-user.opt" + gas=yes +@@ -1092,6 +1105,16 @@ arm*-*-netbsdelf*) + tmake_file="${tmake_file} arm/t-arm" + target_cpu_cname="arm6" + ;; ++arm*-*-haiku*) ++ tmake_file="${tmake_file} t-haiku arm/t-arm arm/t-arm-elf arm/t-bpabi arm/t-haiku" ++ tm_file="dbxelf.h elfos.h haiku.h arm/elf.h arm/bpabi.h arm/haiku.h haiku-stdint.h" ++ # The BPABI long long divmod functions return a 128-bit value in ++ # registers r0-r3. Correctly modeling that requires the use of ++ # TImode. ++ need_64bit_hwint=yes ++ default_use_cxa_atexit=yes ++ tm_file="${tm_file} arm/aout.h arm/arm.h" ++ ;; + arm*-*-linux-*) # ARM GNU/Linux with ELF + tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" + extra_options="${extra_options} linux-android.opt" +@@ -1471,6 +1494,14 @@ i[34567]86-*-freebsd*) + 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" + ;; ++i[34567]86-*-haiku*) ++ tmake_file="${tmake_file} t-haiku i386/t-crtpic" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h haiku.h i386/haiku.h haiku-stdint.h" ++ ;; ++x86_64-*-haiku*) ++ tmake_file="${tmake_file} t-haiku i386/t-haiku64" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h haiku.h i386/haiku64.h haiku-stdint.h" ++ ;; + i[34567]86-*-netbsdelf*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-stdint.h netbsd-elf.h i386/netbsd-elf.h" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" +@@ -1966,6 +1997,13 @@ m68k-*-rtems*) + tm_file="${tm_file} m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h m68k/m68kemb.h m68k/m68020-elf.h m68k/rtemself.h rtems.h newlib-stdint.h" + tm_defines="${tm_defines} MOTOROLA=1" + ;; ++m68k-*-haiku*) ++ default_m68k_cpu=68020 ++ default_cf_cpu=5206 ++ tmake_file="${tmake_file} m68k/t-m68kbare m68k/t-crtstuff t-haiku" #?? ++ tm_file="${tm_file} dbxelf.h elfos.h haiku.h m68k/haiku.h" ++ tm_defines="${tm_defines} MOTOROLA=1" ++ ;; + mcore-*-elf) + tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file} mcore/mcore-elf.h" + tmake_file=mcore/t-mcore +@@ -2070,6 +2108,11 @@ mips*-mti-linux*) + gnu_ld=yes + gas=yes + ;; ++mipsel-*-haiku*) ++ target_cpu_default="MASK_ABICALLS" ++ tm_file="elfos.h ${tm_file} haiku.h mips/haiku.h" ++ tmake_file="${tmake_file} mips/t-elf t-haiku" ++ ;; + mips*-*-linux*) # Linux MIPS, either endian. + tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h" + extra_options="${extra_options} linux-android.opt" +@@ -2409,6 +2452,11 @@ powerpc-*-eabi*) + tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm" + use_gcc_stdint=wrap + ;; ++powerpc-*-haiku*) ++ tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-ppcos rs6000/t-ppccomm t-haiku" ++ tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h haiku.h rs6000/haiku.h" ++ extra_options="${extra_options} rs6000/sysv4.opt" ++ ;; + powerpc-*-rtems*) + tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/rtems.h rtems.h" + extra_options="${extra_options} rs6000/sysv4.opt" +diff --git a/gcc/config.host b/gcc/config.host +index 6b28f30..72ebc4f 100644 +--- a/gcc/config.host ++++ b/gcc/config.host +@@ -107,7 +107,7 @@ case ${host} in + ;; + esac + ;; +- arm*-*-freebsd* | arm*-*-linux* | arm*-*-fuchsia*) ++ arm*-*-freebsd* | arm*-*-linux* | arm*-*-fuchsia* | arm*-*-haiku*) + case ${target} in + arm*-*-*) + host_extra_gcc_objs="driver-arm.o" +@@ -133,9 +133,11 @@ case ${host} in + ;; + esac + ;; +- mips*-*-linux*) ++ mips*-*-linux* \ ++ | mips*-*-haiku* ) + case ${target} in +- mips*-*-linux*) ++ mips*-*-linux* \ ++ | mips*-*-haiku* ) + host_extra_gcc_objs="driver-native.o" + host_xmake_file="${host_xmake_file} mips/x-native" + ;; +diff --git a/gcc/config/arm/haiku.h b/gcc/config/arm/haiku.h +new file mode 100644 +index 0000000..f0c0d63 +--- /dev/null ++++ b/gcc/config/arm/haiku.h +@@ -0,0 +1,80 @@ ++/* Definitions for ARM running Haiku systems using ELF ++ Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ++ 2005 Free Software Foundation, Inc. ++ ++ This file is part of GCC. ++ ++ GCC is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GCC is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GCC; see the file COPYING. If not, write to ++ the Free Software Foundation, 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. */ ++ ++/* Unsigned chars produces much better code than signed. */ ++#define DEFAULT_SIGNED_CHAR 0 ++ ++#undef TARGET_DEFAULT_FLOAT_ABI ++#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT ++ ++/* We default to the "aapcs-linux" ABI so that enums are int-sized by ++ default. */ ++#undef ARM_DEFAULT_ABI ++#define ARM_DEFAULT_ABI ARM_ABI_AAPCS_LINUX ++ ++/* bpabi.h sets FPUTYPE_DEFAULT to VFP */ ++ ++#undef MULTILIB_DEFAULTS ++#define MULTILIB_DEFAULTS \ ++ { "marm", "mlittle-endian", "msoft-float", "mno-thumb-interwork" } ++ ++/* Default is set by bpabi.h */ ++/* ++#undef TARGET_DEFAULT ++*/ ++ ++#undef SUBTARGET_CPU_DEFAULT ++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 ++ ++/* Now we define the strings used to build the spec file. */ ++/* interestingly, bpabi defines __GXX_TYPEINFO_EQUALITY_INLINE=0 too as we do. */ ++ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__HAIKU__"); \ ++ builtin_define ("__ARM__"); \ ++ builtin_define ("__arm__"); \ ++ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ ++ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ ++ builtin_define ("__STDC_ISO_10646__=201103L"); \ ++ builtin_assert ("system=haiku"); \ ++ /* Haiku apparently doesn't support merging of symbols across shared \ ++ object boundaries. Hence we need to explicitly specify that \ ++ type_infos are not merged, so that they get compared by name \ ++ instead of by pointer. */ \ ++ builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \ ++ /*builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0"); done in bpabi: */\ ++ TARGET_BPABI_CPP_BUILTINS(); \ ++ } \ ++ while (0) ++ ++/* Use the default LIBGCC_SPEC, not the empty version in haiku.h, as we ++ do not use multilib (needed ??). */ ++#undef LIBGCC_SPEC ++ ++/* If ELF is the default format, we should not use /lib/elf. */ ++ ++#undef LINK_SPEC ++#define LINK_SPEC "%{!o*:-o %b} -m armelf %{!r:-shared} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}\ ++ %{mbig-endian:-EB} %{mlittle-endian:-EL} -X" ++ +diff --git a/gcc/config/arm/t-haiku b/gcc/config/arm/t-haiku +new file mode 100644 +index 0000000..3f7f488 +--- /dev/null ++++ b/gcc/config/arm/t-haiku +@@ -0,0 +1,21 @@ ++# build multilib for soft float and VFP ++# (unsure about how it should be done...) ++# mix from t-symbian & t-wince-pe ++ ++#LIB1ASMSRC = arm/lib1funcs.asm ++#LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX ++ ++ ++#MULTILIB_OPTIONS += mhard-float ++#MULTILIB_DIRNAMES += fpu ++ ++MULTILIB_OPTIONS += msoft-float ++MULTILIB_DIRNAMES += fpu soft ++MULTILIB_EXCEPTIONS += *mthumb/*mhard-float* ++ ++MULTILIB_OPTIONS += mfloat-abi=softfp ++MULTILIB_DIRNAMES += softfp ++ ++#LIBGCC = stmp-multilib ++#INSTALL_LIBGCC = install-multilib ++#TARGET_LIBGCC2_CFLAGS = +diff --git a/gcc/config/haiku-stdint.h b/gcc/config/haiku-stdint.h +new file mode 100644 +index 0000000..8f702d0 +--- /dev/null ++++ b/gcc/config/haiku-stdint.h +@@ -0,0 +1,55 @@ ++/* Definitions for types on Haiku. ++ Copyright (C) 2014 Paweł Dziepak. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++Under Section 7 of GPL version 3, you are granted additional ++permissions described in the GCC Runtime Library Exception, version ++3.1, as published by the Free Software Foundation. ++ ++You should have received a copy of the GNU General Public License and ++a copy of the GCC Runtime Library Exception along with this program; ++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++. */ ++ ++#define SIG_ATOMIC_TYPE "int" ++ ++#define INT8_TYPE "signed char" ++#define INT16_TYPE "short int" ++#define INT32_TYPE "int" ++#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") ++#define UINT8_TYPE "unsigned char" ++#define UINT16_TYPE "short unsigned int" ++#define UINT32_TYPE "unsigned int" ++#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") ++ ++#define INT_LEAST8_TYPE "signed char" ++#define INT_LEAST16_TYPE "short int" ++#define INT_LEAST32_TYPE "int" ++#define INT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") ++#define UINT_LEAST8_TYPE "unsigned char" ++#define UINT_LEAST16_TYPE "short unsigned int" ++#define UINT_LEAST32_TYPE "unsigned int" ++#define UINT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") ++ ++#define INT_FAST8_TYPE "int" ++#define INT_FAST16_TYPE "int" ++#define INT_FAST32_TYPE "int" ++#define INT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") ++#define UINT_FAST8_TYPE "unsigned int" ++#define UINT_FAST16_TYPE "unsigned int" ++#define UINT_FAST32_TYPE "unsigned int" ++#define UINT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") ++ ++#define INTPTR_TYPE "long int" ++#define UINTPTR_TYPE "long unsigned int" +diff --git a/gcc/config/haiku.h b/gcc/config/haiku.h +new file mode 100644 +index 0000000..8e9f101 +--- /dev/null ++++ b/gcc/config/haiku.h +@@ -0,0 +1,214 @@ ++/* Definitions of target machine for GCC. ++ Common Haiku definitions for all architectures. ++ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 ++ Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++ ++/* Change debugging to Dwarf2. */ ++#undef PREFERRED_DEBUGGING_TYPE ++#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG ++ ++#undef MCOUNT_NAME ++#define MCOUNT_NAME "_mcount" ++ ++#define TARGET_DECLSPEC 1 ++ ++#undef SIZE_TYPE ++#define SIZE_TYPE "long unsigned int" ++ ++#undef PTRDIFF_TYPE ++#define PTRDIFF_TYPE "long int" ++ ++#undef WCHAR_TYPE ++#define WCHAR_TYPE "int" ++ ++#undef WCHAR_TYPE_SIZE ++#define WCHAR_TYPE_SIZE 32 ++ ++/* Haiku uses lots of multichars, so don't warn about them unless the ++ user explicitly asks for the warnings with -Wmultichar. Note that ++ CC1_SPEC is used for both cc1 and cc1plus. */ ++#undef CC1_SPEC ++#define CC1_SPEC \ ++ "%{fpic|fPIC|fpie|fPIE|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-fPIC} \ ++ %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}" ++ ++#undef CC1PLUS_SPEC ++#define CC1PLUS_SPEC "%{!Wctor-dtor-privacy:-Wno-ctor-dtor-privacy}" ++ ++/* LIB_SPEC for Haiku */ ++#undef LIB_SPEC ++#define LIB_SPEC "-lroot" ++ ++/* Use --as-needed -lgcc_s for eh support. */ ++#ifdef HAVE_LD_AS_NEEDED ++#define USE_LD_AS_NEEDED 1 ++#endif ++ ++#undef STARTFILE_SPEC ++#define STARTFILE_SPEC "crti.o%s crtbeginS.o%s %{!shared:%{!nostart:start_dyn.o%s}} init_term_dyn.o%s" ++ ++#undef ENDFILE_SPEC ++#define ENDFILE_SPEC "crtendS.o%s crtn.o%s" ++ ++/* Every program on Haiku links against libroot which contains the pthread ++ routines, so there's no need to explicitly call out when doing threaded ++ work. */ ++#undef GOMP_SELF_SPECS ++#define GOMP_SELF_SPECS "" ++#undef GTM_SELF_SPECS ++#define GTM_SELF_SPECS "" ++ ++#ifdef HYBRID_SECONDARY ++/* For a secondary compiler on a hybrid system, use alternative search paths.*/ ++#define INCLUDE_DEFAULTS \ ++{ \ ++ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0, 0 }, \ ++ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0, 0 }, \ ++ { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0, 0 }, \ ++ { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 }, \ ++ { FIXED_INCLUDE_DIR, "GCC", 0, 0, 0, 0 }, \ ++ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0 }, \ ++ { "/boot/system/non-packaged/develop/headers/" HYBRID_SECONDARY, 0, 0, 0, 1, 0 }, \ ++ { "/boot/system/develop/headers/os", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/app", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/device", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/drivers", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/game", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/interface", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/kernel", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/locale", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/mail", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/media", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/midi", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/midi2", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/net", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/opengl", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/storage", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/support", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/translation", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/graphics", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/input_server", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/mail_daemon", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/registrar", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/screen_saver", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/tracker", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/be_apps/Deskbar", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/be_apps/NetPositive", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/be_apps/Tracker", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/3rdparty", 0, 0, 0, 1, 0 }, \ ++ { "/boot/system/develop/headers/bsd", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/glibc", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/gnu", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/posix", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/" HYBRID_SECONDARY, 0, 0, 0, 1, 0 }, \ ++ /* Hybrid secondary folders for os kits not in base haiku package */\ ++ { "/boot/system/develop/headers/" HYBRID_SECONDARY "/os", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/" HYBRID_SECONDARY "/os/opengl", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers", 0, 0, 0, 1, 0 }, \ ++ { 0, 0, 0, 0, 0, 0 } \ ++} ++#else /* HYBRID_SECONDARY */ ++/* For both native and cross compiler, use standard Haiku include file ++ search paths. ++ For a cross compiler, it is expected that an appropriate sysroot has ++ been configured (e.g. /boot/system/develop/cross/x86) which will ++ be appended to each search folder given below. */ ++#define INCLUDE_DEFAULTS \ ++{ \ ++ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0, 0 }, \ ++ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0, 0 }, \ ++ { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0, 0 }, \ ++ { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 }, \ ++ { FIXED_INCLUDE_DIR, "GCC", 0, 0, 0, 0 }, \ ++ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0 }, \ ++ { "/boot/system/non-packaged/develop/headers", 0, 0, 0, 1, 0 }, \ ++ { "/boot/system/develop/headers/os", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/app", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/device", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/drivers", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/game", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/interface", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/kernel", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/locale", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/mail", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/media", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/midi", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/midi2", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/net", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/opengl", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/storage", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/support", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/translation", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/graphics", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/input_server", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/mail_daemon", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/registrar", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/screen_saver", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/add-ons/tracker", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/be_apps/Deskbar", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/be_apps/NetPositive", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/os/be_apps/Tracker", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/3rdparty", 0, 0, 0, 1, 0 }, \ ++ /* TODO: To be removed when libtiff has been outsourced. */\ ++ { "/boot/system/develop/headers/bsd", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/glibc", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/gnu", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers/posix", 0, 0, 1, 1, 0 }, \ ++ { "/boot/system/develop/headers", 0, 0, 0, 1, 0 }, \ ++ { 0, 0, 0, 0, 0, 0 } \ ++} ++#endif /* HYBRID_SECONDARY */ ++ ++/* Whee. LIBRARY_PATH is Be's LD_LIBRARY_PATH, which of course will ++ cause nasty problems if we override it. */ ++#define LIBRARY_PATH_ENV "BELIBRARIES" ++ ++/* Set STANDARD_STARTFILE_PREFIX_1 set to "/boot/system/develop/lib/", or the ++ respective secondary architecture path. The user specific paths are set via ++ LIBRARY_PATH_ENV. */ ++#undef STANDARD_STARTFILE_PREFIX_1 ++#undef STANDARD_STARTFILE_PREFIX_2 ++#undef MD_STARTFILE_PREFIX ++#undef STARTFILE_PREFIX_SPEC ++#ifdef HYBRID_SECONDARY ++/* For a secondary compiler on a hybrid system, use alternative search paths.*/ ++#define STANDARD_STARTFILE_PREFIX_1 \ ++ "/boot/system/non-packaged/develop/lib/" HYBRID_SECONDARY "/" ++#define STANDARD_STARTFILE_PREFIX_2 \ ++ "/boot/system/develop/lib/" HYBRID_SECONDARY "/" ++#else /* HYBRID_SECONDARY */ ++#define STANDARD_STARTFILE_PREFIX_1 "/boot/system/non-packaged/develop/lib/" ++#define STANDARD_STARTFILE_PREFIX_2 "/boot/system/develop/lib/" ++#endif /* HYBRID_SECONDARY */ ++ ++/* Haiku doesn't have a separate math library. */ ++#define MATH_LIBRARY "" ++ ++/* Haiku headers are C++-aware (and often use C++). */ ++#define NO_IMPLICIT_EXTERN_C ++ ++/* Only allow -lssp for SSP, as -lssp_nonshared is problematic in Haiku */ ++#ifndef TARGET_LIBC_PROVIDES_SSP ++#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all:-lssp}" ++#endif ++ ++/* Do not use TM clone registry in Haiku for now */ ++#define USE_TM_CLONE_REGISTRY 0 +diff --git a/gcc/config/i386/haiku.h b/gcc/config/i386/haiku.h +new file mode 100644 +index 0000000..3379e19 +--- /dev/null ++++ b/gcc/config/i386/haiku.h +@@ -0,0 +1,77 @@ ++/* Definitions for Intel x86 running Haiku ++ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 ++ Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++ ++#undef ASM_COMMENT_START ++#define ASM_COMMENT_START " #" ++ ++/* The SVR4 ABI for the i386 says that records and unions are returned ++ in memory. */ ++#undef DEFAULT_PCC_STRUCT_RETURN ++#define DEFAULT_PCC_STRUCT_RETURN 1 ++ ++#undef DBX_REGISTER_NUMBER ++#define DBX_REGISTER_NUMBER(n) \ ++ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) ++ ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__HAIKU__"); \ ++ builtin_define ("__INTEL__"); \ ++ builtin_define ("_X86_"); \ ++ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ ++ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ ++ builtin_define ("__STDC_ISO_10646__=201103L"); \ ++ builtin_assert ("system=haiku"); \ ++ } \ ++ while (0) ++ ++/* Provide a LINK_SPEC appropriate for Haiku. Here we provide support ++ for the special GCC options -static and -shared, which allow us to ++ link things in one of these three modes by applying the appropriate ++ combinations of options at link-time. */ ++ ++/* If ELF is the default format, we should not use /lib/elf. */ ++ ++#undef LINK_SPEC ++#define LINK_SPEC "-m elf_i386_haiku %{!r:-shared} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}" ++ ++/* A C statement (sans semicolon) to output to the stdio stream ++ FILE the assembler definition of uninitialized global DECL named ++ NAME whose size is SIZE bytes and alignment is ALIGN bytes. ++ Try to use asm_output_aligned_bss to implement this macro. */ ++ ++#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ ++ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) ++ ++/* A C statement to output to the stdio stream FILE an assembler ++ command to advance the location counter to a multiple of 1< 8 byte \ ++ alignment is preferred. */ \ ++ if ((LOG) > 3 \ ++ && (1 << (LOG)) > ((MAX_SKIP) + 1) \ ++ && (MAX_SKIP) >= 7) \ ++ fputs ("\t.p2align 3\n", (FILE)); \ ++ } \ ++ } \ ++ } while (0) ++#undef ASM_OUTPUT_MAX_SKIP_PAD ++#define ASM_OUTPUT_MAX_SKIP_PAD(FILE, LOG, MAX_SKIP) \ ++ if ((LOG) != 0) \ ++ { \ ++ if ((MAX_SKIP) == 0) \ ++ fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ ++ else \ ++ fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ ++ } ++#endif ++ ++ ++/* Output assembler code to FILE to call the profiler. */ ++#define NO_PROFILE_COUNTERS 1 ++ ++#undef ASM_SPEC ++#define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \ ++ %{Wa,*:%*} %{" SPEC_32 ":--32} %{" SPEC_64 ":--64}" ++ ++#undef ASM_OUTPUT_ALIGNED_COMMON ++#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ ++ x86_elf_aligned_common (FILE, NAME, SIZE, ALIGN); ++ ++ ++/* i386 System V Release 4 uses DWARF debugging info. ++ x86-64 ABI specifies DWARF2. */ ++ ++#define DWARF2_DEBUGGING_INFO 1 ++#define DWARF2_UNWIND_INFO 1 ++ ++#undef PREFERRED_DEBUGGING_TYPE ++#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG ++ ++#undef TARGET_ASM_SELECT_SECTION ++#define TARGET_ASM_SELECT_SECTION x86_64_elf_select_section ++ ++#undef TARGET_ASM_UNIQUE_SECTION ++#define TARGET_ASM_UNIQUE_SECTION x86_64_elf_unique_section ++ ++#define USE_X86_64_FRAME_POINTER 1 +diff --git a/gcc/config/i386/host-cygwin.c b/gcc/config/i386/host-cygwin.c +old mode 100644 +new mode 100755 +diff --git a/gcc/config/i386/t-haiku64 b/gcc/config/i386/t-haiku64 +new file mode 100644 +index 0000000..9c8f8e6 +--- /dev/null ++++ b/gcc/config/i386/t-haiku64 +@@ -0,0 +1,16 @@ ++MULTILIB_OPTIONS = m32 ++MULTILIB_DIRNAMES = 32 ++ ++LIBGCC = stmp-multilib ++INSTALL_LIBGCC = install-multilib ++ ++EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o ++ ++# The pushl in CTOR initialization interferes with frame pointer elimination. ++# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables, ++# because then __FRAME_END__ might not be the last thing in .eh_frame ++# section. ++CRTSTUFF_T_CFLAGS = -fno-omit-frame-pointer -fno-asynchronous-unwind-tables ++ ++# Compile libgcc2.a with pic. ++TARGET_LIBGCC2_CFLAGS = -fPIC +diff --git a/gcc/config/i386/winnt-cxx.c b/gcc/config/i386/winnt-cxx.c +old mode 100644 +new mode 100755 +diff --git a/gcc/config/i386/winnt-stubs.c b/gcc/config/i386/winnt-stubs.c +old mode 100644 +new mode 100755 +diff --git a/gcc/config/m68k/haiku.h b/gcc/config/m68k/haiku.h +new file mode 100644 +index 0000000..358c19f +--- /dev/null ++++ b/gcc/config/m68k/haiku.h +@@ -0,0 +1,268 @@ ++/* Definitions for Motorola 68k running Haiku ++ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2007 ++ Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING. If not, write to ++the Free Software Foundation, 51 Franklin Street, Fifth Floor, ++Boston, MA 02110-1301, USA. */ ++ ++/* Default target comes from config.gcc. */ ++ ++#undef TARGET_DEFAULT ++#ifdef TARGET_CPU_DEFAULT ++#define TARGET_DEFAULT TARGET_CPU_DEFAULT ++#else ++#define TARGET_DEFAULT (MASK_BITFIELD|MASK_68881|MASK_68020) ++#endif ++ ++/* for 68k machines this only needs to be TRUE for the 68000 */ ++ ++#undef STRICT_ALIGNMENT ++#define STRICT_ALIGNMENT 0 ++ ++/* Here are four prefixes that are used by asm_fprintf to ++ facilitate customization for alternate assembler syntaxes. ++ Machines with no likelihood of an alternate syntax need not ++ define these and need not use asm_fprintf. */ ++ ++/* The prefix for register names. Note that REGISTER_NAMES ++ is supposed to include this prefix. Also note that this is NOT an ++ fprintf format string, it is a literal string */ ++ ++#undef REGISTER_PREFIX ++#define REGISTER_PREFIX "%" ++ ++/* The prefix for local (compiler generated) labels. ++ These labels will not appear in the symbol table. */ ++ ++#undef LOCAL_LABEL_PREFIX ++#define LOCAL_LABEL_PREFIX "." ++ ++/* The prefix to add to user-visible assembler symbols. */ ++ ++#undef USER_LABEL_PREFIX ++#define USER_LABEL_PREFIX "" ++ ++#undef ASM_COMMENT_START ++#define ASM_COMMENT_START "|" ++ ++/* Target OS builtins. */ ++ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__HAIKU__"); \ ++ builtin_define ("__M68K__"); \ ++ builtin_define_std ("mc68000"); \ ++ builtin_define_std ("mc68020"); \ ++ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ ++ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ ++ builtin_define ("__STDC_ISO_10646__=201103L"); \ ++ builtin_assert ("system=haiku"); \ ++ } \ ++ while (0) ++ ++#define TARGET_OBJFMT_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__ELF__"); \ ++ } \ ++ while (0) ++ ++#undef CPP_SPEC ++#if TARGET_DEFAULT & MASK_68881 ++#define CPP_SPEC \ ++ "%{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} %{!msoft-float:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" ++#else ++#define CPP_SPEC \ ++ "%{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} %{m68881:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" ++#endif ++ ++/* We override the ASM_SPEC from svr4.h because we must pass -m68040 down ++ to the assembler. */ ++#undef ASM_SPEC ++#define ASM_SPEC \ ++ "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ ++%{m68040} %{m68060:-m68040}" ++ ++/* Provide a LINK_SPEC appropriate for Haiku. Here we provide support ++ for the special GCC options -static and -shared, which allow us to ++ link things in one of these three modes by applying the appropriate ++ combinations of options at link-time. */ ++ ++/* If ELF is the default format, we should not use /lib/elf. */ ++ ++#undef LINK_SPEC ++/*#define LINK_SPEC "%{!o*:-o %b} -m elf_m68k_haiku -shared -no-undefined %{nostart:-e 0}"*/ ++#define LINK_SPEC "%{!o*:-o %b} -m m68kelf %{!r:-shared} -no-undefined %{nostart:-e 0}" ++ ++/* XXX: not sure for the rest there... */ ++ ++/* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to ++ keep switch tables in the text section. */ ++ ++#define JUMP_TABLES_IN_TEXT_SECTION 1 ++ ++/* This is how to output an assembler line that says to advance the ++ location counter to a multiple of 2**LOG bytes. */ ++ ++/* Use the default action for outputting the case label. */ ++#undef ASM_OUTPUT_CASE_LABEL ++#define ASM_RETURN_CASE_JUMP \ ++ do { \ ++ if (TARGET_COLDFIRE) \ ++ { \ ++ if (ADDRESS_REG_P (operands[0])) \ ++ return "jmp %%pc@(2,%0:l)"; \ ++ else \ ++ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \ ++ } \ ++ else \ ++ return "jmp %%pc@(2,%0:w)"; \ ++ } while (0) ++ ++#undef ASM_OUTPUT_ALIGN ++#define ASM_OUTPUT_ALIGN(FILE,LOG) \ ++ if ((LOG) > 0) \ ++ fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG)); ++ ++/* If defined, a C expression whose value is a string containing the ++ assembler operation to identify the following data as uninitialized global ++ data. */ ++ ++#define BSS_SECTION_ASM_OP "\t.section\t.bss" ++ ++/* A C statement (sans semicolon) to output to the stdio stream ++ FILE the assembler definition of uninitialized global DECL named ++ NAME whose size is SIZE bytes and alignment is ALIGN bytes. ++ Try to use asm_output_aligned_bss to implement this macro. */ ++ ++#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ ++ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) ++ ++/* Output assembler code to FILE to increment profiler label # LABELNO ++ for profiling a function entry. */ ++ ++#undef FUNCTION_PROFILER ++#define FUNCTION_PROFILER(FILE, LABELNO) \ ++{ \ ++ asm_fprintf (FILE, "\tlea (%LLP%d,%Rpc),%Ra1\n", (LABELNO)); \ ++ if (flag_pic) \ ++ fprintf (FILE, "\tbsr.l _mcount@PLTPC\n"); \ ++ else \ ++ fprintf (FILE, "\tjbsr _mcount\n"); \ ++} ++ ++/* How to renumber registers for dbx and gdb. ++ On the Sun-3, the floating point registers have numbers ++ 18 to 25, not 16 to 23 as they do in the compiler. */ ++ ++#define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 16 ? (REGNO) : (REGNO) + 2) ++ ++/* Do not break .stabs pseudos into continuations. */ ++ ++#define DBX_CONTIN_LENGTH 0 ++ ++/* 1 if N is a possible register number for a function value. For ++ m68k/SVR4 allow d0, a0, or fp0 as return registers, for integral, ++ pointer, or floating types, respectively. Reject fp0 if not using ++ a 68881 coprocessor. */ ++ ++#undef FUNCTION_VALUE_REGNO_P ++#define FUNCTION_VALUE_REGNO_P(N) \ ++ ((N) == 0 || (N) == 8 || (TARGET_68881 && (N) == 16)) ++ ++/* Define this to be true when FUNCTION_VALUE_REGNO_P is true for ++ more than one register. */ ++ ++#undef NEEDS_UNTYPED_CALL ++#define NEEDS_UNTYPED_CALL 1 ++ ++/* Define how to generate (in the callee) the output value of a ++ function and how to find (in the caller) the value returned by a ++ function. VALTYPE is the data type of the value (as a tree). If ++ the precise function being called is known, FUNC is its ++ FUNCTION_DECL; otherwise, FUNC is 0. For m68k/SVR4 generate the ++ result in d0, a0, or fp0 as appropriate. */ ++ ++#undef FUNCTION_VALUE ++#define FUNCTION_VALUE(VALTYPE, FUNC) \ ++ (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ ++ ? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \ ++ : (POINTER_TYPE_P (VALTYPE) \ ++ ? gen_rtx_REG (TYPE_MODE (VALTYPE), 8) \ ++ : gen_rtx_REG (TYPE_MODE (VALTYPE), 0))) ++ ++/* For compatibility with the large body of existing code which does ++ not always properly declare external functions returning pointer ++ types, the m68k/SVR4 convention is to copy the value returned for ++ pointer functions from a0 to d0 in the function epilogue, so that ++ callers that have neglected to properly declare the callee can ++ still find the correct return value. */ ++ ++#define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \ ++do { \ ++ if (current_function_returns_pointer \ ++ && ! find_equiv_reg (0, get_last_insn (), 0, 0, 0, 8, Pmode)) \ ++ asm_fprintf (FILE, "\tmove.l %Ra0,%Rd0\n"); \ ++} while (0); ++ ++/* Define how to find the value returned by a library function ++ assuming the value has mode MODE. ++ For m68k/SVR4 look for integer values in d0, pointer values in d0 ++ (returned in both d0 and a0), and floating values in fp0. */ ++ ++#undef LIBCALL_VALUE ++#define LIBCALL_VALUE(MODE) \ ++ ((((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode) \ ++ && TARGET_68881) \ ++ ? gen_rtx_REG ((MODE), 16) \ ++ : gen_rtx_REG ((MODE), 0)) ++ ++/* For m68k SVR4, structures are returned using the reentrant ++ technique. */ ++#undef PCC_STATIC_STRUCT_RETURN ++#define DEFAULT_PCC_STRUCT_RETURN 0 ++ ++/* Finalize the trampoline by flushing the insn cache. */ ++ ++#undef FINALIZE_TRAMPOLINE ++#define FINALIZE_TRAMPOLINE(TRAMP) \ ++ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"), \ ++ LCT_NORMAL, VOIDmode, 2, TRAMP, Pmode, \ ++ plus_constant (Pmode, TRAMP, TRAMPOLINE_SIZE), \ ++ Pmode); ++ ++/* Clear the instruction cache from `beg' to `end'. This makes an ++ inline system call to SYS_cacheflush. The arguments are as ++ follows: ++ ++ cacheflush (addr, scope, cache, len) ++ ++ addr - the start address for the flush ++ scope - the scope of the flush (see the cpush insn) ++ cache - which cache to flush (see the cpush insn) ++ len - a factor relating to the number of flushes to perform: ++ len/16 lines, or len/4096 pages. */ ++ ++#define CLEAR_INSN_CACHE(BEG, END) \ ++{ \ ++extern void clear_caches(void *address, int length, unsigned long flags); \ ++ void *ptr = BEG; \ ++ int len = (END - BEG + 32); \ ++ clear_caches(ptr, len, 0x0005); \ ++} +diff --git a/gcc/config/mips/haiku.h b/gcc/config/mips/haiku.h +new file mode 100644 +index 0000000..f6d2efb +--- /dev/null ++++ b/gcc/config/mips/haiku.h +@@ -0,0 +1,44 @@ ++/* Definitions for MIPS running Haiku ++ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 ++ Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++ ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__HAIKU__"); \ ++ builtin_define ("__MIPS__"); \ ++ builtin_define ("__MIPSEL__"); \ ++ builtin_define ("_MIPSEL_"); \ ++ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ ++ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ ++ builtin_define ("__STDC_ISO_10646__=201103L"); \ ++ builtin_assert ("system=haiku"); \ ++ if (flag_pic) \ ++ { \ ++ builtin_define ("__PIC__"); \ ++ builtin_define ("__pic__"); \ ++ } \ ++ } \ ++ while (0) ++ ++#undef LINK_SPEC ++#define LINK_SPEC "%{!o*:-o %b} -m elf_mipsel_haiku %{!r:-shared} %{nostart:-e 0}" ++ +diff --git a/gcc/config/rs6000/haiku.h b/gcc/config/rs6000/haiku.h +new file mode 100644 +index 0000000..4dff89e +--- /dev/null ++++ b/gcc/config/rs6000/haiku.h +@@ -0,0 +1,56 @@ ++/* Definitions for PowerPC running Haiku ++ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 ++ Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++ ++/* long double is 128 bits wide; the documentation claims ++ LIBGCC2_LONG_DOUBLE_TYPE_SIZE to default to LONG_DOUBLE_TYPE_SIZE, but ++ it apparently does not */ ++/*#undef LONG_DOUBLE_TYPE_SIZE ++#define LONG_DOUBLE_TYPE_SIZE 128 ++#undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE ++#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128*/ ++ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__HAIKU__"); \ ++ builtin_define ("__POWERPC__"); \ ++ builtin_define ("__powerpc__"); \ ++ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ ++ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ ++ builtin_define ("__STDC_ISO_10646__=201103L"); \ ++ builtin_assert ("system=haiku"); \ ++ builtin_assert ("cpu=powerpc"); \ ++ builtin_assert ("machine=powerpc"); \ ++ TARGET_OS_SYSV_CPP_BUILTINS (); \ ++ } \ ++ while (0) ++ ++/* Provide a LINK_SPEC appropriate for Haiku. Here we provide support ++ for the special GCC options -static and -shared, which allow us to ++ link things in one of these three modes by applying the appropriate ++ combinations of options at link-time. */ ++ ++/* If ELF is the default format, we should not use /lib/elf. */ ++ ++#undef LINK_SPEC ++#define LINK_SPEC "%{!o*:-o %b} -m elf32ppchaiku %{!r:-shared} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}" +diff --git a/gcc/config/t-haiku b/gcc/config/t-haiku +new file mode 100644 +index 0000000..587d1fb +--- /dev/null ++++ b/gcc/config/t-haiku +@@ -0,0 +1,4 @@ ++# There are system headers elsewhere, but these are the ones that ++# we are most likely to want to apply any fixes to. ++NATIVE_SYSTEM_HEADER_DIR = /boot/system/develop/headers ++LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/posix/limits.h ] +\ No newline at end of file +diff --git a/gcc/configure.ac b/gcc/configure.ac +index 9d4c792..f1b248f 100644 +--- a/gcc/configure.ac ++++ b/gcc/configure.ac +@@ -771,6 +771,15 @@ fi + # Miscenalleous configure options + # ------------------------------- + ++# handle --with-hybrid-secondary ++AC_ARG_WITH(hybrid_secondary, ++ [AS_HELP_STRING([--with-hybrid_secondary], ++ [specify the packaging architecture for building a secondary compiler for a Haiku hybrid system])], ++ [HYBRID_SECONDARY=$withval], ++ [HYBRID_SECONDARY=] ++) ++AC_SUBST(HYBRID_SECONDARY) ++ + # With stabs + AC_ARG_WITH(stabs, + [AS_HELP_STRING([--with-stabs], +@@ -1155,6 +1164,16 @@ ZW_PROG_COMPILER_DEPENDENCIES([CXX]) + # -------- + + ++# Configure -lm usage for host tools that need it ++build_math_library="-lm" ++case $build in ++ *-*-haiku*) ++ # no separate math library needed ++ build_math_library= ++ ;; ++esac ++AC_SUBST(build_math_library) ++ + # These libraries may be used by collect2. + # We may need a special search path to get them linked. + AC_CACHE_CHECK(for collect2 libraries, gcc_cv_collect2_libs, +@@ -1611,7 +1630,7 @@ case ${enable_threads} in + # default + target_thread_file='single' + ;; +- aix | dce | lynx | mipssde | posix | rtems | \ ++ aix | dce | haiku | lynx | mipssde | posix | rtems | \ + single | tpf | vxworks | win32) + target_thread_file=${enable_threads} + ;; +diff --git a/gcc/ginclude/stdarg.h b/gcc/ginclude/stdarg.h +index aa248be..57a3ab0 100644 +--- a/gcc/ginclude/stdarg.h ++++ b/gcc/ginclude/stdarg.h +@@ -94,7 +94,7 @@ typedef __gnuc_va_list va_list; + #ifndef _VA_LIST + /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ + #ifndef _VA_LIST_T_H +-/* The macro __va_list__ is used by BeOS. */ ++/* The macro __va_list__ is used by BeOS and Haiku. */ + #ifndef __va_list__ + typedef __gnuc_va_list va_list; + #endif /* not __va_list__ */ +diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h +index 872f451..3522e12 100644 +--- a/gcc/ginclude/stddef.h ++++ b/gcc/ginclude/stddef.h +@@ -167,7 +167,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; + /* Define this type if we are doing the whole job, + or if we want this type in particular. */ + #if defined (_STDDEF_H) || defined (__need_size_t) +-#ifndef __size_t__ /* BeOS */ ++#ifndef __size_t__ /* BeOS, Haiku */ + #ifndef __SIZE_T__ /* Cray Unicos/Mk */ + #ifndef _SIZE_T /* in case has defined it. */ + #ifndef _SYS_SIZE_T_H +@@ -184,7 +184,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; + #ifndef _GCC_SIZE_T + #ifndef _SIZET_ + #ifndef __size_t +-#define __size_t__ /* BeOS */ ++#define __size_t__ /* BeOS, Haiku */ + #define __SIZE_T__ /* Cray Unicos/Mk */ + #define _SIZE_T + #define _SYS_SIZE_T_H +@@ -214,7 +214,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; + #endif + #if !(defined (__GNUG__) && defined (size_t)) + typedef __SIZE_TYPE__ size_t; +-#ifdef __BEOS__ ++#if defined(__BEOS__) + typedef long ssize_t; + #endif /* __BEOS__ */ + #endif /* !(defined (__GNUG__) && defined (size_t)) */ +@@ -247,7 +247,7 @@ typedef long ssize_t; + /* Define this type if we are doing the whole job, + or if we want this type in particular. */ + #if defined (_STDDEF_H) || defined (__need_wchar_t) +-#ifndef __wchar_t__ /* BeOS */ ++#ifndef __wchar_t__ /* BeOS, Haiku */ + #ifndef __WCHAR_T__ /* Cray Unicos/Mk */ + #ifndef _WCHAR_T + #ifndef _T_WCHAR_ +@@ -264,7 +264,7 @@ typedef long ssize_t; + #ifndef ___int_wchar_t_h + #ifndef __INT_WCHAR_T_H + #ifndef _GCC_WCHAR_T +-#define __wchar_t__ /* BeOS */ ++#define __wchar_t__ /* BeOS, Haiku */ + #define __WCHAR_T__ /* Cray Unicos/Mk */ + #define _WCHAR_T + #define _T_WCHAR_ +diff --git a/include/filenames.h b/include/filenames.h +index 5a2a055..ca8dd20 100644 +--- a/include/filenames.h ++++ b/include/filenames.h +@@ -44,9 +44,11 @@ extern "C" { + # define IS_ABSOLUTE_PATH(f) IS_DOS_ABSOLUTE_PATH (f) + #else /* not DOSish */ + # if defined(__APPLE__) ++/* + # ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM + # define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1 + # endif ++*/ + # endif /* __APPLE__ */ + # define HAS_DRIVE_SPEC(f) (0) + # define IS_DIR_SEPARATOR(c) IS_UNIX_DIR_SEPARATOR (c) +diff --git a/libatomic/configure.ac b/libatomic/configure.ac +index 023f172..1814d0c 100644 +--- a/libatomic/configure.ac ++++ b/libatomic/configure.ac +@@ -199,21 +199,27 @@ LIBAT_WORDSIZE + case " $config_path " in + *" posix "*) + XPCFLAGS="" +- CFLAGS="$CFLAGS -pthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include + void *g(void *d) { return NULL; }], + [pthread_t t; pthread_create(&t,NULL,g,NULL);])], +- [XPCFLAGS=" -pthread"], +- [CFLAGS="$save_CFLAGS $XCFLAGS" LIBS="-lpthread $LIBS" ++ [], ++ [CFLAGS="$CFLAGS -pthread" + AC_LINK_IFELSE( +- [AC_LANG_PROGRAM( +- [#include +- void *g(void *d) { return NULL; }], +- [pthread_t t; pthread_create(&t,NULL,g,NULL);])], +- [], +- [AC_MSG_ERROR([Pthreads are required to build libatomic])])]) ++ [AC_LANG_PROGRAM( ++ [#include ++ void *g(void *d) { return NULL; }], ++ [pthread_t t; pthread_create(&t,NULL,g,NULL);])], ++ [XPCFLAGS=" -pthread"], ++ [CFLAGS="$save_CFLAGS $XCFLAGS" LIBS="-lpthread $LIBS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM( ++ [#include ++ void *g(void *d) { return NULL; }], ++ [pthread_t t; pthread_create(&t,NULL,g,NULL);])], ++ [], ++ [AC_MSG_ERROR([Pthreads are required to build libatomic])])])]) + CFLAGS="$save_CFLAGS $XPCFLAGS" + ;; + esac +diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt +index b8af3ab..93b3d4e 100644 +--- a/libatomic/configure.tgt ++++ b/libatomic/configure.tgt +@@ -117,7 +117,7 @@ case "${target}" in + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu \ + | *-*-netbsd* | *-*-freebsd* | *-*-openbsd* | *-*-dragonfly* \ + | *-*-solaris2* | *-*-sysv4* | *-*-irix6* | *-*-osf* | *-*-hpux11* \ +- | *-*-darwin* | *-*-aix* | *-*-cygwin*) ++ | *-*-darwin* | *-*-aix* | *-*-cygwin* | *-*-haiku*) + # POSIX system. The OS is supported. + config_path="${config_path} posix" + ;; +diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in +index a1a392d..3fea2da 100644 +--- a/libgcc/Makefile.in ++++ b/libgcc/Makefile.in +@@ -394,10 +394,16 @@ ifeq ($(enable_shared),yes) + endif + endif + ++ifneq ($(enable_shared),yes) ++# Maintain the same visibility as older GCC for now. Needed on Haiku ++# because the static library is included in libroot.so. ++vis_hide = ++else + # For -fvisibility=hidden. We need both a -fvisibility=hidden on + # the command line, and a #define to prevent libgcc2.h etc from + # overriding that with #pragmas. + vis_hide = @vis_hide@ ++endif + + ifneq (,$(vis_hide)) + +diff --git a/libgcc/config.host b/libgcc/config.host +index b279a64..55b7e35 100644 +--- a/libgcc/config.host ++++ b/libgcc/config.host +@@ -231,6 +231,14 @@ case ${host} in + ;; + esac + ;; ++*-*-haiku*) ++ # This is the generic ELF configuration of Haiku. Later ++ # machine-specific sections may refine and add to this ++ # configuration. ++ tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-haiku t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ++ tmake_file="$tmake_file t-slibgcc-nolc-override" ++ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" ++ ;; + *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu) + tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux" + extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" +@@ -397,6 +405,12 @@ arm*-*-freebsd*) # ARM FreeBSD EABI + arm*-*-netbsdelf*) + tmake_file="$tmake_file arm/t-arm arm/t-netbsd t-slibgcc-gld-nover" + ;; ++arm-*-haiku*) ++ tmake_file="${tmake_file} arm/t-arm arm/t-elf arm/t-bpabi" ++ tmake_file="${tmake_file} t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp" ++ tm_file="${tm_file} arm/bpabi-lib.h" ++ unwind_header=config/arm/unwind-arm.h ++ ;; + arm*-*-linux*) # ARM GNU/Linux with ELF + tmake_file="${tmake_file} arm/t-arm t-fixedpoint-gnu-prefix t-crtfm" + tmake_file="${tmake_file} arm/t-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc" +@@ -604,6 +618,12 @@ x86_64-*-freebsd*) + tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff" + md_unwind_header=i386/freebsd-unwind.h + ;; ++i[34567]86-*-haiku*) ++ tmake_file="${tmake_file} i386/t-crtstuff i386/t-eh-dw2" ++ ;; ++x86_64-*-haiku*) ++ tmake_file="${tmake_file} i386/t-crtstuff i386/t-eh-dw2" ++ ;; + i[34567]86-*-netbsdelf*) + tmake_file="${tmake_file} i386/t-crtstuff" + ;; +@@ -812,6 +832,8 @@ m32r-*-linux*) + m32rle-*-linux*) + tmake_file="$tmake_file m32r/t-linux t-fdpbit" + ;; ++m68k-*-haiku*) ++ ;; + m68k-*-elf* | fido-*-elf) + tmake_file="$tmake_file m68k/t-floatlib" + ;; +@@ -882,6 +904,8 @@ mips*-sde-elf*) + esac + extra_parts="$extra_parts crti.o crtn.o" + ;; ++mipsel-*-haiku*) ++ ;; + mipsisa32-*-elf* | mipsisa32el-*-elf* | \ + mipsisa32r2-*-elf* | mipsisa32r2el-*-elf* | \ + mipsisa32r6-*-elf* | mipsisa32r6el-*-elf* | \ +@@ -1008,6 +1032,8 @@ powerpc*-*-freebsd*) + ;; + esac + ;; ++powerpc-*-haiku*) ++ ;; + powerpc-*-netbsd*) + tmake_file="$tmake_file rs6000/t-netbsd rs6000/t-crtstuff" + ;; +diff --git a/libgcc/config/i386/t-cygming b/libgcc/config/i386/t-cygming +old mode 100644 +new mode 100755 +diff --git a/libgcc/config/t-haiku b/libgcc/config/t-haiku +new file mode 100644 +index 0000000..b4fff2d +--- /dev/null ++++ b/libgcc/config/t-haiku +@@ -0,0 +1,3 @@ ++# Use unwind-dw2-fde ++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \ ++ $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c +diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c +index 52ed6d3..a0a25c2 100644 +--- a/libgcc/crtstuff.c ++++ b/libgcc/crtstuff.c +@@ -108,7 +108,9 @@ call_ ## FUNC (void) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ + && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ + && defined(__GLIBC__) && __GLIBC__ >= 2 ++#ifndef __HAIKU__ + #include ++#endif + /* uClibc pretends to be glibc 2.2 and DT_CONFIG is defined in its link.h. + But it doesn't use PT_GNU_EH_FRAME ELF segment currently. */ + # if !defined(__UCLIBC__) \ +diff --git a/libgomp/configure.ac b/libgomp/configure.ac +index a42d4f0..17bc715 100644 +--- a/libgomp/configure.ac ++++ b/libgomp/configure.ac +@@ -188,21 +188,27 @@ case "$host" in + *) + # Check to see if -pthread or -lpthread is needed. Prefer the former. + # In case the pthread.h system header is not found, this test will fail. +- CFLAGS="$CFLAGS -pthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include + void *g(void *d) { return NULL; }], + [pthread_t t; pthread_create(&t,NULL,g,NULL);])], +- [XPCFLAGS=" -Wc,-pthread"], +- [CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS" ++ [], ++ [CFLAGS="$CFLAGS -pthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include + void *g(void *d) { return NULL; }], + [pthread_t t; pthread_create(&t,NULL,g,NULL);])], +- [], +- [AC_MSG_ERROR([Pthreads are required to build libgomp])])]) ++ [XPCFLAGS=" -Wc,-pthread"], ++ [CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM( ++ [#include ++ void *g(void *d) { return NULL; }], ++ [pthread_t t; pthread_create(&t,NULL,g,NULL);])], ++ [], ++ [AC_MSG_ERROR([Pthreads are required to build libgomp])])])]) + esac + + if test x$libgomp_use_pthreads != xno; then +diff --git a/libstdc++-v3/config/os/haiku/ctype_base.h b/libstdc++-v3/config/os/haiku/ctype_base.h +new file mode 100644 +index 0000000..e762aaa +--- /dev/null ++++ b/libstdc++-v3/config/os/haiku/ctype_base.h +@@ -0,0 +1,61 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 1997-2015 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// . ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++// Default information, may not be appropriate for specific host. ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ /// @brief Base class for ctype. ++ struct ctype_base ++ { ++ // Non-standard typedefs. ++ typedef const int* __to_type; ++ ++ // NB: Offsets into ctype::_M_table force a particular size ++ // on the mask type. Because of this, we don't use an enum. ++ typedef unsigned int mask; ++ static const mask upper = 1 << 0; ++ static const mask lower = 1 << 1; ++ static const mask alpha = 1 << 2; ++ static const mask digit = 1 << 3; ++ static const mask xdigit = 1 << 4; ++ static const mask space = 1 << 5; ++ static const mask print = 1 << 6; ++ static const mask graph = (1 << 2) | (1 << 3) | (1 << 9); // alnum|punct ++ static const mask cntrl = 1 << 8; ++ static const mask punct = 1 << 9; ++ static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit ++#if __cplusplus >= 201103L ++ static const mask blank = 1 << 10; ++#endif ++ }; ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace +diff --git a/libstdc++-v3/config/os/haiku/ctype_configure_char.cc b/libstdc++-v3/config/os/haiku/ctype_configure_char.cc +new file mode 100644 +index 0000000..35e6b80 +--- /dev/null ++++ b/libstdc++-v3/config/os/haiku/ctype_configure_char.cc +@@ -0,0 +1,99 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 2011-2013 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// . ++ ++/** @file ctype_configure_char.cc */ ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++#include ++#include ++#include ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++// Information as gleaned from /usr/include/ctype.h ++ ++ const ctype_base::mask* ++ ctype::classic_table() throw() ++ { return 0; } ++ ++ ctype::ctype(__c_locale, const mask* __table, bool __del, ++ size_t __refs) ++ : facet(__refs), _M_del(__table != 0 && __del), ++ _M_toupper(NULL), _M_tolower(NULL), ++ _M_table(__table ? __table : classic_table()) ++ { ++ memset(_M_widen, 0, sizeof(_M_widen)); ++ _M_widen_ok = 0; ++ memset(_M_narrow, 0, sizeof(_M_narrow)); ++ _M_narrow_ok = 0; ++ } ++ ++ ctype::ctype(const mask* __table, bool __del, size_t __refs) ++ : facet(__refs), _M_del(__table != 0 && __del), ++ _M_toupper(NULL), _M_tolower(NULL), ++ _M_table(__table ? __table : classic_table()) ++ { ++ memset(_M_widen, 0, sizeof(_M_widen)); ++ _M_widen_ok = 0; ++ memset(_M_narrow, 0, sizeof(_M_narrow)); ++ _M_narrow_ok = 0; ++ } ++ ++ char ++ ctype::do_toupper(char __c) const ++ { return ::toupper((int) __c); } ++ ++ const char* ++ ctype::do_toupper(char* __low, const char* __high) const ++ { ++ while (__low < __high) ++ { ++ *__low = ::toupper((int) *__low); ++ ++__low; ++ } ++ return __high; ++ } ++ ++ char ++ ctype::do_tolower(char __c) const ++ { return ::tolower((int) __c); } ++ ++ const char* ++ ctype::do_tolower(char* __low, const char* __high) const ++ { ++ while (__low < __high) ++ { ++ *__low = ::tolower((int) *__low); ++ ++__low; ++ } ++ return __high; ++ } ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace +diff --git a/libstdc++-v3/config/os/haiku/ctype_inline.h b/libstdc++-v3/config/os/haiku/ctype_inline.h +new file mode 100644 +index 0000000..5b5cc56 +--- /dev/null ++++ b/libstdc++-v3/config/os/haiku/ctype_inline.h +@@ -0,0 +1,173 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 2000-2015 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// . ++ ++/** @file bits/ctype_inline.h ++ * This is an internal header file, included by other library headers. ++ * Do not attempt to use it directly. @headername{locale} ++ */ ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) ++// functions go in ctype.cc ++ ++// The following definitions are portable, but insanely slow. If one ++// cares at all about performance, then specialized ctype ++// functionality should be added for the native os in question: see ++// the config/os/bits/ctype_*.h files. ++ ++// Constructing a synthetic "C" table should be seriously considered... ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ bool ++ ctype:: ++ is(mask __m, char __c) const ++ { ++ if (_M_table) ++ return _M_table[static_cast(__c)] & __m; ++ else ++ { ++ bool __ret = false; ++ const size_t __bitmasksize = 15; ++ size_t __bitcur = 0; // Lowest bitmask in ctype_base == 0 ++ for (; __bitcur <= __bitmasksize; ++__bitcur) ++ { ++ const mask __bit = static_cast(1 << __bitcur); ++ if (__m & __bit) ++ { ++ bool __testis; ++ switch (__bit) ++ { ++ case space: ++ __testis = isspace(__c); ++ break; ++ case print: ++ __testis = isprint(__c); ++ break; ++ case cntrl: ++ __testis = iscntrl(__c); ++ break; ++ case upper: ++ __testis = isupper(__c); ++ break; ++ case lower: ++ __testis = islower(__c); ++ break; ++ case alpha: ++ __testis = isalpha(__c); ++ break; ++ case digit: ++ __testis = isdigit(__c); ++ break; ++ case punct: ++ __testis = ispunct(__c); ++ break; ++ case xdigit: ++ __testis = isxdigit(__c); ++ break; ++ case alnum: ++ __testis = isalnum(__c); ++ break; ++ case graph: ++ __testis = isgraph(__c); ++ break; ++#if __cplusplus >= 201103L ++ case blank: ++ __testis = isblank(__c); ++ break; ++#endif ++ default: ++ __testis = false; ++ break; ++ } ++ __ret |= __testis; ++ } ++ } ++ return __ret; ++ } ++ } ++ ++ const char* ++ ctype:: ++ is(const char* __low, const char* __high, mask* __vec) const ++ { ++ if (_M_table) ++ while (__low < __high) ++ *__vec++ = _M_table[static_cast(*__low++)]; ++ else ++ { ++ // Highest bitmask in ctype_base == 11. ++ const size_t __bitmasksize = 15; ++ for (;__low < __high; ++__vec, ++__low) ++ { ++ mask __m = 0; ++ // Lowest bitmask in ctype_base == 0 ++ size_t __i = 0; ++ for (;__i <= __bitmasksize; ++__i) ++ { ++ const mask __bit = static_cast(1 << __i); ++ if (this->is(__bit, *__low)) ++ __m |= __bit; ++ } ++ *__vec = __m; ++ } ++ } ++ return __high; ++ } ++ ++ const char* ++ ctype:: ++ scan_is(mask __m, const char* __low, const char* __high) const ++ { ++ if (_M_table) ++ while (__low < __high ++ && !(_M_table[static_cast(*__low)] & __m)) ++ ++__low; ++ else ++ while (__low < __high && !this->is(__m, *__low)) ++ ++__low; ++ return __low; ++ } ++ ++ const char* ++ ctype:: ++ scan_not(mask __m, const char* __low, const char* __high) const ++ { ++ if (_M_table) ++ while (__low < __high ++ && (_M_table[static_cast(*__low)] & __m) != 0) ++ ++__low; ++ else ++ while (__low < __high && this->is(__m, *__low) != 0) ++ ++__low; ++ return __low; ++ } ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace +diff --git a/libstdc++-v3/config/os/haiku/error_constants.h b/libstdc++-v3/config/os/haiku/error_constants.h +new file mode 100644 +index 0000000..fa6d889 +--- /dev/null ++++ b/libstdc++-v3/config/os/haiku/error_constants.h +@@ -0,0 +1,178 @@ ++// Specific definitions for generic platforms -*- C++ -*- ++ ++// Copyright (C) 2007-2013 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// . ++ ++/** @file bits/error_constants.h ++ * This is an internal header file, included by other library headers. ++ * Do not attempt to use it directly. @headername{system_error} ++ */ ++ ++#ifndef _GLIBCXX_ERROR_CONSTANTS ++#define _GLIBCXX_ERROR_CONSTANTS 1 ++ ++#include ++#include ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ enum class errc ++ { ++ address_family_not_supported = EAFNOSUPPORT, ++ address_in_use = EADDRINUSE, ++ address_not_available = EADDRNOTAVAIL, ++ already_connected = EISCONN, ++ argument_list_too_long = E2BIG, ++ argument_out_of_domain = EDOM, ++ bad_address = EFAULT, ++ bad_file_descriptor = EBADF, ++ ++#ifdef _GLIBCXX_HAVE_EBADMSG ++ bad_message = EBADMSG, ++#endif ++ ++ broken_pipe = EPIPE, ++ connection_aborted = ECONNABORTED, ++ connection_already_in_progress = EALREADY, ++ connection_refused = ECONNREFUSED, ++ connection_reset = ECONNRESET, ++ cross_device_link = EXDEV, ++ destination_address_required = EDESTADDRREQ, ++ device_or_resource_busy = EBUSY, ++ directory_not_empty = ENOTEMPTY, ++ executable_format_error = ENOEXEC, ++ file_exists = EEXIST, ++ file_too_large = EFBIG, ++ filename_too_long = ENAMETOOLONG, ++ function_not_supported = ENOSYS, ++ host_unreachable = EHOSTUNREACH, ++ ++#ifdef _GLIBCXX_HAVE_EIDRM ++ identifier_removed = EIDRM, ++#endif ++ ++ illegal_byte_sequence = EILSEQ, ++ inappropriate_io_control_operation = ENOTTY, ++ interrupted = EINTR, ++ invalid_argument = EINVAL, ++ invalid_seek = ESPIPE, ++ io_error = EIO, ++ is_a_directory = EISDIR, ++ message_size = EMSGSIZE, ++ network_down = ENETDOWN, ++ network_reset = ENETRESET, ++ network_unreachable = ENETUNREACH, ++ no_buffer_space = ENOBUFS, ++ no_child_process = ECHILD, ++ ++#ifdef _GLIBCXX_HAVE_ENOLINK ++ no_link = ENOLINK, ++#endif ++ ++ no_lock_available = ENOLCK, ++ ++#ifdef _GLIBCXX_HAVE_ENODATA ++ no_message_available = ENODATA, ++#endif ++ ++ no_message = ENOMSG, ++ no_protocol_option = ENOPROTOOPT, ++ no_space_on_device = ENOSPC, ++ ++#ifdef _GLIBCXX_HAVE_ENOSR ++ no_stream_resources = ENOSR, ++#endif ++ ++ no_such_device_or_address = ENXIO, ++ no_such_device = ENODEV, ++ no_such_file_or_directory = ENOENT, ++ no_such_process = ESRCH, ++ not_a_directory = ENOTDIR, ++ not_a_socket = ENOTSOCK, ++ ++#ifdef _GLIBCXX_HAVE_ENOSTR ++ not_a_stream = ENOSTR, ++#endif ++ ++ not_connected = ENOTCONN, ++ not_enough_memory = ENOMEM, ++ ++#ifdef _GLIBCXX_HAVE_ENOTSUP ++ not_supported = ENOTSUP, ++#endif ++ ++#ifdef _GLIBCXX_HAVE_ECANCELED ++ operation_canceled = ECANCELED, ++#endif ++ ++ operation_in_progress = EINPROGRESS, ++ operation_not_permitted = EPERM, ++ operation_not_supported = EOPNOTSUPP, ++ operation_would_block = EWOULDBLOCK, ++ ++#ifdef _GLIBCXX_HAVE_EOWNERDEAD ++ owner_dead = EOWNERDEAD, ++#endif ++ ++ permission_denied = EACCES, ++ ++#ifdef _GLIBCXX_HAVE_EPROTO ++ protocol_error = EPROTO, ++#endif ++ ++ protocol_not_supported = EPROTONOSUPPORT, ++ read_only_file_system = EROFS, ++ resource_deadlock_would_occur = EDEADLK, ++ resource_unavailable_try_again = EAGAIN, ++ result_out_of_range = ERANGE, ++ ++#ifdef _GLIBCXX_HAVE_ENOTRECOVERABLE ++ state_not_recoverable = ENOTRECOVERABLE, ++#endif ++ ++#ifdef _GLIBCXX_HAVE_ETIME ++ stream_timeout = ETIME, ++#endif ++ ++#ifdef _GLIBCXX_HAVE_ETXTBSY ++ text_file_busy = ETXTBSY, ++#endif ++ ++ timed_out = ETIMEDOUT, ++ too_many_files_open_in_system = ENFILE, ++ too_many_files_open = EMFILE, ++ too_many_links = EMLINK, ++ too_many_symbolic_link_levels = ELOOP, ++ ++#ifdef _GLIBCXX_HAVE_EOVERFLOW ++ value_too_large = EOVERFLOW, ++#endif ++ ++ wrong_protocol_type = EPROTOTYPE ++ }; ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace ++ ++#endif +diff --git a/libstdc++-v3/config/os/haiku/os_defines.h b/libstdc++-v3/config/os/haiku/os_defines.h +new file mode 100644 +index 0000000..4674f7b +--- /dev/null ++++ b/libstdc++-v3/config/os/haiku/os_defines.h +@@ -0,0 +1,45 @@ ++// Specific definitions for generic platforms -*- C++ -*- ++ ++// Copyright (C) 2000-2013 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// . ++ ++/** @file bits/os_defines.h ++ * This is an internal header file, included by other library headers. ++ * Do not attempt to use it directly. @headername{iosfwd} ++ */ ++ ++#ifndef _GLIBCXX_OS_DEFINES ++#define _GLIBCXX_OS_DEFINES 1 ++ ++// System-specific #define, typedefs, corrections, etc, go here. This ++// file will come before all others. ++ ++// On Haiku, nanosleep and sched_yield are always available except for the ++// kernel and the bootloader, so use them. ++#if !defined(_KERNEL_MODE) && !defined(_LOADER_MODE) ++ #define _GLIBCXX_USE_NANOSLEEP 1 ++ #define _GLIBCXX_USE_SCHED_YIELD 1 ++ #define _GLIBCXX_USE_CLOCK_MONOTONIC 1 ++ #define _GLIBCXX_USE_CLOCK_REALTIME 1 ++#endif ++ ++#endif +diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host +index caea9de..00b70da 100644 +--- a/libstdc++-v3/configure.host ++++ b/libstdc++-v3/configure.host +@@ -270,6 +270,9 @@ case "${host_os}" in + os_include_dir="os/gnu-linux" + fi + ;; ++ haiku*) ++ os_include_dir="os/haiku" ++ ;; + hpux*) + os_include_dir="os/hpux" + ;; +diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4 +index 77c9828..f989e01 100644 +--- a/libstdc++-v3/crossconfig.m4 ++++ b/libstdc++-v3/crossconfig.m4 +@@ -140,6 +140,46 @@ case "${host}" in + AC_SUBST(SECTION_FLAGS) + ;; + ++ *-haiku*) ++ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \ ++ machine/endian.h machine/param.h sys/machine.h sys/types.h \ ++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h]) ++ SECTION_FLAGS='-ffunction-sections -fdata-sections' ++ AC_SUBST(SECTION_FLAGS) ++ ++ AC_DEFINE(HAVE_INT64_T) ++ ++ AC_DEFINE(HAVE_ACOSF) ++ AC_DEFINE(HAVE_ASINF) ++ AC_DEFINE(HAVE_ATANF) ++ AC_DEFINE(HAVE_ATAN2F) ++ AC_DEFINE(HAVE_CEILF) ++ AC_DEFINE(HAVE_COSF) ++ AC_DEFINE(HAVE_COSHF) ++ AC_DEFINE(HAVE_EXPF) ++ AC_DEFINE(HAVE_FABSF) ++ AC_DEFINE(HAVE_FINITE) ++ AC_DEFINE(HAVE_FINITEF) ++ AC_DEFINE(HAVE_FLOORF) ++ AC_DEFINE(HAVE_FMODF) ++ AC_DEFINE(HAVE_FREXPF) ++ AC_DEFINE(HAVE_HYPOT) ++ AC_DEFINE(HAVE_HYPOTF) ++ AC_DEFINE(HAVE_ISINF) ++ AC_DEFINE(HAVE_ISINFF) ++ AC_DEFINE(HAVE_ISNAN) ++ AC_DEFINE(HAVE_ISNANF) ++ AC_DEFINE(HAVE_LOGF) ++ AC_DEFINE(HAVE_LOG10F) ++ AC_DEFINE(HAVE_MODFF) ++ AC_DEFINE(HAVE_SINF) ++ AC_DEFINE(HAVE_SINHF) ++ AC_DEFINE(HAVE_SQRTF) ++ AC_DEFINE(HAVE_TANF) ++ AC_DEFINE(HAVE_TANHF) ++ AC_DEFINE(HAVE_TLS) ++ ;; ++ + *-hpux*) + SECTION_FLAGS='-ffunction-sections -fdata-sections' + AC_SUBST(SECTION_FLAGS) +diff --git a/libstdc++-v3/libsupc++/tinfo.cc b/libstdc++-v3/libsupc++/tinfo.cc +index 04d101f..f765d9a 100644 +--- a/libstdc++-v3/libsupc++/tinfo.cc ++++ b/libstdc++-v3/libsupc++/tinfo.cc +@@ -30,6 +30,15 @@ std::type_info:: + ~type_info () + { } + ++#ifdef __HAIKU__ ++#ifndef __GXX_MERGED_TYPEINFO_NAMES ++#define __GXX_MERGED_TYPEINFO_NAMES 0 ++#endif ++#ifndef __GXX_TYPEINFO_EQUALITY_INLINE ++#define __GXX_TYPEINFO_EQUALITY_INLINE 0 ++#endif ++#endif ++ + #if !__GXX_TYPEINFO_EQUALITY_INLINE + + // We can't rely on common symbols being shared between shared objects. +diff --git a/libtool.m4 b/libtool.m4 +index 24d13f3..94d96d9 100644 +--- a/libtool.m4 ++++ b/libtool.m4 +@@ -1137,7 +1137,7 @@ fi + # Invoke $ECHO with all args, space-separated. + func_echo_all () + { +- $ECHO "$*" ++ $ECHO "$*" + } + + case "$ECHO" in +@@ -1722,7 +1722,7 @@ else + lt_cv_dlopen_libs= + + case $host_os in +- beos*) ++ beos* | haiku* ) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes +@@ -2342,8 +2342,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -3603,7 +3604,6 @@ m4_if([$1], [CXX], [ + ;; + esac + ;; +- + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; +@@ -3626,8 +3626,6 @@ m4_if([$1], [CXX], [ + ;; + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. +@@ -3937,8 +3935,6 @@ m4_if([$1], [CXX], [ + + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) +-- +2.12.2 + + +From 229e1dff7683fd9f670de5eeb303b5e7e059282b Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Fri, 12 May 2017 23:49:00 +0200 +Subject: Haiku: regenerate configure. + + +diff --git a/configure b/configure +index 32a3863..4ff544f 100755 +--- a/configure ++++ b/configure +@@ -3054,6 +3054,9 @@ case "${host}" in + i[3456789]86-*-msdosdjgpp*) + noconfigdirs="$noconfigdirs tcl tk itcl" + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs tk itcl libgui gdb" ++ ;; + esac + + +@@ -3159,7 +3162,7 @@ if test x$enable_libgomp = x ; then + ;; + *-*-solaris2* | *-*-hpux11*) + ;; +- *-*-darwin* | *-*-aix*) ++ *-*-darwin* | *-*-aix* | *-*-haiku*) + ;; + nvptx*-*-*) + ;; +@@ -3398,6 +3401,9 @@ case "${target}" in + *-*-darwin*) + noconfigdirs="$noconfigdirs target-libffi" + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs ${libgcj}" ++ ;; + *-*-netware*) + noconfigdirs="$noconfigdirs target-libffi" + ;; +@@ -3582,6 +3588,9 @@ case "${target}" in + *-*-freebsd*) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs target-newlib target-libgloss" ++ ;; + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + ;; +@@ -3643,6 +3652,9 @@ case "${target}" in + with_gmp=/usr/local + fi + ;; ++ *-*-haiku*) ++ noconfigdirs="$noconfigdirs gdb target-libiberty" ++ ;; + *-*-kaos*) + # Remove unsupported stuff on all kaOS configurations. + noconfigdirs="$noconfigdirs target-libgloss" +@@ -5295,24 +5307,30 @@ $as_echo_n "checking how to compare bootstrapped objects... " >&6; } + if test "${gcc_cv_prog_cmp_skip+set}" = set; then : + $as_echo_n "(cached) " >&6 + else +- echo abfoo >t1 +- echo cdfoo >t2 +- gcc_cv_prog_cmp_skip='tail -c +17 $$f1 > tmp-foo1; tail -c +17 $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2' +- if cmp t1 t2 2 2 > /dev/null 2>&1; then +- if cmp t1 t2 1 1 > /dev/null 2>&1; then +- : +- else +- gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16' ++ # comparing object files via cmp doesn't work on haiku (files will seemingly ++ # always differ), so we disassemble both files and compare the results: ++ if uname -o | grep -iq haiku; then ++ gcc_cv_prog_cmp_skip='objdump -Dz $$f1 | tail +6 >tmp-foo1; objdump -Dz $$f2 | tail +6 >tmp-foo2; cmp tmp-foo1 tmp-foo2' ++ else ++ echo abfoo >t1 ++ echo cdfoo >t2 ++ gcc_cv_prog_cmp_skip='tail -c +17 $$f1 > tmp-foo1; tail -c +17 $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2' ++ if cmp t1 t2 2 2 > /dev/null 2>&1; then ++ if cmp t1 t2 1 1 > /dev/null 2>&1; then ++ : ++ else ++ gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16' ++ fi + fi +- fi +- if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then +- if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then +- : +- else +- gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2' ++ if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then ++ if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then ++ : ++ else ++ gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2' ++ fi + fi ++ rm t1 t2 + fi +- rm t1 t2 + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_prog_cmp_skip" >&5 +diff --git a/gcc/configure b/gcc/configure +index ea73b15..1299e85 100755 +--- a/gcc/configure ++++ b/gcc/configure +@@ -747,6 +747,7 @@ LDEXP_LIB + EXTRA_GCC_LIBS + GNAT_LIBEXC + COLLECT2_LIBS ++build_math_library + CXXDEPMODE + DEPDIR + am__leading_dot +@@ -783,6 +784,7 @@ with_float + with_cpu + enable_multiarch + enable_multilib ++HYBRID_SECONDARY + coverage_flags + valgrind_command + valgrind_path_defines +@@ -899,6 +901,7 @@ enable_checking + enable_coverage + enable_gather_detailed_mem_stats + enable_valgrind_annotations ++with_hybrid_secondary + with_stabs + enable_multilib + enable_multiarch +@@ -1714,6 +1717,8 @@ Optional Packages: + --with-demangler-in-ld try to use demangler in GNU ld + --with-gnu-as arrange to work with GNU as + --with-as arrange to use the specified as (full pathname) ++ --with-hybrid_secondary specify the packaging architecture for building a ++ secondary compiler for a Haiku hybrid system + --with-stabs arrange to use stabs instead of host debug format + --with-dwarf2 force the default debug format to be DWARF 2 + --with-specs=SPECS add SPECS to driver command-line processing +@@ -7373,6 +7378,18 @@ fi + # Miscenalleous configure options + # ------------------------------- + ++# handle --with-hybrid-secondary ++ ++# Check whether --with-hybrid_secondary was given. ++if test "${with_hybrid_secondary+set}" = set; then : ++ withval=$with_hybrid_secondary; HYBRID_SECONDARY=$withval ++else ++ HYBRID_SECONDARY= ++ ++fi ++ ++ ++ + # With stabs + + # Check whether --with-stabs was given. +@@ -9380,6 +9397,16 @@ fi + # -------- + + ++# Configure -lm usage for host tools that need it ++build_math_library="-lm" ++case $build in ++ *-*-haiku*) ++ # no separate math library needed ++ build_math_library= ++ ;; ++esac ++ ++ + # These libraries may be used by collect2. + # We may need a special search path to get them linked. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for collect2 libraries" >&5 +@@ -11680,7 +11707,7 @@ case ${enable_threads} in + # default + target_thread_file='single' + ;; +- aix | dce | lynx | mipssde | posix | rtems | \ ++ aix | dce | haiku | lynx | mipssde | posix | rtems | \ + single | tpf | vxworks | win32) + target_thread_file=${enable_threads} + ;; +@@ -15524,8 +15551,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- lt_prog_compiler_static= + ;; + + hpux*) +@@ -17637,8 +17662,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -18155,7 +18181,7 @@ else + lt_cv_dlopen_libs= + + case $host_os in +- beos*) ++ beos* | haiku* ) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes +@@ -18433,7 +18459,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 18436 "configure" ++#line 18462 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -18539,7 +18565,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 18542 "configure" ++#line 18568 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -20353,7 +20379,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + ;; + esac + ;; +- + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; +@@ -20375,8 +20400,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + ;; + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. +@@ -21297,8 +21320,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +diff --git a/libatomic/configure b/libatomic/configure +index c05fc9d..c86a824 100755 +--- a/libatomic/configure ++++ b/libatomic/configure +@@ -8206,8 +8206,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- lt_prog_compiler_static= + ;; + + hpux*) +@@ -10319,8 +10317,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -10837,7 +10836,7 @@ else + lt_cv_dlopen_libs= + + case $host_os in +- beos*) ++ beos* | haiku* ) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes +@@ -11115,7 +11114,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11118 "configure" ++#line 11117 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -11221,7 +11220,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11224 "configure" ++#line 11223 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -12333,6 +12332,7 @@ _ACEOF + + + ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __atomic_load/store for size 2" >&5 + $as_echo_n "checking for __atomic_load/store for size 2... " >&6; } + if test "${libat_cv_have_at_ldst_2+set}" = set; then : +@@ -12400,6 +12400,7 @@ _ACEOF + + + ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __atomic_load/store for size 4" >&5 + $as_echo_n "checking for __atomic_load/store for size 4... " >&6; } + if test "${libat_cv_have_at_ldst_4+set}" = set; then : +@@ -12467,6 +12468,7 @@ _ACEOF + + + ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __atomic_load/store for size 8" >&5 + $as_echo_n "checking for __atomic_load/store for size 8... " >&6; } + if test "${libat_cv_have_at_ldst_8+set}" = set; then : +@@ -12534,6 +12536,7 @@ _ACEOF + + + ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __atomic_load/store for size 16" >&5 + $as_echo_n "checking for __atomic_load/store for size 16... " >&6; } + if test "${libat_cv_have_at_ldst_16+set}" = set; then : +@@ -12602,6 +12605,7 @@ _ACEOF + + + ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __atomic_test_and_set for size 1" >&5 + $as_echo_n "checking for __atomic_test_and_set for size 1... " >&6; } + if test "${libat_cv_have_at_tas_1+set}" = set; then : +@@ -14530,7 +14534,6 @@ _ACEOF + case " $config_path " in + *" posix "*) + XPCFLAGS="" +- CFLAGS="$CFLAGS -pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include +@@ -14544,13 +14547,29 @@ pthread_t t; pthread_create(&t,NULL,g,NULL); + } + _ACEOF + if ac_fn_c_try_link "$LINENO"; then : ++ ++else ++ CFLAGS="$CFLAGS -pthread" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ void *g(void *d) { return NULL; } ++int ++main () ++{ ++pthread_t t; pthread_create(&t,NULL,g,NULL); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : + XPCFLAGS=" -pthread" + else + CFLAGS="$save_CFLAGS $XCFLAGS" LIBS="-lpthread $LIBS" +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include +- void *g(void *d) { return NULL; } ++ void *g(void *d) { return NULL; } + int + main () + { +@@ -14569,6 +14588,9 @@ rm -f core conftest.err conftest.$ac_objext \ + fi + rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext + CFLAGS="$save_CFLAGS $XPCFLAGS" + ;; + esac +diff --git a/libgomp/configure b/libgomp/configure +index b7e9f40..0a7fdb7 100755 +--- a/libgomp/configure ++++ b/libgomp/configure +@@ -8246,8 +8246,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- lt_prog_compiler_static= + ;; + + hpux*) +@@ -10359,8 +10357,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -10877,7 +10876,7 @@ else + lt_cv_dlopen_libs= + + case $host_os in +- beos*) ++ beos* | haiku* ) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes +@@ -11155,7 +11154,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11158 "configure" ++#line 11157 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -11261,7 +11260,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11264 "configure" ++#line 11263 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -12121,8 +12120,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- lt_prog_compiler_static_FC= + ;; + + hpux*) +@@ -13999,8 +13996,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -15084,7 +15082,6 @@ case "$host" in + *) + # Check to see if -pthread or -lpthread is needed. Prefer the former. + # In case the pthread.h system header is not found, this test will fail. +- CFLAGS="$CFLAGS -pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include +@@ -15098,9 +15095,9 @@ pthread_t t; pthread_create(&t,NULL,g,NULL); + } + _ACEOF + if ac_fn_c_try_link "$LINENO"; then : +- XPCFLAGS=" -Wc,-pthread" ++ + else +- CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS" ++ CFLAGS="$CFLAGS -pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include +@@ -15114,6 +15111,22 @@ pthread_t t; pthread_create(&t,NULL,g,NULL); + } + _ACEOF + if ac_fn_c_try_link "$LINENO"; then : ++ XPCFLAGS=" -Wc,-pthread" ++else ++ CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ void *g(void *d) { return NULL; } ++int ++main () ++{ ++pthread_t t; pthread_create(&t,NULL,g,NULL); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : + + else + as_fn_error "Pthreads are required to build libgomp" "$LINENO" 5 +@@ -15123,6 +15136,9 @@ rm -f core conftest.err conftest.$ac_objext \ + fi + rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext + esac + + if test x$libgomp_use_pthreads != xno; then +diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure +index 2406cb9..363196f 100755 +--- a/libstdc++-v3/configure ++++ b/libstdc++-v3/configure +@@ -8665,8 +8665,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- lt_prog_compiler_static= + ;; + + hpux*) +@@ -10787,8 +10785,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -11308,7 +11307,7 @@ else + lt_cv_dlopen_libs= + + case $host_os in +- beos*) ++ beos* | haiku* ) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes +@@ -11601,7 +11600,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11604 "configure" ++#line 11603 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -11707,7 +11706,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11710 "configure" ++#line 11709 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -13527,7 +13526,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + ;; + esac + ;; +- + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; +@@ -13549,8 +13547,6 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } + ;; + haiku*) + # PIC is the default for Haiku. +- # The "-static" flag exists, but is broken. +- lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. +@@ -14471,8 +14467,9 @@ haiku*) + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes +- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' +- hardcode_into_libs=yes ++ sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' ++ sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -15393,7 +15390,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; } + # Fake what AC_TRY_COMPILE does. + + cat > conftest.$ac_ext << EOF +-#line 15396 "configure" ++#line 15393 "configure" + int main() + { + typedef bool atomic_type; +@@ -15428,7 +15425,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; } + rm -f conftest* + + cat > conftest.$ac_ext << EOF +-#line 15431 "configure" ++#line 15428 "configure" + int main() + { + typedef short atomic_type; +@@ -15463,7 +15460,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; } + rm -f conftest* + + cat > conftest.$ac_ext << EOF +-#line 15466 "configure" ++#line 15463 "configure" + int main() + { + // NB: _Atomic_word not necessarily int. +@@ -15499,7 +15496,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; } + rm -f conftest* + + cat > conftest.$ac_ext << EOF +-#line 15502 "configure" ++#line 15499 "configure" + int main() + { + typedef long long atomic_type; +@@ -15580,7 +15577,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu + # unnecessary for this test. + + cat > conftest.$ac_ext << EOF +-#line 15583 "configure" ++#line 15580 "configure" + int main() + { + _Decimal32 d1; +@@ -15622,7 +15619,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + # unnecessary for this test. + + cat > conftest.$ac_ext << EOF +-#line 15625 "configure" ++#line 15622 "configure" + template + struct same + { typedef T2 type; }; +@@ -15656,7 +15653,7 @@ $as_echo "$enable_int128" >&6; } + rm -f conftest* + + cat > conftest.$ac_ext << EOF +-#line 15659 "configure" ++#line 15656 "configure" + template + struct same + { typedef T2 type; }; +@@ -53334,6 +53331,89 @@ done + + ;; + ++ *-haiku*) ++ for ac_header in nan.h ieeefp.h endian.h sys/isa_defs.h \ ++ machine/endian.h machine/param.h sys/machine.h sys/types.h \ ++ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h ++do : ++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ++ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" ++eval as_val=\$$as_ac_Header ++ if test "x$as_val" = x""yes; then : ++ cat >>confdefs.h <<_ACEOF ++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 ++_ACEOF ++ ++fi ++ ++done ++ ++ SECTION_FLAGS='-ffunction-sections -fdata-sections' ++ ++ ++ $as_echo "#define HAVE_INT64_T 1" >>confdefs.h ++ ++ ++ $as_echo "#define HAVE_ACOSF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_ASINF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_ATANF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_ATAN2F 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_CEILF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_COSF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_COSHF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_EXPF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_FABSF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_FINITE 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_FINITEF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_FLOORF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_FMODF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_FREXPF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_HYPOT 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_HYPOTF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_ISINF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_ISINFF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_ISNAN 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_ISNANF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_LOGF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_LOG10F 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_MODFF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_SINF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_SINHF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_SQRTF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_TANF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_TANHF 1" >>confdefs.h ++ ++ $as_echo "#define HAVE_TLS 1" >>confdefs.h ++ ++ ;; ++ + *-hpux*) + SECTION_FLAGS='-ffunction-sections -fdata-sections' + +-- +2.12.2 + + +From 0b9acc512c979693434aa81df5097cdb1076dafc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= +Date: Mon, 27 Jul 2015 16:32:32 +0200 +Subject: Haiku: disable -fno-PIE as this fails on x86_64. + + +diff --git a/gcc/Makefile.in b/gcc/Makefile.in +index 61bf974..82c561d 100644 +--- a/gcc/Makefile.in ++++ b/gcc/Makefile.in +@@ -265,7 +265,7 @@ NO_PIE_CFLAGS = @NO_PIE_CFLAGS@ + NO_PIE_FLAG = @NO_PIE_FLAG@ + + # We don't want to compile the compilers with -fPIE, it make PCH fail. +-COMPILER += $(NO_PIE_CFLAGS) ++#COMPILER += $(NO_PIE_CFLAGS) + + # Link with -no-pie since we compile the compiler with -fno-PIE. + LINKER += $(NO_PIE_FLAG) +@@ -776,9 +776,9 @@ NO_PIE_CFLAGS_FOR_BUILD = @NO_PIE_CFLAGS_FOR_BUILD@ + NO_PIE_FLAG_FOR_BUILD = @NO_PIE_FLAG_FOR_BUILD@ + BUILD_CFLAGS= @BUILD_CFLAGS@ -DGENERATOR_FILE + BUILD_CXXFLAGS = @BUILD_CXXFLAGS@ -DGENERATOR_FILE +-BUILD_NO_PIE_CFLAGS = @BUILD_NO_PIE_CFLAGS@ +-BUILD_CFLAGS += $(BUILD_NO_PIE_CFLAGS) +-BUILD_CXXFLAGS += $(BUILD_NO_PIE_CFLAGS) ++#BUILD_NO_PIE_CFLAGS = @BUILD_NO_PIE_CFLAGS@ ++#BUILD_CFLAGS += $(BUILD_NO_PIE_CFLAGS) ++#BUILD_CXXFLAGS += $(BUILD_NO_PIE_CFLAGS) + + # Native compiler that we use. This may be C++ some day. + COMPILER_FOR_BUILD = $(CXX_FOR_BUILD) +-- +2.12.2 + + +From d226e420dfda57ab533c62bf2ab97e50ef0635f2 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Thu, 5 May 2016 09:03:06 +0000 +Subject: fix for libstdc++/69506 + + +diff --git a/libstdc++-v3/config/os/haiku/os_defines.h b/libstdc++-v3/config/os/haiku/os_defines.h +index 4674f7b..02c8693 100644 +--- a/libstdc++-v3/config/os/haiku/os_defines.h ++++ b/libstdc++-v3/config/os/haiku/os_defines.h +@@ -42,4 +42,7 @@ + #define _GLIBCXX_USE_CLOCK_REALTIME 1 + #endif + ++// See libstdc++/69506 ++#define _GLIBCXX_USE_WEAK_REF 0 ++ + #endif +-- +2.12.2 + + +From a635fecdf48ab04995adc10078407a18abc8eec7 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Thu, 5 May 2016 15:52:08 +0000 +Subject: rename x86_elf_aligned_common. + + +diff --git a/gcc/config/i386/haiku64.h b/gcc/config/i386/haiku64.h +index 76ba48e..e2fa55a 100644 +--- a/gcc/config/i386/haiku64.h ++++ b/gcc/config/i386/haiku64.h +@@ -112,9 +112,9 @@ Boston, MA 02111-1307, USA. */ + #define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \ + %{Wa,*:%*} %{" SPEC_32 ":--32} %{" SPEC_64 ":--64}" + +-#undef ASM_OUTPUT_ALIGNED_COMMON +-#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ +- x86_elf_aligned_common (FILE, NAME, SIZE, ALIGN); ++#undef ASM_OUTPUT_ALIGNED_DECL_COMMON ++#define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \ ++ x86_elf_aligned_decl_common (FILE, DECL, NAME, SIZE, ALIGN); + + + /* i386 System V Release 4 uses DWARF debugging info. +-- +2.12.2 +