301 #endif 302 303 // Done 304 return; 305 } 306 307 void os::breakpoint() { 308 DebugBreak(); 309 } 310 311 // Invoked from the BREAKPOINT Macro 312 extern "C" void breakpoint() { 313 os::breakpoint(); 314 } 315 316 // RtlCaptureStackBackTrace Windows API may not exist prior to Windows XP. 317 // So far, this method is only used by Native Memory Tracking, which is 318 // only supported on Windows XP or later. 319 // 320 int os::get_native_stack(address* stack, int frames, int toSkip) { 321 #ifdef _NMT_NOINLINE_ 322 toSkip++; 323 #endif 324 int captured = RtlCaptureStackBackTrace(toSkip + 1, frames, (PVOID*)stack, NULL); 325 for (int index = captured; index < frames; index ++) { 326 stack[index] = NULL; 327 } 328 return captured; 329 } 330 331 332 // os::current_stack_base() 333 // 334 // Returns the base of the stack, which is the stack's 335 // starting address. This function must be called 336 // while running on the stack of the thread being queried. 337 338 address os::current_stack_base() { 339 MEMORY_BASIC_INFORMATION minfo; 340 address stack_bottom; 341 size_t stack_size; 342 343 VirtualQuery(&minfo, &minfo, sizeof(minfo)); | 301 #endif 302 303 // Done 304 return; 305 } 306 307 void os::breakpoint() { 308 DebugBreak(); 309 } 310 311 // Invoked from the BREAKPOINT Macro 312 extern "C" void breakpoint() { 313 os::breakpoint(); 314 } 315 316 // RtlCaptureStackBackTrace Windows API may not exist prior to Windows XP. 317 // So far, this method is only used by Native Memory Tracking, which is 318 // only supported on Windows XP or later. 319 // 320 int os::get_native_stack(address* stack, int frames, int toSkip) { 321 int captured = RtlCaptureStackBackTrace(toSkip + 1, frames, (PVOID*)stack, NULL); 322 for (int index = captured; index < frames; index ++) { 323 stack[index] = NULL; 324 } 325 return captured; 326 } 327 328 329 // os::current_stack_base() 330 // 331 // Returns the base of the stack, which is the stack's 332 // starting address. This function must be called 333 // while running on the stack of the thread being queried. 334 335 address os::current_stack_base() { 336 MEMORY_BASIC_INFORMATION minfo; 337 address stack_bottom; 338 size_t stack_size; 339 340 VirtualQuery(&minfo, &minfo, sizeof(minfo)); |