re2 1.23.0 → 1.23.2

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 (280) hide show
  1. package/README.md +2 -0
  2. package/binding.gyp +3 -2
  3. package/package.json +5 -5
  4. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +25 -4
  5. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +6 -1
  6. package/vendor/abseil-cpp/CMakeLists.txt +2 -2
  7. package/vendor/abseil-cpp/MODULE.bazel +2 -2
  8. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +0 -1
  9. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -2
  10. package/vendor/abseil-cpp/absl/algorithm/container.h +191 -140
  11. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +818 -0
  12. package/vendor/abseil-cpp/absl/base/BUILD.bazel +44 -5
  13. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +42 -3
  14. package/vendor/abseil-cpp/absl/base/attributes.h +5 -1
  15. package/vendor/abseil-cpp/absl/base/call_once_test.cc +10 -10
  16. package/vendor/abseil-cpp/absl/base/casts.cc +61 -0
  17. package/vendor/abseil-cpp/absl/base/casts.h +128 -2
  18. package/vendor/abseil-cpp/absl/base/casts_test.cc +151 -0
  19. package/vendor/abseil-cpp/absl/base/config.h +13 -37
  20. package/vendor/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  21. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +4 -0
  22. package/vendor/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  23. package/vendor/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
  24. package/vendor/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  25. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +13 -7
  26. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +16 -11
  27. package/vendor/abseil-cpp/absl/base/internal/strerror_test.cc +2 -1
  28. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +0 -9
  29. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -6
  30. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -1
  31. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  32. package/vendor/abseil-cpp/absl/base/macros.h +40 -17
  33. package/vendor/abseil-cpp/absl/base/nullability.h +1 -1
  34. package/vendor/abseil-cpp/absl/base/optimization.h +1 -3
  35. package/vendor/abseil-cpp/absl/base/options.h +1 -27
  36. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +5 -8
  37. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +4 -0
  38. package/vendor/abseil-cpp/absl/container/BUILD.bazel +195 -2
  39. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +136 -2
  40. package/vendor/abseil-cpp/absl/container/btree_map.h +56 -6
  41. package/vendor/abseil-cpp/absl/container/btree_set.h +52 -6
  42. package/vendor/abseil-cpp/absl/container/btree_test.cc +107 -1
  43. package/vendor/abseil-cpp/absl/container/chunked_queue.h +755 -0
  44. package/vendor/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
  45. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
  46. package/vendor/abseil-cpp/absl/container/fixed_array.h +4 -6
  47. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +16 -6
  48. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +1 -2
  49. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +16 -6
  50. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -2
  51. package/vendor/abseil-cpp/absl/container/inlined_vector.h +12 -4
  52. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +21 -0
  53. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +14 -5
  54. package/vendor/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  55. package/vendor/abseil-cpp/absl/container/internal/common.h +51 -0
  56. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +7 -1
  57. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +11 -0
  58. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -2
  59. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +1 -2
  60. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -14
  61. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +11 -8
  62. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +3 -4
  63. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +23 -6
  64. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +31 -15
  65. package/vendor/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  66. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +4 -12
  67. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -10
  68. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +149 -23
  69. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +120 -126
  70. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +4 -0
  71. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +8 -0
  72. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +14 -59
  73. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +111 -22
  74. package/vendor/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +53 -112
  75. package/vendor/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +10 -15
  76. package/vendor/abseil-cpp/absl/container/internal/unordered_map_members_test.h +3 -3
  77. package/vendor/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +45 -61
  78. package/vendor/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +53 -112
  79. package/vendor/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +6 -9
  80. package/vendor/abseil-cpp/absl/container/internal/unordered_set_members_test.h +3 -3
  81. package/vendor/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +25 -31
  82. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  83. package/vendor/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
  84. package/vendor/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
  85. package/vendor/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  86. package/vendor/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
  87. package/vendor/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
  88. package/vendor/abseil-cpp/absl/container/node_hash_map.h +17 -6
  89. package/vendor/abseil-cpp/absl/container/node_hash_set.h +16 -5
  90. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +1 -2
  91. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +79 -0
  92. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +79 -0
  93. package/vendor/abseil-cpp/absl/copts/copts.py +17 -4
  94. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +67 -13
  95. package/vendor/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  96. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +31 -0
  97. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +34 -0
  98. package/vendor/abseil-cpp/absl/debugging/failure_signal_handler.cc +2 -2
  99. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
  100. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
  101. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
  102. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  103. package/vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  104. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +4 -0
  105. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -0
  106. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +1 -1
  107. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -7
  108. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  109. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +2 -1
  110. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  111. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +2 -2
  112. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +35 -67
  113. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +3 -0
  114. package/vendor/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +24 -1
  115. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +39 -15
  116. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  117. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +25 -40
  118. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  119. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +1 -0
  120. package/vendor/abseil-cpp/absl/flags/declare.h +9 -0
  121. package/vendor/abseil-cpp/absl/flags/flag.h +2 -1
  122. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  123. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +3 -2
  124. package/vendor/abseil-cpp/absl/flags/marshalling.cc +1 -16
  125. package/vendor/abseil-cpp/absl/flags/parse.cc +4 -2
  126. package/vendor/abseil-cpp/absl/flags/parse_test.cc +1 -1
  127. package/vendor/abseil-cpp/absl/flags/reflection.cc +4 -3
  128. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +4 -0
  129. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +4 -0
  130. package/vendor/abseil-cpp/absl/functional/any_invocable.h +3 -1
  131. package/vendor/abseil-cpp/absl/functional/function_ref.h +125 -20
  132. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +122 -9
  133. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +13 -2
  134. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +42 -4
  135. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +11 -0
  136. package/vendor/abseil-cpp/absl/hash/hash_test.cc +5 -2
  137. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +184 -53
  138. package/vendor/abseil-cpp/absl/hash/internal/hash.h +116 -10
  139. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +43 -4
  140. package/vendor/abseil-cpp/absl/log/BUILD.bazel +2 -0
  141. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +35 -1
  142. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +59 -4
  143. package/vendor/abseil-cpp/absl/log/die_if_null.cc +3 -1
  144. package/vendor/abseil-cpp/absl/log/die_if_null.h +24 -3
  145. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +31 -1
  146. package/vendor/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  147. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +3 -1
  148. package/vendor/abseil-cpp/absl/log/internal/check_op.h +44 -18
  149. package/vendor/abseil-cpp/absl/log/internal/conditions.h +38 -35
  150. package/vendor/abseil-cpp/absl/log/internal/container.h +312 -0
  151. package/vendor/abseil-cpp/absl/log/internal/container_test.cc +254 -0
  152. package/vendor/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  153. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -2
  154. package/vendor/abseil-cpp/absl/log/internal/log_message.h +5 -1
  155. package/vendor/abseil-cpp/absl/log/internal/strip.h +30 -31
  156. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +19 -19
  157. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  158. package/vendor/abseil-cpp/absl/log/log.h +2 -2
  159. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +51 -0
  160. package/vendor/abseil-cpp/absl/meta/CMakeLists.txt +46 -0
  161. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  162. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
  163. package/vendor/abseil-cpp/absl/meta/internal/requires.h +67 -0
  164. package/vendor/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
  165. package/vendor/abseil-cpp/absl/meta/type_traits.h +42 -1
  166. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +14 -0
  167. package/vendor/abseil-cpp/absl/numeric/int128.h +41 -21
  168. package/vendor/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  169. package/vendor/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  170. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +52 -5
  171. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +1 -0
  172. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +1 -0
  173. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +18 -7
  174. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +1 -0
  175. package/vendor/abseil-cpp/absl/random/internal/fastmath_test.cc +3 -5
  176. package/vendor/abseil-cpp/absl/random/internal/platform.h +0 -13
  177. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -1
  178. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +1 -27
  179. package/vendor/abseil-cpp/absl/status/BUILD.bazel +17 -0
  180. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +16 -0
  181. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +4 -2
  182. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +2 -2
  183. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +2 -1
  184. package/vendor/abseil-cpp/absl/status/status.cc +4 -0
  185. package/vendor/abseil-cpp/absl/status/status.h +5 -0
  186. package/vendor/abseil-cpp/absl/status/status_matchers.h +48 -0
  187. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +27 -0
  188. package/vendor/abseil-cpp/absl/status/status_test.cc +1 -0
  189. package/vendor/abseil-cpp/absl/status/statusor.h +1 -1
  190. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +101 -21
  191. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +99 -5
  192. package/vendor/abseil-cpp/absl/strings/ascii.h +9 -4
  193. package/vendor/abseil-cpp/absl/strings/cord.cc +15 -10
  194. package/vendor/abseil-cpp/absl/strings/cord.h +1 -1
  195. package/vendor/abseil-cpp/absl/strings/escaping.cc +126 -94
  196. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  197. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
  198. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +2 -0
  199. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +8 -8
  200. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +24 -18
  201. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +10 -16
  202. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +9 -7
  203. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
  204. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  205. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
  206. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
  207. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -12
  208. package/vendor/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  209. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +21 -7
  210. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +495 -8
  211. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -15
  212. package/vendor/abseil-cpp/absl/strings/numbers.cc +71 -8
  213. package/vendor/abseil-cpp/absl/strings/numbers.h +25 -12
  214. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +70 -0
  215. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
  216. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
  217. package/vendor/abseil-cpp/absl/strings/str_cat.cc +96 -91
  218. package/vendor/abseil-cpp/absl/strings/str_cat.h +17 -12
  219. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +4 -4
  220. package/vendor/abseil-cpp/absl/strings/str_split.h +1 -1
  221. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +1 -1
  222. package/vendor/abseil-cpp/absl/strings/string_view.h +8 -718
  223. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +1 -1265
  224. package/vendor/abseil-cpp/absl/strings/substitute.cc +24 -24
  225. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +2 -3
  226. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +1 -0
  227. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  228. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +15 -5
  229. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +2 -1
  230. package/vendor/abseil-cpp/absl/synchronization/mutex.h +47 -23
  231. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  232. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +2 -0
  233. package/vendor/abseil-cpp/absl/time/civil_time_benchmark.cc +1 -2
  234. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +58 -103
  235. package/vendor/abseil-cpp/absl/time/clock.cc +18 -16
  236. package/vendor/abseil-cpp/absl/time/clock_test.cc +2 -2
  237. package/vendor/abseil-cpp/absl/time/duration_benchmark.cc +144 -0
  238. package/vendor/abseil-cpp/absl/time/duration_test.cc +26 -29
  239. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +7 -1
  240. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +4 -2
  241. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  242. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
  243. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  244. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  245. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  246. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  247. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  248. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  249. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +9 -9
  250. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +12 -12
  251. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +47 -47
  252. package/vendor/abseil-cpp/absl/time/time.cc +4 -4
  253. package/vendor/abseil-cpp/absl/time/time.h +10 -10
  254. package/vendor/abseil-cpp/absl/time/time_test.cc +1 -0
  255. package/vendor/abseil-cpp/absl/types/compare.h +62 -61
  256. package/vendor/abseil-cpp/absl/types/compare_test.cc +3 -3
  257. package/vendor/abseil-cpp/absl/types/internal/span.h +1 -0
  258. package/vendor/abseil-cpp/absl/types/optional.h +2 -2
  259. package/vendor/abseil-cpp/absl/types/span.h +10 -2
  260. package/vendor/abseil-cpp/absl/utility/utility.h +13 -0
  261. package/vendor/abseil-cpp/ci/absl_alternate_options.h +0 -1
  262. package/vendor/abseil-cpp/ci/cmake_common.sh +1 -1
  263. package/vendor/abseil-cpp/ci/cmake_install_test.sh +6 -0
  264. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +1 -0
  265. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +2 -0
  266. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +1 -0
  267. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +1 -0
  268. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +1 -0
  269. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +1 -0
  270. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +1 -0
  271. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +6 -0
  272. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +6 -0
  273. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +3 -2
  274. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +5 -0
  275. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -0
  276. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -0
  277. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +6 -1
  278. package/vendor/abseil-cpp/absl/base/internal/identity.h +0 -39
  279. package/vendor/abseil-cpp/absl/strings/string_view.cc +0 -257
  280. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +0 -380
