Mercurial > hg > truffle
comparison src/share/vm/utilities/exceptions.cpp @ 1684:66c5dadb4d61
6973308: Missing zero length check before repne scas in check_klass_subtype_slow_path()
Summary: set Z = 0 (not equal) before repne_scan() to indicate that class was not found when RCX == 0.
Reviewed-by: never, phh
author | kvn |
---|---|
date | Fri, 30 Jul 2010 10:21:15 -0700 |
parents | c18cbe5936b8 |
children | b6aedd1acdc0 |
comparison
equal
deleted
inserted
replaced
1683:99ceb0e99c9e | 1684:66c5dadb4d61 |
---|---|
115 h_exception->print_value_string(), | 115 h_exception->print_value_string(), |
116 message ? ": " : "", message ? message : "", | 116 message ? ": " : "", message ? message : "", |
117 (address)h_exception(), file, line, thread); | 117 (address)h_exception(), file, line, thread); |
118 } | 118 } |
119 // for AbortVMOnException flag | 119 // for AbortVMOnException flag |
120 NOT_PRODUCT(Exceptions::debug_check_abort(h_exception)); | 120 NOT_PRODUCT(Exceptions::debug_check_abort(h_exception, message)); |
121 | 121 |
122 // Check for special boot-strapping/vm-thread handling | 122 // Check for special boot-strapping/vm-thread handling |
123 if (special_exception(thread, file, line, h_exception)) return; | 123 if (special_exception(thread, file, line, h_exception)) return; |
124 | 124 |
125 assert(h_exception->is_a(SystemDictionary::Throwable_klass()), "exception is not a subclass of java/lang/Throwable"); | 125 assert(h_exception->is_a(SystemDictionary::Throwable_klass()), "exception is not a subclass of java/lang/Throwable"); |
373 | 373 |
374 // ---------------------------------------------------------------------------------------- | 374 // ---------------------------------------------------------------------------------------- |
375 | 375 |
376 #ifndef PRODUCT | 376 #ifndef PRODUCT |
377 // caller frees value_string if necessary | 377 // caller frees value_string if necessary |
378 void Exceptions::debug_check_abort(const char *value_string) { | 378 void Exceptions::debug_check_abort(const char *value_string, const char* message) { |
379 if (AbortVMOnException != NULL && value_string != NULL && | 379 if (AbortVMOnException != NULL && value_string != NULL && |
380 strstr(value_string, AbortVMOnException)) { | 380 strstr(value_string, AbortVMOnException)) { |
381 fatal(err_msg("Saw %s, aborting", value_string)); | 381 if (AbortVMOnExceptionMessage == NULL || message == NULL || |
382 } | 382 strcmp(message, AbortVMOnExceptionMessage) == 0) { |
383 } | 383 fatal(err_msg("Saw %s, aborting", value_string)); |
384 | 384 } |
385 void Exceptions::debug_check_abort(Handle exception) { | 385 } |
386 } | |
387 | |
388 void Exceptions::debug_check_abort(Handle exception, const char* message) { | |
386 if (AbortVMOnException != NULL) { | 389 if (AbortVMOnException != NULL) { |
387 ResourceMark rm; | 390 ResourceMark rm; |
388 debug_check_abort(instanceKlass::cast(exception()->klass())->external_name()); | 391 if (message == NULL && exception->is_a(SystemDictionary::Throwable_klass())) { |
392 oop msg = java_lang_Throwable::message(exception); | |
393 if (msg != NULL) { | |
394 message = java_lang_String::as_utf8_string(msg); | |
395 } | |
396 } | |
397 debug_check_abort(instanceKlass::cast(exception()->klass())->external_name(), message); | |
389 } | 398 } |
390 } | 399 } |
391 #endif | 400 #endif |