PatchSet 4690 
Date: 2004/04/24 16:57:21
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Cleaning up stack size computation.

        * config/i386/beos/md.h, config/i386/bsdi/md.h,
        config/i386/dgux/md.h, config/i386/freebsd2/md.h,
        config/i386/gnu/md.h, config/i386/linux/md.h,
        config/i386/netbsd1/md.h, config/i386/nextstep3/md.h,
        config/i386/openbsd2/md.h, config/i386/oskit/md.h,
        config/i386/qnx/md.h, config/i386/sco3.2v5/md.h,
        config/i386/solaris2/md.h, config/i386/univel_svr4/md.h,
        config/sparc/bsdi3/md.h, config/sparc/linux/md.h,
        config/sparc/openbsd2/md.h, config/sparc/solaris2/md.h,
        config/sparc/sunos4/md.h, config/sparc/uxpds/md.h:
        Defined macro KAFFEMD_STACKSIZE and implemented new
        function mdGetStackSize.

        * kaffe/kaffevm/thread.c
        (initNativeThreads): If KAFFEMD_STACKSIZE is defined
        use mdGetStackSize to retrieve the real stack size.

        * kaffe/kaffevm/systems/unix-jthreads/signal.c
        (detectStackBoundaries): Removed redundant code.

        * test/internal/jit_stub.c:
        (main) If KAFFEMD_STACKSIZE is defined use
        mdGetStackSize to retrieve the real stack size.

        * FAQ/FAQ.kaffemd: New file to describe the
        different KAFFEMD_* defines.

Members: 
        ChangeLog:1.2266->1.2267 
        config/i386/beos/md.h:1.7->1.8 
        config/i386/bsdi/md.h:1.5->1.6 
        config/i386/dgux/md.h:1.4->1.5 
        config/i386/freebsd2/md.h:1.8->1.9 
        config/i386/gnu/md.h:1.5->1.6 
        config/i386/linux/md.h:1.8->1.9 
        config/i386/netbsd1/md.h:1.4->1.5 
        config/i386/nextstep3/md.h:1.5->1.6 
        config/i386/openbsd2/md.h:1.5->1.6 
        config/i386/oskit/md.h:1.6->1.7 
        config/i386/qnx/md.h:1.7->1.8 
        config/i386/sco3.2v5/md.h:1.5->1.6 
        config/i386/solaris2/md.h:1.5->1.6 
        config/i386/univel_svr4/md.h:1.7->1.8 
        config/sparc/bsdi3/md.h:1.3->1.4 
        config/sparc/linux/md.h:1.5->1.6 
        config/sparc/openbsd2/md.h:1.4->1.5 
        config/sparc/solaris2/md.h:1.3->1.4 
        config/sparc/sunos4/md.h:1.6->1.7 
        config/sparc/uxpds/md.h:1.3->1.4 
        kaffe/kaffevm/thread.c:1.63->1.64 
        kaffe/kaffevm/systems/unix-jthreads/signal.c:1.14->1.15 
        test/internal/jit_stub.c:1.5->1.6 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2266 kaffe/ChangeLog:1.2267
--- kaffe/ChangeLog:1.2266      Sat Apr 24 12:32:43 2004
+++ kaffe/ChangeLog     Sat Apr 24 16:57:21 2004
@@ -1,5 +1,34 @@
 2004-04-24  Guilhem Lavaux <[EMAIL PROTECTED]>
 