@@ -0,0 +1,118 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "absl/debugging/internal/borrowed_fixup_buffer.h"
16
+
17
+ #include <assert.h>
18
+ #include <limits.h>
19
+ #include <stddef.h>
20
+ #include <stdint.h>
21
+
22
+ #include <atomic>
23
+ #include <iterator>
24
+ #include <utility>
25
+
26
+ #include "absl/base/attributes.h"
27
+ #include "absl/base/config.h"
28
+ #include "absl/base/internal/low_level_alloc.h"
29
+ #include "absl/hash/hash.h"
30
+
31
+ namespace absl {
32
+ ABSL_NAMESPACE_BEGIN
33
+ namespace internal_stacktrace {
34
+
35
+ // A buffer for holding fix-up information for stack traces of common sizes_.
36
+ struct BorrowedFixupBuffer::FixupStackBuffer {
37
+ static constexpr size_t kMaxStackElements = 128; // Can be reduced if needed
38
+ std::atomic_flag in_use{};
39
+ uintptr_t frames[kMaxStackElements];
40
+ int sizes[kMaxStackElements];
41
+
42
+ ABSL_CONST_INIT static FixupStackBuffer g_instances[kNumStaticBuffers];
43
+ };
44
+
45
+ ABSL_CONST_INIT BorrowedFixupBuffer::FixupStackBuffer
46
+ BorrowedFixupBuffer::FixupStackBuffer::g_instances[kNumStaticBuffers] = {};
47
+
48
+ BorrowedFixupBuffer::~BorrowedFixupBuffer() {
49
+ if (borrowed_) {
50
+ std::move(*this).Unlock();
51
+ } else {
52
+ base_internal::LowLevelAlloc::Free(frames_);
53
+ }
54
+ }
55
+
56
+ BorrowedFixupBuffer::BorrowedFixupBuffer(size_t length)
57
+ : borrowed_(0 < length && length <= FixupStackBuffer::kMaxStackElements
58
+ ? TryLock()
59
+ : nullptr) {
60
+ if (borrowed_) {
61
+ InitViaBorrow();
62
+ } else {
63
+ InitViaAllocation(length);
64
+ }
65
+ }
66
+
67
+ void BorrowedFixupBuffer::InitViaBorrow() {
68
+ assert(borrowed_);
69
+ frames_ = borrowed_->frames;
70
+ sizes_ = borrowed_->sizes;
71
+ }
72
+
73
+ void BorrowedFixupBuffer::InitViaAllocation(size_t length) {
74
+ static_assert(alignof(decltype(*frames_)) >= alignof(decltype(*sizes_)),
75
+ "contiguous layout assumes decreasing alignment, otherwise "
76
+ "padding may be needed in the middle");
77
+ assert(!borrowed_);
78
+
79
+ base_internal::InitSigSafeArena();
80
+ void* buf = base_internal::LowLevelAlloc::AllocWithArena(
81
+ length * (sizeof(*frames_) + sizeof(*sizes_)),
82
+ base_internal::SigSafeArena());
83
+
84
+ if (buf == nullptr) {
85
+ frames_ = nullptr;
86
+ sizes_ = nullptr;
87
+ return;
88
+ }
89
+
90
+ frames_ = new (buf) uintptr_t[length];
91
+ sizes_ = new (static_cast<void*>(static_cast<unsigned char*>(buf) +
92
+ length * sizeof(*frames_))) int[length];
93
+ }
94
+
95
+ [[nodiscard]] BorrowedFixupBuffer::FixupStackBuffer*
96
+ BorrowedFixupBuffer::TryLock() {
97
+ constexpr size_t kNumSlots = std::size(FixupStackBuffer::g_instances);
98
+ const size_t i = absl::Hash<const void*>()(this) % kNumSlots;
99
+ for (size_t k = 0; k < kNumSlots; ++k) {
100
+ auto* instance = &FixupStackBuffer::g_instances[(i + k) % kNumSlots];
101
+ // Use memory_order_acquire to ensure that no reads and writes on the
102
+ // borrowed buffer are reordered before the borrowing.
103
+ if (!instance->in_use.test_and_set(std::memory_order_acquire)) {
104
+ return instance;
105
+ }
106
+ }
107
+ return nullptr;
108
+ }
109
+
110
+ void BorrowedFixupBuffer::Unlock() && {
111
+ // Use memory_order_release to ensure that no reads and writes on the borrowed
112
+ // buffer are reordered after the borrowing.
113
+ borrowed_->in_use.clear(std::memory_order_release);
114
+ }
115
+
116
+ } // namespace internal_stacktrace
117
+ ABSL_NAMESPACE_END
118
+ } // namespace absl
@@ -0,0 +1,71 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_
16
+ #define ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_
17
+
18
+ #include <stddef.h>
19
+ #include <stdint.h>
20
+ #include <stdlib.h>
21
+
22
+ #include "absl/base/config.h"
23
+
24
+ namespace absl {
25
+ ABSL_NAMESPACE_BEGIN
26
+ namespace internal_stacktrace {
27
+
28
+ // An RAII type that temporarily acquires a buffer for stack trace fix-ups from
29
+ // a pool of preallocated buffers, or attempts to allocate a new buffer if no
30
+ // such buffer is available.
31
+ // When destroyed, returns the buffer to the pool if it borrowed successfully,
32
+ // otherwise deallocates any previously allocated buffer.
33
+ class BorrowedFixupBuffer {
34
+ public:
35
+ static constexpr size_t kNumStaticBuffers = 64;
36
+ ~BorrowedFixupBuffer();
37
+
38
+ // The number of frames to allocate space for. Note that allocations can fail.
39
+ explicit BorrowedFixupBuffer(size_t length);
40
+
41
+ uintptr_t* frames() const { return frames_; }
42
+ int* sizes() const { return sizes_; }
43
+
44
+ private:
45
+ struct FixupStackBuffer;
46
+
47
+ uintptr_t* frames_;
48
+ int* sizes_;
49
+
50
+ // The borrowed pre-existing buffer, if any (if we haven't allocated our own)
51
+ FixupStackBuffer* const borrowed_;
52
+
53
+ void InitViaBorrow();
54
+ void InitViaAllocation(size_t length);
55
+
56
+ // Attempts to opportunistically borrow a small buffer in a thread- and
57
+ // signal-safe manner. Returns nullptr on failure.
58
+ [[nodiscard]] FixupStackBuffer* TryLock();
59
+
60
+ // Returns the borrowed buffer.
61
+ void Unlock() &&;
62
+
63
+ BorrowedFixupBuffer(const BorrowedFixupBuffer&) = delete;
64
+ BorrowedFixupBuffer& operator=(const BorrowedFixupBuffer&) = delete;
65
+ };
66
+
67
+ } // namespace internal_stacktrace
68
+ ABSL_NAMESPACE_END
69
+ } // namespace absl
70
+
71
+ #endif // ABSL_DEBUGGING_INTERNAL_BORROWED_FIXUP_BUFFER_H_
@@ -0,0 +1,97 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "absl/debugging/internal/borrowed_fixup_buffer.h"
16
+
17
+ #include <stddef.h>
18
+ #include <stdint.h>
19
+
20
+ #include <algorithm>
21
+ #include <functional>
22
+ #include <memory>
23
+
24
+ #include "gtest/gtest.h"
25
+ #include "absl/base/config.h"
26
+
27
+ namespace absl {
28
+ ABSL_NAMESPACE_BEGIN
29
+ namespace internal_stacktrace {
30
+ namespace {
31
+
32
+ TEST(BorrowedFixupBuffer, ProperReuse) {
33
+ uintptr_t first_borrowed_frame = 0;
34
+ uintptr_t first_borrowed_size = 0;
35
+
36
+ // Ensure that we borrow the same buffer each time, indicating proper reuse.
37
+ // Disable loop unrolling. We need all iterations to match exactly, to coax
38
+ // reuse of the the same underlying buffer.
39
+ #if defined(__GNUC__) || defined(__clang__)
40
+ #pragma GCC unroll 1 // <= 1 disables unrolling
41
+ #endif
42
+ for (int i = 0; i < 100; ++i) {
43
+ BorrowedFixupBuffer buf0(0);
44
+ EXPECT_EQ(buf0.frames(), nullptr);
45
+ EXPECT_EQ(buf0.sizes(), nullptr);
46
+
47
+ BorrowedFixupBuffer buf1(1);
48
+ EXPECT_NE(buf1.frames(), nullptr);
49
+ EXPECT_NE(buf1.sizes(), nullptr);
50
+ if (first_borrowed_frame == 0) {
51
+ first_borrowed_frame = reinterpret_cast<uintptr_t>(buf1.frames());
52
+ } else {
53
+ EXPECT_EQ(reinterpret_cast<uintptr_t>(buf1.frames()),
54
+ first_borrowed_frame);
55
+ }
56
+ if (first_borrowed_size == 0) {
57
+ first_borrowed_size = reinterpret_cast<uintptr_t>(buf1.sizes());
58
+ } else {
59
+ EXPECT_EQ(reinterpret_cast<uintptr_t>(buf1.sizes()), first_borrowed_size);
60
+ }
61
+
62
+ BorrowedFixupBuffer buf2(2);
63
+ EXPECT_NE(buf2.frames(), buf1.frames());
64
+ EXPECT_NE(buf2.sizes(), buf1.sizes());
65
+ EXPECT_NE(buf2.frames(), nullptr);
66
+ EXPECT_NE(buf2.sizes(), nullptr);
67
+ }
68
+ }
69
+
70
+ TEST(BorrowedFixupBuffer, NoOverlap) {
71
+ using BufferPtr = std::unique_ptr<BorrowedFixupBuffer>;
72
+ static constexpr std::less<const void*> less;
73
+ static constexpr size_t kBufLen = 5;
74
+ static constexpr size_t kNumBuffers =
75
+ BorrowedFixupBuffer::kNumStaticBuffers * 37 + 1;
76
+
77
+ auto bufs = std::make_unique<BufferPtr[]>(kNumBuffers);
78
+ for (size_t i = 0; i < kNumBuffers; ++i) {
79
+ bufs[i] = std::make_unique<BorrowedFixupBuffer>(kBufLen);
80
+ }
81
+
82
+ std::sort(bufs.get(), bufs.get() + kNumBuffers,
83
+ [](const BufferPtr& a, const BufferPtr& b) {
84
+ return less(a->frames(), b->frames());
85
+ });
86
+
87
+ // Verify there are no overlaps
88
+ for (size_t i = 1; i < kNumBuffers; ++i) {
89
+ EXPECT_FALSE(less(bufs[i]->frames(), bufs[i - 1]->frames() + kBufLen));
90
+ EXPECT_FALSE(less(bufs[i]->sizes(), bufs[i - 1]->sizes() + kBufLen));
91
+ }
92
+ }
93
+
94
+ } // namespace
95
+ } // namespace internal_stacktrace
96
+ ABSL_NAMESPACE_END
97
+ } // namespace absl
@@ -28,7 +28,7 @@
28
28
  #include "absl/base/config.h"
