Materializer.h revision 3b16eb9d424068446fea9cd0e0fe5e7d435f5b6e
1//===-- Materializer.h ------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef lldb_Materializer_h 11#define lldb_Materializer_h 12 13#include "lldb/lldb-private-types.h" 14#include "lldb/Core/Error.h" 15#include "lldb/Expression/IRMemoryMap.h" 16#include "lldb/Host/Mutex.h" 17#include "lldb/Symbol/SymbolContext.h" 18 19#include <vector> 20 21namespace lldb_private 22{ 23 24class Materializer 25{ 26public: 27 Materializer (); 28 29 class Dematerializer 30 { 31 public: 32 void Dematerialize(Error &err); 33 private: 34 friend class Materializer; 35 36 Dematerializer (Materializer &materializer, 37 lldb::StackFrameSP &frame_sp, 38 IRMemoryMap &map, 39 lldb::addr_t process_address) : 40 m_materializer(materializer), 41 m_frame_wp(frame_sp), 42 m_map(map), 43 m_process_address(process_address) 44 { 45 } 46 47 Materializer &m_materializer; 48 lldb::StackFrameWP m_frame_wp; 49 IRMemoryMap &m_map; 50 lldb::addr_t m_process_address; 51 }; 52 53 Dematerializer Materialize (lldb::StackFrameSP &frame_sp, lldb::ClangExpressionVariableSP &result_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err); 54 55 uint32_t AddPersistentVariable (lldb::ClangExpressionVariableSP &persistent_variable_sp, Error &err); 56 uint32_t AddVariable (lldb::VariableSP &variable_sp, Error &err); 57 uint32_t AddResultVariable (const ClangASTType &type, Error &err); 58 uint32_t AddSymbol (const Symbol &symbol_sp, Error &err); 59 uint32_t AddRegister (const RegisterInfo ®ister_info, Error &err); 60 61 uint32_t GetStructAlignment (); 62 63 class Entity 64 { 65 public: 66 Entity () : 67 m_alignment(1), 68 m_size(0), 69 m_offset(0) 70 { 71 } 72 73 virtual ~Entity () 74 { 75 } 76 77 virtual void Materialize (lldb::StackFrameSP &frame_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err) = 0; 78 virtual void Dematerialize (lldb::StackFrameSP &frame_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err) = 0; 79 80 uint32_t GetAlignment () 81 { 82 return m_alignment; 83 } 84 85 uint32_t GetSize () 86 { 87 return m_size; 88 } 89 90 uint32_t GetOffset () 91 { 92 return m_offset; 93 } 94 95 void SetOffset (uint32_t offset) 96 { 97 m_offset = offset; 98 } 99 protected: 100 void SetSizeAndAlignmentFromType (ClangASTType &type); 101 102 uint32_t m_alignment; 103 uint32_t m_size; 104 uint32_t m_offset; 105 }; 106 107private: 108 uint32_t AddStructMember (Entity &entity); 109 110 typedef std::unique_ptr<Entity> EntityUP; 111 typedef std::vector<EntityUP> EntityVector; 112 113 unsigned m_result_index; 114 Mutex m_needs_dematerialize; 115 EntityVector m_entities; 116 uint32_t m_current_offset; 117 uint32_t m_struct_alignment; 118}; 119 120} 121 122#endif 123//===-- Materializer.h ------------------------------------------*- C++ -*-===// 124// 125// The LLVM Compiler Infrastructure 126// 127// This file is distributed under the University of Illinois Open Source 128// License. See LICENSE.TXT for details. 129// 130//===----------------------------------------------------------------------===// 131 132#ifndef lldb_Materializer_h 133#define lldb_Materializer_h 134 135#include "lldb/lldb-private-types.h" 136#include "lldb/Core/Error.h" 137#include "lldb/Expression/IRMemoryMap.h" 138#include "lldb/Host/Mutex.h" 139#include "lldb/Symbol/SymbolContext.h" 140 141#include <vector> 142 143namespace lldb_private 144{ 145 146class Materializer 147{ 148public: 149 Materializer (); 150 151 class Dematerializer 152 { 153 public: 154 void Dematerialize(Error &err); 155 private: 156 friend class Materializer; 157 158 Dematerializer (Materializer &materializer, 159 lldb::StackFrameSP &frame_sp, 160 IRMemoryMap &map, 161 lldb::addr_t process_address) : 162 m_materializer(materializer), 163 m_frame_wp(frame_sp), 164 m_map(map), 165 m_process_address(process_address) 166 { 167 } 168 169 Materializer &m_materializer; 170 lldb::StackFrameWP m_frame_wp; 171 IRMemoryMap &m_map; 172 lldb::addr_t m_process_address; 173 }; 174 175 Dematerializer Materialize (lldb::StackFrameSP &frame_sp, lldb::ClangExpressionVariableSP &result_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err); 176 177 uint32_t AddPersistentVariable (lldb::ClangExpressionVariableSP &persistent_variable_sp, Error &err); 178 uint32_t AddVariable (lldb::VariableSP &variable_sp, Error &err); 179 uint32_t AddResultVariable (const ClangASTType &type, Error &err); 180 uint32_t AddSymbol (const Symbol &symbol_sp, Error &err); 181 uint32_t AddRegister (const RegisterInfo ®ister_info, Error &err); 182 183 uint32_t GetStructAlignment (); 184 185 class Entity 186 { 187 public: 188 Entity () : 189 m_alignment(1), 190 m_size(0), 191 m_offset(0) 192 { 193 } 194 195 virtual ~Entity () 196 { 197 } 198 199 virtual void Materialize (lldb::StackFrameSP &frame_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err) = 0; 200 virtual void Dematerialize (lldb::StackFrameSP &frame_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err) = 0; 201 202 uint32_t GetAlignment () 203 { 204 return m_alignment; 205 } 206 207 uint32_t GetSize () 208 { 209 return m_size; 210 } 211 212 uint32_t GetOffset () 213 { 214 return m_offset; 215 } 216 217 void SetOffset (uint32_t offset) 218 { 219 m_offset = offset; 220 } 221 protected: 222 void SetSizeAndAlignmentFromType (ClangASTType &type); 223 224 uint32_t m_alignment; 225 uint32_t m_size; 226 uint32_t m_offset; 227 }; 228 229private: 230 uint32_t AddStructMember (Entity &entity); 231 232 typedef std::unique_ptr<Entity> EntityUP; 233 typedef std::vector<EntityUP> EntityVector; 234 235 unsigned m_result_index; 236 Mutex m_needs_dematerialize; 237 EntityVector m_entities; 238 uint32_t m_current_offset; 239 uint32_t m_struct_alignment; 240}; 241 242} 243 244#endif 245//===-- Materializer.h ------------------------------------------*- C++ -*-===// 246// 247// The LLVM Compiler Infrastructure 248// 249// This file is distributed under the University of Illinois Open Source 250// License. See LICENSE.TXT for details. 251// 252//===----------------------------------------------------------------------===// 253 254#ifndef lldb_Materializer_h 255#define lldb_Materializer_h 256 257#include "lldb/lldb-private-types.h" 258#include "lldb/Core/Error.h" 259#include "lldb/Expression/IRMemoryMap.h" 260#include "lldb/Host/Mutex.h" 261#include "lldb/Symbol/SymbolContext.h" 262 263#include <vector> 264 265namespace lldb_private 266{ 267 268class Materializer 269{ 270public: 271 Materializer (); 272 273 class Dematerializer 274 { 275 public: 276 void Dematerialize(Error &err); 277 private: 278 friend class Materializer; 279 280 Dematerializer (Materializer &materializer, 281 lldb::StackFrameSP &frame_sp, 282 IRMemoryMap &map, 283 lldb::addr_t process_address) : 284 m_materializer(materializer), 285 m_frame_wp(frame_sp), 286 m_map(map), 287 m_process_address(process_address) 288 { 289 } 290 291 Materializer &m_materializer; 292 lldb::StackFrameWP m_frame_wp; 293 IRMemoryMap &m_map; 294 lldb::addr_t m_process_address; 295 }; 296 297 Dematerializer Materialize (lldb::StackFrameSP &frame_sp, lldb::ClangExpressionVariableSP &result_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err); 298 299 uint32_t AddPersistentVariable (lldb::ClangExpressionVariableSP &persistent_variable_sp, Error &err); 300 uint32_t AddVariable (lldb::VariableSP &variable_sp, Error &err); 301 uint32_t AddResultVariable (const ClangASTType &type, Error &err); 302 uint32_t AddSymbol (const Symbol &symbol_sp, Error &err); 303 uint32_t AddRegister (const RegisterInfo ®ister_info, Error &err); 304 305 uint32_t GetStructAlignment () 306 { 307 return m_struct_alignment; 308 } 309 310 uint32_t GetStructSize () 311 { 312 return m_current_offset; 313 } 314 315 uint32_t GetNumEntities () 316 { 317 return m_entities.size(); 318 } 319 320 class Entity 321 { 322 public: 323 Entity () : 324 m_alignment(1), 325 m_size(0), 326 m_offset(0) 327 { 328 } 329 330 virtual ~Entity () 331 { 332 } 333 334 virtual void Materialize (lldb::StackFrameSP &frame_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err) = 0; 335 virtual void Dematerialize (lldb::StackFrameSP &frame_sp, IRMemoryMap &map, lldb::addr_t process_address, Error &err) = 0; 336 337 uint32_t GetAlignment () 338 { 339 return m_alignment; 340 } 341 342 uint32_t GetSize () 343 { 344 return m_size; 345 } 346 347 uint32_t GetOffset () 348 { 349 return m_offset; 350 } 351 352 void SetOffset (uint32_t offset) 353 { 354 m_offset = offset; 355 } 356 protected: 357 void SetSizeAndAlignmentFromType (ClangASTType &type); 358 359 uint32_t m_alignment; 360 uint32_t m_size; 361 uint32_t m_offset; 362 }; 363 364private: 365 uint32_t AddStructMember (Entity &entity); 366 367 typedef std::unique_ptr<Entity> EntityUP; 368 typedef std::vector<EntityUP> EntityVector; 369 370 unsigned m_result_index; 371 Mutex m_needs_dematerialize; 372 EntityVector m_entities; 373 uint32_t m_current_offset; 374 uint32_t m_struct_alignment; 375}; 376 377} 378 379#endif 380