LLDB mainline
CTFTypes.h
Go to the documentation of this file.
1//===-- CTFTypes.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_CTF_CTFTYPES_H
10#define LLDB_SOURCE_PLUGINS_SYMBOLFILE_CTF_CTFTYPES_H
11
12#include "lldb/lldb-types.h"
13#include "llvm/ADT/StringRef.h"
14
15#include <vector>
16
17namespace lldb_private {
18
19struct CTFType {
20 enum Kind : uint32_t {
23 eFloat = 2,
25 eArray = 4,
28 eUnion = 7,
29 eEnum = 8,
33 eConst = 12,
35 eSlice = 14,
36 };
37
40 llvm::StringRef name;
41
43 : kind(kind), uid(uid), name(name) {}
44};
45
46struct CTFInteger : public CTFType {
47 CTFInteger(lldb::user_id_t uid, llvm::StringRef name, uint32_t bits,
48 uint32_t encoding)
50
51 static bool classof(const CTFType *T) { return T->kind == eInteger; }
52
53 uint32_t bits;
54 uint32_t encoding;
55};
56
57struct CTFModifier : public CTFType {
58protected:
61
62 static bool classof(const CTFType *T) {
63 return T->kind == ePointer || T->kind == eConst || T->kind == eVolatile ||
64 T->kind == eRestrict;
65 }
66
67public:
68 uint32_t type;
69};
70
71struct CTFPointer : public CTFModifier {
74
75 static bool classof(const CTFType *T) { return T->kind == ePointer; }
76};
77
78struct CTFConst : public CTFModifier {
81
82 static bool classof(const CTFType *T) { return T->kind == eConst; }
83};
84
85struct CTFVolatile : public CTFModifier {
88
89 static bool classof(const CTFType *T) { return T->kind == eVolatile; }
90};
91
92struct CTFRestrict : public CTFModifier {
95 static bool classof(const CTFType *T) { return T->kind == eRestrict; }
96};
97
98struct CTFTypedef : public CTFType {
99 CTFTypedef(lldb::user_id_t uid, llvm::StringRef name, uint32_t type)
100 : CTFType(eTypedef, uid, name), type(type) {}
101
102 static bool classof(const CTFType *T) { return T->kind == eTypedef; }
103
104 uint32_t type;
105};
106
107struct CTFArray : public CTFType {
108 CTFArray(lldb::user_id_t uid, llvm::StringRef name, uint32_t type,
109 uint32_t index, uint32_t nelems)
111
112 static bool classof(const CTFType *T) { return T->kind == eArray; }
113
114 uint32_t type;
115 uint32_t index;
116 uint32_t nelems;
117};
118
119struct CTFEnum : public CTFType {
120 struct Value {
121 Value(llvm::StringRef name, uint32_t value) : name(name), value(value){};
122 llvm::StringRef name;
123 uint32_t value;
124 };
125
126 CTFEnum(lldb::user_id_t uid, llvm::StringRef name, uint32_t nelems,
127 uint32_t size, std::vector<Value> values)
129 values(std::move(values)) {
130 assert(this->values.size() == nelems);
131 }
132
133 static bool classof(const CTFType *T) { return T->kind == eEnum; }
134
135 uint32_t nelems;
136 uint32_t size;
137 std::vector<Value> values;
138};
139
140struct CTFFunction : public CTFType {
141 CTFFunction(lldb::user_id_t uid, llvm::StringRef name, uint32_t nargs,
142 uint32_t return_type, std::vector<uint32_t> args, bool variadic)
144 args(std::move(args)), variadic(variadic) {}
145
146 static bool classof(const CTFType *T) { return T->kind == eFunction; }
147
148 uint32_t nargs;
149 uint32_t return_type;
150
151 std::vector<uint32_t> args;
152 bool variadic = false;
153};
154
155struct CTFRecord : public CTFType {
156public:
157 struct Field {
158 Field(llvm::StringRef name, uint32_t type, uint64_t offset)
159 : name(name), type(type), offset(offset) {}
160
161 llvm::StringRef name;
162 uint32_t type;
163 uint64_t offset;
164 };
165
167 uint32_t nfields, uint32_t size, std::vector<Field> fields)
169 fields(std::move(fields)) {}
170
171 static bool classof(const CTFType *T) {
172 return T->kind == eStruct || T->kind == eUnion;
173 }
174
175 uint32_t nfields;
176 uint32_t size;
177 std::vector<Field> fields;
178};
179
180struct CTFStruct : public CTFRecord {
181 CTFStruct(lldb::user_id_t uid, llvm::StringRef name, uint32_t nfields,
182 uint32_t size, std::vector<Field> fields)
183 : CTFRecord(eStruct, uid, name, nfields, size, std::move(fields)){};
184
185 static bool classof(const CTFType *T) { return T->kind == eStruct; }
186};
187
188struct CTFUnion : public CTFRecord {
189 CTFUnion(lldb::user_id_t uid, llvm::StringRef name, uint32_t nfields,
190 uint32_t size, std::vector<Field> fields)
191 : CTFRecord(eUnion, uid, name, nfields, size, std::move(fields)){};
192
193 static bool classof(const CTFType *T) { return T->kind == eUnion; }
194};
195
196struct CTFForward : public CTFType {
198 : CTFType(eForward, uid, name) {}
199
200 static bool classof(const CTFType *T) { return T->kind == eForward; }
201};
202
203} // namespace lldb_private
204
205#endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_CTF_CTFTYPES_H
A class that represents a running process on the host machine.
uint64_t user_id_t
Definition lldb-types.h:83
static bool classof(const CTFType *T)
Definition CTFTypes.h:112
CTFArray(lldb::user_id_t uid, llvm::StringRef name, uint32_t type, uint32_t index, uint32_t nelems)
Definition CTFTypes.h:108
CTFConst(lldb::user_id_t uid, uint32_t type)
Definition CTFTypes.h:79
static bool classof(const CTFType *T)
Definition CTFTypes.h:82
Value(llvm::StringRef name, uint32_t value)
Definition CTFTypes.h:121
CTFEnum(lldb::user_id_t uid, llvm::StringRef name, uint32_t nelems, uint32_t size, std::vector< Value > values)
Definition CTFTypes.h:126
static bool classof(const CTFType *T)
Definition CTFTypes.h:133
std::vector< Value > values
Definition CTFTypes.h:137
static bool classof(const CTFType *T)
Definition CTFTypes.h:200
CTFForward(lldb::user_id_t uid, llvm::StringRef name)
Definition CTFTypes.h:197
CTFFunction(lldb::user_id_t uid, llvm::StringRef name, uint32_t nargs, uint32_t return_type, std::vector< uint32_t > args, bool variadic)
Definition CTFTypes.h:141
std::vector< uint32_t > args
Definition CTFTypes.h:151
static bool classof(const CTFType *T)
Definition CTFTypes.h:146
static bool classof(const CTFType *T)
Definition CTFTypes.h:51
CTFInteger(lldb::user_id_t uid, llvm::StringRef name, uint32_t bits, uint32_t encoding)
Definition CTFTypes.h:47
static bool classof(const CTFType *T)
Definition CTFTypes.h:62
CTFModifier(Kind kind, lldb::user_id_t uid, uint32_t type)
Definition CTFTypes.h:59
CTFPointer(lldb::user_id_t uid, uint32_t type)
Definition CTFTypes.h:72
static bool classof(const CTFType *T)
Definition CTFTypes.h:75
Field(llvm::StringRef name, uint32_t type, uint64_t offset)
Definition CTFTypes.h:158
static bool classof(const CTFType *T)
Definition CTFTypes.h:171
CTFRecord(Kind kind, lldb::user_id_t uid, llvm::StringRef name, uint32_t nfields, uint32_t size, std::vector< Field > fields)
Definition CTFTypes.h:166
std::vector< Field > fields
Definition CTFTypes.h:177
CTFRestrict(lldb::user_id_t uid, uint32_t type)
Definition CTFTypes.h:93
static bool classof(const CTFType *T)
Definition CTFTypes.h:95
static bool classof(const CTFType *T)
Definition CTFTypes.h:185
CTFStruct(lldb::user_id_t uid, llvm::StringRef name, uint32_t nfields, uint32_t size, std::vector< Field > fields)
Definition CTFTypes.h:181
llvm::StringRef name
Definition CTFTypes.h:40
CTFType(Kind kind, lldb::user_id_t uid, llvm::StringRef name)
Definition CTFTypes.h:42
lldb::user_id_t uid
Definition CTFTypes.h:39
static bool classof(const CTFType *T)
Definition CTFTypes.h:102
CTFTypedef(lldb::user_id_t uid, llvm::StringRef name, uint32_t type)
Definition CTFTypes.h:99
CTFUnion(lldb::user_id_t uid, llvm::StringRef name, uint32_t nfields, uint32_t size, std::vector< Field > fields)
Definition CTFTypes.h:189
static bool classof(const CTFType *T)
Definition CTFTypes.h:193
CTFVolatile(lldb::user_id_t uid, uint32_t type)
Definition CTFTypes.h:86
static bool classof(const CTFType *T)
Definition CTFTypes.h:89