mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-09 21:30:08 +02:00
* flag detection is broken with our current gcc; the testcase used doesn't trigger the use of the stack detector, hence gcc doesn't try to link with it.
410 lines
12 KiB
Plaintext
410 lines
12 KiB
Plaintext
From 31a245a696e070debdeea5b9236524e78dc93c5e Mon Sep 17 00:00:00 2001
|
|
From: Alexander von Gluck IV <kallisti5@unixzen.com>
|
|
Date: Sun, 1 Feb 2015 03:29:50 +0000
|
|
Subject: configure.in: Fix haiku build by removing unneeded i586 check
|
|
|
|
|
|
diff --git a/configure.in b/configure.in
|
|
index 8297c5a..81c9d9f 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -2983,15 +2983,8 @@ if test "$with_dln_a_out" != yes; then
|
|
])
|
|
: ${LIBPATHENV=LIBRARY_PATH}
|
|
rb_cv_dlopen=yes],
|
|
- [haiku*], [ AS_CASE(["$target_cpu"],
|
|
- [powerpc*], [
|
|
- : ${LDSHARED='$(LD) -xms'}
|
|
- EXTDLDFLAGS='-export $(TARGET_ENTRY)'
|
|
- DLDFLAGS="$DLDFLAGS -lroot glue-noinit.a init_term_dyn.o start_dyn.o"
|
|
- ],
|
|
- [i586*], [
|
|
- : ${LDSHARED='$(CC) -shared'}
|
|
- ])
|
|
+ [haiku*], [
|
|
+ : ${LDSHARED='$(CC) -shared'}
|
|
: ${LIBPATHENV=LIBRARY_PATH}
|
|
rb_cv_dlopen=yes ],
|
|
[nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
|
|
--
|
|
2.2.2
|
|
|
|
|
|
From 3da705f932b8100bada67ce907e7748d90286163 Mon Sep 17 00:00:00 2001
|
|
From: Alexander von Gluck IV <kallisti5@unixzen.com>
|
|
Date: Wed, 4 Feb 2015 04:43:25 +0000
|
|
Subject: ext/socket: Don't check for Haiku, no longer needed
|
|
|
|
|
|
diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c
|
|
index 68f610e..b518787 100644
|
|
--- a/ext/socket/getaddrinfo.c
|
|
+++ b/ext/socket/getaddrinfo.c
|
|
@@ -45,7 +45,7 @@
|
|
#include <sys/types.h>
|
|
#ifndef _WIN32
|
|
#include <sys/param.h>
|
|
-#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE)
|
|
+#if defined(__BEOS__) && !defined(BONE)
|
|
# include <net/socket.h>
|
|
#else
|
|
# include <sys/socket.h>
|
|
--
|
|
2.2.2
|
|
|
|
|
|
From 69cbcb1a3504ecc7fe55f9847e3c4185662944c2 Mon Sep 17 00:00:00 2001
|
|
From: Hamish Morrison <hamishm53@gmail.com>
|
|
Date: Tue, 2 Jun 2015 21:47:45 +0100
|
|
Subject: configure.in: remove obsolete workarounds for Haiku
|
|
|
|
|
|
diff --git a/configure.in b/configure.in
|
|
index 81c9d9f..0d56aba 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -845,7 +845,7 @@ if test "$GCC" = yes; then
|
|
|
|
# -fstack-protector
|
|
AS_CASE(["$target_os"],
|
|
- [mingw*|nacl|haiku], [
|
|
+ [mingw*|nacl], [
|
|
stack_protector=no
|
|
])
|
|
if test -z "${stack_protector+set}"; then
|
|
@@ -870,11 +870,6 @@ if test "$GCC" = yes; then
|
|
[cygwin*|darwin*|netbsd*|nacl], [
|
|
# need lgamma_r(), finite()
|
|
],
|
|
- [haiku], [
|
|
- # Haiku R1/alpha3 uses gcc-4.4.4 which can not handle anonymous union
|
|
- # with ANSI standard flags. Anonumous union is required to compile
|
|
- # socket extension where <net/if.h> uses anonymous union.
|
|
- ],
|
|
[
|
|
# ANSI (no XCFLAGS because this is C only)
|
|
for ansi_options in -std=iso9899:1999 "-ansi -std=iso9899:199409"; do
|
|
@@ -1055,14 +1050,15 @@ main()
|
|
],
|
|
[hpux*], [ LIBS="-lm $LIBS"
|
|
ac_cv_c_inline=no],
|
|
-[beos*|haiku*], [
|
|
+[beos*], [
|
|
ac_cv_func_link=no
|
|
ac_cv_func_sched_yield=no
|
|
ac_cv_func_pthread_attr_setinheritsched=no
|
|
- AS_CASE(["$target_os"],
|
|
- [beos*], [ ac_cv_header_net_socket_h=yes],
|
|
- [haiku*], [ ac_cv_func_shutdown=no])
|
|
- LIBS="$LIBS" # m lib is include in root under BeOS/Haiku
|
|
+ ac_cv_header_net_socket_h=yes
|
|
+ LIBS="$LIBS" # m lib is include in root under BeOS
|
|
+ ],
|
|
+[haiku*], [
|
|
+ LIBS="$LIBS"
|
|
],
|
|
[cygwin*], [ ac_cv_header_langinfo_h=yes
|
|
AC_CHECK_FUNCS(cygwin_conv_path)
|
|
@@ -2868,7 +2864,7 @@ if test "$with_dln_a_out" != yes; then
|
|
# mkmf.rb's have_header() to fail if the desired resource happens to be
|
|
# installed in the /usr/local tree.
|
|
RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)],
|
|
- [bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*], [ ],
|
|
+ [bsdi*|beos*|cygwin*|mingw*|aix*|interix*], [ ],
|
|
[
|
|
RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)])
|
|
else
|
|
@@ -2986,6 +2982,9 @@ if test "$with_dln_a_out" != yes; then
|
|
[haiku*], [
|
|
: ${LDSHARED='$(CC) -shared'}
|
|
: ${LIBPATHENV=LIBRARY_PATH}
|
|
+ if test "$rb_cv_binary_elf" = yes; then
|
|
+ LDFLAGS="$LDFLAGS -Wl,-export-dynamic"
|
|
+ fi
|
|
rb_cv_dlopen=yes ],
|
|
[nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
|
|
: ${LDSHARED='$(LD) -Bshareable -x'}
|
|
@@ -3427,7 +3426,7 @@ AS_CASE("$enable_shared", [yes], [
|
|
[sunos4*], [
|
|
LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
|
|
],
|
|
- [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu], [
|
|
+ [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu | haiku*], [
|
|
LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'" $LDFLAGS_OPTDIR"
|
|
LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
|
|
if test "$load_relative" = yes; then
|
|
@@ -3518,10 +3517,6 @@ AS_CASE("$enable_shared", [yes], [
|
|
AS_HELP_STRING([--disable-pie], [disable PIE feature]),
|
|
[pie=$enableval], [pie=])
|
|
AS_CASE(["$target_os"],
|
|
- [haiku], [
|
|
- # gcc supports PIE, but doesn't work correctly in Haiku
|
|
- pie=no
|
|
- ],
|
|
[nacl], [
|
|
# -pie implies -shared for NaCl.
|
|
pie=no
|
|
--
|
|
2.2.2
|
|
|
|
|
|
From 45aaeb83b18f4252451ea6d7f4b9aa9933acd8a6 Mon Sep 17 00:00:00 2001
|
|
From: Hamish Morrison <hamishm53@gmail.com>
|
|
Date: Tue, 2 Jun 2015 21:50:06 +0100
|
|
Subject: dln.c, file.c, io.c: remove obsolete Haiku workarounds
|
|
|
|
|
|
diff --git a/dln.c b/dln.c
|
|
index ae38a42..6676974 100644
|
|
--- a/dln.c
|
|
+++ b/dln.c
|
|
@@ -85,7 +85,7 @@ char *getenv();
|
|
# endif
|
|
#endif
|
|
|
|
-#if defined(__BEOS__) || defined(__HAIKU__)
|
|
+#if defined(__BEOS__)
|
|
# include <image.h>
|
|
#endif
|
|
|
|
@@ -1426,7 +1426,7 @@ dln_load(const char *file)
|
|
}
|
|
#endif
|
|
|
|
-#if defined(__BEOS__) || defined(__HAIKU__)
|
|
+#if defined(__BEOS__)
|
|
# define DLN_DEFINED
|
|
{
|
|
status_t err_stat; /* BeOS error status code */
|
|
@@ -1472,7 +1472,7 @@ dln_load(const char *file)
|
|
(*init_fct)();
|
|
return (void*)img_id;
|
|
}
|
|
-#endif /* __BEOS__ || __HAIKU__ */
|
|
+#endif /* __BEOS__ */
|
|
|
|
#ifndef DLN_DEFINED
|
|
dln_notimplement();
|
|
diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h
|
|
index 8beffd2..445935f 100644
|
|
--- a/ext/socket/rubysocket.h
|
|
+++ b/ext/socket/rubysocket.h
|
|
@@ -27,7 +27,7 @@
|
|
# undef HAVE_TYPE_STRUCT_SOCKADDR_DL
|
|
# endif
|
|
#else
|
|
-# if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE)
|
|
+# if defined(__BEOS__) && !defined(BONE)
|
|
# include <net/socket.h>
|
|
# else
|
|
# include <sys/socket.h>
|
|
diff --git a/file.c b/file.c
|
|
index 95de489..57b147b 100644
|
|
--- a/file.c
|
|
+++ b/file.c
|
|
@@ -114,7 +114,7 @@ int flock(int, int);
|
|
#define STAT(p, s) stat((p), (s))
|
|
#endif
|
|
|
|
-#if defined(__BEOS__) || defined(__HAIKU__) /* should not change ID if -1 */
|
|
+#if defined(__BEOS__) /* should not change ID if -1 */
|
|
static int
|
|
be_chown(const char *path, uid_t owner, gid_t group)
|
|
{
|
|
@@ -139,7 +139,7 @@ be_fchown(int fd, uid_t owner, gid_t group)
|
|
return fchown(fd, owner, group);
|
|
}
|
|
#define fchown be_fchown
|
|
-#endif /* __BEOS__ || __HAIKU__ */
|
|
+#endif /* __BEOS__ */
|
|
|
|
VALUE rb_cFile;
|
|
VALUE rb_mFileTest;
|
|
diff --git a/include/ruby/defines.h b/include/ruby/defines.h
|
|
index 7baf210..cb0e4ce 100644
|
|
--- a/include/ruby/defines.h
|
|
+++ b/include/ruby/defines.h
|
|
@@ -163,7 +163,7 @@ void xfree(void*);
|
|
#include "ruby/win32.h"
|
|
#endif
|
|
|
|
-#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE)
|
|
+#if defined(__BEOS__) && !defined(BONE)
|
|
#include <net/socket.h> /* intern.h needs fd_set definition */
|
|
#endif
|
|
|
|
diff --git a/io.c b/io.c
|
|
index 76220e6..9f0bb72 100644
|
|
--- a/io.c
|
|
+++ b/io.c
|
|
@@ -34,7 +34,7 @@
|
|
# include <sys/socket.h>
|
|
#endif
|
|
|
|
-#if defined(__BOW__) || defined(__CYGWIN__) || defined(_WIN32) || defined(__EMX__) || defined(__BEOS__) || defined(__HAIKU__)
|
|
+#if defined(__BOW__) || defined(__CYGWIN__) || defined(_WIN32) || defined(__EMX__) || defined(__BEOS__)
|
|
# define NO_SAFE_RENAME
|
|
#endif
|
|
|
|
@@ -96,7 +96,7 @@
|
|
#include <sys/uio.h>
|
|
#endif
|
|
|
|
-#if defined(__BEOS__) || defined(__HAIKU__)
|
|
+#if defined(__BEOS__)
|
|
# ifndef NOFILE
|
|
# define NOFILE (OPEN_MAX)
|
|
# endif
|
|
--
|
|
2.2.2
|
|
|
|
|
|
From caa0c926219365b338065a00390f982dfc705c04 Mon Sep 17 00:00:00 2001
|
|
From: Hamish Morrison <hamishm53@gmail.com>
|
|
Date: Tue, 2 Jun 2015 21:51:28 +0100
|
|
Subject: thread_pthread.c: add stack bounds detection for Haiku
|
|
|
|
|
|
diff --git a/thread_pthread.c b/thread_pthread.c
|
|
index 03f3166..50ac590 100644
|
|
--- a/thread_pthread.c
|
|
+++ b/thread_pthread.c
|
|
@@ -33,6 +33,9 @@
|
|
#if defined(HAVE_SYS_TIME_H)
|
|
#include <sys/time.h>
|
|
#endif
|
|
+#if defined(__HAIKU__)
|
|
+#include <kernel/OS.h>
|
|
+#endif
|
|
|
|
static void native_mutex_lock(rb_nativethread_lock_t *lock);
|
|
static void native_mutex_unlock(rb_nativethread_lock_t *lock);
|
|
@@ -497,6 +500,8 @@ size_t pthread_get_stacksize_np(pthread_t);
|
|
#define STACKADDR_AVAILABLE 1
|
|
#elif defined HAVE_PTHREAD_GETTHRDS_NP
|
|
#define STACKADDR_AVAILABLE 1
|
|
+#elif defined __HAIKU__
|
|
+#define STACKADDR_AVAILABLE 1
|
|
#elif defined __ia64 && defined _HPUX_SOURCE
|
|
#include <sys/dyntune.h>
|
|
|
|
@@ -615,6 +620,13 @@ get_stack(void **addr, size_t *size)
|
|
*addr = thinfo.__pi_stackaddr;
|
|
*size = thinfo.__pi_stacksize;
|
|
STACK_DIR_UPPER((void)0, (void)(*addr = (char *)*addr + *size));
|
|
+#elif defined __HAIKU__
|
|
+ thread_info info;
|
|
+ STACK_GROW_DIR_DETECTION;
|
|
+ CHECK_ERR(get_thread_info(find_thread(NULL), &info));
|
|
+ *addr = info.stack_base;
|
|
+ *size = (uintptr_t)info.stack_end - (uintptr_t)info.stack_base;
|
|
+ STACK_DIR_UPPER((void)0, (void)(*addr = (char *)*addr + *size));
|
|
#else
|
|
#error STACKADDR_AVAILABLE is defined but not implemented.
|
|
#endif
|
|
--
|
|
2.2.2
|
|
|
|
|
|
From cfd8799f5bf152284c66c1d7470775bb7e11d0b5 Mon Sep 17 00:00:00 2001
|
|
From: Hamish Morrison <hamishm53@gmail.com>
|
|
Date: Tue, 2 Jun 2015 21:52:34 +0100
|
|
Subject: signal.c: get stack pointer from signal context on Haiku
|
|
|
|
|
|
diff --git a/configure.in b/configure.in
|
|
index 0d56aba..6525e94 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -2710,10 +2710,24 @@ if test x"$enable_pthread" = xyes; then
|
|
fi
|
|
fi
|
|
fi
|
|
-if test x"$ac_cv_header_ucontext_h" = xyes; then
|
|
+
|
|
+if test x"$ac_cv_header_ucontext_h" = xno; then
|
|
+ AC_CACHE_CHECK([if signal.h defines ucontext_t], [rb_cv_ucontext_in_signal_h],
|
|
+ [AC_TRY_COMPILE([@%:@include <signal.h>],
|
|
+ [size_t size = sizeof(ucontext_t);],
|
|
+ [rb_cv_ucontext_in_signal_h=yes], [rb_cv_ucontext_in_signal_h=no])])
|
|
+ if test x"$rb_cv_ucontext_in_signal_h" = xyes; then
|
|
+ AC_DEFINE_UNQUOTED(UCONTEXT_IN_SIGNAL_H, 1)
|
|
+ fi
|
|
+fi
|
|
+if test x"$ac_cv_header_ucontext_h" = xyes -o x"$rb_cv_ucontext_in_signal_h" = xyes; then
|
|
AC_CACHE_CHECK([if mcontext_t is a pointer], [rb_cv_mcontext_t_ptr],
|
|
- [AC_TRY_COMPILE([@%:@include <ucontext.h>
|
|
- mcontext_t test(mcontext_t mc) {return mc+1;}
|
|
+ [AC_TRY_COMPILE([
|
|
+ @%:@include <signal.h>
|
|
+ @%:@ifdef HAVE_UCONTEXT_H
|
|
+ @%:@include <ucontext.h>
|
|
+ @%:@endif
|
|
+ mcontext_t test(mcontext_t mc) {return mc+1;}
|
|
],
|
|
[test(0);],
|
|
[rb_cv_mcontext_t_ptr=yes], [rb_cv_mcontext_t_ptr=no])])
|
|
diff --git a/signal.c b/signal.c
|
|
index 0c4b73d..75e2761 100644
|
|
--- a/signal.c
|
|
+++ b/signal.c
|
|
@@ -66,7 +66,7 @@ ruby_atomic_compare_and_swap(rb_atomic_t *ptr, rb_atomic_t cmp,
|
|
}
|
|
#endif
|
|
|
|
-#if defined(__BEOS__) || defined(__HAIKU__)
|
|
+#if defined(__BEOS__)
|
|
#undef SIGBUS
|
|
#endif
|
|
|
|
@@ -752,7 +752,9 @@ static const char *received_signal;
|
|
|
|
#if defined(USE_SIGALTSTACK) || defined(_WIN32)
|
|
NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th));
|
|
-# if !(defined(HAVE_UCONTEXT_H) && (defined __i386__ || defined __x86_64__ || defined __amd64__))
|
|
+# if defined __HAIKU__
|
|
+# define USE_UCONTEXT_REG 1
|
|
+# elif !(defined(HAVE_UCONTEXT_H) && (defined __i386__ || defined __x86_64__ || defined __amd64__))
|
|
# elif defined __linux__
|
|
# define USE_UCONTEXT_REG 1
|
|
# elif defined __APPLE__
|
|
@@ -783,6 +785,12 @@ check_stack_overflow(const uintptr_t addr, const ucontext_t *ctx)
|
|
# else
|
|
const __register_t sp = mctx->mc_esp;
|
|
# endif
|
|
+# elif defined __HAIKU__
|
|
+# if defined(__amd64__)
|
|
+ const unsigned long sp = mctx->rsp;
|
|
+# else
|
|
+ const unsigned long sp = mctx->esp;
|
|
+# endif
|
|
# endif
|
|
enum {pagesize = 4096};
|
|
const uintptr_t sp_page = (uintptr_t)sp / pagesize;
|
|
--
|
|
2.2.2
|
|
|
|
|
|
From b11be7f06ff1fc5aa2e49738cf6cd24cdb78461a Mon Sep 17 00:00:00 2001
|
|
From: Jerome Duval <jerome.duval@gmail.com>
|
|
Date: Sun, 5 Jun 2016 10:38:31 +0000
|
|
Subject: disable fstack-protector on haiku.
|
|
|
|
|
|
diff --git a/configure.in b/configure.in
|
|
index 6525e94..c14e9cf 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -845,7 +845,7 @@ if test "$GCC" = yes; then
|
|
|
|
# -fstack-protector
|
|
AS_CASE(["$target_os"],
|
|
- [mingw*|nacl], [
|
|
+ [mingw*|nacl|haiku*], [
|
|
stack_protector=no
|
|
])
|
|
if test -z "${stack_protector+set}"; then
|
|
--
|
|
2.2.2
|
|
|