+       * config/i386/beos/md.h, config/i386/bsdi/md.h,
+       config/i386/dgux/md.h, config/i386/freebsd2/md.h,
+       config/i386/gnu/md.h, config/i386/linux/md.h,
+       config/i386/netbsd1/md.h, config/i386/nextstep3/md.h,
+       config/i386/openbsd2/md.h, config/i386/oskit/md.h,
+       config/i386/qnx/md.h, config/i386/sco3.2v5/md.h,
+       config/i386/solaris2/md.h, config/i386/univel_svr4/md.h,
+       config/sparc/bsdi3/md.h, config/sparc/linux/md.h,
+       config/sparc/openbsd2/md.h, config/sparc/solaris2/md.h,
+       config/sparc/sunos4/md.h, config/sparc/uxpds/md.h:
+       Defined macro KAFFEMD_STACKSIZE and implemented new
+       function mdGetStackSize.
+       
+       * kaffe/kaffevm/thread.c
+       (initNativeThreads): If KAFFEMD_STACKSIZE is defined
+       use mdGetStackSize to retrieve the real stack size.
+
+       * kaffe/kaffevm/systems/unix-jthreads/signal.c
+       (detectStackBoundaries): Removed redundant code.
+
+       * test/internal/jit_stub.c:
+       (main) If KAFFEMD_STACKSIZE is defined use
+       mdGetStackSize to retrieve the real stack size.
+
+       * FAQ/FAQ.kaffemd: New file to describe the
+       different KAFFEMD_* defines.
+       
+2004-04-24  Guilhem Lavaux <[EMAIL PROTECTED]>
+
        * config/powerpc/darwin/md.h: Implemented SIGNAL_ARGS,
        SIGNAL_CONTEXT_POINTER, GET_SIGNAL_CONTEXT_POINTER, STACK_POINTER.
 
Index: kaffe/config/i386/beos/md.h
diff -u kaffe/config/i386/beos/md.h:1.7 kaffe/config/i386/beos/md.h:1.8
--- kaffe/config/i386/beos/md.h:1.7     Thu Apr 22 16:28:09 2004
+++ kaffe/config/i386/beos/md.h Sat Apr 24 16:57:24 2004
@@ -18,6 +18,12 @@
 #include "i386/common.h"
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /*
  * Redefine stack pointer offset.
@@ -39,6 +45,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/i386/bsdi/md.h
diff -u kaffe/config/i386/bsdi/md.h:1.5 kaffe/config/i386/bsdi/md.h:1.6
--- kaffe/config/i386/bsdi/md.h:1.5     Thu Apr 22 16:28:09 2004
+++ kaffe/config/i386/bsdi/md.h Sat Apr 24 16:57:24 2004
@@ -19,6 +19,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 /*
  * Redefine stack pointer offset.
  */
@@ -59,6 +66,20 @@
 #undef JTHREAD_JMPBUF
 #define JTHREAD_JMPBUF            i386_jmp_buf
 
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
 
 #endif
 
Index: kaffe/config/i386/dgux/md.h
diff -u kaffe/config/i386/dgux/md.h:1.4 kaffe/config/i386/dgux/md.h:1.5
--- kaffe/config/i386/dgux/md.h:1.4     Thu Apr 22 16:28:11 2004
+++ kaffe/config/i386/dgux/md.h Sat Apr 24 16:57:25 2004
@@ -19,6 +19,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 /**/
 /* Extra exception handling information. */
 /**/
@@ -34,6 +41,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/i386/freebsd2/md.h
diff -u kaffe/config/i386/freebsd2/md.h:1.8 kaffe/config/i386/freebsd2/md.h:1.9
--- kaffe/config/i386/freebsd2/md.h:1.8 Thu Apr 22 16:28:11 2004
+++ kaffe/config/i386/freebsd2/md.h     Sat Apr 24 16:57:25 2004
@@ -19,6 +19,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 /*
  * Redefine stack pointer offset.
  */
@@ -51,6 +58,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/i386/gnu/md.h
diff -u kaffe/config/i386/gnu/md.h:1.5 kaffe/config/i386/gnu/md.h:1.6
--- kaffe/config/i386/gnu/md.h:1.5      Fri Apr 23 13:37:18 2004
+++ kaffe/config/i386/gnu/md.h  Sat Apr 24 16:57:27 2004
@@ -31,6 +31,12 @@
 #if defined(HAVE_SIGCONTEXT_H)
 #include <sigcontext.h>
 #endif
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /* newer Linux kernel actually implement SA_SIGINFO.
  * But we don't need it, so let's turn it off
@@ -61,5 +67,19 @@
 /* Linux requires a little initialisation */
 extern void init_md(void);
 #define        INIT_MD()       init_md()
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
 
 #endif