29
29
  #include "absl/debugging/internal/demangle_rust.h"
30
30
 
31
- #if ABSL_INTERNAL_HAS_CXA_DEMANGLE
31
+ #ifdef ABSL_INTERNAL_HAS_CXA_DEMANGLE
32
32
  #include <cxxabi.h>
33
33
  #endif
34
34
 
@@ -2941,7 +2941,7 @@ std::string DemangleString(const char* mangled) {
2941
2941
  std::string out;
2942
2942
  int status = 0;
2943
2943
  char* demangled = nullptr;
2944
- #if ABSL_INTERNAL_HAS_CXA_DEMANGLE
2944
+ #ifdef ABSL_INTERNAL_HAS_CXA_DEMANGLE
2945
2945
  demangled = abi::__cxa_demangle(mangled, nullptr, nullptr, &status);
2946
2946
  #endif
2947
2947
  if (status == 0 && demangled != nullptr) {
@@ -32,10 +32,10 @@
32
32
  #error ABSL_HAVE_ELF_MEM_IMAGE cannot be directly set
33
33
  #endif
34
34
 
35
- #if defined(__ELF__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
36
- !defined(__native_client__) && !defined(__asmjs__) && \
37
- !defined(__wasm__) && !defined(__HAIKU__) && !defined(__sun) && \
38
- !defined(__VXWORKS__) && !defined(__hexagon__) && !defined(__XTENSA__)
35
+ #if defined(__ELF__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
36
+ !defined(__asmjs__) && !defined(__wasm__) && !defined(__HAIKU__) && \
37
+ !defined(__sun) && !defined(__VXWORKS__) && !defined(__hexagon__) && \
38
+ !defined(__XTENSA__)
39
39
  #define ABSL_HAVE_ELF_MEM_IMAGE 1
40
40
  #endif
41
41
 
@@ -149,6 +149,10 @@ void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook) {
149
149
  debug_stack_trace_hook = hook;
150
150
  }
151
151
 
152
+ SymbolizeUrlEmitterLegacy GetDebugStackTraceHookLegacy() {
153
+ return debug_stack_trace_hook;
154
+ }
155
+
152
156
  SymbolizeUrlEmitter GetDebugStackTraceHook() { return debug_stack_trace_hook; }
153
157
 
154
158
  // Returns the program counter from signal context, nullptr if
@@ -32,12 +32,19 @@ typedef void OutputWriter(const char*, void*);
32
32
  // `hook` may be called from a signal handler.
33
33
  typedef void (*SymbolizeUrlEmitter)(void* const stack[], int depth,
34
34
  OutputWriter* writer, void* writer_arg);
35
+ typedef void (*SymbolizeUrlEmitterLegacy)(void* const stack[], int depth,
36
+ OutputWriter* writer,
37
+ void* writer_arg);
35
38
 
36
39
  // Registration of SymbolizeUrlEmitter for use inside of a signal handler.
37
40
  // This is inherently unsafe and must be signal safe code.
38
41
  void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook);
