You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/12/05 14:07:25 UTC
svn commit: r601325 - in /harmony/enhanced/drlvm/trunk/vm/vmcore:
include/jvmti_break_intf.h src/jvmti/jvmti_break_intf.cpp
src/util/win/em64t/exception_handlers.asm
Author: gshimansky
Date: Wed Dec 5 05:07:23 2007
New Revision: 601325
URL: http://svn.apache.org/viewvc?rev=601325&view=rev
Log:
JVMTI breakpoints have to clear direction flag in CPU on windows x86_64
as it is done on x86. This is necessary to make all inlined memcpy
operations to work correctly, otherwise they may corrupt stack especially
in release mode.
Modified:
harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_break_intf.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_break_intf.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/em64t/exception_handlers.asm
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_break_intf.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_break_intf.h?rev=601325&r1=601324&r2=601325&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_break_intf.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_break_intf.h Wed Dec 5 05:07:23 2007
@@ -231,7 +231,7 @@
};
// Address of this function is used for stack unwinding througn breakpoint
-void __cdecl process_native_breakpoint_event();
+extern "C" void __cdecl process_native_breakpoint_event();
// Callback function for native breakpoint processing
bool jvmti_jit_breakpoint_handler(Registers *regs);
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_break_intf.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_break_intf.cpp?rev=601325&r1=601324&r2=601325&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_break_intf.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_break_intf.cpp Wed Dec 5 05:07:23 2007
@@ -1350,7 +1350,10 @@
ti->vm_brpt->process_native_breakpoint();
}
-#if defined (_WIN32) && !defined(_EM64T_)
+#if defined (_WIN32)
+#if defined(_EM64T_)
+extern "C" void asm_process_native_breakpoint_event();
+#else
static void __declspec(naked)
asm_process_native_breakpoint_event()
{
@@ -1365,6 +1368,7 @@
ret
}
}
+#endif
#endif // _WIN32
bool jvmti_jit_breakpoint_handler(Registers *regs)
@@ -1422,7 +1426,7 @@
// Copy original registers to TLS
vm_set_jvmti_saved_exception_registers(vm_thread, *regs);
// Set return address for exception handler
-#if defined (PLATFORM_POSIX) || defined(_EM64T_)
+#if defined (PLATFORM_POSIX)
regs->set_ip((void*)process_native_breakpoint_event);
#else // PLATFORM_POSIX
regs->set_ip((void*)asm_process_native_breakpoint_event);
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/em64t/exception_handlers.asm
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/em64t/exception_handlers.asm?rev=601325&r1=601324&r2=601325&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/em64t/exception_handlers.asm (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/em64t/exception_handlers.asm Wed Dec 5 05:07:23 2007
@@ -4,6 +4,9 @@
PUBLIC asm_c_exception_handler
EXTRN c_exception_handler:PROC
+PUBLIC asm_process_native_breakpoint_event
+EXTRN process_native_breakpoint_event:PROC
+
_TEXT SEGMENT
vectored_exception_handler PROC
@@ -61,6 +64,18 @@
ret
asm_c_exception_handler ENDP
+
+asm_process_native_breakpoint_event PROC
+
+ pushfq
+ cld
+ sub rsp, 32 ; allocate stack for 4 registers
+ call process_native_breakpoint_event
+ add rsp, 32
+ popfq
+ ret
+
+asm_process_native_breakpoint_event ENDP
_TEXT ENDS