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
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
#include <cstdio>
|
|
68
68
|
#include <cstdlib>
|
|
69
69
|
#include <cstring>
|
|
70
|
+
#include <memory>
|
|
70
71
|
|
|
71
72
|
#include "absl/base/casts.h"
|
|
72
73
|
#include "absl/base/dynamic_annotations.h"
|
|
@@ -145,16 +146,7 @@ inline constexpr bool kPlatformUsesOPDSections = false;
|
|
|
145
146
|
// pointers and the first one is the function's entry.
|
|
146
147
|
const size_t kFunctionDescriptorSize = sizeof(void *) * 2;
|
|
147
148
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
struct InstalledSymbolDecorator {
|
|
151
|
-
SymbolDecorator fn;
|
|
152
|
-
void *arg;
|
|
153
|
-
int ticket;
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
int g_num_decorators;
|
|
157
|
-
InstalledSymbolDecorator g_decorators[kMaxDecorators];
|
|
149
|
+
std::atomic<SymbolDecorator::Factory*> g_decorator_factory = nullptr;
|
|
158
150
|
|
|
159
151
|
struct FileMappingHint {
|
|
160
152
|
const void *start;
|
|
@@ -163,16 +155,6 @@ struct FileMappingHint {
|
|
|
163
155
|
const char *filename;
|
|
164
156
|
};
|
|
165
157
|
|
|
166
|
-
// Protects g_decorators.
|
|
167
|
-
// We are using SpinLock and not a Mutex here, because we may be called
|
|
168
|
-
// from inside Mutex::Lock itself, and it prohibits recursive calls.
|
|
169
|
-
// This happens in e.g. base/stacktrace_syscall_unittest.
|
|
170
|
-
// Moreover, we are using only try_lock(), if the decorator list
|
|
171
|
-
// is being modified (is busy), we skip all decorators, and possibly
|
|
172
|
-
// loose some info. Sorry, that's the best we could do.
|
|
173
|
-
ABSL_CONST_INIT absl::base_internal::SpinLock g_decorators_mu(
|
|
174
|
-
absl::base_internal::SCHEDULE_KERNEL_ONLY);
|
|
175
|
-
|
|
176
158
|
const int kMaxFileMappingHints = 8;
|
|
177
159
|
int g_num_file_mapping_hints;
|
|
178
160
|
FileMappingHint g_file_mapping_hints[kMaxFileMappingHints];
|
|
@@ -190,32 +172,23 @@ static void SafeMemZero(void *p, size_t size) {
|
|
|
190
172
|
}
|
|
191
173
|
|
|
192
174
|
struct ObjFile {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
offset(0),
|
|
198
|
-
fd(-1),
|
|
199
|
-
elf_type(-1) {
|
|
200
|
-
SafeMemZero(&elf_header, sizeof(elf_header));
|
|
201
|
-
SafeMemZero(&phdr[0], sizeof(phdr));
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
char *filename;
|
|
205
|
-
const void *start_addr;
|
|
206
|
-
const void *end_addr;
|
|
207
|
-
uint64_t offset;
|
|
175
|
+
char *filename = nullptr;
|
|
176
|
+
const void *start_addr = nullptr;
|
|
177
|
+
const void *end_addr = nullptr;
|
|
178
|
+
uint64_t offset = 0;
|
|
208
179
|
|
|
209
180
|
// The following fields are initialized on the first access to the
|
|
210
181
|
// object file.
|
|
211
|
-
int fd;
|
|
212
|
-
int elf_type;
|
|
213
|
-
ElfW(Ehdr) elf_header;
|
|
182
|
+
int fd = -1;
|
|
183
|
+
int elf_type = -1;
|
|
184
|
+
ElfW(Ehdr) elf_header = {};
|
|
214
185
|
|
|
215
186
|
// PT_LOAD program header describing executable code.
|
|
216
187
|
// Normally we expect just one, but SWIFT binaries have two.
|
|
217
188
|
// CUDA binaries have 3 (see cr/473913254 description).
|
|
218
|
-
std::array<ElfW(Phdr), 4> phdr;
|
|
189
|
+
std::array<ElfW(Phdr), 4> phdr = {};
|
|
190
|
+
|
|
191
|
+
SymbolDecoratorPtr decorator = {};
|
|
219
192
|
};
|
|
220
193
|
|
|
221
194
|
// Build 4-way associative cache for symbols. Within each cache line, symbols
|
|
@@ -266,7 +239,8 @@ ObjFile *AddrMap::Add() {
|
|
|
266
239
|
static_cast<ObjFile *>(base_internal::LowLevelAlloc::AllocWithArena(
|
|
267
240
|
new_allocated * sizeof(*new_obj_), base_internal::SigSafeArena()));
|
|
268
241
|
if (obj_) {
|
|
269
|
-
|
|
242
|
+
std::uninitialized_move_n(obj_, size_, new_obj_);
|
|
243
|
+
std::destroy_n(obj_, size_);
|
|
270
244
|
base_internal::LowLevelAlloc::Free(obj_);
|
|
271
245
|
}
|
|
272
246
|
obj_ = new_obj_;
|
|
@@ -309,6 +283,8 @@ class Symbolizer {
|
|
|
309
283
|
~Symbolizer();
|
|
310
284
|
const char *GetSymbol(const void *const pc);
|
|
311
285
|
|
|
286
|
+
void UpdateDecoratorsIfNeeded(SymbolDecorator::Factory* decorator_factory);
|
|
287
|
+
|
|
312
288
|
private:
|
|
313
289
|
char *CopyString(const char *s) {
|
|
314
290
|
size_t len = strlen(s);
|
|
@@ -345,6 +321,7 @@ class Symbolizer {
|
|
|
345
321
|
};
|
|
346
322
|
|
|
347
323
|
AddrMap addr_map_;
|
|
324
|
+
SymbolDecorator::Factory* decorator_factory_ = nullptr;
|
|
348
325
|
|
|
349
326
|
bool ok_;
|
|
350
327
|
bool addr_map_read_;
|
|
@@ -422,11 +399,14 @@ static Symbolizer *AllocateSymbolizer() {
|
|
|
422
399
|
base_internal::InitSigSafeArena();
|
|
423
400
|
Symbolizer *symbolizer =
|
|
424
401
|
g_cached_symbolizer.exchange(nullptr, std::memory_order_acquire);
|
|
425
|
-
if (symbolizer
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
402
|
+
if (symbolizer == nullptr) {
|
|
403
|
+
void* ptr = base_internal::LowLevelAlloc::AllocWithArena(
|
|
404
|
+
SymbolizerSize(), base_internal::SigSafeArena());
|
|
405
|
+
symbolizer = new (ptr) Symbolizer();
|
|
406
|
+
}
|
|
407
|
+
symbolizer->UpdateDecoratorsIfNeeded(
|
|
408
|
+
g_decorator_factory.load(std::memory_order_acquire));
|
|
409
|
+
return symbolizer;
|
|
430
410
|
}
|
|
431
411
|
|
|
432
412
|
// Set g_cached_symbolize_state to s if it is null, otherwise
|
|
@@ -443,7 +423,7 @@ static void FreeSymbolizer(Symbolizer *s) {
|
|
|
443
423
|
|
|
444
424
|
Symbolizer::Symbolizer() : ok_(true), addr_map_read_(false) {
|
|
445
425
|
for (SymbolCacheLine &symbol_cache_line : symbol_cache_) {
|
|
446
|
-
for (size_t j = 0; j <
|
|
426
|
+
for (size_t j = 0; j < std::size(symbol_cache_line.name); ++j) {
|
|
447
427
|
symbol_cache_line.pc[j] = nullptr;
|
|
448
428
|
symbol_cache_line.name[j] = nullptr;
|
|
449
429
|
symbol_cache_line.age[j] = 0;
|
|
@@ -460,6 +440,26 @@ Symbolizer::~Symbolizer() {
|
|
|
460
440
|
ClearAddrMap();
|
|
461
441
|
}
|
|
462
442
|
|
|
443
|
+
void Symbolizer::UpdateDecoratorsIfNeeded(
|
|
444
|
+
SymbolDecorator::Factory* decorator_factory) {
|
|
445
|
+
if (decorator_factory_ == decorator_factory) return;
|
|
446
|
+
|
|
447
|
+
for (SymbolCacheLine& symbol_cache_line : symbol_cache_) {
|
|
448
|
+
for (size_t j = 0; j < std::size(symbol_cache_line.name); ++j) {
|
|
449
|
+
symbol_cache_line.pc[j] = nullptr;
|
|
450
|
+
base_internal::LowLevelAlloc::Free(symbol_cache_line.name[j]);
|
|
451
|
+
symbol_cache_line.name[j] = nullptr;
|
|
452
|
+
symbol_cache_line.age[j] = 0;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
decorator_factory_ = decorator_factory;
|
|
457
|
+
for (size_t i = 0, end = addr_map_.Size(); i < end; ++i) {
|
|
458
|
+
ObjFile* obj = addr_map_.At(i);
|
|
459
|
+
obj->decorator.reset();
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
463
|
// We don't use assert() since it's not guaranteed to be
|
|
464
464
|
// async-signal-safe. Instead we define a minimal assertion
|
|
465
465
|
// macro. So far, we don't need pretty printing for __FILE__, etc.
|
|
@@ -1387,7 +1387,8 @@ static void MaybeOpenFdFromSelfExe(ObjFile *obj) {
|
|
|
1387
1387
|
obj->fd = fd;
|
|
1388
1388
|
}
|
|
1389
1389
|
|
|
1390
|
-
static bool MaybeInitializeObjFile(
|
|
1390
|
+
static bool MaybeInitializeObjFile(
|
|
1391
|
+
ObjFile* obj, SymbolDecorator::Factory* decorator_factory) {
|
|
1391
1392
|
if (obj->fd < 0) {
|
|
1392
1393
|
obj->fd = OpenReadOnlyWithHighFD(obj->filename);
|
|
1393
1394
|
|
|
@@ -1469,6 +1470,9 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
|
|
|
1469
1470
|
return false;
|
|
1470
1471
|
}
|
|
1471
1472
|
}
|
|
1473
|
+
if (decorator_factory != nullptr && obj->decorator == nullptr) {
|
|
1474
|
+
obj->decorator = decorator_factory(obj->fd);
|
|
1475
|
+
}
|
|
1472
1476
|
return true;
|
|
1473
1477
|
}
|
|
1474
1478
|
|
|
@@ -1482,9 +1486,8 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
|
|
|
1482
1486
|
const char *Symbolizer::GetUncachedSymbol(const void *pc) {
|
|
1483
1487
|
ObjFile *const obj = FindObjFile(pc, 1);
|
|
1484
1488
|
ptrdiff_t relocation = 0;
|
|
1485
|
-
int fd = -1;
|
|
1486
1489
|
if (obj != nullptr) {
|
|
1487
|
-
if (MaybeInitializeObjFile(obj)) {
|
|
1490
|
+
if (MaybeInitializeObjFile(obj, decorator_factory_)) {
|
|
1488
1491
|
const size_t start_addr = reinterpret_cast<size_t>(obj->start_addr);
|
|
1489
1492
|
if (obj->elf_type == ET_DYN && start_addr >= obj->offset) {
|
|
1490
1493
|
// This object was relocated.
|
|
@@ -1524,7 +1527,6 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
|
|
|
1524
1527
|
}
|
|
1525
1528
|
}
|
|
1526
1529
|
|
|
1527
|
-
fd = obj->fd;
|
|
1528
1530
|
if (GetSymbolFromObjectFile(*obj, pc, relocation, symbol_buf_,
|
|
1529
1531
|
sizeof(symbol_buf_), tmp_buf_,
|
|
1530
1532
|
sizeof(tmp_buf_)) == SYMBOL_FOUND) {
|
|
@@ -1549,17 +1551,9 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
|
|
|
1549
1551
|
#endif
|
|
1550
1552
|
}
|
|
1551
1553
|
|
|
1552
|
-
if (
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
pc, relocation, fd, symbol_buf_, sizeof(symbol_buf_),
|
|
1556
|
-
tmp_buf_, sizeof(tmp_buf_), nullptr};
|
|
1557
|
-
for (int i = 0; i < g_num_decorators; ++i) {
|
|
1558
|
-
decorator_args.arg = g_decorators[i].arg;
|
|
1559
|
-
g_decorators[i].fn(&decorator_args);
|
|
1560
|
-
}
|
|
1561
|
-
}
|
|
1562
|
-
g_decorators_mu.unlock();
|
|
1554
|
+
if (obj != nullptr && obj->decorator != nullptr) {
|
|
1555
|
+
obj->decorator->Decorate(pc, relocation, symbol_buf_, sizeof(symbol_buf_),
|
|
1556
|
+
tmp_buf_, sizeof(tmp_buf_));
|
|
1563
1557
|
}
|
|
1564
1558
|
if (symbol_buf_[0] == '\0') {
|
|
1565
1559
|
return nullptr;
|
|
@@ -1604,51 +1598,9 @@ const char *Symbolizer::GetSymbol(const void *pc) {
|
|
|
1604
1598
|
#endif
|
|
1605
1599
|
}
|
|
1606
1600
|
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
return false;
|
|
1611
|
-
}
|
|
1612
|
-
g_num_decorators = 0;
|
|
1613
|
-
g_decorators_mu.unlock();
|
|
1614
|
-
return true;
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1617
|
-
bool RemoveSymbolDecorator(int ticket) {
|
|
1618
|
-
if (!g_decorators_mu.try_lock()) {
|
|
1619
|
-
// Someone else is using decorators. Get out.
|
|
1620
|
-
return false;
|
|
1621
|
-
}
|
|
1622
|
-
for (int i = 0; i < g_num_decorators; ++i) {
|
|
1623
|
-
if (g_decorators[i].ticket == ticket) {
|
|
1624
|
-
while (i < g_num_decorators - 1) {
|
|
1625
|
-
g_decorators[i] = g_decorators[i + 1];
|
|
1626
|
-
++i;
|
|
1627
|
-
}
|
|
1628
|
-
g_num_decorators = i;
|
|
1629
|
-
break;
|
|
1630
|
-
}
|
|
1631
|
-
}
|
|
1632
|
-
g_decorators_mu.unlock();
|
|
1633
|
-
return true; // Decorator is known to be removed.
|
|
1634
|
-
}
|
|
1635
|
-
|
|
1636
|
-
int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) {
|
|
1637
|
-
static int ticket = 0;
|
|
1638
|
-
|
|
1639
|
-
if (!g_decorators_mu.try_lock()) {
|
|
1640
|
-
// Someone else is using decorators. Get out.
|
|
1641
|
-
return -2;
|
|
1642
|
-
}
|
|
1643
|
-
int ret = ticket;
|
|
1644
|
-
if (g_num_decorators >= kMaxDecorators) {
|
|
1645
|
-
ret = -1;
|
|
1646
|
-
} else {
|
|
1647
|
-
g_decorators[g_num_decorators] = {decorator, arg, ticket++};
|
|
1648
|
-
++g_num_decorators;
|
|
1649
|
-
}
|
|
1650
|
-
g_decorators_mu.unlock();
|
|
1651
|
-
return ret;
|
|
1601
|
+
SymbolDecorator::Factory* SetSymbolDecoratorFactory(
|
|
1602
|
+
SymbolDecorator::Factory* factory) {
|
|
1603
|
+
return g_decorator_factory.exchange(factory, std::memory_order_acq_rel);
|
|
1652
1604
|
}
|
|
1653
1605
|
|
|
1654
1606
|
bool RegisterFileMappingHint(const void *start, const void *end,
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
15
|
#include "absl/debugging/symbolize.h"
|
|
16
|
+
#include <cstddef>
|
|
17
|
+
|
|
18
|
+
#include "absl/debugging/internal/symbolize.h"
|
|
19
|
+
#include "absl/strings/str_format.h"
|
|
16
20
|
|
|
17
21
|
#ifdef __EMSCRIPTEN__
|
|
18
22
|
#include <emscripten.h>
|
|
@@ -32,8 +36,10 @@
|
|
|
32
36
|
#include "absl/base/attributes.h"
|
|
33
37
|
#include "absl/base/casts.h"
|
|
34
38
|
#include "absl/base/config.h"
|
|
39
|
+
#include "absl/base/internal/low_level_alloc.h"
|
|
35
40
|
#include "absl/base/internal/per_thread_tls.h"
|
|
36
41
|
#include "absl/base/optimization.h"
|
|
42
|
+
#include "absl/cleanup/cleanup.h"
|
|
37
43
|
#include "absl/debugging/internal/stack_consumption.h"
|
|
38
44
|
#include "absl/log/check.h"
|
|
39
45
|
#include "absl/log/log.h"
|
|
@@ -130,7 +136,7 @@ static const char *TrySymbolizeWithLimit(void *pc, int limit) {
|
|
|
130
136
|
<< "try_symbolize_buffer is too small";
|
|
131
137
|
|
|
132
138
|
// Use the heap to facilitate heap and buffer sanitizer tools.
|
|
133
|
-
auto heap_buffer =
|
|
139
|
+
auto heap_buffer = std::make_unique<char[]>(sizeof(try_symbolize_buffer));
|
|
134
140
|
bool found = absl::Symbolize(pc, heap_buffer.get(), limit);
|
|
135
141
|
if (found) {
|
|
136
142
|
CHECK_LT(static_cast<int>(
|
|
@@ -369,46 +375,41 @@ TEST(Symbolize, SymbolizeWithMultipleMaps) {
|
|
|
369
375
|
}
|
|
370
376
|
}
|
|
371
377
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
std::string a_message("a");
|
|
383
|
-
EXPECT_GE(ticket_a = absl::debugging_internal::InstallSymbolDecorator(
|
|
384
|
-
DummySymbolDecorator, &a_message),
|
|
385
|
-
0);
|
|
386
|
-
|
|
387
|
-
int ticket_b;
|
|
388
|
-
std::string b_message("b");
|
|
389
|
-
EXPECT_GE(ticket_b = absl::debugging_internal::InstallSymbolDecorator(
|
|
390
|
-
DummySymbolDecorator, &b_message),
|
|
391
|
-
0);
|
|
378
|
+
template <char C>
|
|
379
|
+
class TestSymbolDecorator final
|
|
380
|
+
: public absl::debugging_internal::SymbolDecorator {
|
|
381
|
+
public:
|
|
382
|
+
static absl::debugging_internal::SymbolDecoratorPtr Factory(int /*fd*/) {
|
|
383
|
+
void* ptr = absl::base_internal::LowLevelAlloc::AllocWithArena(
|
|
384
|
+
sizeof(TestSymbolDecorator), absl::base_internal::SigSafeArena());
|
|
385
|
+
return absl::debugging_internal::SymbolDecoratorPtr(
|
|
386
|
+
new (ptr) TestSymbolDecorator());
|
|
387
|
+
}
|
|
392
388
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
389
|
+
void Decorate(const void* /*pc*/, ptrdiff_t /*relocation*/, char* symbol_buf,
|
|
390
|
+
size_t symbol_buf_size, char* /*tmp_buf*/,
|
|
391
|
+
size_t /*tmp_buf_size*/) const override {
|
|
392
|
+
const size_t len = strlen(symbol_buf);
|
|
393
|
+
absl::SNPrintF(symbol_buf + len, symbol_buf_size - len, " hello %c", C);
|
|
394
|
+
}
|
|
395
|
+
};
|
|
398
396
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
397
|
+
TEST(Symbolize, SetSymbolDecorator) {
|
|
398
|
+
absl::Cleanup cleanup =
|
|
399
|
+
[old_decorator = absl::debugging_internal::SetSymbolDecoratorFactory(
|
|
400
|
+
&TestSymbolDecorator<'a'>::Factory)] {
|
|
401
|
+
absl::debugging_internal::SetSymbolDecoratorFactory(old_decorator);
|
|
402
|
+
};
|
|
403
403
|
|
|
404
|
-
|
|
404
|
+
EXPECT_STREQ("nonstatic_func hello a",
|
|
405
|
+
TrySymbolize(reinterpret_cast<void*>(&nonstatic_func)));
|
|
405
406
|
|
|
406
|
-
|
|
407
|
+
EXPECT_EQ(absl::debugging_internal::SetSymbolDecoratorFactory(
|
|
408
|
+
&TestSymbolDecorator<'b'>::Factory),
|
|
409
|
+
&TestSymbolDecorator<'a'>::Factory);
|
|
407
410
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
EXPECT_TRUE(absl::debugging_internal::RemoveSymbolDecorator(ticket_a));
|
|
411
|
-
EXPECT_TRUE(absl::debugging_internal::RemoveSymbolDecorator(ticket_c));
|
|
411
|
+
EXPECT_STREQ("nonstatic_func hello b",
|
|
412
|
+
TrySymbolize(reinterpret_cast<void*>(&nonstatic_func)));
|
|
412
413
|
}
|
|
413
414
|
|
|
414
415
|
// Some versions of Clang with optimizations enabled seem to be able
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
|
|
15
15
|
#include <cstdint>
|
|
16
16
|
|
|
17
|
-
#include "absl/
|
|
17
|
+
#include "absl/debugging/internal/symbolize.h"
|
|
18
18
|
|
|
19
19
|
namespace absl {
|
|
20
20
|
ABSL_NAMESPACE_BEGIN
|
|
21
21
|
|
|
22
22
|
namespace debugging_internal {
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
SymbolDecorator::Factory* SetSymbolDecoratorFactory(SymbolDecorator::Factory*) {
|
|
25
|
+
return nullptr;
|
|
26
|
+
}
|
|
27
27
|
bool RegisterFileMappingHint(const void *, const void *, uint64_t, const char *) {
|
|
28
28
|
return false;
|
|
29
29
|
}
|
|
@@ -43,6 +43,7 @@ cc_library(
|
|
|
43
43
|
copts = ABSL_DEFAULT_COPTS,
|
|
44
44
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
45
45
|
visibility = [
|
|
46
|
+
"//absl:friends",
|
|
46
47
|
"//absl/flags:__pkg__",
|
|
47
48
|
],
|
|
48
49
|
deps = [
|
|
@@ -62,6 +63,7 @@ cc_library(
|
|
|
62
63
|
copts = ABSL_DEFAULT_COPTS,
|
|
63
64
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
64
65
|
visibility = [
|
|
66
|
+
"//absl:friends",
|
|
65
67
|
"//absl/flags:__pkg__",
|
|
66
68
|
"//absl/log:__pkg__",
|
|
67
69
|
],
|
|
@@ -129,7 +131,7 @@ cc_library(
|
|
|
129
131
|
copts = ABSL_DEFAULT_COPTS,
|
|
130
132
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
131
133
|
visibility = [
|
|
132
|
-
"//
|
|
134
|
+
"//absl:friends",
|
|
133
135
|
],
|
|
134
136
|
deps = [
|
|
135
137
|
"//absl/base:config",
|
|
@@ -151,6 +153,7 @@ cc_library(
|
|
|
151
153
|
":commandlineflag_internal",
|
|
152
154
|
"//absl/base:config",
|
|
153
155
|
"//absl/base:fast_type_id",
|
|
156
|
+
"//absl/base:nullability",
|
|
154
157
|
"//absl/strings",
|
|
155
158
|
"//absl/types:optional",
|
|
156
159
|
],
|
|
@@ -167,6 +170,7 @@ cc_library(
|
|
|
167
170
|
copts = ABSL_DEFAULT_COPTS,
|
|
168
171
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
169
172
|
visibility = [
|
|
173
|
+
"//absl:friends",
|
|
170
174
|
"//absl/flags:__pkg__",
|
|
171
175
|
"//absl/flags/rust:__pkg__",
|
|
172
176
|
],
|
|
@@ -267,6 +271,7 @@ cc_library(
|
|
|
267
271
|
copts = ABSL_DEFAULT_COPTS,
|
|
268
272
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
269
273
|
visibility = [
|
|
274
|
+
"//absl:friends",
|
|
270
275
|
"//absl/flags:__pkg__",
|
|
271
276
|
],
|
|
272
277
|
deps = [
|
|
@@ -410,7 +415,6 @@ cc_test(
|
|
|
410
415
|
"//absl/numeric:int128",
|
|
411
416
|
"//absl/strings",
|
|
412
417
|
"//absl/time",
|
|
413
|
-
"//absl/types:optional",
|
|
414
418
|
"@googletest//:gtest",
|
|
415
419
|
"@googletest//:gtest_main",
|
|
416
420
|
],
|
|
@@ -436,7 +440,6 @@ cc_binary(
|
|
|
436
440
|
":reflection",
|
|
437
441
|
"//absl/strings",
|
|
438
442
|
"//absl/time",
|
|
439
|
-
"//absl/types:optional",
|
|
440
443
|
"@google_benchmark//:benchmark_main",
|
|
441
444
|
],
|
|
442
445
|
)
|
|
@@ -128,6 +128,7 @@ absl_cc_library(
|
|
|
128
128
|
absl::config
|
|
129
129
|
absl::fast_type_id
|
|
130
130
|
absl::flags_commandlineflag_internal
|
|
131
|
+
absl::nullability
|
|
131
132
|
absl::optional
|
|
132
133
|
absl::strings
|
|
133
134
|
)
|
|
@@ -351,7 +352,6 @@ absl_cc_test(
|
|
|
351
352
|
absl::flags_parse
|
|
352
353
|
absl::flags_reflection
|
|
353
354
|
absl::int128
|
|
354
|
-
absl::optional
|
|
355
355
|
absl::raw_logging_internal
|
|
356
356
|
absl::strings
|
|
357
357
|
absl::time
|
|
@@ -27,10 +27,12 @@
|
|
|
27
27
|
#define ABSL_FLAGS_COMMANDLINEFLAG_H_
|
|
28
28
|
|
|
29
29
|
#include <memory>
|
|
30
|
+
#include <optional>
|
|
30
31
|
#include <string>
|
|
31
32
|
|
|
32
33
|
#include "absl/base/config.h"
|
|
33
34
|
#include "absl/base/fast_type_id.h"
|
|
35
|
+
#include "absl/base/nullability.h"
|
|
34
36
|
#include "absl/flags/internal/commandlineflag.h"
|
|
35
37
|
#include "absl/strings/string_view.h"
|
|
36
38
|
#include "absl/types/optional.h"
|
|
@@ -86,11 +88,11 @@ class CommandLineFlag {
|
|
|
86
88
|
// absl::CommandLineFlag::TryGet()
|
|
87
89
|
//
|
|
88
90
|
// Attempts to retrieve the flag value. Returns value on success,
|
|
89
|
-
//
|
|
91
|
+
// std::nullopt otherwise.
|
|
90
92
|
template <typename T>
|
|
91
|
-
|
|
93
|
+
std::optional<T> TryGet() const {
|
|
92
94
|
if (IsRetired() || !IsOfType<T>()) {
|
|
93
|
-
return
|
|
95
|
+
return std::nullopt;
|
|
94
96
|
}
|
|
95
97
|
|
|
96
98
|
// Implementation notes:
|
|
@@ -118,7 +120,7 @@ class CommandLineFlag {
|
|
|
118
120
|
Read(&u.value);
|
|
119
121
|
// allow retired flags to be "read", so we can report invalid access.
|
|
120
122
|
if (IsRetired()) {
|
|
121
|
-
return
|
|
123
|
+
return std::nullopt;
|
|
122
124
|
}
|
|
123
125
|
return std::move(u.value);
|
|
124
126
|
}
|
|
@@ -158,7 +160,7 @@ class CommandLineFlag {
|
|
|
158
160
|
// Sets the value of the flag based on specified string `value`. If the flag
|
|
159
161
|
// was successfully set to new value, it returns true. Otherwise, sets `error`
|
|
160
162
|
// to indicate the error, leaves the flag unchanged, and returns false.
|
|
161
|
-
bool ParseFrom(absl::string_view value, std::string* error);
|
|
163
|
+
bool ParseFrom(absl::string_view value, std::string* absl_nonnull error);
|
|
162
164
|
|
|
163
165
|
protected:
|
|
164
166
|
~CommandLineFlag() = default;
|
|
@@ -188,7 +190,7 @@ class CommandLineFlag {
|
|
|
188
190
|
|
|
189
191
|
// Copy-construct a new value of the flag's type in a memory referenced by
|
|
190
192
|
// the dst based on the current flag's value.
|
|
191
|
-
virtual void Read(void* dst) const = 0;
|
|
193
|
+
virtual void Read(void* absl_nonnull dst) const = 0;
|
|
192
194
|
|
|
193
195
|
// To be deleted. Used to return true if flag's current value originated from
|
|
194
196
|
// command line.
|
|
@@ -55,7 +55,7 @@ class CommandLineFlagTest : public testing::Test {
|
|
|
55
55
|
#if ABSL_FLAGS_STRIP_NAMES
|
|
56
56
|
GTEST_SKIP() << "This test requires flag names to be present";
|
|
57
57
|
#endif
|
|
58
|
-
flag_saver_ =
|
|
58
|
+
flag_saver_ = std::make_unique<absl::FlagSaver>();
|
|
59
59
|
}
|
|
60
60
|
void TearDown() override { flag_saver_.reset(); }
|
|
61
61
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
#include <stdint.h>
|
|
17
17
|
|
|
18
|
+
#include <optional>
|
|
18
19
|
#include <string>
|
|
19
20
|
#include <vector>
|
|
20
21
|
|
|
@@ -24,7 +25,6 @@
|
|
|
24
25
|
#include "absl/flags/reflection.h"
|
|
25
26
|
#include "absl/strings/string_view.h"
|
|
26
27
|
#include "absl/time/time.h"
|
|
27
|
-
#include "absl/types/optional.h"
|
|
28
28
|
#include "benchmark/benchmark.h"
|
|
29
29
|
|
|
30
30
|
namespace {
|
|
@@ -32,10 +32,10 @@ using String = std::string;
|
|
|
32
32
|
using VectorOfStrings = std::vector<std::string>;
|
|
33
33
|
using AbslDuration = absl::Duration;
|
|
34
34
|
|
|
35
|
-
// We do not want to take over marshalling for the types
|
|
36
|
-
//
|
|
35
|
+
// We do not want to take over marshalling for the types std::optional<int>,
|
|
36
|
+
// std::optional<std::string> which we do not own. Instead we introduce unique
|
|
37
37
|
// "aliases" to these types, which we do.
|
|
38
|
-
using AbslOptionalInt =
|
|
38
|
+
using AbslOptionalInt = std::optional<int>;
|
|
39
39
|
struct OptionalInt : AbslOptionalInt {
|
|
40
40
|
using AbslOptionalInt::AbslOptionalInt;
|
|
41
41
|
};
|
|
@@ -54,7 +54,7 @@ std::string AbslUnparseFlag(const OptionalInt& flag) {
|
|
|
54
54
|
return !flag ? "" : absl::UnparseFlag(*flag);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
using AbslOptionalString =
|
|
57
|
+
using AbslOptionalString = std::optional<std::string>;
|
|
58
58
|
struct OptionalString : AbslOptionalString {
|
|
59
59
|
using AbslOptionalString::AbslOptionalString;
|
|
60
60
|
};
|