From 11a1c0125fb9bad32eef017e10f6d25e72de3b37 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV 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 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 #ifndef _WIN32 #include -#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE) +#if defined(__BEOS__) && !defined(BONE) # include #else # include -- 2.2.2 From 6757bff75ef21ba7d0a294f3711c9ba4d8579820 Mon Sep 17 00:00:00 2001 From: Hamish Morrison 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 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 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 #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 # else # include 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 /* 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 #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 #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 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 #endif +#if defined(__HAIKU__) +#include +#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 @@ -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 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 ], + [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 - mcontext_t test(mcontext_t mc) {return mc+1;} + [AC_TRY_COMPILE([ + @%:@include + @%:@ifdef HAVE_UCONTEXT_H + @%:@include + @%:@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 From 14340bc30f4f05a7e72d0eb394e90236928407f2 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Sun, 5 Jun 2016 10:38:31 +0000 Subject: disable fstack-protector on haiku. diff --git a/configure.in b/configure.in index 4be7f38..87449b8 100644 --- a/configure.in +++ b/configure.in @@ -847,7 +847,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