pf2 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -2
  3. data/Cargo.lock +650 -0
  4. data/Cargo.toml +3 -0
  5. data/README.md +110 -13
  6. data/Rakefile +8 -0
  7. data/crates/backtrace-sys2/.gitignore +1 -0
  8. data/crates/backtrace-sys2/Cargo.toml +9 -0
  9. data/crates/backtrace-sys2/build.rs +48 -0
  10. data/crates/backtrace-sys2/src/lib.rs +5 -0
  11. data/crates/backtrace-sys2/src/libbacktrace/.gitignore +15 -0
  12. data/crates/backtrace-sys2/src/libbacktrace/Isaac.Newton-Opticks.txt +9286 -0
  13. data/crates/backtrace-sys2/src/libbacktrace/LICENSE +29 -0
  14. data/crates/backtrace-sys2/src/libbacktrace/Makefile.am +623 -0
  15. data/crates/backtrace-sys2/src/libbacktrace/Makefile.in +2666 -0
  16. data/crates/backtrace-sys2/src/libbacktrace/README.md +36 -0
  17. data/crates/backtrace-sys2/src/libbacktrace/aclocal.m4 +864 -0
  18. data/crates/backtrace-sys2/src/libbacktrace/alloc.c +167 -0
  19. data/crates/backtrace-sys2/src/libbacktrace/allocfail.c +136 -0
  20. data/crates/backtrace-sys2/src/libbacktrace/allocfail.sh +104 -0
  21. data/crates/backtrace-sys2/src/libbacktrace/atomic.c +113 -0
  22. data/crates/backtrace-sys2/src/libbacktrace/backtrace-supported.h.in +66 -0
  23. data/crates/backtrace-sys2/src/libbacktrace/backtrace.c +129 -0
  24. data/crates/backtrace-sys2/src/libbacktrace/backtrace.h +189 -0
  25. data/crates/backtrace-sys2/src/libbacktrace/btest.c +501 -0
  26. data/crates/backtrace-sys2/src/libbacktrace/compile +348 -0
  27. data/crates/backtrace-sys2/src/libbacktrace/config/enable.m4 +38 -0
  28. data/crates/backtrace-sys2/src/libbacktrace/config/lead-dot.m4 +31 -0
  29. data/crates/backtrace-sys2/src/libbacktrace/config/libtool.m4 +7436 -0
  30. data/crates/backtrace-sys2/src/libbacktrace/config/ltoptions.m4 +369 -0
  31. data/crates/backtrace-sys2/src/libbacktrace/config/ltsugar.m4 +123 -0
  32. data/crates/backtrace-sys2/src/libbacktrace/config/ltversion.m4 +23 -0
  33. data/crates/backtrace-sys2/src/libbacktrace/config/lt~obsolete.m4 +98 -0
  34. data/crates/backtrace-sys2/src/libbacktrace/config/multi.m4 +68 -0
  35. data/crates/backtrace-sys2/src/libbacktrace/config/override.m4 +117 -0
  36. data/crates/backtrace-sys2/src/libbacktrace/config/unwind_ipinfo.m4 +37 -0
  37. data/crates/backtrace-sys2/src/libbacktrace/config/warnings.m4 +227 -0
  38. data/crates/backtrace-sys2/src/libbacktrace/config.guess +1700 -0
  39. data/crates/backtrace-sys2/src/libbacktrace/config.h.in +182 -0
  40. data/crates/backtrace-sys2/src/libbacktrace/config.sub +1885 -0
  41. data/crates/backtrace-sys2/src/libbacktrace/configure +15740 -0
  42. data/crates/backtrace-sys2/src/libbacktrace/configure.ac +613 -0
  43. data/crates/backtrace-sys2/src/libbacktrace/dwarf.c +4402 -0
  44. data/crates/backtrace-sys2/src/libbacktrace/edtest.c +120 -0
  45. data/crates/backtrace-sys2/src/libbacktrace/edtest2.c +43 -0
  46. data/crates/backtrace-sys2/src/libbacktrace/elf.c +7443 -0
  47. data/crates/backtrace-sys2/src/libbacktrace/fileline.c +407 -0
  48. data/crates/backtrace-sys2/src/libbacktrace/filenames.h +52 -0
  49. data/crates/backtrace-sys2/src/libbacktrace/filetype.awk +13 -0
  50. data/crates/backtrace-sys2/src/libbacktrace/install-debuginfo-for-buildid.sh.in +65 -0
  51. data/crates/backtrace-sys2/src/libbacktrace/install-sh +501 -0
  52. data/crates/backtrace-sys2/src/libbacktrace/instrumented_alloc.c +114 -0
  53. data/crates/backtrace-sys2/src/libbacktrace/internal.h +389 -0
  54. data/crates/backtrace-sys2/src/libbacktrace/libtool.m4 +7436 -0
  55. data/crates/backtrace-sys2/src/libbacktrace/ltmain.sh +8636 -0
  56. data/crates/backtrace-sys2/src/libbacktrace/ltoptions.m4 +369 -0
  57. data/crates/backtrace-sys2/src/libbacktrace/ltsugar.m4 +123 -0
  58. data/crates/backtrace-sys2/src/libbacktrace/ltversion.m4 +23 -0
  59. data/crates/backtrace-sys2/src/libbacktrace/lt~obsolete.m4 +98 -0
  60. data/crates/backtrace-sys2/src/libbacktrace/macho.c +1355 -0
  61. data/crates/backtrace-sys2/src/libbacktrace/missing +215 -0
  62. data/crates/backtrace-sys2/src/libbacktrace/mmap.c +331 -0
  63. data/crates/backtrace-sys2/src/libbacktrace/mmapio.c +110 -0
  64. data/crates/backtrace-sys2/src/libbacktrace/move-if-change +83 -0
  65. data/crates/backtrace-sys2/src/libbacktrace/mtest.c +410 -0
  66. data/crates/backtrace-sys2/src/libbacktrace/nounwind.c +66 -0
  67. data/crates/backtrace-sys2/src/libbacktrace/pecoff.c +957 -0
  68. data/crates/backtrace-sys2/src/libbacktrace/posix.c +104 -0
  69. data/crates/backtrace-sys2/src/libbacktrace/print.c +92 -0
  70. data/crates/backtrace-sys2/src/libbacktrace/read.c +110 -0
  71. data/crates/backtrace-sys2/src/libbacktrace/simple.c +108 -0
  72. data/crates/backtrace-sys2/src/libbacktrace/sort.c +108 -0
  73. data/crates/backtrace-sys2/src/libbacktrace/state.c +72 -0
  74. data/crates/backtrace-sys2/src/libbacktrace/stest.c +137 -0
  75. data/crates/backtrace-sys2/src/libbacktrace/test-driver +148 -0
  76. data/crates/backtrace-sys2/src/libbacktrace/test_format.c +55 -0
  77. data/crates/backtrace-sys2/src/libbacktrace/testlib.c +234 -0
  78. data/crates/backtrace-sys2/src/libbacktrace/testlib.h +110 -0
  79. data/crates/backtrace-sys2/src/libbacktrace/ttest.c +161 -0
  80. data/crates/backtrace-sys2/src/libbacktrace/unittest.c +92 -0
  81. data/crates/backtrace-sys2/src/libbacktrace/unknown.c +65 -0
  82. data/crates/backtrace-sys2/src/libbacktrace/xcoff.c +1606 -0
  83. data/crates/backtrace-sys2/src/libbacktrace/xztest.c +508 -0
  84. data/crates/backtrace-sys2/src/libbacktrace/zstdtest.c +523 -0
  85. data/crates/backtrace-sys2/src/libbacktrace/ztest.c +541 -0
  86. data/ext/pf2/Cargo.toml +25 -0
  87. data/ext/pf2/build.rs +3 -0
  88. data/ext/pf2/extconf.rb +6 -1
  89. data/ext/pf2/src/backtrace.rs +126 -0
  90. data/ext/pf2/src/lib.rs +15 -0
  91. data/ext/pf2/src/profile.rs +65 -0
  92. data/ext/pf2/src/profile_serializer.rs +204 -0
  93. data/ext/pf2/src/ringbuffer.rs +152 -0
  94. data/ext/pf2/src/ruby_init.rs +74 -0
  95. data/ext/pf2/src/sample.rs +66 -0
  96. data/ext/pf2/src/siginfo_t.c +5 -0
  97. data/ext/pf2/src/signal_scheduler/configuration.rs +31 -0
  98. data/ext/pf2/src/signal_scheduler/timer_installer.rs +199 -0
  99. data/ext/pf2/src/signal_scheduler.rs +311 -0
  100. data/ext/pf2/src/timer_thread_scheduler.rs +319 -0
  101. data/ext/pf2/src/util.rs +30 -0
  102. data/lib/pf2/cli.rb +1 -1
  103. data/lib/pf2/reporter.rb +48 -16
  104. data/lib/pf2/version.rb +1 -1
  105. data/lib/pf2.rb +20 -5
  106. metadata +128 -5
  107. data/ext/pf2/pf2.c +0 -246
