1 | //===-- DWARFLocationExpression.h -------------------------------*- C++ -*-===// |
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 | #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_NATIVEPDB_DWARFLOCATIONEXPRESSION_H |
10 | #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_NATIVEPDB_DWARFLOCATIONEXPRESSION_H |
11 | |
12 | #include "lldb/lldb-forward.h" |
13 | #include "llvm/ADT/ArrayRef.h" |
14 | #include "llvm/DebugInfo/CodeView/CodeView.h" |
15 | #include <map> |
16 | |
17 | namespace llvm { |
18 | class APSInt; |
19 | class StringRef; |
20 | namespace codeview { |
21 | class TypeIndex; |
22 | } |
23 | namespace pdb { |
24 | class TpiStream; |
25 | } |
26 | } // namespace llvm |
27 | namespace lldb_private { |
28 | namespace npdb { |
29 | struct MemberValLocation { |
30 | uint16_t reg_id; |
31 | uint16_t reg_offset; |
32 | bool is_at_reg = true; |
33 | }; |
34 | |
35 | DWARFExpression |
36 | MakeEnregisteredLocationExpression(llvm::codeview::RegisterId reg, |
37 | lldb::ModuleSP module); |
38 | |
39 | DWARFExpression MakeRegRelLocationExpression(llvm::codeview::RegisterId reg, |
40 | int32_t offset, |
41 | lldb::ModuleSP module); |
42 | DWARFExpression MakeVFrameRelLocationExpression(llvm::StringRef fpo_program, |
43 | int32_t offset, |
44 | lldb::ModuleSP module); |
45 | DWARFExpression MakeGlobalLocationExpression(uint16_t section, uint32_t offset, |
46 | lldb::ModuleSP module); |
47 | DWARFExpression MakeConstantLocationExpression( |
48 | llvm::codeview::TypeIndex underlying_ti, llvm::pdb::TpiStream &tpi, |
49 | const llvm::APSInt &constant, lldb::ModuleSP module); |
50 | DWARFExpression MakeEnregisteredLocationExpressionForComposite( |
51 | const std::map<uint64_t, MemberValLocation> &offset_to_location, |
52 | std::map<uint64_t, size_t> &offset_to_size, size_t total_size, |
53 | lldb::ModuleSP module); |
54 | } // namespace npdb |
55 | } // namespace lldb_private |
56 | |
57 | #endif |
58 | |