libdatadog 10.0.0.1.0-x86_64-linux → 11.0.0.1.0-x86_64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/libdatadog/version.rb +1 -1
- data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/LICENSE-3rdparty.yml +6302 -1137
- data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/bin/libdatadog-crashtracking-receiver +0 -0
- data/vendor/libdatadog-11.0.0/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/include/datadog/blazesym.h +1229 -0
- data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/include/datadog/common.h +32 -17
- data/vendor/{libdatadog-10.0.0/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl → libdatadog-11.0.0/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu}/include/datadog/profiling.h +31 -4
- data/vendor/libdatadog-11.0.0/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so +0 -0
- data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/LICENSE-3rdparty.yml +6302 -1137
- data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/bin/libdatadog-crashtracking-receiver +0 -0
- data/vendor/libdatadog-11.0.0/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/include/datadog/blazesym.h +1229 -0
- data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/include/datadog/common.h +32 -17
- data/vendor/{libdatadog-10.0.0/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu → libdatadog-11.0.0/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl}/include/datadog/profiling.h +31 -4
- data/vendor/libdatadog-11.0.0/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/lib/libdatadog_profiling.so +0 -0
- metadata +23 -23
- data/vendor/libdatadog-10.0.0/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/include/datadog/blazesym.h +0 -895
- data/vendor/libdatadog-10.0.0/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so +0 -0
- data/vendor/libdatadog-10.0.0/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/include/datadog/blazesym.h +0 -895
- data/vendor/libdatadog-10.0.0/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/lib/libdatadog_profiling.so +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/LICENSE +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/NOTICE +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/include/datadog/telemetry.h +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux/libdatadog-x86_64-unknown-linux-gnu/lib/pkgconfig/datadog_profiling_with_rpath.pc +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/LICENSE +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/NOTICE +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/include/datadog/telemetry.h +0 -0
- /data/vendor/{libdatadog-10.0.0 → libdatadog-11.0.0}/x86_64-linux-musl/libdatadog-x86_64-alpine-linux-musl/lib/pkgconfig/datadog_profiling_with_rpath.pc +0 -0
@@ -1,895 +0,0 @@
|
|
1
|
-
// BSD-3-Clause License
|
2
|
-
// Synchronized from blazesym repository
|
3
|
-
#ifndef __blazesym_h_
|
4
|
-
#define __blazesym_h_
|
5
|
-
|
6
|
-
#include <stdarg.h>
|
7
|
-
#include <stdbool.h>
|
8
|
-
#include <stddef.h>
|
9
|
-
#include <stdint.h>
|
10
|
-
#include <stdlib.h>
|
11
|
-
/* Helper macro to declare and initialize a blazesym input struct.
|
12
|
-
*
|
13
|
-
* Inspired by `LIBBPF_OPTS` macro provided by libbpf.
|
14
|
-
*/
|
15
|
-
#define BLAZE_INPUT(TYPE, NAME, ...) \
|
16
|
-
struct TYPE NAME = ({ \
|
17
|
-
(struct TYPE) { \
|
18
|
-
.type_size = sizeof(struct TYPE), \
|
19
|
-
__VA_ARGS__ \
|
20
|
-
}; \
|
21
|
-
})
|
22
|
-
|
23
|
-
|
24
|
-
/**
|
25
|
-
* The type of a symbol.
|
26
|
-
*/
|
27
|
-
enum blaze_sym_type
|
28
|
-
#ifdef __cplusplus
|
29
|
-
: uint8_t
|
30
|
-
#endif // __cplusplus
|
31
|
-
{
|
32
|
-
/**
|
33
|
-
* The symbol type is unspecified or unknown.
|
34
|
-
*
|
35
|
-
* In input contexts this variant can be used to encompass all
|
36
|
-
* other variants (functions and variables), whereas in output
|
37
|
-
* contexts it means that the type is not known.
|
38
|
-
*/
|
39
|
-
BLAZE_SYM_UNDEF,
|
40
|
-
/**
|
41
|
-
* The symbol is a function.
|
42
|
-
*/
|
43
|
-
BLAZE_SYM_FUNC,
|
44
|
-
/**
|
45
|
-
* The symbol is a variable.
|
46
|
-
*/
|
47
|
-
BLAZE_SYM_VAR,
|
48
|
-
};
|
49
|
-
#ifndef __cplusplus
|
50
|
-
typedef uint8_t blaze_sym_type;
|
51
|
-
#endif // __cplusplus
|
52
|
-
|
53
|
-
/**
|
54
|
-
* The valid variant kind in [`blaze_user_meta`].
|
55
|
-
*/
|
56
|
-
typedef enum blaze_user_meta_kind {
|
57
|
-
/**
|
58
|
-
* [`blaze_user_meta_variant::unknown`] is valid.
|
59
|
-
*/
|
60
|
-
BLAZE_USER_META_UNKNOWN,
|
61
|
-
/**
|
62
|
-
* [`blaze_user_meta_variant::apk`] is valid.
|
63
|
-
*/
|
64
|
-
BLAZE_USER_META_APK,
|
65
|
-
/**
|
66
|
-
* [`blaze_user_meta_variant::elf`] is valid.
|
67
|
-
*/
|
68
|
-
BLAZE_USER_META_ELF,
|
69
|
-
} blaze_user_meta_kind;
|
70
|
-
|
71
|
-
/**
|
72
|
-
* Information about a looked up symbol.
|
73
|
-
*/
|
74
|
-
typedef struct blaze_sym_info {
|
75
|
-
/**
|
76
|
-
* See [`inspect::SymInfo::name`].
|
77
|
-
*/
|
78
|
-
const char *name;
|
79
|
-
/**
|
80
|
-
* See [`inspect::SymInfo::addr`].
|
81
|
-
*/
|
82
|
-
uintptr_t addr;
|
83
|
-
/**
|
84
|
-
* See [`inspect::SymInfo::size`].
|
85
|
-
*/
|
86
|
-
size_t size;
|
87
|
-
/**
|
88
|
-
* See [`inspect::SymInfo::file_offset`].
|
89
|
-
*/
|
90
|
-
uint64_t file_offset;
|
91
|
-
/**
|
92
|
-
* See [`inspect::SymInfo::obj_file_name`].
|
93
|
-
*/
|
94
|
-
const char *obj_file_name;
|
95
|
-
/**
|
96
|
-
* See [`inspect::SymInfo::sym_type`].
|
97
|
-
*/
|
98
|
-
blaze_sym_type sym_type;
|
99
|
-
/**
|
100
|
-
* Unused member available for future expansion.
|
101
|
-
*/
|
102
|
-
uint8_t reserved[15];
|
103
|
-
} blaze_sym_info;
|
104
|
-
|
105
|
-
/**
|
106
|
-
* C ABI compatible version of [`blazesym::inspect::Inspector`].
|
107
|
-
*/
|
108
|
-
typedef struct blaze_inspector blaze_inspector;
|
109
|
-
|
110
|
-
/**
|
111
|
-
* An object representing an ELF inspection source.
|
112
|
-
*
|
113
|
-
* C ABI compatible version of [`inspect::Elf`].
|
114
|
-
*/
|
115
|
-
typedef struct blaze_inspect_elf_src {
|
116
|
-
/**
|
117
|
-
* The size of this object's type.
|
118
|
-
*
|
119
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
120
|
-
* ensure compatibility in the presence of member additions.
|
121
|
-
*/
|
122
|
-
size_t type_size;
|
123
|
-
/**
|
124
|
-
* The path to the ELF file. This member is always present.
|
125
|
-
*/
|
126
|
-
const char *path;
|
127
|
-
/**
|
128
|
-
* Whether or not to consult debug symbols to satisfy the request
|
129
|
-
* (if present).
|
130
|
-
*/
|
131
|
-
bool debug_syms;
|
132
|
-
/**
|
133
|
-
* Unused member available for future expansion. Must be initialized
|
134
|
-
* to zero.
|
135
|
-
*/
|
136
|
-
uint8_t reserved[7];
|
137
|
-
} blaze_inspect_elf_src;
|
138
|
-
|
139
|
-
/**
|
140
|
-
* C ABI compatible version of [`blazesym::normalize::Normalizer`].
|
141
|
-
*/
|
142
|
-
typedef struct blaze_normalizer blaze_normalizer;
|
143
|
-
|
144
|
-
/**
|
145
|
-
* Options for configuring [`blaze_normalizer`] objects.
|
146
|
-
*/
|
147
|
-
typedef struct blaze_normalizer_opts {
|
148
|
-
/**
|
149
|
-
* The size of this object's type.
|
150
|
-
*
|
151
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
152
|
-
* ensure compatibility in the presence of member additions.
|
153
|
-
*/
|
154
|
-
size_t type_size;
|
155
|
-
/**
|
156
|
-
* Whether to read and report build IDs as part of the normalization
|
157
|
-
* process.
|
158
|
-
*/
|
159
|
-
bool build_ids;
|
160
|
-
/**
|
161
|
-
* Unused member available for future expansion. Must be initialized
|
162
|
-
* to zero.
|
163
|
-
*/
|
164
|
-
uint8_t reserved[7];
|
165
|
-
} blaze_normalizer_opts;
|
166
|
-
|
167
|
-
/**
|
168
|
-
* C compatible version of [`Apk`].
|
169
|
-
*/
|
170
|
-
typedef struct blaze_user_meta_apk {
|
171
|
-
/**
|
172
|
-
* The canonical absolute path to the APK, including its name.
|
173
|
-
* This member is always present.
|
174
|
-
*/
|
175
|
-
char *path;
|
176
|
-
/**
|
177
|
-
* Unused member available for future expansion.
|
178
|
-
*/
|
179
|
-
uint8_t reserved[8];
|
180
|
-
} blaze_user_meta_apk;
|
181
|
-
|
182
|
-
/**
|
183
|
-
* C compatible version of [`Elf`].
|
184
|
-
*/
|
185
|
-
typedef struct blaze_user_meta_elf {
|
186
|
-
/**
|
187
|
-
* The path to the ELF file. This member is always present.
|
188
|
-
*/
|
189
|
-
char *path;
|
190
|
-
/**
|
191
|
-
* The length of the build ID, in bytes.
|
192
|
-
*/
|
193
|
-
size_t build_id_len;
|
194
|
-
/**
|
195
|
-
* The optional build ID of the ELF file, if found.
|
196
|
-
*/
|
197
|
-
uint8_t *build_id;
|
198
|
-
/**
|
199
|
-
* Unused member available for future expansion.
|
200
|
-
*/
|
201
|
-
uint8_t reserved[8];
|
202
|
-
} blaze_user_meta_elf;
|
203
|
-
|
204
|
-
/**
|
205
|
-
* C compatible version of [`Unknown`].
|
206
|
-
*/
|
207
|
-
typedef struct blaze_user_meta_unknown {
|
208
|
-
/**
|
209
|
-
* Unused member available for future expansion.
|
210
|
-
*/
|
211
|
-
uint8_t reserved[8];
|
212
|
-
} blaze_user_meta_unknown;
|
213
|
-
|
214
|
-
/**
|
215
|
-
* The actual variant data in [`blaze_user_meta`].
|
216
|
-
*/
|
217
|
-
typedef union blaze_user_meta_variant {
|
218
|
-
/**
|
219
|
-
* Valid on [`blaze_user_meta_kind::BLAZE_USER_META_APK`].
|
220
|
-
*/
|
221
|
-
struct blaze_user_meta_apk apk;
|
222
|
-
/**
|
223
|
-
* Valid on [`blaze_user_meta_kind::BLAZE_USER_META_ELF`].
|
224
|
-
*/
|
225
|
-
struct blaze_user_meta_elf elf;
|
226
|
-
/**
|
227
|
-
* Valid on [`blaze_user_meta_kind::BLAZE_USER_META_UNKNOWN`].
|
228
|
-
*/
|
229
|
-
struct blaze_user_meta_unknown unknown;
|
230
|
-
} blaze_user_meta_variant;
|
231
|
-
|
232
|
-
/**
|
233
|
-
* C ABI compatible version of [`UserMeta`].
|
234
|
-
*/
|
235
|
-
typedef struct blaze_user_meta {
|
236
|
-
/**
|
237
|
-
* The variant kind that is present.
|
238
|
-
*/
|
239
|
-
enum blaze_user_meta_kind kind;
|
240
|
-
/**
|
241
|
-
* The actual variant with its data.
|
242
|
-
*/
|
243
|
-
union blaze_user_meta_variant variant;
|
244
|
-
} blaze_user_meta;
|
245
|
-
|
246
|
-
/**
|
247
|
-
* A file offset or non-normalized address along with an index into the
|
248
|
-
* associated [`blaze_user_meta`] array (such as
|
249
|
-
* [`blaze_normalized_user_output::metas`]).
|
250
|
-
*/
|
251
|
-
typedef struct blaze_normalized_output {
|
252
|
-
/**
|
253
|
-
* The file offset or non-normalized address.
|
254
|
-
*/
|
255
|
-
uint64_t output;
|
256
|
-
/**
|
257
|
-
* The index into the associated [`blaze_user_meta`] array.
|
258
|
-
*/
|
259
|
-
size_t meta_idx;
|
260
|
-
} blaze_normalized_output;
|
261
|
-
|
262
|
-
/**
|
263
|
-
* An object representing normalized user addresses.
|
264
|
-
*
|
265
|
-
* C ABI compatible version of [`UserOutput`].
|
266
|
-
*/
|
267
|
-
typedef struct blaze_normalized_user_output {
|
268
|
-
/**
|
269
|
-
* The number of [`blaze_user_meta`] objects present in `metas`.
|
270
|
-
*/
|
271
|
-
size_t meta_cnt;
|
272
|
-
/**
|
273
|
-
* An array of `meta_cnt` objects.
|
274
|
-
*/
|
275
|
-
struct blaze_user_meta *metas;
|
276
|
-
/**
|
277
|
-
* The number of [`blaze_normalized_output`] objects present in `outputs`.
|
278
|
-
*/
|
279
|
-
size_t output_cnt;
|
280
|
-
/**
|
281
|
-
* An array of `output_cnt` objects.
|
282
|
-
*/
|
283
|
-
struct blaze_normalized_output *outputs;
|
284
|
-
/**
|
285
|
-
* Unused member available for future expansion.
|
286
|
-
*/
|
287
|
-
uint8_t reserved[8];
|
288
|
-
} blaze_normalized_user_output;
|
289
|
-
|
290
|
-
/**
|
291
|
-
* C ABI compatible version of [`blazesym::symbolize::Symbolizer`].
|
292
|
-
*
|
293
|
-
* It is returned by [`blaze_symbolizer_new`] and should be free by
|
294
|
-
* [`blaze_symbolizer_free`].
|
295
|
-
*/
|
296
|
-
typedef struct blaze_symbolizer blaze_symbolizer;
|
297
|
-
|
298
|
-
/**
|
299
|
-
* Options for configuring [`blaze_symbolizer`] objects.
|
300
|
-
*/
|
301
|
-
typedef struct blaze_symbolizer_opts {
|
302
|
-
/**
|
303
|
-
* The size of this object's type.
|
304
|
-
*
|
305
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
306
|
-
* ensure compatibility in the presence of member additions.
|
307
|
-
*/
|
308
|
-
size_t type_size;
|
309
|
-
/**
|
310
|
-
* Whether or not to automatically reload file system based
|
311
|
-
* symbolization sources that were updated since the last
|
312
|
-
* symbolization operation.
|
313
|
-
*/
|
314
|
-
bool auto_reload;
|
315
|
-
/**
|
316
|
-
* Whether to attempt to gather source code location information.
|
317
|
-
*
|
318
|
-
* This setting implies `debug_syms` (and forces it to `true`).
|
319
|
-
*/
|
320
|
-
bool code_info;
|
321
|
-
/**
|
322
|
-
* Whether to report inlined functions as part of symbolization.
|
323
|
-
*/
|
324
|
-
bool inlined_fns;
|
325
|
-
/**
|
326
|
-
* Whether or not to transparently demangle symbols.
|
327
|
-
*
|
328
|
-
* Demangling happens on a best-effort basis. Currently supported
|
329
|
-
* languages are Rust and C++ and the flag will have no effect if
|
330
|
-
* the underlying language does not mangle symbols (such as C).
|
331
|
-
*/
|
332
|
-
bool demangle;
|
333
|
-
/**
|
334
|
-
* Unused member available for future expansion. Must be initialized
|
335
|
-
* to zero.
|
336
|
-
*/
|
337
|
-
uint8_t reserved[4];
|
338
|
-
} blaze_symbolizer_opts;
|
339
|
-
|
340
|
-
/**
|
341
|
-
* Source code location information for a symbol or inlined function.
|
342
|
-
*/
|
343
|
-
typedef struct blaze_symbolize_code_info {
|
344
|
-
/**
|
345
|
-
* The directory in which the source file resides.
|
346
|
-
*
|
347
|
-
* This attribute is optional and may be NULL.
|
348
|
-
*/
|
349
|
-
const char *dir;
|
350
|
-
/**
|
351
|
-
* The file that defines the symbol.
|
352
|
-
*
|
353
|
-
* This attribute is optional and may be NULL.
|
354
|
-
*/
|
355
|
-
const char *file;
|
356
|
-
/**
|
357
|
-
* The line number on which the symbol is located in the source
|
358
|
-
* code.
|
359
|
-
*/
|
360
|
-
uint32_t line;
|
361
|
-
/**
|
362
|
-
* The column number of the symbolized instruction in the source
|
363
|
-
* code.
|
364
|
-
*/
|
365
|
-
uint16_t column;
|
366
|
-
/**
|
367
|
-
* Unused member available for future expansion.
|
368
|
-
*/
|
369
|
-
uint8_t reserved[10];
|
370
|
-
} blaze_symbolize_code_info;
|
371
|
-
|
372
|
-
/**
|
373
|
-
* Data about an inlined function call.
|
374
|
-
*/
|
375
|
-
typedef struct blaze_symbolize_inlined_fn {
|
376
|
-
/**
|
377
|
-
* The symbol name of the inlined function.
|
378
|
-
*/
|
379
|
-
const char *name;
|
380
|
-
/**
|
381
|
-
* Source code location information for the inlined function.
|
382
|
-
*/
|
383
|
-
struct blaze_symbolize_code_info code_info;
|
384
|
-
/**
|
385
|
-
* Unused member available for future expansion.
|
386
|
-
*/
|
387
|
-
uint8_t reserved[8];
|
388
|
-
} blaze_symbolize_inlined_fn;
|
389
|
-
|
390
|
-
/**
|
391
|
-
* The result of symbolization of an address.
|
392
|
-
*
|
393
|
-
* A `blaze_sym` is the information of a symbol found for an
|
394
|
-
* address.
|
395
|
-
*/
|
396
|
-
typedef struct blaze_sym {
|
397
|
-
/**
|
398
|
-
* The symbol name is where the given address should belong to.
|
399
|
-
*
|
400
|
-
* If an address could not be symbolized, this member will be NULL.
|
401
|
-
*/
|
402
|
-
const char *name;
|
403
|
-
/**
|
404
|
-
* The address at which the symbol is located (i.e., its "start").
|
405
|
-
*
|
406
|
-
* This is the "normalized" address of the symbol, as present in
|
407
|
-
* the file (and reported by tools such as `readelf(1)`,
|
408
|
-
* `llvm-gsymutil`, or similar).
|
409
|
-
*/
|
410
|
-
uintptr_t addr;
|
411
|
-
/**
|
412
|
-
* The byte offset of the address that got symbolized from the
|
413
|
-
* start of the symbol (i.e., from `addr`).
|
414
|
-
*
|
415
|
-
* E.g., when normalizing address 0x1337 of a function that starts at
|
416
|
-
* 0x1330, the offset will be set to 0x07 (and `addr` will be 0x1330). This
|
417
|
-
* member is especially useful in contexts when input addresses are not
|
418
|
-
* already normalized, such as when normalizing an address in a process
|
419
|
-
* context (which may have been relocated and/or have layout randomizations
|
420
|
-
* applied).
|
421
|
-
*/
|
422
|
-
size_t offset;
|
423
|
-
/**
|
424
|
-
* Source code location information for the symbol.
|
425
|
-
*/
|
426
|
-
struct blaze_symbolize_code_info code_info;
|
427
|
-
/**
|
428
|
-
* The number of symbolized inlined function calls present.
|
429
|
-
*/
|
430
|
-
size_t inlined_cnt;
|
431
|
-
/**
|
432
|
-
* An array of `inlined_cnt` symbolized inlined function calls.
|
433
|
-
*/
|
434
|
-
const struct blaze_symbolize_inlined_fn *inlined;
|
435
|
-
/**
|
436
|
-
* Unused member available for future expansion.
|
437
|
-
*/
|
438
|
-
uint8_t reserved[8];
|
439
|
-
} blaze_sym;
|
440
|
-
|
441
|
-
/**
|
442
|
-
* `blaze_result` is the result of symbolization for C API.
|
443
|
-
*
|
444
|
-
* Instances of [`blaze_result`] are returned by any of the `blaze_symbolize_*`
|
445
|
-
* variants. They should be freed by calling [`blaze_result_free`].
|
446
|
-
*/
|
447
|
-
typedef struct blaze_result {
|
448
|
-
/**
|
449
|
-
* The number of symbols being reported.
|
450
|
-
*/
|
451
|
-
size_t cnt;
|
452
|
-
/**
|
453
|
-
* The symbols corresponding to input addresses.
|
454
|
-
*
|
455
|
-
* Symbolization happens based on the ordering of (input) addresses.
|
456
|
-
* Therefore, every input address has an associated symbol.
|
457
|
-
*/
|
458
|
-
struct blaze_sym syms[0];
|
459
|
-
} blaze_result;
|
460
|
-
|
461
|
-
/**
|
462
|
-
* The parameters to load symbols and debug information from a process.
|
463
|
-
*
|
464
|
-
* Load all ELF files in a process as the sources of symbols and debug
|
465
|
-
* information.
|
466
|
-
*/
|
467
|
-
typedef struct blaze_symbolize_src_process {
|
468
|
-
/**
|
469
|
-
* The size of this object's type.
|
470
|
-
*
|
471
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
472
|
-
* ensure compatibility in the presence of member additions.
|
473
|
-
*/
|
474
|
-
size_t type_size;
|
475
|
-
/**
|
476
|
-
* It is the PID of a process to symbolize.
|
477
|
-
*
|
478
|
-
* blazesym will parse `/proc/<pid>/maps` and load all the object
|
479
|
-
* files.
|
480
|
-
*/
|
481
|
-
uint32_t pid;
|
482
|
-
/**
|
483
|
-
* Whether or not to consult debug symbols to satisfy the request
|
484
|
-
* (if present).
|
485
|
-
*/
|
486
|
-
bool debug_syms;
|
487
|
-
/**
|
488
|
-
* Whether to incorporate a process' perf map file into the symbolization
|
489
|
-
* procedure.
|
490
|
-
*/
|
491
|
-
bool perf_map;
|
492
|
-
/**
|
493
|
-
* Whether to work with `/proc/<pid>/map_files/` entries or with
|
494
|
-
* symbolic paths mentioned in `/proc/<pid>/maps` instead.
|
495
|
-
* `map_files` usage is generally strongly encouraged, as symbolic
|
496
|
-
* path usage is unlikely to work reliably in mount namespace
|
497
|
-
* contexts or when files have been deleted from the file system.
|
498
|
-
* However, by using symbolic paths the need for requiring the
|
499
|
-
* `SYS_ADMIN` capability is eliminated.
|
500
|
-
*/
|
501
|
-
bool map_files;
|
502
|
-
/**
|
503
|
-
* Unused member available for future expansion. Must be initialized
|
504
|
-
* to zero.
|
505
|
-
*/
|
506
|
-
uint8_t reserved[1];
|
507
|
-
} blaze_symbolize_src_process;
|
508
|
-
|
509
|
-
/**
|
510
|
-
* The parameters to load symbols and debug information from a kernel.
|
511
|
-
*
|
512
|
-
* Use a kernel image and a snapshot of its kallsyms as a source of symbols and
|
513
|
-
* debug information.
|
514
|
-
*/
|
515
|
-
typedef struct blaze_symbolize_src_kernel {
|
516
|
-
/**
|
517
|
-
* The size of this object's type.
|
518
|
-
*
|
519
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
520
|
-
* ensure compatibility in the presence of member additions.
|
521
|
-
*/
|
522
|
-
size_t type_size;
|
523
|
-
/**
|
524
|
-
* The path of a copy of kallsyms.
|
525
|
-
*
|
526
|
-
* It can be `"/proc/kallsyms"` for the running kernel on the
|
527
|
-
* device. However, you can make copies for later. In that situation,
|
528
|
-
* you should give the path of a copy.
|
529
|
-
* Passing a `NULL`, by default, will result in `"/proc/kallsyms"`.
|
530
|
-
*/
|
531
|
-
const char *kallsyms;
|
532
|
-
/**
|
533
|
-
* The path of a kernel image.
|
534
|
-
*
|
535
|
-
* The path of a kernel image should be, for instance,
|
536
|
-
* `"/boot/vmlinux-xxxx"`. For a `NULL` value, it will locate the
|
537
|
-
* kernel image of the running kernel in `"/boot/"` or
|
538
|
-
* `"/usr/lib/debug/boot/"`.
|
539
|
-
*/
|
540
|
-
const char *kernel_image;
|
541
|
-
/**
|
542
|
-
* Whether or not to consult debug symbols from `kernel_image`
|
543
|
-
* to satisfy the request (if present).
|
544
|
-
*/
|
545
|
-
bool debug_syms;
|
546
|
-
/**
|
547
|
-
* Unused member available for future expansion. Must be initialized
|
548
|
-
* to zero.
|
549
|
-
*/
|
550
|
-
uint8_t reserved[7];
|
551
|
-
} blaze_symbolize_src_kernel;
|
552
|
-
|
553
|
-
/**
|
554
|
-
* The parameters to load symbols and debug information from an ELF.
|
555
|
-
*
|
556
|
-
* Describes the path and address of an ELF file loaded in a
|
557
|
-
* process.
|
558
|
-
*/
|
559
|
-
typedef struct blaze_symbolize_src_elf {
|
560
|
-
/**
|
561
|
-
* The size of this object's type.
|
562
|
-
*
|
563
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
564
|
-
* ensure compatibility in the presence of member additions.
|
565
|
-
*/
|
566
|
-
size_t type_size;
|
567
|
-
/**
|
568
|
-
* The path to the ELF file.
|
569
|
-
*
|
570
|
-
* The referenced file may be an executable or shared object. For example,
|
571
|
-
* passing "/bin/sh" will load symbols and debug information from `sh` and
|
572
|
-
* passing "/lib/libc.so.xxx" will load symbols and debug information from
|
573
|
-
* libc.
|
574
|
-
*/
|
575
|
-
const char *path;
|
576
|
-
/**
|
577
|
-
* Whether or not to consult debug symbols to satisfy the request
|
578
|
-
* (if present).
|
579
|
-
*/
|
580
|
-
bool debug_syms;
|
581
|
-
/**
|
582
|
-
* Unused member available for future expansion. Must be initialized
|
583
|
-
* to zero.
|
584
|
-
*/
|
585
|
-
uint8_t reserved[7];
|
586
|
-
} blaze_symbolize_src_elf;
|
587
|
-
|
588
|
-
/**
|
589
|
-
* The parameters to load symbols and debug information from "raw" Gsym data.
|
590
|
-
*/
|
591
|
-
typedef struct blaze_symbolize_src_gsym_data {
|
592
|
-
/**
|
593
|
-
* The size of this object's type.
|
594
|
-
*
|
595
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
596
|
-
* ensure compatibility in the presence of member additions.
|
597
|
-
*/
|
598
|
-
size_t type_size;
|
599
|
-
/**
|
600
|
-
* The Gsym data.
|
601
|
-
*/
|
602
|
-
const uint8_t *data;
|
603
|
-
/**
|
604
|
-
* The size of the Gsym data.
|
605
|
-
*/
|
606
|
-
size_t data_len;
|
607
|
-
} blaze_symbolize_src_gsym_data;
|
608
|
-
|
609
|
-
/**
|
610
|
-
* The parameters to load symbols and debug information from a Gsym file.
|
611
|
-
*/
|
612
|
-
typedef struct blaze_symbolize_src_gsym_file {
|
613
|
-
/**
|
614
|
-
* The size of this object's type.
|
615
|
-
*
|
616
|
-
* Make sure to initialize it to `sizeof(<type>)`. This member is used to
|
617
|
-
* ensure compatibility in the presence of member additions.
|
618
|
-
*/
|
619
|
-
size_t type_size;
|
620
|
-
/**
|
621
|
-
* The path to a gsym file.
|
622
|
-
*/
|
623
|
-
const char *path;
|
624
|
-
} blaze_symbolize_src_gsym_file;
|
625
|
-
|
626
|
-
#ifdef __cplusplus
|
627
|
-
extern "C" {
|
628
|
-
#endif // __cplusplus
|
629
|
-
|
630
|
-
/**
|
631
|
-
* Lookup symbol information in an ELF file.
|
632
|
-
*
|
633
|
-
* Return an array with the same size as the input names. The caller should
|
634
|
-
* free the returned array by calling [`blaze_inspect_syms_free`].
|
635
|
-
*
|
636
|
-
* Every name in the input name list may have more than one address.
|
637
|
-
* The respective entry in the returned array is an array containing
|
638
|
-
* all addresses and ended with a null (0x0).
|
639
|
-
*
|
640
|
-
* The returned pointer should be freed by [`blaze_inspect_syms_free`].
|
641
|
-
*
|
642
|
-
* # Safety
|
643
|
-
* The `inspector` object should have been created using
|
644
|
-
* [`blaze_inspector_new`], `src` needs to point to a valid object, and `names`
|
645
|
-
* needs to be a valid pointer to `name_cnt` strings.
|
646
|
-
*/
|
647
|
-
const struct blaze_sym_info *const *blaze_inspect_syms_elf(const blaze_inspector *inspector,
|
648
|
-
const struct blaze_inspect_elf_src *src,
|
649
|
-
const char *const *names,
|
650
|
-
size_t name_cnt);
|
651
|
-
|
652
|
-
/**
|
653
|
-
* Free an array returned by [`blaze_inspect_syms_elf`].
|
654
|
-
*
|
655
|
-
* # Safety
|
656
|
-
*
|
657
|
-
* The pointer must be returned by [`blaze_inspect_syms_elf`].
|
658
|
-
*/
|
659
|
-
void blaze_inspect_syms_free(const struct blaze_sym_info *const *syms);
|
660
|
-
|
661
|
-
/**
|
662
|
-
* Create an instance of a blazesym inspector.
|
663
|
-
*
|
664
|
-
* The returned pointer should be released using
|
665
|
-
* [`blaze_inspector_free`] once it is no longer needed.
|
666
|
-
*/
|
667
|
-
blaze_inspector *blaze_inspector_new(void);
|
668
|
-
|
669
|
-
/**
|
670
|
-
* Free a blazesym inspector.
|
671
|
-
*
|
672
|
-
* Release resources associated with a inspector as created by
|
673
|
-
* [`blaze_inspector_new`], for example.
|
674
|
-
*
|
675
|
-
* # Safety
|
676
|
-
* The provided inspector should have been created by
|
677
|
-
* [`blaze_inspector_new`].
|
678
|
-
*/
|
679
|
-
void blaze_inspector_free(blaze_inspector *inspector);
|
680
|
-
|
681
|
-
/**
|
682
|
-
* Create an instance of a blazesym normalizer.
|
683
|
-
*
|
684
|
-
* The returned pointer should be released using [`blaze_normalizer_free`] once
|
685
|
-
* it is no longer needed.
|
686
|
-
*/
|
687
|
-
blaze_normalizer *blaze_normalizer_new(void);
|
688
|
-
|
689
|
-
/**
|
690
|
-
* Create an instance of a blazesym normalizer.
|
691
|
-
*
|
692
|
-
* The returned pointer should be released using [`blaze_normalizer_free`] once
|
693
|
-
* it is no longer needed.
|
694
|
-
*
|
695
|
-
* # Safety
|
696
|
-
* The provided pointer needs to point to a valid [`blaze_normalizer_opts`]
|
697
|
-
* instance.
|
698
|
-
*/
|
699
|
-
blaze_normalizer *blaze_normalizer_new_opts(const struct blaze_normalizer_opts *opts);
|
700
|
-
|
701
|
-
/**
|
702
|
-
* Free a blazesym normalizer.
|
703
|
-
*
|
704
|
-
* Release resources associated with a normalizer as created by
|
705
|
-
* [`blaze_normalizer_new`], for example.
|
706
|
-
*
|
707
|
-
* # Safety
|
708
|
-
* The provided normalizer should have been created by
|
709
|
-
* [`blaze_normalizer_new`].
|
710
|
-
*/
|
711
|
-
void blaze_normalizer_free(blaze_normalizer *normalizer);
|
712
|
-
|
713
|
-
/**
|
714
|
-
* Normalize a list of user space addresses.
|
715
|
-
*
|
716
|
-
* Contrary to [`blaze_normalize_user_addrs_sorted`] the provided
|
717
|
-
* `addrs` array does not have to be sorted, but otherwise the
|
718
|
-
* functions behave identically. If you happen to know that `addrs` is
|
719
|
-
* sorted, using [`blaze_normalize_user_addrs_sorted`] instead will
|
720
|
-
* result in slightly faster normalization.
|
721
|
-
*
|
722
|
-
* C ABI compatible version of [`Normalizer::normalize_user_addrs`].
|
723
|
-
* Returns `NULL` on error. The resulting object should be freed using
|
724
|
-
* [`blaze_user_output_free`].
|
725
|
-
*
|
726
|
-
* # Safety
|
727
|
-
* Callers need to pass in a valid `addrs` pointer, pointing to memory of
|
728
|
-
* `addr_cnt` addresses.
|
729
|
-
*/
|
730
|
-
struct blaze_normalized_user_output *blaze_normalize_user_addrs(const blaze_normalizer *normalizer,
|
731
|
-
uint32_t pid,
|
732
|
-
const uintptr_t *addrs,
|
733
|
-
size_t addr_cnt);
|
734
|
-
|
735
|
-
/**
|
736
|
-
* Normalize a list of user space addresses.
|
737
|
-
*
|
738
|
-
* The `addrs` array has to be sorted in ascending order. By providing
|
739
|
-
* a pre-sorted array the library does not have to sort internally,
|
740
|
-
* which will result in quicker normalization. If you don't have sorted
|
741
|
-
* addresses, use [`blaze_normalize_user_addrs`] instead.
|
742
|
-
*
|
743
|
-
* `pid` should describe the PID of the process to which the addresses
|
744
|
-
* belongs. It may be `0` if they belong to the calling process.
|
745
|
-
*
|
746
|
-
* C ABI compatible version of [`Normalizer::normalize_user_addrs_sorted`].
|
747
|
-
* Returns `NULL` on error. The resulting object should be freed using
|
748
|
-
* [`blaze_user_output_free`].
|
749
|
-
*
|
750
|
-
* # Safety
|
751
|
-
* Callers need to pass in a valid `addrs` pointer, pointing to memory of
|
752
|
-
* `addr_cnt` addresses.
|
753
|
-
*/
|
754
|
-
struct blaze_normalized_user_output *blaze_normalize_user_addrs_sorted(const blaze_normalizer *normalizer,
|
755
|
-
uint32_t pid,
|
756
|
-
const uintptr_t *addrs,
|
757
|
-
size_t addr_cnt);
|
758
|
-
|
759
|
-
/**
|
760
|
-
* Free an object as returned by [`blaze_normalize_user_addrs`] or
|
761
|
-
* [`blaze_normalize_user_addrs_sorted`].
|
762
|
-
*
|
763
|
-
* # Safety
|
764
|
-
* The provided object should have been created by
|
765
|
-
* [`blaze_normalize_user_addrs`] or [`blaze_normalize_user_addrs_sorted`].
|
766
|
-
*/
|
767
|
-
void blaze_user_output_free(struct blaze_normalized_user_output *output);
|
768
|
-
|
769
|
-
/**
|
770
|
-
* Create an instance of a symbolizer.
|
771
|
-
*/
|
772
|
-
blaze_symbolizer *blaze_symbolizer_new(void);
|
773
|
-
|
774
|
-
/**
|
775
|
-
* Create an instance of a symbolizer with configurable options.
|
776
|
-
*
|
777
|
-
* # Safety
|
778
|
-
* `opts` needs to be a valid pointer.
|
779
|
-
*/
|
780
|
-
blaze_symbolizer *blaze_symbolizer_new_opts(const struct blaze_symbolizer_opts *opts);
|
781
|
-
|
782
|
-
/**
|
783
|
-
* Free an instance of blazesym a symbolizer for C API.
|
784
|
-
*
|
785
|
-
* # Safety
|
786
|
-
*
|
787
|
-
* The pointer must have been returned by [`blaze_symbolizer_new`] or
|
788
|
-
* [`blaze_symbolizer_new_opts`].
|
789
|
-
*/
|
790
|
-
void blaze_symbolizer_free(blaze_symbolizer *symbolizer);
|
791
|
-
|
792
|
-
/**
|
793
|
-
* Symbolize a list of process absolute addresses.
|
794
|
-
*
|
795
|
-
* Return an array of [`blaze_result`] with the same size as the number
|
796
|
-
* of input addresses. The caller should free the returned array by
|
797
|
-
* calling [`blaze_result_free`].
|
798
|
-
*
|
799
|
-
* # Safety
|
800
|
-
* `symbolizer` must have been allocated using [`blaze_symbolizer_new`] or
|
801
|
-
* [`blaze_symbolizer_new_opts`]. `src` must point to a valid
|
802
|
-
* [`blaze_symbolize_src_process`] object. `addrs` must represent an array of
|
803
|
-
* `addr_cnt` objects.
|
804
|
-
*/
|
805
|
-
const struct blaze_result *blaze_symbolize_process_abs_addrs(blaze_symbolizer *symbolizer,
|
806
|
-
const struct blaze_symbolize_src_process *src,
|
807
|
-
const uintptr_t *abs_addrs,
|
808
|
-
size_t abs_addr_cnt);
|
809
|
-
|
810
|
-
/**
|
811
|
-
* Symbolize a list of kernel absolute addresses.
|
812
|
-
*
|
813
|
-
* Return an array of [`blaze_result`] with the same size as the number
|
814
|
-
* of input addresses. The caller should free the returned array by
|
815
|
-
* calling [`blaze_result_free`].
|
816
|
-
*
|
817
|
-
* # Safety
|
818
|
-
* `symbolizer` must have been allocated using [`blaze_symbolizer_new`] or
|
819
|
-
* [`blaze_symbolizer_new_opts`]. `src` must point to a valid
|
820
|
-
* [`blaze_symbolize_src_kernel`] object. `addrs` must represent an array of
|
821
|
-
* `addr_cnt` objects.
|
822
|
-
*/
|
823
|
-
const struct blaze_result *blaze_symbolize_kernel_abs_addrs(blaze_symbolizer *symbolizer,
|
824
|
-
const struct blaze_symbolize_src_kernel *src,
|
825
|
-
const uintptr_t *abs_addrs,
|
826
|
-
size_t abs_addr_cnt);
|
827
|
-
|
828
|
-
/**
|
829
|
-
* Symbolize virtual offsets in an ELF file.
|
830
|
-
*
|
831
|
-
* Return an array of [`blaze_result`] with the same size as the number
|
832
|
-
* of input addresses. The caller should free the returned array by
|
833
|
-
* calling [`blaze_result_free`].
|
834
|
-
*
|
835
|
-
* # Safety
|
836
|
-
* `symbolizer` must have been allocated using [`blaze_symbolizer_new`] or
|
837
|
-
* [`blaze_symbolizer_new_opts`]. `src` must point to a valid
|
838
|
-
* [`blaze_symbolize_src_elf`] object. `addrs` must represent an array of
|
839
|
-
* `addr_cnt` objects.
|
840
|
-
*/
|
841
|
-
const struct blaze_result *blaze_symbolize_elf_virt_offsets(blaze_symbolizer *symbolizer,
|
842
|
-
const struct blaze_symbolize_src_elf *src,
|
843
|
-
const uintptr_t *virt_offsets,
|
844
|
-
size_t virt_offset_cnt);
|
845
|
-
|
846
|
-
/**
|
847
|
-
* Symbolize virtual offsets using "raw" Gsym data.
|
848
|
-
*
|
849
|
-
* Return an array of [`blaze_result`] with the same size as the
|
850
|
-
* number of input addresses. The caller should free the returned array by
|
851
|
-
* calling [`blaze_result_free`].
|
852
|
-
*
|
853
|
-
* # Safety
|
854
|
-
* `symbolizer` must have been allocated using [`blaze_symbolizer_new`] or
|
855
|
-
* [`blaze_symbolizer_new_opts`]. `src` must point to a valid
|
856
|
-
* [`blaze_symbolize_src_gsym_data`] object. `addrs` must represent an array of
|
857
|
-
* `addr_cnt` objects.
|
858
|
-
*/
|
859
|
-
const struct blaze_result *blaze_symbolize_gsym_data_virt_offsets(blaze_symbolizer *symbolizer,
|
860
|
-
const struct blaze_symbolize_src_gsym_data *src,
|
861
|
-
const uintptr_t *virt_offsets,
|
862
|
-
size_t virt_offset_cnt);
|
863
|
-
|
864
|
-
/**
|
865
|
-
* Symbolize virtual offsets in a Gsym file.
|
866
|
-
*
|
867
|
-
* Return an array of [`blaze_result`] with the same size as the number
|
868
|
-
* of input addresses. The caller should free the returned array by
|
869
|
-
* calling [`blaze_result_free`].
|
870
|
-
*
|
871
|
-
* # Safety
|
872
|
-
* `symbolizer` must have been allocated using [`blaze_symbolizer_new`] or
|
873
|
-
* [`blaze_symbolizer_new_opts`]. `src` must point to a valid
|
874
|
-
* [`blaze_symbolize_src_gsym_file`] object. `addrs` must represent an array of
|
875
|
-
* `addr_cnt` objects.
|
876
|
-
*/
|
877
|
-
const struct blaze_result *blaze_symbolize_gsym_file_virt_offsets(blaze_symbolizer *symbolizer,
|
878
|
-
const struct blaze_symbolize_src_gsym_file *src,
|
879
|
-
const uintptr_t *virt_offsets,
|
880
|
-
size_t virt_offset_cnt);
|
881
|
-
|
882
|
-
/**
|
883
|
-
* Free an array returned by any of the `blaze_symbolize_*` variants.
|
884
|
-
*
|
885
|
-
* # Safety
|
886
|
-
* The pointer must have been returned by any of the `blaze_symbolize_*`
|
887
|
-
* variants.
|
888
|
-
*/
|
889
|
-
void blaze_result_free(const struct blaze_result *results);
|
890
|
-
|
891
|
-
#ifdef __cplusplus
|
892
|
-
} // extern "C"
|
893
|
-
#endif // __cplusplus
|
894
|
-
|
895
|
-
#endif /* __blazesym_h_ */
|