gem5
v19.0.0.0
Main Page
Related Pages
Modules
+
Namespaces
Namespace List
+
Namespace Members
+
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
+
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
+
Typedefs
a
b
c
d
e
f
g
h
i
m
n
o
p
r
s
t
u
v
w
x
+
Enumerations
a
b
c
d
e
f
i
l
m
o
p
r
s
t
v
x
+
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
+
Classes
Class List
Class Index
Class Hierarchy
+
Class Members
+
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
+
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
+
Typedefs
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
y
+
Enumerations
a
b
c
d
e
f
g
h
i
l
m
o
p
r
s
t
u
w
+
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
+
Related Functions
:
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Files
File List
+
File Members
+
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
+
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
z
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
z
+
Typedefs
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
+
Enumerations
a
b
c
d
e
f
g
i
l
m
o
p
r
s
t
v
w
+
Enumerator
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
arch
arm
tracers
tarmac_base.cc
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2017-2019 ARM Limited
3
* All rights reserved
4
*
5
* The license below extends only to copyright in the software and shall
6
* not be construed as granting a license to any other intellectual
7
* property including but not limited to intellectual property relating
8
* to a hardware implementation of the functionality of the software
9
* licensed hereunder. You may use the software subject to the license
10
* terms below provided that you ensure that this notice is replicated
11
* unmodified and in its entirety in all distributions of the software,
12
* modified or unmodified, in source code or in binary form.
13
*
14
* Redistribution and use in source and binary forms, with or without
15
* modification, are permitted provided that the following conditions are
16
* met: redistributions of source code must retain the above copyright
17
* notice, this list of conditions and the following disclaimer;
18
* redistributions in binary form must reproduce the above copyright
19
* notice, this list of conditions and the following disclaimer in the
20
* documentation and/or other materials provided with the distribution;
21
* neither the name of the copyright holders nor the names of its
22
* contributors may be used to endorse or promote products derived from
23
* this software without specific prior written permission.
24
*
25
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
*
37
* Authors: Giacomo Travaglini
38
*/
39
40
#include "
arch/arm/tracers/tarmac_base.hh
"
41
42
#include <algorithm>
43
#include <string>
44
45
#include "config/the_isa.hh"
46
#include "
cpu/reg_class.hh
"
47
#include "
cpu/static_inst.hh
"
48
#include "
cpu/thread_context.hh
"
49
50
using namespace
ArmISA
;
51
52
namespace
Trace
{
53
54
TarmacBaseRecord::TarmacBaseRecord(
Tick
_when,
ThreadContext
*_thread,
55
const
StaticInstPtr
_staticInst,
56
PCState
_pc,
57
const
StaticInstPtr
_macroStaticInst)
58
:
InstRecord
(_when, _thread, _staticInst, _pc, _macroStaticInst)
59
{
60
}
61
62
TarmacBaseRecord::InstEntry::InstEntry
(
63
ThreadContext
*
thread
,
64
PCState
pc
,
65
const
StaticInstPtr
staticInst
,
66
bool
predicate
)
67
: taken(predicate) ,
68
addr
(pc.instAddr()) ,
69
opcode
(staticInst->
machInst
& 0xffffffff),
70
disassemble(staticInst->
disassemble
(
addr
)),
71
isetstate(
pcToISetState
(pc)),
72
mode
(
MODE_USER
)
73
{
74
75
// Operating mode gained by reading the architectural register (CPSR)
76
const
CPSR cpsr = thread->
readMiscRegNoEffect
(
MISCREG_CPSR
);
77
mode
= (
OperatingMode
) (uint8_t)cpsr.mode;
78
79
// In Tarmac, instruction names are printed in capital
80
// letters.
81
std::for_each(disassemble.begin(), disassemble.end(),
82
[](
char
&
c
) {
c
= toupper(
c
); });
83
}
84
85
TarmacBaseRecord::RegEntry::RegEntry
(
PCState
pc)
86
: isetstate(
pcToISetState
(pc)),
87
values(2, 0)
88
{
89
// values vector is constructed with size = 2, for
90
// holding Lo and Hi values.
91
}
92
93
TarmacBaseRecord::MemEntry::MemEntry
(
94
uint8_t _size,
95
Addr
_addr,
96
uint64_t _data)
97
:
size
(_size),
addr
(_addr),
data
(_data)
98
{
99
}
100
101
TarmacBaseRecord::ISetState
102
TarmacBaseRecord::pcToISetState
(
PCState
pc)
103
{
104
TarmacBaseRecord::ISetState
isetstate;
105
106
if
(pc.aarch64())
107
isetstate =
TarmacBaseRecord::ISET_A64
;
108
else
if
(!pc.thumb() && !pc.jazelle())
109
isetstate =
TarmacBaseRecord::ISET_ARM
;
110
else
if
(pc.thumb() && !pc.jazelle())
111
isetstate =
TarmacBaseRecord::ISET_THUMB
;
112
else
113
// No Jazelle state in TARMAC
114
isetstate =
TarmacBaseRecord::ISET_UNSUPPORTED
;
115
116
return
isetstate;
117
}
118
119
}
// namespace Trace
Trace::InstRecord::pc
TheISA::PCState pc
Definition:
insttracer.hh:69
Trace::TarmacBaseRecord::ISetState
ISetState
ARM instruction set state.
Definition:
tarmac_base.hh:77
Trace::InstRecord::predicate
bool predicate
is the predicate for execution this inst true or false (not execed)?
Definition:
insttracer.hh:147
Trace::TarmacBaseRecord::pcToISetState
static ISetState pcToISetState(ArmISA::PCState pc)
Returns the Instruction Set State according to the current PCState.
Definition:
tarmac_base.cc:102
Trace::InstRecord::thread
ThreadContext * thread
Definition:
insttracer.hh:65
StaticInst::disassemble
virtual const std::string & disassemble(Addr pc, const SymbolTable *symtab=0) const
Return string representation of disassembled instruction.
Definition:
static_inst.cc:123
Trace::InstRecord::size
Addr size
The size of the memory request.
Definition:
insttracer.hh:84
ArmISA::OperatingMode
OperatingMode
Definition:
types.hh:592
ArmISA
Definition:
ccregs.hh:42
ArmISA::mode
Bitfield< 4, 0 > mode
Definition:
miscregs_types.hh:73
RefCountingPtr< StaticInst >
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Definition:
thread_context.hh:93
StaticInst::machInst
const ExtMachInst machInst
The binary machine instruction.
Definition:
static_inst.hh:229
static_inst.hh
Tick
uint64_t Tick
Tick count type.
Definition:
types.hh:63
Trace::TarmacBaseRecord::RegEntry::RegEntry
RegEntry()=default
Trace::TarmacBaseRecord::InstEntry::InstEntry
InstEntry()=default
Trace::InstRecord::data
union Trace::InstRecord::@120 data
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition:
types.hh:142
thread_context.hh
ThreadContext::readMiscRegNoEffect
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
ArmISA::c
Bitfield< 29 > c
Definition:
miscregs_types.hh:53
Trace::InstRecord
Definition:
insttracer.hh:58
Trace::TarmacBaseRecord::ISET_ARM
Definition:
tarmac_base.hh:77
tarmac_base.hh
AlphaISA::PCState
GenericISA::SimplePCState< MachInst > PCState
Definition:
types.hh:43
ArmISA::opcode
Bitfield< 24, 21 > opcode
Definition:
types.hh:102
Trace::TarmacBaseRecord::ISET_UNSUPPORTED
Definition:
tarmac_base.hh:78
Trace::InstRecord::staticInst
StaticInstPtr staticInst
Definition:
insttracer.hh:68
Trace::TarmacBaseRecord::ISET_A64
Definition:
tarmac_base.hh:77
reg_class.hh
ArmISA::MODE_USER
Definition:
types.hh:600
Trace::TarmacBaseRecord::MemEntry::MemEntry
MemEntry()=default
ArmISA::MISCREG_CPSR
Definition:
miscregs.hh:58
Trace::InstRecord::addr
Addr addr
The address that was accessed.
Definition:
insttracer.hh:83
Trace::TarmacBaseRecord::ISET_THUMB
Definition:
tarmac_base.hh:77
Trace
Definition:
nativetrace.cc:52
Generated on Fri Feb 28 2020 16:26:57 for gem5 by
doxygen
1.8.13