libddprof 0.2.0.beta1-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.
Files changed (24) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.standard.yml +3 -0
  4. data/README.md +29 -0
  5. data/Rakefile +149 -0
  6. data/docker-compose.yml +14 -0
  7. data/gems.rb +13 -0
  8. data/lib/libddprof/version.rb +9 -0
  9. data/lib/libddprof.rb +30 -0
  10. data/vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/LICENSE +202 -0
  11. data/vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/LICENSE-3rdparty.yml +767 -0
  12. data/vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/NOTICE +4 -0
  13. data/vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/cmake/DDProfConfig.cmake +41 -0
  14. data/vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/include/ddprof/ffi.h +455 -0
  15. data/vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/lib/libddprof_ffi.a +0 -0
  16. data/vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/lib/pkgconfig/ddprof_ffi.pc +17 -0
  17. data/vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/LICENSE +202 -0
  18. data/vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/LICENSE-3rdparty.yml +767 -0
  19. data/vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/NOTICE +4 -0
  20. data/vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/cmake/DDProfConfig.cmake +41 -0
  21. data/vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/include/ddprof/ffi.h +455 -0
  22. data/vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/lib/libddprof_ffi.a +0 -0
  23. data/vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/lib/pkgconfig/ddprof_ffi.pc +17 -0
  24. metadata +70 -0
