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