OpenCSD - CoreSight Trace Decode Library
0.14.0
include
common
trc_ret_stack.h
Go to the documentation of this file.
1
/*
2
* \file trc_ret_stack.h
3
* \brief OpenCSD : trace decoder return stack feature.
4
*
5
* \copyright Copyright (c) 2017, ARM Limited. All Rights Reserved.
6
*/
7
8
/*
9
* Redistribution and use in source and binary forms, with or without modification,
10
* are permitted provided that the following conditions are met:
11
*
12
* 1. Redistributions of source code must retain the above copyright notice,
13
* this list of conditions and the following disclaimer.
14
*
15
* 2. Redistributions in binary form must reproduce the above copyright notice,
16
* this list of conditions and the following disclaimer in the documentation
17
* and/or other materials provided with the distribution.
18
*
19
* 3. Neither the name of the copyright holder nor the names of its contributors
20
* may be used to endorse or promote products derived from this software without
21
* specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
24
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
*/
34
35
#ifndef ARM_TRC_RET_STACK_H_INCLUDED
36
#define ARM_TRC_RET_STACK_H_INCLUDED
37
38
#include "
opencsd/ocsd_if_types.h
"
39
40
// uncomment below for return stack logging
41
// #define TRC_RET_STACK_DEBUG
42
43
#ifdef TRC_RET_STACK_DEBUG
44
class
TraceComponent
;
45
#endif
46
47
typedef
struct
_retStackElement
48
{
49
ocsd_vaddr_t
ret_addr
;
50
ocsd_isa
ret_isa
;
51
}
retStackElement
;
52
53
class
TrcAddrReturnStack
54
{
55
public
:
56
TrcAddrReturnStack
();
57
~TrcAddrReturnStack
() {};
58
59
void
set_active
(
bool
active)
60
{
61
m_active = active;
62
};
63
64
bool
is_active
()
const
65
{
66
return
m_active;
67
};
68
69
void
push
(
const
ocsd_vaddr_t
addr,
const
ocsd_isa
isa);
70
ocsd_vaddr_t
pop
(
ocsd_isa
&isa);
71
void
flush
();
72
73
bool
overflow
()
const
74
{
75
return
(
bool
)(num_entries < 0);
76
};
77
78
void
set_pop_pending
()
79
{
80
if
(m_active)
81
m_pop_pending =
true
;
82
}
83
84
void
clear_pop_pending
()
85
{
86
m_pop_pending =
false
;
87
}
88
89
bool
pop_pending
()
const
90
{
91
return
m_pop_pending;
92
};
93
94
private
:
95
bool
m_active;
96
bool
m_pop_pending;
// flag for decoder to indicate a pop might be needed depending on the next packet (ETMv4)
97
98
int
head_idx;
99
int
num_entries;
100
retStackElement
m_stack[16];
101
102
#ifdef TRC_RET_STACK_DEBUG
103
public
:
104
void
set_dbg_logger(
TraceComponent
*pLogger) { m_p_debug_logger = pLogger; };
105
private
:
106
void
LogOp(
const
char
*pszOpString,
ocsd_vaddr_t
addr,
int
head_off,
ocsd_isa
isa);
107
108
TraceComponent
*m_p_debug_logger;
109
#endif // TRC_RET_STACK_DEBUG
110
};
111
112
#endif // ARM_TRC_RET_STACK_H_INCLUDED
113
114
/* End of File trc_ret_stack.h */
TrcAddrReturnStack::flush
void flush()
TrcAddrReturnStack::set_active
void set_active(bool active)
Definition:
trc_ret_stack.h:59
TrcAddrReturnStack::overflow
bool overflow() const
Definition:
trc_ret_stack.h:73
_retStackElement
Definition:
trc_ret_stack.h:47
TrcAddrReturnStack::clear_pop_pending
void clear_pop_pending()
Definition:
trc_ret_stack.h:84
retStackElement
struct _retStackElement retStackElement
ocsd_if_types.h
OpenCSD : Standard Types used in the library interfaces.
TrcAddrReturnStack::push
void push(const ocsd_vaddr_t addr, const ocsd_isa isa)
ocsd_vaddr_t
uint64_t ocsd_vaddr_t
Definition:
ocsd_if_types.h:308
TrcAddrReturnStack::pop_pending
bool pop_pending() const
Definition:
trc_ret_stack.h:89
TrcAddrReturnStack::is_active
bool is_active() const
Definition:
trc_ret_stack.h:64
TrcAddrReturnStack::set_pop_pending
void set_pop_pending()
Definition:
trc_ret_stack.h:78
TraceComponent
Base class for all decode components in the library.
Definition:
trc_component.h:56
TrcAddrReturnStack::TrcAddrReturnStack
TrcAddrReturnStack()
TrcAddrReturnStack
Definition:
trc_ret_stack.h:53
_retStackElement::ret_isa
ocsd_isa ret_isa
Definition:
trc_ret_stack.h:50
_retStackElement::ret_addr
ocsd_vaddr_t ret_addr
Definition:
trc_ret_stack.h:49
TrcAddrReturnStack::pop
ocsd_vaddr_t pop(ocsd_isa &isa)
TrcAddrReturnStack::~TrcAddrReturnStack
~TrcAddrReturnStack()
Definition:
trc_ret_stack.h:57
ocsd_isa
enum _ocsd_isa ocsd_isa
Generated on Mon Mar 30 2020 12:02:06 for OpenCSD - CoreSight Trace Decode Library by
1.8.17