You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by wj...@apache.org on 2007/06/10 04:56:02 UTC
svn commit: r545832 - in /harmony/enhanced/drlvm/trunk/vm: include/open/
thread/src/ thread/src/linux/ thread/src/win/ vmcore/include/
vmcore/src/class_support/ vmcore/src/init/ vmcore/src/thread/
vmcore/src/util/linux/ vmcore/src/util/win/ia32_em64t/
Author: wjwashburn
Date: Sat Jun 9 19:56:01 2007
New Revision: 545832
URL: http://svn.apache.org/viewvc?view=rev&rev=545832
Log:
Harmony-4001, this patch provides the ability to set the size of a thread's
stack
"build test2" has been known to pass on most platforms
Modified:
harmony/enhanced/drlvm/trunk/vm/include/open/hythread_ext.h
harmony/enhanced/drlvm/trunk/vm/include/open/vm.h
harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.def
harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.exp
harmony/enhanced/drlvm/trunk/vm/thread/src/linux/os_thread.c
harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c
harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_basic.c
harmony/enhanced/drlvm/trunk/vm/thread/src/thread_private.h
harmony/enhanced/drlvm/trunk/vm/thread/src/win/os_thread.c
harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h
harmony/enhanced/drlvm/trunk/vm/vmcore/include/properties.h
harmony/enhanced/drlvm/trunk/vm/vmcore/include/vm_threads.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/harmony.properties
harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp
Modified: harmony/enhanced/drlvm/trunk/vm/include/open/hythread_ext.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/open/hythread_ext.h?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/open/hythread_ext.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/open/hythread_ext.h Sat Jun 9 19:56:01 2007
@@ -206,6 +206,7 @@
UDATA VMCALL hythread_tls_get_offset(hythread_tls_key_t key);
UDATA VMCALL hythread_tls_get_request_offset();
UDATA VMCALL hythread_get_thread_times(hythread_t thread, int64* pkernel, int64* puser);
+UDATA hythread_get_thread_stacksize(hythread_t thread);
UDATA VMCALL hythread_uses_fast_tls(void);
IDATA VMCALL hythread_get_hythread_offset_in_tls(void);
@@ -308,6 +309,9 @@
void VMCALL hythread_native_resource_is_live(U_32);
void VMCALL hythread_reclaim_resources();
+
+IDATA VMCALL hythread_monitor_interrupt_wait(hythread_monitor_t mon_ptr,
+ hythread_t thread);
IDATA VMCALL hythread_monitor_interrupt_wait(hythread_monitor_t mon_ptr,
hythread_t thread);
Modified: harmony/enhanced/drlvm/trunk/vm/include/open/vm.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/open/vm.h?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/open/vm.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/open/vm.h Sat Jun 9 19:56:01 2007
@@ -23,7 +23,11 @@
#ifndef _VM_EXPORT_H
#define _VM_EXPORT_H
-
+#ifdef WIN32
+#include <stddef.h>
+#else
+#include <unistd.h>
+#endif
@@ -1084,6 +1088,13 @@
* returns <code>default_value</code>.
*/
VMEXPORT int get_int_property(const char *property_name, int default_value, PropertyTable table_number);
+
+/**
+ * Tries to interpret property value as <code>int</code> and returns it. In case of failure
+ * returns <code>default_value</code>.
+ */
+VMEXPORT size_t get_size_property(const char *property_name, size_t default_value, PropertyTable table_number);
+
//Tries to interpret property value as int and returns it. In case of failure returns default_value.
// Numbers can include 'm' or 'M' for megabytes, 'k' or 'K' for kilobytes, and 'g' or 'G' for gigabytes (for example, 32k is the same as 32768).
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.def
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.def?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.def (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.def Sat Jun 9 19:56:01 2007
@@ -52,6 +52,7 @@
hythread_get_id
hythread_get_thread
hythread_get_thread_times
+hythread_get_thread_stacksize
hythread_struct_init
hythread_cancel_all
hythread_group_create
@@ -88,6 +89,9 @@
hythread_thin_monitor_get_owner
hythread_native_resource_is_live
hythread_reclaim_resources
+
+
+
hysem_post
hysem_wait
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.exp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.exp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.exp (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/hythr.exp Sat Jun 9 19:56:01 2007
@@ -35,6 +35,7 @@
hythread_resume;
hythread_monitor_notify;
hythread_get_priority;
+hythread_get_thread_stacksize;
hythread_tls_get;
hythread_tls_get_request_offset;
hythread_get_hythread_offset_in_tls;
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/linux/os_thread.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/linux/os_thread.c?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/linux/os_thread.c (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/linux/os_thread.c Sat Jun 9 19:56:01 2007
@@ -223,3 +223,21 @@
*puser = tp.tv_sec * 1000000000ULL + tp.tv_nsec;
return 0;
}
+
+UDATA os_get_foreign_thread_stack_size() {
+ int err;
+ void* stack_addr;
+ pthread_attr_t pthread_attr;
+ size_t stack_size;
+
+ static UDATA common_stack_size = -1;
+
+ if (common_stack_size == -1) {
+ pthread_attr_init(&pthread_attr);
+ err = pthread_attr_getstacksize(&pthread_attr, &common_stack_size);
+ pthread_attr_destroy(&pthread_attr);
+ }
+
+ return common_stack_size;
+
+}
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c Sat Jun 9 19:56:01 2007
@@ -24,6 +24,7 @@
#include <open/hythread_ext.h>
#include <apr_atomic.h>
#include "open/thread_externals.h"
+#include "open/vm.h"
#undef LOG_DOMAIN
#define LOG_DOMAIN "tm.java"
@@ -32,6 +33,7 @@
#include "jni.h"
+
void stop_callback(void);
jmethodID getRunMethod(JNIEnv *env, jthread java_thread);
IDATA increase_nondaemon_threads_count(hythread_t self);
@@ -132,6 +134,7 @@
hythread_t tm_native_thread = NULL;
jvmti_thread_t tm_java_thread;
void *vm_thread_dummies;
+ static int default_stacksize = -1;
wrapper_proc_data * data;
IDATA status;
@@ -170,6 +173,13 @@
return TM_ERROR_OUT_OF_MEMORY;
}
+ if (default_stacksize == -1) {
+ int ss = get_size_property("thread.stacksize", 0, VM_PROPERTIES);
+ default_stacksize = ss ? ss : HY_DEFAULT_STACKSIZE;
+ }
+
+
+
// prepare args for wrapper_proc
data->daemon = attrs->daemon;
data->tiEnv = attrs->jvmti_env;
@@ -177,7 +187,7 @@
data->tiProcArgs = (void *)arg;
data->vm_thread_dummies = vm_thread_dummies;
- status = hythread_create(&tm_native_thread, (attrs->stacksize)?attrs->stacksize:1024000,
+ status = hythread_create(&tm_native_thread, (attrs->stacksize)?attrs->stacksize:default_stacksize,
attrs->priority, 0, wrapper_proc, data);
TRACE(("TM: Created thread: id=%d", tm_native_thread->thread_id));
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_basic.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_basic.c?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_basic.c (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_basic.c Sat Jun 9 19:56:01 2007
@@ -114,6 +114,7 @@
new_thread->library = hythread_self()->library;
new_thread->priority = priority ? priority : HYTHREAD_PRIORITY_NORMAL;
+ new_thread->stacksize = stacksize ? stacksize : HY_DEFAULT_STACKSIZE;
//new_thread->suspend_request = suspend ? 1 : 0;
start_proc_data =
@@ -132,7 +133,7 @@
// we need to make sure thread will not register itself with a thread group
// until os_thread_create returned and initialized thread->os_handle properly
hythread_global_lock();
- r = os_thread_create(&new_thread->os_handle, stacksize,
+ r = os_thread_create(&new_thread->os_handle, new_thread->stacksize,
priority, thread_start_proc, (void *)start_proc_data);
assert(/* error */ r || new_thread->os_handle /* or thread created ok */);
hythread_global_unlock();
@@ -625,6 +626,8 @@
ptr->os_handle = (osthread_t)NULL;
ptr->priority = HYTHREAD_PRIORITY_NORMAL;
+ ptr->stacksize = os_get_foreign_thread_stack_size();
+ ptr->name = strdup("NONAME");
// not implemented
//ptr->big_thread_local_storage = (void **)calloc(1, sizeof(void*)*tm_tls_capacity);
@@ -751,4 +754,9 @@
*/
UDATA hythread_get_thread_times(hythread_t thread, int64* pkernel, int64* puser) {
return os_get_thread_times(thread->os_handle, pkernel, puser);
+}
+
+
+UDATA hythread_get_thread_stacksize(hythread_t thread) {
+ return thread->stacksize;
}
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/thread_private.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/thread_private.h?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/thread_private.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/thread_private.h Sat Jun 9 19:56:01 2007
@@ -55,6 +55,9 @@
#define INITIAL_FAT_TABLE_ENTRIES 16*1024 //make this table exapandible if workloads show it is necessary
+#define HY_DEFAULT_STACKSIZE 512 * 1024 // if default stack size is not through -Xss parameter, it is 256kb
+
+
#if !defined (_IPF_)
//use lock reservation
#define LOCK_RESERVATION
@@ -285,6 +288,12 @@
*/
IDATA priority;
+ /**
+ * Size of thread's stack, set on creation
+ */
+
+ UDATA stacksize;
+
// Monitors
/**
@@ -671,6 +680,7 @@
int os_get_thread_times(osthread_t os_thread, int64* pkernel, int64* puser);
int os_cond_timedwait(hycond_t *cond, hymutex_t *mutex, I_64 ms, IDATA nano);
+UDATA os_get_foreign_thread_stack_size();
#ifdef __cplusplus
}
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/win/os_thread.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/win/os_thread.c?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/win/os_thread.c (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/win/os_thread.c Sat Jun 9 19:56:01 2007
@@ -16,7 +16,7 @@
*/
#include <apr_atomic.h>
-
+#
#include "thread_private.h"
/**
@@ -34,7 +34,8 @@
int os_thread_create(/* out */osthread_t* phandle, UDATA stacksize, UDATA priority,
int (VMAPICALL *func)(void*), void *data)
{
- HANDLE handle = (HANDLE)_beginthreadex(NULL, stacksize, (unsigned(__stdcall *)(void*))func, data, 0, NULL);
+ HANDLE handle = (HANDLE)_beginthreadex(NULL, stacksize, (unsigned(__stdcall *)(void*))func, data, STACK_SIZE_PARAM_IS_A_RESERVATION, NULL);
+
if (handle) {
*phandle = handle;
if (priority)
@@ -186,4 +187,18 @@
return 0;
} else
return GetLastError();
+}
+
+UDATA os_get_foreign_thread_stack_size() {
+ void* stack_addr;
+ size_t stack_size;
+ size_t reg_size;
+ MEMORY_BASIC_INFORMATION memory_information;
+
+ VirtualQuery(&memory_information, &memory_information, sizeof(memory_information));
+ reg_size = memory_information.RegionSize;
+ stack_addr = ((char*) memory_information.BaseAddress) + reg_size;
+ stack_size = ((char*) stack_addr) - ((char*) memory_information.AllocationBase);
+
+ return (UDATA)stack_size;
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/exceptions.h Sat Jun 9 19:56:01 2007
@@ -273,6 +273,9 @@
void set_guard_stack();
#endif
void init_stack_info();
+#ifndef WIN32
+void remove_guard_stack();
+#endif
VMEXPORT size_t get_available_stack_size();
#ifndef _EM64T_
VMEXPORT bool check_available_stack_size(size_t required_size);
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/properties.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/properties.h?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/properties.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/properties.h Sat Jun 9 19:56:01 2007
@@ -45,4 +45,6 @@
apr_thread_rwlock_t* rwlock_array;
};
+
#endif // _VM_PROPERTIES_H
+
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/vm_threads.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/vm_threads.h?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/vm_threads.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/vm_threads.h Sat Jun 9 19:56:01 2007
@@ -112,6 +112,9 @@
// thread stack address
void* stack_addr;
+ // thread stack size
+ unsigned int stack_size;
+
// Should JVMTI code be notified about exception in p_exception_object
bool ti_exception_callback_pending;
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp Sat Jun 9 19:56:01 2007
@@ -2884,6 +2884,37 @@
return return_value;
}
+size_t get_size_property(const char *property_name, size_t default_value, PropertyTable table_number)
+{
+ char* size_string;
+ size_t size;
+ int sizeModifier;
+ size_t unit = 1;
+
+ size_string = get_property(property_name, table_number);
+
+ if (size_string == NULL) {
+ return default_value;
+ }
+
+ size = atol(size_string);
+ sizeModifier = tolower(size_string[strlen(size_string) - 1]);
+ destroy_property_value(size_string);
+
+ switch (sizeModifier) {
+ case 'k': unit = 1024; break;
+ case 'm': unit = 1024 * 1024; break;
+ case 'g': unit = 1024 * 1024 * 1024;break;
+ }
+
+ size_t res = size * unit;
+ if (res / unit != size) {
+ /* overflow happened */
+ return 0;
+ }
+ return res;
+}
+
static Annotation* lookup_annotation(AnnotationTable* table, Class* owner, Class* antn_type) {
for (int i = table->length - 1; i >= 0; --i) {
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/harmony.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/harmony.properties?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/harmony.properties (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/harmony.properties Sat Jun 9 19:56:01 2007
@@ -37,7 +37,7 @@
ECHO019=WARNING: max heap size is too large, reduced to {0} Mb
ECHO020=WARNING: min heap size reduced to {0} Mb
ECHO021=Usage: {0} [-options] class [args...]\n (to execute a method main() of the class)\n or {0} [-options] -jar jarfile [args...]\n (to execute the jar file)\n\nwhere options include:\n -classpath <class search path of directories and zip/jar files>\n -cp <class search path of directories and zip/jar files>\n A '{1}' separated list of directories, jar archives,\n and zip archives to search for class file\n -D<name>=<value>\n set a system property\n -showversion print product version and continue\n -version print product version and exit\n -verbose[:class|:gc|:jni]\n enable verbose output\n -agentlib:<library name>[=<agent options>]\n load JVMTI agent library, library name is platform independent\n -agentpath:<library name>[=<agent options]\n load JVMTI agent library, library name is platform dependent\n -verify\n
do full bytecode verification\n -noverify\n do no bytecode verification\n -enableassertions[:<package>...|:<class>]\n -ea[:<package>...|:<class>]\n enable assertions\n -disableassertions[:<package>...|:<class>]\n -da[:<package>...|:<class>]\n disable assertions\n -esa | -enablesystemassertions\n enable system assertions\n -dsa | -disablesystemassertions\n disable system assertions\n -? -help print this help message\n -help properties\n help on system properties\n -X print help on non-standard options
-ECHO022=\ -Xbootclasspath:<PATH>\n Set bootclasspath to the specified value\n -Xbootclasspath/a:<PATH>\n Append specified directories and files to bootclasspath\n -Xbootclasspath/p:<PATH>\n Prepend specified directories and files to bootclasspath\n -Xjit <JIT options>\n Specify JIT specific options\n -Xms<size>\n Set Java heap size\n -Xmx<size>\n Set maximum Java heap size\n -Xdebug\n Does nothing, this is a compatibility option\n -Xnoagent\n Does nothing, this is a compatibility option\n -Xrun\n Specify debugger agent library\n -Xverbose[:<category>[:<file>]\n Switch logging on [for specified category only\n [and log that category to a file]]\n -Xwarn[:<category>[:<file>]\n Switch verbose logging off [for specified category only\n [and log that category to a file]]\n -Xver
boseconf:<file>\n Set up logging via log4cxx configuration file\n -Xverboselog:<file>\n Log verbose output to a file\n -Xverify[:none|all]\n Do full bytecode verification\n -Xinvisible\n Retain invisible annotations at runtime\n -Xfileline\n Add source information to logging messages\n -Xthread\n Add thread id to logging messages\n -Xcategory\n Add category name to logging messages\n -Xtimestamp\n Add timestamp to logging messages\n -Xfunction\n Add function signature to logging messages
+ECHO022=\ -Xbootclasspath:<PATH>\n Set bootclasspath to the specified value\n -Xbootclasspath/a:<PATH>\n Append specified directories and files to bootclasspath\n -Xbootclasspath/p:<PATH>\n Prepend specified directories and files to bootclasspath\n -Xjit <JIT options>\n Specify JIT specific options\n -Xms<size>\n Set Java heap size\n -Xmx<size>\n Set maximum Java heap size\n -Xss<size>\n Set initial stack size\n -Xdebug\n Does nothing, this is a compatibility option\n -Xnoagent\n Does nothing, this is a compatibility option\n -Xrun\n Specify debugger agent library\n -Xverbose[:<category>[:<file>]\n Switch logging on [for specified category only\n [and log that category to a file]]\n -Xwarn[:<category>[:<file>]\n Switch verbose logging off [for specified category only\n
[and log that category to a file]]\n -Xverboseconf:<file>\n Set up logging via log4cxx configuration file\n -Xverboselog:<file>\n Log verbose output to a file\n -Xverify[:none|all]\n Do full bytecode verification\n -Xinvisible\n Retain invisible annotations at runtime\n -Xfileline\n Add source information to logging messages\n -Xthread\n Add thread id to logging messages\n -Xcategory\n Add category name to logging messages\n -Xtimestamp\n Add timestamp to logging messages\n -Xfunction\n Add function signature to logging messages
ECHO023=\ -Xlog[:<category>[:<file>]\n Switch debug logging on [for specified category only\n [and log that category to a file]]\n -Xtrace[:<category>[:<file>]\n Switch trace logging on [for specified category only\n [and log that category to a file]]
ECHO024=\ -Xstats:<mask>\n Generates different statistics
ECHO025=\ -Xint\n Use interpreter to execute the program\n -Xgc:<gc options>\n Specify gc specific options\n -Xem:<em options>\n Specify em specific options\n -Xdumpstubs\n Writes stubs generated by LIL to disk\n -Xparallel_jit\n Launch compilation in parallel (default)\n -Xno_parallel_jit\n Do not launch compilation in parallel\n -Xdumpfile:<file>\n Specifies a file name for the dump\n -XX:<name>=<value>\n set an internal system property
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp Sat Jun 9 19:56:01 2007
@@ -441,7 +441,14 @@
LECHO(34, "Negative or invalid heap size. Default value will be used!");
}
p_env->VmProperties()->set("gc.mx", arg);
- }
+ } else if (begins_with(option, "-Xss")) {
+ const char* arg = option + 4;
+ TRACE2("init", "thread.stacksize = " << arg);
+ if (atoi(arg) == 0) {
+ LECHO(34, "Negative or invalid stack size. Default value will be used!");
+ }
+ p_env->VmProperties()->set("thread.stacksize", arg);
+ }
else if (begins_with(option, "-agentlib:")) {
p_env->TI->addAgent(option);
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp Sat Jun 9 19:56:01 2007
@@ -291,6 +291,12 @@
// Notify GC about thread detaching.
gc_thread_kill(&p_vm_thread->_gc_private_information);
assert(p_vm_thread->gc_frames == 0);
+
+#ifdef PLATFORM_POSIX
+ // Remove guard page on the stack on linux
+ remove_guard_stack();
+#endif
+
// Remove current VM_thread from TLS.
set_TLS_data(NULL);
// Destroy current VM_thread structure.
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp Sat Jun 9 19:56:01 2007
@@ -197,9 +197,11 @@
err = pthread_attr_getstack(&pthread_attr, &stack_addr, &stack_size);
assert(!err);
pthread_attr_destroy(&pthread_attr);
+
return (void *)((unsigned char *)stack_addr + stack_size);
}
+#if 0
inline size_t find_stack_size() {
int err;
size_t stack_size;
@@ -210,6 +212,7 @@
pthread_attr_destroy(&pthread_attr);
return stack_size;
}
+#endif
inline size_t find_guard_stack_size() {
return 64*1024;
@@ -226,7 +229,6 @@
return guard_size;
}
-static size_t common_stack_size;
static size_t common_guard_stack_size;
static size_t common_guard_page_size;
@@ -235,7 +237,7 @@
}
inline size_t get_stack_size() {
- return common_stack_size;
+ return p_TLS_vmthread->stack_size;
}
inline size_t get_guard_stack_size() {
@@ -250,7 +252,7 @@
void init_stack_info() {
p_TLS_vmthread->stack_addr = find_stack_addr();
- common_stack_size = find_stack_size();
+ p_TLS_vmthread->stack_size = hythread_get_thread_stacksize(hythread_self());
common_guard_stack_size = find_guard_stack_size();
common_guard_page_size =find_guard_page_size();
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp Sat Jun 9 19:56:01 2007
@@ -252,9 +252,11 @@
err = pthread_attr_getstack(&pthread_attr, &stack_addr, &stack_size);
assert(!err);
pthread_attr_destroy(&pthread_attr);
+
return (void *)((unsigned char *)stack_addr + stack_size);
}
+#if 0
inline size_t find_stack_size() {
int err;
size_t stack_size;
@@ -265,6 +267,7 @@
pthread_attr_destroy(&pthread_attr);
return stack_size;
}
+#endif
inline size_t find_guard_stack_size() {
return 64*1024;
@@ -283,7 +286,6 @@
return guard_size;
}
-static size_t common_stack_size;
static size_t common_guard_stack_size;
static size_t common_guard_page_size;
@@ -292,7 +294,7 @@
}
inline size_t get_stack_size() {
- return common_stack_size;
+ return p_TLS_vmthread->stack_size;
}
inline size_t get_guard_stack_size() {
@@ -316,13 +318,20 @@
// fins stack parametrs
char* stack_addr = (char *)find_stack_addr();
p_TLS_vmthread->stack_addr = stack_addr;
- common_stack_size = find_stack_size();
+ unsigned int stack_size = hythread_get_thread_stacksize(hythread_self());
+
+ assert(stack_size > 0);
+
+ p_TLS_vmthread->stack_size = stack_size;
+
+
common_guard_stack_size = find_guard_stack_size();
common_guard_page_size =find_guard_page_size();
// stack should be mapped so it's result of future mapping
char* res;
+
// begin of the stack can be protected by OS, but this part already mapped
// found address of current stack page
char* current_page_addr =
@@ -336,18 +345,17 @@
// found size of the stack area which should be maped
size_t stack_mapping_size = (size_t)mapping_page_addr
- - (size_t)stack_addr + common_stack_size;
+ - (size_t)stack_addr + stack_size;
// maps unmapped part of the stack
- res = (char*) mmap(stack_addr - common_stack_size,
+ res = (char*) mmap(stack_addr - stack_size,
stack_mapping_size,
PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN,
-1,
0);
-
// stack should be mapped, checks result
- assert(res == (stack_addr - common_stack_size));
+ assert(res == (stack_addr - stack_size));
// set guard page
set_guard_stack();
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp Sat Jun 9 19:56:01 2007
@@ -196,6 +196,7 @@
return (void *)((unsigned char *)stack_addr + stack_size);
}
+#if 0
inline size_t find_stack_size() {
int err;
size_t stack_size;
@@ -206,6 +207,7 @@
pthread_attr_destroy(&pthread_attr);
return stack_size;
}
+#endif
inline size_t find_guard_stack_size() {
return 64*1024;
@@ -223,7 +225,6 @@
return guard_size;
}
-static size_t common_stack_size;
static size_t common_guard_stack_size;
static size_t common_guard_page_size;
@@ -232,7 +233,7 @@
}
inline size_t get_stack_size() {
- return common_stack_size;
+ return p_TLS_vmthread->stack_size;
}
inline size_t get_guard_stack_size() {
@@ -246,9 +247,9 @@
void init_stack_info() {
p_TLS_vmthread->stack_addr = find_stack_addr();
- common_stack_size = find_stack_size();
+ p_TLS_vmthread->stack_size = hythread_get_thread_stacksize(hythread_self());
common_guard_stack_size = find_guard_stack_size();
- common_guard_page_size =find_guard_page_size();
+ common_guard_page_size = find_guard_page_size();
/* FIXME: doesn't work, BTW, move this code to common file for all linuxes
* to avoid code duplication
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp?view=diff&rev=545832&r1=545831&r2=545832
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp Sat Jun 9 19:56:01 2007
@@ -26,6 +26,7 @@
#include "stack_dump.h"
#include "jvmti_break_intf.h"
#include "m2n.h"
+#include "open/hythread_ext.h"
// Windows specific
#include <string>
@@ -109,20 +110,6 @@
return stack_addr;
}
-inline size_t find_stack_size() {
- void* stack_addr;
- size_t stack_size;
- size_t reg_size;
- MEMORY_BASIC_INFORMATION memory_information;
-
- VirtualQuery(&memory_information, &memory_information, sizeof(memory_information));
- reg_size = memory_information.RegionSize;
- stack_addr = ((char*) memory_information.BaseAddress) + reg_size;
- stack_size = ((char*) stack_addr) - ((char*) memory_information.AllocationBase);
-
- return stack_size;
-}
-
inline size_t find_guard_page_size() {
size_t guard_size;
SYSTEM_INFO system_info;
@@ -138,7 +125,6 @@
return find_guard_page_size();
}
-static size_t common_stack_size;
static size_t common_guard_stack_size;
static size_t common_guard_page_size;
@@ -147,7 +133,7 @@
}
inline size_t get_stack_size() {
- return common_stack_size;
+ return p_TLS_vmthread->stack_size;
}
inline size_t get_guard_stack_size() {
@@ -161,9 +147,9 @@
void init_stack_info() {
p_TLS_vmthread->stack_addr = find_stack_addr();
- common_stack_size = find_stack_size();
+ p_TLS_vmthread->stack_size = hythread_get_thread_stacksize(hythread_self());
common_guard_stack_size = find_guard_stack_size();
- common_guard_page_size =find_guard_page_size();
+ common_guard_page_size = find_guard_page_size();
}
void set_guard_stack() {