@zigc/lib 0.17.0-dev.135 → 0.17.0-dev.215
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/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 +40 -19
- package/libunwind/src/CompactUnwinder.hpp +16 -5
- package/libunwind/src/DwarfInstructions.hpp +24 -13
- package/libunwind/src/DwarfParser.hpp +60 -22
- 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 +11 -2
- package/std/c.zig +7 -0
- 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 +0 -1
- 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/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_report.h
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
#ifndef TSAN_REPORT_H
|
|
13
13
|
#define TSAN_REPORT_H
|
|
14
14
|
|
|
15
|
+
#include "sanitizer_common/sanitizer_internal_defs.h"
|
|
16
|
+
#include "sanitizer_common/sanitizer_stacktrace.h"
|
|
15
17
|
#include "sanitizer_common/sanitizer_symbolizer.h"
|
|
16
18
|
#include "sanitizer_common/sanitizer_thread_registry.h"
|
|
17
19
|
#include "sanitizer_common/sanitizer_vector.h"
|
|
@@ -56,6 +58,7 @@ struct ReportMop {
|
|
|
56
58
|
bool atomic;
|
|
57
59
|
uptr external_tag;
|
|
58
60
|
Vector<ReportMopMutex> mset;
|
|
61
|
+
StackTrace stack_trace;
|
|
59
62
|
ReportStack *stack;
|
|
60
63
|
|
|
61
64
|
ReportMop();
|
|
@@ -79,25 +82,34 @@ struct ReportLocation {
|
|
|
79
82
|
int fd = 0;
|
|
80
83
|
bool fd_closed = false;
|
|
81
84
|
bool suppressable = false;
|
|
85
|
+
StackID stack_id = 0;
|
|
82
86
|
ReportStack *stack = nullptr;
|
|
83
87
|
};
|
|
84
88
|
|
|
85
89
|
struct ReportThread {
|
|
86
90
|
Tid id;
|
|
87
|
-
|
|
91
|
+
ThreadID os_id;
|
|
88
92
|
bool running;
|
|
89
93
|
ThreadType thread_type;
|
|
90
94
|
char *name;
|
|
91
95
|
Tid parent_tid;
|
|
96
|
+
StackID stack_id;
|
|
92
97
|
ReportStack *stack;
|
|
98
|
+
bool suppressable;
|
|
93
99
|
};
|
|
94
100
|
|
|
95
101
|
struct ReportMutex {
|
|
96
102
|
int id;
|
|
97
103
|
uptr addr;
|
|
104
|
+
StackID stack_id;
|
|
98
105
|
ReportStack *stack;
|
|
99
106
|
};
|
|
100
107
|
|
|
108
|
+
struct AddedLocationAddr {
|
|
109
|
+
uptr addr;
|
|
110
|
+
usize locs_idx;
|
|
111
|
+
};
|
|
112
|
+
|
|
101
113
|
class ReportDesc {
|
|
102
114
|
public:
|
|
103
115
|
ReportType typ;
|
|
@@ -105,6 +117,7 @@ class ReportDesc {
|
|
|
105
117
|
Vector<ReportStack*> stacks;
|
|
106
118
|
Vector<ReportMop*> mops;
|
|
107
119
|
Vector<ReportLocation*> locs;
|
|
120
|
+
Vector<AddedLocationAddr> added_location_addrs;
|
|
108
121
|
Vector<ReportMutex*> mutexes;
|
|
109
122
|
Vector<ReportThread*> threads;
|
|
110
123
|
Vector<Tid> unique_tids;
|
package/libtsan/tsan_rtl.cpp
CHANGED
|
@@ -40,6 +40,13 @@ SANITIZER_WEAK_DEFAULT_IMPL
|
|
|
40
40
|
void __tsan_test_only_on_fork() {}
|
|
41
41
|
#endif
|
|
42
42
|
|
|
43
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
44
|
+
// Override weak symbol from sanitizer_common
|
|
45
|
+
extern void __tsan_set_in_internal_write_call(bool value) {
|
|
46
|
+
__tsan::cur_thread_init()->in_internal_write_call = value;
|
|
47
|
+
}
|
|
48
|
+
#endif
|
|
49
|
+
|
|
43
50
|
namespace __tsan {
|
|
44
51
|
|
|
45
52
|
#if !SANITIZER_GO
|
|
@@ -893,6 +900,13 @@ void ForkChildAfter(ThreadState* thr, uptr pc, bool start_thread) {
|
|
|
893
900
|
ThreadIgnoreBegin(thr, pc);
|
|
894
901
|
ThreadIgnoreSyncBegin(thr, pc);
|
|
895
902
|
}
|
|
903
|
+
|
|
904
|
+
# if SANITIZER_APPLE && !SANITIZER_GO
|
|
905
|
+
// This flag can have inheritance disabled - we are the child so act
|
|
906
|
+
// accordingly
|
|
907
|
+
if (flags()->lock_during_write == kNoLockDuringWritesCurrentProcess)
|
|
908
|
+
flags()->lock_during_write = kLockDuringAllWrites;
|
|
909
|
+
# endif
|
|
896
910
|
}
|
|
897
911
|
#endif
|
|
898
912
|
|
package/libtsan/tsan_rtl.h
CHANGED
|
@@ -236,6 +236,10 @@ struct alignas(SANITIZER_CACHE_LINE_SIZE) ThreadState {
|
|
|
236
236
|
|
|
237
237
|
const ReportDesc *current_report;
|
|
238
238
|
|
|
239
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
240
|
+
bool in_internal_write_call;
|
|
241
|
+
#endif
|
|
242
|
+
|
|
239
243
|
explicit ThreadState(Tid tid);
|
|
240
244
|
};
|
|
241
245
|
|
|
@@ -420,6 +424,7 @@ class ScopedReportBase {
|
|
|
420
424
|
void AddSleep(StackID stack_id);
|
|
421
425
|
void SetCount(int count);
|
|
422
426
|
void SetSigNum(int sig);
|
|
427
|
+
void SymbolizeStackElems(void);
|
|
423
428
|
|
|
424
429
|
const ReportDesc *GetReport() const;
|
|
425
430
|
|
|
@@ -498,7 +503,7 @@ void ForkChildAfter(ThreadState *thr, uptr pc, bool start_thread);
|
|
|
498
503
|
|
|
499
504
|
void ReportRace(ThreadState *thr, RawShadow *shadow_mem, Shadow cur, Shadow old,
|
|
500
505
|
AccessType typ);
|
|
501
|
-
bool OutputReport(ThreadState *thr,
|
|
506
|
+
bool OutputReport(ThreadState *thr, ScopedReport &srep);
|
|
502
507
|
bool IsFiredSuppression(Context *ctx, ReportType type, StackTrace trace);
|
|
503
508
|
bool IsExpectedReport(uptr addr, uptr size);
|
|
504
509
|
|
|
@@ -559,7 +564,7 @@ void ThreadIgnoreSyncBegin(ThreadState *thr, uptr pc);
|
|
|
559
564
|
void ThreadIgnoreSyncEnd(ThreadState *thr);
|
|
560
565
|
|
|
561
566
|
Tid ThreadCreate(ThreadState *thr, uptr pc, uptr uid, bool detached);
|
|
562
|
-
void ThreadStart(ThreadState *thr, Tid tid,
|
|
567
|
+
void ThreadStart(ThreadState *thr, Tid tid, ThreadID os_id,
|
|
563
568
|
ThreadType thread_type);
|
|
564
569
|
void ThreadFinish(ThreadState *thr);
|
|
565
570
|
Tid ThreadConsumeTid(ThreadState *thr, uptr pc, uptr uid);
|
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
#include "sanitizer_common/sanitizer_asm.h"
|
|
5
5
|
#include "builtins/assembly.h"
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
#else
|
|
10
|
-
.section __TEXT,__text
|
|
7
|
+
TEXT_SECTION
|
|
8
|
+
#if defined(__APPLE__)
|
|
11
9
|
.align 3
|
|
12
10
|
#endif
|
|
13
11
|
|
|
@@ -222,6 +220,6 @@ ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
|
|
|
222
220
|
|
|
223
221
|
NO_EXEC_STACK_DIRECTIVE
|
|
224
222
|
|
|
225
|
-
|
|
223
|
+
GNU_PROPERTY_BTI_PAC_GCS
|
|
226
224
|
|
|
227
225
|
#endif
|
|
@@ -419,6 +419,11 @@ NOINLINE void TraceRestartMemoryAccess(ThreadState* thr, uptr pc, uptr addr,
|
|
|
419
419
|
|
|
420
420
|
ALWAYS_INLINE USED void MemoryAccess(ThreadState* thr, uptr pc, uptr addr,
|
|
421
421
|
uptr size, AccessType typ) {
|
|
422
|
+
#if SANITIZER_APPLE && !SANITIZER_GO
|
|
423
|
+
// Swift symbolizer can be intercepted and deadlock without this
|
|
424
|
+
if (thr->in_symbolizer)
|
|
425
|
+
return;
|
|
426
|
+
#endif
|
|
422
427
|
RawShadow* shadow_mem = MemToShadow(addr);
|
|
423
428
|
UNUSED char memBuf[4][64];
|
|
424
429
|
DPrintf2("#%d: Access: %d@%d %p/%zd typ=0x%x {%s, %s, %s, %s}\n", thr->tid,
|
|
@@ -684,7 +689,7 @@ void MemoryAccessRangeT(ThreadState* thr, uptr pc, uptr addr, uptr size) {
|
|
|
684
689
|
DCHECK(IsAppMem(addr + size - 1));
|
|
685
690
|
}
|
|
686
691
|
if (!IsShadowMem(shadow_mem)) {
|
|
687
|
-
Printf("Bad shadow start addr: %p (%p)\n", shadow_mem, (void*)addr);
|
|
692
|
+
Printf("Bad shadow start addr: %p (%p)\n", (void*)shadow_mem, (void*)addr);
|
|
688
693
|
DCHECK(IsShadowMem(shadow_mem));
|
|
689
694
|
}
|
|
690
695
|
|
|
@@ -693,12 +698,12 @@ void MemoryAccessRangeT(ThreadState* thr, uptr pc, uptr addr, uptr size) {
|
|
|
693
698
|
RawShadow* shadow_mem_end =
|
|
694
699
|
shadow_mem + rounded_size / kShadowCell * kShadowCnt;
|
|
695
700
|
if (!IsShadowMem(shadow_mem_end - 1)) {
|
|
696
|
-
Printf("Bad shadow end addr: %p (%p)\n", shadow_mem_end - 1,
|
|
701
|
+
Printf("Bad shadow end addr: %p (%p)\n", (void*)(shadow_mem_end - 1),
|
|
697
702
|
(void*)(addr + size - 1));
|
|
698
703
|
Printf(
|
|
699
704
|
"Shadow start addr (ok): %p (%p); size: 0x%zx; rounded_size: 0x%zx; "
|
|
700
705
|
"kShadowMultiplier: %zx\n",
|
|
701
|
-
shadow_mem, (void*)addr, size, rounded_size, kShadowMultiplier);
|
|
706
|
+
(void*)shadow_mem, (void*)addr, size, rounded_size, kShadowMultiplier);
|
|
702
707
|
DCHECK(IsShadowMem(shadow_mem_end - 1));
|
|
703
708
|
}
|
|
704
709
|
#endif
|
package/libtsan/tsan_rtl_amd64.S
CHANGED
|
@@ -11,14 +11,15 @@
|
|
|
11
11
|
//===----------------------------------------------------------------------===//
|
|
12
12
|
|
|
13
13
|
#include <sanitizer_common/sanitizer_deadlock_detector_interface.h>
|
|
14
|
+
#include <sanitizer_common/sanitizer_placement_new.h>
|
|
14
15
|
#include <sanitizer_common/sanitizer_stackdepot.h>
|
|
15
16
|
|
|
16
|
-
#include "tsan_rtl.h"
|
|
17
17
|
#include "tsan_flags.h"
|
|
18
|
-
#include "
|
|
18
|
+
#include "tsan_platform.h"
|
|
19
19
|
#include "tsan_report.h"
|
|
20
|
+
#include "tsan_rtl.h"
|
|
20
21
|
#include "tsan_symbolize.h"
|
|
21
|
-
#include "
|
|
22
|
+
#include "tsan_sync.h"
|
|
22
23
|
|
|
23
24
|
namespace __tsan {
|
|
24
25
|
|
|
@@ -55,14 +56,28 @@ static void ReportMutexMisuse(ThreadState *thr, uptr pc, ReportType typ,
|
|
|
55
56
|
return;
|
|
56
57
|
if (!ShouldReport(thr, typ))
|
|
57
58
|
return;
|
|
58
|
-
|
|
59
|
-
ScopedReport rep(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
60
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
61
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
62
|
+
// before symbolizing in order to avoid a deadlock
|
|
63
|
+
{
|
|
64
|
+
ThreadRegistryLock l(&ctx->thread_registry);
|
|
65
|
+
new (rep) ScopedReport(typ);
|
|
66
|
+
rep->AddMutex(addr, creation_stack_id);
|
|
67
|
+
VarSizeStackTrace trace;
|
|
68
|
+
ObtainCurrentStack(thr, pc, &trace);
|
|
69
|
+
rep->AddStack(trace, true);
|
|
70
|
+
rep->AddLocation(addr, 1);
|
|
71
|
+
#if SANITIZER_APPLE
|
|
72
|
+
} // Close this scope to release the locks
|
|
73
|
+
#endif
|
|
74
|
+
OutputReport(thr, *rep);
|
|
75
|
+
|
|
76
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
77
|
+
rep->~ScopedReport();
|
|
78
|
+
#if !SANITIZER_APPLE
|
|
79
|
+
}
|
|
80
|
+
#endif
|
|
66
81
|
}
|
|
67
82
|
|
|
68
83
|
static void RecordMutexLock(ThreadState *thr, uptr pc, uptr addr,
|
|
@@ -528,51 +543,81 @@ void AfterSleep(ThreadState *thr, uptr pc) {
|
|
|
528
543
|
void ReportDeadlock(ThreadState *thr, uptr pc, DDReport *r) {
|
|
529
544
|
if (r == 0 || !ShouldReport(thr, ReportTypeDeadlock))
|
|
530
545
|
return;
|
|
531
|
-
|
|
532
|
-
ScopedReport rep(
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
546
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
547
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
548
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
549
|
+
// before symbolizing in order to avoid a deadlock
|
|
550
|
+
{
|
|
551
|
+
ThreadRegistryLock l(&ctx->thread_registry);
|
|
552
|
+
new (rep) ScopedReport(ReportTypeDeadlock);
|
|
553
|
+
for (int i = 0; i < r->n; i++) {
|
|
554
|
+
rep->AddMutex(r->loop[i].mtx_ctx0, r->loop[i].stk[0]);
|
|
555
|
+
rep->AddUniqueTid((int)r->loop[i].thr_ctx);
|
|
556
|
+
rep->AddThread((int)r->loop[i].thr_ctx);
|
|
557
|
+
}
|
|
558
|
+
uptr dummy_pc = 0x42;
|
|
559
|
+
for (int i = 0; i < r->n; i++) {
|
|
560
|
+
for (int j = 0; j < (flags()->second_deadlock_stack ? 2 : 1); j++) {
|
|
561
|
+
u32 stk = r->loop[i].stk[j];
|
|
562
|
+
StackTrace stack;
|
|
563
|
+
if (stk && stk != kInvalidStackID) {
|
|
564
|
+
stack = StackDepotGet(stk);
|
|
565
|
+
} else {
|
|
566
|
+
// Sometimes we fail to extract the stack trace (FIXME: investigate),
|
|
567
|
+
// but we should still produce some stack trace in the report.
|
|
568
|
+
stack = StackTrace(&dummy_pc, 1);
|
|
569
|
+
}
|
|
570
|
+
rep->AddStack(stack, true);
|
|
548
571
|
}
|
|
549
572
|
}
|
|
573
|
+
#if SANITIZER_APPLE
|
|
574
|
+
} // Close this scope to release the locks
|
|
575
|
+
#endif
|
|
576
|
+
OutputReport(thr, *rep);
|
|
577
|
+
|
|
578
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
579
|
+
rep->~ScopedReport();
|
|
580
|
+
#if !SANITIZER_APPLE
|
|
550
581
|
}
|
|
551
|
-
|
|
582
|
+
#endif
|
|
552
583
|
}
|
|
553
584
|
|
|
554
585
|
void ReportDestroyLocked(ThreadState *thr, uptr pc, uptr addr,
|
|
555
586
|
FastState last_lock, StackID creation_stack_id) {
|
|
556
|
-
//
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
587
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
588
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
589
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
590
|
+
// before symbolizing in order to avoid a deadlock
|
|
591
|
+
{
|
|
592
|
+
// We need to lock the slot during RestoreStack because it protects
|
|
593
|
+
// the slot journal.
|
|
594
|
+
Lock slot_lock(&ctx->slots[static_cast<uptr>(last_lock.sid())].mtx);
|
|
595
|
+
ThreadRegistryLock l0(&ctx->thread_registry);
|
|
596
|
+
Lock slots_lock(&ctx->slot_mtx);
|
|
597
|
+
new (rep) ScopedReport(ReportTypeMutexDestroyLocked);
|
|
598
|
+
rep->AddMutex(addr, creation_stack_id);
|
|
599
|
+
VarSizeStackTrace trace;
|
|
600
|
+
ObtainCurrentStack(thr, pc, &trace);
|
|
601
|
+
rep->AddStack(trace, true);
|
|
602
|
+
|
|
603
|
+
Tid tid;
|
|
604
|
+
DynamicMutexSet mset;
|
|
605
|
+
uptr tag;
|
|
606
|
+
if (!RestoreStack(EventType::kLock, last_lock.sid(), last_lock.epoch(),
|
|
607
|
+
addr, 0, kAccessWrite, &tid, &trace, mset, &tag))
|
|
608
|
+
return;
|
|
609
|
+
rep->AddStack(trace, true);
|
|
610
|
+
rep->AddLocation(addr, 1);
|
|
611
|
+
#if SANITIZER_APPLE
|
|
612
|
+
} // Close this scope to release the locks
|
|
613
|
+
#endif
|
|
614
|
+
OutputReport(thr, *rep);
|
|
615
|
+
|
|
616
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
617
|
+
rep->~ScopedReport();
|
|
618
|
+
#if !SANITIZER_APPLE
|
|
619
|
+
}
|
|
620
|
+
#endif
|
|
576
621
|
}
|
|
577
622
|
|
|
578
623
|
} // namespace __tsan
|
|
@@ -11,10 +11,12 @@
|
|
|
11
11
|
//===----------------------------------------------------------------------===//
|
|
12
12
|
|
|
13
13
|
#include "sanitizer_common/sanitizer_common.h"
|
|
14
|
+
#include "sanitizer_common/sanitizer_internal_defs.h"
|
|
14
15
|
#include "sanitizer_common/sanitizer_libc.h"
|
|
15
16
|
#include "sanitizer_common/sanitizer_placement_new.h"
|
|
16
17
|
#include "sanitizer_common/sanitizer_stackdepot.h"
|
|
17
18
|
#include "sanitizer_common/sanitizer_stacktrace.h"
|
|
19
|
+
#include "tsan_defs.h"
|
|
18
20
|
#include "tsan_fd.h"
|
|
19
21
|
#include "tsan_flags.h"
|
|
20
22
|
#include "tsan_mman.h"
|
|
@@ -109,7 +111,13 @@ static ReportStack *SymbolizeStack(StackTrace trace) {
|
|
|
109
111
|
// instruction.
|
|
110
112
|
if ((pc & kExternalPCBit) == 0)
|
|
111
113
|
pc1 = StackTrace::GetPreviousInstructionPc(pc);
|
|
112
|
-
SymbolizedStack
|
|
114
|
+
SymbolizedStack* ent = SymbolizeCode(pc1, si == trace.size - 1);
|
|
115
|
+
#if SANITIZER_GO
|
|
116
|
+
if (ent == nullptr) {
|
|
117
|
+
// Go might have 0 frames for this PC (wrapper frames aren't reported).
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
#endif
|
|
113
121
|
CHECK_NE(ent, 0);
|
|
114
122
|
SymbolizedStack *last = ent;
|
|
115
123
|
while (last->next) {
|
|
@@ -187,10 +195,8 @@ void ScopedReportBase::AddMemoryAccess(uptr addr, uptr external_tag, Shadow s,
|
|
|
187
195
|
mop->size = size;
|
|
188
196
|
mop->write = !(typ & kAccessRead);
|
|
189
197
|
mop->atomic = typ & kAccessAtomic;
|
|
190
|
-
mop->stack = SymbolizeStack(stack);
|
|
191
198
|
mop->external_tag = external_tag;
|
|
192
|
-
|
|
193
|
-
mop->stack->suppressable = true;
|
|
199
|
+
mop->stack_trace = stack;
|
|
194
200
|
for (uptr i = 0; i < mset->Size(); i++) {
|
|
195
201
|
MutexSet::Desc d = mset->Get(i);
|
|
196
202
|
int id = this->AddMutex(d.addr, d.stack_id);
|
|
@@ -199,6 +205,56 @@ void ScopedReportBase::AddMemoryAccess(uptr addr, uptr external_tag, Shadow s,
|
|
|
199
205
|
}
|
|
200
206
|
}
|
|
201
207
|
|
|
208
|
+
void ScopedReportBase::SymbolizeStackElems() {
|
|
209
|
+
// symbolize memory ops
|
|
210
|
+
for (usize i = 0, size = rep_->mops.Size(); i < size; i++) {
|
|
211
|
+
ReportMop *mop = rep_->mops[i];
|
|
212
|
+
mop->stack = SymbolizeStack(mop->stack_trace);
|
|
213
|
+
if (mop->stack)
|
|
214
|
+
mop->stack->suppressable = true;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// symbolize locations
|
|
218
|
+
for (usize i = 0, size = rep_->locs.Size(); i < size; i++) {
|
|
219
|
+
// added locations have a NULL placeholder - don't dereference them
|
|
220
|
+
if (ReportLocation *loc = rep_->locs[i])
|
|
221
|
+
loc->stack = SymbolizeStackId(loc->stack_id);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// symbolize any added locations
|
|
225
|
+
for (usize i = 0, size = rep_->added_location_addrs.Size(); i < size; i++) {
|
|
226
|
+
AddedLocationAddr *added_loc = &rep_->added_location_addrs[i];
|
|
227
|
+
if (ReportLocation *loc = SymbolizeData(added_loc->addr)) {
|
|
228
|
+
loc->suppressable = true;
|
|
229
|
+
rep_->locs[added_loc->locs_idx] = loc;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Filter out any added location placeholders that could not be symbolized
|
|
234
|
+
usize j = 0;
|
|
235
|
+
for (usize i = 0, size = rep_->locs.Size(); i < size; i++) {
|
|
236
|
+
if (rep_->locs[i] != nullptr) {
|
|
237
|
+
rep_->locs[j] = rep_->locs[i];
|
|
238
|
+
j++;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
rep_->locs.Resize(j);
|
|
242
|
+
|
|
243
|
+
// symbolize threads
|
|
244
|
+
for (usize i = 0, size = rep_->threads.Size(); i < size; i++) {
|
|
245
|
+
ReportThread *rt = rep_->threads[i];
|
|
246
|
+
rt->stack = SymbolizeStackId(rt->stack_id);
|
|
247
|
+
if (rt->stack)
|
|
248
|
+
rt->stack->suppressable = rt->suppressable;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// symbolize mutexes
|
|
252
|
+
for (usize i = 0, size = rep_->mutexes.Size(); i < size; i++) {
|
|
253
|
+
ReportMutex *rm = rep_->mutexes[i];
|
|
254
|
+
rm->stack = SymbolizeStackId(rm->stack_id);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
202
258
|
void ScopedReportBase::AddUniqueTid(Tid unique_tid) {
|
|
203
259
|
rep_->unique_tids.PushBack(unique_tid);
|
|
204
260
|
}
|
|
@@ -216,10 +272,8 @@ void ScopedReportBase::AddThread(const ThreadContext *tctx, bool suppressable) {
|
|
|
216
272
|
rt->name = internal_strdup(tctx->name);
|
|
217
273
|
rt->parent_tid = tctx->parent_tid;
|
|
218
274
|
rt->thread_type = tctx->thread_type;
|
|
219
|
-
rt->
|
|
220
|
-
rt->
|
|
221
|
-
if (rt->stack)
|
|
222
|
-
rt->stack->suppressable = suppressable;
|
|
275
|
+
rt->stack_id = tctx->creation_stack_id;
|
|
276
|
+
rt->suppressable = suppressable;
|
|
223
277
|
}
|
|
224
278
|
|
|
225
279
|
#if !SANITIZER_GO
|
|
@@ -270,7 +324,7 @@ int ScopedReportBase::AddMutex(uptr addr, StackID creation_stack_id) {
|
|
|
270
324
|
rep_->mutexes.PushBack(rm);
|
|
271
325
|
rm->id = rep_->mutexes.Size() - 1;
|
|
272
326
|
rm->addr = addr;
|
|
273
|
-
rm->
|
|
327
|
+
rm->stack_id = creation_stack_id;
|
|
274
328
|
return rm->id;
|
|
275
329
|
}
|
|
276
330
|
|
|
@@ -288,7 +342,7 @@ void ScopedReportBase::AddLocation(uptr addr, uptr size) {
|
|
|
288
342
|
loc->fd_closed = closed;
|
|
289
343
|
loc->fd = fd;
|
|
290
344
|
loc->tid = creat_tid;
|
|
291
|
-
loc->
|
|
345
|
+
loc->stack_id = creat_stack;
|
|
292
346
|
rep_->locs.PushBack(loc);
|
|
293
347
|
AddThread(creat_tid);
|
|
294
348
|
return;
|
|
@@ -310,7 +364,7 @@ void ScopedReportBase::AddLocation(uptr addr, uptr size) {
|
|
|
310
364
|
loc->heap_chunk_size = b->siz;
|
|
311
365
|
loc->external_tag = b->tag;
|
|
312
366
|
loc->tid = b->tid;
|
|
313
|
-
loc->
|
|
367
|
+
loc->stack_id = b->stk;
|
|
314
368
|
rep_->locs.PushBack(loc);
|
|
315
369
|
AddThread(b->tid);
|
|
316
370
|
return;
|
|
@@ -324,11 +378,8 @@ void ScopedReportBase::AddLocation(uptr addr, uptr size) {
|
|
|
324
378
|
AddThread(tctx);
|
|
325
379
|
}
|
|
326
380
|
#endif
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
rep_->locs.PushBack(loc);
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
381
|
+
rep_->added_location_addrs.PushBack({addr, rep_->locs.Size()});
|
|
382
|
+
rep_->locs.PushBack(nullptr);
|
|
332
383
|
}
|
|
333
384
|
|
|
334
385
|
#if !SANITIZER_GO
|
|
@@ -628,11 +679,12 @@ static bool HandleRacyStacks(ThreadState *thr, VarSizeStackTrace traces[2]) {
|
|
|
628
679
|
return false;
|
|
629
680
|
}
|
|
630
681
|
|
|
631
|
-
bool OutputReport(ThreadState *thr,
|
|
682
|
+
bool OutputReport(ThreadState *thr, ScopedReport &srep) {
|
|
632
683
|
// These should have been checked in ShouldReport.
|
|
633
684
|
// It's too late to check them here, we have already taken locks.
|
|
634
685
|
CHECK(flags()->report_bugs);
|
|
635
686
|
CHECK(!thr->suppress_reports);
|
|
687
|
+
srep.SymbolizeStackElems();
|
|
636
688
|
atomic_store_relaxed(&ctx->last_symbolize_time_ns, NanoTime());
|
|
637
689
|
const ReportDesc *rep = srep.GetReport();
|
|
638
690
|
CHECK_EQ(thr->current_report, nullptr);
|
|
@@ -761,65 +813,80 @@ void ReportRace(ThreadState *thr, RawShadow *shadow_mem, Shadow cur, Shadow old,
|
|
|
761
813
|
DynamicMutexSet mset1;
|
|
762
814
|
MutexSet *mset[kMop] = {&thr->mset, mset1};
|
|
763
815
|
|
|
764
|
-
//
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
816
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
817
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
818
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
819
|
+
// before symbolizing in order to avoid a deadlock
|
|
820
|
+
{
|
|
821
|
+
// We need to lock the slot during RestoreStack because it protects
|
|
822
|
+
// the slot journal.
|
|
823
|
+
Lock slot_lock(&ctx->slots[static_cast<uptr>(s[1].sid())].mtx);
|
|
824
|
+
ThreadRegistryLock l0(&ctx->thread_registry);
|
|
825
|
+
Lock slots_lock(&ctx->slot_mtx);
|
|
826
|
+
if (SpuriousRace(old))
|
|
827
|
+
return;
|
|
828
|
+
if (!RestoreStack(EventType::kAccessExt, s[1].sid(), s[1].epoch(), addr1,
|
|
829
|
+
size1, typ1, &tids[1], &traces[1], mset[1], &tags[1])) {
|
|
830
|
+
StoreShadow(&ctx->last_spurious_race, old.raw());
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
776
833
|
|
|
777
|
-
|
|
778
|
-
|
|
834
|
+
if (IsFiredSuppression(ctx, rep_typ, traces[1]))
|
|
835
|
+
return;
|
|
779
836
|
|
|
780
|
-
|
|
781
|
-
|
|
837
|
+
if (HandleRacyStacks(thr, traces))
|
|
838
|
+
return;
|
|
782
839
|
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
840
|
+
// If any of the accesses has a tag, treat this as an "external" race.
|
|
841
|
+
uptr tag = kExternalTagNone;
|
|
842
|
+
for (uptr i = 0; i < kMop; i++) {
|
|
843
|
+
if (tags[i] != kExternalTagNone) {
|
|
844
|
+
rep_typ = ReportTypeExternalRace;
|
|
845
|
+
tag = tags[i];
|
|
846
|
+
break;
|
|
847
|
+
}
|
|
790
848
|
}
|
|
791
|
-
}
|
|
792
849
|
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
850
|
+
new (rep) ScopedReport(rep_typ, tag);
|
|
851
|
+
for (uptr i = 0; i < kMop; i++)
|
|
852
|
+
rep->AddMemoryAccess(addr, tags[i], s[i], tids[i], traces[i], mset[i]);
|
|
796
853
|
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
854
|
+
for (uptr i = 0; i < kMop; i++) {
|
|
855
|
+
ThreadContext *tctx = static_cast<ThreadContext *>(
|
|
856
|
+
ctx->thread_registry.GetThreadLocked(tids[i]));
|
|
857
|
+
rep->AddThread(tctx);
|
|
858
|
+
}
|
|
802
859
|
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
860
|
+
rep->AddLocation(addr_min, addr_max - addr_min);
|
|
861
|
+
|
|
862
|
+
if (flags()->print_full_thread_history) {
|
|
863
|
+
const ReportDesc *rep_desc = rep->GetReport();
|
|
864
|
+
for (uptr i = 0; i < rep_desc->threads.Size(); i++) {
|
|
865
|
+
Tid parent_tid = rep_desc->threads[i]->parent_tid;
|
|
866
|
+
if (parent_tid == kMainTid || parent_tid == kInvalidTid)
|
|
867
|
+
continue;
|
|
868
|
+
ThreadContext *parent_tctx = static_cast<ThreadContext *>(
|
|
869
|
+
ctx->thread_registry.GetThreadLocked(parent_tid));
|
|
870
|
+
rep->AddThread(parent_tctx);
|
|
871
|
+
}
|
|
814
872
|
}
|
|
815
|
-
}
|
|
816
873
|
|
|
817
874
|
#if !SANITIZER_GO
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
875
|
+
if (!((typ0 | typ1) & kAccessFree) &&
|
|
876
|
+
s[1].epoch() <= thr->last_sleep_clock.Get(s[1].sid()))
|
|
877
|
+
rep->AddSleep(thr->last_sleep_stack_id);
|
|
878
|
+
#endif
|
|
879
|
+
|
|
880
|
+
#if SANITIZER_APPLE
|
|
881
|
+
} // Close this scope to release the locks
|
|
882
|
+
#endif
|
|
883
|
+
OutputReport(thr, *rep);
|
|
884
|
+
|
|
885
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
886
|
+
rep->~ScopedReport();
|
|
887
|
+
#if !SANITIZER_APPLE
|
|
888
|
+
}
|
|
821
889
|
#endif
|
|
822
|
-
OutputReport(thr, rep);
|
|
823
890
|
}
|
|
824
891
|
|
|
825
892
|
void PrintCurrentStack(ThreadState *thr, uptr pc) {
|