gem5
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
arch
alpha
stacktrace.hh
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2005 The Regents of The University of Michigan
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are
7
* met: redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer;
9
* redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution;
12
* neither the name of the copyright holders nor the names of its
13
* contributors may be used to endorse or promote products derived from
14
* this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*
28
* Authors: Nathan Binkert
29
*/
30
31
#ifndef __ARCH_ALPHA_STACKTRACE_HH__
32
#define __ARCH_ALPHA_STACKTRACE_HH__
33
34
#include "
base/trace.hh
"
35
#include "
cpu/static_inst.hh
"
36
#include "debug/Stack.hh"
37
38
class
ThreadContext
;
39
40
namespace
AlphaISA {
41
42
class
StackTrace;
43
44
class
ProcessInfo
45
{
46
private
:
47
ThreadContext
*
tc
;
48
49
int
thread_info_size
;
50
int
task_struct_size
;
51
int
task_off
;
52
int
pid_off
;
53
int
name_off
;
54
55
public
:
56
ProcessInfo
(
ThreadContext
*_tc);
57
58
Addr
task
(
Addr
ksp)
const
;
59
int
pid
(
Addr
ksp)
const
;
60
std::string
name
(
Addr
ksp)
const
;
61
};
62
63
class
StackTrace
64
{
65
private
:
66
ThreadContext
*
tc
;
67
std::vector<Addr>
stack
;
68
69
private
:
70
bool
isEntry
(
Addr
addr
);
71
bool
decodePrologue
(
Addr
sp
,
Addr
callpc,
Addr
func,
int
&
size
,
Addr
&
ra
);
72
bool
decodeSave
(
MachInst
inst,
int
&
reg
,
int
&disp);
73
bool
decodeStack
(
MachInst
inst,
int
&disp);
74
75
void
trace
(
ThreadContext
*
tc
,
bool
is_call);
76
77
public
:
78
StackTrace
();
79
StackTrace
(
ThreadContext
*
tc
,
const
StaticInstPtr
&inst);
80
~StackTrace
();
81
82
void
83
clear
()
84
{
85
tc
= 0;
86
stack
.clear();
87
}
88
89
bool
valid
()
const
{
return
tc
!= NULL; }
90
bool
trace
(
ThreadContext
*
tc
,
const
StaticInstPtr
&inst);
91
92
public
:
93
const
std::vector<Addr>
&
getstack
()
const
{
return
stack
; }
94
95
enum
{
96
user
= 1,
97
console
= 2,
98
unknown
= 3
99
};
100
101
#if TRACING_ON
102
private
:
103
void
dump
();
104
105
public
:
106
void
dprintf
() {
if
(
DTRACE
(Stack))
dump
(); }
107
#else
108
public
:
109
void
dprintf
() {}
110
#endif
111
};
112
113
inline
bool
114
StackTrace::trace
(
ThreadContext
*tc,
const
StaticInstPtr
&inst)
115
{
116
if
(!inst->
isCall
() && !inst->
isReturn
())
117
return
false
;
118
119
if
(
valid
())
120
clear
();
121
122
trace
(tc, !inst->
isReturn
());
123
return
true
;
124
}
125
126
}
// namespace AlphaISA
127
128
#endif // __ARCH_ALPHA_STACKTRACE_HH__
AlphaISA::StackTrace::trace
void trace(ThreadContext *tc, bool is_call)
Definition:
stacktrace.cc:137
X86ISA::reg
Bitfield< 5, 3 > reg
Definition:
types.hh:89
AlphaISA::ProcessInfo::name_off
int name_off
Definition:
stacktrace.hh:53
AlphaISA::StackTrace::console
Definition:
stacktrace.hh:97
AlphaISA::StackTrace::user
Definition:
stacktrace.hh:96
AlphaISA::StackTrace::decodeStack
bool decodeStack(MachInst inst, int &disp)
Definition:
stacktrace.cc:237
AlphaISA::ProcessInfo::task
Addr task(Addr ksp) const
Definition:
stacktrace.cc:77
addr
ip6_addr_t addr
Definition:
inet.hh:335
AlphaISA::StackTrace::stack
std::vector< Addr > stack
Definition:
stacktrace.hh:67
StaticInst::isCall
bool isCall() const
Definition:
static_inst.hh:146
ArmISA::sp
Bitfield< 0 > sp
Definition:
miscregs.hh:1386
AlphaISA::StackTrace::isEntry
bool isEntry(Addr addr)
Definition:
stacktrace.cc:213
AlphaISA::ProcessInfo::ProcessInfo
ProcessInfo(ThreadContext *_tc)
Definition:
stacktrace.cc:48
AlphaISA::StackTrace::decodePrologue
bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra)
Definition:
stacktrace.cc:307
AlphaISA::StackTrace::valid
bool valid() const
Definition:
stacktrace.hh:89
AlphaISA::StackTrace::getstack
const std::vector< Addr > & getstack() const
Definition:
stacktrace.hh:93
RefCountingPtr< StaticInst >
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Definition:
thread_context.hh:93
AlphaISA::ProcessInfo::pid_off
int pid_off
Definition:
stacktrace.hh:52
AlphaISA::ProcessInfo::name
std::string name(Addr ksp) const
Definition:
stacktrace.cc:107
std::vector< Addr >
trace.hh
AlphaISA::MachInst
uint32_t MachInst
Definition:
types.hh:40
AlphaISA::StackTrace::dprintf
void dprintf()
Definition:
stacktrace.hh:109
AlphaISA::StackTrace::unknown
Definition:
stacktrace.hh:98
DTRACE
#define DTRACE(x)
Definition:
trace.hh:210
static_inst.hh
AlphaISA::ProcessInfo::thread_info_size
int thread_info_size
Definition:
stacktrace.hh:49
AlphaISA::StackTrace::decodeSave
bool decodeSave(MachInst inst, int ®, int &disp)
Definition:
stacktrace.cc:278
AlphaISA::ProcessInfo
Definition:
stacktrace.hh:44
AlphaISA::StackTrace::~StackTrace
~StackTrace()
Definition:
stacktrace.cc:132
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition:
types.hh:142
AlphaISA::ProcessInfo::task_struct_size
int task_struct_size
Definition:
stacktrace.hh:50
PowerISA::ra
Bitfield< 20, 16 > ra
Definition:
types.hh:47
AlphaISA::StackTrace::tc
ThreadContext * tc
Definition:
stacktrace.hh:66
X86ISA::size
int size()
Definition:
pagetable.hh:146
AlphaISA::StackTrace::StackTrace
StackTrace()
Definition:
stacktrace.cc:121
AlphaISA::StackTrace::clear
void clear()
Definition:
stacktrace.hh:83
AlphaISA::ProcessInfo::tc
ThreadContext * tc
Definition:
stacktrace.hh:47
AlphaISA::ProcessInfo::pid
int pid(Addr ksp) const
Definition:
stacktrace.cc:92
AlphaISA::StackTrace
Definition:
stacktrace.hh:63
Stats::dump
void dump()
Dump all statistics data to the registered outputs.
Definition:
statistics.cc:517
AlphaISA::ProcessInfo::task_off
int task_off
Definition:
stacktrace.hh:51
StaticInst::isReturn
bool isReturn() const
Definition:
static_inst.hh:147
Generated on Fri Jun 9 2017 13:03:36 for gem5 by
doxygen
1.8.6