pf2 0.2.0 → 0.3.0

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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -2
  3. data/Cargo.lock +186 -17
  4. data/Cargo.toml +1 -1
  5. data/README.md +17 -6
  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 +1 -0
  87. data/ext/pf2/src/backtrace.rs +126 -0
  88. data/ext/pf2/src/lib.rs +1 -0
  89. data/ext/pf2/src/profile.rs +16 -1
  90. data/ext/pf2/src/profile_serializer.rs +95 -21
  91. data/ext/pf2/src/ringbuffer.rs +7 -0
  92. data/ext/pf2/src/ruby_init.rs +18 -6
  93. data/ext/pf2/src/sample.rs +22 -1
  94. data/ext/pf2/src/signal_scheduler/configuration.rs +7 -0
  95. data/ext/pf2/src/signal_scheduler/timer_installer.rs +34 -27
  96. data/ext/pf2/src/signal_scheduler.rs +95 -26
  97. data/ext/pf2/src/timer_thread_scheduler.rs +88 -12
  98. data/ext/pf2/src/util.rs +2 -2
  99. data/lib/pf2/reporter.rb +12 -5
  100. data/lib/pf2/version.rb +1 -1
  101. data/lib/pf2.rb +3 -6
  102. metadata +96 -2
@@ -1,6 +1,6 @@
1
1
  #![deny(unsafe_op_in_unsafe_fn)]
2
2
 
3
- use std::ffi::{c_void, CString};
3
+ use std::ffi::{c_int, c_void, CStr, CString};
4
4
  use std::mem::ManuallyDrop;
5
5
  use std::ptr::null_mut;
6
6
  use std::sync::atomic::{AtomicBool, Ordering};
@@ -18,6 +18,7 @@ use crate::util::*;
18
18
  #[derive(Clone, Debug)]
19
19
  pub struct TimerThreadScheduler {
20
20
  ruby_threads: Arc<RwLock<Vec<VALUE>>>,
21
+ interval: Option<Arc<Duration>>,
21
22
  profile: Option<Arc<RwLock<Profile>>>,
22
23
  stop_requested: Arc<AtomicBool>,
23
24
  }
