libddprof 0.2.0.beta1-x86_64-linux

Sign up to get free protection for your applications and to get access to all the features.
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: []