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
riscv
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_RISCV_STACKTRACE_HH__
36
#define __ARCH_RISCV_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
RiscvISA
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
!=
nullptr
;
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 RiscvISA
139
140
#endif // __ARCH_RISCV_STACKTRACE_HH__
X86ISA::reg
Bitfield< 5, 3 > reg
Definition:
types.hh:89
RiscvISA::StackTrace::isEntry
bool isEntry(Addr addr)
Definition:
stacktrace.cc:90
RiscvISA::ProcessInfo::ProcessInfo
ProcessInfo(ThreadContext *_tc)
Definition:
stacktrace.cc:40
RiscvISA::StackTrace::~StackTrace
~StackTrace()
Definition:
stacktrace.cc:78
addr
ip6_addr_t addr
Definition:
inet.hh:335
RiscvISA::StackTrace::getstack
const std::vector< Addr > & getstack() const
Definition:
stacktrace.hh:96
RiscvISA::StackTrace::MachInst
TheISA::MachInst MachInst
Definition:
stacktrace.hh:61
StaticInst::isCall
bool isCall() const
Definition:
static_inst.hh:146
RiscvISA::StackTrace::console
static const int console
Definition:
stacktrace.hh:102
RiscvISA::StackTrace::user
static const int user
Definition:
stacktrace.hh:101
RiscvISA::StackTrace::clear
void clear()
Definition:
stacktrace.hh:80
RiscvISA::StackTrace::trace
void trace(ThreadContext *tc, bool is_call)
Definition:
stacktrace.cc:84
RefCountingPtr< StaticInst >
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Definition:
thread_context.hh:93
RiscvISA::ProcessInfo
Definition:
stacktrace.hh:48
std::vector< Addr >
RiscvISA::StackTrace::decodeSave
bool decodeSave(MachInst inst, int ®, int &disp)
Definition:
stacktrace.cc:104
trace.hh
AlphaISA::MachInst
uint32_t MachInst
Definition:
types.hh:40
RiscvISA::StackTrace::dprintf
void dprintf()
Definition:
stacktrace.hh:119
RiscvISA::StackTrace::decodeStack
bool decodeStack(MachInst inst, int &disp)
Definition:
stacktrace.cc:97
RiscvISA::sp
Bitfield< 4 > sp
Definition:
pra_constants.hh:269
DTRACE
#define DTRACE(x)
Definition:
trace.hh:210
static_inst.hh
RiscvISA::ProcessInfo::task
Addr task(Addr ksp) const
Definition:
stacktrace.cc:46
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition:
types.hh:142
RiscvISA::StackTrace
Definition:
stacktrace.hh:58
PowerISA::ra
Bitfield< 20, 16 > ra
Definition:
types.hh:47
RiscvISA::StackTrace::tc
ThreadContext * tc
Definition:
stacktrace.hh:63
X86ISA::size
int size()
Definition:
pagetable.hh:146
RiscvISA::ProcessInfo::name
std::string name(Addr ksp) const
Definition:
stacktrace.cc:60
RiscvISA::StackTrace::stack
std::vector< Addr > stack
Definition:
stacktrace.hh:64
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
RiscvISA::ProcessInfo::pid
int pid(Addr ksp) const
Definition:
stacktrace.cc:53
RiscvISA::StackTrace::StackTrace
StackTrace()
Definition:
stacktrace.cc:66
RiscvISA::StackTrace::valid
bool valid() const
Definition:
stacktrace.hh:87
RiscvISA::StackTrace::decodePrologue
bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra)
Definition:
stacktrace.cc:115
RiscvISA::StackTrace::unknown
static const int unknown
Definition:
stacktrace.hh:103
Generated on Fri Jun 9 2017 13:03:36 for gem5 by
doxygen
1.8.6