@@ -0,0 +1,4 @@
1
+ Datadog libddprof
2
+ Copyright 2021 Datadog, Inc.
3
+
4
+ This product includes software developed at Datadog (<https://www.datadoghq.com/>).
@@ -0,0 +1,41 @@
1
+ # Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
2
+ # This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2021-Present Datadog, Inc.
3
+ include(FindPackageHandleStandardArgs)
4
+
5
+ if (DEFINED ENV{DDProf_ROOT})
6
+ set(DDProf_ROOT "$ENV{DDProf_ROOT}")
7
+ else ()
8
+ # If the environment variable is not set, maybe we are part of a build
9
+ set(DDProf_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
10
+ endif ()
11
+
12
+ find_path(DDProf_INCLUDE_DIR ddprof/ffi.h
13
+ HINTS ${DDProf_ROOT}/include
14
+ )
15
+
16
+ find_library(DDProf_FFI_LIBRARY NAMES ddprof_ffi
17
+ HINTS ${DDProf_ROOT}/lib
18
+ )
19
+
20
+ find_package_handle_standard_args(DDProf DEFAULT_MSG
21
+ DDProf_FFI_LIBRARY
22
+ DDProf_INCLUDE_DIR
23
+ )
24
+
25
+ if (DDProf_FOUND)
26
+ set(DDProf_INCLUDE_DIRS ${DDProf_INCLUDE_DIR})
27
+ set(DDProf_LIBRARIES ${DDProf_FFI_LIBRARY} -lssp_nonshared -lc)
28
+ mark_as_advanced(
29
+ DDProf_ROOT
30
+ DDProf_FFI_LIBRARY
31
+ DDProf_INCLUDE_DIR
32
+ )
33
+
34
+ add_library(ddprof-ffi INTERFACE)
35
+ target_include_directories(ddprof-ffi INTERFACE ${DDProf_INCLUDE_DIRS})
36
+ target_link_libraries(ddprof-ffi INTERFACE ${DDProf_LIBRARIES})
37
+ target_compile_features(ddprof-ffi INTERFACE c_std_11)
38
+ add_library(DDProf::FFI ALIAS ddprof-ffi)
39
+ else ()
40
+ set(DDProf_ROOT "" CACHE STRING "Directory containing libddprof")
41
+ endif ()
@@ -0,0 +1,455 @@
1
+ // Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
2
+ // This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2021-Present Datadog, Inc.
3
+
4
+
5
+ #ifndef DDPROF_FFI_H
6
+ #define DDPROF_FFI_H
7
+
8
+ #include <stdbool.h>
9
+ #include <stddef.h>
10
+ #include <stdint.h>
11
+
12
+ typedef struct ddprof_ffi_Exporter ddprof_ffi_Exporter;
13
+
14
+ typedef struct ddprof_ffi_Profile ddprof_ffi_Profile;
15
+
16
+ typedef struct ddprof_ffi_ProfileExporterV3 ddprof_ffi_ProfileExporterV3;
17
+
18
+ /**
19
+ * This type only exists to workaround a bug in cbindgen; may be removed in the
20
+ * future.
21
+ */
22
+ typedef struct ddprof_ffi_Request ddprof_ffi_Request;
23
+
24
+ /**
25
+ * Buffer holds the raw parts of a Rust Vec; it should only be created from
26
+ * Rust, never from C.
27
+ */
28
+ typedef struct ddprof_ffi_Buffer {
29
+ const uint8_t *ptr;
30
+ size_t len;
31
+ size_t capacity;
32
+ } ddprof_ffi_Buffer;
33
+
34
+ typedef enum ddprof_ffi_NewProfileExporterV3Result_Tag {
35
+ DDPROF_FFI_NEW_PROFILE_EXPORTER_V3_RESULT_OK,
36
+ DDPROF_FFI_NEW_PROFILE_EXPORTER_V3_RESULT_ERR,
37
+ } ddprof_ffi_NewProfileExporterV3Result_Tag;
38
+
39
+ typedef struct ddprof_ffi_NewProfileExporterV3Result {
40
+ ddprof_ffi_NewProfileExporterV3Result_Tag tag;
41
+ union {
42
+ struct {
43
+ struct ddprof_ffi_ProfileExporterV3 *ok;
44
+ };
45
+ struct {
46
+ struct ddprof_ffi_Buffer err;
47
+ };
48
+ };
49
+ } ddprof_ffi_NewProfileExporterV3Result;
50
+
51
+ typedef struct ddprof_ffi_HttpStatus {
52
+ uint16_t code;
53
+ } ddprof_ffi_HttpStatus;
54
+
55
+ typedef enum ddprof_ffi_SendResult_Tag {
56
+ DDPROF_FFI_SEND_RESULT_HTTP_RESPONSE,
57
+ DDPROF_FFI_SEND_RESULT_FAILURE,
58
+ } ddprof_ffi_SendResult_Tag;
59
+
60
+ typedef struct ddprof_ffi_SendResult {
61
+ ddprof_ffi_SendResult_Tag tag;
62
+ union {
63
+ struct {
64
+ struct ddprof_ffi_HttpStatus http_response;
65
+ };
66
+ struct {
67
+ struct ddprof_ffi_Buffer failure;
68
+ };
69
+ };
70
+ } ddprof_ffi_SendResult;
71
+
72
+ typedef struct ddprof_ffi_Slice_u8 {
73
+ const uint8_t *ptr;
74
+ size_t len;
75
+ } ddprof_ffi_Slice_u8;
76
+
77
+ typedef struct ddprof_ffi_Slice_u8 ddprof_ffi_ByteSlice;
78
+
79
+ typedef struct ddprof_ffi_Field {
80
+ const char *name;
81
+ ddprof_ffi_ByteSlice value;
82
+ } ddprof_ffi_Field;
83
+
84
+ typedef struct ddprof_ffi_Slice_field {
85
+ const struct ddprof_ffi_Field *ptr;
86
+ size_t len;
87
+ } ddprof_ffi_Slice_field;
88
+
89
+ typedef enum ddprof_ffi_EndpointV3_Tag {
90
+ DDPROF_FFI_ENDPOINT_V3_AGENT,
91
+ DDPROF_FFI_ENDPOINT_V3_AGENTLESS,
92
+ } ddprof_ffi_EndpointV3_Tag;
93
+
94
+ typedef struct ddprof_ffi_EndpointV3_ddprof_ffi_Agentless_Body {
95
+ ddprof_ffi_ByteSlice _0;
96
+ ddprof_ffi_ByteSlice _1;
97
+ } ddprof_ffi_EndpointV3_ddprof_ffi_Agentless_Body;
98
+
99
+ typedef struct ddprof_ffi_EndpointV3 {
100
+ ddprof_ffi_EndpointV3_Tag tag;
101
+ union {
102
+ struct {
103
+ ddprof_ffi_ByteSlice agent;
104
+ };
105
+ ddprof_ffi_EndpointV3_ddprof_ffi_Agentless_Body AGENTLESS;
106
+ };
107
+ } ddprof_ffi_EndpointV3;
108
+
109
+ typedef struct ddprof_ffi_Tag {
110
+ ddprof_ffi_ByteSlice name;
111
+ ddprof_ffi_ByteSlice value;
112
+ } ddprof_ffi_Tag;
113
+
114
+ typedef struct ddprof_ffi_Slice_tag {
115
+ const struct ddprof_ffi_Tag *ptr;
116
+ size_t len;
117
+ } ddprof_ffi_Slice_tag;
118
+
119
+ /**
120
+ * Represents time since the Unix Epoch in seconds plus nanoseconds.
121
+ */
122
+ typedef struct ddprof_ffi_Timespec {
123
+ int64_t seconds;
124
+ uint32_t nanoseconds;
125
+ } ddprof_ffi_Timespec;
126
+
127
+ typedef struct ddprof_ffi_File {
128
+ ddprof_ffi_ByteSlice name;
129
+ struct ddprof_ffi_Buffer *file;
130
+ } ddprof_ffi_File;
131
+
132
+ typedef struct ddprof_ffi_Slice_file {
133
+ const struct ddprof_ffi_File *ptr;
134
+ size_t len;
135
+ } ddprof_ffi_Slice_file;
136
+
137
+ typedef struct ddprof_ffi_Slice_c_char {
138
+ const char *ptr;
139
+ size_t len;
140
+ } ddprof_ffi_Slice_c_char;
141
+
142
+ typedef struct ddprof_ffi_ValueType {
143
+ struct ddprof_ffi_Slice_c_char type_;
144
+ struct ddprof_ffi_Slice_c_char unit;
145
+ } ddprof_ffi_ValueType;
146
+
147
+ typedef struct ddprof_ffi_Slice_value_type {
148
+ const struct ddprof_ffi_ValueType *ptr;
149
+ size_t len;
150
+ } ddprof_ffi_Slice_value_type;
151
+
152
+ typedef struct ddprof_ffi_Period {
153
+ struct ddprof_ffi_ValueType type_;
154
+ int64_t value;
155
+ } ddprof_ffi_Period;
156
+
157
+ typedef struct ddprof_ffi_Mapping {
158
+ /**
159
+ * Address at which the binary (or DLL) is loaded into memory.
160
+ */
161
+ uint64_t memory_start;
162
+ /**
163
+ * The limit of the address range occupied by this mapping.
164
+ */
165
+ uint64_t memory_limit;
166
+ /**
167
+ * Offset in the binary that corresponds to the first mapped address.
168
+ */
169
+ uint64_t file_offset;
170
+ /**
171
+ * The object this entry is loaded from. This can be a filename on
172
+ * disk for the main binary and shared libraries, or virtual
173
+ * abstractions like "[vdso]".
174
+ */
175
+ struct ddprof_ffi_Slice_c_char filename;
176
+ /**
177
+ * A string that uniquely identifies a particular program version
178
+ * with high probability. E.g., for binaries generated by GNU tools,
179
+ * it could be the contents of the .note.gnu.build-id field.
180
+ */
181
+ struct ddprof_ffi_Slice_c_char build_id;
182
+ } ddprof_ffi_Mapping;
183
+
184
+ typedef struct ddprof_ffi_Function {
185
+ /**
186
+ * Name of the function, in human-readable form if available.
187
+ */
188
+ struct ddprof_ffi_Slice_c_char name;
189
+ /**
190
+ * Name of the function, as identified by the system.
191
+ * For instance, it can be a C++ mangled name.
192
+ */
193
+ struct ddprof_ffi_Slice_c_char system_name;
194
+ /**
195
+ * Source file containing the function.
196
+ */
197
+ struct ddprof_ffi_Slice_c_char filename;
198
+ /**
199
+ * Line number in source file.
200
+ */
201
+ int64_t start_line;
202
+ } ddprof_ffi_Function;
203
+
204
+ typedef struct ddprof_ffi_Line {
205
+ /**
206
+ * The corresponding profile.Function for this line.
207
+ */
208
+ struct ddprof_ffi_Function function;
209
+ /**
210
+ * Line number in source code.
211
+ */
212
+ int64_t line;
213
+ } ddprof_ffi_Line;
214
+
215
+ typedef struct ddprof_ffi_Slice_line {
216
+ const struct ddprof_ffi_Line *ptr;
217
+ size_t len;
218
+ } ddprof_ffi_Slice_line;
219
+
220
+ typedef struct ddprof_ffi_Location {
221
+ /**
222
+ * todo: how to handle unknown mapping?
223
+ */
224
+ struct ddprof_ffi_Mapping mapping;
225
+ /**
226
+ * The instruction address for this location, if available. It
227
+ * should be within [Mapping.memory_start...Mapping.memory_limit]
228
+ * for the corresponding mapping. A non-leaf address may be in the
229
+ * middle of a call instruction. It is up to display tools to find
230
+ * the beginning of the instruction if necessary.
231
+ */
232
+ uint64_t address;
233
+ /**
234
+ * Multiple line indicates this location has inlined functions,
235
+ * where the last entry represents the caller into which the
236
+ * preceding entries were inlined.
237
+ *
238
+ * E.g., if memcpy() is inlined into printf:
239
+ * line[0].function_name == "memcpy"
240
+ * line[1].function_name == "printf"
241
+ */
242
+ struct ddprof_ffi_Slice_line lines;
243
+ /**
244
+ * Provides an indication that multiple symbols map to this location's
245
+ * address, for example due to identical code folding by the linker. In that
246
+ * case the line information above represents one of the multiple
247
+ * symbols. This field must be recomputed when the symbolization state of the
248
+ * profile changes.
249
+ */
250
+ bool is_folded;
251
+ } ddprof_ffi_Location;
252
+
253
+ typedef struct ddprof_ffi_Slice_location {
254
+ const struct ddprof_ffi_Location *ptr;
255
+ size_t len;
256
+ } ddprof_ffi_Slice_location;
257
+
258
+ typedef struct ddprof_ffi_Slice_i64 {
259
+ const int64_t *ptr;
260
+ size_t len;
261
+ } ddprof_ffi_Slice_i64;
262
+
263
+ typedef struct ddprof_ffi_Label {
264
+ struct ddprof_ffi_Slice_c_char key;
265
+ /**
266
+ * At most one of the following must be present
267
+ */
268
+ struct ddprof_ffi_Slice_c_char str;
269
+ int64_t num;
270
+ /**
271
+ * Should only be present when num is present.
272
+ * Specifies the units of num.
273
+ * Use arbitrary string (for example, "requests") as a custom count unit.
274
+ * If no unit is specified, consumer may apply heuristic to deduce the unit.
275
+ * Consumers may also interpret units like "bytes" and "kilobytes" as memory
276
+ * units and units like "seconds" and "nanoseconds" as time units,
277
+ * and apply appropriate unit conversions to these.
278
+ */
279
+ struct ddprof_ffi_Slice_c_char num_unit;
280
+ } ddprof_ffi_Label;
281
+
282
+ typedef struct ddprof_ffi_Slice_label {
283
+ const struct ddprof_ffi_Label *ptr;
284
+ size_t len;
285
+ } ddprof_ffi_Slice_label;
286
+
287
+ typedef struct ddprof_ffi_Sample {
288
+ /**
289
+ * The leaf is at locations[0].
290
+ */
291
+ struct ddprof_ffi_Slice_location locations;
292
+ /**
293
+ * The type and unit of each value is defined by the corresponding
294
+ * entry in Profile.sample_type. All samples must have the same
295
+ * number of values, the same as the length of Profile.sample_type.
296
+ * When aggregating multiple samples into a single sample, the
297
+ * result has a list of values that is the element-wise sum of the
298
+ * lists of the originals.
299
+ */
300
+ struct ddprof_ffi_Slice_i64 values;
301
+ /**
302
+ * label includes additional context for this sample. It can include
303
+ * things like a thread id, allocation size, etc
304
+ */
305
+ struct ddprof_ffi_Slice_label labels;
306
+ } ddprof_ffi_Sample;
307
+
308
+ typedef struct ddprof_ffi_EncodedProfile {
309
+ struct ddprof_ffi_Timespec start;
310
+ struct ddprof_ffi_Timespec end;
311
+ struct ddprof_ffi_Buffer buffer;
312
+ } ddprof_ffi_EncodedProfile;
313
+
314
+ void ddprof_ffi_NewProfileExporterV3Result_dtor(struct ddprof_ffi_NewProfileExporterV3Result result);
315
+
316
+ /**
317
+ * Create a new Exporter, initializing the TLS stack.
318
+ */
319
+ struct ddprof_ffi_Exporter *ddprof_ffi_Exporter_new(void);
320
+
321
+ /**
322
+ * # Safety
323
+ * All pointers must point to valid objects for that type. If they are used as
324
+ * arrays, such as in Slice, then they must be valid for the associated number
325
+ * of elements. All pointers must be aligned.
326
+ */
327
+ struct ddprof_ffi_SendResult ddprof_ffi_Exporter_send(struct ddprof_ffi_Exporter *exporter_ptr,
328
+ const char *http_method,
329
+ const char *url,
330
+ struct ddprof_ffi_Slice_field headers,
331
+ ddprof_ffi_ByteSlice body,
332
+ uint64_t timeout_ms);
333
+
334
+ /**
335
+ * Clears the contents of the Buffer, leaving length and capacity of 0.
336
+ * # Safety
337
+ * The `buffer` must be created by Rust, or null.
338
+ */
339
+ void ddprof_ffi_Buffer_reset(struct ddprof_ffi_Buffer *buffer);
340
+
341
+ /**
342
+ * Destroys the Exporter.
343
+ */
344
+ void ddprof_ffi_Exporter_delete(struct ddprof_ffi_Exporter *exporter);
345
+
346
+ /**
347
+ * Creates an endpoint that uses the agent.
348
+ * # Arguments
349
+ * * `base_url` - a ByteSlice which contains a URL with scheme, host, and port
350
+ * e.g. "https://agent:8126/"
351
+ */
352
+ struct ddprof_ffi_EndpointV3 ddprof_ffi_EndpointV3_agent(ddprof_ffi_ByteSlice base_url);
353
+
354
+ /**
355
+ * Creates an endpoint that uses the Datadog intake directly aka agentless.
356
+ * # Arguments
357
+ * * `site` - a ByteSlice which contains a host and port e.g.
358
+ * "datadoghq.com"
359
+ * * `api_key` - A ByteSlice which contains the Datadog API key.
360
+ */
361
+ struct ddprof_ffi_EndpointV3 ddprof_ffi_EndpointV3_agentless(ddprof_ffi_ByteSlice site,
362
+ ddprof_ffi_ByteSlice api_key);
363
+
364
+ struct ddprof_ffi_NewProfileExporterV3Result ddprof_ffi_ProfileExporterV3_new(ddprof_ffi_ByteSlice family,
365
+ struct ddprof_ffi_Slice_tag tags,
366
+ struct ddprof_ffi_EndpointV3 endpoint);
367
+
368
+ void ddprof_ffi_ProfileExporterV3_delete(struct ddprof_ffi_ProfileExporterV3 *exporter);
369
+
370
+ /**
371
+ * Builds a Request object based on the profile data supplied.
372
+ *
373
+ * # Safety
374
+ * The `exporter` and the files inside of the `files` slice need to have been
375
+ * created by this module.
376
+ */
377
+ struct ddprof_ffi_Request *ddprof_ffi_ProfileExporterV3_build(struct ddprof_ffi_ProfileExporterV3 *exporter,
378
+ struct ddprof_ffi_Timespec start,
379
+ struct ddprof_ffi_Timespec end,
380
+ struct ddprof_ffi_Slice_file files,
381
+ uint64_t timeout_ms);
382
+
383
+ /**
384
+ * Sends the request, returning the HttpStatus.
385
+ *
386
+ * # Arguments
387
+ * * `exporter` - borrows the exporter for sending the request
388
+ * * `request` - takes ownership of the request
389
+ *
390
+ * # Safety
391
+ * If the `exporter` and `request` are non-null, then they need to have been
392
+ * created by apis in this module.
393
+ */
394
+ struct ddprof_ffi_SendResult ddprof_ffi_ProfileExporterV3_send(struct ddprof_ffi_ProfileExporterV3 *exporter,
395
+ struct ddprof_ffi_Request *request);
396
+
397
+ /**
398
+ * Create a new profile with the given sample types. Must call
399
+ * `ddprof_ffi_Profile_free` when you are done with the profile.
400
+ * # Safety
401
+ * All slices must be have pointers that are suitably aligned for their type
402
+ * and must have the correct number of elements for the slice.
403
+ */
404
+ __attribute__((warn_unused_result))
405
+ struct ddprof_ffi_Profile *ddprof_ffi_Profile_new(struct ddprof_ffi_Slice_value_type sample_types,
406
+ const struct ddprof_ffi_Period *period);
407
+
408
+ /**
409
+ * # Safety
410
+ * The `profile` must point to an object created by another FFI routine in this
411
+ * module, such as `ddprof_ffi_Profile_with_sample_types`.
412
+ */
413
+ void ddprof_ffi_Profile_free(struct ddprof_ffi_Profile *profile);
414
+
415
+ /**
416
+ * # Safety
417
+ * The `profile` ptr must point to a valid Profile object created by this
418
+ * module. All pointers inside the `sample` need to be valid for the duration
419
+ * of this call.
420
+ * This call is _NOT_ thread-safe.
421
+ */
422
+ uint64_t ddprof_ffi_Profile_add(struct ddprof_ffi_Profile *profile,
423
+ struct ddprof_ffi_Sample sample);
424
+
425
+ /**
426
+ * Destroys the `encoded_profile`
427
+ * # Safety
428
+ * Only safe on profiles created by `ddprof_ffi_Profile_serialize`.
429
+ */
430
+ void ddprof_ffi_EncodedProfile_delete(struct ddprof_ffi_EncodedProfile *encoded_profile);
431
+
432
+ /**
433
+ * Serialize the aggregated profile. Be sure to check the return value and if
434
+ * it's non-null then call `ddprof_ffi_EncodedProfile_delete` on it once
435
+ * done with it.
436
+ * result to free it.
437
+ */
438
+ __attribute__((warn_unused_result))
439
+ struct ddprof_ffi_EncodedProfile *ddprof_ffi_Profile_serialize(const struct ddprof_ffi_Profile *profile);
440
+
441
+ /**
442
+ * Resets all data in `profile` except the sample types and period. Returns
443
+ * true if it successfully reset the profile and false otherwise. The profile
444
+ * remains valid if false is returned.
445
+ */
446
+ bool ddprof_ffi_Profile_reset(struct ddprof_ffi_Profile *profile);
447
+
448
+ /**
449
+ * # Safety
450
+ * Only pass buffers which were created by ddprof routines; do not create one
451
+ * in C and then pass it in. Only call this once per buffer.
452
+ */
453
+ void ddprof_ffi_Buffer_free(struct ddprof_ffi_Buffer *buffer);
454
+
455
+ #endif /* DDPROF_FFI_H */
@@ -0,0 +1,17 @@
1
+ # Unless explicitly stated otherwise all files in this repository are licensed
2
+ # under the Apache License Version 2.0. This product includes software
3
+ # developed at Datadog (https://www.datadoghq.com/). Copyright 2021-Present
4
+ # Datadog, Inc.
5
+
6
+ prefix=${pcfiledir}/../..
7
+ exec_prefix=${prefix}
8
+ libdir=${exec_prefix}/lib
9
+ includedir=${prefix}/include
10
+
11
+ Name: ddprof_ffi
12
+ Description: Contains common code used to implement Datadog's Continuous Profilers.
13
+ Version: 0.2.0
14
+ Requires:
15
+ Libs: -L${libdir} -lddprof_ffi -lssp_nonshared -lc
16
+ Libs.private:
17
+ Cflags: -I${includedir}
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: libddprof
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0.beta1
5
+ platform: x86_64-linux
6
+ authors:
7
+ - Datadog, Inc.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: libddprof contains implementation bits used by Datadog's ddtrace gem
14
+ as part of its Continuous Profiler feature.
15
+ email:
16
+ - dev@datadoghq.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - ".rspec"
22
+ - ".standard.yml"
23
+ - README.md
24
+ - Rakefile
25
+ - docker-compose.yml
26
+ - gems.rb
27
+ - lib/libddprof.rb
28
+ - lib/libddprof/version.rb
29
+ - vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/LICENSE
30
+ - vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/LICENSE-3rdparty.yml
31
+ - vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/NOTICE
32
+ - vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/cmake/DDProfConfig.cmake
33
+ - vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/include/ddprof/ffi.h
34
+ - vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/lib/libddprof_ffi.a
35
+ - vendor/libddprof-0.2.0/x86_64-linux-musl/libddprof-x86_64-alpine-linux-musl/lib/pkgconfig/ddprof_ffi.pc
36
+ - vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/LICENSE
37
+ - vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/LICENSE-3rdparty.yml
38
+ - vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/NOTICE
39
+ - vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/cmake/DDProfConfig.cmake
40
+ - vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/include/ddprof/ffi.h
41
+ - vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/lib/libddprof_ffi.a
42
+ - vendor/libddprof-0.2.0/x86_64-linux/libddprof-x86_64-unknown-linux-gnu/lib/pkgconfig/ddprof_ffi.pc
43
+ homepage: https://docs.datadoghq.com/tracing/profiler/
44
+ licenses:
45
+ - Apache-2.0
46
+ metadata:
47
+ allowed_push_host: https://rubygems.org
48
+ homepage_uri: https://docs.datadoghq.com/tracing/profiler/
49
+ source_code_uri: https://github.com/DataDog/libddprof/tree/main/ruby
50
+ rubygems_mfa_required: 'true'
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 2.1.0
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">"
63
+ - !ruby/object:Gem::Version
64
+ version: 1.3.1
65
+ requirements: []
66
+ rubygems_version: 3.3.3
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: Library of common code used by Datadog Continuous Profiler for Ruby
70
+ test_files: []