Coverage Report

Created: 2023-11-11 10:31

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/source/API/SBSymbolContext.cpp
Line
Count
Source (jump to first uncovered line)
1
//===-- SBSymbolContext.cpp -----------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "lldb/API/SBSymbolContext.h"
10
#include "Utils.h"
11
#include "lldb/API/SBStream.h"
12
#include "lldb/Core/Module.h"
13
#include "lldb/Symbol/Function.h"
14
#include "lldb/Symbol/Symbol.h"
15
#include "lldb/Symbol/SymbolContext.h"
16
#include "lldb/Utility/Instrumentation.h"
17
18
using namespace lldb;
19
using namespace lldb_private;
20
21
332
SBSymbolContext::SBSymbolContext() { LLDB_INSTRUMENT_VA(this); }
22
23
SBSymbolContext::SBSymbolContext(const SymbolContext &sc)
24
576
    : m_opaque_up(std::make_unique<SymbolContext>(sc)) {
25
576
  LLDB_INSTRUMENT_VA(this, sc);
26
576
}
27
28
156
SBSymbolContext::SBSymbolContext(const SBSymbolContext &rhs) {
29
156
  LLDB_INSTRUMENT_VA(this, rhs);
30
31
156
  m_opaque_up = clone(rhs.m_opaque_up);
32
156
}
33
34
1.06k
SBSymbolContext::~SBSymbolContext() = default;
35
36
229
const SBSymbolContext &SBSymbolContext::operator=(const SBSymbolContext &rhs) {
37
229
  LLDB_INSTRUMENT_VA(this, rhs);
38
39
229
  if (this != &rhs)
40
229
    m_opaque_up = clone(rhs.m_opaque_up);
41
229
  return *this;
42
229
}
43
44
2
bool SBSymbolContext::IsValid() const {
45
2
  LLDB_INSTRUMENT_VA(this);
46
2
  return this->operator bool();
47
2
}
48
55
SBSymbolContext::operator bool() const {
49
55
  LLDB_INSTRUMENT_VA(this);
50
51
55
  return m_opaque_up != nullptr;
52
55
}
53
54
697
SBModule SBSymbolContext::GetModule() {
55
697
  LLDB_INSTRUMENT_VA(this);
56
57
697
  SBModule sb_module;
58
697
  ModuleSP module_sp;
59
697
  if (m_opaque_up) {
60
696
    module_sp = m_opaque_up->module_sp;
61
696
    sb_module.SetSP(module_sp);
62
696
  }
63
64
697
  return sb_module;
65
697
}
66
67
362
SBCompileUnit SBSymbolContext::GetCompileUnit() {
68
362
  LLDB_INSTRUMENT_VA(this);
69
70
362
  return SBCompileUnit(m_opaque_up ? 
m_opaque_up->comp_unit361
:
nullptr1
);
71
362
}
72
73
401
SBFunction SBSymbolContext::GetFunction() {
74
401
  LLDB_INSTRUMENT_VA(this);
75
76
401
  Function *function = nullptr;
77
78
401
  if (m_opaque_up)
79
400
    function = m_opaque_up->function;
80
81
401
  SBFunction sb_function(function);
82
83
401
  return sb_function;
84
401
}
85
86
22
SBBlock SBSymbolContext::GetBlock() {
87
22
  LLDB_INSTRUMENT_VA(this);
88
89
22
  return SBBlock(m_opaque_up ? 
m_opaque_up->block21
:
nullptr1
);
90
22
}
91
92
44
SBLineEntry SBSymbolContext::GetLineEntry() {
93
44
  LLDB_INSTRUMENT_VA(this);
94
95
44
  SBLineEntry sb_line_entry;
96
44
  if (m_opaque_up)
97
43
    sb_line_entry.SetLineEntry(m_opaque_up->line_entry);
98
99
44
  return sb_line_entry;
100
44
}
101
102
89
SBSymbol SBSymbolContext::GetSymbol() {
103
89
  LLDB_INSTRUMENT_VA(this);
104
105
89
  Symbol *symbol = nullptr;
106
107
89
  if (m_opaque_up)
108
88
    symbol = m_opaque_up->symbol;
109
110
89
  SBSymbol sb_symbol(symbol);
111
112
89
  return sb_symbol;
113
89
}
114
115
0
void SBSymbolContext::SetModule(lldb::SBModule module) {
116
0
  LLDB_INSTRUMENT_VA(this, module);
117
118
0
  ref().module_sp = module.GetSP();
119
0
}
120
121
0
void SBSymbolContext::SetCompileUnit(lldb::SBCompileUnit compile_unit) {
122
0
  LLDB_INSTRUMENT_VA(this, compile_unit);
123
124
0
  ref().comp_unit = compile_unit.get();
125
0
}
126
127
0
void SBSymbolContext::SetFunction(lldb::SBFunction function) {
128
0
  LLDB_INSTRUMENT_VA(this, function);
129
130
0
  ref().function = function.get();
131
0
}
132
133
0
void SBSymbolContext::SetBlock(lldb::SBBlock block) {
134
0
  LLDB_INSTRUMENT_VA(this, block);
135
136
0
  ref().block = block.GetPtr();
137
0
}
138
139
0
void SBSymbolContext::SetLineEntry(lldb::SBLineEntry line_entry) {
140
0
  LLDB_INSTRUMENT_VA(this, line_entry);
141
142
0
  if (line_entry.IsValid())
143
0
    ref().line_entry = line_entry.ref();
144
0
  else
145
0
    ref().line_entry.Clear();
146
0
}
147
148
0
void SBSymbolContext::SetSymbol(lldb::SBSymbol symbol) {
149
0
  LLDB_INSTRUMENT_VA(this, symbol);
150
151
0
  ref().symbol = symbol.get();
152
0
}
153
154
0
lldb_private::SymbolContext *SBSymbolContext::operator->() const {
155
0
  return m_opaque_up.get();
156
0
}
157
158
0
const lldb_private::SymbolContext &SBSymbolContext::operator*() const {
159
0
  assert(m_opaque_up.get());
160
0
  return *m_opaque_up;
161
0
}
162
163
6
lldb_private::SymbolContext &SBSymbolContext::operator*() {
164
6
  if (m_opaque_up == nullptr)
165
4
    m_opaque_up = std::make_unique<SymbolContext>();
166
6
  return *m_opaque_up;
167
6
}
168
169
76
lldb_private::SymbolContext &SBSymbolContext::ref() {
170
76
  if (m_opaque_up == nullptr)
171
76
    m_opaque_up = std::make_unique<SymbolContext>();
172
76
  return *m_opaque_up;
173
76
}
174
175
0
lldb_private::SymbolContext *SBSymbolContext::get() const {
176
0
  return m_opaque_up.get();
177
0
}
178
179
8
bool SBSymbolContext::GetDescription(SBStream &description) {
180
8
  LLDB_INSTRUMENT_VA(this, description);
181
182
8
  Stream &strm = description.ref();
183
184
8
  if (m_opaque_up) {
185
6
    m_opaque_up->GetDescription(&strm, lldb::eDescriptionLevelFull, nullptr);
186
6
  } else
187
2
    strm.PutCString("No value");
188
189
8
  return true;
190
8
}
191
192
SBSymbolContext
193
SBSymbolContext::GetParentOfInlinedScope(const SBAddress &curr_frame_pc,
194
19
                                         SBAddress &parent_frame_addr) const {
195
19
  LLDB_INSTRUMENT_VA(this, curr_frame_pc, parent_frame_addr);
196
197
19
  SBSymbolContext sb_sc;
198
19
  if (m_opaque_up.get() && curr_frame_pc.IsValid()) {
199
19
    if (m_opaque_up->GetParentOfInlinedScope(curr_frame_pc.ref(), sb_sc.ref(),
200
19
                                             parent_frame_addr.ref()))
201
0
      return sb_sc;
202
19
  }
203
19
  return SBSymbolContext();
204
19
}