@@ -0,0 +1,129 @@
1
+ /* backtrace.c -- Entry point for stack backtrace library.
2
+ Copyright (C) 2012-2021 Free Software Foundation, Inc.
3
+ Written by Ian Lance Taylor, Google.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are
7
+ met:
8
+
9
+ (1) Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ (2) Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in
14
+ the documentation and/or other materials provided with the
15
+ distribution.
16
+
17
+ (3) The name of the author may not be used to
18
+ endorse or promote products derived from this software without
19
+ specific prior written permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
25
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
+ POSSIBILITY OF SUCH DAMAGE. */
32
+
33
+ #include "config.h"
34
+
35
+ #include <sys/types.h>
36
+
37
+ #include "unwind.h"
38
+ #include "backtrace.h"
39
+ #include "internal.h"
40
+
41
+ /* The main backtrace_full routine. */
42
+
43
+ /* Data passed through _Unwind_Backtrace. */
44
+
45
+ struct backtrace_data
46
+ {
47
+ /* Number of frames to skip. */
48
+ int skip;
49
+ /* Library state. */
50
+ struct backtrace_state *state;
51
+ /* Callback routine. */
52
+ backtrace_full_callback callback;
53
+ /* Error callback routine. */
54
+ backtrace_error_callback error_callback;
55
+ /* Data to pass to callback routines. */
56
+ void *data;
57
+ /* Value to return from backtrace_full. */
58
+ int ret;
59
+ /* Whether there is any memory available. */
60
+ int can_alloc;
61
+ };
62
+
63
+ /* Unwind library callback routine. This is passed to
64
+ _Unwind_Backtrace. */
65
+
66
+ static _Unwind_Reason_Code
67
+ unwind (struct _Unwind_Context *context, void *vdata)
68
+ {
69
+ struct backtrace_data *bdata = (struct backtrace_data *) vdata;
70
+ uintptr_t pc;
71
+ int ip_before_insn = 0;
72
+
73
+ #ifdef HAVE_GETIPINFO
74
+ pc = _Unwind_GetIPInfo (context, &ip_before_insn);
75
+ #else
76
+ pc = _Unwind_GetIP (context);
77
+ #endif
78
+
79
+ if (bdata->skip > 0)
80
+ {
81
+ --bdata->skip;
82
+ return _URC_NO_REASON;
83
+ }
84
+
85
+ if (!ip_before_insn)
86
+ --pc;
87
+
88
+ if (!bdata->can_alloc)
89
+ bdata->ret = bdata->callback (bdata->data, pc, NULL, 0, NULL);
90
+ else
91
+ bdata->ret = backtrace_pcinfo (bdata->state, pc, bdata->callback,
92
+ bdata->error_callback, bdata->data);
93
+ if (bdata->ret != 0)
94
+ return _URC_END_OF_STACK;
95
+
96
+ return _URC_NO_REASON;
97
+ }
98
+
99
+ /* Get a stack backtrace. */
100
+
101
+ int __attribute__((noinline))
102
+ backtrace_full (struct backtrace_state *state, int skip,
103
+ backtrace_full_callback callback,
104
+ backtrace_error_callback error_callback, void *data)
105
+ {
106
+ struct backtrace_data bdata;
107
+ void *p;
108
+
109
+ bdata.skip = skip + 1;
110
+ bdata.state = state;
111
+ bdata.callback = callback;
112
+ bdata.error_callback = error_callback;
113
+ bdata.data = data;
114
+ bdata.ret = 0;
115
+
116
+ /* If we can't allocate any memory at all, don't try to produce
117
+ file/line information. */
118
+ p = backtrace_alloc (state, 4096, NULL, NULL);
119
+ if (p == NULL)
120
+ bdata.can_alloc = 0;
121
+ else
122
+ {
123
+ backtrace_free (state, p, 4096, NULL, NULL);
124
+ bdata.can_alloc = 1;
125
+ }
126
+
127
+ _Unwind_Backtrace (unwind, &bdata);
128
+ return bdata.ret;
129
+ }
@@ -0,0 +1,189 @@
1
+ /* backtrace.h -- Public header file for stack backtrace library.
2
+ Copyright (C) 2012-2021 Free Software Foundation, Inc.
3
+ Written by Ian Lance Taylor, Google.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are
7
+ met:
8
+
9
+ (1) Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ (2) Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in
14
+ the documentation and/or other materials provided with the
15
+ distribution.
16
+
17
+ (3) The name of the author may not be used to
18
+ endorse or promote products derived from this software without
19
+ specific prior written permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
25
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
+ POSSIBILITY OF SUCH DAMAGE. */
32
+
33
+ #ifndef BACKTRACE_H
34
+ #define BACKTRACE_H
35
+
36
+ #include <stddef.h>
37
+ #include <stdint.h>
38
+ #include <stdio.h>
39
+
40
+ #ifdef __cplusplus
41
+ extern "C" {
42
+ #endif
43
+
44
+ /** The backtrace state. This struct is intentionally not defined in
45
+ the public interface. */
46
+
47
+ struct backtrace_state;
48
+
49
+ /** The type of the error callback argument to backtrace functions.
50
+ This function, if not NULL, will be called for certain error cases.
51
+ The DATA argument is passed to the function that calls this one.
52
+ The MSG argument is an error message. The ERRNUM argument, if
53
+ greater than 0, holds an errno value. The MSG buffer may become
54
+ invalid after this function returns.
55
+
56
+ As a special case, the ERRNUM argument will be passed as -1 if no
57
+ debug info can be found for the executable, or if the debug info
58
+ exists but has an unsupported version, but the function requires
59
+ debug info (e.g., backtrace_full, backtrace_pcinfo). The MSG in
60
+ this case will be something along the lines of "no debug info".
61
+ Similarly, ERRNUM will be passed as -1 if there is no symbol table,
62
+ but the function requires a symbol table (e.g., backtrace_syminfo).
63
+ This may be used as a signal that some other approach should be
64
+ tried. */
65
+
66
+ typedef void (*backtrace_error_callback) (void *data, const char *msg,
67
+ int errnum);
68
+
69
+ /** Create state information for the backtrace routines. This must be
70
+ called before any of the other routines, and its return value must
71
+ be passed to all of the other routines. FILENAME is the path name
72
+ of the executable file; if it is NULL the library will try
73
+ system-specific path names. If not NULL, FILENAME must point to a
74
+ permanent buffer. If THREADED is non-zero the state may be
75
+ accessed by multiple threads simultaneously, and the library will
76
+ use appropriate atomic operations. If THREADED is zero the state
77
+ may only be accessed by one thread at a time. This returns a state
78
+ pointer on success, NULL on error. If an error occurs, this will
79
+ call the ERROR_CALLBACK routine.
80
+
81
+ Calling this function allocates resources that cannot be freed.
82
+ There is no backtrace_free_state function. The state is used to
83
+ cache information that is expensive to recompute. Programs are
84
+ expected to call this function at most once and to save the return
85
+ value for all later calls to backtrace functions. */
86
+
87
+ extern struct backtrace_state *backtrace_create_state (
88
+ const char *filename, int threaded,
89
+ backtrace_error_callback error_callback, void *data);
90
+
91
+ /** The type of the callback argument to the backtrace_full function.
92
+ DATA is the argument passed to backtrace_full. PC is the program
93
+ counter. FILENAME is the name of the file containing PC, or NULL
94
+ if not available. LINENO is the line number in FILENAME containing
95
+ PC, or 0 if not available. FUNCTION is the name of the function
96
+ containing PC, or NULL if not available. This should return 0 to
97
+ continuing tracing. The FILENAME and FUNCTION buffers may become
98
+ invalid after this function returns. */
99
+
100
+ typedef int (*backtrace_full_callback) (void *data, uintptr_t pc,
101
+ const char *filename, int lineno,
102
+ const char *function);
103
+
104
+ /** Get a full stack backtrace. SKIP is the number of frames to skip;
105
+ passing 0 will start the trace with the function calling
106
+ backtrace_full. DATA is passed to the callback routine. If any
107
+ call to CALLBACK returns a non-zero value, the stack backtrace
108
+ stops, and backtrace returns that value; this may be used to limit
109
+ the number of stack frames desired. If all calls to CALLBACK
110
+ return 0, backtrace returns 0. The backtrace_full function will
111
+ make at least one call to either CALLBACK or ERROR_CALLBACK. This
112
+ function requires debug info for the executable. */
113
+
114
+ extern int backtrace_full (struct backtrace_state *state, int skip,
115
+ backtrace_full_callback callback,
116
+ backtrace_error_callback error_callback,
117
+ void *data);
118
+
119
+ /** The type of the callback argument to the backtrace_simple function.
120
+ DATA is the argument passed to simple_backtrace. PC is the program
121
+ counter. This should return 0 to continue tracing. */
122
+
123
+ typedef int (*backtrace_simple_callback) (void *data, uintptr_t pc);
124
+
125
+ /** Get a simple backtrace. SKIP is the number of frames to skip, as
126
+ in backtrace. DATA is passed to the callback routine. If any call
127
+ to CALLBACK returns a non-zero value, the stack backtrace stops,
128
+ and backtrace_simple returns that value. Otherwise
129
+ backtrace_simple returns 0. The backtrace_simple function will
130
+ make at least one call to either CALLBACK or ERROR_CALLBACK. This
131
+ function does not require any debug info for the executable. */
132
+
133
+ extern int backtrace_simple (struct backtrace_state *state, int skip,
134
+ backtrace_simple_callback callback,
135
+ backtrace_error_callback error_callback,
136
+ void *data);
137
+
138
+ /** Print the current backtrace in a user readable format to a FILE.
139
+ SKIP is the number of frames to skip, as in backtrace_full. Any
140
+ error messages are printed to stderr. This function requires debug
141
+ info for the executable. */
142
+
143
+ extern void backtrace_print (struct backtrace_state *state, int skip, FILE *);
144
+
145
+ /** Given PC, a program counter in the current program, call the
146
+ callback function with filename, line number, and function name
147
+ information. This will normally call the callback function exactly
148
+ once. However, if the PC happens to describe an inlined call, and
149
+ the debugging information contains the necessary information, then
150
+ this may call the callback function multiple times. This will make
151
+ at least one call to either CALLBACK or ERROR_CALLBACK. This
152
+ returns the first non-zero value returned by CALLBACK, or 0. */
153
+
154
+ extern int backtrace_pcinfo (struct backtrace_state *state, uintptr_t pc,
155
+ backtrace_full_callback callback,
156
+ backtrace_error_callback error_callback,
157
+ void *data);
158
+
159
+ /** The type of the callback argument to backtrace_syminfo. DATA and
160
+ PC are the arguments passed to backtrace_syminfo. SYMNAME is the
161
+ name of the symbol for the corresponding code. SYMVAL is the
162
+ value and SYMSIZE is the size of the symbol. SYMNAME will be NULL
163
+ if no error occurred but the symbol could not be found. */
164
+
165
+ typedef void (*backtrace_syminfo_callback) (void *data, uintptr_t pc,
166
+ const char *symname,
167
+ uintptr_t symval,
168
+ uintptr_t symsize);
169
+
170
+ /** Given ADDR, an address or program counter in the current program,
171
+ call the callback information with the symbol name and value
172
+ describing the function or variable in which ADDR may be found.
173
+ This will call either CALLBACK or ERROR_CALLBACK exactly once.
174
+ This returns 1 on success, 0 on failure. This function requires
175
+ the symbol table but does not require the debug info. Note that if
176
+ the symbol table is present but ADDR could not be found in the
177
+ table, CALLBACK will be called with a NULL SYMNAME argument.
178
+ Returns 1 on success, 0 on error. */
179
+
180
+ extern int backtrace_syminfo (struct backtrace_state *state, uintptr_t addr,
181
+ backtrace_syminfo_callback callback,
182
+ backtrace_error_callback error_callback,
183
+ void *data);
184
+
185
+ #ifdef __cplusplus
186
+ } /* End extern "C". */
187
+ #endif
188
+
189
+ #endif