@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
|
@@ -94,17 +94,17 @@ class SuspendedThreadsListLinux final : public SuspendedThreadsList {
|
|
|
94
94
|
public:
|
|
95
95
|
SuspendedThreadsListLinux() { thread_ids_.reserve(1024); }
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
ThreadID GetThreadID(uptr index) const override;
|
|
98
98
|
uptr ThreadCount() const override;
|
|
99
|
-
bool ContainsTid(
|
|
100
|
-
void Append(
|
|
99
|
+
bool ContainsTid(ThreadID thread_id) const;
|
|
100
|
+
void Append(ThreadID tid);
|
|
101
101
|
|
|
102
102
|
PtraceRegistersStatus GetRegistersAndSP(uptr index,
|
|
103
103
|
InternalMmapVector<uptr> *buffer,
|
|
104
104
|
uptr *sp) const override;
|
|
105
105
|
|
|
106
106
|
private:
|
|
107
|
-
InternalMmapVector<
|
|
107
|
+
InternalMmapVector<ThreadID> thread_ids_;
|
|
108
108
|
};
|
|
109
109
|
|
|
110
110
|
// Structure for passing arguments into the tracer thread.
|
|
@@ -137,10 +137,10 @@ class ThreadSuspender {
|
|
|
137
137
|
private:
|
|
138
138
|
SuspendedThreadsListLinux suspended_threads_list_;
|
|
139
139
|
pid_t pid_;
|
|
140
|
-
bool SuspendThread(
|
|
140
|
+
bool SuspendThread(ThreadID thread_id);
|
|
141
141
|
};
|
|
142
142
|
|
|
143
|
-
bool ThreadSuspender::SuspendThread(
|
|
143
|
+
bool ThreadSuspender::SuspendThread(ThreadID tid) {
|
|
144
144
|
int pterrno;
|
|
145
145
|
if (internal_iserror(internal_ptrace(PTRACE_ATTACH, tid, nullptr, nullptr),
|
|
146
146
|
&pterrno)) {
|
|
@@ -210,7 +210,7 @@ void ThreadSuspender::KillAllThreads() {
|
|
|
210
210
|
bool ThreadSuspender::SuspendAllThreads() {
|
|
211
211
|
ThreadLister thread_lister(pid_);
|
|
212
212
|
bool retry = true;
|
|
213
|
-
InternalMmapVector<
|
|
213
|
+
InternalMmapVector<ThreadID> threads;
|
|
214
214
|
threads.reserve(128);
|
|
215
215
|
for (int i = 0; i < 30 && retry; ++i) {
|
|
216
216
|
retry = false;
|
|
@@ -226,7 +226,7 @@ bool ThreadSuspender::SuspendAllThreads() {
|
|
|
226
226
|
case ThreadLister::Ok:
|
|
227
227
|
break;
|
|
228
228
|
}
|
|
229
|
-
for (
|
|
229
|
+
for (ThreadID tid : threads) {
|
|
230
230
|
// Are we already attached to this thread?
|
|
231
231
|
// Currently this check takes linear time, however the number of threads
|
|
232
232
|
// is usually small.
|
|
@@ -403,7 +403,77 @@ struct ScopedSetTracerPID {
|
|
|
403
403
|
}
|
|
404
404
|
};
|
|
405
405
|
|
|
406
|
+
// This detects whether ptrace is blocked (e.g., by seccomp), by forking and
|
|
407
|
+
// then attempting ptrace.
|
|
408
|
+
// This separate check is necessary because StopTheWorld() creates a thread
|
|
409
|
+
// with a shared virtual address space and shared TLS, and therefore
|
|
410
|
+
// cannot use waitpid() due to the shared errno.
|
|
411
|
+
static void TestPTrace() {
|
|
412
|
+
# if SANITIZER_SPARC
|
|
413
|
+
// internal_fork() on SPARC actually calls __fork(). We can't safely fork,
|
|
414
|
+
// because it's possible seccomp has been configured to disallow fork() but
|
|
415
|
+
// allow clone().
|
|
416
|
+
VReport(1, "WARNING: skipping TestPTrace() because this is SPARC\n");
|
|
417
|
+
VReport(1,
|
|
418
|
+
"If seccomp blocks ptrace, LeakSanitizer may hang without further "
|
|
419
|
+
"notice\n");
|
|
420
|
+
VReport(
|
|
421
|
+
1,
|
|
422
|
+
"If seccomp does not block ptrace, you can safely ignore this warning\n");
|
|
423
|
+
# else
|
|
424
|
+
// Heuristic: only check the first time this is called. This is not always
|
|
425
|
+
// correct (e.g., user manually triggers leak detection, then updates
|
|
426
|
+
// seccomp, then leak detection is triggered again).
|
|
427
|
+
static bool checked = false;
|
|
428
|
+
if (checked)
|
|
429
|
+
return;
|
|
430
|
+
checked = true;
|
|
431
|
+
|
|
432
|
+
// Hopefully internal_fork() is not too expensive, thanks to copy-on-write.
|
|
433
|
+
// Besides, this is only called the first time.
|
|
434
|
+
// Note that internal_fork() on non-SPARC Linux actually calls
|
|
435
|
+
// SYSCALL(clone); thus, it is reasonable to use it because if seccomp kills
|
|
436
|
+
// TestPTrace(), it would have killed StopTheWorld() anyway.
|
|
437
|
+
int pid = internal_fork();
|
|
438
|
+
|
|
439
|
+
if (pid < 0) {
|
|
440
|
+
int rverrno;
|
|
441
|
+
if (internal_iserror(pid, &rverrno))
|
|
442
|
+
VReport(0, "WARNING: TestPTrace() failed to fork (errno %d)\n", rverrno);
|
|
443
|
+
|
|
444
|
+
// We don't abort the sanitizer - it's still worth letting the sanitizer
|
|
445
|
+
// try.
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
if (pid == 0) {
|
|
450
|
+
// Child subprocess
|
|
451
|
+
|
|
452
|
+
// TODO: consider checking return value of internal_ptrace, to handle
|
|
453
|
+
// SCMP_ACT_ERRNO. However, be careful not to consume too many
|
|
454
|
+
// resources performing a proper ptrace.
|
|
455
|
+
internal_ptrace(PTRACE_ATTACH, 0, nullptr, nullptr);
|
|
456
|
+
internal__exit(0);
|
|
457
|
+
} else {
|
|
458
|
+
int wstatus;
|
|
459
|
+
internal_waitpid(pid, &wstatus, 0);
|
|
460
|
+
|
|
461
|
+
// Handle SCMP_ACT_KILL
|
|
462
|
+
if (WIFSIGNALED(wstatus)) {
|
|
463
|
+
VReport(0,
|
|
464
|
+
"WARNING: ptrace appears to be blocked (is seccomp enabled?). "
|
|
465
|
+
"LeakSanitizer may hang.\n");
|
|
466
|
+
VReport(0, "Child exited with signal %d.\n", WTERMSIG(wstatus));
|
|
467
|
+
// We don't abort the sanitizer - it's still worth letting the sanitizer
|
|
468
|
+
// try.
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
# endif
|
|
472
|
+
}
|
|
473
|
+
|
|
406
474
|
void StopTheWorld(StopTheWorldCallback callback, void *argument) {
|
|
475
|
+
TestPTrace();
|
|
476
|
+
|
|
407
477
|
StopTheWorldScope in_stoptheworld;
|
|
408
478
|
// Prepare the arguments for TracerThread.
|
|
409
479
|
struct TracerThreadArgument tracer_thread_argument;
|
|
@@ -457,7 +527,8 @@ void StopTheWorld(StopTheWorldCallback callback, void *argument) {
|
|
|
457
527
|
internal_prctl(PR_SET_PTRACER, tracer_pid, 0, 0, 0);
|
|
458
528
|
// Allow the tracer thread to start.
|
|
459
529
|
tracer_thread_argument.mutex.Unlock();
|
|
460
|
-
// NOTE: errno is shared between this thread and the tracer thread
|
|
530
|
+
// NOTE: errno is shared between this thread and the tracer thread
|
|
531
|
+
// (clone was called without CLONE_SETTLS / newtls).
|
|
461
532
|
// internal_waitpid() may call syscall() which can access/spoil errno,
|
|
462
533
|
// so we can't call it now. Instead we for the tracer thread to finish using
|
|
463
534
|
// the spin loop below. Man page for sched_yield() says "In the Linux
|
|
@@ -546,7 +617,7 @@ static constexpr uptr kExtraRegs[] = {0};
|
|
|
546
617
|
#error "Unsupported architecture"
|
|
547
618
|
#endif // SANITIZER_ANDROID && defined(__arm__)
|
|
548
619
|
|
|
549
|
-
|
|
620
|
+
ThreadID SuspendedThreadsListLinux::GetThreadID(uptr index) const {
|
|
550
621
|
CHECK_LT(index, thread_ids_.size());
|
|
551
622
|
return thread_ids_[index];
|
|
552
623
|
}
|
|
@@ -555,14 +626,14 @@ uptr SuspendedThreadsListLinux::ThreadCount() const {
|
|
|
555
626
|
return thread_ids_.size();
|
|
556
627
|
}
|
|
557
628
|
|
|
558
|
-
bool SuspendedThreadsListLinux::ContainsTid(
|
|
629
|
+
bool SuspendedThreadsListLinux::ContainsTid(ThreadID thread_id) const {
|
|
559
630
|
for (uptr i = 0; i < thread_ids_.size(); i++) {
|
|
560
631
|
if (thread_ids_[i] == thread_id) return true;
|
|
561
632
|
}
|
|
562
633
|
return false;
|
|
563
634
|
}
|
|
564
635
|
|
|
565
|
-
void SuspendedThreadsListLinux::Append(
|
|
636
|
+
void SuspendedThreadsListLinux::Append(ThreadID tid) {
|
|
566
637
|
thread_ids_.push_back(tid);
|
|
567
638
|
}
|
|
568
639
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
namespace __sanitizer {
|
|
25
25
|
typedef struct {
|
|
26
|
-
|
|
26
|
+
ThreadID tid;
|
|
27
27
|
thread_t thread;
|
|
28
28
|
} SuspendedThreadInfo;
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ class SuspendedThreadsListMac final : public SuspendedThreadsList {
|
|
|
31
31
|
public:
|
|
32
32
|
SuspendedThreadsListMac() = default;
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
ThreadID GetThreadID(uptr index) const override;
|
|
35
35
|
thread_t GetThread(uptr index) const;
|
|
36
36
|
uptr ThreadCount() const override;
|
|
37
37
|
bool ContainsThread(thread_t thread) const;
|
|
@@ -111,7 +111,7 @@ typedef x86_thread_state32_t regs_struct;
|
|
|
111
111
|
#error "Unsupported architecture"
|
|
112
112
|
#endif
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
ThreadID SuspendedThreadsListMac::GetThreadID(uptr index) const {
|
|
115
115
|
CHECK_LT(index, threads_.size());
|
|
116
116
|
return threads_[index].tid;
|
|
117
117
|
}
|
|
@@ -52,17 +52,17 @@ class SuspendedThreadsListNetBSD final : public SuspendedThreadsList {
|
|
|
52
52
|
public:
|
|
53
53
|
SuspendedThreadsListNetBSD() { thread_ids_.reserve(1024); }
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
ThreadID GetThreadID(uptr index) const;
|
|
56
56
|
uptr ThreadCount() const;
|
|
57
|
-
bool ContainsTid(
|
|
58
|
-
void Append(
|
|
57
|
+
bool ContainsTid(ThreadID thread_id) const;
|
|
58
|
+
void Append(ThreadID tid);
|
|
59
59
|
|
|
60
60
|
PtraceRegistersStatus GetRegistersAndSP(uptr index,
|
|
61
61
|
InternalMmapVector<uptr> *buffer,
|
|
62
62
|
uptr *sp) const;
|
|
63
63
|
|
|
64
64
|
private:
|
|
65
|
-
InternalMmapVector<
|
|
65
|
+
InternalMmapVector<ThreadID> thread_ids_;
|
|
66
66
|
};
|
|
67
67
|
|
|
68
68
|
struct TracerThreadArgument {
|
|
@@ -313,7 +313,7 @@ void StopTheWorld(StopTheWorldCallback callback, void *argument) {
|
|
|
313
313
|
}
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
-
|
|
316
|
+
ThreadID SuspendedThreadsListNetBSD::GetThreadID(uptr index) const {
|
|
317
317
|
CHECK_LT(index, thread_ids_.size());
|
|
318
318
|
return thread_ids_[index];
|
|
319
319
|
}
|
|
@@ -322,7 +322,7 @@ uptr SuspendedThreadsListNetBSD::ThreadCount() const {
|
|
|
322
322
|
return thread_ids_.size();
|
|
323
323
|
}
|
|
324
324
|
|
|
325
|
-
bool SuspendedThreadsListNetBSD::ContainsTid(
|
|
325
|
+
bool SuspendedThreadsListNetBSD::ContainsTid(ThreadID thread_id) const {
|
|
326
326
|
for (uptr i = 0; i < thread_ids_.size(); i++) {
|
|
327
327
|
if (thread_ids_[i] == thread_id)
|
|
328
328
|
return true;
|
|
@@ -330,7 +330,7 @@ bool SuspendedThreadsListNetBSD::ContainsTid(tid_t thread_id) const {
|
|
|
330
330
|
return false;
|
|
331
331
|
}
|
|
332
332
|
|
|
333
|
-
void SuspendedThreadsListNetBSD::Append(
|
|
333
|
+
void SuspendedThreadsListNetBSD::Append(ThreadID tid) {
|
|
334
334
|
thread_ids_.push_back(tid);
|
|
335
335
|
}
|
|
336
336
|
|
|
@@ -38,7 +38,7 @@ struct SuspendedThreadsListWindows final : public SuspendedThreadsList {
|
|
|
38
38
|
InternalMmapVector<uptr> *buffer,
|
|
39
39
|
uptr *sp) const override;
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
ThreadID GetThreadID(uptr index) const override;
|
|
42
42
|
uptr ThreadCount() const override;
|
|
43
43
|
};
|
|
44
44
|
|
|
@@ -68,7 +68,7 @@ PtraceRegistersStatus SuspendedThreadsListWindows::GetRegistersAndSP(
|
|
|
68
68
|
return REGISTERS_AVAILABLE;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
ThreadID SuspendedThreadsListWindows::GetThreadID(uptr index) const {
|
|
72
72
|
CHECK_LT(index, threadIds.size());
|
|
73
73
|
return threadIds[index];
|
|
74
74
|
}
|
|
@@ -83,7 +83,7 @@ class SymbolizerProcess {
|
|
|
83
83
|
const char *SendCommand(const char *command);
|
|
84
84
|
|
|
85
85
|
protected:
|
|
86
|
-
~SymbolizerProcess()
|
|
86
|
+
~SymbolizerProcess();
|
|
87
87
|
|
|
88
88
|
/// The maximum number of arguments required to invoke a tool process.
|
|
89
89
|
static const unsigned kArgVMax = 16;
|
|
@@ -114,6 +114,10 @@ class SymbolizerProcess {
|
|
|
114
114
|
fd_t input_fd_;
|
|
115
115
|
fd_t output_fd_;
|
|
116
116
|
|
|
117
|
+
// We hold on to the child's stdin fd (the read end of the pipe)
|
|
118
|
+
// so that when we write to it, we don't get a SIGPIPE
|
|
119
|
+
fd_t child_stdin_fd_;
|
|
120
|
+
|
|
117
121
|
InternalMmapVector<char> buffer_;
|
|
118
122
|
|
|
119
123
|
static const uptr kMaxTimesRestarted = 5;
|
|
@@ -476,10 +476,11 @@ const char *LLVMSymbolizer::FormatAndSendCommand(const char *command_prefix,
|
|
|
476
476
|
return symbolizer_process_->SendCommand(buffer_);
|
|
477
477
|
}
|
|
478
478
|
|
|
479
|
-
SymbolizerProcess::SymbolizerProcess(const char
|
|
479
|
+
SymbolizerProcess::SymbolizerProcess(const char* path, bool use_posix_spawn)
|
|
480
480
|
: path_(path),
|
|
481
481
|
input_fd_(kInvalidFd),
|
|
482
482
|
output_fd_(kInvalidFd),
|
|
483
|
+
child_stdin_fd_(kInvalidFd),
|
|
483
484
|
times_restarted_(0),
|
|
484
485
|
failed_to_start_(false),
|
|
485
486
|
reported_invalid_path_(false),
|
|
@@ -488,6 +489,11 @@ SymbolizerProcess::SymbolizerProcess(const char *path, bool use_posix_spawn)
|
|
|
488
489
|
CHECK_NE(path_[0], '\0');
|
|
489
490
|
}
|
|
490
491
|
|
|
492
|
+
SymbolizerProcess::~SymbolizerProcess() {
|
|
493
|
+
if (child_stdin_fd_ != kInvalidFd)
|
|
494
|
+
CloseFile(child_stdin_fd_);
|
|
495
|
+
}
|
|
496
|
+
|
|
491
497
|
static bool IsSameModule(const char *path) {
|
|
492
498
|
if (const char *ProcessName = GetProcessName()) {
|
|
493
499
|
if (const char *SymbolizerName = StripModuleName(path)) {
|
|
@@ -533,6 +539,10 @@ bool SymbolizerProcess::Restart() {
|
|
|
533
539
|
CloseFile(input_fd_);
|
|
534
540
|
if (output_fd_ != kInvalidFd)
|
|
535
541
|
CloseFile(output_fd_);
|
|
542
|
+
if (child_stdin_fd_ != kInvalidFd) {
|
|
543
|
+
CloseFile(child_stdin_fd_);
|
|
544
|
+
child_stdin_fd_ = kInvalidFd; // Don't free in destructor
|
|
545
|
+
}
|
|
536
546
|
return StartSymbolizerSubprocess();
|
|
537
547
|
}
|
|
538
548
|
|
|
@@ -78,13 +78,25 @@ class AtosSymbolizerProcess final : public SymbolizerProcess {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
bool ReachedEndOfOutput(const char *buffer, uptr length) const override {
|
|
81
|
-
|
|
81
|
+
if (common_flags()->symbolize_inline_frames) {
|
|
82
|
+
// When running with -i, atos sends two newlines at the end of each
|
|
83
|
+
// address it symbolizes. This indicates the end of the set of frames
|
|
84
|
+
// for a particular address.
|
|
85
|
+
return length >= 2 && buffer[length - 1] == '\n' &&
|
|
86
|
+
buffer[length - 2] == '\n';
|
|
87
|
+
} else {
|
|
88
|
+
// When running without -i, atos only sends a single newline at
|
|
89
|
+
// the end of each address it symbolizes.
|
|
90
|
+
return length >= 1 && buffer[length - 1] == '\n';
|
|
91
|
+
}
|
|
82
92
|
}
|
|
83
93
|
|
|
84
94
|
void GetArgV(const char *path_to_binary,
|
|
85
95
|
const char *(&argv)[kArgVMax]) const override {
|
|
86
96
|
int i = 0;
|
|
87
97
|
argv[i++] = path_to_binary;
|
|
98
|
+
if (common_flags()->symbolize_inline_frames)
|
|
99
|
+
argv[i++] = "-i";
|
|
88
100
|
argv[i++] = "-p";
|
|
89
101
|
argv[i++] = &pid_str_[0];
|
|
90
102
|
if (GetMacosAlignedVersion() == MacosVersion(10, 9)) {
|
|
@@ -102,12 +114,16 @@ class AtosSymbolizerProcess final : public SymbolizerProcess {
|
|
|
102
114
|
|
|
103
115
|
#undef K_ATOS_ENV_VAR
|
|
104
116
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
// Parses a single frame (one line) from str, and returns the pointer to the
|
|
118
|
+
// next character to parse (i.e. after the newline) if successful. If
|
|
119
|
+
// it fails, returns NULL.
|
|
120
|
+
static const char* ParseCommandOutput(const char* str, uptr addr,
|
|
121
|
+
char** out_name, char** out_module,
|
|
122
|
+
char** out_file, uptr* line,
|
|
123
|
+
uptr* start_address) {
|
|
108
124
|
// Trim ending newlines.
|
|
109
125
|
char *trim;
|
|
110
|
-
ExtractTokenUpToDelimiter(str, "\n", &trim);
|
|
126
|
+
str = ExtractTokenUpToDelimiter(str, "\n", &trim);
|
|
111
127
|
|
|
112
128
|
// The line from `atos` is in one of these formats:
|
|
113
129
|
// myfunction (in library.dylib) (sourcefile.c:17)
|
|
@@ -124,7 +140,7 @@ static bool ParseCommandOutput(const char *str, uptr addr, char **out_name,
|
|
|
124
140
|
if (rest[0] == '\0') {
|
|
125
141
|
InternalFree(symbol_name);
|
|
126
142
|
InternalFree(trim);
|
|
127
|
-
return
|
|
143
|
+
return NULL;
|
|
128
144
|
}
|
|
129
145
|
|
|
130
146
|
if (internal_strncmp(symbol_name, "0x", 2) != 0)
|
|
@@ -149,7 +165,7 @@ static bool ParseCommandOutput(const char *str, uptr addr, char **out_name,
|
|
|
149
165
|
}
|
|
150
166
|
|
|
151
167
|
InternalFree(trim);
|
|
152
|
-
return
|
|
168
|
+
return str;
|
|
153
169
|
}
|
|
154
170
|
|
|
155
171
|
AtosSymbolizer::AtosSymbolizer(const char *path, LowLevelAllocator *allocator)
|
|
@@ -161,31 +177,72 @@ bool AtosSymbolizer::SymbolizePC(uptr addr, SymbolizedStack *stack) {
|
|
|
161
177
|
char command[32];
|
|
162
178
|
internal_snprintf(command, sizeof(command), "0x%zx\n", addr);
|
|
163
179
|
const char *buf = process_->SendCommand(command);
|
|
164
|
-
if (!buf)
|
|
165
|
-
uptr line;
|
|
166
|
-
uptr start_address = AddressInfo::kUnknown;
|
|
167
|
-
if (!ParseCommandOutput(buf, addr, &stack->info.function, &stack->info.module,
|
|
168
|
-
&stack->info.file, &line, &start_address)) {
|
|
169
|
-
Report("WARNING: atos failed to symbolize address \"0x%zx\"\n", addr);
|
|
180
|
+
if (!buf)
|
|
170
181
|
return false;
|
|
171
|
-
}
|
|
172
|
-
stack->info.line = (int)line;
|
|
173
|
-
|
|
174
|
-
if (start_address == AddressInfo::kUnknown) {
|
|
175
|
-
// Fallback to dladdr() to get function start address if atos doesn't report
|
|
176
|
-
// it.
|
|
177
|
-
Dl_info info;
|
|
178
|
-
int result = dladdr((const void *)addr, &info);
|
|
179
|
-
if (result)
|
|
180
|
-
start_address = reinterpret_cast<uptr>(info.dli_saddr);
|
|
181
|
-
}
|
|
182
182
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
183
|
+
SymbolizedStack* last = stack;
|
|
184
|
+
bool top_frame = true;
|
|
185
|
+
|
|
186
|
+
// Parse one line of input (i.e. one frame).
|
|
187
|
+
//
|
|
188
|
+
// When symbolize_inline_frames=true, an empty line
|
|
189
|
+
// (i.e. \n at the beginning of a line) indicates that the last
|
|
190
|
+
// frame has been sent.
|
|
191
|
+
//
|
|
192
|
+
// When symbolize_inline_frames=false, the symbolizer will send only
|
|
193
|
+
// one frame (without a empty line), so loop runs exactly once
|
|
194
|
+
// and hits an early `break`.
|
|
195
|
+
while (*buf != '\n') {
|
|
196
|
+
uptr line;
|
|
197
|
+
uptr start_address = AddressInfo::kUnknown;
|
|
198
|
+
|
|
199
|
+
SymbolizedStack* cur;
|
|
200
|
+
if (top_frame) {
|
|
201
|
+
cur = stack;
|
|
202
|
+
} else {
|
|
203
|
+
cur = SymbolizedStack::New(stack->info.address);
|
|
204
|
+
cur->info.FillModuleInfo(stack->info.module, stack->info.module_offset,
|
|
205
|
+
stack->info.module_arch);
|
|
206
|
+
last->next = cur;
|
|
207
|
+
last = cur;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Parse one line of input (i.e. one frame)
|
|
211
|
+
// If this succeeds, buf will be updated to point to the first character
|
|
212
|
+
// after the newline.
|
|
213
|
+
buf = ParseCommandOutput(buf, addr, &cur->info.function, &cur->info.module,
|
|
214
|
+
&cur->info.file, &line, &start_address);
|
|
215
|
+
|
|
216
|
+
// Upon failure, ParseCommandOutput returns NULL.
|
|
217
|
+
if (!buf) {
|
|
218
|
+
Report("WARNING: atos failed to symbolize address \"0x%zx\"\n", addr);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
cur->info.line = (int)line;
|
|
222
|
+
|
|
223
|
+
if (top_frame && start_address == AddressInfo::kUnknown) {
|
|
224
|
+
// Fallback to dladdr() to get function start address if atos doesn't
|
|
225
|
+
// report it.
|
|
226
|
+
Dl_info info;
|
|
227
|
+
int result = dladdr((const void*)addr, &info);
|
|
228
|
+
if (result)
|
|
229
|
+
start_address = reinterpret_cast<uptr>(info.dli_saddr);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Only assign to `function_offset` if we were able to get the function's
|
|
233
|
+
// start address and we got a sensible `start_address` (dladdr doesn't
|
|
234
|
+
// always ensure that `addr >= sym_addr`).
|
|
235
|
+
if (start_address != AddressInfo::kUnknown && addr >= start_address) {
|
|
236
|
+
cur->info.function_offset = addr - start_address;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// atos only sends one line when inline frames are off
|
|
240
|
+
if (!common_flags()->symbolize_inline_frames)
|
|
241
|
+
break;
|
|
242
|
+
|
|
243
|
+
top_frame = false;
|
|
188
244
|
}
|
|
245
|
+
|
|
189
246
|
return true;
|
|
190
247
|
}
|
|
191
248
|
|
|
@@ -156,30 +156,34 @@ bool SymbolizerProcess::StartSymbolizerSubprocess() {
|
|
|
156
156
|
Printf("\n");
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
fd_t infd[2] = {}, outfd[2] = {};
|
|
160
|
+
if (!CreateTwoHighNumberedPipes(infd, outfd)) {
|
|
161
|
+
Report(
|
|
162
|
+
"WARNING: Can't create a socket pair to start "
|
|
163
|
+
"external symbolizer (errno: %d)\n",
|
|
164
|
+
errno);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
|
|
159
168
|
if (use_posix_spawn_) {
|
|
160
169
|
# if SANITIZER_APPLE
|
|
161
|
-
|
|
162
|
-
|
|
170
|
+
bool success = internal_spawn(argv, const_cast<const char**>(GetEnvP()),
|
|
171
|
+
&pid, outfd[0], infd[1]);
|
|
172
|
+
if (!success) {
|
|
163
173
|
Report("WARNING: failed to spawn external symbolizer (errno: %d)\n",
|
|
164
174
|
errno);
|
|
175
|
+
internal_close(infd[0]);
|
|
176
|
+
internal_close(outfd[1]);
|
|
165
177
|
return false;
|
|
166
178
|
}
|
|
167
179
|
|
|
168
|
-
|
|
169
|
-
|
|
180
|
+
// We intentionally hold on to the read-end so that we don't get a SIGPIPE
|
|
181
|
+
child_stdin_fd_ = outfd[0];
|
|
182
|
+
|
|
170
183
|
# else // SANITIZER_APPLE
|
|
171
184
|
UNIMPLEMENTED();
|
|
172
185
|
# endif // SANITIZER_APPLE
|
|
173
186
|
} else {
|
|
174
|
-
fd_t infd[2] = {}, outfd[2] = {};
|
|
175
|
-
if (!CreateTwoHighNumberedPipes(infd, outfd)) {
|
|
176
|
-
Report(
|
|
177
|
-
"WARNING: Can't create a socket pair to start "
|
|
178
|
-
"external symbolizer (errno: %d)\n",
|
|
179
|
-
errno);
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
187
|
pid = StartSubprocess(path_, argv, GetEnvP(), /* stdin */ outfd[0],
|
|
184
188
|
/* stdout */ infd[1]);
|
|
185
189
|
if (pid < 0) {
|
|
@@ -187,11 +191,11 @@ bool SymbolizerProcess::StartSymbolizerSubprocess() {
|
|
|
187
191
|
internal_close(outfd[1]);
|
|
188
192
|
return false;
|
|
189
193
|
}
|
|
190
|
-
|
|
191
|
-
input_fd_ = infd[0];
|
|
192
|
-
output_fd_ = outfd[1];
|
|
193
194
|
}
|
|
194
195
|
|
|
196
|
+
input_fd_ = infd[0];
|
|
197
|
+
output_fd_ = outfd[1];
|
|
198
|
+
|
|
195
199
|
CHECK_GT(pid, 0);
|
|
196
200
|
|
|
197
201
|
// Check that symbolizer subprocess started successfully.
|
|
@@ -505,6 +509,13 @@ static void ChooseSymbolizerTools(IntrusiveList<SymbolizerTool> *list,
|
|
|
505
509
|
}
|
|
506
510
|
|
|
507
511
|
# if SANITIZER_APPLE
|
|
512
|
+
if (list->empty()) {
|
|
513
|
+
Report(
|
|
514
|
+
"WARN: No external symbolizers found. Symbols may be missing or "
|
|
515
|
+
"unreliable.\n");
|
|
516
|
+
Report(
|
|
517
|
+
"HINT: Is PATH set? Does sandbox allow file-read of /usr/bin/atos?\n");
|
|
518
|
+
}
|
|
508
519
|
VReport(2, "Using dladdr symbolizer.\n");
|
|
509
520
|
list->push_back(new (*allocator) DlAddrSymbolizer());
|
|
510
521
|
# endif // SANITIZER_APPLE
|
|
@@ -80,7 +80,7 @@ void ThreadContextBase::SetFinished() {
|
|
|
80
80
|
OnFinished();
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
void ThreadContextBase::SetStarted(
|
|
83
|
+
void ThreadContextBase::SetStarted(ThreadID _os_id, ThreadType _thread_type,
|
|
84
84
|
void *arg) {
|
|
85
85
|
status = ThreadStatusRunning;
|
|
86
86
|
os_id = _os_id;
|
|
@@ -228,7 +228,8 @@ static bool FindThreadContextByOsIdCallback(ThreadContextBase *tctx,
|
|
|
228
228
|
tctx->status != ThreadStatusDead);
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
ThreadContextBase *ThreadRegistry::FindThreadContextByOsIDLocked(
|
|
231
|
+
ThreadContextBase *ThreadRegistry::FindThreadContextByOsIDLocked(
|
|
232
|
+
ThreadID os_id) {
|
|
232
233
|
return FindThreadContextLocked(FindThreadContextByOsIdCallback,
|
|
233
234
|
(void *)os_id);
|
|
234
235
|
}
|
|
@@ -322,8 +323,8 @@ ThreadStatus ThreadRegistry::FinishThread(u32 tid) {
|
|
|
322
323
|
return prev_status;
|
|
323
324
|
}
|
|
324
325
|
|
|
325
|
-
void ThreadRegistry::StartThread(u32 tid,
|
|
326
|
-
void *arg) {
|
|
326
|
+
void ThreadRegistry::StartThread(u32 tid, ThreadID os_id,
|
|
327
|
+
ThreadType thread_type, void *arg) {
|
|
327
328
|
ThreadRegistryLock l(this);
|
|
328
329
|
running_threads_++;
|
|
329
330
|
ThreadContextBase *tctx = threads_[tid];
|
|
@@ -43,7 +43,7 @@ class ThreadContextBase {
|
|
|
43
43
|
const u32 tid; // Thread ID. Main thread should have tid = 0.
|
|
44
44
|
u64 unique_id; // Unique thread ID.
|
|
45
45
|
u32 reuse_count; // Number of times this tid was reused.
|
|
46
|
-
|
|
46
|
+
ThreadID os_id; // PID (used for reporting).
|
|
47
47
|
uptr user_id; // Some opaque user thread id (e.g. pthread_t).
|
|
48
48
|
char name[64]; // As annotated by user.
|
|
49
49
|
|
|
@@ -62,7 +62,7 @@ class ThreadContextBase {
|
|
|
62
62
|
void SetDead();
|
|
63
63
|
void SetJoined(void *arg);
|
|
64
64
|
void SetFinished();
|
|
65
|
-
void SetStarted(
|
|
65
|
+
void SetStarted(ThreadID _os_id, ThreadType _thread_type, void *arg);
|
|
66
66
|
void SetCreated(uptr _user_id, u64 _unique_id, bool _detached,
|
|
67
67
|
u32 _parent_tid, u32 _stack_tid, void *arg);
|
|
68
68
|
void Reset();
|
|
@@ -126,7 +126,7 @@ class SANITIZER_MUTEX ThreadRegistry {
|
|
|
126
126
|
// is found.
|
|
127
127
|
ThreadContextBase *FindThreadContextLocked(FindThreadCallback cb,
|
|
128
128
|
void *arg);
|
|
129
|
-
ThreadContextBase *FindThreadContextByOsIDLocked(
|
|
129
|
+
ThreadContextBase *FindThreadContextByOsIDLocked(ThreadID os_id);
|
|
130
130
|
|
|
131
131
|
void SetThreadName(u32 tid, const char *name);
|
|
132
132
|
void SetThreadNameByUserId(uptr user_id, const char *name);
|
|
@@ -134,7 +134,7 @@ class SANITIZER_MUTEX ThreadRegistry {
|
|
|
134
134
|
void JoinThread(u32 tid, void *arg);
|
|
135
135
|
// Finishes thread and returns previous status.
|
|
136
136
|
ThreadStatus FinishThread(u32 tid);
|
|
137
|
-
void StartThread(u32 tid,
|
|
137
|
+
void StartThread(u32 tid, ThreadID os_id, ThreadType thread_type, void *arg);
|
|
138
138
|
u32 ConsumeThreadUserId(uptr user_id);
|
|
139
139
|
void SetThreadUserId(u32 tid, uptr user_id);
|
|
140
140
|
|
|
@@ -108,9 +108,7 @@ int internal_dlinfo(void *handle, int request, void *p) {
|
|
|
108
108
|
|
|
109
109
|
// In contrast to POSIX, on Windows GetCurrentThreadId()
|
|
110
110
|
// returns a system-unique identifier.
|
|
111
|
-
|
|
112
|
-
return GetCurrentThreadId();
|
|
113
|
-
}
|
|
111
|
+
ThreadID GetTid() { return GetCurrentThreadId(); }
|
|
114
112
|
|
|
115
113
|
uptr GetThreadSelf() {
|
|
116
114
|
return GetTid();
|
|
@@ -165,7 +165,7 @@ int __tsan_get_report_mutex(void *report, uptr idx, uptr *mutex_id, void **addr,
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
SANITIZER_INTERFACE_ATTRIBUTE
|
|
168
|
-
int __tsan_get_report_thread(void *report, uptr idx, int *tid,
|
|
168
|
+
int __tsan_get_report_thread(void *report, uptr idx, int *tid, ThreadID *os_id,
|
|
169
169
|
int *running, const char **name, int *parent_tid,
|
|
170
170
|
void **trace, uptr trace_size) {
|
|
171
171
|
const ReportDesc *rep = (ReportDesc *)report;
|
|
@@ -242,7 +242,7 @@ const char *__tsan_locate_address(uptr addr, char *name, uptr name_size,
|
|
|
242
242
|
|
|
243
243
|
SANITIZER_INTERFACE_ATTRIBUTE
|
|
244
244
|
int __tsan_get_alloc_stack(uptr addr, uptr *trace, uptr size, int *thread_id,
|
|
245
|
-
|
|
245
|
+
ThreadID *os_id) {
|
|
246
246
|
MBlock *b = 0;
|
|
247
247
|
Allocator *a = allocator();
|
|
248
248
|
if (a->PointerIsMine((void *)addr)) {
|