ruby-changes:40642
From: nobu <ko1@a...>
Date: Mon, 23 Nov 2015 12:54:54 +0900 (JST)
Subject: [ruby-changes:40642] nobu:r52721 (trunk): Haiku now best effort support
nobu 2015-11-23 12:54:42 +0900 (Mon, 23 Nov 2015) New Revision: 52721 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=52721 Log: Haiku now best effort support * configure.in: remove obsolete workarounds for Haiku. * dln.c, file.c, io.c: remove obsolete Haiku workarounds. * thread_pthread.c: add stack bounds detection for Haiku. * signal.c: get stack pointer from signal context on Haiku. [ruby-core:67923] [Bug #10811] [Fix GH-1109] Modified files: trunk/ChangeLog trunk/NEWS trunk/configure.in trunk/dln.c trunk/ext/socket/rubysocket.h trunk/file.c trunk/include/ruby/defines.h trunk/io.c trunk/signal.c trunk/thread_pthread.c Index: include/ruby/defines.h =================================================================== --- include/ruby/defines.h (revision 52720) +++ include/ruby/defines.h (revision 52721) @@ -168,7 +168,7 @@ void xfree(void*); https://github.com/ruby/ruby/blob/trunk/include/ruby/defines.h#L168 #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 Index: configure.in =================================================================== --- configure.in (revision 52720) +++ configure.in (revision 52721) @@ -871,7 +871,7 @@ if test "$GCC" = yes; then https://github.com/ruby/ruby/blob/trunk/configure.in#L871 # -fstack-protector AS_CASE(["$target_os"], - [mingw*|nacl|haiku], [ + [mingw*|nacl], [ stack_protector=no ]) if test -z "${stack_protector+set}"; then @@ -896,11 +896,6 @@ if test "$GCC" = yes; then https://github.com/ruby/ruby/blob/trunk/configure.in#L896 [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 @@ -1137,14 +1132,15 @@ main() https://github.com/ruby/ruby/blob/trunk/configure.in#L1132 fi fi ], -[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) @@ -2901,10 +2897,24 @@ if test x"$enable_pthread" = xyes; then https://github.com/ruby/ruby/blob/trunk/configure.in#L2897 AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), pthread_set_name_np(pthread_self(), name)) 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])]) @@ -3055,7 +3065,7 @@ if test "$with_dln_a_out" != yes; then https://github.com/ruby/ruby/blob/trunk/configure.in#L3065 # 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 @@ -3616,7 +3626,7 @@ AS_CASE("$enable_shared", [yes], [ https://github.com/ruby/ruby/blob/trunk/configure.in#L3626 [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 @@ -3708,10 +3718,6 @@ AS_CASE("$enable_shared", [yes], [ https://github.com/ruby/ruby/blob/trunk/configure.in#L3718 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 Index: ChangeLog =================================================================== --- ChangeLog (revision 52720) +++ ChangeLog (revision 52721) @@ -1,3 +1,14 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Mon Nov 23 12:54:39 2015 Hamish Morrison <hamishm53@g...> + + * configure.in: remove obsolete workarounds for Haiku. + + * dln.c, file.c, io.c: remove obsolete Haiku workarounds. + + * thread_pthread.c: add stack bounds detection for Haiku. + + * signal.c: get stack pointer from signal context on Haiku. + [ruby-core:67923] [Bug #10811] [Fix GH-1109] + Mon Nov 23 11:44:11 2015 SHIBATA Hiroshi <hsbt@r...> * gems/bundled_gems: bump version to minitest-5.8.3 Index: thread_pthread.c =================================================================== --- thread_pthread.c (revision 52720) +++ thread_pthread.c (revision 52721) @@ -33,6 +33,9 @@ https://github.com/ruby/ruby/blob/trunk/thread_pthread.c#L33 #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_ https://github.com/ruby/ruby/blob/trunk/thread_pthread.c#L500 #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) https://github.com/ruby/ruby/blob/trunk/thread_pthread.c#L620 *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 Index: io.c =================================================================== --- io.c (revision 52720) +++ io.c (revision 52721) @@ -35,7 +35,7 @@ https://github.com/ruby/ruby/blob/trunk/io.c#L35 # include <sys/socket.h> #endif -#if defined(__BOW__) || defined(__CYGWIN__) || defined(_WIN32) || defined(__BEOS__) || defined(__HAIKU__) +#if defined(__BOW__) || defined(__CYGWIN__) || defined(_WIN32) || defined(__BEOS__) # define NO_SAFE_RENAME #endif @@ -100,7 +100,7 @@ https://github.com/ruby/ruby/blob/trunk/io.c#L100 # include <sys/wait.h> /* for WNOHANG on BSD */ #endif -#if defined(__BEOS__) || defined(__HAIKU__) +#if defined(__BEOS__) # ifndef NOFILE # define NOFILE (OPEN_MAX) # endif Index: dln.c =================================================================== --- dln.c (revision 52720) +++ dln.c (revision 52721) @@ -85,7 +85,7 @@ char *getenv(); https://github.com/ruby/ruby/blob/trunk/dln.c#L85 # endif #endif -#if defined(__BEOS__) || defined(__HAIKU__) +#if defined(__BEOS__) # include <image.h> #endif @@ -1442,7 +1442,7 @@ dln_load(const char *file) https://github.com/ruby/ruby/blob/trunk/dln.c#L1442 } #endif -#if defined(__BEOS__) || defined(__HAIKU__) +#if defined(__BEOS__) # define DLN_DEFINED { status_t err_stat; /* BeOS error status code */ @@ -1488,7 +1488,7 @@ dln_load(const char *file) https://github.com/ruby/ruby/blob/trunk/dln.c#L1488 (*init_fct)(); return (void*)img_id; } -#endif /* __BEOS__ || __HAIKU__ */ +#endif /* __BEOS__ */ #ifndef DLN_DEFINED dln_notimplement(); Index: ext/socket/rubysocket.h =================================================================== --- ext/socket/rubysocket.h (revision 52720) +++ ext/socket/rubysocket.h (revision 52721) @@ -27,7 +27,7 @@ https://github.com/ruby/ruby/blob/trunk/ext/socket/rubysocket.h#L27 # 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> Index: NEWS =================================================================== --- NEWS (revision 52720) +++ NEWS (revision 52721) @@ -239,5 +239,9 @@ with all sufficient information, see the https://github.com/ruby/ruby/blob/trunk/NEWS#L239 === Build system updates === Implementation changes + * OS/2 is no longer supported + * Borland-C is no longer supported + +* Haiku now stable and best effort Index: signal.c =================================================================== --- signal.c (revision 52720) +++ signal.c (revision 52721) @@ -69,7 +69,7 @@ ruby_atomic_compare_and_swap(rb_atomic_t https://github.com/ruby/ruby/blob/trunk/signal.c#L69 } #endif -#if defined(__BEOS__) || defined(__HAIKU__) +#if defined(__BEOS__) #undef SIGBUS #endif @@ -759,7 +759,9 @@ static const char *received_signal; https://github.com/ruby/ruby/blob/trunk/signal.c#L759 #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__ @@ -790,6 +792,12 @@ check_stack_overflow(const uintptr_t add https://github.com/ruby/ruby/blob/trunk/signal.c#L792 # 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; Index: file.c =================================================================== --- file.c (revision 52720) +++ file.c (revision 52721) @@ -120,7 +120,7 @@ int flock(int, int); https://github.com/ruby/ruby/blob/trunk/file.c#L120 #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) { @@ -145,7 +145,7 @@ be_fchown(int fd, uid_t owner, gid_t gro https://github.com/ruby/ruby/blob/trunk/file.c#L145 return fchown(fd, owner, group); } #define fchown be_fchown -#endif /* __BEOS__ || __HAIKU__ */ +#endif /* __BEOS__ */ VALUE rb_cFile; VALUE rb_mFileTest; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/