Index: kaffe/config/i386/linux/md.h
diff -u kaffe/config/i386/linux/md.h:1.8 kaffe/config/i386/linux/md.h:1.9
--- kaffe/config/i386/linux/md.h:1.8    Fri Apr 23 13:37:19 2004
+++ kaffe/config/i386/linux/md.h        Sat Apr 24 16:57:27 2004
@@ -37,6 +37,12 @@
 #if defined(HAVE_SIGCONTEXT_H)
 #include <sigcontext.h>
 #endif
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /*
  * newer Linux kernel actually implement SA_SIGINFO.
@@ -69,6 +75,20 @@
 #define GET_SIGNAL_CONTEXT_POINTER(sc) (&sc)
 #define SIGNAL_PC(scp) (scp)->eip
 #define STACK_POINTER(scp) (scp)->esp
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
Index: kaffe/config/i386/netbsd1/md.h
diff -u kaffe/config/i386/netbsd1/md.h:1.4 kaffe/config/i386/netbsd1/md.h:1.5
--- kaffe/config/i386/netbsd1/md.h:1.4  Thu Apr 22 16:28:12 2004
+++ kaffe/config/i386/netbsd1/md.h      Sat Apr 24 16:57:28 2004
@@ -19,6 +19,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 /*
  * Redefine stack pointer offset.
  */
@@ -35,4 +42,19 @@
 #include "jit-md.h"
 #endif
 
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
+
 #endif
+
Index: kaffe/config/i386/nextstep3/md.h
diff -u kaffe/config/i386/nextstep3/md.h:1.5 kaffe/config/i386/nextstep3/md.h:1.6
--- kaffe/config/i386/nextstep3/md.h:1.5        Thu Apr 22 16:28:12 2004
+++ kaffe/config/i386/nextstep3/md.h    Sat Apr 24 16:57:28 2004
@@ -19,6 +19,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 /*
  * Redefine stack pointer offset.
  */
@@ -34,6 +41,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/i386/openbsd2/md.h
diff -u kaffe/config/i386/openbsd2/md.h:1.5 kaffe/config/i386/openbsd2/md.h:1.6
--- kaffe/config/i386/openbsd2/md.h:1.5 Thu Apr 22 16:28:12 2004
+++ kaffe/config/i386/openbsd2/md.h     Sat Apr 24 16:57:29 2004
@@ -19,6 +19,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 /*
  * Redefine stack pointer offset.
  */
@@ -34,6 +41,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/i386/oskit/md.h
diff -u kaffe/config/i386/oskit/md.h:1.6 kaffe/config/i386/oskit/md.h:1.7
--- kaffe/config/i386/oskit/md.h:1.6    Thu Apr 22 16:28:12 2004
+++ kaffe/config/i386/oskit/md.h        Sat Apr 24 16:57:29 2004
@@ -18,6 +18,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 /*
  * Undefine stack pointer offset, we don't need it
  */
@@ -45,6 +52,20 @@
  */
 extern char *default_classpath;
 #define DEFAULT_CLASSPATH default_classpath
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
 
 /*
  * Main thread uses default stacksize.
Index: kaffe/config/i386/qnx/md.h
diff -u kaffe/config/i386/qnx/md.h:1.7 kaffe/config/i386/qnx/md.h:1.8
--- kaffe/config/i386/qnx/md.h:1.7      Thu Apr 22 16:28:13 2004
+++ kaffe/config/i386/qnx/md.h  Sat Apr 24 16:57:30 2004
@@ -24,8 +24,14 @@
 
 #include "i386/common.h"
 #include "i386/threads.h"
-
 #include "support.h"
+
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 /*
  * Redefine stack pointer offset.
  */