39
42
  SymbolizeUrlEmitter GetDebugStackTraceHook();
40
43
 
44
+ // Currently exact copy of above. Needed for the 3-CL dance due to
45
+ // TCMallocDebugStackTraceHook dependency on this API.
46
+ SymbolizeUrlEmitterLegacy GetDebugStackTraceHookLegacy();
47
+
41
48
  // Returns the program counter from signal context, or nullptr if
42
49
  // unknown. `vuc` is a ucontext_t*. We use void* to avoid the use of
43
50
  // ucontext_t on non-POSIX systems.
@@ -123,7 +123,7 @@ static void **NextStackFrame(void **old_frame_pointer, const void *uc,
123
123
  // earlier in the stack than the old_frame_pointer, then use it. If it is
124
124
  // later, then we have already unwound through it and it needs no special
125
125
  // handling.
126
- if (pre_signal_frame_pointer >= old_frame_pointer) {
126
+ if (pre_signal_frame_pointer > old_frame_pointer) {
127
127
  new_frame_pointer = pre_signal_frame_pointer;
128
128
  }
129
129
  }
@@ -52,13 +52,6 @@ static std::atomic<bool> disable_stacktraces(true); // Disabled until healthy.
52
52
  // Waiting until static initializers run seems to be late enough.
53
53
  // This file is included into stacktrace.cc so this will only run once.
54
54
  ABSL_ATTRIBUTE_UNUSED static int stacktraces_enabler = []() {
55
- // Check if we can even create stacktraces. If not, bail early and leave
56
- // disable_stacktraces set as-is.
57
- // clang-format off
58
- if (!EM_ASM_INT({ return (typeof wasmOffsetConverter !== 'undefined'); })) {
59
- return 0;
60
- }
61
- // clang-format on
62
55
  disable_stacktraces.store(false, std::memory_order_relaxed);
63
56
  return 0;
64
57
  }();
@@ -223,8 +223,9 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
223
223
  }
