* 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.
From-SVN: r107132
+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.
/* 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.
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);
// 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 *
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;
// 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,
}
else if (! strncmp (option_string, "ss", 2))
{
- // FIXME: set thread stack size
+ _Jv_SetStackSize (option_string + 2);
}
else if (! strcmp (option_string, "X:+UseAltSigs"))
{
// 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);
void
_Jv_SetInitialHeapSize (const char *arg)
{
- size_t size = parse_heap_size (arg);
+ size_t size = parse_memory_size (arg);
_Jv_GCSetInitialHeapSize (size);
}
void
_Jv_SetMaximumHeapSize (const char *arg)
{
- size_t size = parse_heap_size (arg);
+ size_t size = parse_memory_size (arg);
_Jv_GCSetMaximumHeapSize (size);
}
-\f
+void
+_Jv_SetStackSize (const char *arg)
+{
+ size_t size = parse_memory_size (arg);
+ gcj::stack_size = size;
+}
void *
_Jv_Malloc (jsize size)