@@ -121,5 +127,20 @@
 "              subl %0,%%esp \n"
 "      " : : "r" ((call)->argsize * sizeof(jint)) : "cc");
 }
+
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
 
 #endif
Index: kaffe/config/i386/sco3.2v5/md.h
diff -u kaffe/config/i386/sco3.2v5/md.h:1.5 kaffe/config/i386/sco3.2v5/md.h:1.6
--- kaffe/config/i386/sco3.2v5/md.h:1.5 Fri Apr 23 13:37:20 2004
+++ kaffe/config/i386/sco3.2v5/md.h     Sat Apr 24 16:57:30 2004
@@ -19,6 +19,13 @@
 #include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
 #define        POSIX_SIGNALS
 
 /**/
@@ -37,6 +44,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/i386/solaris2/md.h
diff -u kaffe/config/i386/solaris2/md.h:1.5 kaffe/config/i386/solaris2/md.h:1.6
--- kaffe/config/i386/solaris2/md.h:1.5 Fri Apr 23 13:37:20 2004
+++ kaffe/config/i386/solaris2/md.h     Sat Apr 24 16:57:31 2004
@@ -24,6 +24,12 @@
 /**/
 #include <siginfo.h>
 #include <ucontext.h>
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 #define        SIGNAL_ARGS(sig, sc) int sig, siginfo_t* sip, ucontext_t* sc
 #define SIGNAL_CONTEXT_POINTER(scp) struct ucontext_t * scp
@@ -35,4 +41,18 @@
 #include "jit-md.h"
 #endif
 
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_cur);
+}
 #endif
Index: kaffe/config/i386/univel_svr4/md.h
diff -u kaffe/config/i386/univel_svr4/md.h:1.7 kaffe/config/i386/univel_svr4/md.h:1.8
--- kaffe/config/i386/univel_svr4/md.h:1.7      Fri Apr 23 13:37:21 2004
+++ kaffe/config/i386/univel_svr4/md.h  Sat Apr 24 16:57:32 2004
@@ -24,6 +24,12 @@
 /**/
 #include <siginfo.h>
 #include <ucontext.h>
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /* Function prototype for signal handlers */
 #define        SIGNAL_ARGS(sig, sc) int sig, siginfo_t* sip, ucontext_t* sc
@@ -39,5 +45,19 @@
 /* NCR MP-RAS requires a little initialisation */
 extern void init_md(void);
 #define INIT_MD()      init_md()
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
 
 #endif
Index: kaffe/config/sparc/bsdi3/md.h
diff -u kaffe/config/sparc/bsdi3/md.h:1.3 kaffe/config/sparc/bsdi3/md.h:1.4
--- kaffe/config/sparc/bsdi3/md.h:1.3   Thu Apr 22 16:28:13 2004
+++ kaffe/config/sparc/bsdi3/md.h       Sat Apr 24 16:57:32 2004
@@ -14,6 +14,12 @@
 
 #include "sparc/common.h"
 #include "sparc/threads.h"
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 #define SIGNAL_ARGS(sig, sc) int sig, int code, struct sigcontext* sc
 #define SIGNAL_CONTEXT_POINTER(scp) struct sigcontext* scp
@@ -23,6 +29,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/sparc/linux/md.h
diff -u kaffe/config/sparc/linux/md.h:1.5 kaffe/config/sparc/linux/md.h:1.6
--- kaffe/config/sparc/linux/md.h:1.5   Thu Apr 22 16:28:14 2004
+++ kaffe/config/sparc/linux/md.h       Sat Apr 24 16:57:33 2004
@@ -32,6 +32,12 @@
 #include <sigcontext.h> 
 #endif
 #include <asm/ptrace.h>
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /* Function prototype for signal handlers */
 #define        SIGNAL_ARGS(sig, sc) int sig, struct sigcontext* sc