224
224
  if (sizes != nullptr) {
225
225
  if (next_sp > sp) {
226
- sizes[n] = absl::debugging_internal::StripPointerMetadata(next_sp) -
227
- absl::debugging_internal::StripPointerMetadata(sp);
226
+ sizes[n] = static_cast<int>(
227
+ absl::debugging_internal::StripPointerMetadata(next_sp) -
228
+ absl::debugging_internal::StripPointerMetadata(sp));
228
229
  } else {
229
230
  // A frame-size of 0 is used to indicate unknown frame size.
230
231
  sizes[n] = 0;
@@ -162,7 +162,8 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
162
162
  absl::debugging_internal::StripPointerMetadata(frame_pointer);
163
163
  }
164
164
  if (sizes != nullptr) {
165
- sizes[n] = ComputeStackFrameSize(frame_pointer, next_frame_pointer);
165
+ sizes[n] = static_cast<int>(
166
+ ComputeStackFrameSize(frame_pointer, next_frame_pointer));
166
167
  }
167
168
  }
168
169
  n++;
@@ -245,6 +245,7 @@ static void **NextStackFrame(void **old_fp, const void *uc,
245
245
  }
246
246
  #endif
247
247
 
248
+ const size_t page_size = static_cast<size_t>(getpagesize());
248
249
  const uintptr_t old_fp_u = reinterpret_cast<uintptr_t>(old_fp);
