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