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
|
@@ -357,6 +357,71 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
|
|
|
357
357
|
crc[2] = crc2;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
+
#if defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) && defined(__AVX__)
|
|
361
|
+
// This is only used if we have vector version of PCLMULQDQ.
|
|
362
|
+
// We don't have it on arm, and it isn't supported by default
|
|
363
|
+
// compiler targets on x86. If we want to use it, we need to either use
|
|
364
|
+
// new compiler flags for the whole function and compile it twice
|
|
365
|
+
// with new and default flags or use inline asm.
|
|
366
|
+
// The code below is the same as FinalizePclmulStream, but with
|
|
367
|
+
// PCLMUL and XOR operating on 2 values in a vector at the same time.
|
|
368
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE uint64_t
|
|
369
|
+
FinalizeVpclmulStream(V256* partialCRC) const {
|
|
370
|
+
uint64_t crc = 0;
|
|
371
|
+
uint64_t low64, high64;
|
|
372
|
+
__asm__(
|
|
373
|
+
// reduce 2 256-bit vectors into s single 256 vector
|
|
374
|
+
"vbroadcasti128 %[k256], %%ymm0 \n"
|
|
375
|
+
"vpclmulqdq $0x00, %%ymm0, %[crc0], %%ymm1 \n"
|
|
376
|
+
"vpclmulqdq $0x11, %%ymm0, %[crc0], %%ymm2 \n"
|
|
377
|
+
"vpxor %%ymm2, %%ymm1, %%ymm1 \n"
|
|
378
|
+
"vpxor %[crc1], %%ymm1, %%ymm1 \n"
|
|
379
|
+
// reduce upper and lower parts of 256-bit vector
|
|
380
|
+
"vextracti128 $1, %%ymm1, %%xmm2 \n"
|
|
381
|
+
"vpclmulqdq $0x00, %[k128], %%xmm1, %%xmm3 \n"
|
|
382
|
+
"vpclmulqdq $0x11, %[k128], %%xmm1, %%xmm1 \n"
|
|
383
|
+
"vpxor %%xmm1, %%xmm3, %%xmm3 \n"
|
|
384
|
+
"vpxor %%xmm2, %%xmm3, %%xmm3 \n"
|
|
385
|
+
// Move 2 parts of 128-bit vector into scalar register
|
|
386
|
+
// and reduce using sacalr crc instruction
|
|
387
|
+
"vmovq %%xmm3, %[low] \n"
|
|
388
|
+
"vpextrq $1, %%xmm3, %[high] \n"
|
|
389
|
+
"crc32q %[low], %[crc_out] \n"
|
|
390
|
+
"crc32q %[high], %[crc_out] \n"
|
|
391
|
+
: [crc_out] "+r"(crc), [low] "=&r"(low64), [high] "=&r"(high64)
|
|
392
|
+
: [k256] "m"(*(const __m128i*)kFoldAcross256Bits),
|
|
393
|
+
[crc0] "x"(partialCRC[0]), [crc1] "x"(partialCRC[1]),
|
|
394
|
+
[k128] "m"(*(const __m128i*)kFoldAcross128Bits)
|
|
395
|
+
: "ymm0", "ymm1", "ymm2", "ymm3");
|
|
396
|
+
return crc;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE void Process64BytesVpclmul(
|
|
400
|
+
const uint8_t* p, V256* vpartialCRC, V256 loopMultiplicands) const {
|
|
401
|
+
__asm__ volatile(
|
|
402
|
+
"vpclmulqdq $0x11, %3, %0, %%ymm0 \n"
|
|
403
|
+
"vpclmulqdq $0x11, %3, %1, %%ymm1 \n"
|
|
404
|
+
"vpclmulqdq $0x00, %3, %0, %0 \n"
|
|
405
|
+
"vpclmulqdq $0x00, %3, %1, %1 \n"
|
|
406
|
+
"vpxor %%ymm0, %0, %0 \n"
|
|
407
|
+
"vpxor %%ymm1, %1, %1 \n"
|
|
408
|
+
"vpxor (%2), %0, %0 \n"
|
|
409
|
+
"vpxor 32(%2), %1, %1 \n"
|
|
410
|
+
: "+x"(vpartialCRC[0]), "+x"(vpartialCRC[1])
|
|
411
|
+
: "r"(p), "x"(loopMultiplicands)
|
|
412
|
+
: "ymm0", "ymm1");
|
|
413
|
+
}
|
|
414
|
+
#else
|
|
415
|
+
template <typename T = V256>
|
|
416
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE void Process64BytesVpclmul(const uint8_t*, T*,
|
|
417
|
+
T) const {
|
|
418
|
+
static_assert(sizeof(T) == 0, "Vector PCLMUL not supported");
|
|
419
|
+
}
|
|
420
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE uint64_t FinalizeVpclmulStream(V256*) const {
|
|
421
|
+
return 0;
|
|
422
|
+
}
|
|
423
|
+
#endif // defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) && defined(__AVX__)
|
|
424
|
+
|
|
360
425
|
// Constants generated by './scripts/gen-crc-consts.py x86_pclmul
|
|
361
426
|
// crc32_lsb_0x82f63b78' from the Linux kernel.
|
|
362
427
|
alignas(16) static constexpr uint64_t kFoldAcross512Bits[2] = {
|
|
@@ -386,7 +451,7 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
|
|
|
386
451
|
};
|
|
387
452
|
|
|
388
453
|
template <size_t num_crc_streams, size_t num_pclmul_streams,
|
|
389
|
-
CutoffStrategy strategy>
|
|
454
|
+
size_t num_vpclmul_streams, CutoffStrategy strategy>
|
|
390
455
|
class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
391
456
|
: public CRC32AcceleratedX86ARMCombinedMultipleStreamsBase {
|
|
392
457
|
ABSL_ATTRIBUTE_HOT
|
|
@@ -396,6 +461,9 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
396
461
|
"Invalid number of crc streams");
|
|
397
462
|
static_assert(num_pclmul_streams >= 0 && num_pclmul_streams <= kMaxStreams,
|
|
398
463
|
"Invalid number of pclmul streams");
|
|
464
|
+
static_assert(
|
|
465
|
+
num_vpclmul_streams >= 0 && num_vpclmul_streams <= kMaxStreams,
|
|
466
|
+
"Invalid number of vpclmul streams");
|
|
399
467
|
const uint8_t* p = static_cast<const uint8_t*>(bytes);
|
|
400
468
|
const uint8_t* e = p + length;
|
|
401
469
|
uint32_t l = *crc;
|
|
@@ -474,17 +542,23 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
474
542
|
}
|
|
475
543
|
|
|
476
544
|
size_t bs = static_cast<size_t>(e - p) /
|
|
477
|
-
(num_crc_streams + num_pclmul_streams) /
|
|
545
|
+
(num_crc_streams + num_pclmul_streams + num_vpclmul_streams) /
|
|
546
|
+
64;
|
|
547
|
+
const uint8_t* stream_start = p;
|
|
478
548
|
const uint8_t* crc_streams[kMaxStreams];
|
|
549
|
+
for (size_t i = 0; i < num_crc_streams; i++) {
|
|
550
|
+
crc_streams[i] = stream_start;
|
|
551
|
+
stream_start += bs * 64;
|
|
552
|
+
}
|
|
479
553
|
const uint8_t* pclmul_streams[kMaxStreams];
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
crc_streams[i] = crc_streams[i - 1] + bs * 64;
|
|
554
|
+
for (size_t i = 0; i < num_pclmul_streams; i++) {
|
|
555
|
+
pclmul_streams[i] = stream_start;
|
|
556
|
+
stream_start += bs * 64;
|
|
484
557
|
}
|
|
485
|
-
|
|
486
|
-
for (size_t i =
|
|
487
|
-
|
|
558
|
+
const uint8_t* vpclmul_streams[kMaxStreams];
|
|
559
|
+
for (size_t i = 0; i < num_vpclmul_streams; i++) {
|
|
560
|
+
vpclmul_streams[i] = stream_start;
|
|
561
|
+
stream_start += bs * 64;
|
|
488
562
|
}
|
|
489
563
|
|
|
490
564
|
// Per stream crc sums.
|
|
@@ -520,6 +594,18 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
520
594
|
pclmul_streams[i] += 16 * 4;
|
|
521
595
|
}
|
|
522
596
|
|
|
597
|
+
V256 vpartialCRC[kMaxStreams][2];
|
|
598
|
+
V256 loopMultiplicands{};
|
|
599
|
+
loopMultiplicands =
|
|
600
|
+
V256_Broadcast128(reinterpret_cast<const V128*>(kFoldAcross512Bits));
|
|
601
|
+
for (size_t i = 0; i < num_vpclmul_streams; i++) {
|
|
602
|
+
vpartialCRC[i][0] = V256_LoadU(
|
|
603
|
+
reinterpret_cast<const V256*>(vpclmul_streams[i] + 32 * 0));
|
|
604
|
+
vpartialCRC[i][1] = V256_LoadU(
|
|
605
|
+
reinterpret_cast<const V256*>(vpclmul_streams[i] + 32 * 1));
|
|
606
|
+
vpclmul_streams[i] += 16 * 4;
|
|
607
|
+
}
|
|
608
|
+
|
|
523
609
|
for (size_t i = 1; i < bs; i++) {
|
|
524
610
|
// Prefetch data for next iterations.
|
|
525
611
|
for (size_t j = 0; j < num_crc_streams; j++) {
|
|
@@ -530,6 +616,10 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
530
616
|
PrefetchToLocalCache(reinterpret_cast<const char*>(pclmul_streams[j] +
|
|
531
617
|
kPrefetchHorizon));
|
|
532
618
|
}
|
|
619
|
+
for (size_t j = 0; j < num_vpclmul_streams; j++) {
|
|
620
|
+
PrefetchToLocalCache(reinterpret_cast<const char*>(
|
|
621
|
+
vpclmul_streams[j] + kPrefetchHorizon));
|
|
622
|
+
}
|
|
533
623
|
|
|
534
624
|
// We process each stream in 64 byte blocks. This can be written as
|
|
535
625
|
// for (int i = 0; i < num_pclmul_streams; i++) {
|
|
@@ -568,6 +658,12 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
568
658
|
Process64BytesPclmul(pclmul_streams[2], partialCRC[2]);
|
|
569
659
|
pclmul_streams[2] += 16 * 4;
|
|
570
660
|
}
|
|
661
|
+
|
|
662
|
+
if constexpr (num_vpclmul_streams > 0) {
|
|
663
|
+
Process64BytesVpclmul(vpclmul_streams[0], vpartialCRC[0],
|
|
664
|
+
loopMultiplicands);
|
|
665
|
+
vpclmul_streams[0] += 16 * 4;
|
|
666
|
+
}
|
|
571
667
|
}
|
|
572
668
|
|
|
573
669
|
// PCLMULQDQ based streams require special final step;
|
|
@@ -576,6 +672,13 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
576
672
|
l64_pclmul[i] = FinalizePclmulStream(partialCRC[i]);
|
|
577
673
|
}
|
|
578
674
|
|
|
675
|
+
uint64_t l64_vpclmul[kMaxStreams] = {0};
|
|
676
|
+
if constexpr (num_vpclmul_streams > 0) {
|
|
677
|
+
for (size_t i = 0; i < num_vpclmul_streams; i++) {
|
|
678
|
+
l64_vpclmul[i] = FinalizeVpclmulStream(vpartialCRC[i]);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
|
|
579
682
|
// Combine all streams into single result.
|
|
580
683
|
static_assert(64 % (1 << kNumDroppedBits) == 0);
|
|
581
684
|
uint32_t magic = ComputeZeroConstant(bs * 64);
|
|
@@ -588,9 +691,15 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
588
691
|
l64 = MultiplyWithExtraX33(static_cast<uint32_t>(l64), magic);
|
|
589
692
|
l64 ^= l64_pclmul[i];
|
|
590
693
|
}
|
|
694
|
+
for (size_t i = 0; i < num_vpclmul_streams; i++) {
|
|
695
|
+
l64 = MultiplyWithExtraX33(static_cast<uint32_t>(l64), magic);
|
|
696
|
+
l64 ^= l64_vpclmul[i];
|
|
697
|
+
}
|
|
591
698
|
|
|
592
699
|
// Update p.
|
|
593
|
-
if (
|
|
700
|
+
if constexpr (num_vpclmul_streams > 0) {
|
|
701
|
+
p = vpclmul_streams[num_vpclmul_streams - 1];
|
|
702
|
+
} else if constexpr (num_pclmul_streams > 0) {
|
|
594
703
|
p = pclmul_streams[num_pclmul_streams - 1];
|
|
595
704
|
} else {
|
|
596
705
|
p = crc_streams[num_crc_streams - 1];
|
|
@@ -618,6 +727,10 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
618
727
|
ABSL_INTERNAL_STEP1(l, p);
|
|
619
728
|
}
|
|
620
729
|
|
|
730
|
+
*crc = l;
|
|
731
|
+
}
|
|
732
|
+
};
|
|
733
|
+
|
|
621
734
|
#undef ABSL_INTERNAL_STEP8BY3
|
|
622
735
|
#undef ABSL_INTERNAL_STEP8BY2
|
|
623
736
|
#undef ABSL_INTERNAL_STEP8
|
|
@@ -625,10 +738,6 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
625
738
|
#undef ABSL_INTERNAL_STEP2
|
|
626
739
|
#undef ABSL_INTERNAL_STEP1
|
|
627
740
|
|
|
628
|
-
*crc = l;
|
|
629
|
-
}
|
|
630
|
-
};
|
|
631
|
-
|
|
632
741
|
} // namespace
|
|
633
742
|
|
|
634
743
|
// Intel processors with SSE4.2 have an instruction for one particular
|
|
@@ -636,14 +745,25 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
636
745
|
CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
|
|
637
746
|
CpuType type = GetCpuType();
|
|
638
747
|
switch (type) {
|
|
639
|
-
case CpuType::kIntelHaswell:
|
|
640
748
|
case CpuType::kAmdRome:
|
|
749
|
+
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
750
|
+
3, 0, 0, CutoffStrategy::Fold3>();
|
|
751
|
+
case CpuType::kIntelHaswell:
|
|
641
752
|
case CpuType::kAmdNaples:
|
|
753
|
+
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
754
|
+
3, 1, 0, CutoffStrategy::Fold3>();
|
|
642
755
|
case CpuType::kAmdMilan:
|
|
643
756
|
case CpuType::kAmdGenoa:
|
|
644
757
|
case CpuType::kAmdTurin:
|
|
758
|
+
#if defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) && defined(__AVX__)
|
|
759
|
+
// We don't have vector pclmul on arm, but this still needs to
|
|
760
|
+
// compile.
|
|
761
|
+
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
762
|
+
3, 0, 1, CutoffStrategy::Fold3>();
|
|
763
|
+
#else
|
|
645
764
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
646
|
-
3, 1, CutoffStrategy::Fold3>();
|
|
765
|
+
3, 1, 0, CutoffStrategy::Fold3>();
|
|
766
|
+
#endif
|
|
647
767
|
// PCLMULQDQ is fast, use combined PCLMULQDQ + CRC implementation.
|
|
648
768
|
case CpuType::kIntelCascadelakeXeon:
|
|
649
769
|
case CpuType::kIntelSkylakeXeon:
|
|
@@ -654,32 +774,32 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
|
|
|
654
774
|
case CpuType::kIntelEmeraldrapids:
|
|
655
775
|
case CpuType::kIntelGraniterapidsap:
|
|
656
776
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
657
|
-
3, 2, CutoffStrategy::Fold3>();
|
|
777
|
+
3, 2, 0, CutoffStrategy::Fold3>();
|
|
658
778
|
// PCLMULQDQ is slow, don't use it.
|
|
659
779
|
case CpuType::kIntelIvybridge:
|
|
660
780
|
case CpuType::kIntelSandybridge:
|
|
661
781
|
case CpuType::kIntelWestmere:
|
|
662
782
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
663
|
-
3, 0, CutoffStrategy::Fold3>();
|
|
783
|
+
3, 0, 0, CutoffStrategy::Fold3>();
|
|
664
784
|
case CpuType::kArmNeoverseN1:
|
|
665
785
|
case CpuType::kArmNeoverseN2:
|
|
666
786
|
case CpuType::kArmNeoverseV1:
|
|
667
787
|
case CpuType::kArmNeoverseN3:
|
|
668
788
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
669
|
-
1, 1, CutoffStrategy::Unroll64CRC>();
|
|
789
|
+
1, 1, 0, CutoffStrategy::Unroll64CRC>();
|
|
670
790
|
case CpuType::kAmpereSiryn:
|
|
671
791
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
672
|
-
3, 2, CutoffStrategy::Fold3>();
|
|
792
|
+
3, 2, 0, CutoffStrategy::Fold3>();
|
|
673
793
|
case CpuType::kArmNeoverseV2:
|
|
674
794
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
675
|
-
1, 2, CutoffStrategy::Unroll64CRC>();
|
|
795
|
+
1, 2, 0, CutoffStrategy::Unroll64CRC>();
|
|
676
796
|
#if defined(__aarch64__)
|
|
677
797
|
default:
|
|
678
798
|
// Not all ARM processors support the needed instructions, so check here
|
|
679
799
|
// before trying to use an accelerated implementation.
|
|
680
800
|
if (SupportsArmCRC32PMULL()) {
|
|
681
801
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
682
|
-
1, 1, CutoffStrategy::Unroll64CRC>();
|
|
802
|
+
1, 1, 0, CutoffStrategy::Unroll64CRC>();
|
|
683
803
|
} else {
|
|
684
804
|
return nullptr;
|
|
685
805
|
}
|
|
@@ -687,71 +807,13 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
|
|
|
687
807
|
default:
|
|
688
808
|
// Something else, play it safe and assume slow PCLMULQDQ.
|
|
689
809
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
690
|
-
3, 0, CutoffStrategy::Fold3>();
|
|
810
|
+
3, 0, 0, CutoffStrategy::Fold3>();
|
|
691
811
|
#endif
|
|
692
812
|
}
|
|
693
813
|
}
|
|
694
814
|
|
|
695
|
-
std::vector<std::unique_ptr<CRCImpl>> NewCRC32AcceleratedX86ARMCombinedAll() {
|
|
696
|
-
auto ret = std::vector<std::unique_ptr<CRCImpl>>();
|
|
697
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
698
|
-
1, 0, CutoffStrategy::Fold3>>());
|
|
699
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
700
|
-
1, 1, CutoffStrategy::Fold3>>());
|
|
701
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
702
|
-
1, 2, CutoffStrategy::Fold3>>());
|
|
703
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
704
|
-
1, 3, CutoffStrategy::Fold3>>());
|
|
705
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
706
|
-
2, 0, CutoffStrategy::Fold3>>());
|
|
707
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
708
|
-
2, 1, CutoffStrategy::Fold3>>());
|
|
709
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
710
|
-
2, 2, CutoffStrategy::Fold3>>());
|
|
711
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
712
|
-
2, 3, CutoffStrategy::Fold3>>());
|
|
713
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
714
|
-
3, 0, CutoffStrategy::Fold3>>());
|
|
715
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
716
|
-
3, 1, CutoffStrategy::Fold3>>());
|
|
717
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
718
|
-
3, 2, CutoffStrategy::Fold3>>());
|
|
719
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
720
|
-
3, 3, CutoffStrategy::Fold3>>());
|
|
721
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
722
|
-
1, 0, CutoffStrategy::Unroll64CRC>>());
|
|
723
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
724
|
-
1, 1, CutoffStrategy::Unroll64CRC>>());
|
|
725
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
726
|
-
1, 2, CutoffStrategy::Unroll64CRC>>());
|
|
727
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
728
|
-
1, 3, CutoffStrategy::Unroll64CRC>>());
|
|
729
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
730
|
-
2, 0, CutoffStrategy::Unroll64CRC>>());
|
|
731
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
732
|
-
2, 1, CutoffStrategy::Unroll64CRC>>());
|
|
733
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
734
|
-
2, 2, CutoffStrategy::Unroll64CRC>>());
|
|
735
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
736
|
-
2, 3, CutoffStrategy::Unroll64CRC>>());
|
|
737
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
738
|
-
3, 0, CutoffStrategy::Unroll64CRC>>());
|
|
739
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
740
|
-
3, 1, CutoffStrategy::Unroll64CRC>>());
|
|
741
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
742
|
-
3, 2, CutoffStrategy::Unroll64CRC>>());
|
|
743
|
-
ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
744
|
-
3, 3, CutoffStrategy::Unroll64CRC>>());
|
|
745
|
-
|
|
746
|
-
return ret;
|
|
747
|
-
}
|
|
748
|
-
|
|
749
815
|
#else // !ABSL_INTERNAL_CAN_USE_SIMD_CRC32C
|
|
750
816
|
|
|
751
|
-
std::vector<std::unique_ptr<CRCImpl>> NewCRC32AcceleratedX86ARMCombinedAll() {
|
|
752
|
-
return std::vector<std::unique_ptr<CRCImpl>>();
|
|
753
|
-
}
|
|
754
|
-
|
|
755
817
|
// no hardware acceleration available
|
|
756
818
|
CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() { return nullptr; }
|
|
757
819
|
|
|
@@ -35,33 +35,6 @@ package(
|
|
|
35
35
|
|
|
36
36
|
licenses(["notice"])
|
|
37
37
|
|
|
38
|
-
cc_library(
|
|
39
|
-
name = "borrowed_fixup_buffer",
|
|
40
|
-
srcs = ["internal/borrowed_fixup_buffer.cc"],
|
|
41
|
-
hdrs = ["internal/borrowed_fixup_buffer.h"],
|
|
42
|
-
copts = ABSL_DEFAULT_COPTS,
|
|
43
|
-
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
44
|
-
deps = [
|
|
45
|
-
"//absl/base:config",
|
|
46
|
-
"//absl/base:core_headers",
|
|
47
|
-
"//absl/base:malloc_internal",
|
|
48
|
-
"//absl/hash",
|
|
49
|
-
],
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
cc_test(
|
|
53
|
-
name = "borrowed_fixup_buffer_test",
|
|
54
|
-
srcs = ["internal/borrowed_fixup_buffer_test.cc"],
|
|
55
|
-
copts = ABSL_TEST_COPTS,
|
|
56
|
-
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
57
|
-
deps = [
|
|
58
|
-
":borrowed_fixup_buffer",
|
|
59
|
-
"//absl/base:config",
|
|
60
|
-
"@googletest//:gtest",
|
|
61
|
-
"@googletest//:gtest_main",
|
|
62
|
-
],
|
|
63
|
-
)
|
|
64
|
-
|
|
65
38
|
cc_library(
|
|
66
39
|
name = "stacktrace",
|
|
67
40
|
srcs = [
|
|
@@ -81,7 +54,6 @@ cc_library(
|
|
|
81
54
|
copts = ABSL_DEFAULT_COPTS,
|
|
82
55
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
83
56
|
deps = [
|
|
84
|
-
":borrowed_fixup_buffer",
|
|
85
57
|
":debugging_internal",
|
|
86
58
|
"//absl/base:config",
|
|
87
59
|
"//absl/base:core_headers",
|
|
@@ -97,7 +69,6 @@ cc_test(
|
|
|
97
69
|
copts = ABSL_TEST_COPTS,
|
|
98
70
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
99
71
|
deps = [
|
|
100
|
-
":borrowed_fixup_buffer",
|
|
101
72
|
":stacktrace",
|
|
102
73
|
"//absl/base:config",
|
|
103
74
|
"//absl/base:core_headers",
|
|
@@ -164,10 +135,13 @@ cc_test(
|
|
|
164
135
|
"//absl/base",
|
|
165
136
|
"//absl/base:config",
|
|
166
137
|
"//absl/base:core_headers",
|
|
138
|
+
"//absl/base:malloc_internal",
|
|
139
|
+
"//absl/cleanup",
|
|
167
140
|
"//absl/log",
|
|
168
141
|
"//absl/log:check",
|
|
169
142
|
"//absl/memory",
|
|
170
143
|
"//absl/strings",
|
|
144
|
+
"//absl/strings:str_format",
|
|
171
145
|
"@googletest//:gtest",
|
|
172
146
|
],
|
|
173
147
|
)
|
|
@@ -182,7 +156,10 @@ cc_library(
|
|
|
182
156
|
],
|
|
183
157
|
copts = ABSL_DEFAULT_COPTS,
|
|
184
158
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
185
|
-
visibility = [
|
|
159
|
+
visibility = [
|
|
160
|
+
"//absl:friends",
|
|
161
|
+
"//absl/log/internal:__pkg__",
|
|
162
|
+
],
|
|
186
163
|
deps = [
|
|
187
164
|
":stacktrace",
|
|
188
165
|
":symbolize",
|
|
@@ -244,7 +221,7 @@ cc_library(
|
|
|
244
221
|
],
|
|
245
222
|
copts = ABSL_DEFAULT_COPTS,
|
|
246
223
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
247
|
-
visibility = ["//
|
|
224
|
+
visibility = ["//absl:friends"],
|
|
248
225
|
deps = [
|
|
249
226
|
"//absl/base:config",
|
|
250
227
|
"//absl/base:core_headers",
|
|
@@ -261,6 +238,7 @@ cc_library(
|
|
|
261
238
|
copts = ABSL_DEFAULT_COPTS,
|
|
262
239
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
263
240
|
visibility = [
|
|
241
|
+
"//absl:friends",
|
|
264
242
|
"//absl/container:__pkg__",
|
|
265
243
|
"//absl/debugging:__pkg__",
|
|
266
244
|
],
|
|
@@ -16,38 +16,6 @@
|
|
|
16
16
|
|
|
17
17
|
find_library(EXECINFO_LIBRARY execinfo)
|
|
18
18
|
|
|
19
|
-
absl_cc_library(
|
|
20
|
-
NAME
|
|
21
|
-
borrowed_fixup_buffer
|
|
22
|
-
SRCS
|
|
23
|
-
"internal/borrowed_fixup_buffer.cc"
|
|
24
|
-
HDRS
|
|
25
|
-
"internal/borrowed_fixup_buffer.h"
|
|
26
|
-
COPTS
|
|
27
|
-
${ABSL_DEFAULT_COPTS}
|
|
28
|
-
LINKOPTS
|
|
29
|
-
${ABSL_DEFAULT_LINKOPTS}
|
|
30
|
-
DEPS
|
|
31
|
-
absl::config
|
|
32
|
-
absl::core_headers
|
|
33
|
-
absl::hash
|
|
34
|
-
absl::malloc_internal
|
|
35
|
-
PUBLIC
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
absl_cc_test(
|
|
39
|
-
NAME
|
|
40
|
-
borrowed_fixup_buffer_test
|
|
41
|
-
SRCS
|
|
42
|
-
"internal/borrowed_fixup_buffer_test.cc"
|
|
43
|
-
COPTS
|
|
44
|
-
${ABSL_TEST_COPTS}
|
|
45
|
-
DEPS
|
|
46
|
-
absl::borrowed_fixup_buffer
|
|
47
|
-
absl::config
|
|
48
|
-
GTest::gmock_main
|
|
49
|
-
)
|
|
50
|
-
|
|
51
19
|
absl_cc_library(
|
|
52
20
|
NAME
|
|
53
21
|
stacktrace
|
|
@@ -70,7 +38,6 @@ absl_cc_library(
|
|
|
70
38
|
LINKOPTS
|
|
71
39
|
$<$<BOOL:${EXECINFO_LIBRARY}>:${EXECINFO_LIBRARY}>
|
|
72
40
|
DEPS
|
|
73
|
-
absl::borrowed_fixup_buffer
|
|
74
41
|
absl::debugging_internal
|
|
75
42
|
absl::config
|
|
76
43
|
absl::core_headers
|
|
@@ -140,12 +107,15 @@ absl_cc_test(
|
|
|
140
107
|
DEPS
|
|
141
108
|
absl::base
|
|
142
109
|
absl::check
|
|
110
|
+
absl::cleanup
|
|
143
111
|
absl::config
|
|
144
112
|
absl::core_headers
|
|
145
113
|
absl::log
|
|
114
|
+
absl::malloc_internal
|
|
146
115
|
absl::memory
|
|
147
116
|
absl::stack_consumption
|
|
148
117
|
absl::strings
|
|
118
|
+
absl::str_format
|
|
149
119
|
absl::symbolize
|
|
150
120
|
GTest::gmock
|
|
151
121
|
)
|
|
@@ -32,6 +32,14 @@ namespace debugging_internal {
|
|
|
32
32
|
// DemangleRustSymbolEncoding is async-signal-safe and runs in bounded C++
|
|
33
33
|
// call-stack space. It is suitable for symbolizing stack traces in a signal
|
|
34
34
|
// handler.
|
|
35
|
+
//
|
|
36
|
+
// Note that this demangler purposefully omits some details: generic argument
|
|
37
|
+
// lists become `<>`, function types `fn...`, and long tuples `(t, u, v, ...)`.
|
|
38
|
+
// This simplification suits crash backtracing, where the signal handler must
|
|
39
|
+
// not `malloc`, and the human troubleshooter won't want the `file:line` blame
|
|
40
|
+
// drowned in generic arguments. Applications better served by a freely
|
|
41
|
+
// allocating detailed demangler might prefer to use Rust's own `rustc-demangle`
|
|
42
|
+
// crate.
|
|
35
43
|
bool DemangleRustSymbolEncoding(const char* mangled, char* out,
|
|
36
44
|
size_t out_size);
|
|
37
45
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
#include "absl/debugging/internal/demangle.h"
|
|
16
16
|
|
|
17
17
|
#include <cstdlib>
|
|
18
|
+
#include <memory>
|
|
18
19
|
#include <string>
|
|
19
20
|
|
|
20
21
|
#include "gmock/gmock.h"
|
|
@@ -2000,7 +2001,7 @@ TEST(Demangle, DemangleStackConsumption) {
|
|
|
2000
2001
|
|
|
2001
2002
|
static void TestOnInput(const char* input) {
|
|
2002
2003
|
static const int kOutSize = 1048576;
|
|
2003
|
-
auto out =
|
|
2004
|
+
auto out = std::make_unique<char[]>(kOutSize);
|
|
2004
2005
|
Demangle(input, out.get(), kOutSize);
|
|
2005
2006
|
}
|
|
2006
2007
|
|
|
@@ -143,6 +143,12 @@ void DumpPCAndFrameSizeAndSymbol(OutputWriter* writer, void* writer_arg,
|
|
|
143
143
|
writer(buf, writer_arg);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
+
void DebugStackTraceHookLegacyAdapter(void* const stack[], int depth,
|
|
147
|
+
OutputWriter* writer, void* writer_arg) {
|
|
148
|
+
debug_stack_trace_hook(stack, depth, /*crash_pc=*/nullptr, writer,
|
|
149
|
+
writer_arg);
|
|
150
|
+
}
|
|
151
|
+
|
|
146
152
|
} // namespace
|
|
147
153
|
|
|
148
154
|
void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook) {
|
|
@@ -150,7 +156,11 @@ void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook) {
|
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
SymbolizeUrlEmitterLegacy GetDebugStackTraceHookLegacy() {
|
|
153
|
-
|
|
159
|
+
if (debug_stack_trace_hook == nullptr) {
|
|
160
|
+
// No prior call to RegisterDebugStackTraceHook.
|
|
161
|
+
return nullptr;
|
|
162
|
+
}
|
|
163
|
+
return &DebugStackTraceHookLegacyAdapter;
|
|
154
164
|
}
|
|
155
165
|
|
|
156
166
|
SymbolizeUrlEmitter GetDebugStackTraceHook() { return debug_stack_trace_hook; }
|
|
@@ -313,7 +323,7 @@ void DumpStackTrace(int min_dropped_frames, int max_num_frames,
|
|
|
313
323
|
|
|
314
324
|
auto hook = GetDebugStackTraceHook();
|
|
315
325
|
if (hook != nullptr) {
|
|
316
|
-
|
|
326
|
+
hook(stack, depth, /*crash_pc=*/nullptr, writer, writer_arg);
|
|
317
327
|
}
|
|
318
328
|
|
|
319
329
|
if (allocated_bytes != 0) Deallocate(stack, allocated_bytes);
|
|
@@ -31,7 +31,8 @@ typedef void OutputWriter(const char*, void*);
|
|
|
31
31
|
// `hook` that is called each time DumpStackTrace() is called.
|
|
32
32
|
// `hook` may be called from a signal handler.
|
|
33
33
|
typedef void (*SymbolizeUrlEmitter)(void* const stack[], int depth,
|
|
34
|
-
|
|
34
|
+
const void* crash_pc, OutputWriter* writer,
|
|
35
|
+
void* writer_arg);
|
|
35
36
|
typedef void (*SymbolizeUrlEmitterLegacy)(void* const stack[], int depth,
|
|
36
37
|
OutputWriter* writer,
|
|
37
38
|
void* writer_arg);
|
|
@@ -41,8 +42,6 @@ typedef void (*SymbolizeUrlEmitterLegacy)(void* const stack[], int depth,
|
|
|
41
42
|
void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook);
|
|
42
43
|
SymbolizeUrlEmitter GetDebugStackTraceHook();
|
|
43
44
|
|
|
44
|
-
// Currently exact copy of above. Needed for the 3-CL dance due to
|
|
45
|
-
// TCMallocDebugStackTraceHook dependency on this API.
|
|
46
45
|
SymbolizeUrlEmitterLegacy GetDebugStackTraceHookLegacy();
|
|
47
46
|
|
|
48
47
|
// Returns the program counter from signal context, or nullptr if
|
|
@@ -212,6 +212,17 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
|
|
|
212
212
|
stack_info.sig_stack_low = stack_info.stack_low;
|
|
213
213
|
stack_info.sig_stack_high = kUnknownStackEnd;
|
|
214
214
|
|
|
215
|
+
#if defined(__linux__)
|
|
216
|
+
// Similarly for the signal stack, retrieve the information into sig_stack and
|
|
217
|
+
// then pass it down per call. Calling sigaltstack with nullptr as the first
|
|
218
|
+
// argument doesn't change the signal stack.
|
|
219
|
+
stack_t sig_stack;
|
|
220
|
+
if (sigaltstack(nullptr, &sig_stack) == 0) {
|
|
221
|
+
stack_info.sig_stack_low = reinterpret_cast<uintptr_t>(sig_stack.ss_sp);
|
|
222
|
+
stack_info.sig_stack_high = stack_info.sig_stack_low + sig_stack.ss_size;
|
|
223
|
+
}
|
|
224
|
+
#endif
|
|
225
|
+
|
|
215
226
|
// The frame pointer points to low address of a frame. The first 64-bit
|
|
216
227
|
// word of a frame points to the next frame up the call chain, which normally
|
|
217
228
|
// is just after the high address of the current frame. The second word of
|
|
@@ -74,10 +74,19 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
|
|
|
74
74
|
size =
|
|
75
75
|
static_cast<int>(emscripten_stack_unwind_buffer(pc, stack, kStackLength));
|
|
76
76
|
|
|
77
|
-
int
|
|
78
|
-
if (
|
|
79
|
-
if (
|
|
80
|
-
|
|
77
|
+
int num_frames = size - skip_count;
|
|
78
|
+
if (num_frames < 0) num_frames = 0;
|
|
79
|
+
if (num_frames > max_depth) num_frames = max_depth;
|
|
80
|
+
|
|
81
|
+
int result_count = 0;
|
|
82
|
+
for (int i = 0; i < num_frames; i++) {
|
|
83
|
+
int stack_index = i + skip_count;
|
|
84
|
+
// Follow x86 and stop if the return address is null (end of stack).
|
|
85
|
+
if (stack[stack_index] == nullptr) {
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
result[result_count++] = stack[stack_index];
|
|
89
|
+
}
|
|
81
90
|
|
|
82
91
|
if (IS_STACK_FRAMES) {
|
|
83
92
|
// No implementation for finding out the stack frames yet.
|
|
@@ -71,13 +71,20 @@ static int UnwindImpl(void** result, uintptr_t* frames, int* sizes,
|
|
|
71
71
|
|
|
72
72
|
size = backtrace(stack, kStackLength);
|
|
73
73
|
skip_count++; // we want to skip the current frame as well
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
|
|
75
|
+
int num_frames = size - skip_count;
|
|
76
|
+
if (num_frames < 0) num_frames = 0;
|
|
77
|
+
if (num_frames > max_depth) num_frames = max_depth;
|
|
78
|
+
|
|
79
|
+
int result_count = 0;
|
|
80
|
+
for (int i = 0; i < num_frames; i++) {
|
|
81
|
+
int stack_index = i + skip_count;
|
|
82
|
+
// Follow x86 and stop if the return address is null (end of stack).
|
|
83
|
+
if (stack[stack_index] == nullptr) {
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
result[result_count++] = stack[stack_index];
|
|
87
|
+
}
|
|
81
88
|
|
|
82
89
|
if (IS_STACK_FRAMES) {
|
|
83
90
|
// No implementation for finding out the stack frames yet.
|