re2 1.22.2 → 1.23.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 (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -56,8 +56,9 @@ ABSL_ATTRIBUTE_UNUSED static int stacktraces_enabler = []() {
56
56
  }();
57
57
 
58
58
  template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
59
- static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
60
- const void *ucp, int *min_dropped_frames) {
59
+ static int UnwindImpl(void** result, uintptr_t* frames, int* sizes,
60
+ int max_depth, int skip_count, const void* ucp,
61
+ int* min_dropped_frames) {
61
62
  if (recursive || disable_stacktraces.load(std::memory_order_relaxed)) {
62
63
  return 0;
63
64
  }
@@ -79,8 +80,13 @@ static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
79
80
  result[i] = stack[i + skip_count];
80
81
 
81
82
  if (IS_STACK_FRAMES) {
82
- // No implementation for finding out the stack frame sizes yet.
83
- memset(sizes, 0, sizeof(*sizes) * static_cast<size_t>(result_count));
83
+ // No implementation for finding out the stack frames yet.
84
+ if (frames != nullptr) {
85
+ memset(frames, 0, sizeof(*frames) * static_cast<size_t>(result_count));
86
+ }
87
+ if (sizes != nullptr) {
88
+ memset(sizes, 0, sizeof(*sizes) * static_cast<size_t>(result_count));
89
+ }
84
90
  }
85
91
  if (min_dropped_frames != nullptr) {
86
92
  if (size - skip_count - max_depth > 0) {
@@ -21,6 +21,7 @@
21
21
  #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_
22
22
  #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_
23
23
 
24
+ #include "absl/debugging/internal/addresses.h"
24
25
  #if defined(__linux__)
25
26
  #include <asm/ptrace.h> // for PT_NIP.
26
27
  #include <ucontext.h> // for ucontext_t
@@ -40,22 +41,22 @@
40
41
 
41
42
  // Given a stack pointer, return the saved link register value.
42
43
  // Note that this is the link register for a callee.
43
- static inline void *StacktracePowerPCGetLR(void **sp) {
44
+ static inline void **StacktracePowerPCGetLRPtr(void **sp) {
44
45
  // PowerPC has 3 main ABIs, which say where in the stack the
45
46
  // Link Register is. For DARWIN and AIX (used by apple and
46
47
  // linux ppc64), it's in sp[2]. For SYSV (used by linux ppc),
47
48
  // it's in sp[1].
48
49
  #if defined(_CALL_AIX) || defined(_CALL_DARWIN)
49
- return *(sp+2);
50
+ return (sp + 2);
50
51
  #elif defined(_CALL_SYSV)
51
- return *(sp+1);
52
+ return (sp + 1);
52
53
  #elif defined(__APPLE__) || defined(__FreeBSD__) || \
53
54
  (defined(__linux__) && defined(__PPC64__))
54
55
  // This check is in case the compiler doesn't define _CALL_AIX/etc.
55
- return *(sp+2);
56
+ return (sp + 2);
56
57
  #elif defined(__linux)
57
58
  // This check is in case the compiler doesn't define _CALL_SYSV.
58
- return *(sp+1);
59
+ return (sp + 1);
59
60
  #else
60
61
  #error Need to specify the PPC ABI for your architecture.
61
62
  #endif
@@ -68,6 +69,7 @@ static inline void *StacktracePowerPCGetLR(void **sp) {
68
69
  template<bool STRICT_UNWINDING, bool IS_WITH_CONTEXT>
69
70
  ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
70
71
  ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
72
+ ABSL_ATTRIBUTE_NO_SANITIZE_THREAD // May read random elements from stack.
71
73
  static void **NextStackFrame(void **old_sp, const void *uc) {
72
74
  void **new_sp = (void **) *old_sp;
73
75
  enum { kStackAlignment = 16 };
@@ -125,9 +127,8 @@ static void **NextStackFrame(void **old_sp, const void *uc) {
125
127
  }
126
128
  }
127
129
 
128
- if (new_sp != nullptr &&
129
- kernel_symbol_status == kAddressValid &&
130
- StacktracePowerPCGetLR(new_sp) == kernel_sigtramp_rt64_address) {
130
+ if (new_sp != nullptr && kernel_symbol_status == kAddressValid &&
131
+ *StacktracePowerPCGetLRPtr(new_sp) == kernel_sigtramp_rt64_address) {
131
132
  const ucontext_t* signal_context =
132
133
  reinterpret_cast<const ucontext_t*>(uc);
133
134
  void **const sp_before_signal =
@@ -164,8 +165,10 @@ ABSL_ATTRIBUTE_NOINLINE static void AbslStacktracePowerPCDummyFunction() {
164
165
  template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
165
166
  ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
166
167
  ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
167
- static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
168
- const void *ucp, int *min_dropped_frames) {
168
+ ABSL_ATTRIBUTE_NO_SANITIZE_THREAD // May read random elements from stack.
169
+ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
170
+ int max_depth, int skip_count, const void *ucp,
171
+ int *min_dropped_frames) {
169
172
  void **sp;
170
173
  // Apple macOS uses an old version of gnu as -- both Darwin 7.9.0 (Panther)
171
174
  // and Darwin 8.8.1 (Tiger) use as 1.38. This means we have to use a
@@ -211,13 +214,21 @@ static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
211
214
  if (skip_count > 0) {
212
215
  skip_count--;
213
216
  } else {
214
- result[n] = StacktracePowerPCGetLR(sp);
217
+ void **lr = StacktracePowerPCGetLRPtr(sp);
218
+ result[n] = *lr;
215
219
  if (IS_STACK_FRAMES) {
216
- if (next_sp > sp) {
217
- sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp;
218
- } else {
219
- // A frame-size of 0 is used to indicate unknown frame size.
220
- sizes[n] = 0;
220
+ if (frames != nullptr) {
221
+ frames[n] = absl::debugging_internal::StripPointerMetadata(lr) +
222
+ 1 * sizeof(void *) /* go past the return address */;
223
+ }
224
+ if (sizes != nullptr) {
225
+ if (next_sp > sp) {
226
+ sizes[n] = absl::debugging_internal::StripPointerMetadata(next_sp) -
227
+ absl::debugging_internal::StripPointerMetadata(sp);
228
+ } else {
229
+ // A frame-size of 0 is used to indicate unknown frame size.
230
+ sizes[n] = 0;
231
+ }
221
232
  }
222
233
  }
223
234
  n++;
@@ -20,6 +20,7 @@
20
20
  #include <sys/ucontext.h>
21
21
 
22
22
  #include "absl/base/config.h"
23
+ #include "absl/debugging/internal/addresses.h"
23
24
  #if defined(__linux__)
24
25
  #include <sys/mman.h>
25
26
  #include <ucontext.h>
@@ -55,6 +56,7 @@ static inline ptrdiff_t ComputeStackFrameSize(const T *low, const T *high) {
55
56
  template <bool STRICT_UNWINDING, bool WITH_CONTEXT>
56
57
  ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
57
58
  ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
59
+ ABSL_ATTRIBUTE_NO_SANITIZE_THREAD // May read random elements from stack.
58
60
  static void ** NextStackFrame(void **old_frame_pointer, const void *uc,
59
61
  const std::pair<size_t, size_t> range) {
60
62
  // .
@@ -117,8 +119,10 @@ static void ** NextStackFrame(void **old_frame_pointer, const void *uc,
117
119
  template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
118
120
  ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
119
121
  ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
120
- static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
121
- const void *ucp, int *min_dropped_frames) {
122
+ ABSL_ATTRIBUTE_NO_SANITIZE_THREAD // May read random elements from stack.
123
+ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
124
+ int max_depth, int skip_count, const void *ucp,
125
+ int *min_dropped_frames) {
122
126
  // The `frame_pointer` that is computed here points to the top of the frame.
123
127
  // The two words preceding the address are the return address and the previous
124
128
  // frame pointer.
@@ -153,8 +157,13 @@ static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
153
157
  result[n] = return_address;
154
158
  if (IS_STACK_FRAMES) {
155
159
  // NextStackFrame() has already checked that frame size fits to int
156
- sizes[n] = static_cast<int>(ComputeStackFrameSize(frame_pointer,
157
- next_frame_pointer));
160
+ if (frames != nullptr) {
161
+ frames[n] =
162
+ absl::debugging_internal::StripPointerMetadata(frame_pointer);
163
+ }
164
+ if (sizes != nullptr) {
165
+ sizes[n] = ComputeStackFrameSize(frame_pointer, next_frame_pointer);
166
+ }
158
167
  }
159
168
  n++;
160
169
  }
@@ -2,9 +2,10 @@
2
2
  #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_UNIMPLEMENTED_INL_H_
3
3
 
4
4
  template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
5
- static int UnwindImpl(void** /* result */, int* /* sizes */,
6
- int /* max_depth */, int /* skip_count */,
7
- const void* /* ucp */, int *min_dropped_frames) {
5
+ static int UnwindImpl(void** /* result */, uintptr_t* /* frames */,
6
+ int* /* sizes */, int /* max_depth */,
7
+ int /* skip_count */, const void* /* ucp */,
8
+ int* min_dropped_frames) {
8
9
  if (min_dropped_frames != nullptr) {
9
10
  *min_dropped_frames = 0;
10
11
  }
@@ -37,42 +37,29 @@
37
37
  #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_
38
38
  #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_
39
39
 
40
- #include <windows.h> // for GetProcAddress and GetModuleHandle
41
- #include <cassert>
42
-
43
- typedef USHORT NTAPI RtlCaptureStackBackTrace_Function(
44
- IN ULONG frames_to_skip,
45
- IN ULONG frames_to_capture,
46
- OUT PVOID *backtrace,
47
- OUT PULONG backtrace_hash);
40
+ #include <windows.h> // CaptureStackBackTrace
48
41
 
49
- // It is not possible to load RtlCaptureStackBackTrace at static init time in
50
- // UWP. CaptureStackBackTrace is the public version of RtlCaptureStackBackTrace
51
- #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
52
- !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
53
- static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
54
- &::CaptureStackBackTrace;
55
- #else
56
- // Load the function we need at static init time, where we don't have
57
- // to worry about someone else holding the loader's lock.
58
- static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
59
- (RtlCaptureStackBackTrace_Function*)GetProcAddress(
60
- GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace");
61
- #endif // WINAPI_PARTITION_APP && !WINAPI_PARTITION_DESKTOP
42
+ #include <cassert>
62
43
 
63
44
  template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
64
- static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
65
- const void*, int* min_dropped_frames) {
45
+ static int UnwindImpl(void** result, uintptr_t* frames, int* sizes,
46
+ int max_depth, int skip_count, const void*,
47
+ int* min_dropped_frames) {
66
48
  USHORT n = 0;
67
- if (!RtlCaptureStackBackTrace_fn || skip_count < 0 || max_depth < 0) {
49
+ if (skip_count < 0 || max_depth < 0) {
68
50
  // can't get a stacktrace with no function/invalid args
69
51
  } else {
70
- n = RtlCaptureStackBackTrace_fn(static_cast<ULONG>(skip_count) + 2,
71
- static_cast<ULONG>(max_depth), result, 0);
52
+ n = CaptureStackBackTrace(static_cast<ULONG>(skip_count) + 2,
53
+ static_cast<ULONG>(max_depth), result, 0);
72
54
  }
73
55
  if (IS_STACK_FRAMES) {
74
- // No implementation for finding out the stack frame sizes yet.
75
- memset(sizes, 0, sizeof(*sizes) * n);
56
+ // No implementation for finding out the stack frames yet.
57
+ if (frames != nullptr) {
58
+ memset(frames, 0, sizeof(*frames) * n);
59
+ }
60
+ if (sizes != nullptr) {
61
+ memset(sizes, 0, sizeof(*sizes) * n);
62
+ }
76
63
  }
77
64
  if (min_dropped_frames != nullptr) {
78
65
  // Not implemented.
@@ -33,6 +33,7 @@
33
33
  #include "absl/base/macros.h"
34
34
  #include "absl/base/port.h"
35
35
  #include "absl/debugging/internal/address_is_readable.h"
36
+ #include "absl/debugging/internal/addresses.h"
36
37
  #include "absl/debugging/internal/vdso_support.h" // a no-op on non-elf or non-glibc systems
37
38
  #include "absl/debugging/stacktrace.h"
38
39
 
@@ -163,6 +164,7 @@ static uintptr_t GetFP(const void *vuc) {
163
164
  template <bool STRICT_UNWINDING, bool WITH_CONTEXT>
164
165
  ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
165
166
  ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
167
+ ABSL_ATTRIBUTE_NO_SANITIZE_THREAD // May read random elements from stack.
166
168
  static void **NextStackFrame(void **old_fp, const void *uc,
167
169
  size_t stack_low, size_t stack_high) {
168
170
  void **new_fp = (void **)*old_fp;
@@ -259,17 +261,18 @@ static void **NextStackFrame(void **old_fp, const void *uc,
259
261
  // it's supposed to.
260
262
  if (STRICT_UNWINDING &&
261
263
  (!WITH_CONTEXT || uc == nullptr || new_fp_u != GetFP(uc))) {
262
- // With the stack growing downwards, older stack frame must be
263
- // at a greater address that the current one.
264
- if (new_fp_u <= old_fp_u) return nullptr;
265
-
264
+ // With the stack growing downwards, older stack frame should be
265
+ // at a greater address that the current one. However if we get multiple
266
+ // signals handled on altstack the new frame pointer might return to the
267
+ // main stack, but be different than the value from the most recent
268
+ // ucontext.
266
269
  // If we get a very large frame size, it may be an indication that we
267
270
  // guessed frame pointers incorrectly and now risk a paging fault
268
271
  // dereferencing a wrong frame pointer. Or maybe not because large frames
269
272
  // are possible as well. The main stack is assumed to be readable,
270
273
  // so we assume the large frame is legit if we know the real stack bounds
271
274
  // and are within the stack.
272
- if (new_fp_u - old_fp_u > kMaxFrameBytes) {
275
+ if (new_fp_u <= old_fp_u || new_fp_u - old_fp_u > kMaxFrameBytes) {
273
276
  if (stack_high < kUnknownStackEnd &&
274
277
  static_cast<size_t>(getpagesize()) < stack_low) {
275
278
  // Stack bounds are known.
@@ -326,9 +329,11 @@ static void **NextStackFrame(void **old_fp, const void *uc,
326
329
  template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
327
330
  ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
328
331
  ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
332
+ ABSL_ATTRIBUTE_NO_SANITIZE_THREAD // May read random elements from stack.
329
333
  ABSL_ATTRIBUTE_NOINLINE
330
- static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
331
- const void *ucp, int *min_dropped_frames) {
334
+ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
335
+ int max_depth, int skip_count, const void *ucp,
336
+ int *min_dropped_frames) {
332
337
  int n = 0;
333
338
  void **fp = reinterpret_cast<void **>(__builtin_frame_address(0));
334
339
 
@@ -349,13 +354,19 @@ static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
349
354
  } else {
350
355
  result[n] = *(fp + 1);
351
356
  if (IS_STACK_FRAMES) {
352
- if (next_fp > fp) {
353
- sizes[n] = static_cast<int>(
354
- reinterpret_cast<uintptr_t>(next_fp) -
355
- reinterpret_cast<uintptr_t>(fp));
356
- } else {
357
- // A frame-size of 0 is used to indicate unknown frame size.
358
- sizes[n] = 0;
357
+ if (frames) {
358
+ frames[n] = absl::debugging_internal::StripPointerMetadata(fp) +
359
+ 2 * sizeof(void *) /* go past the return address */;
360
+ }
361
+ if (sizes) {
362
+ if (next_fp > fp) {
363
+ sizes[n] = static_cast<int>(
364
+ absl::debugging_internal::StripPointerMetadata(next_fp) -
365
+ absl::debugging_internal::StripPointerMetadata(fp));
366
+ } else {
367
+ // A frame-size of 0 is used to indicate unknown frame size.
368
+ sizes[n] = 0;
369
+ }
359
370
  }
360
371
  }
361
372
  n++;
@@ -17,6 +17,7 @@
17
17
  // VDSOSupport -- a class representing kernel VDSO (if present).
18
18
 
19
19
  #include "absl/debugging/internal/vdso_support.h"
20
+ #include "absl/base/attributes.h"
20
21
 
21
22
  #ifdef ABSL_HAVE_VDSO_SUPPORT // defined in vdso_support.h
22
23
 
@@ -190,6 +191,9 @@ long VDSOSupport::InitAndGetCPU(unsigned *cpu, // NOLINT(runtime/int)
190
191
  // This function must be very fast, and may be called from very
191
192
  // low level (e.g. tcmalloc). Hence I avoid things like
192
193
  // GoogleOnceInit() and ::operator new.
194
+ // The destination in VDSO is unknown to CFI and VDSO does not set MSAN
195
+ // shadow for the return value.
196
+ ABSL_ATTRIBUTE_NO_SANITIZE_CFI
193
197
  ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY
194
198
  int GetCPU() {
195
199
  unsigned cpu;
@@ -36,9 +36,18 @@
36
36
 
37
37
  #include "absl/debugging/stacktrace.h"
38
38
 
39
+ #include <stddef.h>
40
+ #include <stdint.h>
41
+ #include <stdlib.h>
42
+
43
+ #include <algorithm>
39
44
  #include <atomic>
45
+ #include <iterator>
40
46
 
41
47
  #include "absl/base/attributes.h"
48
+ #include "absl/base/config.h"
49
+ #include "absl/base/internal/low_level_alloc.h"
50
+ #include "absl/base/optimization.h"
42
51
  #include "absl/base/port.h"
43
52
  #include "absl/debugging/internal/stacktrace_config.h"
44
53
 
@@ -66,48 +75,137 @@ typedef int (*Unwinder)(void**, int*, int, int, const void*, int*);
66
75
  std::atomic<Unwinder> custom;
67
76
 
68
77
  template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
69
- ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, int* sizes,
70
- int max_depth, int skip_count,
71
- const void* uc,
78
+ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
79
+ int* sizes, size_t max_depth,
80
+ int skip_count, const void* uc,
72
81
  int* min_dropped_frames) {
73
- Unwinder f = &UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>;
74
- Unwinder g = custom.load(std::memory_order_acquire);
75
- if (g != nullptr) f = g;
82
+ static constexpr size_t kMinPageSize = 4096;
83
+
84
+ // Allow up to ~half a page, leaving some slack space for local variables etc.
85
+ static constexpr size_t kMaxStackElements =
86
+ (kMinPageSize / 2) / (sizeof(*frames) + sizeof(*sizes));
87
+
88
+ // Allocate a buffer dynamically, using the signal-safe allocator.
89
+ static constexpr auto allocate = [](size_t num_bytes) -> void* {
90
+ base_internal::InitSigSafeArena();
91
+ return base_internal::LowLevelAlloc::AllocWithArena(
92
+ num_bytes, base_internal::SigSafeArena());
93
+ };
94
+
95
+ uintptr_t frames_stackbuf[kMaxStackElements];
96
+ int sizes_stackbuf[kMaxStackElements];
97
+
98
+ // We only need to free the buffers if we allocated them with the signal-safe
99
+ // allocator.
100
+ bool must_free_frames = false;
101
+ bool must_free_sizes = false;
102
+
103
+ bool unwind_with_fixup = internal_stacktrace::ShouldFixUpStack();
104
+
105
+ #ifdef _WIN32
106
+ if (unwind_with_fixup) {
107
+ // TODO(b/434184677): Fixups are flaky and not supported on Windows
108
+ unwind_with_fixup = false;
109
+ #ifndef NDEBUG
110
+ abort();
111
+ #endif
112
+ }
113
+ #endif
76
114
 
115
+ if (unwind_with_fixup) {
116
+ // Some implementations of FixUpStack may need to be passed frame
117
+ // information from Unwind, even if the caller doesn't need that
118
+ // information. We allocate the necessary buffers for such implementations
119
+ // here.
120
+
121
+ if (frames == nullptr) {
122
+ if (max_depth <= std::size(frames_stackbuf)) {
123
+ frames = frames_stackbuf;
124
+ } else {
125
+ frames = static_cast<uintptr_t*>(allocate(max_depth * sizeof(*frames)));
126
+ must_free_frames = true;
127
+ }
128
+ }
129
+
130
+ if (sizes == nullptr) {
131
+ if (max_depth <= std::size(sizes_stackbuf)) {
132
+ sizes = sizes_stackbuf;
133
+ } else {
134
+ sizes = static_cast<int*>(allocate(max_depth * sizeof(*sizes)));
135
+ must_free_sizes = true;
136
+ }
137
+ }
138
+ }
139
+
140
+ Unwinder g = custom.load(std::memory_order_acquire);
141
+ size_t size;
77
142
  // Add 1 to skip count for the unwinder function itself
78
- int size = (*f)(result, sizes, max_depth, skip_count + 1, uc,
79
- min_dropped_frames);
80
- // To disable tail call to (*f)(...)
143
+ ++skip_count;
144
+ if (g != nullptr) {
145
+ size = static_cast<size_t>((*g)(result, sizes, static_cast<int>(max_depth),
146
+ skip_count, uc, min_dropped_frames));
147
+ // Frame pointers aren't returned by existing hooks, so clear them.
148
+ if (frames != nullptr) {
149
+ std::fill(frames, frames + size, uintptr_t());
150
+ }
151
+ } else {
152
+ size = static_cast<size_t>(
153
+ unwind_with_fixup
154
+ ? UnwindImpl<true, IS_WITH_CONTEXT>(
155
+ result, frames, sizes, static_cast<int>(max_depth),
156
+ skip_count, uc, min_dropped_frames)
157
+ : UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>(
158
+ result, frames, sizes, static_cast<int>(max_depth),
159
+ skip_count, uc, min_dropped_frames));
160
+ }
161
+ if (unwind_with_fixup) {
162
+ internal_stacktrace::FixUpStack(result, frames, sizes, max_depth, size);
163
+ }
164
+
165
+ if (must_free_sizes) {
166
+ base_internal::LowLevelAlloc::Free(sizes);
167
+ }
168
+
169
+ if (must_free_frames) {
170
+ base_internal::LowLevelAlloc::Free(frames);
171
+ }
172
+
81
173
  ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
82
- return size;
174
+ return static_cast<int>(size);
83
175
  }
84
176
 
85
177
  } // anonymous namespace
86
178
 
87
- ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackFrames(
88
- void** result, int* sizes, int max_depth, int skip_count) {
89
- return Unwind<true, false>(result, sizes, max_depth, skip_count, nullptr,
90
- nullptr);
179
+ ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
180
+ internal_stacktrace::GetStackFrames(void** result, uintptr_t* frames,
181
+ int* sizes, int max_depth, int skip_count) {
182
+ return Unwind<true, false>(result, frames, sizes,
183
+ static_cast<size_t>(max_depth), skip_count,
184
+ nullptr, nullptr);
91
185
  }
92
186
 
93
187
  ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
94
- GetStackFramesWithContext(void** result, int* sizes, int max_depth,
95
- int skip_count, const void* uc,
96
- int* min_dropped_frames) {
97
- return Unwind<true, true>(result, sizes, max_depth, skip_count, uc,
188
+ internal_stacktrace::GetStackFramesWithContext(void** result, uintptr_t* frames,
189
+ int* sizes, int max_depth,
190
+ int skip_count, const void* uc,
191
+ int* min_dropped_frames) {
192
+ return Unwind<true, true>(result, frames, sizes,
193
+ static_cast<size_t>(max_depth), skip_count, uc,
98
194
  min_dropped_frames);
99
195
  }
100
196
 
101
197
  ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTrace(
102
198
  void** result, int max_depth, int skip_count) {
103
- return Unwind<false, false>(result, nullptr, max_depth, skip_count, nullptr,
104
- nullptr);
199
+ return Unwind<false, false>(result, nullptr, nullptr,
200
+ static_cast<size_t>(max_depth), skip_count,
201
+ nullptr, nullptr);
105
202
  }
106
203
 
107
204
  ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
108
205
  GetStackTraceWithContext(void** result, int max_depth, int skip_count,
109
206
  const void* uc, int* min_dropped_frames) {
110
- return Unwind<false, true>(result, nullptr, max_depth, skip_count, uc,
207
+ return Unwind<false, true>(result, nullptr, nullptr,
208
+ static_cast<size_t>(max_depth), skip_count, uc,
111
209
  min_dropped_frames);
112
210
  }
113
211
 
@@ -115,10 +213,11 @@ void SetStackUnwinder(Unwinder w) {
115
213
  custom.store(w, std::memory_order_release);
116
214
  }
117
215
 
118
- int DefaultStackUnwinder(void** pcs, int* sizes, int depth, int skip,
119
- const void* uc, int* min_dropped_frames) {
216
+ ABSL_ATTRIBUTE_ALWAYS_INLINE static inline int DefaultStackUnwinderImpl(
217
+ void** pcs, uintptr_t* frames, int* sizes, int depth, int skip,
218
+ const void* uc, int* min_dropped_frames) {
120
219
  skip++; // For this function
121
- Unwinder f = nullptr;
220
+ decltype(&UnwindImpl<false, false>) f;
122
221
  if (sizes == nullptr) {
123
222
  if (uc == nullptr) {
124
223
  f = &UnwindImpl<false, false>;
@@ -132,11 +231,46 @@ int DefaultStackUnwinder(void** pcs, int* sizes, int depth, int skip,
132
231
  f = &UnwindImpl<true, true>;
133
232
  }
134
233
  }
135
- volatile int x = 0;
136
- int n = (*f)(pcs, sizes, depth, skip, uc, min_dropped_frames);
137
- x = 1; (void) x; // To disable tail call to (*f)(...)
234
+ return (*f)(pcs, frames, sizes, depth, skip, uc, min_dropped_frames);
235
+ }
236
+
237
+ ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
238
+ internal_stacktrace::DefaultStackUnwinder(void** pcs, uintptr_t* frames,
239
+ int* sizes, int depth, int skip,
240
+ const void* uc,
241
+ int* min_dropped_frames) {
242
+ int n = DefaultStackUnwinderImpl(pcs, frames, sizes, depth, skip, uc,
243
+ min_dropped_frames);
244
+ ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
245
+ return n;
246
+ }
247
+
248
+ ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int DefaultStackUnwinder(
249
+ void** pcs, int* sizes, int depth, int skip, const void* uc,
250
+ int* min_dropped_frames) {
251
+ int n = DefaultStackUnwinderImpl(pcs, nullptr, sizes, depth, skip, uc,
252
+ min_dropped_frames);
253
+ ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
138
254
  return n;
139
255
  }
140
256
 
257
+ ABSL_ATTRIBUTE_WEAK bool internal_stacktrace::ShouldFixUpStack() {
258
+ return false;
259
+ }
260
+
261
+ // Fixes up the stack trace of the current thread, in the first `depth` frames
262
+ // of each buffer. The buffers need to be larger than `depth`, to accommodate
263
+ // any newly inserted elements. `depth` is updated to reflect the new number of
264
+ // elements valid across all the buffers. (It is therefore recommended that all
265
+ // buffer sizes be equal.)
266
+ //
267
+ // The `frames` and `sizes` parameters denote the bounds of the stack frame
268
+ // corresponding to each instruction pointer in the `pcs`.
269
+ // Any elements inside these buffers may be zero or null, in which case that
270
+ // information is assumed to be absent/unavailable.
271
+ ABSL_ATTRIBUTE_WEAK void internal_stacktrace::FixUpStack(void**, uintptr_t*,
272
+ int*, size_t,
273
+ size_t&) {}
274
+
141
275
  ABSL_NAMESPACE_END
142
276
  } // namespace absl