This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] haiku: Initial build support
- From: Alexander von Gluck IV <kallisti5 at unixzen dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Alexander von Gluck IV <kallisti5 at unixzen dot com>
- Date: Mon, 16 Jul 2018 20:27:15 -0500
- Subject: [PATCH] haiku: Initial build support
* We have been dragging these around since gcc 4.x.
* Some tweaks will likely be needed, but this gets our foot
in the door.
Authors:
Fredrik Holmqvist
Jerome Duval
Augustin Cavalier
François Revol
Simon South
Jessica Hamilton
Ithamar R. Adema
Oliver Tappe
Jonathan Schleifer
.. and maybe more!
---
config.rpath | 2 +
config/acx.m4 | 36 ++-
configure | 53 ++--
configure.ac | 60 ++--
gcc/config.gcc | 49 +++-
gcc/config.host | 10 +-
gcc/config/arm/haiku.h | 80 ++++++
gcc/config/arm/t-haiku | 21 ++
gcc/config/haiku-spec.h | 38 +++
gcc/config/haiku-stdint.h | 55 ++++
gcc/config/haiku.h | 217 ++++++++++++++
gcc/config/i386/haiku.h | 77 +++++
gcc/config/i386/haiku64.h | 135 +++++++++
gcc/config/i386/t-haiku64 | 16 ++
gcc/config/m68k/haiku.h | 268 ++++++++++++++++++
gcc/config/mips/haiku.h | 44 +++
gcc/config/rs6000/haiku.h | 56 ++++
gcc/config/t-haiku | 4 +
gcc/configure | 22 +-
libgcc/config.host | 22 ++
libgcc/config/t-haiku | 3 +
libstdc++-v3/config/os/haiku/ctype_base.h | 61 ++++
.../config/os/haiku/ctype_configure_char.cc | 99 +++++++
libstdc++-v3/config/os/haiku/ctype_inline.h | 168 +++++++++++
.../config/os/haiku/error_constants.h | 178 ++++++++++++
libstdc++-v3/config/os/haiku/os_defines.h | 48 ++++
libstdc++-v3/configure | 85 +++++-
libstdc++-v3/configure.host | 2 +-
libstdc++-v3/crossconfig.m4 | 40 +++
libtool.m4 | 8 +-
30 files changed, 1883 insertions(+), 74 deletions(-)
create mode 100644 gcc/config/arm/haiku.h
create mode 100644 gcc/config/arm/t-haiku
create mode 100644 gcc/config/haiku-spec.h
create mode 100644 gcc/config/haiku-stdint.h
create mode 100644 gcc/config/haiku.h
create mode 100644 gcc/config/i386/haiku.h
create mode 100644 gcc/config/i386/haiku64.h
create mode 100644 gcc/config/i386/t-haiku64
create mode 100644 gcc/config/m68k/haiku.h
create mode 100644 gcc/config/mips/haiku.h
create mode 100644 gcc/config/rs6000/haiku.h
create mode 100644 gcc/config/t-haiku
create mode 100644 libgcc/config/t-haiku
create mode 100644 libstdc++-v3/config/os/haiku/ctype_base.h
create mode 100644 libstdc++-v3/config/os/haiku/ctype_configure_char.cc
create mode 100644 libstdc++-v3/config/os/haiku/ctype_inline.h
create mode 100644 libstdc++-v3/config/os/haiku/error_constants.h
create mode 100644 libstdc++-v3/config/os/haiku/os_defines.h
diff --git a/config.rpath b/config.rpath
index 4dea75957c2..5bcc5be17e4 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 87c1b5e2932..7a511a9a1c0 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 b/configure
index dd9fbe4d322..7804c2f0a5c 100755
--- a/configure
+++ b/configure
@@ -3052,6 +3052,9 @@ case "${host}" in
i[3456789]86-*-msdosdjgpp*)
noconfigdirs="$noconfigdirs tcl tk itcl"
;;
+ *-*-haiku*)
+ noconfigdirs="$noconfigdirs tk itcl libgui gdb"
+ ;;
esac
@@ -3157,7 +3160,7 @@ if test x$enable_libgomp = x ; then
;;
*-*-solaris2* | *-*-hpux11*)
;;
- *-*-darwin* | *-*-aix*)
+ *-*-darwin* | *-*-aix* | *-*-haiku*)
;;
nvptx*-*-*)
;;
@@ -3358,6 +3361,9 @@ case "${target}" in
*-*-darwin*)
noconfigdirs="$noconfigdirs target-libffi"
;;
+ *-*-haiku*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
*-*-netware*)
noconfigdirs="$noconfigdirs target-libffi"
;;
@@ -3536,6 +3542,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"
;;
@@ -3597,6 +3606,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"
@@ -5249,25 +5261,31 @@ $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
$as_echo "$gcc_cv_prog_cmp_skip" >&6; }
@@ -15832,4 +15850,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
-
diff --git a/configure.ac b/configure.ac
index a0b0917dd55..9eb4e7b682f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -112,11 +112,11 @@ extra_host_args=
### or a host dependent tool. Then put it into the appropriate list
### (library or tools, host or target), doing a dependency sort.
-# Subdirs will be configured in the order listed in build_configdirs,
+# Subdirs will be configured in the order listed in build_configdirs,
# configdirs, or target_configdirs; see the serialization section below.
-# Dependency sorting is only needed when *configuration* must be done in
-# a particular order. In all cases a dependency should be specified in
+# Dependency sorting is only needed when *configuration* must be done in
+# a particular order. In all cases a dependency should be specified in
# the Makefile, whether or not it's implicitly specified here.
# Double entries in build_configdirs, configdirs, or target_configdirs may
@@ -208,7 +208,7 @@ if test x"${host}" = x"${target}" ; then
is_cross_compiler=no
else
is_cross_compiler=yes
-fi
+fi
# Find the build and target subdir names.
GCC_TOPLEV_SUBDIRS
@@ -246,7 +246,7 @@ if test x$with_system_zlib = xyes ; then
noconfigdirs="$noconfigdirs zlib"
fi
-# some tools are so dependent upon X11 that if we're not building with X,
+# some tools are so dependent upon X11 that if we're not building with X,
# it's not even worth trying to configure, much less build, that tool.
case ${with_x} in
@@ -254,7 +254,7 @@ case ${with_x} in
no)
skipdirs="${skipdirs} tk itcl libgui"
# We won't be able to build gdbtk without X.
- enable_gdbtk=no
+ enable_gdbtk=no
;;
*) echo "*** bad value \"${with_x}\" for -with-x flag; ignored" 1>&2 ;;
esac
@@ -410,7 +410,7 @@ esac
# Only spaces may be used in this macro; not newlines or tabs.
unsupported_languages=
-# Remove more programs from consideration, based on the host or
+# Remove more programs from consideration, based on the host or
# target this usually means that a port of the program doesn't
# exist yet.
@@ -418,6 +418,9 @@ case "${host}" in
i[[3456789]]86-*-msdosdjgpp*)
noconfigdirs="$noconfigdirs tcl tk itcl"
;;
+ *-*-haiku*)
+ noconfigdirs="$noconfigdirs tk itcl libgui gdb"
+ ;;
esac
@@ -509,7 +512,7 @@ if test x$enable_libgomp = x ; then
;;
*-*-solaris2* | *-*-hpux11*)
;;
- *-*-darwin* | *-*-aix*)
+ *-*-darwin* | *-*-aix* | *-*-haiku*)
;;
nvptx*-*-*)
;;
@@ -692,6 +695,9 @@ case "${target}" in
*-*-darwin*)
noconfigdirs="$noconfigdirs target-libffi"
;;
+ *-*-haiku*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
*-*-netware*)
noconfigdirs="$noconfigdirs target-libffi"
;;
@@ -870,12 +876,15 @@ 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"
;;
*-*-lynxos*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
- ;;
+ ;;
*-*-mingw*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
;;
@@ -931,6 +940,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"
@@ -1213,7 +1225,7 @@ case "${host}" in
hppa*-hp-hpux*)
host_makefile_frag="config/mh-pa"
;;
- hppa*-*)
+ hppa*-*)
host_makefile_frag="config/mh-pa"
;;
*-*-darwin*)
@@ -1871,7 +1883,7 @@ if test -d ${srcdir}/gcc; then
# an apparent bug in bash 1.12 on linux.
${srcdir}/gcc/[[*]]/config-lang.in) ;;
*)
- # From the config-lang.in, get $language, $target_libs,
+ # From the config-lang.in, get $language, $target_libs,
# $lang_dirs, $boot_language, and $build_by_default
language=
target_libs=
@@ -2104,7 +2116,7 @@ AC_ARG_WITH([target-bdw-gc-include],
AC_ARG_WITH([target-bdw-gc-lib],
[AS_HELP_STRING([--with-target-bdw-gc-lib=PATHLIST],
[specify directories for installed bdw-gc library])])
-
+
case ,${enable_languages},:${enable_objc_gc} in *,objc,*:yes|*,objc,*:auto)
AC_MSG_CHECKING([for bdw garbage collector])
if test "x$with_target_bdw_gc$with_target_bdw_gc_include$with_target_bdw_gc_lib" = x; then
@@ -2183,7 +2195,7 @@ done
build_configdirs_all="$build_configdirs"
build_configdirs=
for i in ${build_configdirs_all} ; do
- j=`echo $i | sed -e s/build-//g`
+ j=`echo $i | sed -e s/build-//g`
if test -f ${srcdir}/$j/configure ; then
build_configdirs="${build_configdirs} $i"
fi
@@ -2200,7 +2212,7 @@ done
target_configdirs_all="$target_configdirs"
target_configdirs=
for i in ${target_configdirs_all} ; do
- j=`echo $i | sed -e s/target-//g`
+ j=`echo $i | sed -e s/target-//g`
if test -f ${srcdir}/$j/configure ; then
target_configdirs="${target_configdirs} $i"
fi
@@ -2286,7 +2298,7 @@ ACX_TOOL_DIRS
copy_dirs=
-AC_ARG_WITH([build-sysroot],
+AC_ARG_WITH([build-sysroot],
[AS_HELP_STRING([--with-build-sysroot=SYSROOT],
[use sysroot as the system root during the build])],
[if test x"$withval" != x ; then
@@ -2385,11 +2397,11 @@ fi
# This is done by determining whether or not the appropriate directory
# is available, and by checking whether or not specific configurations
# have requested that this magic not happen.
-#
-# The command line options always override the explicit settings in
+#
+# The command line options always override the explicit settings in
# configure.ac, and the settings in configure.ac override this magic.
#
-# If the default for a toolchain is to use GNU as and ld, and you don't
+# If the default for a toolchain is to use GNU as and ld, and you don't
# want to do that, then you should use the --without-gnu-as and
# --without-gnu-ld options for the configure script. Similarly, if
# the default is to use the included zlib and you don't want to do that,
@@ -2496,7 +2508,7 @@ case "${target}" in
target_makefile_frag="config/mt-gnu"
;;
*-*-aix4.[[3456789]]* | *-*-aix[[56789]].*)
- # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm
+ # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm
# commands to handle both 32-bit and 64-bit objects. These flags are
# harmless if we're using GNU nm or ar.
extra_arflags_for_target=" -X32_64"
@@ -2566,7 +2578,7 @@ if test $? = 0 ; then
if test -s conftest || test -s conftest.exe ; then
we_are_ok=yes
fi
-fi
+fi
case $we_are_ok in
no)
echo 1>&2 "*** The command '${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c' failed."
@@ -2981,7 +2993,7 @@ baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
# --program-suffix have been applied to it. Autoconf has already
# doubled dollar signs and backslashes in program_transform_name; we want
# the backslashes un-doubled, and then the entire thing wrapped in single
-# quotes, because this will be expanded first by make and then by the shell.
+# quotes, because this will be expanded first by make and then by the shell.
# Also, because we want to override the logic in subdir configure scripts to
# choose program_transform_name, replace any s,x,x, with s,y,y,.
sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
@@ -3050,7 +3062,7 @@ case "$target:$have_compiler:$host:$target:$enable_multilib" in
if test -s conftest || test -s conftest.exe ; then
dev64=yes
fi
- fi
+ fi
rm -f conftest*
if test x${dev64} != xyes ; then
AC_MSG_ERROR([I suspect your system does not have 32-bit development libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.])
@@ -3327,7 +3339,7 @@ AC_SUBST(CFLAGS)
AC_SUBST(CXXFLAGS)
# Target tools.
-AC_ARG_WITH([build-time-tools],
+AC_ARG_WITH([build-time-tools],
[AS_HELP_STRING([--with-build-time-tools=PATH],
[use given path to find target tools during the build])],
[case x"$withval" in
@@ -3431,7 +3443,7 @@ if test "$USE_MAINTAINER_MODE" = yes; then
else
MAINTAINER_MODE_TRUE='#'
MAINTAINER_MODE_FALSE=
-fi
+fi
MAINT=$MAINTAINER_MODE_TRUE
AC_SUBST(MAINT)dnl
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 78e84c2b864..4d0fa3f5074 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -174,7 +174,7 @@
# the --with-sysroot configure option or the
# --sysroot command line option is used this
# will be relative to the sysroot.
-# target_type_format_char
+# target_type_format_char
# The default character to be used for formatting
# the attribute in a
# .type symbol_name, ${t_t_f_c}<property>
@@ -759,6 +759,18 @@ 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
@@ -1135,6 +1147,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"
@@ -1527,6 +1549,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 ${nbsd_tm_file} i386/netbsd-elf.h"
extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
@@ -1995,6 +2025,13 @@ m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux
tm_defines="${tm_defines} MOTOROLA=1"
tmake_file="m68k/t-floatlib m68k/t-uclinux m68k/t-mlibs"
;;
+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"
+ ;;
m68k-*-linux*) # Motorola m68k's running GNU/Linux
# with ELF format using glibc 2
# aka the GNU/Linux C library 6.
@@ -2133,6 +2170,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"
@@ -2496,6 +2538,11 @@ powerpc-*-rtems*)
extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-rtems rs6000/t-ppccomm"
;;
+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*-*-linux*spe*)
tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h freebsd-spec.h powerpcspe/sysv4.h"
extra_options="${extra_options} powerpcspe/sysv4.opt"
diff --git a/gcc/config.host b/gcc/config.host
index c65569da2e9..80cb5d971b5 100644
--- a/gcc/config.host
+++ b/gcc/config.host
@@ -61,7 +61,7 @@
# different from the default "liblto_plugin.so".
# When setting any of these variables, check to see if a corresponding
-# variable is present in config.build; if so, you will likely want to
+# variable is present in config.build; if so, you will likely want to
# set it in both places.
# Default settings.
@@ -107,7 +107,7 @@ case ${host} in
;;
esac
;;
- arm*-*-freebsd* | arm*-*-linux* | arm*-*-fuchsia*)
+ arm*-*-freebsd* | arm*-*-haiku* | arm*-*-linux* | arm*-*-fuchsia*)
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 00000000000..f0c0d63264c
--- /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 00000000000..3f7f488fe21
--- /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-spec.h b/gcc/config/haiku-spec.h
new file mode 100644
index 00000000000..5ca898509e1
--- /dev/null
+++ b/gcc/config/haiku-spec.h
@@ -0,0 +1,38 @@
+#define HAIKU_TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__HAIKU__"); \
+ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \
+ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \
+ 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"); \
+ HAIKU_TARGET_CPU_CPP_BUILTINS(); \
+ } \
+ while (0)
+
+/* Define the default Haiku-specific per-CPU hook code. */
+#define HAIKU_TARGET_CPU_CPP_BUILTINS() do {} while (0)
+
+/* Provide a CPP_SPEC appropriate for Haiku. We just deal with the GCC
+ option `-posix', and PIC issues. */
+
+#define HAIKU_CPP_SPEC " \
+ %(cpp_cpu) \
+ %(cpp_arch) \
+ %{posix:-D_POSIX_SOURCE}"
+
+#define HAIKU_STARTFILE_SPEC \
+ "crti.o%s crtbeginS.o%s %{!shared:%{!nostart:start_dyn.o%s}} init_term_dyn.o%s"
+
+#define HAIKU_ENDFILE_SPEC \
+ "crtendS.o%s crtn.o%s"
+
+#define HAIKU_LIB_SPEC \
+ "-lroot"
+
+#define HAIKU_DYNAMIC_LINKER \
+ "/system/runtime_loader"
diff --git a/gcc/config/haiku-stdint.h b/gcc/config/haiku-stdint.h
new file mode 100644
index 00000000000..19f141296a6
--- /dev/null
+++ b/gcc/config/haiku-stdint.h
@@ -0,0 +1,55 @@
+/* Definitions for <stdint.h> types on Haiku.
+ Copyright (C) 2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#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 00000000000..e3a9c7e8210
--- /dev/null
+++ b/gcc/config/haiku.h
@@ -0,0 +1,217 @@
+/* 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 JCR_SECTION_NAME default definition for Haiku */
+#define TARGET_NO_JCR_SECTION_NAME 1
+
+/* 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 00000000000..3379e19f546
--- /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<<LOG
+ bytes if it is within MAX_SKIP bytes.
+
+ This is used to align code labels according to Intel recommendations. */
+
+#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(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
diff --git a/gcc/config/i386/haiku64.h b/gcc/config/i386/haiku64.h
new file mode 100644
index 00000000000..8c434983384
--- /dev/null
+++ b/gcc/config/i386/haiku64.h
@@ -0,0 +1,135 @@
+/* Definitions for AMD x86_64 running Haiku with ELF format.
+ 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. For 64-bit compilation this definition is ignored, however
+ * it is necessary for correct 32-bit code generation.
+ */
+#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__"); \
+ if (!TARGET_64BIT) \
+ { \
+ 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 TARGET_64BIT_DEFAULT
+#define SPEC_32 "m32"
+#define SPEC_64 "!m32"
+#else
+#define SPEC_32 "!m64"
+#define SPEC_64 "m64"
+#endif
+
+#undef LINK_SPEC
+#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64_haiku} %{" SPEC_32 ":-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 x86_output_aligned_bss to implement this macro. */
+
+#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
+ x86_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+
+/* This is used to align code labels according to Intel recommendations. */
+
+#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
+ do { \
+ 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)); \
+ /* Make sure that we have at least 8 byte alignment if > 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_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.
+ 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/t-haiku64 b/gcc/config/i386/t-haiku64
new file mode 100644
index 00000000000..9c8f8e62e60
--- /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/m68k/haiku.h b/gcc/config/m68k/haiku.h
new file mode 100644
index 00000000000..84ee17aca88
--- /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} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}"
+
+/* 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 00000000000..f6d2efb9797
--- /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 00000000000..4dff89e5c73
--- /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 00000000000..587d1fb01a5
--- /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 b/gcc/configure
index 80ac4a3d478..cac7a920113 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -750,6 +750,7 @@ LDEXP_LIB
EXTRA_GCC_LIBS
GNAT_LIBEXC
COLLECT2_LIBS
+build_math_library
CXXDEPMODE
DEPDIR
am__leading_dot
@@ -7398,6 +7399,7 @@ else
fi
+
# Determine whether or not multilibs are enabled.
# Check whether --enable-multilib was given.
if test "${enable_multilib+set}" = set; then :
@@ -9403,6 +9405,15 @@ fi
# UNSORTED
# --------
+# 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.
@@ -11704,7 +11715,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}
;;
@@ -15551,8 +15562,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*)
@@ -17664,8 +17673,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*)
@@ -18182,7 +18192,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
diff --git a/libgcc/config.host b/libgcc/config.host
index 18cabaf24f6..6e81121eecf 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -235,6 +235,11 @@ case ${host} in
tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-fuchsia"
extra_parts="crtbegin.o crtend.o"
;;
+*-*-haiku*)
+ 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-libgcc 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"
@@ -418,6 +423,13 @@ arm*-*-fuchsia*)
tm_file="${tm_file} arm/bpabi-lib.h"
unwind_header=config/arm/unwind-arm.h
;;
+arm*-*-haiku*)
+ tmake_file="${tmake_file} arm/t-arm t-fixedpoint-gnu-prefix arm/t-elf"
+ tmake_file="${tmake_file} arm/t-bpabi"
+ tm_file="${tm_file} arm/bpabi-lib.h"
+ unwind_header=config/arm/unwind-arm.h
+ tmake_file="${tmake_file} t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
+ ;;
arm*-*-netbsdelf*)
tmake_file="$tmake_file arm/t-arm arm/t-netbsd t-slibgcc-gld-nover"
;;
@@ -636,6 +648,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"
;;
@@ -844,6 +862,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"
;;
@@ -1057,6 +1077,8 @@ powerpc*-*-freebsd*)
;;
esac
;;
+powerpc-*-haiku*)
+ ;;
powerpc-*-netbsd*)
tmake_file="$tmake_file rs6000/t-netbsd rs6000/t-crtstuff"
;;
diff --git a/libgcc/config/t-haiku b/libgcc/config/t-haiku
new file mode 100644
index 00000000000..b4fff2d8f06
--- /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/libstdc++-v3/config/os/haiku/ctype_base.h b/libstdc++-v3/config/os/haiku/ctype_base.h
new file mode 100644
index 00000000000..86e15cb47ff
--- /dev/null
+++ b/libstdc++-v3/config/os/haiku/ctype_base.h
@@ -0,0 +1,61 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1997-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
+// <http://www.gnu.org/licenses/>.
+
+//
+// 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<char>::_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 00000000000..35e6b80f020
--- /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
+// <http://www.gnu.org/licenses/>.
+
+/** @file ctype_configure_char.cc */
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+#include <locale>
+#include <cstdlib>
+#include <cstring>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return 0; }
+
+ ctype<char>::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<char>::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<char>::do_toupper(char __c) const
+ { return ::toupper((int) __c); }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = ::toupper((int) *__low);
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return ::tolower((int) __c); }
+
+ const char*
+ ctype<char>::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 00000000000..0419139626b
--- /dev/null
+++ b/libstdc++-v3/config/os/haiku/ctype_inline.h
@@ -0,0 +1,168 @@
+// Locale support -*- 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
+// <http://www.gnu.org/licenses/>.
+
+/** @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<char>::
+ is(mask __m, char __c) const
+ {
+ if (_M_table)
+ return _M_table[static_cast<unsigned char>(__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<mask>(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;
+ default:
+ __testis = false;
+ break;
+ }
+ __ret |= __testis;
+ }
+ }
+ return __ret;
+ }
+ }
+
+ const char*
+ ctype<char>::
+ is(const char* __low, const char* __high, mask* __vec) const
+ {
+ if (_M_table)
+ while (__low < __high)
+ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+ else
+ {
+ // Highest bitmask in ctype_base == 10.
+ 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<mask>(1 << __i);
+ if (this->is(__bit, *__low))
+ __m |= __bit;
+ }
+ *__vec = __m;
+ }
+ }
+ return __high;
+ }
+
+ const char*
+ ctype<char>::
+ scan_is(mask __m, const char* __low, const char* __high) const
+ {
+ if (_M_table)
+ while (__low < __high
+ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+ ++__low;
+ else
+ while (__low < __high && !this->is(__m, *__low))
+ ++__low;
+ return __low;
+ }
+
+ const char*
+ ctype<char>::
+ scan_not(mask __m, const char* __low, const char* __high) const
+ {
+ if (_M_table)
+ while (__low < __high
+ && (_M_table[static_cast<unsigned char>(*__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 00000000000..fa6d889192a
--- /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
+// <http://www.gnu.org/licenses/>.
+
+/** @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 <bits/c++config.h>
+#include <cerrno>
+
+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 00000000000..02c869321e5
--- /dev/null
+++ b/libstdc++-v3/config/os/haiku/os_defines.h
@@ -0,0 +1,48 @@
+// 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
+// <http://www.gnu.org/licenses/>.
+
+/** @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
+
+// See libstdc++/69506
+#define _GLIBCXX_USE_WEAK_REF 0
+
+#endif
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index d126addd40a..04482e91f9b 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -11315,7 +11315,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
@@ -53380,6 +53380,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'
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
index caea9de9c76..c0ee97af458 100644
--- a/libstdc++-v3/configure.host
+++ b/libstdc++-v3/configure.host
@@ -360,7 +360,7 @@ case "${host}" in
;;
esac
;;
- arm*-*-freebsd*)
+ arm*-*-freebsd* | arm*-*-haiku*)
port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
;;
powerpc*-*-darwin*)
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
index 0dbfe4057bd..3f8958b5f61 100644
--- a/libstdc++-v3/crossconfig.m4
+++ b/libstdc++-v3/crossconfig.m4
@@ -141,6 +141,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/libtool.m4 b/libtool.m4
index 940faaa161d..72931dda5e0 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -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
@@ -2343,7 +2343,9 @@ haiku*)
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*)
@@ -3626,8 +3628,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.
--
2.17.1