diff options
author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-17 20:25:57 +0000 |
---|---|---|
committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-17 20:25:57 +0000 |
commit | 1bc39a9bde3aae23c62166be8b641e79e5843d58 (patch) | |
tree | 5e88137f0a78a8faff6c52f9de564f61a19bcecd /libjava | |
parent | 069fa9335fb98c207811e6968223d8475f92909e (diff) | |
download | ppe42-gcc-1bc39a9bde3aae23c62166be8b641e79e5843d58.tar.gz ppe42-gcc-1bc39a9bde3aae23c62166be8b641e79e5843d58.zip |
Implement -Xss.
* include/jvm.h (gcj::stack_size): Declare.
(_Jv_StackSize): Declare.
* posix-threads.cc (_Jv_InitThreads): Validate gcj::stack_size.
(_Jv_ThreadStart): Set stack size if specified.
* prims.cc (gcj::stack_size): Define.
(parse_memory_size): Renamed from parse_heap_size.
(_Jv_SetStackSize): Parse stack size argument and set
gcj::stack_size.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107132 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 12 | ||||
-rw-r--r-- | libjava/include/jvm.h | 7 | ||||
-rw-r--r-- | libjava/posix-threads.cc | 21 | ||||
-rw-r--r-- | libjava/prims.cc | 18 |
4 files changed, 53 insertions, 5 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index f6e0c24465b..31962c62a2b 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,15 @@ +2005-11-17 Bryce McKinlay <mckinlay@redhat.com> + + Implement -Xss. + * include/jvm.h (gcj::stack_size): Declare. + (_Jv_StackSize): Declare. + * posix-threads.cc (_Jv_InitThreads): Validate gcj::stack_size. + (_Jv_ThreadStart): Set stack size if specified. + * prims.cc (gcj::stack_size): Define. + (parse_memory_size): Renamed from parse_heap_size. + (_Jv_SetStackSize): Parse stack size argument and set + gcj::stack_size. + 2005-11-17 Mark Wielaard <mark@klomp.org> * java/text/SimpleDateFormat.java: Removed, fully merged now. diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h index 6061300a74d..fc104d695f8 100644 --- a/libjava/include/jvm.h +++ b/libjava/include/jvm.h @@ -233,6 +233,9 @@ namespace gcj /* When true, enable the bytecode verifier and BC-ABI verification. */ extern bool verifyClasses; + + /* Thread stack size specified by the -Xss runtime argument. */ + extern size_t stack_size; } // This class handles all aspects of class preparation and linking. @@ -363,6 +366,10 @@ void _Jv_SetMaximumHeapSize (const char *arg); during thread deregistration. */ void _Jv_FreeMethodCache (); +/* Set the stack size for threads. Parses ARG, a number which can + optionally have "k" or "m" appended. */ +void _Jv_SetStackSize (const char *arg); + extern "C" void JvRunMain (jclass klass, int argc, const char **argv); void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, bool is_jar); diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc index f77e2f4b75a..a596c77e131 100644 --- a/libjava/posix-threads.cc +++ b/libjava/posix-threads.cc @@ -311,6 +311,19 @@ _Jv_InitThreads (void) // Block SIGCHLD here to ensure that any non-Java threads inherit the new // signal mask. block_sigchld(); + + // Check/set the thread stack size. + size_t min_ss = 32 * 1024; + + if (sizeof (void *) == 8) + // Bigger default on 64-bit systems. + min_ss *= 2; + + if (min_ss < PTHREAD_STACK_MIN) + min_ss = PTHREAD_STACK_MIN; + + if (gcj::stack_size > 0 && gcj::stack_size < min_ss) + gcj::stack_size = min_ss; } _Jv_Thread_t * @@ -430,6 +443,14 @@ _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, pthread_attr_init (&attr); pthread_attr_setschedparam (&attr, ¶m); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + + // Set stack size if -Xss option was given. + if (gcj::stack_size > 0) + { + int e = pthread_attr_setstacksize (&attr, gcj::stack_size); + if (e != 0) + JvFail (strerror (e)); + } info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter)); info->method = meth; diff --git a/libjava/prims.cc b/libjava/prims.cc index ba5c9efd260..490d2b1c127 100644 --- a/libjava/prims.cc +++ b/libjava/prims.cc @@ -959,6 +959,9 @@ namespace gcj // When true, enable the bytecode verifier and BC-ABI type verification. bool verifyClasses = true; + + // Thread stack size specified by the -Xss runtime argument. + size_t stack_size = 0; } // We accept all non-standard options accepted by Sun's java command, @@ -1045,7 +1048,7 @@ parse_x_arg (char* option_string) } else if (! strncmp (option_string, "ss", 2)) { - // FIXME: set thread stack size + _Jv_SetStackSize (option_string + 2); } else if (! strcmp (option_string, "X:+UseAltSigs")) { @@ -1407,7 +1410,7 @@ JvRunMain (jclass klass, int argc, const char **argv) // Parse a string and return a heap size. static size_t -parse_heap_size (const char *spec) +parse_memory_size (const char *spec) { char *end; unsigned long val = strtoul (spec, &end, 10); @@ -1423,7 +1426,7 @@ parse_heap_size (const char *spec) void _Jv_SetInitialHeapSize (const char *arg) { - size_t size = parse_heap_size (arg); + size_t size = parse_memory_size (arg); _Jv_GCSetInitialHeapSize (size); } @@ -1432,11 +1435,16 @@ _Jv_SetInitialHeapSize (const char *arg) void _Jv_SetMaximumHeapSize (const char *arg) { - size_t size = parse_heap_size (arg); + size_t size = parse_memory_size (arg); _Jv_GCSetMaximumHeapSize (size); } - +void +_Jv_SetStackSize (const char *arg) +{ + size_t size = parse_memory_size (arg); + gcj::stack_size = size; +} void * _Jv_Malloc (jsize size) |