re2 1.24.0 → 1.25.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.
- package/LICENSE +15 -20
- package/README.md +63 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +9 -5
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/new.cc +6 -6
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +85 -10
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +40 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +497 -0
- package/llms.txt +135 -0
- package/package.json +19 -11
- package/re2.d.ts +2 -0
- package/re2.js +1 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +53 -9
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
|
@@ -142,6 +142,10 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
|
|
|
142
142
|
void *return_address = nullptr;
|
|
143
143
|
while (frame_pointer && n < max_depth) {
|
|
144
144
|
return_address = frame_pointer[-1];
|
|
145
|
+
// Follow x86 and stop if the return address is null (end of stack).
|
|
146
|
+
if (return_address == nullptr) {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
145
149
|
|
|
146
150
|
// The absl::GetStackFrames routine is called when we are in some
|
|
147
151
|
// informational context (the failure signal handler for example). Use the
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
#include <cstddef>
|
|
24
24
|
#include <cstdint>
|
|
25
|
+
#include <memory>
|
|
25
26
|
|
|
26
27
|
#include "absl/base/config.h"
|
|
27
28
|
#include "absl/strings/string_view.h"
|
|
@@ -35,7 +36,6 @@
|
|
|
35
36
|
#include <elf.h>
|
|
36
37
|
#include <link.h> // For ElfW() macro.
|
|
37
38
|
#include <functional>
|
|
38
|
-
#include <string>
|
|
39
39
|
|
|
40
40
|
namespace absl {
|
|
41
41
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -78,44 +78,54 @@ namespace absl {
|
|
|
78
78
|
ABSL_NAMESPACE_BEGIN
|
|
79
79
|
namespace debugging_internal {
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
// The program counter we are getting symbolic name for.
|
|
83
|
-
const void *pc;
|
|
84
|
-
// 0 for main executable, load address for shared libraries.
|
|
85
|
-
ptrdiff_t relocation;
|
|
86
|
-
// Read-only file descriptor for ELF image covering "pc",
|
|
87
|
-
// or -1 if no such ELF image exists in /proc/self/maps.
|
|
88
|
-
int fd;
|
|
89
|
-
// Output buffer, size.
|
|
90
|
-
// Note: the buffer may not be empty -- default symbolizer may have already
|
|
91
|
-
// produced some output, and earlier decorators may have adorned it in
|
|
92
|
-
// some way. You are free to replace or augment the contents (within the
|
|
93
|
-
// symbol_buf_size limit).
|
|
94
|
-
char *const symbol_buf;
|
|
95
|
-
size_t symbol_buf_size;
|
|
96
|
-
// Temporary scratch space, size.
|
|
97
|
-
// Use that space in preference to allocating your own stack buffer to
|
|
98
|
-
// conserve stack.
|
|
99
|
-
char *const tmp_buf;
|
|
100
|
-
size_t tmp_buf_size;
|
|
101
|
-
// User-provided argument
|
|
102
|
-
void* arg;
|
|
103
|
-
};
|
|
104
|
-
using SymbolDecorator = void (*)(const SymbolDecoratorArgs *);
|
|
81
|
+
class SymbolDecorator;
|
|
105
82
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
int InstallSymbolDecorator(SymbolDecorator decorator, void* arg);
|
|
83
|
+
class SymbolDecoratorDeleter {
|
|
84
|
+
public:
|
|
85
|
+
void operator()(SymbolDecorator* ptr);
|
|
86
|
+
};
|
|
111
87
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
88
|
+
using SymbolDecoratorPtr =
|
|
89
|
+
std::unique_ptr<SymbolDecorator, SymbolDecoratorDeleter>;
|
|
90
|
+
|
|
91
|
+
// Represents an object that can add additional information to a symbol
|
|
92
|
+
// name.
|
|
93
|
+
class SymbolDecorator {
|
|
94
|
+
public:
|
|
95
|
+
// The signature of a factory function used to register and create a symbol
|
|
96
|
+
// decorator. This function may be called from a signal handler, so it must
|
|
97
|
+
// use an async-signal-safe allocation mechanism to allocate the returned
|
|
98
|
+
// object.
|
|
99
|
+
using Factory = SymbolDecoratorPtr(int fd);
|
|
100
|
+
|
|
101
|
+
virtual ~SymbolDecorator() = default;
|
|
102
|
+
|
|
103
|
+
// Decorates symbol name with additional information.
|
|
104
|
+
//
|
|
105
|
+
// pc represents the program counter we are getting symbolic name for.
|
|
106
|
+
// relocation is difference between the link-time and the load-time address.
|
|
107
|
+
// symbol_buf and symbol_buf_size represent the output buffer and its size.
|
|
108
|
+
// Note that the buffer may not be empty -- default symbolizer may have
|
|
109
|
+
// already produced some output. You are free to replace or augment the
|
|
110
|
+
// contents (within the symbol_buf_size limit). tmp_buf and tmp_buf_size
|
|
111
|
+
// represent temporary scratch space and its size. Use that space in
|
|
112
|
+
// preference to allocating your own stack buffer to conserve stack.
|
|
113
|
+
//
|
|
114
|
+
// This function will not be called concurrently for the same object, but it
|
|
115
|
+
// may be called from a signal handler, so it must avoid any operation that is
|
|
116
|
+
// not async-signal-safe. However, it does not have to be reentrant -- if it
|
|
117
|
+
// is interrupted by a signal and the handler tries to symbolize, the request
|
|
118
|
+
// will go to a new SymbolDecorator instance.
|
|
119
|
+
virtual void Decorate(
|
|
120
|
+
const void* pc,
|
|
121
|
+
ptrdiff_t relocation,
|
|
122
|
+
char* symbol_buf, size_t symbol_buf_size,
|
|
123
|
+
char* tmp_buf, size_t tmp_buf_size) const = 0;
|
|
124
|
+
};
|
|
115
125
|
|
|
116
|
-
//
|
|
117
|
-
|
|
118
|
-
|
|
126
|
+
// Registers a new symbol decorator factory and returns the previous one.
|
|
127
|
+
SymbolDecorator::Factory* SetSymbolDecoratorFactory(
|
|
128
|
+
SymbolDecorator::Factory* factory);
|
|
119
129
|
|
|
120
130
|
// Registers an address range to a file mapping.
|
|
121
131
|
//
|
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
#include "absl/base/config.h"
|
|
48
48
|
#include "absl/base/optimization.h"
|
|
49
49
|
#include "absl/base/port.h"
|
|
50
|
-
#include "absl/debugging/internal/borrowed_fixup_buffer.h"
|
|
51
50
|
#include "absl/debugging/internal/stacktrace_config.h"
|
|
52
51
|
|
|
53
52
|
#if defined(ABSL_STACKTRACE_INL_HEADER)
|
|
@@ -92,19 +91,6 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
|
|
|
92
91
|
}
|
|
93
92
|
#endif
|
|
94
93
|
|
|
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();
|
|
106
|
-
}
|
|
107
|
-
|
|
108
94
|
Unwinder g = custom.load(std::memory_order_acquire);
|
|
109
95
|
size_t size;
|
|
110
96
|
// Add 1 to skip count for the unwinder function itself
|
|
@@ -117,14 +103,9 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
|
|
|
117
103
|
std::fill(frames, frames + size, uintptr_t());
|
|
118
104
|
}
|
|
119
105
|
} else {
|
|
120
|
-
size = static_cast<size_t>(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
result, frames, sizes, static_cast<int>(max_depth),
|
|
124
|
-
skip_count, uc, min_dropped_frames)
|
|
125
|
-
: UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>(
|
|
126
|
-
result, frames, sizes, static_cast<int>(max_depth),
|
|
127
|
-
skip_count, uc, min_dropped_frames));
|
|
106
|
+
size = static_cast<size_t>(UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>(
|
|
107
|
+
result, frames, sizes, static_cast<int>(max_depth), skip_count, uc,
|
|
108
|
+
min_dropped_frames));
|
|
128
109
|
}
|
|
129
110
|
if (unwind_with_fixup) {
|
|
130
111
|
internal_stacktrace::FixUpStack(result, frames, sizes, max_depth, size);
|
|
@@ -136,24 +117,13 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
|
|
|
136
117
|
|
|
137
118
|
} // anonymous namespace
|
|
138
119
|
|
|
139
|
-
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return Unwind<true, false>(result, frames, sizes,
|
|
120
|
+
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackFrames(
|
|
121
|
+
void** result, int* sizes, int max_depth, int skip_count) {
|
|
122
|
+
return Unwind<true, false>(result, nullptr, sizes,
|
|
143
123
|
static_cast<size_t>(max_depth), skip_count,
|
|
144
124
|
nullptr, nullptr);
|
|
145
125
|
}
|
|
146
126
|
|
|
147
|
-
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
|
|
148
|
-
internal_stacktrace::GetStackFramesWithContext(void** result, uintptr_t* frames,
|
|
149
|
-
int* sizes, int max_depth,
|
|
150
|
-
int skip_count, const void* uc,
|
|
151
|
-
int* min_dropped_frames) {
|
|
152
|
-
return Unwind<true, true>(result, frames, sizes,
|
|
153
|
-
static_cast<size_t>(max_depth), skip_count, uc,
|
|
154
|
-
min_dropped_frames);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
127
|
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
|
|
158
128
|
internal_stacktrace::GetStackTraceNoFixup(void** result, int max_depth,
|
|
159
129
|
int skip_count) {
|
|
@@ -162,6 +132,15 @@ internal_stacktrace::GetStackTraceNoFixup(void** result, int max_depth,
|
|
|
162
132
|
nullptr, nullptr, /*unwind_with_fixup=*/false);
|
|
163
133
|
}
|
|
164
134
|
|
|
135
|
+
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
|
|
136
|
+
GetStackFramesWithContext(void** result, int* sizes, int max_depth,
|
|
137
|
+
int skip_count, const void* uc,
|
|
138
|
+
int* min_dropped_frames) {
|
|
139
|
+
return Unwind<true, true>(result, nullptr, sizes,
|
|
140
|
+
static_cast<size_t>(max_depth), skip_count, uc,
|
|
141
|
+
min_dropped_frames);
|
|
142
|
+
}
|
|
143
|
+
|
|
165
144
|
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTrace(
|
|
166
145
|
void** result, int max_depth, int skip_count) {
|
|
167
146
|
return Unwind<false, false>(result, nullptr, nullptr,
|
|
@@ -181,9 +160,8 @@ void SetStackUnwinder(Unwinder w) {
|
|
|
181
160
|
custom.store(w, std::memory_order_release);
|
|
182
161
|
}
|
|
183
162
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
const void* uc, int* min_dropped_frames) {
|
|
163
|
+
int DefaultStackUnwinder(void** pcs, int* sizes, int depth, int skip,
|
|
164
|
+
const void* uc, int* min_dropped_frames) {
|
|
187
165
|
skip++; // For this function
|
|
188
166
|
decltype(&UnwindImpl<false, false>) f;
|
|
189
167
|
if (sizes == nullptr) {
|
|
@@ -199,25 +177,7 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE static inline int DefaultStackUnwinderImpl(
|
|
|
199
177
|
f = &UnwindImpl<true, true>;
|
|
200
178
|
}
|
|
201
179
|
}
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
|
|
206
|
-
internal_stacktrace::DefaultStackUnwinder(void** pcs, uintptr_t* frames,
|
|
207
|
-
int* sizes, int depth, int skip,
|
|
208
|
-
const void* uc,
|
|
209
|
-
int* min_dropped_frames) {
|
|
210
|
-
int n = DefaultStackUnwinderImpl(pcs, frames, sizes, depth, skip, uc,
|
|
211
|
-
min_dropped_frames);
|
|
212
|
-
ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
|
|
213
|
-
return n;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int DefaultStackUnwinder(
|
|
217
|
-
void** pcs, int* sizes, int depth, int skip, const void* uc,
|
|
218
|
-
int* min_dropped_frames) {
|
|
219
|
-
int n = DefaultStackUnwinderImpl(pcs, nullptr, sizes, depth, skip, uc,
|
|
220
|
-
min_dropped_frames);
|
|
180
|
+
int n = (*f)(pcs, nullptr, sizes, depth, skip, uc, min_dropped_frames);
|
|
221
181
|
ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
|
|
222
182
|
return n;
|
|
223
183
|
}
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
#include <stddef.h>
|
|
35
35
|
#include <stdint.h>
|
|
36
36
|
|
|
37
|
-
#include "absl/base/attributes.h"
|
|
38
37
|
#include "absl/base/config.h"
|
|
39
38
|
|
|
40
39
|
namespace absl {
|
|
@@ -42,43 +41,9 @@ ABSL_NAMESPACE_BEGIN
|
|
|
42
41
|
|
|
43
42
|
namespace internal_stacktrace {
|
|
44
43
|
|
|
45
|
-
// Same as `absl::GetStackFrames`, but with an optional `frames` parameter to
|
|
46
|
-
// allow callers to receive the raw stack frame addresses.
|
|
47
|
-
// This is internal for now; use `absl::GetStackFrames()` instead.
|
|
48
|
-
extern int GetStackFrames(void** result, uintptr_t* frames, int* sizes,
|
|
49
|
-
int max_depth, int skip_count);
|
|
50
|
-
|
|
51
|
-
// Same as `absl::GetStackFramesWithContext`, but with an optional `frames`
|
|
52
|
-
// parameter to allow callers to receive a start address for each stack frame.
|
|
53
|
-
// The address may be zero in cases where it cannot be computed.
|
|
54
|
-
//
|
|
55
|
-
// DO NOT use this function without consulting the owners of absl/debuggging.
|
|
56
|
-
// There is NO GUARANTEE on the precise frame addresses returned on any given
|
|
57
|
-
// platform. It is only intended to provide sufficient non-overlapping bounds on
|
|
58
|
-
// the local variables of a stack frame when used in conjunction with the
|
|
59
|
-
// returned frame sizes. The actual pointers may be ABI-dependent, may vary at
|
|
60
|
-
// run time, and are subject to breakage without notice.
|
|
61
|
-
//
|
|
62
|
-
// Implementation note:
|
|
63
|
-
// Currently, we *attempt* to return the Canonical Frame Address (CFA) in DWARF
|
|
64
|
-
// on most platforms. This is the value of the stack pointer just before the
|
|
65
|
-
// 'call' instruction is executed in the caller.
|
|
66
|
-
// Not all platforms and toolchains support this exact address, so this should
|
|
67
|
-
// not be relied on for correctness.
|
|
68
|
-
extern int GetStackFramesWithContext(void** result, uintptr_t* frames,
|
|
69
|
-
int* sizes, int max_depth, int skip_count,
|
|
70
|
-
const void* uc, int* min_dropped_frames);
|
|
71
|
-
|
|
72
44
|
// As above, but skips fix-ups for efficiency.
|
|
73
45
|
extern int GetStackTraceNoFixup(void** result, int max_depth, int skip_count);
|
|
74
46
|
|
|
75
|
-
// Same as `absl::DefaultStackUnwinder`, but with an optional `frames` parameter
|
|
76
|
-
// to allow callers to receive the raw stack frame addresses.
|
|
77
|
-
// This is internal for now; do not depend on this externally.
|
|
78
|
-
extern int DefaultStackUnwinder(void** pcs, uintptr_t* frames, int* sizes,
|
|
79
|
-
int max_depth, int skip_count, const void* uc,
|
|
80
|
-
int* min_dropped_frames);
|
|
81
|
-
|
|
82
47
|
} // namespace internal_stacktrace
|
|
83
48
|
|
|
84
49
|
// GetStackFrames()
|
|
@@ -123,13 +88,8 @@ extern int DefaultStackUnwinder(void** pcs, uintptr_t* frames, int* sizes,
|
|
|
123
88
|
//
|
|
124
89
|
// This routine may return fewer stack frame entries than are
|
|
125
90
|
// available. Also note that `result` and `sizes` must both be non-null.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
int max_depth,
|
|
129
|
-
int skip_count) {
|
|
130
|
-
return internal_stacktrace::GetStackFrames(result, nullptr, sizes, max_depth,
|
|
131
|
-
skip_count);
|
|
132
|
-
}
|
|
91
|
+
extern int GetStackFrames(void** result, int* sizes, int max_depth,
|
|
92
|
+
int skip_count);
|
|
133
93
|
|
|
134
94
|
// GetStackFramesWithContext()
|
|
135
95
|
//
|
|
@@ -152,12 +112,9 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int GetStackFrames(void** result,
|
|
|
152
112
|
// or other reasons. (This value will be set to `0` if no frames were dropped.)
|
|
153
113
|
// The number of total stack frames is guaranteed to be >= skip_count +
|
|
154
114
|
// max_depth + *min_dropped_frames.
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
return internal_stacktrace::GetStackFramesWithContext(
|
|
159
|
-
result, nullptr, sizes, max_depth, skip_count, uc, min_dropped_frames);
|
|
160
|
-
}
|
|
115
|
+
extern int GetStackFramesWithContext(void** result, int* sizes, int max_depth,
|
|
116
|
+
int skip_count, const void* uc,
|
|
117
|
+
int* min_dropped_frames);
|
|
161
118
|
|
|
162
119
|
// GetStackTrace()
|
|
163
120
|
//
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
#include <stddef.h>
|
|
18
18
|
#include <stdint.h>
|
|
19
19
|
|
|
20
|
-
#include <algorithm>
|
|
21
20
|
#include <cerrno>
|
|
22
21
|
#include <csignal>
|
|
23
22
|
#include <cstring>
|
|
@@ -63,7 +62,6 @@ struct StackTrace {
|
|
|
63
62
|
static constexpr int kStackCount = 64;
|
|
64
63
|
int depth;
|
|
65
64
|
void* result[kStackCount];
|
|
66
|
-
uintptr_t frames[kStackCount];
|
|
67
65
|
int sizes[kStackCount];
|
|
68
66
|
};
|
|
69
67
|
|
|
@@ -193,48 +191,6 @@ ABSL_ATTRIBUTE_NOINLINE static void FixupNoFixupEquivalenceNoInline() {
|
|
|
193
191
|
ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
|
|
194
192
|
EXPECT_GT(g_should_fixup_calls, 0);
|
|
195
193
|
EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
|
|
196
|
-
|
|
197
|
-
// ==========================================================================
|
|
198
|
-
|
|
199
|
-
g_fixup_calls = 0;
|
|
200
|
-
g_should_fixup_calls = 0;
|
|
201
|
-
a.depth = absl::internal_stacktrace::GetStackFrames(
|
|
202
|
-
a.result, a.frames, a.sizes, kStackCount, kSkip);
|
|
203
|
-
g_enable_fixup = !g_enable_fixup;
|
|
204
|
-
b.depth = absl::internal_stacktrace::GetStackFrames(
|
|
205
|
-
b.result, b.frames, b.sizes, kStackCount, kSkip);
|
|
206
|
-
EXPECT_THAT(
|
|
207
|
-
absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
|
|
208
|
-
ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
|
|
209
|
-
EXPECT_THAT(
|
|
210
|
-
absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
|
|
211
|
-
ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
|
|
212
|
-
EXPECT_THAT(
|
|
213
|
-
absl::MakeSpan(a.frames, static_cast<size_t>(a.depth)),
|
|
214
|
-
ContainerEq(absl::MakeSpan(b.frames, static_cast<size_t>(b.depth))));
|
|
215
|
-
EXPECT_GT(g_should_fixup_calls, 0);
|
|
216
|
-
EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
|
|
217
|
-
|
|
218
|
-
// ==========================================================================
|
|
219
|
-
|
|
220
|
-
g_fixup_calls = 0;
|
|
221
|
-
g_should_fixup_calls = 0;
|
|
222
|
-
a.depth = absl::internal_stacktrace::GetStackFramesWithContext(
|
|
223
|
-
a.result, a.frames, a.sizes, kStackCount, kSkip, nullptr, nullptr);
|
|
224
|
-
g_enable_fixup = !g_enable_fixup;
|
|
225
|
-
b.depth = absl::internal_stacktrace::GetStackFramesWithContext(
|
|
226
|
-
b.result, b.frames, b.sizes, kStackCount, kSkip, nullptr, nullptr);
|
|
227
|
-
EXPECT_THAT(
|
|
228
|
-
absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
|
|
229
|
-
ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
|
|
230
|
-
EXPECT_THAT(
|
|
231
|
-
absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
|
|
232
|
-
ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
|
|
233
|
-
EXPECT_THAT(
|
|
234
|
-
absl::MakeSpan(a.frames, static_cast<size_t>(a.depth)),
|
|
235
|
-
ContainerEq(absl::MakeSpan(b.frames, static_cast<size_t>(b.depth))));
|
|
236
|
-
EXPECT_GT(g_should_fixup_calls, 0);
|
|
237
|
-
EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
|
|
238
194
|
}
|
|
239
195
|
|
|
240
196
|
TEST(StackTrace, FixupNoFixupEquivalence) { FixupNoFixupEquivalenceNoInline(); }
|
|
@@ -351,86 +307,6 @@ TEST(StackTrace, CustomUnwinderPerformsFixup) {
|
|
|
351
307
|
EXPECT_GT(g_fixup_calls, 0);
|
|
352
308
|
}
|
|
353
309
|
|
|
354
|
-
#if ABSL_HAVE_BUILTIN(__builtin_frame_address)
|
|
355
|
-
struct FrameInfo {
|
|
356
|
-
const void* return_address;
|
|
357
|
-
uintptr_t frame_address;
|
|
358
|
-
};
|
|
359
|
-
|
|
360
|
-
// Returns the canonical frame address and return address for the current stack
|
|
361
|
-
// frame, while capturing the stack trace at the same time.
|
|
362
|
-
// This performs any platform-specific adjustments necessary to convert from the
|
|
363
|
-
// compiler built-ins to the expected API outputs.
|
|
364
|
-
ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
|
|
365
|
-
ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
|
|
366
|
-
ABSL_ATTRIBUTE_NOINLINE static FrameInfo
|
|
367
|
-
CaptureBacktraceNoInline(StackTrace& backtrace) {
|
|
368
|
-
FrameInfo result;
|
|
369
|
-
result.return_address = __builtin_return_address(0);
|
|
370
|
-
// Large enough to cover all realistic slots the return address could be in
|
|
371
|
-
const int kMaxReturnAddressIndex = 5;
|
|
372
|
-
void* const* bfa = static_cast<void* const*>(__builtin_frame_address(0));
|
|
373
|
-
backtrace.depth = absl::internal_stacktrace::GetStackFramesWithContext(
|
|
374
|
-
backtrace.result, backtrace.frames, backtrace.sizes,
|
|
375
|
-
StackTrace::kStackCount, /*skip_count=*/0,
|
|
376
|
-
/*uc=*/nullptr, /*min_dropped_frames=*/nullptr);
|
|
377
|
-
// Make sure the return address is at a reasonable location in the frame
|
|
378
|
-
ptrdiff_t i;
|
|
379
|
-
for (i = 0; i < kMaxReturnAddressIndex; ++i) {
|
|
380
|
-
// Avoid std::find() here, since it lacks no-sanitize attributes.
|
|
381
|
-
if (bfa[i] == result.return_address) {
|
|
382
|
-
break;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
result.frame_address =
|
|
386
|
-
i < kMaxReturnAddressIndex
|
|
387
|
-
? reinterpret_cast<uintptr_t>(
|
|
388
|
-
bfa + i + 1 /* get the Canonical Frame Address (CFA) */)
|
|
389
|
-
: 0;
|
|
390
|
-
return result;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
TEST(StackTrace, CanonicalFrameAddresses) {
|
|
394
|
-
// Now capture a stack trace and verify that the return addresses and frame
|
|
395
|
-
// addresses line up for one frame.
|
|
396
|
-
StackTrace backtrace;
|
|
397
|
-
const auto [return_address, frame_address] =
|
|
398
|
-
CaptureBacktraceNoInline(backtrace);
|
|
399
|
-
auto return_addresses = absl::MakeSpan(backtrace.result)
|
|
400
|
-
.subspan(0, static_cast<size_t>(backtrace.depth));
|
|
401
|
-
auto frame_addresses = absl::MakeSpan(backtrace.frames)
|
|
402
|
-
.subspan(0, static_cast<size_t>(backtrace.depth));
|
|
403
|
-
|
|
404
|
-
// Many platforms don't support this by default.
|
|
405
|
-
bool support_is_expected = false;
|
|
406
|
-
|
|
407
|
-
if (support_is_expected) {
|
|
408
|
-
// If all zeros were returned, that is valid per the function's contract.
|
|
409
|
-
// It just means we don't support returning frame addresses on this
|
|
410
|
-
// platform.
|
|
411
|
-
bool supported = static_cast<size_t>(std::count(frame_addresses.begin(),
|
|
412
|
-
frame_addresses.end(), 0)) <
|
|
413
|
-
frame_addresses.size();
|
|
414
|
-
EXPECT_TRUE(supported);
|
|
415
|
-
if (supported) {
|
|
416
|
-
ASSERT_TRUE(frame_address)
|
|
417
|
-
<< "unable to obtain frame address corresponding to return address";
|
|
418
|
-
EXPECT_THAT(return_addresses, Contains(return_address).Times(1));
|
|
419
|
-
EXPECT_THAT(frame_addresses, Contains(frame_address).Times(1));
|
|
420
|
-
ptrdiff_t ifound = std::find(return_addresses.begin(),
|
|
421
|
-
return_addresses.end(), return_address) -
|
|
422
|
-
return_addresses.begin();
|
|
423
|
-
// Make sure we found the frame in the first place.
|
|
424
|
-
ASSERT_LT(ifound, backtrace.depth);
|
|
425
|
-
// Make sure the frame address actually corresponds to the return
|
|
426
|
-
// address.
|
|
427
|
-
EXPECT_EQ(frame_addresses[static_cast<size_t>(ifound)], frame_address);
|
|
428
|
-
// Make sure the addresses only appear once.
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
#endif
|
|
433
|
-
|
|
434
310
|
// This test is Linux specific.
|
|
435
311
|
#if defined(__linux__)
|
|
436
312
|
const void* g_return_address = nullptr;
|
|
@@ -502,4 +378,14 @@ TEST(StackTrace, NestedSignal) {
|
|
|
502
378
|
}
|
|
503
379
|
#endif
|
|
504
380
|
|
|
381
|
+
TEST(StackTrace, NoNullptrInPopulatedRange) {
|
|
382
|
+
constexpr int kMaxDepth = 1024;
|
|
383
|
+
void* results[kMaxDepth];
|
|
384
|
+
int depth = absl::GetStackTrace(results, kMaxDepth, 0);
|
|
385
|
+
for (int i = 0; i < depth; ++i) {
|
|
386
|
+
EXPECT_NE(results[i], nullptr) << "Unexpected nullptr found at index " << i;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
|
|
505
391
|
} // namespace
|
|
@@ -12,10 +12,12 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
// SKIP_ABSL_INLINE_NAMESPACE_CHECK
|
|
16
|
-
|
|
17
15
|
#include "absl/debugging/symbolize.h"
|
|
18
16
|
|
|
17
|
+
#include "absl/base/config.h"
|
|
18
|
+
#include "absl/base/internal/low_level_alloc.h"
|
|
19
|
+
#include "absl/debugging/internal/symbolize.h"
|
|
20
|
+
|
|
19
21
|
#ifdef _WIN32
|
|
20
22
|
#include <winapifamily.h>
|
|
21
23
|
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
|
@@ -42,3 +44,19 @@
|
|
|
42
44
|
#else
|
|
43
45
|
#include "absl/debugging/symbolize_unimplemented.inc"
|
|
44
46
|
#endif
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
namespace absl {
|
|
50
|
+
ABSL_NAMESPACE_BEGIN
|
|
51
|
+
|
|
52
|
+
namespace debugging_internal {
|
|
53
|
+
|
|
54
|
+
void SymbolDecoratorDeleter::operator()(SymbolDecorator* ptr) {
|
|
55
|
+
ptr->~SymbolDecorator();
|
|
56
|
+
base_internal::LowLevelAlloc::Free(ptr);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
} // namespace debugging_internal
|
|
60
|
+
|
|
61
|
+
ABSL_NAMESPACE_END
|
|
62
|
+
} // namespace absl
|