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