387 lines
12 KiB
Plaintext
387 lines
12 KiB
Plaintext
From 11a1c0125fb9bad32eef017e10f6d25e72de3b37 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 99fc7d0..bd6fa76 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -3058,15 +3058,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 47a2b978b4debb8172069f9a81aeacb2208e792a 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 6757bff75ef21ba7d0a294f3711c9ba4d8579820 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 bd6fa76..d77f4ba 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -847,7 +847,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
|
|
@@ -899,11 +899,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
|
|
@@ -1090,14 +1085,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)
|
|
@@ -2943,7 +2939,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
|
|
@@ -3061,6 +3057,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'}
|
|
@@ -3506,7 +3505,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
|
|
@@ -3597,10 +3596,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 2d79d79dafcf1e8a9301ab6b3422e61e1ff88ee9 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 f3de2c3..25ee7fe 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
|
|
|
|
@@ -1444,7 +1444,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 */
|
|
@@ -1490,7 +1490,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 84b971c..fdf9168 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 f3941fe..d977865 100644
|
|
--- a/file.c
|
|
+++ b/file.c
|
|
@@ -117,7 +117,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)
|
|
{
|
|
@@ -142,7 +142,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 eb14407..1001378 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 d2aebe7..a66f8a0 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>
|
|
|
|
@@ -618,6 +623,13 @@ get_stack(void **addr, size_t *size)
|
|
calculated by thinfo.__pi_stackend - thinfo.__pi_stackaddr. */
|
|
*size = thinfo.__pi_stackend - thinfo.__pi_stackaddr;
|
|
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 5c7a0a3b27e322f2be1ffd8c306794aadc580b8a 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 d77f4ba..4be7f38 100644
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -2785,10 +2785,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 1bbf23d..e484593 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
|
|
|