172 jio_snprintf(buf, buflen,
173 "Internal Error (0x%x), pid=%d, tid=" UINTX_FORMAT,
174 _id, os::current_process_id(), os::current_thread_id());
175 }
176
177 return buf;
178 }
179
180 void VMError::print_stack_trace(outputStream* st, JavaThread* jt,
181 char* buf, int buflen, bool verbose) {
182 #ifdef ZERO
183 if (jt->zero_stack()->sp() && jt->top_zero_frame()) {
184 // StackFrameStream uses the frame anchor, which may not have
185 // been set up. This can be done at any time in Zero, however,
186 // so if it hasn't been set up then we just set it up now and
187 // clear it again when we're done.
188 bool has_last_Java_frame = jt->has_last_Java_frame();
189 if (!has_last_Java_frame)
190 jt->set_last_Java_frame();
191 st->print("Java frames:");
192
193 // If the top frame is a Shark frame and the frame anchor isn't
194 // set up then it's possible that the information in the frame
195 // is garbage: it could be from a previous decache, or it could
196 // simply have never been written. So we print a warning...
197 StackFrameStream sfs(jt);
198 if (!has_last_Java_frame && !sfs.is_done()) {
199 if (sfs.current()->zeroframe()->is_shark_frame()) {
200 st->print(" (TOP FRAME MAY BE JUNK)");
201 }
202 }
203 st->cr();
204
205 // Print the frames
206 for(int i = 0; !sfs.is_done(); sfs.next(), i++) {
207 sfs.current()->zero_print_on_error(i, st, buf, buflen);
208 st->cr();
209 }
210
211 // Reset the frame anchor if necessary
212 if (!has_last_Java_frame)
213 jt->reset_last_Java_frame();
214 }
215 #else
216 if (jt->has_last_Java_frame()) {
217 st->print_cr("Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)");
218 for(StackFrameStream sfs(jt); !sfs.is_done(); sfs.next()) {
219 sfs.current()->print_on_error(st, buf, buflen, verbose);
220 st->cr();
221 }
222 }
223 #endif // ZERO
224 }
225
|
172 jio_snprintf(buf, buflen,
173 "Internal Error (0x%x), pid=%d, tid=" UINTX_FORMAT,
174 _id, os::current_process_id(), os::current_thread_id());
175 }
176
177 return buf;
178 }
179
180 void VMError::print_stack_trace(outputStream* st, JavaThread* jt,
181 char* buf, int buflen, bool verbose) {
182 #ifdef ZERO
183 if (jt->zero_stack()->sp() && jt->top_zero_frame()) {
184 // StackFrameStream uses the frame anchor, which may not have
185 // been set up. This can be done at any time in Zero, however,
186 // so if it hasn't been set up then we just set it up now and
187 // clear it again when we're done.
188 bool has_last_Java_frame = jt->has_last_Java_frame();
189 if (!has_last_Java_frame)
190 jt->set_last_Java_frame();
191 st->print("Java frames:");
192 st->cr();
193
194 // Print the frames
195 StackFrameStream sfs(jt);
196 for(int i = 0; !sfs.is_done(); sfs.next(), i++) {
197 sfs.current()->zero_print_on_error(i, st, buf, buflen);
198 st->cr();
199 }
200
201 // Reset the frame anchor if necessary
202 if (!has_last_Java_frame)
203 jt->reset_last_Java_frame();
204 }
205 #else
206 if (jt->has_last_Java_frame()) {
207 st->print_cr("Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)");
208 for(StackFrameStream sfs(jt); !sfs.is_done(); sfs.next()) {
209 sfs.current()->print_on_error(st, buf, buflen, verbose);
210 st->cr();
211 }
212 }
213 #endif // ZERO
214 }
215
|