@@ -438,25 +438,28 @@ JVM_handle_aix_signal(int sig, siginfo_t* info, void* ucVoid, int abort_if_unrec
438
438
439
439
// stop on request
440
440
else if (sig == SIGTRAP && (stop_type = nativeInstruction_at (pc)->get_stop_type ()) != -1 ) {
441
- const char *msg = NULL ,
442
- *detail_msg = (const char *)(uc->uc_mcontext .jmp_context .gpr [0 ]);
441
+ bool msg_present = (stop_type & MacroAssembler::stop_msg_present);
442
+ stop_type = (stop_type &~ MacroAssembler::stop_msg_present);
443
+
444
+ const char *msg = NULL ;
443
445
switch (stop_type) {
444
- case MacroAssembler::stop_stop : msg = " stop" ; break ;
445
- case MacroAssembler::stop_untested : msg = " untested" ; break ;
446
- case MacroAssembler::stop_unimplemented : msg = " unimplemented" ; break ;
447
- case MacroAssembler::stop_shouldnotreachhere: msg = " shouldnotreachhere" ; detail_msg = NULL ; break ;
446
+ case MacroAssembler::stop_stop : msg = " stop" ; break ;
447
+ case MacroAssembler::stop_untested : msg = " untested" ; break ;
448
+ case MacroAssembler::stop_unimplemented : msg = " unimplemented" ; break ;
449
+ case MacroAssembler::stop_shouldnotreachhere: msg = " shouldnotreachhere" ; break ;
448
450
default : msg = " unknown" ; break ;
449
451
}
450
- if (detail_msg == NULL ) {
451
- detail_msg = " no details provided " ;
452
- }
452
+
453
+ const char **detail_msg_ptr = ( const char **)(pc + 4 ) ;
454
+ const char *detail_msg = msg_present ? *detail_msg_ptr : " no details provided " ;
453
455
454
456
if (TraceTraps) {
455
457
tty->print_cr (" trap: %s: %s (SIGTRAP, stop type %d)" , msg, detail_msg, stop_type);
456
458
}
457
459
458
460
va_list detail_args;
459
- VMError::report_and_die (t, ucVoid, NULL , 0 , msg, detail_msg, detail_args);
461
+ VMError::report_and_die (INTERNAL_ERROR, msg, detail_msg, detail_args, thread,
462
+ pc, info, ucVoid, NULL , 0 , 0 );
460
463
va_end (detail_args);
461
464
}
462
465
0 commit comments