< prev index next >
src/hotspot/share/utilities/nativeCallStack.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 22,31 ****
--- 22,32 ----
*
*/
#include "precompiled.hpp"
#include "runtime/os.hpp"
+ #include "utilities/decoder.hpp"
#include "utilities/globalDefinitions.hpp"
#include "utilities/nativeCallStack.hpp"
const NativeCallStack NativeCallStack::EMPTY_STACK(0, false);
*** 100,122 ****
// Decode and print this call path
void NativeCallStack::print_on(outputStream* out, int indent) const {
address pc;
char buf[1024];
int offset;
if (is_empty()) {
for (int index = 0; index < indent; index ++) out->print(" ");
out->print("[BOOTSTRAP]");
} else {
for (int frame = 0; frame < NMT_TrackingStackDepth; frame ++) {
pc = get_frame(frame);
if (pc == NULL) break;
// Print indent
for (int index = 0; index < indent; index ++) out->print(" ");
if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) {
! out->print_cr("[" PTR_FORMAT "] %s+0x%x", p2i(pc), buf, offset);
} else {
! out->print_cr("[" PTR_FORMAT "]", p2i(pc));
}
}
}
}
--- 101,129 ----
// Decode and print this call path
void NativeCallStack::print_on(outputStream* out, int indent) const {
address pc;
char buf[1024];
int offset;
+ int line_no;
if (is_empty()) {
for (int index = 0; index < indent; index ++) out->print(" ");
out->print("[BOOTSTRAP]");
} else {
for (int frame = 0; frame < NMT_TrackingStackDepth; frame ++) {
pc = get_frame(frame);
if (pc == NULL) break;
// Print indent
for (int index = 0; index < indent; index ++) out->print(" ");
if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) {
! out->print("[" PTR_FORMAT "] %s+0x%x", p2i(pc), buf, offset);
} else {
! out->print("[" PTR_FORMAT "]", p2i(pc));
}
+
+ if (Decoder::get_source_info(pc, buf, sizeof(buf), &line_no)) {
+ out->print(" (%s:%d)", buf, line_no);
+ }
+ out->cr();
}
}
}
< prev index next >