@@ -32,26 +33,89 @@ impl TimerThreadScheduler {
32
33
  fn new() -> Self {
33
34
  TimerThreadScheduler {
34
35
  ruby_threads: Arc::new(RwLock::new(vec![])),
36
+ interval: None,
35
37
  profile: None,
36
38
  stop_requested: Arc::new(AtomicBool::new(false)),
37
39
  }
38
40
  }
39
41
 
40
- fn start(&mut self, _rbself: VALUE, ruby_threads: VALUE) -> VALUE {
41
- // Register threads
42
- let stored_threads = &mut self.ruby_threads.try_write().unwrap();
42
+ fn initialize(&mut self, argc: c_int, argv: *const VALUE, _rbself: VALUE) -> VALUE {
43
+ // Parse arguments
44
+ let kwargs: VALUE = Qnil.into();
43
45
  unsafe {
44
- for i in 0..RARRAY_LEN(ruby_threads) {
45
- stored_threads.push(rb_ary_entry(ruby_threads, i));
46
+ rb_scan_args(argc, argv, cstr!(":"), &kwargs);
47
+ };
48
+ let mut kwargs_values: [VALUE; 3] = [Qnil.into(); 3];
49
+ unsafe {
50
+ rb_get_kwargs(
51
+ kwargs,
52
+ [
53
+ rb_intern(cstr!("interval_ms")),
54
+ rb_intern(cstr!("threads")),
55
+ rb_intern(cstr!("time_mode")),
56
+ ]
57
+ .as_mut_ptr(),
58
+ 0,
59
+ 3,
60
+ kwargs_values.as_mut_ptr(),
61
+ );
62
+ };
63
+ let interval: Duration = if kwargs_values[0] != Qundef as VALUE {
64
+ let interval_ms = unsafe { rb_num2long(kwargs_values[0]) };
65
+ Duration::from_millis(interval_ms.try_into().unwrap_or_else(|_| {
66
+ eprintln!(
67
+ "[Pf2] Warning: Specified interval ({}) is not valid. Using default value (49ms).",
68
+ interval_ms
69
+ );
70
+ 49
71
+ }))
72
+ } else {
73
+ Duration::from_millis(49)
74
+ };
75
+ let threads: VALUE = if kwargs_values[1] != Qundef as VALUE {
76
+ kwargs_values[1]
77
+ } else {
78
+ unsafe { rb_funcall(rb_cThread, rb_intern(cstr!("list")), 0) }
79
+ };
80
+ if kwargs_values[2] != Qundef as VALUE {
81
+ let specified_mode = unsafe {
82
+ let mut str = rb_funcall(kwargs_values[2], rb_intern(cstr!("to_s")), 0);
83
+ let ptr = rb_string_value_ptr(&mut str);
84
+ CStr::from_ptr(ptr).to_str().unwrap()
85
+ };
86
+ if specified_mode != "wall" {
87
+ // Raise an ArgumentError
88
+ unsafe {
89
+ rb_raise(
90
+ rb_eArgError,
91
+ cstr!("TimerThreadScheduler only supports :wall mode."),
92
+ )
93
+ }
46
94
  }
47
95
  }
48
96
 
97
+ let mut target_ruby_threads = Vec::new();
98
+ unsafe {
99
+ for i in 0..RARRAY_LEN(threads) {
100
+ let ruby_thread: VALUE = rb_ary_entry(threads, i);
101
+ target_ruby_threads.push(ruby_thread);
102
+ }
103
+ }
104
+
105
+ self.interval = Some(Arc::new(interval));
106
+ self.ruby_threads = Arc::new(RwLock::new(target_ruby_threads.into_iter().collect()));
107
+
108
+ Qnil.into()
109
+ }
110
+
111
+ fn start(&mut self, _rbself: VALUE) -> VALUE {
49
112
  // Create Profile
50
113
  let profile = Arc::new(RwLock::new(Profile::new()));
51
114
  self.start_profile_buffer_flusher_thread(&profile);
52
115
 
53
116
  // Start monitoring thread
54
117
  let stop_requested = Arc::clone(&self.stop_requested);
118
+ let interval = Arc::clone(self.interval.as_ref().unwrap());
55
119
  let postponed_job_args: Box<PostponedJobArgs> = Box::new(PostponedJobArgs {
56
120
  ruby_threads: Arc::clone(&self.ruby_threads),
57
121
  profile: Arc::clone(&profile),
@@ -63,7 +127,9 @@ impl TimerThreadScheduler {
63
127
  Box::into_raw(postponed_job_args) as *mut c_void, // FIXME: leak
64
128
  )
65
129
  };
66
- thread::spawn(move || Self::thread_main_loop(stop_requested, postponed_job_handle));
130
+ thread::spawn(move || {
131
+ Self::thread_main_loop(stop_requested, interval, postponed_job_handle)
132
+ });
67
133
 
68
134
  self.profile = Some(profile);
69
135
 
@@ -72,6 +138,7 @@ impl TimerThreadScheduler {
72
138
 
73
139
  fn thread_main_loop(
74
140
  stop_requested: Arc<AtomicBool>,
141
+ interval: Arc<Duration>,
75
142
  postponed_job_handle: rb_postponed_job_handle_t,
76
143
  ) {
77
144
  loop {
@@ -81,8 +148,8 @@ impl TimerThreadScheduler {
81
148
  unsafe {
82
149
  rb_postponed_job_trigger(postponed_job_handle);
83
150
  }
84
- // sleep for 50 ms
85
- thread::sleep(Duration::from_millis(50));
151
+
152
+ thread::sleep(*interval);
86
153
  }
87
154
  }
88
155
 
@@ -136,7 +203,7 @@ impl TimerThreadScheduler {
136
203
  continue;
137
204
  }
138
205
 
139
- let sample = Sample::capture(*ruby_thread);
206
+ let sample = Sample::capture(*ruby_thread, &profile.backtrace_state);
140
207
  if profile.temporary_sample_buffer.push(sample).is_err() {
141
208
  log::debug!("Temporary sample buffer full. Dropping sample.");
142
209
  }
@@ -164,10 +231,19 @@ impl TimerThreadScheduler {
164
231
 
165
232
  // Ruby Methods
166
233
 
234
+ pub unsafe extern "C" fn rb_initialize(
235
+ argc: c_int,
236
+ argv: *const VALUE,
237
+ rbself: VALUE,
238
+ ) -> VALUE {
239
+ let mut collector = Self::get_struct_from(rbself);
240
+ collector.initialize(argc, argv, rbself)
241
+ }
242
+
167
243
  // SampleCollector.start
168
- pub unsafe extern "C" fn rb_start(rbself: VALUE, ruby_threads: VALUE, _: VALUE) -> VALUE {
244
+ pub unsafe extern "C" fn rb_start(rbself: VALUE) -> VALUE {
169
245
  let mut collector = Self::get_struct_from(rbself);
170
- collector.start(rbself, ruby_threads)
246
+ collector.start(rbself)
171
247
  }
172
248
 
173
249
  // SampleCollector.stop
data/ext/pf2/src/util.rs CHANGED
@@ -13,10 +13,10 @@ pub(crate) use cstr;
13
13
  pub type RubyCFunc = unsafe extern "C" fn() -> VALUE;
14
14
 
15
15
  // TODO: rewrite as macro
16
- pub fn to_ruby_cfunc1<T>(f: unsafe extern "C" fn(T) -> VALUE) -> RubyCFunc {
16
+ pub fn to_ruby_cfunc_with_no_args<T>(f: unsafe extern "C" fn(T) -> VALUE) -> RubyCFunc {
17
17
  unsafe { transmute::<unsafe extern "C" fn(T) -> VALUE, RubyCFunc>(f) }
18
18
  }
19
- pub fn to_ruby_cfunc3<T, U, V>(f: unsafe extern "C" fn(T, U, V) -> VALUE) -> RubyCFunc {
19
+ pub fn to_ruby_cfunc_with_args<T, U, V>(f: unsafe extern "C" fn(T, U, V) -> VALUE) -> RubyCFunc {
20
20
  unsafe { transmute::<unsafe extern "C" fn(T, U, V) -> VALUE, RubyCFunc>(f) }
21
21
  }
22
22
 
data/lib/pf2/reporter.rb CHANGED
@@ -34,6 +34,11 @@ module Pf2
34
34
  color: "red",
35
35
  subcategories: ["Code"],
36
36
  },
37
+ {
38
+ name: "Native",
39
+ color: "blue",
40
+ subcategories: ["Code"],
41
+ },
37
42
  {
38
43
  name: "Native",
39
44
  color: "lightblue",
@@ -68,7 +73,7 @@ module Pf2
68
73
  def emit
69
74
  func_table = build_func_table
70
75
  frame_table = build_frame_table
71
- stack_table = build_stack_table
76
+ stack_table = build_stack_table(func_table, frame_table)
72
77
  samples = build_samples
73
78
 
74
79
  string_table = build_string_table
@@ -173,8 +178,10 @@ module Pf2
173
178
  }
174
179
 
175
180
  @thread[:frames].each.with_index do |(id, frame), i|
176
- ret[:name] << string_id(frame[:full_label])
177
- ret[:is_js] << false
181
+ native = (frame[:entry_type] == 'Native')
182
+ label = "#{native ? "Native: " : ""}#{frame[:full_label]}"
183
+ ret[:name] << string_id(label)
184
+ ret[:is_js] << !native
178
185
  ret[:relevant_for_js] << false
179
186
  ret[:resource] << -1
180
187
  ret[:file_name] << nil
@@ -188,7 +195,7 @@ module Pf2
188
195
  ret
189
196
  end
190
197
 
191
- def build_stack_table
198
+ def build_stack_table(func_table, frame_table)
192
199
  ret = {
193
200
  frame: [],
194
201
  category: [],
@@ -205,7 +212,7 @@ module Pf2
205
212
 
206
213
  prefix, node = queue.shift
207
214
  ret[:frame] << @frame_id_map[node[:frame_id]]
208
- ret[:category] << 1
215
+ ret[:category] << (build_string_table[func_table[:name][frame_table[:func][@frame_id_map[node[:frame_id]]]]].start_with?('Native:') ? 2 : 1)
209
216
  ret[:subcategory] << nil
210
217
  ret[:prefix] << prefix
211
218
 
data/lib/pf2/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pf2
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/pf2.rb CHANGED
@@ -13,16 +13,13 @@ module Pf2
13
13
  end
14
14
  end
15
15
 
16
- def self.default_scheduler
17
- @@default_scheduler ||= default_scheduler_class.new
18
- end
19
-
20
16
  def self.start(...)
21
- default_scheduler.start(...)
17
+ @@default_scheduler = default_scheduler_class.new(...)
18
+ @@default_scheduler.start
22
19
  end
23
20
 
24
21
  def self.stop(...)
25
- default_scheduler.stop(...)
22
+ @@default_scheduler.stop(...)
26
23
  end
27
24
 
28
25
  def self.profile(&block)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pf2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daisuke Aritomo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-21 00:00:00.000000000 Z
11
+ date: 2024-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.9.63
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description:
42
56
  email:
43
57
  - osyoyu@osyoyu.com
@@ -53,10 +67,90 @@ files:
53
67
  - LICENSE.txt
54
68
  - README.md
55
69
  - Rakefile
70
+ - crates/backtrace-sys2/.gitignore
71
+ - crates/backtrace-sys2/Cargo.toml
72
+ - crates/backtrace-sys2/build.rs
73
+ - crates/backtrace-sys2/src/lib.rs
74
+ - crates/backtrace-sys2/src/libbacktrace/.gitignore
75
+ - crates/backtrace-sys2/src/libbacktrace/Isaac.Newton-Opticks.txt
76
+ - crates/backtrace-sys2/src/libbacktrace/LICENSE
77
+ - crates/backtrace-sys2/src/libbacktrace/Makefile.am
78
+ - crates/backtrace-sys2/src/libbacktrace/Makefile.in
79
+ - crates/backtrace-sys2/src/libbacktrace/README.md
80
+ - crates/backtrace-sys2/src/libbacktrace/aclocal.m4
81
+ - crates/backtrace-sys2/src/libbacktrace/alloc.c
82
+ - crates/backtrace-sys2/src/libbacktrace/allocfail.c
83
+ - crates/backtrace-sys2/src/libbacktrace/allocfail.sh
84
+ - crates/backtrace-sys2/src/libbacktrace/atomic.c
85
+ - crates/backtrace-sys2/src/libbacktrace/backtrace-supported.h.in
86
+ - crates/backtrace-sys2/src/libbacktrace/backtrace.c
87
+ - crates/backtrace-sys2/src/libbacktrace/backtrace.h
88
+ - crates/backtrace-sys2/src/libbacktrace/btest.c
89
+ - crates/backtrace-sys2/src/libbacktrace/compile
90
+ - crates/backtrace-sys2/src/libbacktrace/config.guess
91
+ - crates/backtrace-sys2/src/libbacktrace/config.h.in
92
+ - crates/backtrace-sys2/src/libbacktrace/config.sub
93
+ - crates/backtrace-sys2/src/libbacktrace/config/enable.m4
94
+ - crates/backtrace-sys2/src/libbacktrace/config/lead-dot.m4
95
+ - crates/backtrace-sys2/src/libbacktrace/config/libtool.m4
96
+ - crates/backtrace-sys2/src/libbacktrace/config/ltoptions.m4
97
+ - crates/backtrace-sys2/src/libbacktrace/config/ltsugar.m4
98
+ - crates/backtrace-sys2/src/libbacktrace/config/ltversion.m4
99
+ - crates/backtrace-sys2/src/libbacktrace/config/lt~obsolete.m4
100
+ - crates/backtrace-sys2/src/libbacktrace/config/multi.m4
101
+ - crates/backtrace-sys2/src/libbacktrace/config/override.m4
102
+ - crates/backtrace-sys2/src/libbacktrace/config/unwind_ipinfo.m4
103
+ - crates/backtrace-sys2/src/libbacktrace/config/warnings.m4
104
+ - crates/backtrace-sys2/src/libbacktrace/configure
105
+ - crates/backtrace-sys2/src/libbacktrace/configure.ac
106
+ - crates/backtrace-sys2/src/libbacktrace/dwarf.c
107
+ - crates/backtrace-sys2/src/libbacktrace/edtest.c
108
+ - crates/backtrace-sys2/src/libbacktrace/edtest2.c
109
+ - crates/backtrace-sys2/src/libbacktrace/elf.c
110
+ - crates/backtrace-sys2/src/libbacktrace/fileline.c
111
+ - crates/backtrace-sys2/src/libbacktrace/filenames.h
112
+ - crates/backtrace-sys2/src/libbacktrace/filetype.awk
113
+ - crates/backtrace-sys2/src/libbacktrace/install-debuginfo-for-buildid.sh.in
114
+ - crates/backtrace-sys2/src/libbacktrace/install-sh
115
+ - crates/backtrace-sys2/src/libbacktrace/instrumented_alloc.c
116
+ - crates/backtrace-sys2/src/libbacktrace/internal.h
117
+ - crates/backtrace-sys2/src/libbacktrace/libtool.m4
118
+ - crates/backtrace-sys2/src/libbacktrace/ltmain.sh
119
+ - crates/backtrace-sys2/src/libbacktrace/ltoptions.m4
120
+ - crates/backtrace-sys2/src/libbacktrace/ltsugar.m4
121
+ - crates/backtrace-sys2/src/libbacktrace/ltversion.m4
122
+ - crates/backtrace-sys2/src/libbacktrace/lt~obsolete.m4
123
+ - crates/backtrace-sys2/src/libbacktrace/macho.c
124
+ - crates/backtrace-sys2/src/libbacktrace/missing
125
+ - crates/backtrace-sys2/src/libbacktrace/mmap.c
126
+ - crates/backtrace-sys2/src/libbacktrace/mmapio.c
127
+ - crates/backtrace-sys2/src/libbacktrace/move-if-change
128
+ - crates/backtrace-sys2/src/libbacktrace/mtest.c
129
+ - crates/backtrace-sys2/src/libbacktrace/nounwind.c
130
+ - crates/backtrace-sys2/src/libbacktrace/pecoff.c
131
+ - crates/backtrace-sys2/src/libbacktrace/posix.c
132
+ - crates/backtrace-sys2/src/libbacktrace/print.c
133
+ - crates/backtrace-sys2/src/libbacktrace/read.c
134
+ - crates/backtrace-sys2/src/libbacktrace/simple.c
135
+ - crates/backtrace-sys2/src/libbacktrace/sort.c
136
+ - crates/backtrace-sys2/src/libbacktrace/state.c
137
+ - crates/backtrace-sys2/src/libbacktrace/stest.c
138
+ - crates/backtrace-sys2/src/libbacktrace/test-driver
139
+ - crates/backtrace-sys2/src/libbacktrace/test_format.c
140
+ - crates/backtrace-sys2/src/libbacktrace/testlib.c
141
+ - crates/backtrace-sys2/src/libbacktrace/testlib.h
142
+ - crates/backtrace-sys2/src/libbacktrace/ttest.c
143
+ - crates/backtrace-sys2/src/libbacktrace/unittest.c
144
+ - crates/backtrace-sys2/src/libbacktrace/unknown.c
145
+ - crates/backtrace-sys2/src/libbacktrace/xcoff.c
146
+ - crates/backtrace-sys2/src/libbacktrace/xztest.c
147
+ - crates/backtrace-sys2/src/libbacktrace/zstdtest.c
148
+ - crates/backtrace-sys2/src/libbacktrace/ztest.c
56
149
  - exe/pf2
57
150
  - ext/pf2/Cargo.toml
58
151
  - ext/pf2/build.rs
59
152
  - ext/pf2/extconf.rb
153
+ - ext/pf2/src/backtrace.rs
60
154
  - ext/pf2/src/lib.rs
61
155
  - ext/pf2/src/profile.rs
62
156
  - ext/pf2/src/profile_serializer.rs