@@ -47,5 +53,19 @@
 /* Linux requires a little initialisation */
 extern void init_md(void);
 #define        INIT_MD()       init_md()
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
+#endif
 
 #endif
Index: kaffe/config/sparc/openbsd2/md.h
diff -u kaffe/config/sparc/openbsd2/md.h:1.4 kaffe/config/sparc/openbsd2/md.h:1.5
--- kaffe/config/sparc/openbsd2/md.h:1.4        Thu Apr 22 16:28:15 2004
+++ kaffe/config/sparc/openbsd2/md.h    Sat Apr 24 16:57:33 2004
@@ -14,6 +14,12 @@
 
 #include "sparc/common.h"
 #include "sparc/threads.h"
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 #undef SP_OFFSET
 #define SP_OFFSET 2
@@ -27,6 +33,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/config/sparc/solaris2/md.h
diff -u kaffe/config/sparc/solaris2/md.h:1.3 kaffe/config/sparc/solaris2/md.h:1.4
--- kaffe/config/sparc/solaris2/md.h:1.3        Thu Apr 22 16:28:15 2004
+++ kaffe/config/sparc/solaris2/md.h    Sat Apr 24 16:57:34 2004
@@ -20,6 +20,12 @@
 /**/
 #include <siginfo.h>
 #include <ucontext.h>
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /* Function prototype for signal handlers */
 #define        SIGNAL_ARGS(sig, sc) int sig, siginfo_t* sip, ucontext_t* sc
@@ -27,6 +33,20 @@
 #define GET_SIGNAL_CONTEXT_POINTER(scp) (scp)
 #define SIGNAL_PC(scp) ((scp)->uc_mcontext.gregs[REG_PC])
 #define STACK_POINTER(scp) ((scp)->uc_mcontext.gregs[REG_SP])
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return rl.rlim_cur;
+}
+#endif
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
Index: kaffe/config/sparc/sunos4/md.h
diff -u kaffe/config/sparc/sunos4/md.h:1.6 kaffe/config/sparc/sunos4/md.h:1.7
--- kaffe/config/sparc/sunos4/md.h:1.6  Thu Apr 22 16:28:15 2004
+++ kaffe/config/sparc/sunos4/md.h      Sat Apr 24 16:57:34 2004
@@ -14,6 +14,12 @@
 
 #include "sparc/common.h"
 #include "sparc/threads.h"
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /*
  * Redefine stack pointer offset.
@@ -42,5 +48,19 @@
 extern int getpeername(int, struct sockaddr*, int*);
 extern int select(int, fd_set*, fd_set*, fd_set*, struct timeval*);
 extern int vfprintf(FILE *, char *, va_list);
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return rl.rlim_cur;
+}
+#endif
 
 #endif
Index: kaffe/config/sparc/uxpds/md.h
diff -u kaffe/config/sparc/uxpds/md.h:1.3 kaffe/config/sparc/uxpds/md.h:1.4
--- kaffe/config/sparc/uxpds/md.h:1.3   Thu Apr 22 16:28:15 2004
+++ kaffe/config/sparc/uxpds/md.h       Sat Apr 24 16:57:35 2004
@@ -20,6 +20,12 @@
 /**/
 #include <siginfo.h>
 #include <ucontext.h>
+#if defined(HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 
 /* Function prototype for signal handlers */
 #define        SIGNAL_ARGS(sig, sc) int sig, siginfo_t* sip, ucontext_t* sc
@@ -30,6 +36,20 @@
 
 #if defined(TRANSLATOR)
 #include "jit-md.h"
