@zigc/lib 0.17.0-dev.135 → 0.17.0-dev.224
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/c/stdlib.zig +32 -22
- package/compiler/aro/aro/Compilation.zig +0 -3
- package/compiler/translate-c/ast.zig +5 -2
- package/compiler_rt/arm.zig +3 -3
- package/compiler_rt/trunctfhf2.zig +3 -0
- package/compiler_rt.zig +1 -22
- package/docs/wasm/markdown/Parser.zig +5 -9
- package/include/__clang_spirv_builtins.h +12 -12
- package/include/__float_float.h +176 -0
- package/include/__float_header_macro.h +12 -0
- package/include/__float_infinity_nan.h +20 -0
- package/include/amo.h +131 -0
- package/include/amxavx512intrin.h +215 -1
- package/include/amxintrin.h +0 -2
- package/include/arm_acle.h +37 -27
- package/include/arm_neon.h +218 -82
- package/include/arm_sme.h +8 -8
- package/include/arm_sve.h +4162 -3782
- package/include/avx10_2_512bf16intrin.h +19 -12
- package/include/avx10_2_512convertintrin.h +1 -1
- package/include/avx10_2_512niintrin.h +31 -31
- package/include/avx10_2_512satcvtdsintrin.h +1 -1
- package/include/avx10_2bf16intrin.h +54 -45
- package/include/avx10_2convertintrin.h +2 -2
- package/include/avx10_2copyintrin.h +1 -1
- package/include/avx10_2niintrin.h +14 -14
- package/include/avx10_2satcvtdsintrin.h +2 -2
- package/include/avx2intrin.h +275 -377
- package/include/avx512bf16intrin.h +25 -16
- package/include/avx512bitalgintrin.h +19 -30
- package/include/avx512bwintrin.h +386 -505
- package/include/avx512cdintrin.h +42 -55
- package/include/avx512dqintrin.h +132 -161
- package/include/avx512fintrin.h +1015 -1424
- package/include/avx512fp16intrin.h +112 -110
- package/include/avx512ifmaintrin.h +32 -34
- package/include/avx512ifmavlintrin.h +73 -46
- package/include/avx512vbmi2intrin.h +43 -32
- package/include/avx512vbmiintrin.h +19 -27
- package/include/avx512vbmivlintrin.h +35 -49
- package/include/avx512vlbf16intrin.h +32 -22
- package/include/avx512vlbitalgintrin.h +37 -53
- package/include/avx512vlbwintrin.h +470 -573
- package/include/avx512vlcdintrin.h +74 -102
- package/include/avx512vldqintrin.h +110 -127
- package/include/avx512vlfp16intrin.h +130 -111
- package/include/avx512vlintrin.h +945 -1299
- package/include/avx512vlvbmi2intrin.h +78 -63
- package/include/avx512vlvnniintrin.h +21 -18
- package/include/avx512vlvp2intersectintrin.h +2 -2
- package/include/avx512vnniintrin.h +10 -10
- package/include/avx512vp2intersectintrin.h +1 -2
- package/include/avx512vpopcntdqintrin.h +8 -10
- package/include/avx512vpopcntdqvlintrin.h +17 -15
- package/include/avxifmaintrin.h +16 -0
- package/include/avxintrin.h +165 -241
- package/include/avxvnniint16intrin.h +118 -99
- package/include/avxvnniint8intrin.h +56 -32
- package/include/avxvnniintrin.h +16 -8
- package/include/cpuid.h +101 -4
- package/include/emmintrin.h +168 -168
- package/include/f16cintrin.h +23 -9
- package/include/float.h +16 -155
- package/include/fma4intrin.h +98 -96
- package/include/fmaintrin.h +96 -66
- package/include/gfniintrin.h +21 -16
- package/include/hexagon_types.h +23 -20
- package/include/hvx_hexagon_protos.h +649 -860
- package/include/immintrin.h +0 -12
- package/include/intrin.h +4 -0
- package/include/lasxintrin.h +113 -0
- package/include/llvm_libc_wrappers/assert.h +3 -5
- package/include/llvm_libc_wrappers/ctype.h +3 -115
- package/include/llvm_libc_wrappers/inttypes.h +3 -5
- package/include/llvm_libc_wrappers/stdio.h +10 -38
- package/include/llvm_libc_wrappers/stdlib.h +3 -24
- package/include/llvm_libc_wrappers/string.h +2 -70
- package/include/llvm_libc_wrappers/time.h +4 -10
- package/include/mmintrin.h +188 -257
- package/include/module.modulemap +23 -4
- package/include/movrs_avx10_2_512intrin.h +2 -2
- package/include/movrs_avx10_2intrin.h +4 -4
- package/include/pmmintrin.h +12 -24
- package/include/ptrauth.h +16 -2
- package/include/riscv_mips.h +34 -0
- package/include/riscv_nds.h +89 -0
- package/include/sifive_vector.h +58 -2
- package/include/sm4evexintrin.h +2 -2
- package/include/smmintrin.h +77 -59
- package/include/spirvintrin.h +194 -0
- package/include/stddefer.h +19 -0
- package/include/tmmintrin.h +116 -147
- package/include/vaesintrin.h +1 -2
- package/include/xmmintrin.h +44 -70
- package/include/xopintrin.h +20 -10
- package/libcxx/include/__algorithm/all_of.h +11 -5
- package/libcxx/include/__algorithm/comp.h +4 -0
- package/libcxx/include/__algorithm/copy.h +28 -147
- package/libcxx/include/__algorithm/copy_backward.h +9 -24
- package/libcxx/include/__algorithm/copy_n.h +50 -16
- package/libcxx/include/__algorithm/count.h +2 -2
- package/libcxx/include/__algorithm/equal.h +43 -55
- package/libcxx/include/__algorithm/fill.h +26 -8
- package/libcxx/include/__algorithm/fill_n.h +32 -46
- package/libcxx/include/__algorithm/find.h +96 -39
- package/libcxx/include/__algorithm/find_end.h +105 -0
- package/libcxx/include/__algorithm/for_each.h +18 -24
- package/libcxx/include/__algorithm/for_each_n.h +20 -47
- package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
- package/libcxx/include/__algorithm/for_each_segment.h +26 -0
- package/libcxx/include/__algorithm/generate.h +4 -2
- package/libcxx/include/__algorithm/generate_n.h +19 -6
- package/libcxx/include/__algorithm/is_permutation.h +4 -4
- package/libcxx/include/__algorithm/iterator_operations.h +3 -0
- package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
- package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
- package/libcxx/include/__algorithm/make_heap.h +16 -4
- package/libcxx/include/__algorithm/mismatch.h +2 -2
- package/libcxx/include/__algorithm/move.h +8 -19
- package/libcxx/include/__algorithm/move_backward.h +9 -24
- package/libcxx/include/__algorithm/none_of.h +4 -4
- package/libcxx/include/__algorithm/partial_sort.h +1 -1
- package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
- package/libcxx/include/__algorithm/pstl.h +9 -9
- package/libcxx/include/__algorithm/radix_sort.h +27 -25
- package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
- package/libcxx/include/__algorithm/ranges_equal.h +17 -26
- package/libcxx/include/__algorithm/ranges_fill.h +7 -6
- package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
- package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
- package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
- package/libcxx/include/__algorithm/rotate.h +27 -44
- package/libcxx/include/__algorithm/search_n.h +49 -37
- package/libcxx/include/__algorithm/sift_down.h +19 -18
- package/libcxx/include/__algorithm/simd_utils.h +33 -4
- package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
- package/libcxx/include/__algorithm/stable_sort.h +1 -1
- package/libcxx/include/__assertion_handler +31 -4
- package/libcxx/include/__atomic/atomic.h +36 -60
- package/libcxx/include/__atomic/atomic_flag.h +19 -37
- package/libcxx/include/__atomic/atomic_ref.h +29 -12
- package/libcxx/include/__atomic/atomic_sync.h +127 -55
- package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
- package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
- package/libcxx/include/__atomic/contention_t.h +27 -3
- package/libcxx/include/__atomic/floating_point_helper.h +55 -0
- package/libcxx/include/__bit/countl.h +1 -2
- package/libcxx/include/__bit/countr.h +1 -2
- package/libcxx/include/__bit/has_single_bit.h +1 -1
- package/libcxx/include/__bit/popcount.h +0 -1
- package/libcxx/include/__bit/rotate.h +15 -26
- package/libcxx/include/__bit_reference +207 -18
- package/libcxx/include/__charconv/from_chars_integral.h +1 -1
- package/libcxx/include/__charconv/from_chars_result.h +1 -1
- package/libcxx/include/__charconv/to_chars_integral.h +1 -0
- package/libcxx/include/__charconv/to_chars_result.h +1 -1
- package/libcxx/include/__charconv/traits.h +3 -24
- package/libcxx/include/__chrono/day.h +11 -0
- package/libcxx/include/__chrono/duration.h +58 -33
- package/libcxx/include/__chrono/file_clock.h +4 -2
- package/libcxx/include/__chrono/is_clock.h +72 -0
- package/libcxx/include/__chrono/leap_second.h +13 -0
- package/libcxx/include/__chrono/month.h +13 -0
- package/libcxx/include/__chrono/month_weekday.h +22 -0
- package/libcxx/include/__chrono/monthday.h +20 -0
- package/libcxx/include/__chrono/steady_clock.h +1 -1
- package/libcxx/include/__chrono/system_clock.h +3 -3
- package/libcxx/include/__chrono/time_point.h +37 -13
- package/libcxx/include/__chrono/weekday.h +25 -0
- package/libcxx/include/__chrono/year.h +11 -0
- package/libcxx/include/__chrono/year_month.h +13 -0
- package/libcxx/include/__chrono/year_month_day.h +23 -0
- package/libcxx/include/__chrono/year_month_weekday.h +26 -0
- package/libcxx/include/__chrono/zoned_time.h +16 -0
- package/libcxx/include/__compare/is_eq.h +6 -6
- package/libcxx/include/__compare/strong_order.h +12 -30
- package/libcxx/include/__compare/three_way_comparable.h +2 -2
- package/libcxx/include/__concepts/comparison_common_type.h +40 -0
- package/libcxx/include/__concepts/equality_comparable.h +2 -1
- package/libcxx/include/__condition_variable/condition_variable.h +1 -1
- package/libcxx/include/__config +63 -280
- package/libcxx/include/__configuration/abi.h +14 -24
- package/libcxx/include/__configuration/availability.h +65 -118
- package/libcxx/include/__configuration/compiler.h +6 -6
- package/libcxx/include/__configuration/experimental.h +38 -0
- package/libcxx/include/__configuration/hardening.h +215 -0
- package/libcxx/include/__configuration/language.h +3 -0
- package/libcxx/include/__configuration/platform.h +9 -16
- package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
- package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
- package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
- package/libcxx/include/__exception/exception.h +6 -4
- package/libcxx/include/__exception/exception_ptr.h +27 -5
- package/libcxx/include/__exception/nested_exception.h +2 -2
- package/libcxx/include/__exception/operations.h +5 -5
- package/libcxx/include/__expected/bad_expected_access.h +8 -6
- package/libcxx/include/__expected/expected.h +62 -64
- package/libcxx/include/__expected/unexpected.h +4 -4
- package/libcxx/include/__filesystem/copy_options.h +4 -4
- package/libcxx/include/__filesystem/directory_entry.h +37 -33
- package/libcxx/include/__filesystem/directory_iterator.h +9 -11
- package/libcxx/include/__filesystem/directory_options.h +7 -4
- package/libcxx/include/__filesystem/file_status.h +3 -3
- package/libcxx/include/__filesystem/filesystem_error.h +9 -10
- package/libcxx/include/__filesystem/operations.h +97 -66
- package/libcxx/include/__filesystem/path.h +68 -64
- package/libcxx/include/__filesystem/path_iterator.h +1 -3
- package/libcxx/include/__filesystem/perm_options.h +4 -4
- package/libcxx/include/__filesystem/perms.h +4 -4
- package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
- package/libcxx/include/__filesystem/space_info.h +1 -1
- package/libcxx/include/__filesystem/u8path.h +12 -14
- package/libcxx/include/__flat_map/flat_map.h +88 -71
- package/libcxx/include/__flat_map/flat_multimap.h +251 -172
- package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
- package/libcxx/include/__flat_map/utils.h +1 -0
- package/libcxx/include/__flat_set/flat_multiset.h +211 -143
- package/libcxx/include/__flat_set/flat_set.h +86 -68
- package/libcxx/include/__format/concepts.h +0 -14
- package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
- package/libcxx/include/__format/fmt_pair_like.h +42 -0
- package/libcxx/include/__format/format_arg.h +7 -10
- package/libcxx/include/__format/format_args.h +1 -1
- package/libcxx/include/__format/format_context.h +5 -5
- package/libcxx/include/__format/format_parse_context.h +2 -2
- package/libcxx/include/__format/formatter_output.h +30 -34
- package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
- package/libcxx/include/__format/range_default_formatter.h +2 -41
- package/libcxx/include/__format/range_format.h +71 -0
- package/libcxx/include/__format/range_formatter.h +1 -0
- package/libcxx/include/__format/width_estimation_table.h +4 -2
- package/libcxx/include/__functional/bind.h +10 -15
- package/libcxx/include/__functional/bind_back.h +1 -1
- package/libcxx/include/__functional/bind_front.h +1 -1
- package/libcxx/include/__functional/function.h +57 -75
- package/libcxx/include/__functional/hash.h +1 -10
- package/libcxx/include/__functional/identity.h +1 -1
- package/libcxx/include/__functional/is_transparent.h +8 -0
- package/libcxx/include/__functional/mem_fn.h +2 -1
- package/libcxx/include/__functional/operations.h +18 -0
- package/libcxx/include/__functional/ranges_operations.h +7 -0
- package/libcxx/include/__functional/reference_wrapper.h +7 -5
- package/libcxx/include/__functional/weak_result_type.h +14 -28
- package/libcxx/include/__fwd/ios.h +1 -1
- package/libcxx/include/__fwd/tuple.h +14 -0
- package/libcxx/include/__hash_table +371 -357
- package/libcxx/include/__ios/fpos.h +4 -4
- package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
- package/libcxx/include/__iterator/bounded_iter.h +7 -8
- package/libcxx/include/__iterator/concepts.h +6 -9
- package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
- package/libcxx/include/__iterator/distance.h +40 -18
- package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
- package/libcxx/include/__iterator/insert_iterator.h +1 -7
- package/libcxx/include/__iterator/istream_iterator.h +6 -7
- package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
- package/libcxx/include/__iterator/iter_move.h +1 -1
- package/libcxx/include/__iterator/iterator.h +13 -0
- package/libcxx/include/__iterator/iterator_traits.h +13 -14
- package/libcxx/include/__iterator/ostream_iterator.h +1 -7
- package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
- package/libcxx/include/__iterator/reverse_iterator.h +8 -13
- package/libcxx/include/__iterator/segmented_iterator.h +3 -8
- package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
- package/libcxx/include/__iterator/wrap_iter.h +8 -6
- package/libcxx/include/__locale +3 -10
- package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
- package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
- package/libcxx/include/__locale_dir/messages.h +1 -1
- package/libcxx/include/__locale_dir/money.h +2 -2
- package/libcxx/include/__locale_dir/num.h +190 -243
- package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
- package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
- package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
- package/libcxx/include/__locale_dir/support/linux.h +0 -37
- package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
- package/libcxx/include/__locale_dir/support/newlib.h +243 -0
- package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
- package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
- package/libcxx/include/__locale_dir/support/windows.h +0 -29
- package/libcxx/include/__locale_dir/time.h +3 -7
- package/libcxx/include/__math/hypot.h +1 -1
- package/libcxx/include/__math/logarithms.h +1 -1
- package/libcxx/include/__math/traits.h +80 -11
- package/libcxx/include/__mdspan/extents.h +7 -4
- package/libcxx/include/__mdspan/layout_stride.h +4 -5
- package/libcxx/include/__mdspan/mdspan.h +29 -23
- package/libcxx/include/__memory/addressof.h +7 -5
- package/libcxx/include/__memory/align.h +18 -1
- package/libcxx/include/__memory/allocate_at_least.h +15 -10
- package/libcxx/include/__memory/allocator.h +14 -26
- package/libcxx/include/__memory/allocator_traits.h +6 -4
- package/libcxx/include/__memory/compressed_pair.h +15 -9
- package/libcxx/include/__memory/construct_at.h +12 -23
- package/libcxx/include/__memory/inout_ptr.h +1 -1
- package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
- package/libcxx/include/__memory/out_ptr.h +1 -1
- package/libcxx/include/__memory/pointer_traits.h +1 -1
- package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
- package/libcxx/include/__memory/shared_count.h +9 -30
- package/libcxx/include/__memory/shared_ptr.h +100 -145
- package/libcxx/include/__memory/temp_value.h +1 -2
- package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
- package/libcxx/include/__memory/unique_ptr.h +14 -16
- package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
- package/libcxx/include/__memory_resource/memory_resource.h +4 -2
- package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
- package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
- package/libcxx/include/__memory_resource/pool_options.h +1 -1
- package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
- package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
- package/libcxx/include/__mutex/mutex.h +2 -2
- package/libcxx/include/__mutex/once_flag.h +14 -11
- package/libcxx/include/__mutex/tag_types.h +3 -3
- package/libcxx/include/__mutex/unique_lock.h +8 -7
- package/libcxx/include/__new/align_val_t.h +6 -0
- package/libcxx/include/__new/allocate.h +1 -2
- package/libcxx/include/__new/exceptions.h +8 -2
- package/libcxx/include/__new/global_new_delete.h +4 -11
- package/libcxx/include/__new/interference_size.h +0 -4
- package/libcxx/include/__new/launder.h +3 -5
- package/libcxx/include/__new/nothrow_t.h +1 -1
- package/libcxx/include/__numeric/gcd_lcm.h +24 -34
- package/libcxx/include/__numeric/midpoint.h +9 -14
- package/libcxx/include/__numeric/pstl.h +2 -2
- package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
- package/libcxx/include/__ostream/basic_ostream.h +8 -8
- package/libcxx/include/__pstl/backends/default.h +14 -14
- package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
- package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
- package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
- package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
- package/libcxx/include/__random/binomial_distribution.h +10 -4
- package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
- package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
- package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
- package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
- package/libcxx/include/__ranges/adjacent_view.h +419 -0
- package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
- package/libcxx/include/__ranges/chunk_by_view.h +6 -6
- package/libcxx/include/__ranges/common_view.h +7 -7
- package/libcxx/include/__ranges/drop_view.h +8 -8
- package/libcxx/include/__ranges/drop_while_view.h +5 -5
- package/libcxx/include/__ranges/elements_of.h +49 -0
- package/libcxx/include/__ranges/empty_view.h +5 -5
- package/libcxx/include/__ranges/filter_view.h +10 -10
- package/libcxx/include/__ranges/iota_view.h +41 -22
- package/libcxx/include/__ranges/owning_view.h +15 -15
- package/libcxx/include/__ranges/ref_view.h +6 -6
- package/libcxx/include/__ranges/repeat_view.h +17 -10
- package/libcxx/include/__ranges/single_view.h +8 -8
- package/libcxx/include/__ranges/take_view.h +9 -9
- package/libcxx/include/__ranges/transform_view.h +1 -2
- package/libcxx/include/__ranges/view_interface.h +10 -10
- package/libcxx/include/__ranges/zip_transform_view.h +357 -0
- package/libcxx/include/__ranges/zip_view.h +20 -20
- package/libcxx/include/__split_buffer +612 -240
- package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
- package/libcxx/include/__stop_token/stop_callback.h +2 -2
- package/libcxx/include/__stop_token/stop_source.h +1 -1
- package/libcxx/include/__stop_token/stop_state.h +4 -4
- package/libcxx/include/__stop_token/stop_token.h +1 -1
- package/libcxx/include/__string/char_traits.h +51 -31
- package/libcxx/include/__string/constexpr_c_functions.h +5 -5
- package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
- package/libcxx/include/__system_error/error_category.h +8 -8
- package/libcxx/include/__system_error/error_code.h +5 -5
- package/libcxx/include/__system_error/error_condition.h +4 -4
- package/libcxx/include/__system_error/system_error.h +1 -1
- package/libcxx/include/__thread/id.h +1 -1
- package/libcxx/include/__thread/jthread.h +1 -1
- package/libcxx/include/__thread/poll_with_backoff.h +27 -8
- package/libcxx/include/__thread/support/c11.h +8 -8
- package/libcxx/include/__thread/support/pthread.h +8 -8
- package/libcxx/include/__thread/support/windows.h +8 -8
- package/libcxx/include/__thread/thread.h +13 -8
- package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
- package/libcxx/include/__tree +849 -701
- package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
- package/libcxx/include/__tuple/tuple_element.h +0 -12
- package/libcxx/include/__tuple/tuple_size.h +0 -4
- package/libcxx/include/__tuple/tuple_transform.h +45 -0
- package/libcxx/include/__type_traits/aligned_storage.h +13 -40
- package/libcxx/include/__type_traits/desugars_to.h +4 -0
- package/libcxx/include/__type_traits/invoke.h +8 -0
- package/libcxx/include/__type_traits/is_allocator.h +6 -7
- package/libcxx/include/__type_traits/is_array.h +26 -0
- package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
- package/libcxx/include/__type_traits/is_final.h +1 -1
- package/libcxx/include/__type_traits/is_floating_point.h +7 -6
- package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
- package/libcxx/include/__type_traits/is_specialization.h +2 -6
- package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
- package/libcxx/include/__type_traits/make_transparent.h +52 -0
- package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
- package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
- package/libcxx/include/__utility/cmp.h +19 -7
- package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
- package/libcxx/include/__utility/in_place.h +1 -1
- package/libcxx/include/__utility/integer_sequence.h +56 -41
- package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
- package/libcxx/include/__utility/pair.h +22 -25
- package/libcxx/include/__utility/scope_guard.h +2 -0
- package/libcxx/include/__utility/try_key_extraction.h +114 -0
- package/libcxx/include/__vector/vector.h +187 -160
- package/libcxx/include/__vector/vector_bool.h +76 -83
- package/libcxx/include/any +118 -155
- package/libcxx/include/array +88 -56
- package/libcxx/include/atomic +2 -0
- package/libcxx/include/barrier +20 -24
- package/libcxx/include/bitset +49 -30
- package/libcxx/include/ccomplex +3 -11
- package/libcxx/include/chrono +47 -0
- package/libcxx/include/ciso646 +3 -6
- package/libcxx/include/complex +77 -65
- package/libcxx/include/complex.h +10 -10
- package/libcxx/include/condition_variable +3 -3
- package/libcxx/include/cstdalign +3 -10
- package/libcxx/include/cstdbool +3 -10
- package/libcxx/include/ctgmath +2 -11
- package/libcxx/include/ctype.h +24 -24
- package/libcxx/include/cwchar +2 -2
- package/libcxx/include/deque +109 -225
- package/libcxx/include/errno.h +269 -269
- package/libcxx/include/exception +4 -1
- package/libcxx/include/ext/hash_map +7 -48
- package/libcxx/include/ext/hash_set +2 -8
- package/libcxx/include/fenv.h +43 -43
- package/libcxx/include/flat_map +663 -11
- package/libcxx/include/flat_set +543 -8
- package/libcxx/include/float.h +16 -16
- package/libcxx/include/forward_list +33 -53
- package/libcxx/include/fstream +57 -42
- package/libcxx/include/future +41 -51
- package/libcxx/include/initializer_list +9 -3
- package/libcxx/include/inttypes.h +16 -16
- package/libcxx/include/ios +28 -28
- package/libcxx/include/istream +19 -13
- package/libcxx/include/iterator +10 -0
- package/libcxx/include/latch +7 -5
- package/libcxx/include/limits +4 -4
- package/libcxx/include/list +61 -79
- package/libcxx/include/map +386 -274
- package/libcxx/include/math.h +19 -0
- package/libcxx/include/mdspan +1 -5
- package/libcxx/include/mutex +29 -19
- package/libcxx/include/optional +644 -149
- package/libcxx/include/print +9 -5
- package/libcxx/include/queue +39 -37
- package/libcxx/include/ranges +48 -0
- package/libcxx/include/regex +33 -31
- package/libcxx/include/scoped_allocator +16 -11
- package/libcxx/include/semaphore +15 -18
- package/libcxx/include/set +220 -192
- package/libcxx/include/shared_mutex +3 -8
- package/libcxx/include/span +53 -37
- package/libcxx/include/sstream +34 -28
- package/libcxx/include/stack +13 -15
- package/libcxx/include/stddef.h +10 -10
- package/libcxx/include/stdexcept +2 -2
- package/libcxx/include/stdio.h +20 -21
- package/libcxx/include/streambuf +59 -19
- package/libcxx/include/string +574 -573
- package/libcxx/include/string_view +113 -89
- package/libcxx/include/strstream +10 -10
- package/libcxx/include/syncstream +4 -4
- package/libcxx/include/tgmath.h +12 -12
- package/libcxx/include/tuple +242 -212
- package/libcxx/include/type_traits +8 -2
- package/libcxx/include/typeindex +5 -3
- package/libcxx/include/typeinfo +92 -89
- package/libcxx/include/unordered_map +179 -304
- package/libcxx/include/unordered_set +168 -195
- package/libcxx/include/utility +12 -0
- package/libcxx/include/valarray +106 -161
- package/libcxx/include/variant +25 -33
- package/libcxx/include/version +41 -24
- package/libcxx/include/wctype.h +29 -29
- package/libcxx/libc/hdr/errno_macros.h +3 -1
- package/libcxx/libc/hdr/stdint_proxy.h +18 -0
- package/libcxx/libc/hdr/types/wchar_t.h +23 -0
- package/libcxx/libc/hdr/wchar_overlay.h +69 -0
- package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
- package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
- package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
- package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
- package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
- package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
- package/libcxx/libc/shared/libc_common.h +5 -0
- package/libcxx/libc/src/__support/CPP/bit.h +50 -12
- package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
- package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
- package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
- package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
- package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
- package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
- package/libcxx/libc/src/__support/big_int.h +14 -14
- package/libcxx/libc/src/__support/common.h +3 -2
- package/libcxx/libc/src/__support/ctype_utils.h +19 -12
- package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
- package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
- package/libcxx/libc/src/__support/libc_assert.h +2 -0
- package/libcxx/libc/src/__support/macros/attributes.h +44 -1
- package/libcxx/libc/src/__support/macros/config.h +23 -0
- package/libcxx/libc/src/__support/macros/null_check.h +1 -2
- package/libcxx/libc/src/__support/macros/optimization.h +3 -0
- package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
- package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
- package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
- package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
- package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
- package/libcxx/libc/src/__support/math_extras.h +20 -4
- package/libcxx/libc/src/__support/str_to_float.h +98 -125
- package/libcxx/libc/src/__support/str_to_integer.h +39 -27
- package/libcxx/libc/src/__support/wctype_utils.h +588 -0
- package/libcxx/src/any.cpp +4 -0
- package/libcxx/src/atomic.cpp +365 -80
- package/libcxx/src/barrier.cpp +4 -3
- package/libcxx/src/charconv.cpp +6 -3
- package/libcxx/src/condition_variable_destructor.cpp +1 -1
- package/libcxx/src/error_category.cpp +3 -1
- package/libcxx/src/exception.cpp +2 -10
- package/libcxx/src/experimental/time_zone.cpp +1 -1
- package/libcxx/src/experimental/tzdb.cpp +4 -1
- package/libcxx/src/filesystem/error.h +4 -22
- package/libcxx/src/filesystem/format_string.h +9 -18
- package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
- package/libcxx/src/filesystem/operations.cpp +2 -9
- package/libcxx/src/filesystem/path.cpp +3 -1
- package/libcxx/src/include/aligned_alloc.h +65 -0
- package/libcxx/src/include/config_elast.h +1 -1
- package/libcxx/src/include/from_chars_floating_point.h +11 -7
- package/libcxx/src/include/overridable_function.h +8 -10
- package/libcxx/src/iostream.cpp +56 -37
- package/libcxx/src/locale.cpp +213 -196
- package/libcxx/src/memory.cpp +12 -14
- package/libcxx/src/mutex_destructor.cpp +1 -1
- package/libcxx/src/new.cpp +5 -5
- package/libcxx/src/optional.cpp +4 -0
- package/libcxx/src/print.cpp +9 -1
- package/libcxx/src/random.cpp +0 -26
- package/libcxx/src/string.cpp +10 -25
- package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
- package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
- package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
- package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
- package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
- package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
- package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
- package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
- package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
- package/libcxx/src/support/win32/locale_win32.cpp +1 -1
- package/libcxx/src/system_error.cpp +2 -0
- package/libcxx/src/thread.cpp +1 -3
- package/libcxx/src/valarray.cpp +1 -2
- package/libcxx/src/vector.cpp +2 -2
- package/libcxxabi/include/__cxxabi_config.h +42 -23
- package/libcxxabi/src/cxa_exception.cpp +4 -2
- package/libcxxabi/src/cxa_exception.h +16 -14
- package/libcxxabi/src/cxa_personality.cpp +126 -9
- package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
- package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
- package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
- package/libcxxabi/src/demangle/Utility.h +21 -7
- package/libcxxabi/src/fallback_malloc.cpp +1 -1
- package/libcxxabi/src/private_typeinfo.cpp +6 -0
- package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
- package/libtsan/LICENSE.TXT +311 -0
- package/libtsan/builtins/assembly.h +41 -8
- package/libtsan/interception/interception_win.cpp +4 -0
- package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
- package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
- package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
- package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
- package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
- package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
- package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
- package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
- package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
- package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
- package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
- package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
- package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
- package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
- package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
- package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
- package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
- package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
- package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
- package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
- package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
- package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
- package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
- package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
- package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
- package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
- package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
- package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
- package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
- package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
- package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
- package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
- package/libtsan/tsan_debugging.cpp +2 -2
- package/libtsan/tsan_flags.cpp +37 -0
- package/libtsan/tsan_flags.h +8 -0
- package/libtsan/tsan_flags.inc +12 -0
- package/libtsan/tsan_interceptors.h +9 -1
- package/libtsan/tsan_interceptors_mac.cpp +19 -0
- package/libtsan/tsan_interceptors_posix.cpp +78 -32
- package/libtsan/tsan_interface.h +3 -3
- package/libtsan/tsan_interface_ann.cpp +23 -9
- package/libtsan/tsan_mman.cpp +18 -4
- package/libtsan/tsan_platform.h +44 -7
- package/libtsan/tsan_platform_linux.cpp +42 -14
- package/libtsan/tsan_platform_mac.cpp +16 -3
- package/libtsan/tsan_report.h +14 -1
- package/libtsan/tsan_rtl.cpp +14 -0
- package/libtsan/tsan_rtl.h +7 -2
- package/libtsan/tsan_rtl_aarch64.S +3 -5
- package/libtsan/tsan_rtl_access.cpp +8 -3
- package/libtsan/tsan_rtl_amd64.S +2 -0
- package/libtsan/tsan_rtl_mutex.cpp +94 -49
- package/libtsan/tsan_rtl_report.cpp +132 -65
- package/libtsan/tsan_rtl_thread.cpp +31 -9
- package/libtsan/tsan_symbolize.cpp +1 -1
- package/libtsan/tsan_symbolize.h +1 -1
- package/libtsan/tsan_trace.h +1 -1
- package/libunwind/include/__libunwind_config.h +11 -2
- package/libunwind/include/libunwind.h +117 -11
- package/libunwind/include/unwind_arm_ehabi.h +4 -1
- package/libunwind/src/AddressSpace.hpp +42 -20
- package/libunwind/src/CompactUnwinder.hpp +16 -5
- package/libunwind/src/DwarfInstructions.hpp +24 -13
- package/libunwind/src/DwarfParser.hpp +62 -23
- package/libunwind/src/EHHeaderParser.hpp +7 -4
- package/libunwind/src/Registers.hpp +226 -22
- package/libunwind/src/Unwind-seh.cpp +6 -7
- package/libunwind/src/Unwind-wasm.c +7 -7
- package/libunwind/src/UnwindCursor.hpp +167 -49
- package/libunwind/src/UnwindLevel1.c +46 -17
- package/libunwind/src/UnwindRegistersRestore.S +46 -5
- package/libunwind/src/UnwindRegistersSave.S +86 -2
- package/libunwind/src/assembly.h +5 -1
- package/libunwind/src/config.h +9 -0
- package/libunwind/src/gcc_personality_v0.c +79 -6
- package/libunwind/src/libunwind.cpp +104 -4
- package/libunwind/src/libunwind_ext.h +7 -1
- package/libunwind/src/shadow_stack_unwind.h +2 -2
- package/lldb/pretty_printers.py +948 -0
- package/package.json +1 -1
- package/std/Build/Step/Compile.zig +18 -19
- package/std/Build/Step/Run.zig +13 -6
- package/std/Build/Step.zig +0 -3
- package/std/Io/Threaded.zig +3 -0
- package/std/Target/aarch64.zig +620 -77
- package/std/Target/amdgcn.zig +421 -21
- package/std/Target/arm.zig +40 -6
- package/std/Target/bpf.zig +6 -0
- package/std/Target/hexagon.zig +41 -6
- package/std/Target/loongarch.zig +18 -0
- package/std/Target/mips.zig +6 -0
- package/std/Target/nvptx.zig +58 -35
- package/std/Target/powerpc.zig +27 -19
- package/std/Target/riscv.zig +415 -177
- package/std/Target/sparc.zig +17 -0
- package/std/Target/wasm.zig +7 -0
- package/std/Target/x86.zig +200 -31
- package/std/Target/xtensa.zig +65 -0
- package/std/Target.zig +16 -8
- package/std/c.zig +7 -0
- package/std/crypto/ml_kem.zig +0 -15
- package/std/debug/Dwarf.zig +14 -11
- package/std/debug/Pdb.zig +24 -16
- package/std/hash/xxhash.zig +0 -6
- package/std/math/log10.zig +0 -2
- package/std/math/modf.zig +1 -2
- package/std/mem.zig +1 -2
- package/std/os/linux/x86.zig +2 -2
- package/std/os/windows.zig +130 -1
- package/std/simd.zig +4 -21
- package/std/start.zig +4 -3
- package/std/zig/Ast.zig +5 -7
- package/std/zig/AstGen.zig +20 -14
- package/std/zig/ErrorBundle.zig +6 -2
- package/std/zig/ZonGen.zig +13 -21
- package/std/zig/llvm/Builder.zig +2 -2
- package/std/zig/system/arm.zig +56 -2
- package/std/zig/system/windows.zig +34 -1
- package/std/zig/system/x86.zig +60 -16
- package/std/zig/system.zig +0 -10
- package/std/zig/target.zig +1 -2
- package/std/zon/parse.zig +1 -1
- package/include/amxbf16transposeintrin.h +0 -94
- package/include/amxcomplextransposeintrin.h +0 -303
- package/include/amxfp16transposeintrin.h +0 -94
- package/include/amxmovrstransposeintrin.h +0 -200
- package/include/amxtf32transposeintrin.h +0 -105
- package/include/amxtransposeintrin.h +0 -248
- package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
- package/std/Build/Step/CheckObject.zig +0 -2764
package/libtsan/tsan_flags.cpp
CHANGED
|
@@ -20,6 +20,43 @@
|
|
|
20
20
|
#include "tsan_rtl.h"
|
|
21
21
|
#include "ubsan/ubsan_flags.h"
|
|
22
22
|
|
|
23
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
24
|
+
namespace __sanitizer {
|
|
25
|
+
|
|
26
|
+
template <>
|
|
27
|
+
inline bool FlagHandler<LockDuringWriteSetting>::Parse(const char *value) {
|
|
28
|
+
if (internal_strcmp(value, "on") == 0) {
|
|
29
|
+
*t_ = kLockDuringAllWrites;
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (internal_strcmp(value, "disable_for_current_process") == 0) {
|
|
33
|
+
*t_ = kNoLockDuringWritesCurrentProcess;
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (internal_strcmp(value, "disable_for_all_processes") == 0) {
|
|
37
|
+
*t_ = kNoLockDuringWritesAllProcesses;
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
Printf("ERROR: Invalid value for signal handler option: '%s'\n", value);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
template <>
|
|
45
|
+
inline bool FlagHandler<LockDuringWriteSetting>::Format(char *buffer,
|
|
46
|
+
uptr size) {
|
|
47
|
+
switch (*t_) {
|
|
48
|
+
case kLockDuringAllWrites:
|
|
49
|
+
return FormatString(buffer, size, "on");
|
|
50
|
+
case kNoLockDuringWritesCurrentProcess:
|
|
51
|
+
return FormatString(buffer, size, "disable_for_current_process");
|
|
52
|
+
case kNoLockDuringWritesAllProcesses:
|
|
53
|
+
return FormatString(buffer, size, "disable_for_all_processes");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
} // namespace __sanitizer
|
|
58
|
+
#endif // SANITIZER_APPLE && !SANITIZER_GO
|
|
59
|
+
|
|
23
60
|
namespace __tsan {
|
|
24
61
|
|
|
25
62
|
// Can be overriden in frontend.
|
package/libtsan/tsan_flags.h
CHANGED
|
@@ -16,6 +16,14 @@
|
|
|
16
16
|
#include "sanitizer_common/sanitizer_flags.h"
|
|
17
17
|
#include "sanitizer_common/sanitizer_deadlock_detector_interface.h"
|
|
18
18
|
|
|
19
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
20
|
+
enum LockDuringWriteSetting {
|
|
21
|
+
kLockDuringAllWrites,
|
|
22
|
+
kNoLockDuringWritesCurrentProcess,
|
|
23
|
+
kNoLockDuringWritesAllProcesses,
|
|
24
|
+
};
|
|
25
|
+
#endif
|
|
26
|
+
|
|
19
27
|
namespace __tsan {
|
|
20
28
|
|
|
21
29
|
struct Flags : DDFlags {
|
package/libtsan/tsan_flags.inc
CHANGED
|
@@ -80,3 +80,15 @@ TSAN_FLAG(bool, shared_ptr_interceptor, true,
|
|
|
80
80
|
TSAN_FLAG(bool, print_full_thread_history, false,
|
|
81
81
|
"If set, prints thread creation stacks for the threads involved in "
|
|
82
82
|
"the report and their ancestors up to the main thread.")
|
|
83
|
+
|
|
84
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
85
|
+
TSAN_FLAG(LockDuringWriteSetting, lock_during_write, kLockDuringAllWrites,
|
|
86
|
+
"Determines whether to obtain a lock while writing logs or error "
|
|
87
|
+
"reports. "
|
|
88
|
+
"\"on\" - [default] lock during all writes. "
|
|
89
|
+
"\"disable_for_current_process\" - don't lock during all writes in "
|
|
90
|
+
"the current process, but do lock for all writes in child "
|
|
91
|
+
"processes."
|
|
92
|
+
"\"disable_for_all_processes\" - don't lock during all writes in "
|
|
93
|
+
"the current process and it's children processes.")
|
|
94
|
+
#endif
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
#ifndef TSAN_INTERCEPTORS_H
|
|
2
2
|
#define TSAN_INTERCEPTORS_H
|
|
3
3
|
|
|
4
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
5
|
+
# include "sanitizer_common/sanitizer_mac.h"
|
|
6
|
+
#endif
|
|
4
7
|
#include "sanitizer_common/sanitizer_stacktrace.h"
|
|
5
8
|
#include "tsan_rtl.h"
|
|
6
9
|
|
|
@@ -43,7 +46,12 @@ inline bool in_symbolizer() {
|
|
|
43
46
|
#endif
|
|
44
47
|
|
|
45
48
|
inline bool MustIgnoreInterceptor(ThreadState *thr) {
|
|
46
|
-
return !thr->is_inited || thr->ignore_interceptors || thr->in_ignored_lib
|
|
49
|
+
return !thr->is_inited || thr->ignore_interceptors || thr->in_ignored_lib
|
|
50
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
51
|
+
|| (flags()->lock_during_write != kLockDuringAllWrites &&
|
|
52
|
+
thr->in_internal_write_call)
|
|
53
|
+
#endif
|
|
54
|
+
;
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
} // namespace __tsan
|
|
@@ -281,6 +281,25 @@ TSAN_INTERCEPTOR(void, os_unfair_lock_lock, os_unfair_lock_t lock) {
|
|
|
281
281
|
Acquire(thr, pc, (uptr)lock);
|
|
282
282
|
}
|
|
283
283
|
|
|
284
|
+
// os_unfair_lock_lock_with_flags was introduced in macOS 15
|
|
285
|
+
# if defined(__MAC_15_0) || defined(__IPHONE_18_0) || defined(__TVOS_18_0) || \
|
|
286
|
+
defined(__VISIONOS_2_0) || defined(__WATCHOS_11_0)
|
|
287
|
+
# pragma clang diagnostic push
|
|
288
|
+
# pragma clang diagnostic ignored "-Wunguarded-availability-new"
|
|
289
|
+
// We're just intercepting this - if it doesn't exist on the platform, then the
|
|
290
|
+
// process shouldn't have called it in the first place.
|
|
291
|
+
TSAN_INTERCEPTOR(void, os_unfair_lock_lock_with_flags, os_unfair_lock_t lock,
|
|
292
|
+
os_unfair_lock_flags_t flags) {
|
|
293
|
+
if (!cur_thread()->is_inited || cur_thread()->is_dead) {
|
|
294
|
+
return REAL(os_unfair_lock_lock_with_flags)(lock, flags);
|
|
295
|
+
}
|
|
296
|
+
SCOPED_TSAN_INTERCEPTOR(os_unfair_lock_lock_with_flags, lock, flags);
|
|
297
|
+
REAL(os_unfair_lock_lock_with_flags)(lock, flags);
|
|
298
|
+
Acquire(thr, pc, (uptr)lock);
|
|
299
|
+
}
|
|
300
|
+
# pragma clang diagnostic pop
|
|
301
|
+
# endif
|
|
302
|
+
|
|
284
303
|
TSAN_INTERCEPTOR(void, os_unfair_lock_lock_with_options, os_unfair_lock_t lock,
|
|
285
304
|
u32 options) {
|
|
286
305
|
if (!cur_thread()->is_inited || cur_thread()->is_dead) {
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#include "sanitizer_common/sanitizer_internal_defs.h"
|
|
23
23
|
#include "sanitizer_common/sanitizer_libc.h"
|
|
24
24
|
#include "sanitizer_common/sanitizer_linux.h"
|
|
25
|
+
#include "sanitizer_common/sanitizer_placement_new.h"
|
|
25
26
|
#include "sanitizer_common/sanitizer_platform_interceptors.h"
|
|
26
27
|
#include "sanitizer_common/sanitizer_platform_limits_netbsd.h"
|
|
27
28
|
#include "sanitizer_common/sanitizer_platform_limits_posix.h"
|
|
@@ -30,6 +31,9 @@
|
|
|
30
31
|
#include "sanitizer_common/sanitizer_tls_get_addr.h"
|
|
31
32
|
#include "sanitizer_common/sanitizer_vector.h"
|
|
32
33
|
#include "tsan_fd.h"
|
|
34
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
35
|
+
# include "tsan_flags.h"
|
|
36
|
+
#endif
|
|
33
37
|
#include "tsan_interceptors.h"
|
|
34
38
|
#include "tsan_interface.h"
|
|
35
39
|
#include "tsan_mman.h"
|
|
@@ -78,17 +82,6 @@ struct ucontext_t {
|
|
|
78
82
|
};
|
|
79
83
|
#endif
|
|
80
84
|
|
|
81
|
-
#if defined(__x86_64__) || defined(__mips__) || SANITIZER_PPC64V1 || \
|
|
82
|
-
defined(__s390x__)
|
|
83
|
-
#define PTHREAD_ABI_BASE "GLIBC_2.3.2"
|
|
84
|
-
#elif defined(__aarch64__) || SANITIZER_PPC64V2
|
|
85
|
-
#define PTHREAD_ABI_BASE "GLIBC_2.17"
|
|
86
|
-
#elif SANITIZER_LOONGARCH64
|
|
87
|
-
#define PTHREAD_ABI_BASE "GLIBC_2.36"
|
|
88
|
-
#elif SANITIZER_RISCV64
|
|
89
|
-
# define PTHREAD_ABI_BASE "GLIBC_2.27"
|
|
90
|
-
#endif
|
|
91
|
-
|
|
92
85
|
extern "C" int pthread_attr_init(void *attr);
|
|
93
86
|
extern "C" int pthread_attr_destroy(void *attr);
|
|
94
87
|
DECLARE_REAL(int, pthread_attr_getdetachstate, void *, void *)
|
|
@@ -340,11 +333,6 @@ void ScopedInterceptor::DisableIgnoresImpl() {
|
|
|
340
333
|
}
|
|
341
334
|
|
|
342
335
|
#define TSAN_INTERCEPT(func) INTERCEPT_FUNCTION(func)
|
|
343
|
-
#if SANITIZER_FREEBSD || SANITIZER_NETBSD
|
|
344
|
-
# define TSAN_INTERCEPT_VER(func, ver) INTERCEPT_FUNCTION(func)
|
|
345
|
-
#else
|
|
346
|
-
# define TSAN_INTERCEPT_VER(func, ver) INTERCEPT_FUNCTION_VER(func, ver)
|
|
347
|
-
#endif
|
|
348
336
|
#if SANITIZER_FREEBSD
|
|
349
337
|
# define TSAN_MAYBE_INTERCEPT_FREEBSD_ALIAS(func) \
|
|
350
338
|
INTERCEPT_FUNCTION(_pthread_##func)
|
|
@@ -1145,6 +1133,22 @@ TSAN_INTERCEPTOR(int, pthread_create,
|
|
|
1145
1133
|
|
|
1146
1134
|
TSAN_INTERCEPTOR(int, pthread_join, void *th, void **ret) {
|
|
1147
1135
|
SCOPED_INTERCEPTOR_RAW(pthread_join, th, ret);
|
|
1136
|
+
#if SANITIZER_ANDROID
|
|
1137
|
+
{
|
|
1138
|
+
// In Bionic, if the target thread has already exited when pthread_detach is
|
|
1139
|
+
// called, pthread_detach will call pthread_join internally to clean it up.
|
|
1140
|
+
// In that case, the thread has already been consumed by the pthread_detach
|
|
1141
|
+
// interceptor.
|
|
1142
|
+
Tid tid = ctx->thread_registry.FindThread(
|
|
1143
|
+
[](ThreadContextBase* tctx, void* arg) {
|
|
1144
|
+
return tctx->user_id == (uptr)arg;
|
|
1145
|
+
},
|
|
1146
|
+
th);
|
|
1147
|
+
if (tid == kInvalidTid) {
|
|
1148
|
+
return REAL(pthread_join)(th, ret);
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
#endif
|
|
1148
1152
|
Tid tid = ThreadConsumeTid(thr, pc, (uptr)th);
|
|
1149
1153
|
ThreadIgnoreBegin(thr, pc);
|
|
1150
1154
|
int res = BLOCK_REAL(pthread_join)(th, ret);
|
|
@@ -1664,6 +1668,14 @@ TSAN_INTERCEPTOR(int, pthread_barrier_wait, void *b) {
|
|
|
1664
1668
|
|
|
1665
1669
|
TSAN_INTERCEPTOR(int, pthread_once, void *o, void (*f)()) {
|
|
1666
1670
|
SCOPED_INTERCEPTOR_RAW(pthread_once, o, f);
|
|
1671
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
1672
|
+
if (flags()->lock_during_write != kLockDuringAllWrites &&
|
|
1673
|
+
cur_thread_init()->in_internal_write_call) {
|
|
1674
|
+
// This is needed to make it through process launch without hanging
|
|
1675
|
+
f();
|
|
1676
|
+
return 0;
|
|
1677
|
+
}
|
|
1678
|
+
#endif
|
|
1667
1679
|
if (o == 0 || f == 0)
|
|
1668
1680
|
return errno_EINVAL;
|
|
1669
1681
|
atomic_uint32_t *a;
|
|
@@ -2141,13 +2153,29 @@ static void ReportErrnoSpoiling(ThreadState *thr, uptr pc, int sig) {
|
|
|
2141
2153
|
// StackTrace::GetNestInstructionPc(pc) is used because return address is
|
|
2142
2154
|
// expected, OutputReport() will undo this.
|
|
2143
2155
|
ObtainCurrentStack(thr, StackTrace::GetNextInstructionPc(pc), &stack);
|
|
2144
|
-
|
|
2145
|
-
ScopedReport rep(
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2156
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
2157
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
2158
|
+
bool suppressed;
|
|
2159
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
2160
|
+
// before symbolizing in order to avoid a deadlock
|
|
2161
|
+
{
|
|
2162
|
+
ThreadRegistryLock l(&ctx->thread_registry);
|
|
2163
|
+
new (rep) ScopedReport(ReportTypeErrnoInSignal);
|
|
2164
|
+
rep->SetSigNum(sig);
|
|
2165
|
+
suppressed = IsFiredSuppression(ctx, ReportTypeErrnoInSignal, stack);
|
|
2166
|
+
if (!suppressed)
|
|
2167
|
+
rep->AddStack(stack, true);
|
|
2168
|
+
#if SANITIZER_APPLE
|
|
2169
|
+
} // Close this scope to release the locks before writing report
|
|
2170
|
+
#endif
|
|
2171
|
+
if (!suppressed)
|
|
2172
|
+
OutputReport(thr, *rep);
|
|
2173
|
+
|
|
2174
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
2175
|
+
rep->~ScopedReport();
|
|
2176
|
+
#if !SANITIZER_APPLE
|
|
2150
2177
|
}
|
|
2178
|
+
#endif
|
|
2151
2179
|
}
|
|
2152
2180
|
|
|
2153
2181
|
static void CallUserSignalHandler(ThreadState *thr, bool sync, bool acquire,
|
|
@@ -2411,7 +2439,11 @@ TSAN_INTERCEPTOR(int, vfork, int fake) {
|
|
|
2411
2439
|
}
|
|
2412
2440
|
#endif
|
|
2413
2441
|
|
|
2414
|
-
#if SANITIZER_LINUX
|
|
2442
|
+
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
2443
|
+
// Bionic's pthread_create internally calls clone. When the CLONE_THREAD flag is
|
|
2444
|
+
// set, clone does not create a new process but a new thread. This is a
|
|
2445
|
+
// workaround for Android. Disabling the interception of clone solves the
|
|
2446
|
+
// problem in most scenarios.
|
|
2415
2447
|
TSAN_INTERCEPTOR(int, clone, int (*fn)(void *), void *stack, int flags,
|
|
2416
2448
|
void *arg, int *parent_tid, void *tls, pid_t *child_tid) {
|
|
2417
2449
|
SCOPED_INTERCEPTOR_RAW(clone, fn, stack, flags, arg, parent_tid, tls,
|
|
@@ -2888,12 +2920,12 @@ TSAN_INTERCEPTOR(void, _lwp_exit) {
|
|
|
2888
2920
|
#endif
|
|
2889
2921
|
|
|
2890
2922
|
#if SANITIZER_FREEBSD
|
|
2891
|
-
TSAN_INTERCEPTOR(void, thr_exit,
|
|
2923
|
+
TSAN_INTERCEPTOR(void, thr_exit, ThreadID *state) {
|
|
2892
2924
|
SCOPED_TSAN_INTERCEPTOR(thr_exit, state);
|
|
2893
2925
|
DestroyThreadState();
|
|
2894
2926
|
REAL(thr_exit(state));
|
|
2895
2927
|
}
|
|
2896
|
-
#define TSAN_MAYBE_INTERCEPT_THR_EXIT TSAN_INTERCEPT(thr_exit)
|
|
2928
|
+
# define TSAN_MAYBE_INTERCEPT_THR_EXIT TSAN_INTERCEPT(thr_exit)
|
|
2897
2929
|
#else
|
|
2898
2930
|
#define TSAN_MAYBE_INTERCEPT_THR_EXIT
|
|
2899
2931
|
#endif
|
|
@@ -3024,12 +3056,26 @@ void InitializeInterceptors() {
|
|
|
3024
3056
|
TSAN_INTERCEPT(pthread_timedjoin_np);
|
|
3025
3057
|
#endif
|
|
3026
3058
|
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3059
|
+
// In glibc versions older than 2.36, dlsym(RTLD_NEXT, "pthread_cond_init")
|
|
3060
|
+
// may return an outdated symbol (max(2.2,base_version)) if the port was
|
|
3061
|
+
// introduced before 2.3.2 (when the new pthread_cond_t was introduced).
|
|
3062
|
+
#if SANITIZER_GLIBC && !__GLIBC_PREREQ(2, 36) && \
|
|
3063
|
+
(defined(__x86_64__) || defined(__mips__) || SANITIZER_PPC64V1 || \
|
|
3064
|
+
defined(__s390x__))
|
|
3065
|
+
INTERCEPT_FUNCTION_VER(pthread_cond_init, "GLIBC_2.3.2");
|
|
3066
|
+
INTERCEPT_FUNCTION_VER(pthread_cond_signal, "GLIBC_2.3.2");
|
|
3067
|
+
INTERCEPT_FUNCTION_VER(pthread_cond_broadcast, "GLIBC_2.3.2");
|
|
3068
|
+
INTERCEPT_FUNCTION_VER(pthread_cond_wait, "GLIBC_2.3.2");
|
|
3069
|
+
INTERCEPT_FUNCTION_VER(pthread_cond_timedwait, "GLIBC_2.3.2");
|
|
3070
|
+
INTERCEPT_FUNCTION_VER(pthread_cond_destroy, "GLIBC_2.3.2");
|
|
3071
|
+
#else
|
|
3072
|
+
INTERCEPT_FUNCTION(pthread_cond_init);
|
|
3073
|
+
INTERCEPT_FUNCTION(pthread_cond_signal);
|
|
3074
|
+
INTERCEPT_FUNCTION(pthread_cond_broadcast);
|
|
3075
|
+
INTERCEPT_FUNCTION(pthread_cond_wait);
|
|
3076
|
+
INTERCEPT_FUNCTION(pthread_cond_timedwait);
|
|
3077
|
+
INTERCEPT_FUNCTION(pthread_cond_destroy);
|
|
3078
|
+
#endif
|
|
3033
3079
|
|
|
3034
3080
|
TSAN_MAYBE_PTHREAD_COND_CLOCKWAIT;
|
|
3035
3081
|
|
|
@@ -3120,7 +3166,7 @@ void InitializeInterceptors() {
|
|
|
3120
3166
|
|
|
3121
3167
|
TSAN_INTERCEPT(fork);
|
|
3122
3168
|
TSAN_INTERCEPT(vfork);
|
|
3123
|
-
#if SANITIZER_LINUX
|
|
3169
|
+
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
3124
3170
|
TSAN_INTERCEPT(clone);
|
|
3125
3171
|
#endif
|
|
3126
3172
|
#if !SANITIZER_ANDROID
|
package/libtsan/tsan_interface.h
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#define TSAN_INTERFACE_H
|
|
17
17
|
|
|
18
18
|
#include <sanitizer_common/sanitizer_internal_defs.h>
|
|
19
|
-
using __sanitizer::
|
|
19
|
+
using __sanitizer::ThreadID;
|
|
20
20
|
using __sanitizer::uptr;
|
|
21
21
|
|
|
22
22
|
// This header should NOT include any other headers.
|
|
@@ -175,7 +175,7 @@ int __tsan_get_report_mutex(void *report, uptr idx, uptr *mutex_id, void **addr,
|
|
|
175
175
|
|
|
176
176
|
// Returns information about threads included in the report.
|
|
177
177
|
SANITIZER_INTERFACE_ATTRIBUTE
|
|
178
|
-
int __tsan_get_report_thread(void *report, uptr idx, int *tid,
|
|
178
|
+
int __tsan_get_report_thread(void *report, uptr idx, int *tid, ThreadID *os_id,
|
|
179
179
|
int *running, const char **name, int *parent_tid,
|
|
180
180
|
void **trace, uptr trace_size);
|
|
181
181
|
|
|
@@ -192,7 +192,7 @@ const char *__tsan_locate_address(uptr addr, char *name, uptr name_size,
|
|
|
192
192
|
// Returns the allocation stack for a heap pointer.
|
|
193
193
|
SANITIZER_INTERFACE_ATTRIBUTE
|
|
194
194
|
int __tsan_get_alloc_stack(uptr addr, uptr *trace, uptr size, int *thread_id,
|
|
195
|
-
|
|
195
|
+
ThreadID *os_id);
|
|
196
196
|
|
|
197
197
|
#endif // SANITIZER_GO
|
|
198
198
|
|
|
@@ -437,16 +437,30 @@ void __tsan_mutex_post_divert(void *addr, unsigned flagz) {
|
|
|
437
437
|
}
|
|
438
438
|
|
|
439
439
|
static void ReportMutexHeldWrongContext(ThreadState *thr, uptr pc) {
|
|
440
|
-
|
|
441
|
-
ScopedReport rep(
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
440
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
441
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
442
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
443
|
+
// before symbolizing in order to avoid a deadlock
|
|
444
|
+
{
|
|
445
|
+
ThreadRegistryLock l(&ctx->thread_registry);
|
|
446
|
+
new (rep) ScopedReport(ReportTypeMutexHeldWrongContext);
|
|
447
|
+
for (uptr i = 0; i < thr->mset.Size(); ++i) {
|
|
448
|
+
MutexSet::Desc desc = thr->mset.Get(i);
|
|
449
|
+
rep->AddMutex(desc.addr, desc.stack_id);
|
|
450
|
+
}
|
|
451
|
+
VarSizeStackTrace trace;
|
|
452
|
+
ObtainCurrentStack(thr, pc, &trace);
|
|
453
|
+
rep->AddStack(trace, true);
|
|
454
|
+
#if SANITIZER_APPLE
|
|
455
|
+
} // Close this scope to release the locks
|
|
456
|
+
#endif
|
|
457
|
+
OutputReport(thr, *rep);
|
|
458
|
+
|
|
459
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
460
|
+
rep->~ScopedReport();
|
|
461
|
+
#if !SANITIZER_APPLE
|
|
445
462
|
}
|
|
446
|
-
|
|
447
|
-
ObtainCurrentStack(thr, pc, &trace);
|
|
448
|
-
rep.AddStack(trace, true);
|
|
449
|
-
OutputReport(thr, rep);
|
|
463
|
+
#endif
|
|
450
464
|
}
|
|
451
465
|
|
|
452
466
|
INTERFACE_ATTRIBUTE
|
package/libtsan/tsan_mman.cpp
CHANGED
|
@@ -182,10 +182,24 @@ static void SignalUnsafeCall(ThreadState *thr, uptr pc) {
|
|
|
182
182
|
ObtainCurrentStack(thr, pc, &stack);
|
|
183
183
|
if (IsFiredSuppression(ctx, ReportTypeSignalUnsafe, stack))
|
|
184
184
|
return;
|
|
185
|
-
|
|
186
|
-
ScopedReport rep(
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
186
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
187
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
188
|
+
// before symbolizing in order to avoid a deadlock
|
|
189
|
+
{
|
|
190
|
+
ThreadRegistryLock l(&ctx->thread_registry);
|
|
191
|
+
new (rep) ScopedReport(ReportTypeSignalUnsafe);
|
|
192
|
+
rep->AddStack(stack, true);
|
|
193
|
+
#if SANITIZER_APPLE
|
|
194
|
+
} // Close this scope to release the locks
|
|
195
|
+
#endif
|
|
196
|
+
OutputReport(thr, *rep);
|
|
197
|
+
|
|
198
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
199
|
+
rep->~ScopedReport();
|
|
200
|
+
#if !SANITIZER_APPLE
|
|
201
|
+
}
|
|
202
|
+
#endif
|
|
189
203
|
}
|
|
190
204
|
|
|
191
205
|
|
package/libtsan/tsan_platform.h
CHANGED
|
@@ -681,6 +681,32 @@ struct MappingGoMips64_47 {
|
|
|
681
681
|
static const uptr kShadowAdd = 0x200000000000ull;
|
|
682
682
|
};
|
|
683
683
|
|
|
684
|
+
/* Go on linux/riscv64 (39-bit VMA)
|
|
685
|
+
0000 0001 0000 - 000f 0000 0000: executable and heap (60 GiB)
|
|
686
|
+
000f 0000 0000 - 0010 0000 0000: -
|
|
687
|
+
0010 0000 0000 - 0030 0000 0000: shadow - 128 GiB ( ~ 2 * app)
|
|
688
|
+
0030 0000 0000 - 0038 0000 0000: metainfo - 32 GiB ( ~ 0.5 * app)
|
|
689
|
+
0038 0000 0000 - 0040 0000 0000: -
|
|
690
|
+
*/
|
|
691
|
+
struct MappingGoRiscv64_39 {
|
|
692
|
+
static const uptr kMetaShadowBeg = 0x003000000000ull;
|
|
693
|
+
static const uptr kMetaShadowEnd = 0x003800000000ull;
|
|
694
|
+
static const uptr kShadowBeg = 0x001000000000ull;
|
|
695
|
+
static const uptr kShadowEnd = 0x003000000000ull;
|
|
696
|
+
static const uptr kLoAppMemBeg = 0x000000010000ull;
|
|
697
|
+
static const uptr kLoAppMemEnd = 0x000f00000000ull;
|
|
698
|
+
static const uptr kMidAppMemBeg = 0;
|
|
699
|
+
static const uptr kMidAppMemEnd = 0;
|
|
700
|
+
static const uptr kHiAppMemBeg = 0;
|
|
701
|
+
static const uptr kHiAppMemEnd = 0;
|
|
702
|
+
static const uptr kHeapMemBeg = 0;
|
|
703
|
+
static const uptr kHeapMemEnd = 0;
|
|
704
|
+
static const uptr kVdsoBeg = 0;
|
|
705
|
+
static const uptr kShadowMsk = 0;
|
|
706
|
+
static const uptr kShadowXor = 0;
|
|
707
|
+
static const uptr kShadowAdd = 0x001000000000ull;
|
|
708
|
+
};
|
|
709
|
+
|
|
684
710
|
/* Go on linux/riscv64 (48-bit VMA)
|
|
685
711
|
0000 0001 0000 - 00e0 0000 0000: executable and heap (896 GiB)
|
|
686
712
|
00e0 0000 0000 - 2000 0000 0000: -
|
|
@@ -689,13 +715,13 @@ struct MappingGoMips64_47 {
|
|
|
689
715
|
3000 0000 0000 - 3100 0000 0000: metainfo - 1 TiB ( ~ 1 * app)
|
|
690
716
|
3100 0000 0000 - 8000 0000 0000: -
|
|
691
717
|
*/
|
|
692
|
-
struct
|
|
718
|
+
struct MappingGoRiscv64_48 {
|
|
693
719
|
static const uptr kMetaShadowBeg = 0x300000000000ull;
|
|
694
720
|
static const uptr kMetaShadowEnd = 0x310000000000ull;
|
|
695
721
|
static const uptr kShadowBeg = 0x200000000000ull;
|
|
696
722
|
static const uptr kShadowEnd = 0x240000000000ull;
|
|
697
723
|
static const uptr kLoAppMemBeg = 0x000000010000ull;
|
|
698
|
-
static const uptr kLoAppMemEnd =
|
|
724
|
+
static const uptr kLoAppMemEnd = 0x00e000000000ull;
|
|
699
725
|
static const uptr kMidAppMemBeg = 0;
|
|
700
726
|
static const uptr kMidAppMemEnd = 0;
|
|
701
727
|
static const uptr kHiAppMemBeg = 0;
|
|
@@ -756,7 +782,12 @@ ALWAYS_INLINE auto SelectMapping(Arg arg) {
|
|
|
756
782
|
# elif defined(__loongarch_lp64)
|
|
757
783
|
return Func::template Apply<MappingGoLoongArch64_47>(arg);
|
|
758
784
|
# elif SANITIZER_RISCV64
|
|
759
|
-
|
|
785
|
+
switch (vmaSize) {
|
|
786
|
+
case 39:
|
|
787
|
+
return Func::template Apply<MappingGoRiscv64_39>(arg);
|
|
788
|
+
case 48:
|
|
789
|
+
return Func::template Apply<MappingGoRiscv64_48>(arg);
|
|
790
|
+
}
|
|
760
791
|
# elif SANITIZER_WINDOWS
|
|
761
792
|
return Func::template Apply<MappingGoWindows>(arg);
|
|
762
793
|
# else
|
|
@@ -827,7 +858,8 @@ void ForEachMapping() {
|
|
|
827
858
|
Func::template Apply<MappingGoAarch64>();
|
|
828
859
|
Func::template Apply<MappingGoLoongArch64_47>();
|
|
829
860
|
Func::template Apply<MappingGoMips64_47>();
|
|
830
|
-
Func::template Apply<
|
|
861
|
+
Func::template Apply<MappingGoRiscv64_39>();
|
|
862
|
+
Func::template Apply<MappingGoRiscv64_48>();
|
|
831
863
|
Func::template Apply<MappingGoS390x>();
|
|
832
864
|
}
|
|
833
865
|
|
|
@@ -926,7 +958,9 @@ struct IsAppMemImpl {
|
|
|
926
958
|
};
|
|
927
959
|
|
|
928
960
|
ALWAYS_INLINE
|
|
929
|
-
bool IsAppMem(uptr mem) {
|
|
961
|
+
bool IsAppMem(uptr mem) {
|
|
962
|
+
return SelectMapping<IsAppMemImpl>(STRIP_MTE_TAG(mem));
|
|
963
|
+
}
|
|
930
964
|
|
|
931
965
|
struct IsShadowMemImpl {
|
|
932
966
|
template <typename Mapping>
|
|
@@ -965,7 +999,8 @@ struct MemToShadowImpl {
|
|
|
965
999
|
|
|
966
1000
|
ALWAYS_INLINE
|
|
967
1001
|
RawShadow *MemToShadow(uptr x) {
|
|
968
|
-
return reinterpret_cast<RawShadow
|
|
1002
|
+
return reinterpret_cast<RawShadow*>(
|
|
1003
|
+
SelectMapping<MemToShadowImpl>(STRIP_MTE_TAG(x)));
|
|
969
1004
|
}
|
|
970
1005
|
|
|
971
1006
|
struct MemToMetaImpl {
|
|
@@ -979,7 +1014,9 @@ struct MemToMetaImpl {
|
|
|
979
1014
|
};
|
|
980
1015
|
|
|
981
1016
|
ALWAYS_INLINE
|
|
982
|
-
u32
|
|
1017
|
+
u32* MemToMeta(uptr x) {
|
|
1018
|
+
return SelectMapping<MemToMetaImpl>(STRIP_MTE_TAG(x));
|
|
1019
|
+
}
|
|
983
1020
|
|
|
984
1021
|
struct ShadowToMemImpl {
|
|
985
1022
|
template <typename Mapping>
|
|
@@ -393,9 +393,9 @@ void InitializePlatformEarly() {
|
|
|
393
393
|
Die();
|
|
394
394
|
}
|
|
395
395
|
# else
|
|
396
|
-
if (vmaSize != 48) {
|
|
396
|
+
if (vmaSize != 39 && vmaSize != 48) {
|
|
397
397
|
Printf("FATAL: ThreadSanitizer: unsupported VMA range\n");
|
|
398
|
-
Printf("FATAL: Found %zd - Supported 48\n", vmaSize);
|
|
398
|
+
Printf("FATAL: Found %zd - Supported 39 and 48\n", vmaSize);
|
|
399
399
|
Die();
|
|
400
400
|
}
|
|
401
401
|
# endif
|
|
@@ -415,7 +415,7 @@ void InitializePlatform() {
|
|
|
415
415
|
// is not compiled with -pie.
|
|
416
416
|
#if !SANITIZER_GO
|
|
417
417
|
{
|
|
418
|
-
# if
|
|
418
|
+
# if INIT_LONGJMP_XOR_KEY
|
|
419
419
|
// Initialize the xor key used in {sig}{set,long}jump.
|
|
420
420
|
InitializeLongjmpXorKey();
|
|
421
421
|
# endif
|
|
@@ -486,8 +486,20 @@ int ExtractRecvmsgFDs(void *msgp, int *fds, int nfd) {
|
|
|
486
486
|
|
|
487
487
|
// Reverse operation of libc stack pointer mangling
|
|
488
488
|
static uptr UnmangleLongJmpSp(uptr mangled_sp) {
|
|
489
|
-
#if
|
|
490
|
-
|
|
489
|
+
# if SANITIZER_ANDROID && INIT_LONGJMP_XOR_KEY
|
|
490
|
+
if (longjmp_xor_key == 0) {
|
|
491
|
+
// bionic libc initialization process: __libc_init_globals ->
|
|
492
|
+
// __libc_init_vdso (calls strcmp) -> __libc_init_setjmp_cookie. strcmp is
|
|
493
|
+
// intercepted by TSan, so during TSan initialization the setjmp_cookie
|
|
494
|
+
// remains uninitialized. On Android, longjmp_xor_key must be set on first
|
|
495
|
+
// use.
|
|
496
|
+
InitializeLongjmpXorKey();
|
|
497
|
+
CHECK_NE(longjmp_xor_key, 0);
|
|
498
|
+
}
|
|
499
|
+
# endif
|
|
500
|
+
|
|
501
|
+
# if defined(__x86_64__)
|
|
502
|
+
# if SANITIZER_LINUX
|
|
491
503
|
// Reverse of:
|
|
492
504
|
// xor %fs:0x30, %rsi
|
|
493
505
|
// rol $0x11, %rsi
|
|
@@ -542,13 +554,23 @@ static uptr UnmangleLongJmpSp(uptr mangled_sp) {
|
|
|
542
554
|
# else
|
|
543
555
|
# define LONG_JMP_SP_ENV_SLOT 2
|
|
544
556
|
# endif
|
|
545
|
-
#elif
|
|
546
|
-
#
|
|
547
|
-
#
|
|
548
|
-
#
|
|
549
|
-
#
|
|
550
|
-
#
|
|
551
|
-
#
|
|
557
|
+
# elif SANITIZER_ANDROID
|
|
558
|
+
# ifdef __aarch64__
|
|
559
|
+
# define LONG_JMP_SP_ENV_SLOT 3
|
|
560
|
+
# elif SANITIZER_RISCV64
|
|
561
|
+
# define LONG_JMP_SP_ENV_SLOT 3
|
|
562
|
+
# elif defined(__x86_64__)
|
|
563
|
+
# define LONG_JMP_SP_ENV_SLOT 6
|
|
564
|
+
# else
|
|
565
|
+
# error unsupported
|
|
566
|
+
# endif
|
|
567
|
+
# elif SANITIZER_LINUX
|
|
568
|
+
# ifdef __aarch64__
|
|
569
|
+
# define LONG_JMP_SP_ENV_SLOT 13
|
|
570
|
+
# elif defined(__loongarch__)
|
|
571
|
+
# define LONG_JMP_SP_ENV_SLOT 1
|
|
572
|
+
# elif defined(__mips64)
|
|
573
|
+
# define LONG_JMP_SP_ENV_SLOT 1
|
|
552
574
|
# elif SANITIZER_RISCV64
|
|
553
575
|
# define LONG_JMP_SP_ENV_SLOT 13
|
|
554
576
|
# elif defined(__s390x__)
|
|
@@ -556,7 +578,7 @@ static uptr UnmangleLongJmpSp(uptr mangled_sp) {
|
|
|
556
578
|
# else
|
|
557
579
|
# define LONG_JMP_SP_ENV_SLOT 6
|
|
558
580
|
# endif
|
|
559
|
-
#endif
|
|
581
|
+
# endif
|
|
560
582
|
|
|
561
583
|
uptr ExtractLongJmpSp(uptr *env) {
|
|
562
584
|
uptr mangled_sp = env[LONG_JMP_SP_ENV_SLOT];
|
|
@@ -653,7 +675,13 @@ ThreadState *cur_thread() {
|
|
|
653
675
|
}
|
|
654
676
|
CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, &oldset, nullptr));
|
|
655
677
|
}
|
|
656
|
-
|
|
678
|
+
|
|
679
|
+
// Skia calls mallopt(M_THREAD_DISABLE_MEM_INIT, 1), which sets the least
|
|
680
|
+
// significant bit of TLS_SLOT_SANITIZER to 1. Scudo allocator uses this bit
|
|
681
|
+
// as a flag to disable memory initialization. This is a workaround to get the
|
|
682
|
+
// correct ThreadState pointer.
|
|
683
|
+
uptr addr = reinterpret_cast<uptr>(thr);
|
|
684
|
+
return reinterpret_cast<ThreadState*>(addr & ~1ULL);
|
|
657
685
|
}
|
|
658
686
|
|
|
659
687
|
void set_cur_thread(ThreadState *thr) {
|
|
@@ -226,9 +226,20 @@ static void ThreadTerminateCallback(uptr thread) {
|
|
|
226
226
|
void InitializePlatformEarly() {
|
|
227
227
|
# if !SANITIZER_GO && SANITIZER_IOS
|
|
228
228
|
uptr max_vm = GetMaxUserVirtualAddress() + 1;
|
|
229
|
-
if (max_vm
|
|
230
|
-
|
|
231
|
-
|
|
229
|
+
if (max_vm < HiAppMemEnd()) {
|
|
230
|
+
Report(
|
|
231
|
+
"ThreadSanitizer: Unsupported virtual memory layout:\n\tVM address "
|
|
232
|
+
"limit = %p\n\tExpected %p.\n",
|
|
233
|
+
(void*)max_vm, (void*)HiAppMemEnd());
|
|
234
|
+
Die();
|
|
235
|
+
}
|
|
236
|
+
// In some configurations, the max_vm is expanded, but much of this space is
|
|
237
|
+
// already mapped. TSAN will not work in this configuration.
|
|
238
|
+
if (!MemoryRangeIsAvailable(HiAppMemEnd() - 1, HiAppMemEnd() - 1)) {
|
|
239
|
+
Report(
|
|
240
|
+
"ThreadSanitizer: Unsupported virtual memory layout: Address %p is "
|
|
241
|
+
"already mapped.\n",
|
|
242
|
+
(void*)(HiAppMemEnd() - 1));
|
|
232
243
|
Die();
|
|
233
244
|
}
|
|
234
245
|
#endif
|
|
@@ -248,7 +259,9 @@ void InitializePlatform() {
|
|
|
248
259
|
|
|
249
260
|
ThreadEventCallbacks callbacks = {
|
|
250
261
|
.create = ThreadCreateCallback,
|
|
262
|
+
.start = nullptr,
|
|
251
263
|
.terminate = ThreadTerminateCallback,
|
|
264
|
+
.destroy = nullptr,
|
|
252
265
|
};
|
|
253
266
|
InstallPthreadIntrospectionHook(callbacks);
|
|
254
267
|
#endif
|