xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/SymbolFile/NativePDB/DWARFLocationExpression.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick //===-- DWARFLocationExpression.h -------------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_NATIVEPDB_DWARFLOCATIONEXPRESSION_H
10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_NATIVEPDB_DWARFLOCATIONEXPRESSION_H
11061da546Spatrick 
12061da546Spatrick #include "lldb/lldb-forward.h"
13*f6aab3d8Srobert #include "llvm/ADT/ArrayRef.h"
14061da546Spatrick #include "llvm/DebugInfo/CodeView/CodeView.h"
15*f6aab3d8Srobert #include <map>
16061da546Spatrick 
17061da546Spatrick namespace llvm {
18061da546Spatrick class APSInt;
19dda28197Spatrick class StringRef;
20061da546Spatrick namespace codeview {
21061da546Spatrick class TypeIndex;
22061da546Spatrick }
23061da546Spatrick namespace pdb {
24061da546Spatrick class TpiStream;
25061da546Spatrick }
26061da546Spatrick } // namespace llvm
27061da546Spatrick namespace lldb_private {
28061da546Spatrick namespace npdb {
29*f6aab3d8Srobert struct MemberValLocation {
30*f6aab3d8Srobert   uint16_t reg_id;
31*f6aab3d8Srobert   uint16_t reg_offset;
32*f6aab3d8Srobert   bool is_at_reg = true;
33*f6aab3d8Srobert };
34*f6aab3d8Srobert 
35061da546Spatrick DWARFExpression
36061da546Spatrick MakeEnregisteredLocationExpression(llvm::codeview::RegisterId reg,
37061da546Spatrick                                    lldb::ModuleSP module);
38061da546Spatrick 
39061da546Spatrick DWARFExpression MakeRegRelLocationExpression(llvm::codeview::RegisterId reg,
40061da546Spatrick                                              int32_t offset,
41061da546Spatrick                                              lldb::ModuleSP module);
42061da546Spatrick DWARFExpression MakeVFrameRelLocationExpression(llvm::StringRef fpo_program,
43061da546Spatrick                                                 int32_t offset,
44061da546Spatrick                                                 lldb::ModuleSP module);
45061da546Spatrick DWARFExpression MakeGlobalLocationExpression(uint16_t section, uint32_t offset,
46061da546Spatrick                                              lldb::ModuleSP module);
47061da546Spatrick DWARFExpression MakeConstantLocationExpression(
48061da546Spatrick     llvm::codeview::TypeIndex underlying_ti, llvm::pdb::TpiStream &tpi,
49061da546Spatrick     const llvm::APSInt &constant, lldb::ModuleSP module);
50*f6aab3d8Srobert DWARFExpression MakeEnregisteredLocationExpressionForComposite(
51*f6aab3d8Srobert     const std::map<uint64_t, MemberValLocation> &offset_to_location,
52*f6aab3d8Srobert     std::map<uint64_t, size_t> &offset_to_size, size_t total_size,
53*f6aab3d8Srobert     lldb::ModuleSP module);
54061da546Spatrick } // namespace npdb
55061da546Spatrick } // namespace lldb_private
56061da546Spatrick 
57061da546Spatrick #endif
58