comparison src/share/vm/utilities/debug.cpp @ 11092:59b052799158

8015884: runThese crashed with SIGSEGV, hs_err has an error instead of stacktrace Summary: Dl_info struct should only be used if dladdr() has returned non-zero (no errors) and always check the dladdr() return value; Dl_info.dli_sname and Dl_info.dli_saddr fields should only be used if non-NULL; update/improve runtime/6888954/vmerrors.sh test Reviewed-by: dsamersoff, zgu, hseigel, coleenp
author dcubed
date Thu, 04 Jul 2013 21:10:17 -0700
parents 6ce351ac7339
children 6b0fd0964b87 78bbf4d43a14
comparison
equal deleted inserted replaced
11091:a55aa67bce1a 11092:59b052799158
312 } 312 }
313 313
314 #ifndef PRODUCT 314 #ifndef PRODUCT
315 #include <signal.h> 315 #include <signal.h>
316 316
317 void test_error_handler(size_t test_num) 317 void test_error_handler() {
318 { 318 uintx test_num = ErrorHandlerTest;
319 if (test_num == 0) return; 319 if (test_num == 0) return;
320 320
321 // If asserts are disabled, use the corresponding guarantee instead. 321 // If asserts are disabled, use the corresponding guarantee instead.
322 size_t n = test_num; 322 size_t n = test_num;
323 NOT_DEBUG(if (n <= 2) n += 2); 323 NOT_DEBUG(if (n <= 2) n += 2);
325 const char* const str = "hello"; 325 const char* const str = "hello";
326 const size_t num = (size_t)os::vm_page_size(); 326 const size_t num = (size_t)os::vm_page_size();
327 327
328 const char* const eol = os::line_separator(); 328 const char* const eol = os::line_separator();
329 const char* const msg = "this message should be truncated during formatting"; 329 const char* const msg = "this message should be truncated during formatting";
330 char * const dataPtr = NULL; // bad data pointer
331 const void (*funcPtr)(void) = (const void(*)()) 0xF; // bad function pointer
330 332
331 // Keep this in sync with test/runtime/6888954/vmerrors.sh. 333 // Keep this in sync with test/runtime/6888954/vmerrors.sh.
332 switch (n) { 334 switch (n) {
333 case 1: assert(str == NULL, "expected null"); 335 case 1: assert(str == NULL, "expected null");
334 case 2: assert(num == 1023 && *str == 'X', 336 case 2: assert(num == 1023 && *str == 'X',
346 msg, eol, msg, eol, msg, eol, msg, eol, msg)); 348 msg, eol, msg, eol, msg, eol, msg, eol, msg));
347 case 8: vm_exit_out_of_memory(num, OOM_MALLOC_ERROR, "ChunkPool::allocate"); 349 case 8: vm_exit_out_of_memory(num, OOM_MALLOC_ERROR, "ChunkPool::allocate");
348 case 9: ShouldNotCallThis(); 350 case 9: ShouldNotCallThis();
349 case 10: ShouldNotReachHere(); 351 case 10: ShouldNotReachHere();
350 case 11: Unimplemented(); 352 case 11: Unimplemented();
351 // This is last because it does not generate an hs_err* file on Windows. 353 // There's no guarantee the bad data pointer will crash us
352 case 12: os::signal_raise(SIGSEGV); 354 // so "break" out to the ShouldNotReachHere().
353 355 case 12: *dataPtr = '\0'; break;
354 default: ShouldNotReachHere(); 356 // There's no guarantee the bad function pointer will crash us
355 } 357 // so "break" out to the ShouldNotReachHere().
358 case 13: (*funcPtr)(); break;
359
360 default: tty->print_cr("ERROR: %d: unexpected test_num value.", n);
361 }
362 ShouldNotReachHere();
356 } 363 }
357 #endif // !PRODUCT 364 #endif // !PRODUCT
358 365
359 // ------ helper functions for debugging go here ------------ 366 // ------ helper functions for debugging go here ------------
360 367