[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]