249
250
  const uintptr_t new_fp_u = reinterpret_cast<uintptr_t>(new_fp);
250
251
 
@@ -273,8 +274,7 @@ static void **NextStackFrame(void **old_fp, const void *uc,
273
274
  // so we assume the large frame is legit if we know the real stack bounds
274
275
  // and are within the stack.
275
276
  if (new_fp_u <= old_fp_u || new_fp_u - old_fp_u > kMaxFrameBytes) {
276
- if (stack_high < kUnknownStackEnd &&
277
- static_cast<size_t>(getpagesize()) < stack_low) {
277
+ if (stack_high < kUnknownStackEnd && page_size < stack_low) {
278
278
  // Stack bounds are known.
279
279
  if (!(stack_low < new_fp_u && new_fp_u <= stack_high)) {
280
280
  // new_fp_u is not within the known stack.
@@ -311,7 +311,12 @@ static void **NextStackFrame(void **old_fp, const void *uc,
311
311
  if (new_fp_u >= 0xffffe000) return nullptr;
312
312
  #endif
313
313
  #if !defined(_WIN32)
314
- if (!STRICT_UNWINDING) {
314
+ const uintptr_t old_fp_page = old_fp_u & ~(page_size - 1);
315
+ const uintptr_t new_fp_page = new_fp_u & ~(page_size - 1);
316
+ if (old_fp_page == new_fp_page && (new_fp_u & (sizeof(void*) - 1)) == 0) {
317
+ // We dereferenced the old_fp above, so it is safe to dereference
318
+ // new_fp if it's on the same page as the old_fp and is aligned.
319
+ } else if (!STRICT_UNWINDING) {
315
320
  // Lax sanity checks cause a crash in 32-bit tcmalloc/crash_reason_test
316
321
  // on AMD-based machines with VDSO-enabled kernels.
317
322
  // Make an extra sanity check to insure new_fp is readable.
@@ -28,8 +28,8 @@
28
28
 
29
29
  #ifdef ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE
30
30
  #error ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE cannot be directly set
31
- #elif defined(__ELF__) && defined(__GLIBC__) && !defined(__native_client__) \
32
- && !defined(__asmjs__) && !defined(__wasm__)
31
+ #elif defined(__ELF__) && defined(__GLIBC__) && !defined(__asmjs__) \
32
+ && !defined(__wasm__)
33
33
  #define ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE 1
34
34
 
35
35
  #include <elf.h>
@@ -42,29 +42,28 @@
42
42
 
43
43
  #include <algorithm>
44
44
  #include <atomic>
45
- #include <iterator>
46
45
 
47
46
  #include "absl/base/attributes.h"
48
47
  #include "absl/base/config.h"
49
- #include "absl/base/internal/low_level_alloc.h"
50
48
  #include "absl/base/optimization.h"
51
49
  #include "absl/base/port.h"
50
+ #include "absl/debugging/internal/borrowed_fixup_buffer.h"
52
51
  #include "absl/debugging/internal/stacktrace_config.h"
53
52
 
54
53
  #if defined(ABSL_STACKTRACE_INL_HEADER)
55
54
  #include ABSL_STACKTRACE_INL_HEADER
56
55
  #else
57
- # error Cannot calculate stack trace: will need to write for your environment
58
-
59
- # include "absl/debugging/internal/stacktrace_aarch64-inl.inc"
60
- # include "absl/debugging/internal/stacktrace_arm-inl.inc"
61
- # include "absl/debugging/internal/stacktrace_emscripten-inl.inc"
62
- # include "absl/debugging/internal/stacktrace_generic-inl.inc"
63
- # include "absl/debugging/internal/stacktrace_powerpc-inl.inc"
64
- # include "absl/debugging/internal/stacktrace_riscv-inl.inc"
65
- # include "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
66
- # include "absl/debugging/internal/stacktrace_win32-inl.inc"
67
- # include "absl/debugging/internal/stacktrace_x86-inl.inc"
56
+ #error Cannot calculate stack trace: will need to write for your environment
57
+
58
+ #include "absl/debugging/internal/stacktrace_aarch64-inl.inc"
59
+ #include "absl/debugging/internal/stacktrace_arm-inl.inc"
60
+ #include "absl/debugging/internal/stacktrace_emscripten-inl.inc"
61
+ #include "absl/debugging/internal/stacktrace_generic-inl.inc"
62
+ #include "absl/debugging/internal/stacktrace_powerpc-inl.inc"
63
+ #include "absl/debugging/internal/stacktrace_riscv-inl.inc"
64
+ #include "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
65
+ #include "absl/debugging/internal/stacktrace_win32-inl.inc"
66
+ #include "absl/debugging/internal/stacktrace_x86-inl.inc"
68
67
  #endif
69
68
 
70
69
  namespace absl {
@@ -78,29 +77,10 @@ template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
78
77
  ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
79
78
  int* sizes, size_t max_depth,
80
79
  int skip_count, const void* uc,
81
- int* min_dropped_frames) {
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();
80
+ int* min_dropped_frames,
81
+ bool unwind_with_fixup = true) {
82
+ unwind_with_fixup =
83
+ unwind_with_fixup && internal_stacktrace::ShouldFixUpStack();
104
84
 
105
85
  #ifdef _WIN32
106
86
  if (unwind_with_fixup) {
@@ -112,29 +92,17 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
112
92
  }
113
93
  #endif
114
94
 
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
- }
95
+ // Some implementations of FixUpStack may need to be passed frame
96
+ // information from Unwind, even if the caller doesn't need that
97
+ // information. We allocate the necessary buffers for such implementations
98
+ // here.
99
+ const internal_stacktrace::BorrowedFixupBuffer fixup_buffer(
100
+ unwind_with_fixup ? max_depth : 0);
101
+ if (frames == nullptr) {
102
+ frames = fixup_buffer.frames();
103
+ }
104
+ if (sizes == nullptr) {
105
+ sizes = fixup_buffer.sizes();
138
106
  }
139
107
 
140
108
  Unwinder g = custom.load(std::memory_order_acquire);
@@ -162,14 +130,6 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
162
130
  internal_stacktrace::FixUpStack(result, frames, sizes, max_depth, size);
163
131
  }
164
132
 
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
-
173
133
  ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
174
134
  return static_cast<int>(size);
175
135
  }
@@ -194,6 +154,14 @@ internal_stacktrace::GetStackFramesWithContext(void** result, uintptr_t* frames,
194
154
  min_dropped_frames);
195
155
  }
196
156
 
157
+ ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
158
+ internal_stacktrace::GetStackTraceNoFixup(void** result, int max_depth,
159
+ int skip_count) {
160
+ return Unwind<false, false>(result, nullptr, nullptr,
161
+ static_cast<size_t>(max_depth), skip_count,
162
+ nullptr, nullptr, /*unwind_with_fixup=*/false);
163
+ }
164
+
197
165
  ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTrace(
198
166
  void** result, int max_depth, int skip_count) {
199
167
  return Unwind<false, false>(result, nullptr, nullptr,
@@ -69,6 +69,9 @@ extern int GetStackFramesWithContext(void** result, uintptr_t* frames,
69
69
  int* sizes, int max_depth, int skip_count,
70
70
  const void* uc, int* min_dropped_frames);
71
71
 
72
+ // As above, but skips fix-ups for efficiency.
73
+ extern int GetStackTraceNoFixup(void** result, int max_depth, int skip_count);
74
+
72
75
  // Same as `absl::DefaultStackUnwinder`, but with an optional `frames` parameter
73
76
  // to allow callers to receive the raw stack frame addresses.
74
77
  // This is internal for now; do not depend on this externally.
@@ -12,12 +12,25 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
+ #include <stddef.h>
16
+ #include <stdint.h>
17
+
15
18
  #include "absl/base/attributes.h"
16
19
  #include "absl/base/config.h"
17
20
  #include "absl/base/optimization.h"
21
+ #include "absl/cleanup/cleanup.h"
18
22
  #include "absl/debugging/stacktrace.h"
19
23
  #include "benchmark/benchmark.h"
20
24
 
25
+ static bool g_enable_fixup = false;
26
+
27
+ #if ABSL_HAVE_ATTRIBUTE_WEAK
28
+ // Override these weak symbols if possible.
29
+ bool absl::internal_stacktrace::ShouldFixUpStack() { return g_enable_fixup; }
30
+ void absl::internal_stacktrace::FixUpStack(void**, uintptr_t*, int*, size_t,
31
+ size_t&) {}
32
+ #endif
33
+
21
34
  namespace absl {
22
35
  ABSL_NAMESPACE_BEGIN
23
36
  namespace {
@@ -42,14 +55,24 @@ ABSL_ATTRIBUTE_NOINLINE void func(benchmark::State& state, int x, int depth) {
42
55
  func(state, --x, depth);
43
56
  }
44
57
 
58
+ template <bool EnableFixup>
45
59
  void BM_GetStackTrace(benchmark::State& state) {
60
+ const Cleanup restore_state(
61
+ [prev = g_enable_fixup]() { g_enable_fixup = prev; });
62
+ g_enable_fixup = EnableFixup;
46
63
  int depth = state.range(0);
47
64
  for (auto s : state) {
48
65
  func(state, depth, depth);
49
66
  }
50
67
  }
51
68
 
52
- BENCHMARK(BM_GetStackTrace)->DenseRange(10, kMaxStackDepth, 10);
69
+ #if ABSL_HAVE_ATTRIBUTE_WEAK
70
+ auto& BM_GetStackTraceWithFixup = BM_GetStackTrace<true>;
71
+ BENCHMARK(BM_GetStackTraceWithFixup)->DenseRange(10, kMaxStackDepth, 10);
72
+ #endif
73
+
74
+ auto& BM_GetStackTraceWithoutFixup = BM_GetStackTrace<false>;
75
+ BENCHMARK(BM_GetStackTraceWithoutFixup)->DenseRange(10, kMaxStackDepth, 10);
53
76
  } // namespace
54
77
  ABSL_NAMESPACE_END
55
78
  } // namespace absl