re2 1.22.2 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -125,12 +125,20 @@ namespace {
|
|
|
125
125
|
// Some platforms use a special .opd section to store function pointers.
|
|
126
126
|
const char kOpdSectionName[] = ".opd";
|
|
127
127
|
|
|
128
|
-
#if
|
|
128
|
+
#if defined(__powerpc64__) && defined(_CALL_ELF)
|
|
129
|
+
#if _CALL_ELF <= 1
|
|
130
|
+
#define ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI 1
|
|
131
|
+
#endif
|
|
132
|
+
#endif
|
|
133
|
+
#if defined(ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI) || defined(__ia64)
|
|
129
134
|
// Use opd section for function descriptors on these platforms, the function
|
|
130
135
|
// address is the first word of the descriptor.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
136
|
+
//
|
|
137
|
+
// https://maskray.me/blog/2023-02-26-linker-notes-on-power-isa notes that
|
|
138
|
+
// opd sections are used on 64-bit PowerPC with the ELFv1 ABI.
|
|
139
|
+
inline constexpr bool kPlatformUsesOPDSections = true;
|
|
140
|
+
#else
|
|
141
|
+
inline constexpr bool kPlatformUsesOPDSections = false;
|
|
134
142
|
#endif
|
|
135
143
|
|
|
136
144
|
// This works for PowerPC & IA64 only. A function descriptor consist of two
|
|
@@ -159,22 +167,22 @@ struct FileMappingHint {
|
|
|
159
167
|
// We are using SpinLock and not a Mutex here, because we may be called
|
|
160
168
|
// from inside Mutex::Lock itself, and it prohibits recursive calls.
|
|
161
169
|
// This happens in e.g. base/stacktrace_syscall_unittest.
|
|
162
|
-
// Moreover, we are using only
|
|
170
|
+
// Moreover, we are using only try_lock(), if the decorator list
|
|
163
171
|
// is being modified (is busy), we skip all decorators, and possibly
|
|
164
172
|
// loose some info. Sorry, that's the best we could do.
|
|
165
173
|
ABSL_CONST_INIT absl::base_internal::SpinLock g_decorators_mu(
|
|
166
|
-
absl::
|
|
174
|
+
absl::base_internal::SCHEDULE_KERNEL_ONLY);
|
|
167
175
|
|
|
168
176
|
const int kMaxFileMappingHints = 8;
|
|
169
177
|
int g_num_file_mapping_hints;
|
|
170
178
|
FileMappingHint g_file_mapping_hints[kMaxFileMappingHints];
|
|
171
179
|
// Protects g_file_mapping_hints.
|
|
172
180
|
ABSL_CONST_INIT absl::base_internal::SpinLock g_file_mapping_mu(
|
|
173
|
-
absl::
|
|
181
|
+
absl::base_internal::SCHEDULE_KERNEL_ONLY);
|
|
174
182
|
|
|
175
183
|
// Async-signal-safe function to zero a buffer.
|
|
176
184
|
// memset() is not guaranteed to be async-signal-safe.
|
|
177
|
-
static void SafeMemZero(void*
|
|
185
|
+
static void SafeMemZero(void *p, size_t size) {
|
|
178
186
|
unsigned char *c = static_cast<unsigned char *>(p);
|
|
179
187
|
while (size--) {
|
|
180
188
|
*c++ = 0;
|
|
@@ -224,29 +232,6 @@ struct SymbolCacheLine {
|
|
|
224
232
|
uint32_t age[ASSOCIATIVITY];
|
|
225
233
|
};
|
|
226
234
|
|
|
227
|
-
// ---------------------------------------------------------------
|
|
228
|
-
// An async-signal-safe arena for LowLevelAlloc
|
|
229
|
-
static std::atomic<base_internal::LowLevelAlloc::Arena *> g_sig_safe_arena;
|
|
230
|
-
|
|
231
|
-
static base_internal::LowLevelAlloc::Arena *SigSafeArena() {
|
|
232
|
-
return g_sig_safe_arena.load(std::memory_order_acquire);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
static void InitSigSafeArena() {
|
|
236
|
-
if (SigSafeArena() == nullptr) {
|
|
237
|
-
base_internal::LowLevelAlloc::Arena *new_arena =
|
|
238
|
-
base_internal::LowLevelAlloc::NewArena(
|
|
239
|
-
base_internal::LowLevelAlloc::kAsyncSignalSafe);
|
|
240
|
-
base_internal::LowLevelAlloc::Arena *old_value = nullptr;
|
|
241
|
-
if (!g_sig_safe_arena.compare_exchange_strong(old_value, new_arena,
|
|
242
|
-
std::memory_order_release,
|
|
243
|
-
std::memory_order_relaxed)) {
|
|
244
|
-
// We lost a race to allocate an arena; deallocate.
|
|
245
|
-
base_internal::LowLevelAlloc::DeleteArena(new_arena);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
235
|
// ---------------------------------------------------------------
|
|
251
236
|
// An AddrMap is a vector of ObjFile, using SigSafeArena() for allocation.
|
|
252
237
|
|
|
@@ -279,7 +264,7 @@ ObjFile *AddrMap::Add() {
|
|
|
279
264
|
size_t new_allocated = allocated_ * 2 + 50;
|
|
280
265
|
ObjFile *new_obj_ =
|
|
281
266
|
static_cast<ObjFile *>(base_internal::LowLevelAlloc::AllocWithArena(
|
|
282
|
-
new_allocated * sizeof(*new_obj_), SigSafeArena()));
|
|
267
|
+
new_allocated * sizeof(*new_obj_), base_internal::SigSafeArena()));
|
|
283
268
|
if (obj_) {
|
|
284
269
|
memcpy(new_obj_, obj_, allocated_ * sizeof(*new_obj_));
|
|
285
270
|
base_internal::LowLevelAlloc::Free(obj_);
|
|
@@ -327,8 +312,9 @@ class Symbolizer {
|
|
|
327
312
|
private:
|
|
328
313
|
char *CopyString(const char *s) {
|
|
329
314
|
size_t len = strlen(s);
|
|
330
|
-
char *dst =
|
|
331
|
-
base_internal::LowLevelAlloc::AllocWithArena(
|
|
315
|
+
char *dst =
|
|
316
|
+
static_cast<char *>(base_internal::LowLevelAlloc::AllocWithArena(
|
|
317
|
+
len + 1, base_internal::SigSafeArena()));
|
|
332
318
|
ABSL_RAW_CHECK(dst != nullptr, "out of memory");
|
|
333
319
|
memcpy(dst, s, len + 1);
|
|
334
320
|
return dst;
|
|
@@ -433,14 +419,14 @@ static size_t SymbolizerSize() {
|
|
|
433
419
|
// Return (and set null) g_cached_symbolized_state if it is not null.
|
|
434
420
|
// Otherwise return a new symbolizer.
|
|
435
421
|
static Symbolizer *AllocateSymbolizer() {
|
|
436
|
-
InitSigSafeArena();
|
|
422
|
+
base_internal::InitSigSafeArena();
|
|
437
423
|
Symbolizer *symbolizer =
|
|
438
424
|
g_cached_symbolizer.exchange(nullptr, std::memory_order_acquire);
|
|
439
425
|
if (symbolizer != nullptr) {
|
|
440
426
|
return symbolizer;
|
|
441
427
|
}
|
|
442
428
|
return new (base_internal::LowLevelAlloc::AllocWithArena(
|
|
443
|
-
SymbolizerSize(), SigSafeArena())) Symbolizer();
|
|
429
|
+
SymbolizerSize(), base_internal::SigSafeArena())) Symbolizer();
|
|
444
430
|
}
|
|
445
431
|
|
|
446
432
|
// Set g_cached_symbolize_state to s if it is null, otherwise
|
|
@@ -1451,24 +1437,25 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
|
|
|
1451
1437
|
}
|
|
1452
1438
|
phoff += phentsize;
|
|
1453
1439
|
|
|
1454
|
-
#
|
|
1455
|
-
// On the PowerPC
|
|
1456
|
-
// descriptors. These descriptors are stored in an .opd section,
|
|
1457
|
-
// mapped read-only. We thus need to look at all readable
|
|
1458
|
-
// just the executable ones.
|
|
1440
|
+
#ifdef ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI
|
|
1441
|
+
// On the PowerPC 64-bit ELFv1 ABI, function pointers actually point to
|
|
1442
|
+
// function descriptors. These descriptors are stored in an .opd section,
|
|
1443
|
+
// which is mapped read-only. We thus need to look at all readable
|
|
1444
|
+
// segments, not just the executable ones.
|
|
1459
1445
|
constexpr int interesting = PF_R;
|
|
1460
1446
|
#else
|
|
1461
1447
|
constexpr int interesting = PF_X | PF_R;
|
|
1462
1448
|
#endif
|
|
1463
1449
|
|
|
1464
|
-
if (phdr.p_type != PT_LOAD
|
|
1465
|
-
|
|
1450
|
+
if (phdr.p_type != PT_LOAD ||
|
|
1451
|
+
(phdr.p_flags & interesting) != interesting) {
|
|
1466
1452
|
// Not a LOAD segment, not executable code, and not a function
|
|
1467
1453
|
// descriptor.
|
|
1468
1454
|
continue;
|
|
1469
1455
|
}
|
|
1470
1456
|
if (num_interesting_load_segments < obj->phdr.size()) {
|
|
1471
|
-
memcpy(&obj->phdr[num_interesting_load_segments++], &phdr,
|
|
1457
|
+
memcpy(&obj->phdr[num_interesting_load_segments++], &phdr,
|
|
1458
|
+
sizeof(phdr));
|
|
1472
1459
|
} else {
|
|
1473
1460
|
ABSL_RAW_LOG(
|
|
1474
1461
|
WARNING, "%s: too many interesting LOAD segments: %zu >= %zu",
|
|
@@ -1517,7 +1504,8 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
|
|
|
1517
1504
|
ABSL_RAW_CHECK(p.p_type == PT_NULL, "unexpected p_type");
|
|
1518
1505
|
break;
|
|
1519
1506
|
}
|
|
1520
|
-
if (pc <
|
|
1507
|
+
if (pc <
|
|
1508
|
+
reinterpret_cast<void *>(start_addr + p.p_vaddr + p.p_memsz)) {
|
|
1521
1509
|
phdr = &p;
|
|
1522
1510
|
break;
|
|
1523
1511
|
}
|
|
@@ -1561,7 +1549,7 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
|
|
|
1561
1549
|
#endif
|
|
1562
1550
|
}
|
|
1563
1551
|
|
|
1564
|
-
if (g_decorators_mu.
|
|
1552
|
+
if (g_decorators_mu.try_lock()) {
|
|
1565
1553
|
if (g_num_decorators > 0) {
|
|
1566
1554
|
SymbolDecoratorArgs decorator_args = {
|
|
1567
1555
|
pc, relocation, fd, symbol_buf_, sizeof(symbol_buf_),
|
|
@@ -1571,7 +1559,7 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
|
|
|
1571
1559
|
g_decorators[i].fn(&decorator_args);
|
|
1572
1560
|
}
|
|
1573
1561
|
}
|
|
1574
|
-
g_decorators_mu.
|
|
1562
|
+
g_decorators_mu.unlock();
|
|
1575
1563
|
}
|
|
1576
1564
|
if (symbol_buf_[0] == '\0') {
|
|
1577
1565
|
return nullptr;
|
|
@@ -1617,17 +1605,17 @@ const char *Symbolizer::GetSymbol(const void *pc) {
|
|
|
1617
1605
|
}
|
|
1618
1606
|
|
|
1619
1607
|
bool RemoveAllSymbolDecorators(void) {
|
|
1620
|
-
if (!g_decorators_mu.
|
|
1608
|
+
if (!g_decorators_mu.try_lock()) {
|
|
1621
1609
|
// Someone else is using decorators. Get out.
|
|
1622
1610
|
return false;
|
|
1623
1611
|
}
|
|
1624
1612
|
g_num_decorators = 0;
|
|
1625
|
-
g_decorators_mu.
|
|
1613
|
+
g_decorators_mu.unlock();
|
|
1626
1614
|
return true;
|
|
1627
1615
|
}
|
|
1628
1616
|
|
|
1629
1617
|
bool RemoveSymbolDecorator(int ticket) {
|
|
1630
|
-
if (!g_decorators_mu.
|
|
1618
|
+
if (!g_decorators_mu.try_lock()) {
|
|
1631
1619
|
// Someone else is using decorators. Get out.
|
|
1632
1620
|
return false;
|
|
1633
1621
|
}
|
|
@@ -1641,14 +1629,14 @@ bool RemoveSymbolDecorator(int ticket) {
|
|
|
1641
1629
|
break;
|
|
1642
1630
|
}
|
|
1643
1631
|
}
|
|
1644
|
-
g_decorators_mu.
|
|
1632
|
+
g_decorators_mu.unlock();
|
|
1645
1633
|
return true; // Decorator is known to be removed.
|
|
1646
1634
|
}
|
|
1647
1635
|
|
|
1648
1636
|
int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) {
|
|
1649
1637
|
static int ticket = 0;
|
|
1650
1638
|
|
|
1651
|
-
if (!g_decorators_mu.
|
|
1639
|
+
if (!g_decorators_mu.try_lock()) {
|
|
1652
1640
|
// Someone else is using decorators. Get out.
|
|
1653
1641
|
return -2;
|
|
1654
1642
|
}
|
|
@@ -1659,18 +1647,18 @@ int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) {
|
|
|
1659
1647
|
g_decorators[g_num_decorators] = {decorator, arg, ticket++};
|
|
1660
1648
|
++g_num_decorators;
|
|
1661
1649
|
}
|
|
1662
|
-
g_decorators_mu.
|
|
1650
|
+
g_decorators_mu.unlock();
|
|
1663
1651
|
return ret;
|
|
1664
1652
|
}
|
|
1665
1653
|
|
|
1666
|
-
bool RegisterFileMappingHint(const void *start, const void *end,
|
|
1667
|
-
const char *filename) {
|
|
1654
|
+
bool RegisterFileMappingHint(const void *start, const void *end,
|
|
1655
|
+
uint64_t offset, const char *filename) {
|
|
1668
1656
|
SAFE_ASSERT(start <= end);
|
|
1669
1657
|
SAFE_ASSERT(filename != nullptr);
|
|
1670
1658
|
|
|
1671
|
-
InitSigSafeArena();
|
|
1659
|
+
base_internal::InitSigSafeArena();
|
|
1672
1660
|
|
|
1673
|
-
if (!g_file_mapping_mu.
|
|
1661
|
+
if (!g_file_mapping_mu.try_lock()) {
|
|
1674
1662
|
return false;
|
|
1675
1663
|
}
|
|
1676
1664
|
|
|
@@ -1680,8 +1668,9 @@ bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset
|
|
|
1680
1668
|
} else {
|
|
1681
1669
|
// TODO(ckennelly): Move this into a string copy routine.
|
|
1682
1670
|
size_t len = strlen(filename);
|
|
1683
|
-
char *dst =
|
|
1684
|
-
base_internal::LowLevelAlloc::AllocWithArena(
|
|
1671
|
+
char *dst =
|
|
1672
|
+
static_cast<char *>(base_internal::LowLevelAlloc::AllocWithArena(
|
|
1673
|
+
len + 1, base_internal::SigSafeArena()));
|
|
1685
1674
|
ABSL_RAW_CHECK(dst != nullptr, "out of memory");
|
|
1686
1675
|
memcpy(dst, filename, len + 1);
|
|
1687
1676
|
|
|
@@ -1692,13 +1681,13 @@ bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset
|
|
|
1692
1681
|
hint.filename = dst;
|
|
1693
1682
|
}
|
|
1694
1683
|
|
|
1695
|
-
g_file_mapping_mu.
|
|
1684
|
+
g_file_mapping_mu.unlock();
|
|
1696
1685
|
return ret;
|
|
1697
1686
|
}
|
|
1698
1687
|
|
|
1699
1688
|
bool GetFileMappingHint(const void **start, const void **end, uint64_t *offset,
|
|
1700
1689
|
const char **filename) {
|
|
1701
|
-
if (!g_file_mapping_mu.
|
|
1690
|
+
if (!g_file_mapping_mu.try_lock()) {
|
|
1702
1691
|
return false;
|
|
1703
1692
|
}
|
|
1704
1693
|
bool found = false;
|
|
@@ -1721,7 +1710,7 @@ bool GetFileMappingHint(const void **start, const void **end, uint64_t *offset,
|
|
|
1721
1710
|
break;
|
|
1722
1711
|
}
|
|
1723
1712
|
}
|
|
1724
|
-
g_file_mapping_mu.
|
|
1713
|
+
g_file_mapping_mu.unlock();
|
|
1725
1714
|
return found;
|
|
1726
1715
|
}
|
|
1727
1716
|
|
|
@@ -1757,8 +1746,11 @@ ABSL_NAMESPACE_END
|
|
|
1757
1746
|
} // namespace absl
|
|
1758
1747
|
|
|
1759
1748
|
extern "C" bool AbslInternalGetFileMappingHint(const void **start,
|
|
1760
|
-
const void **end,
|
|
1749
|
+
const void **end,
|
|
1750
|
+
uint64_t *offset,
|
|
1761
1751
|
const char **filename) {
|
|
1762
1752
|
return absl::debugging_internal::GetFileMappingHint(start, end, offset,
|
|
1763
1753
|
filename);
|
|
1764
1754
|
}
|
|
1755
|
+
|
|
1756
|
+
#undef ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI
|
|
@@ -58,12 +58,13 @@ bool Symbolize(const void* pc, char* out, int out_size) {
|
|
|
58
58
|
return false;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
strncpy(out, func_name, out_size);
|
|
61
|
+
strncpy(out, func_name, static_cast<size_t>(out_size));
|
|
62
62
|
|
|
63
63
|
if (out[out_size - 1] != '\0') {
|
|
64
64
|
// strncpy() does not '\0' terminate when it truncates.
|
|
65
65
|
static constexpr char kEllipsis[] = "...";
|
|
66
|
-
|
|
66
|
+
size_t ellipsis_size =
|
|
67
|
+
std::min(sizeof(kEllipsis) - 1, static_cast<size_t>(out_size) - 1);
|
|
67
68
|
memcpy(out + out_size - ellipsis_size - 1, kEllipsis, ellipsis_size);
|
|
68
69
|
out[out_size - 1] = '\0';
|
|
69
70
|
}
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
// See "Retrieving Symbol Information by Address":
|
|
16
16
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms680578(v=vs.85).aspx
|
|
17
17
|
|
|
18
|
+
#include <ntstatus.h>
|
|
18
19
|
#include <windows.h>
|
|
20
|
+
#include <winternl.h>
|
|
19
21
|
|
|
20
22
|
// MSVC header dbghelp.h has a warning for an ignored typedef.
|
|
21
23
|
#pragma warning(push)
|
|
@@ -45,13 +47,30 @@ void InitializeSymbolizer(const char*) {
|
|
|
45
47
|
// symbols be loaded. This is the fastest, most efficient way to use
|
|
46
48
|
// the symbol handler.
|
|
47
49
|
SymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_UNDNAME);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
DWORD syminitialize_error;
|
|
51
|
+
constexpr int kSymInitializeRetries = 5;
|
|
52
|
+
for (int i = 0; i < kSymInitializeRetries; ++i) {
|
|
53
|
+
if (SymInitialize(process, nullptr, true)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// SymInitialize can fail sometimes with a STATUS_INFO_LENGTH_MISMATCH
|
|
58
|
+
// NTSTATUS (0xC0000004), which can happen when a module load occurs during
|
|
59
|
+
// the SymInitialize call. In this case, we should try calling SymInitialize
|
|
60
|
+
// again.
|
|
61
|
+
syminitialize_error = GetLastError();
|
|
62
|
+
// Both NTSTATUS and DWORD are 32-bit numbers, which makes the cast safe.
|
|
63
|
+
if (syminitialize_error !=
|
|
64
|
+
static_cast<DWORD>(STATUS_INFO_LENGTH_MISMATCH)) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
54
67
|
}
|
|
68
|
+
|
|
69
|
+
// GetLastError() returns a Win32 DWORD, but we assign to
|
|
70
|
+
// unsigned long long to simplify the ABSL_RAW_LOG case below. The uniform
|
|
71
|
+
// initialization guarantees this is not a narrowing conversion.
|
|
72
|
+
const unsigned long long error{syminitialize_error};
|
|
73
|
+
ABSL_RAW_LOG(FATAL, "SymInitialize() failed: %llu", error);
|
|
55
74
|
}
|
|
56
75
|
|
|
57
76
|
bool Symbolize(const void* pc, char* out, int out_size) {
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
#
|
|
16
16
|
|
|
17
|
+
load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
|
|
18
|
+
load("@rules_cc//cc:cc_library.bzl", "cc_library")
|
|
19
|
+
load("@rules_cc//cc:cc_test.bzl", "cc_test")
|
|
17
20
|
load(
|
|
18
21
|
"//absl:copts/configure_copts.bzl",
|
|
19
22
|
"ABSL_DEFAULT_COPTS",
|
|
@@ -192,6 +195,7 @@ cc_library(
|
|
|
192
195
|
":private_handle_accessor",
|
|
193
196
|
"//absl/base:config",
|
|
194
197
|
"//absl/base:core_headers",
|
|
198
|
+
"//absl/base:fast_type_id",
|
|
195
199
|
"//absl/base:no_destructor",
|
|
196
200
|
"//absl/container:flat_hash_map",
|
|
197
201
|
"//absl/strings",
|
|
@@ -221,6 +225,7 @@ cc_library(
|
|
|
221
225
|
"//absl/base:config",
|
|
222
226
|
"//absl/base:core_headers",
|
|
223
227
|
"//absl/base:dynamic_annotations",
|
|
228
|
+
"//absl/base:fast_type_id",
|
|
224
229
|
"//absl/base:no_destructor",
|
|
225
230
|
"//absl/memory",
|
|
226
231
|
"//absl/meta:type_traits",
|
|
@@ -245,6 +250,7 @@ cc_library(
|
|
|
245
250
|
":reflection",
|
|
246
251
|
"//absl/base:config",
|
|
247
252
|
"//absl/base:core_headers",
|
|
253
|
+
"//absl/base:nullability",
|
|
248
254
|
"//absl/strings",
|
|
249
255
|
],
|
|
250
256
|
)
|
|
@@ -165,6 +165,7 @@ absl_cc_library(
|
|
|
165
165
|
${ABSL_DEFAULT_LINKOPTS}
|
|
166
166
|
DEPS
|
|
167
167
|
absl::config
|
|
168
|
+
absl::fast_type_id
|
|
168
169
|
absl::flags_commandlineflag
|
|
169
170
|
absl::flags_private_handle_accessor
|
|
170
171
|
absl::flags_config
|
|
@@ -190,6 +191,7 @@ absl_cc_library(
|
|
|
190
191
|
DEPS
|
|
191
192
|
absl::base
|
|
192
193
|
absl::config
|
|
194
|
+
absl::fast_type_id
|
|
193
195
|
absl::flags_commandlineflag
|
|
194
196
|
absl::flags_commandlineflag_internal
|
|
195
197
|
absl::flags_config
|
|
@@ -218,6 +220,7 @@ absl_cc_library(
|
|
|
218
220
|
absl::flags_internal
|
|
219
221
|
absl::flags_reflection
|
|
220
222
|
absl::core_headers
|
|
223
|
+
absl::nullability
|
|
221
224
|
absl::strings
|
|
222
225
|
)
|
|
223
226
|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
#include <string>
|
|
31
31
|
|
|
32
32
|
#include "absl/base/config.h"
|
|
33
|
-
#include "absl/base/
|
|
33
|
+
#include "absl/base/fast_type_id.h"
|
|
34
34
|
#include "absl/flags/internal/commandlineflag.h"
|
|
35
35
|
#include "absl/strings/string_view.h"
|
|
36
36
|
#include "absl/types/optional.h"
|
|
@@ -80,7 +80,7 @@ class CommandLineFlag {
|
|
|
80
80
|
// Return true iff flag has type T.
|
|
81
81
|
template <typename T>
|
|
82
82
|
inline bool IsOfType() const {
|
|
83
|
-
return TypeId() ==
|
|
83
|
+
return TypeId() == FastTypeId<T>();
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
// absl::CommandLineFlag::TryGet()
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
|
|
36
36
|
#include "absl/base/attributes.h"
|
|
37
37
|
#include "absl/base/config.h"
|
|
38
|
+
#include "absl/base/nullability.h"
|
|
38
39
|
#include "absl/base/optimization.h"
|
|
39
40
|
#include "absl/flags/commandlineflag.h"
|
|
40
41
|
#include "absl/flags/config.h"
|
|
@@ -94,7 +95,7 @@ using Flag = flags_internal::Flag<T>;
|
|
|
94
95
|
// // FLAGS_firstname is a Flag of type `std::string`
|
|
95
96
|
// std::string first_name = absl::GetFlag(FLAGS_firstname);
|
|
96
97
|
template <typename T>
|
|
97
|
-
|
|
98
|
+
[[nodiscard]] T GetFlag(const absl::Flag<T>& flag) {
|
|
98
99
|
return flags_internal::FlagImplPeer::InvokeGet<T>(flag);
|
|
99
100
|
}
|
|
100
101
|
|
|
@@ -106,7 +107,7 @@ ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag<T>& flag) {
|
|
|
106
107
|
// thread-safe, but is potentially expensive. Avoid setting flags in general,
|
|
107
108
|
// but especially within performance-critical code.
|
|
108
109
|
template <typename T>
|
|
109
|
-
void SetFlag(absl::Flag<T>* flag, const T& v) {
|
|
110
|
+
void SetFlag(absl::Flag<T>* absl_nonnull flag, const T& v) {
|
|
110
111
|
flags_internal::FlagImplPeer::InvokeSet(*flag, v);
|
|
111
112
|
}
|
|
112
113
|
|
|
@@ -114,7 +115,7 @@ void SetFlag(absl::Flag<T>* flag, const T& v) {
|
|
|
114
115
|
// convertible to `T`. E.g., use this overload to pass a "const char*" when `T`
|
|
115
116
|
// is `std::string`.
|
|
116
117
|
template <typename T, typename V>
|
|
117
|
-
void SetFlag(absl::Flag<T>* flag, const V& v) {
|
|
118
|
+
void SetFlag(absl::Flag<T>* absl_nonnull flag, const V& v) {
|
|
118
119
|
T value(v);
|
|
119
120
|
flags_internal::FlagImplPeer::InvokeSet(*flag, value);
|
|
120
121
|
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
#define ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_
|
|
18
18
|
|
|
19
19
|
#include "absl/base/config.h"
|
|
20
|
-
#include "absl/base/
|
|
20
|
+
#include "absl/base/fast_type_id.h"
|
|
21
21
|
|
|
22
22
|
namespace absl {
|
|
23
23
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -28,7 +28,7 @@ namespace flags_internal {
|
|
|
28
28
|
// cases this id is enough to uniquely identify the flag's value type. In a few
|
|
29
29
|
// cases we'll have to resort to using actual RTTI implementation if it is
|
|
30
30
|
// available.
|
|
31
|
-
using FlagFastTypeId = absl::
|
|
31
|
+
using FlagFastTypeId = absl::FastTypeIdType;
|
|
32
32
|
|
|
33
33
|
// Options that control SetCommandLineOptionWithMode.
|
|
34
34
|
enum FlagSettingMode {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
#include "absl/base/config.h"
|
|
35
35
|
#include "absl/base/const_init.h"
|
|
36
36
|
#include "absl/base/dynamic_annotations.h"
|
|
37
|
+
#include "absl/base/fast_type_id.h"
|
|
37
38
|
#include "absl/base/no_destructor.h"
|
|
38
39
|
#include "absl/base/optimization.h"
|
|
39
40
|
#include "absl/base/thread_annotations.h"
|
|
@@ -59,7 +60,7 @@ namespace {
|
|
|
59
60
|
// Currently we only validate flag values for user-defined flag types.
|
|
60
61
|
bool ShouldValidateFlagValue(FlagFastTypeId flag_type_id) {
|
|
61
62
|
#define DONT_VALIDATE(T, _) \
|
|
62
|
-
if (flag_type_id ==
|
|
63
|
+
if (flag_type_id == absl::FastTypeId<T>()) return false;
|
|
63
64
|
ABSL_FLAGS_INTERNAL_SUPPORTED_TYPES(DONT_VALIDATE)
|
|
64
65
|
#undef DONT_VALIDATE
|
|
65
66
|
|
|
@@ -72,8 +73,8 @@ bool ShouldValidateFlagValue(FlagFastTypeId flag_type_id) {
|
|
|
72
73
|
// need to acquire these locks themselves.
|
|
73
74
|
class MutexRelock {
|
|
74
75
|
public:
|
|
75
|
-
explicit MutexRelock(absl::Mutex& mu) : mu_(mu) { mu_.
|
|
76
|
-
~MutexRelock() { mu_.
|
|
76
|
+
explicit MutexRelock(absl::Mutex& mu) : mu_(mu) { mu_.unlock(); }
|
|
77
|
+
~MutexRelock() { mu_.lock(); }
|
|
77
78
|
|
|
78
79
|
MutexRelock(const MutexRelock&) = delete;
|
|
79
80
|
MutexRelock& operator=(const MutexRelock&) = delete;
|
|
@@ -87,9 +88,9 @@ class MutexRelock {
|
|
|
87
88
|
// we move the memory to the freelist where it lives indefinitely, so it can
|
|
88
89
|
// still be safely accessed. This also prevents leak checkers from complaining
|
|
89
90
|
// about the leaked memory that can no longer be accessed through any pointer.
|
|
90
|
-
absl::Mutex
|
|
91
|
+
absl::Mutex& FreelistMutex() {
|
|
91
92
|
static absl::NoDestructor<absl::Mutex> mutex;
|
|
92
|
-
return mutex
|
|
93
|
+
return *mutex;
|
|
93
94
|
}
|
|
94
95
|
ABSL_CONST_INIT std::vector<void*>* s_freelist ABSL_GUARDED_BY(FreelistMutex())
|
|
95
96
|
ABSL_PT_GUARDED_BY(FreelistMutex()) = nullptr;
|
|
@@ -247,12 +248,12 @@ void FlagImpl::Init() {
|
|
|
247
248
|
seq_lock_.MarkInitialized();
|
|
248
249
|
}
|
|
249
250
|
|
|
250
|
-
absl::Mutex
|
|
251
|
+
absl::Mutex& FlagImpl::DataGuard() const {
|
|
251
252
|
absl::call_once(const_cast<FlagImpl*>(this)->init_control_, &FlagImpl::Init,
|
|
252
253
|
const_cast<FlagImpl*>(this));
|
|
253
254
|
|
|
254
255
|
// data_guard_ is initialized inside Init.
|
|
255
|
-
return reinterpret_cast<absl::Mutex*>(&data_guard_);
|
|
256
|
+
return *reinterpret_cast<absl::Mutex*>(&data_guard_);
|
|
256
257
|
}
|
|
257
258
|
|
|
258
259
|
void FlagImpl::AssertValidType(FlagFastTypeId rhs_type_id,
|
|
@@ -374,7 +375,7 @@ std::string FlagImpl::DefaultValue() const {
|
|
|
374
375
|
}
|
|
375
376
|
|
|
376
377
|
std::string FlagImpl::CurrentValue() const {
|
|
377
|
-
auto
|
|
378
|
+
auto& guard = DataGuard(); // Make sure flag initialized
|
|
378
379
|
switch (ValueStorageKind()) {
|
|
379
380
|
case FlagValueStorageKind::kValueAndInitBit:
|
|
380
381
|
case FlagValueStorageKind::kOneWordAtomic: {
|
|
@@ -428,8 +429,8 @@ void FlagImpl::InvokeCallback() const {
|
|
|
428
429
|
// and it also can be different by the time the callback invocation is
|
|
429
430
|
// completed. Requires that *primary_lock be held in exclusive mode; it may be
|
|
430
431
|
// released and reacquired by the implementation.
|
|
431
|
-
MutexRelock relock(
|
|
432
|
-
absl::MutexLock lock(
|
|
432
|
+
MutexRelock relock(DataGuard());
|
|
433
|
+
absl::MutexLock lock(callback_->guard);
|
|
433
434
|
cb();
|
|
434
435
|
}
|
|
435
436
|
|
|
@@ -534,7 +535,7 @@ std::unique_ptr<void, DynValueDeleter> FlagImpl::TryParse(
|
|
|
534
535
|
}
|
|
535
536
|
|
|
536
537
|
void FlagImpl::Read(void* dst) const {
|
|
537
|
-
auto
|
|
538
|
+
auto& guard = DataGuard(); // Make sure flag initialized
|
|
538
539
|
switch (ValueStorageKind()) {
|
|
539
540
|
case FlagValueStorageKind::kValueAndInitBit:
|
|
540
541
|
case FlagValueStorageKind::kOneWordAtomic: {
|
|
@@ -566,14 +567,14 @@ void FlagImpl::Read(void* dst) const {
|
|
|
566
567
|
int64_t FlagImpl::ReadOneWord() const {
|
|
567
568
|
assert(ValueStorageKind() == FlagValueStorageKind::kOneWordAtomic ||
|
|
568
569
|
ValueStorageKind() == FlagValueStorageKind::kValueAndInitBit);
|
|
569
|
-
auto
|
|
570
|
+
auto& guard = DataGuard(); // Make sure flag initialized
|
|
570
571
|
(void)guard;
|
|
571
572
|
return OneWordValue().load(std::memory_order_acquire);
|
|
572
573
|
}
|
|
573
574
|
|
|
574
575
|
bool FlagImpl::ReadOneBool() const {
|
|
575
576
|
assert(ValueStorageKind() == FlagValueStorageKind::kValueAndInitBit);
|
|
576
|
-
auto
|
|
577
|
+
auto& guard = DataGuard(); // Make sure flag initialized
|
|
577
578
|
(void)guard;
|
|
578
579
|
return absl::bit_cast<FlagValueAndInitBit<bool>>(
|
|
579
580
|
OneWordValue().load(std::memory_order_acquire))
|