101 assert(exception != NULL, "exception should not be NULL"); |
101 assert(exception != NULL, "exception should not be NULL"); |
102 Handle h_exception = Handle(thread, exception); |
102 Handle h_exception = Handle(thread, exception); |
103 _throw(thread, file, line, h_exception); |
103 _throw(thread, file, line, h_exception); |
104 } |
104 } |
105 |
105 |
106 void Exceptions::_throw(Thread* thread, const char* file, int line, Handle h_exception) { |
106 void Exceptions::_throw(Thread* thread, const char* file, int line, Handle h_exception, const char* message) { |
107 assert(h_exception() != NULL, "exception should not be NULL"); |
107 assert(h_exception() != NULL, "exception should not be NULL"); |
108 |
108 |
109 // tracing (do this up front - so it works during boot strapping) |
109 // tracing (do this up front - so it works during boot strapping) |
110 if (TraceExceptions) { |
110 if (TraceExceptions) { |
111 ttyLocker ttyl; |
111 ttyLocker ttyl; |
112 ResourceMark rm; |
112 ResourceMark rm; |
113 tty->print_cr("Exception <%s> (" INTPTR_FORMAT " ) \nthrown [%s, line %d]\nfor thread " INTPTR_FORMAT, |
113 tty->print_cr("Exception <%s>%s%s (" INTPTR_FORMAT " ) \n" |
114 h_exception->print_value_string(), (address)h_exception(), file, line, thread); |
114 "thrown [%s, line %d]\nfor thread " INTPTR_FORMAT, |
|
115 h_exception->print_value_string(), |
|
116 message ? ": " : "", message ? message : "", |
|
117 (address)h_exception(), file, line, thread); |
115 } |
118 } |
116 // for AbortVMOnException flag |
119 // for AbortVMOnException flag |
117 NOT_PRODUCT(Exceptions::debug_check_abort(h_exception)); |
120 NOT_PRODUCT(Exceptions::debug_check_abort(h_exception)); |
118 |
121 |
119 // Check for special boot-strapping/vm-thread handling |
122 // Check for special boot-strapping/vm-thread handling |
133 // Check for special boot-strapping/vm-thread handling |
136 // Check for special boot-strapping/vm-thread handling |
134 if (special_exception(thread, file, line, h_name, message)) return; |
137 if (special_exception(thread, file, line, h_name, message)) return; |
135 // Create and throw exception |
138 // Create and throw exception |
136 Handle h_cause(thread, NULL); |
139 Handle h_cause(thread, NULL); |
137 Handle h_exception = new_exception(thread, h_name, message, h_cause, h_loader, h_protection_domain); |
140 Handle h_exception = new_exception(thread, h_name, message, h_cause, h_loader, h_protection_domain); |
138 _throw(thread, file, line, h_exception); |
141 _throw(thread, file, line, h_exception, message); |
139 } |
142 } |
140 |
143 |
141 // Throw an exception with a message and a cause |
144 // Throw an exception with a message and a cause |
142 void Exceptions::_throw_msg_cause(Thread* thread, const char* file, int line, symbolHandle h_name, const char* message, Handle h_cause, Handle h_loader, Handle h_protection_domain) { |
145 void Exceptions::_throw_msg_cause(Thread* thread, const char* file, int line, symbolHandle h_name, const char* message, Handle h_cause, Handle h_loader, Handle h_protection_domain) { |
143 // Check for special boot-strapping/vm-thread handling |
146 // Check for special boot-strapping/vm-thread handling |
144 if (special_exception(thread, file, line, h_name, message)) return; |
147 if (special_exception(thread, file, line, h_name, message)) return; |
145 // Create and throw exception and init cause |
148 // Create and throw exception and init cause |
146 Handle h_exception = new_exception(thread, h_name, message, h_cause, h_loader, h_protection_domain); |
149 Handle h_exception = new_exception(thread, h_name, message, h_cause, h_loader, h_protection_domain); |
147 _throw(thread, file, line, h_exception); |
150 _throw(thread, file, line, h_exception, message); |
148 } |
151 } |
149 |
152 |
150 // This version creates handles and calls the other version |
153 // This version creates handles and calls the other version |
151 void Exceptions::_throw_msg(Thread* thread, const char* file, int line, |
154 void Exceptions::_throw_msg(Thread* thread, const char* file, int line, |
152 symbolOop name, const char* message) { |
155 symbolOop name, const char* message) { |