+#endif
+
+#if defined(HAVE_GETRLIMIT)
+#define KAFFEMD_STACKSIZE
+
+static inline size_t mdGetStackSize()
+{
+  struct rlimit rl;
+
+  if (getrlimit(RLIMIT_STACK, &rl) < 0)
+    return -1;
+  else
+    return (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : rl.rlim_max;
+}
 #endif
 
 #endif
Index: kaffe/kaffe/kaffevm/thread.c
diff -u kaffe/kaffe/kaffevm/thread.c:1.63 kaffe/kaffe/kaffevm/thread.c:1.64
--- kaffe/kaffe/kaffevm/thread.c:1.63   Thu Apr 22 16:28:16 2004
+++ kaffe/kaffe/kaffevm/thread.c        Sat Apr 24 16:57:35 2004
@@ -714,15 +714,13 @@
         * Since everything is stored in the threadData struct now, we can simply
         * attach a faked java.lang.Thread instance later on.
         */
-#if defined(HAVE_GETRLIMIT)
-       {
-               struct rlimit rl;
-               
-               if (getrlimit(RLIMIT_STACK, &rl) < 0)
-                       stackSize = MAINSTACKSIZE;
-               else
-                       stackSize = (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : 
rl.rlim_max;
-       }
+#if defined(KAFFEMD_STACKSIZE)
+       stackSize = mdGetStackSize();
+       if (stackSize < 0)
+         {
+           dprintf("WARNING: Impossible to retrieve the real stack size\n");
+           dprintf("WARNING: You may experience deadlocks\n");
+         }
 #else
        stackSize = MAINSTACKSIZE;
 #endif
Index: kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c
diff -u kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c:1.14 
kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c:1.15
--- kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c:1.14     Fri Apr 23 12:32:05 
2004
+++ kaffe/kaffe/kaffevm/systems/unix-jthreads/signal.c  Sat Apr 24 16:57:36 2004
@@ -378,13 +378,6 @@
 {
         stack_t newstack;
 
-#if defined(HAVE_GETRLIMIT)
-       struct rlimit rl;
-       
-       if (getrlimit(RLIMIT_STACK, &rl) >= 0)
-         mainThreadStackSize = (rl.rlim_max >= RLIM_INFINITY) ? rl.rlim_cur : 
rl.rlim_max;
-#endif
-
 #if defined(STACK_POINTER) && defined(SA_ONSTACK) && defined(HAVE_SIGALTSTACK)
 
        /*
Index: kaffe/test/internal/jit_stub.c
diff -u kaffe/test/internal/jit_stub.c:1.5 kaffe/test/internal/jit_stub.c:1.6
--- kaffe/test/internal/jit_stub.c:1.5  Mon Mar  8 21:21:41 2004
+++ kaffe/test/internal/jit_stub.c      Sat Apr 24 16:57:36 2004
@@ -29,6 +29,7 @@
 #include "jthread.h"
 #include "stringParsing.h"
 #include "stringSupport.h"
+#include "md.h"
 
 #include <xprof/debugFile.h>
 
@@ -147,6 +148,7 @@
                Hjava_lang_Thread mainThread;
                parsedString testName;
                char *tests;
+               int stackSize;
                
                initTypes();
                loadStaticClass(&ObjectClass, "java/lang/Object");
@@ -155,7 +157,14 @@
                loadStaticClass(&javaLangNullPointerException, 
"java/lang/NullPointerException");
                loadStaticClass(&javaLangArrayIndexOutOfBoundsException, 
"java/lang/ArrayIndexOutOfBoundsException");
                memset(&mainThread, 0, sizeof(mainThread));
-               jthread_createfirst(MAINSTACKSIZE,
+#if defined(KAFFEMD_STACKSIZE)
+               stackSize = mdGetStackSize();
+               if (stackSize < 0)
+                 stackSize = MAINSTACKSIZE;
+#else
+               stackSize = MAINSTACKSIZE;
+#endif
+               jthread_createfirst(stackSize,
                                    java_lang_Thread_NORM_PRIORITY,
                                    &mainThread);
 

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to