36 #include "threads/mutex.h"
39 #include <sys/types.h>
57 #if defined(ENABLE_THREADS)
60 thread = mainthreadobj;
62 if(thread->o.thread != NULL) {
73 thread = thread->prev;
76 }
while (mainthreadobj != thread);
80 *threads_count_ptr =
i;
81 *threads_ptr = tthreads;
109 struct brkpts *jvmtibrkpt;
112 if (jvmtibrkpt->
size == 0) {
114 memset(jvmtibrkpt->
brk, 0,
sizeof(
struct _brkpt)*16);
115 jvmtibrkpt->
size = 16;
118 jvmtibrkpt->
size += 16;
119 tmp = jvmtibrkpt->
brk;
121 memset(jvmtibrkpt->
brk, 0,
sizeof(
struct _brkpt)*(jvmtibrkpt->
size));
122 memcpy((
void*)jvmtibrkpt->
brk,(
void*)tmp,jvmtibrkpt->
size);
135 struct brkpts *jvmtibrkpt;
141 if (jvmtibrkpt->
size == jvmtibrkpt->
num)
146 if (jvmtibrkpt->
brk[sysbrk].
count > 0) {
155 if ((jvmtibrkpt->
brk[sysbrk].
count == 1) ) {
169 __asm__ (
"setsysbrkpt:");
181 struct brkpts *jvmtibrkpt;
186 if (jvmtibrkpt->
size == jvmtibrkpt->
num)
189 assert (jvmtibrkpt->
size > jvmtibrkpt->
num);
190 fprintf (stderr,
"add brk add: %p\n",addr);
200 fprintf (stderr,
"add brk done\n");
215 __asm__ (
"cacaodbgserver_quit:");
258 fprintf(stderr,
"unhandled kind of cacao break %d\n",kindofbrk);
284 __asm__ (
"movl $setsysbrkpt,%0;"
286 __asm__ (
"movl $cacaodbgserver_quit,%0;"
290 if (dbgserver == (-1)) {
291 log_text(
"cacaodbgserver fork error");
294 if (dbgserver == 0) {
295 if (execlp(
"cacaodbgserver",
"cacaodbgserver",(
char *) NULL) == -1) {
296 log_text(
"unable to execute cacaodbgserver");
319 java_objectheader*
loader,
void jvmti_add_breakpoint(void *addr, jmethodID method, jlocation location)
JNIEnv jclass jobject const char jobject protection_domain
void jvmti_cacaodbgserver_quit()
void jvmti_ThreadStartEnd(jvmtiEvent ev)
#define CLASSFILELOADHOOKBRK
void jvmti_ClassLoadPrepare(bool prepared, classinfo *c)
JNIEnv jthread jmethodID void void ** new_address_ptr
void jvmti_ClassFileLoadHook(utf *name, int class_data_len, unsigned char *class_data, java_objectheader *loader, java_objectheader *protection_domain, jint *new_class_data_len, unsigned char **new_class_data)
unsigned char * class_data
JNIEnv jclass jobject const char * name
JNIEnv jthread jobject jlong timeout
jthread jvmti_get_current_thread()
#define COMPILEDMETHODUNLOADBRK
void jvmti_MonitorContendedEntering(bool entered, jobject obj)
JNIEnv jclass jobject const char jobject jint class_data_len
void jvmti_fireEvent(genericEventData *data)
void jvmti_cacao_debug_init()
JNIEnv jthread jmethodID method
Instruction::InstID tmp[]
jvmtiError jvmti_get_all_threads(jint *threads_count_ptr, threadobject ***threads_ptr)
#define CACAODBGSERVERQUIT
JNIEnv jthread jmethodID void * address
void utf_sprint_convert_to_latin1(char *buffer, Utf8String u)
JNIEnv jclass jobject loader
JNIEnv jclass jobject const char jobject jint const unsigned char jint unsigned char ** new_class_data
void jvmti_NativeMethodBind(jmethodID method, void *address, void **new_address_ptr)
#define COMPILEDMETHODLOADBRK
static void jvmti_cacao_generic_breakpointhandler(int kindofbrk)
static threadobject * thread_get_current()
Return the threadobject for the current thread.
jint * new_class_data_len
static void breakpointtable_creator()
unsigned char ** new_class_data
void jvmti_set_system_breakpoint(int sysbrk, bool mode)
#define MREALLOC(ptr, type, num1, num2)
JNIEnv jclass jobject const char jobject jint const unsigned char jint * new_class_data_len
JNIEnv jthread jmethodID jlocation location
JNIEnv jclass jobject const char jobject jint const unsigned char * class_data
void jvmti_MonitorWaiting(bool wait, jobject obj, jlong timeout)
cacaodbgcommunication * dbgcom
#define MFREE(ptr, type, num)
jobject protection_domain