@zigc/lib 0.17.0-dev.135 → 0.17.0-dev.224

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/c/stdlib.zig +32 -22
  2. package/compiler/aro/aro/Compilation.zig +0 -3
  3. package/compiler/translate-c/ast.zig +5 -2
  4. package/compiler_rt/arm.zig +3 -3
  5. package/compiler_rt/trunctfhf2.zig +3 -0
  6. package/compiler_rt.zig +1 -22
  7. package/docs/wasm/markdown/Parser.zig +5 -9
  8. package/include/__clang_spirv_builtins.h +12 -12
  9. package/include/__float_float.h +176 -0
  10. package/include/__float_header_macro.h +12 -0
  11. package/include/__float_infinity_nan.h +20 -0
  12. package/include/amo.h +131 -0
  13. package/include/amxavx512intrin.h +215 -1
  14. package/include/amxintrin.h +0 -2
  15. package/include/arm_acle.h +37 -27
  16. package/include/arm_neon.h +218 -82
  17. package/include/arm_sme.h +8 -8
  18. package/include/arm_sve.h +4162 -3782
  19. package/include/avx10_2_512bf16intrin.h +19 -12
  20. package/include/avx10_2_512convertintrin.h +1 -1
  21. package/include/avx10_2_512niintrin.h +31 -31
  22. package/include/avx10_2_512satcvtdsintrin.h +1 -1
  23. package/include/avx10_2bf16intrin.h +54 -45
  24. package/include/avx10_2convertintrin.h +2 -2
  25. package/include/avx10_2copyintrin.h +1 -1
  26. package/include/avx10_2niintrin.h +14 -14
  27. package/include/avx10_2satcvtdsintrin.h +2 -2
  28. package/include/avx2intrin.h +275 -377
  29. package/include/avx512bf16intrin.h +25 -16
  30. package/include/avx512bitalgintrin.h +19 -30
  31. package/include/avx512bwintrin.h +386 -505
  32. package/include/avx512cdintrin.h +42 -55
  33. package/include/avx512dqintrin.h +132 -161
  34. package/include/avx512fintrin.h +1015 -1424
  35. package/include/avx512fp16intrin.h +112 -110
  36. package/include/avx512ifmaintrin.h +32 -34
  37. package/include/avx512ifmavlintrin.h +73 -46
  38. package/include/avx512vbmi2intrin.h +43 -32
  39. package/include/avx512vbmiintrin.h +19 -27
  40. package/include/avx512vbmivlintrin.h +35 -49
  41. package/include/avx512vlbf16intrin.h +32 -22
  42. package/include/avx512vlbitalgintrin.h +37 -53
  43. package/include/avx512vlbwintrin.h +470 -573
  44. package/include/avx512vlcdintrin.h +74 -102
  45. package/include/avx512vldqintrin.h +110 -127
  46. package/include/avx512vlfp16intrin.h +130 -111
  47. package/include/avx512vlintrin.h +945 -1299
  48. package/include/avx512vlvbmi2intrin.h +78 -63
  49. package/include/avx512vlvnniintrin.h +21 -18
  50. package/include/avx512vlvp2intersectintrin.h +2 -2
  51. package/include/avx512vnniintrin.h +10 -10
  52. package/include/avx512vp2intersectintrin.h +1 -2
  53. package/include/avx512vpopcntdqintrin.h +8 -10
  54. package/include/avx512vpopcntdqvlintrin.h +17 -15
  55. package/include/avxifmaintrin.h +16 -0
  56. package/include/avxintrin.h +165 -241
  57. package/include/avxvnniint16intrin.h +118 -99
  58. package/include/avxvnniint8intrin.h +56 -32
  59. package/include/avxvnniintrin.h +16 -8
  60. package/include/cpuid.h +101 -4
  61. package/include/emmintrin.h +168 -168
  62. package/include/f16cintrin.h +23 -9
  63. package/include/float.h +16 -155
  64. package/include/fma4intrin.h +98 -96
  65. package/include/fmaintrin.h +96 -66
  66. package/include/gfniintrin.h +21 -16
  67. package/include/hexagon_types.h +23 -20
  68. package/include/hvx_hexagon_protos.h +649 -860
  69. package/include/immintrin.h +0 -12
  70. package/include/intrin.h +4 -0
  71. package/include/lasxintrin.h +113 -0
  72. package/include/llvm_libc_wrappers/assert.h +3 -5
  73. package/include/llvm_libc_wrappers/ctype.h +3 -115
  74. package/include/llvm_libc_wrappers/inttypes.h +3 -5
  75. package/include/llvm_libc_wrappers/stdio.h +10 -38
  76. package/include/llvm_libc_wrappers/stdlib.h +3 -24
  77. package/include/llvm_libc_wrappers/string.h +2 -70
  78. package/include/llvm_libc_wrappers/time.h +4 -10
  79. package/include/mmintrin.h +188 -257
  80. package/include/module.modulemap +23 -4
  81. package/include/movrs_avx10_2_512intrin.h +2 -2
  82. package/include/movrs_avx10_2intrin.h +4 -4
  83. package/include/pmmintrin.h +12 -24
  84. package/include/ptrauth.h +16 -2
  85. package/include/riscv_mips.h +34 -0
  86. package/include/riscv_nds.h +89 -0
  87. package/include/sifive_vector.h +58 -2
  88. package/include/sm4evexintrin.h +2 -2
  89. package/include/smmintrin.h +77 -59
  90. package/include/spirvintrin.h +194 -0
  91. package/include/stddefer.h +19 -0
  92. package/include/tmmintrin.h +116 -147
  93. package/include/vaesintrin.h +1 -2
  94. package/include/xmmintrin.h +44 -70
  95. package/include/xopintrin.h +20 -10
  96. package/libcxx/include/__algorithm/all_of.h +11 -5
  97. package/libcxx/include/__algorithm/comp.h +4 -0
  98. package/libcxx/include/__algorithm/copy.h +28 -147
  99. package/libcxx/include/__algorithm/copy_backward.h +9 -24
  100. package/libcxx/include/__algorithm/copy_n.h +50 -16
  101. package/libcxx/include/__algorithm/count.h +2 -2
  102. package/libcxx/include/__algorithm/equal.h +43 -55
  103. package/libcxx/include/__algorithm/fill.h +26 -8
  104. package/libcxx/include/__algorithm/fill_n.h +32 -46
  105. package/libcxx/include/__algorithm/find.h +96 -39
  106. package/libcxx/include/__algorithm/find_end.h +105 -0
  107. package/libcxx/include/__algorithm/for_each.h +18 -24
  108. package/libcxx/include/__algorithm/for_each_n.h +20 -47
  109. package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
  110. package/libcxx/include/__algorithm/for_each_segment.h +26 -0
  111. package/libcxx/include/__algorithm/generate.h +4 -2
  112. package/libcxx/include/__algorithm/generate_n.h +19 -6
  113. package/libcxx/include/__algorithm/is_permutation.h +4 -4
  114. package/libcxx/include/__algorithm/iterator_operations.h +3 -0
  115. package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
  116. package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
  117. package/libcxx/include/__algorithm/make_heap.h +16 -4
  118. package/libcxx/include/__algorithm/mismatch.h +2 -2
  119. package/libcxx/include/__algorithm/move.h +8 -19
  120. package/libcxx/include/__algorithm/move_backward.h +9 -24
  121. package/libcxx/include/__algorithm/none_of.h +4 -4
  122. package/libcxx/include/__algorithm/partial_sort.h +1 -1
  123. package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
  124. package/libcxx/include/__algorithm/pstl.h +9 -9
  125. package/libcxx/include/__algorithm/radix_sort.h +27 -25
  126. package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
  127. package/libcxx/include/__algorithm/ranges_equal.h +17 -26
  128. package/libcxx/include/__algorithm/ranges_fill.h +7 -6
  129. package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
  130. package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
  131. package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
  132. package/libcxx/include/__algorithm/rotate.h +27 -44
  133. package/libcxx/include/__algorithm/search_n.h +49 -37
  134. package/libcxx/include/__algorithm/sift_down.h +19 -18
  135. package/libcxx/include/__algorithm/simd_utils.h +33 -4
  136. package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
  137. package/libcxx/include/__algorithm/stable_sort.h +1 -1
  138. package/libcxx/include/__assertion_handler +31 -4
  139. package/libcxx/include/__atomic/atomic.h +36 -60
  140. package/libcxx/include/__atomic/atomic_flag.h +19 -37
  141. package/libcxx/include/__atomic/atomic_ref.h +29 -12
  142. package/libcxx/include/__atomic/atomic_sync.h +127 -55
  143. package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
  144. package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
  145. package/libcxx/include/__atomic/contention_t.h +27 -3
  146. package/libcxx/include/__atomic/floating_point_helper.h +55 -0
  147. package/libcxx/include/__bit/countl.h +1 -2
  148. package/libcxx/include/__bit/countr.h +1 -2
  149. package/libcxx/include/__bit/has_single_bit.h +1 -1
  150. package/libcxx/include/__bit/popcount.h +0 -1
  151. package/libcxx/include/__bit/rotate.h +15 -26
  152. package/libcxx/include/__bit_reference +207 -18
  153. package/libcxx/include/__charconv/from_chars_integral.h +1 -1
  154. package/libcxx/include/__charconv/from_chars_result.h +1 -1
  155. package/libcxx/include/__charconv/to_chars_integral.h +1 -0
  156. package/libcxx/include/__charconv/to_chars_result.h +1 -1
  157. package/libcxx/include/__charconv/traits.h +3 -24
  158. package/libcxx/include/__chrono/day.h +11 -0
  159. package/libcxx/include/__chrono/duration.h +58 -33
  160. package/libcxx/include/__chrono/file_clock.h +4 -2
  161. package/libcxx/include/__chrono/is_clock.h +72 -0
  162. package/libcxx/include/__chrono/leap_second.h +13 -0
  163. package/libcxx/include/__chrono/month.h +13 -0
  164. package/libcxx/include/__chrono/month_weekday.h +22 -0
  165. package/libcxx/include/__chrono/monthday.h +20 -0
  166. package/libcxx/include/__chrono/steady_clock.h +1 -1
  167. package/libcxx/include/__chrono/system_clock.h +3 -3
  168. package/libcxx/include/__chrono/time_point.h +37 -13
  169. package/libcxx/include/__chrono/weekday.h +25 -0
  170. package/libcxx/include/__chrono/year.h +11 -0
  171. package/libcxx/include/__chrono/year_month.h +13 -0
  172. package/libcxx/include/__chrono/year_month_day.h +23 -0
  173. package/libcxx/include/__chrono/year_month_weekday.h +26 -0
  174. package/libcxx/include/__chrono/zoned_time.h +16 -0
  175. package/libcxx/include/__compare/is_eq.h +6 -6
  176. package/libcxx/include/__compare/strong_order.h +12 -30
  177. package/libcxx/include/__compare/three_way_comparable.h +2 -2
  178. package/libcxx/include/__concepts/comparison_common_type.h +40 -0
  179. package/libcxx/include/__concepts/equality_comparable.h +2 -1
  180. package/libcxx/include/__condition_variable/condition_variable.h +1 -1
  181. package/libcxx/include/__config +63 -280
  182. package/libcxx/include/__configuration/abi.h +14 -24
  183. package/libcxx/include/__configuration/availability.h +65 -118
  184. package/libcxx/include/__configuration/compiler.h +6 -6
  185. package/libcxx/include/__configuration/experimental.h +38 -0
  186. package/libcxx/include/__configuration/hardening.h +215 -0
  187. package/libcxx/include/__configuration/language.h +3 -0
  188. package/libcxx/include/__configuration/platform.h +9 -16
  189. package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
  190. package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
  191. package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
  192. package/libcxx/include/__exception/exception.h +6 -4
  193. package/libcxx/include/__exception/exception_ptr.h +27 -5
  194. package/libcxx/include/__exception/nested_exception.h +2 -2
  195. package/libcxx/include/__exception/operations.h +5 -5
  196. package/libcxx/include/__expected/bad_expected_access.h +8 -6
  197. package/libcxx/include/__expected/expected.h +62 -64
  198. package/libcxx/include/__expected/unexpected.h +4 -4
  199. package/libcxx/include/__filesystem/copy_options.h +4 -4
  200. package/libcxx/include/__filesystem/directory_entry.h +37 -33
  201. package/libcxx/include/__filesystem/directory_iterator.h +9 -11
  202. package/libcxx/include/__filesystem/directory_options.h +7 -4
  203. package/libcxx/include/__filesystem/file_status.h +3 -3
  204. package/libcxx/include/__filesystem/filesystem_error.h +9 -10
  205. package/libcxx/include/__filesystem/operations.h +97 -66
  206. package/libcxx/include/__filesystem/path.h +68 -64
  207. package/libcxx/include/__filesystem/path_iterator.h +1 -3
  208. package/libcxx/include/__filesystem/perm_options.h +4 -4
  209. package/libcxx/include/__filesystem/perms.h +4 -4
  210. package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
  211. package/libcxx/include/__filesystem/space_info.h +1 -1
  212. package/libcxx/include/__filesystem/u8path.h +12 -14
  213. package/libcxx/include/__flat_map/flat_map.h +88 -71
  214. package/libcxx/include/__flat_map/flat_multimap.h +251 -172
  215. package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
  216. package/libcxx/include/__flat_map/utils.h +1 -0
  217. package/libcxx/include/__flat_set/flat_multiset.h +211 -143
  218. package/libcxx/include/__flat_set/flat_set.h +86 -68
  219. package/libcxx/include/__format/concepts.h +0 -14
  220. package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
  221. package/libcxx/include/__format/fmt_pair_like.h +42 -0
  222. package/libcxx/include/__format/format_arg.h +7 -10
  223. package/libcxx/include/__format/format_args.h +1 -1
  224. package/libcxx/include/__format/format_context.h +5 -5
  225. package/libcxx/include/__format/format_parse_context.h +2 -2
  226. package/libcxx/include/__format/formatter_output.h +30 -34
  227. package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
  228. package/libcxx/include/__format/range_default_formatter.h +2 -41
  229. package/libcxx/include/__format/range_format.h +71 -0
  230. package/libcxx/include/__format/range_formatter.h +1 -0
  231. package/libcxx/include/__format/width_estimation_table.h +4 -2
  232. package/libcxx/include/__functional/bind.h +10 -15
  233. package/libcxx/include/__functional/bind_back.h +1 -1
  234. package/libcxx/include/__functional/bind_front.h +1 -1
  235. package/libcxx/include/__functional/function.h +57 -75
  236. package/libcxx/include/__functional/hash.h +1 -10
  237. package/libcxx/include/__functional/identity.h +1 -1
  238. package/libcxx/include/__functional/is_transparent.h +8 -0
  239. package/libcxx/include/__functional/mem_fn.h +2 -1
  240. package/libcxx/include/__functional/operations.h +18 -0
  241. package/libcxx/include/__functional/ranges_operations.h +7 -0
  242. package/libcxx/include/__functional/reference_wrapper.h +7 -5
  243. package/libcxx/include/__functional/weak_result_type.h +14 -28
  244. package/libcxx/include/__fwd/ios.h +1 -1
  245. package/libcxx/include/__fwd/tuple.h +14 -0
  246. package/libcxx/include/__hash_table +371 -357
  247. package/libcxx/include/__ios/fpos.h +4 -4
  248. package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
  249. package/libcxx/include/__iterator/bounded_iter.h +7 -8
  250. package/libcxx/include/__iterator/concepts.h +6 -9
  251. package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
  252. package/libcxx/include/__iterator/distance.h +40 -18
  253. package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
  254. package/libcxx/include/__iterator/insert_iterator.h +1 -7
  255. package/libcxx/include/__iterator/istream_iterator.h +6 -7
  256. package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
  257. package/libcxx/include/__iterator/iter_move.h +1 -1
  258. package/libcxx/include/__iterator/iterator.h +13 -0
  259. package/libcxx/include/__iterator/iterator_traits.h +13 -14
  260. package/libcxx/include/__iterator/ostream_iterator.h +1 -7
  261. package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
  262. package/libcxx/include/__iterator/reverse_iterator.h +8 -13
  263. package/libcxx/include/__iterator/segmented_iterator.h +3 -8
  264. package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
  265. package/libcxx/include/__iterator/wrap_iter.h +8 -6
  266. package/libcxx/include/__locale +3 -10
  267. package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
  268. package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
  269. package/libcxx/include/__locale_dir/messages.h +1 -1
  270. package/libcxx/include/__locale_dir/money.h +2 -2
  271. package/libcxx/include/__locale_dir/num.h +190 -243
  272. package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
  273. package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
  274. package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
  275. package/libcxx/include/__locale_dir/support/linux.h +0 -37
  276. package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
  277. package/libcxx/include/__locale_dir/support/newlib.h +243 -0
  278. package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
  279. package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
  280. package/libcxx/include/__locale_dir/support/windows.h +0 -29
  281. package/libcxx/include/__locale_dir/time.h +3 -7
  282. package/libcxx/include/__math/hypot.h +1 -1
  283. package/libcxx/include/__math/logarithms.h +1 -1
  284. package/libcxx/include/__math/traits.h +80 -11
  285. package/libcxx/include/__mdspan/extents.h +7 -4
  286. package/libcxx/include/__mdspan/layout_stride.h +4 -5
  287. package/libcxx/include/__mdspan/mdspan.h +29 -23
  288. package/libcxx/include/__memory/addressof.h +7 -5
  289. package/libcxx/include/__memory/align.h +18 -1
  290. package/libcxx/include/__memory/allocate_at_least.h +15 -10
  291. package/libcxx/include/__memory/allocator.h +14 -26
  292. package/libcxx/include/__memory/allocator_traits.h +6 -4
  293. package/libcxx/include/__memory/compressed_pair.h +15 -9
  294. package/libcxx/include/__memory/construct_at.h +12 -23
  295. package/libcxx/include/__memory/inout_ptr.h +1 -1
  296. package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
  297. package/libcxx/include/__memory/out_ptr.h +1 -1
  298. package/libcxx/include/__memory/pointer_traits.h +1 -1
  299. package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
  300. package/libcxx/include/__memory/shared_count.h +9 -30
  301. package/libcxx/include/__memory/shared_ptr.h +100 -145
  302. package/libcxx/include/__memory/temp_value.h +1 -2
  303. package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
  304. package/libcxx/include/__memory/unique_ptr.h +14 -16
  305. package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
  306. package/libcxx/include/__memory_resource/memory_resource.h +4 -2
  307. package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
  308. package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
  309. package/libcxx/include/__memory_resource/pool_options.h +1 -1
  310. package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
  311. package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
  312. package/libcxx/include/__mutex/mutex.h +2 -2
  313. package/libcxx/include/__mutex/once_flag.h +14 -11
  314. package/libcxx/include/__mutex/tag_types.h +3 -3
  315. package/libcxx/include/__mutex/unique_lock.h +8 -7
  316. package/libcxx/include/__new/align_val_t.h +6 -0
  317. package/libcxx/include/__new/allocate.h +1 -2
  318. package/libcxx/include/__new/exceptions.h +8 -2
  319. package/libcxx/include/__new/global_new_delete.h +4 -11
  320. package/libcxx/include/__new/interference_size.h +0 -4
  321. package/libcxx/include/__new/launder.h +3 -5
  322. package/libcxx/include/__new/nothrow_t.h +1 -1
  323. package/libcxx/include/__numeric/gcd_lcm.h +24 -34
  324. package/libcxx/include/__numeric/midpoint.h +9 -14
  325. package/libcxx/include/__numeric/pstl.h +2 -2
  326. package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
  327. package/libcxx/include/__ostream/basic_ostream.h +8 -8
  328. package/libcxx/include/__pstl/backends/default.h +14 -14
  329. package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
  330. package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
  331. package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
  332. package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
  333. package/libcxx/include/__random/binomial_distribution.h +10 -4
  334. package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
  335. package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
  336. package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
  337. package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
  338. package/libcxx/include/__ranges/adjacent_view.h +419 -0
  339. package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
  340. package/libcxx/include/__ranges/chunk_by_view.h +6 -6
  341. package/libcxx/include/__ranges/common_view.h +7 -7
  342. package/libcxx/include/__ranges/drop_view.h +8 -8
  343. package/libcxx/include/__ranges/drop_while_view.h +5 -5
  344. package/libcxx/include/__ranges/elements_of.h +49 -0
  345. package/libcxx/include/__ranges/empty_view.h +5 -5
  346. package/libcxx/include/__ranges/filter_view.h +10 -10
  347. package/libcxx/include/__ranges/iota_view.h +41 -22
  348. package/libcxx/include/__ranges/owning_view.h +15 -15
  349. package/libcxx/include/__ranges/ref_view.h +6 -6
  350. package/libcxx/include/__ranges/repeat_view.h +17 -10
  351. package/libcxx/include/__ranges/single_view.h +8 -8
  352. package/libcxx/include/__ranges/take_view.h +9 -9
  353. package/libcxx/include/__ranges/transform_view.h +1 -2
  354. package/libcxx/include/__ranges/view_interface.h +10 -10
  355. package/libcxx/include/__ranges/zip_transform_view.h +357 -0
  356. package/libcxx/include/__ranges/zip_view.h +20 -20
  357. package/libcxx/include/__split_buffer +612 -240
  358. package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
  359. package/libcxx/include/__stop_token/stop_callback.h +2 -2
  360. package/libcxx/include/__stop_token/stop_source.h +1 -1
  361. package/libcxx/include/__stop_token/stop_state.h +4 -4
  362. package/libcxx/include/__stop_token/stop_token.h +1 -1
  363. package/libcxx/include/__string/char_traits.h +51 -31
  364. package/libcxx/include/__string/constexpr_c_functions.h +5 -5
  365. package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
  366. package/libcxx/include/__system_error/error_category.h +8 -8
  367. package/libcxx/include/__system_error/error_code.h +5 -5
  368. package/libcxx/include/__system_error/error_condition.h +4 -4
  369. package/libcxx/include/__system_error/system_error.h +1 -1
  370. package/libcxx/include/__thread/id.h +1 -1
  371. package/libcxx/include/__thread/jthread.h +1 -1
  372. package/libcxx/include/__thread/poll_with_backoff.h +27 -8
  373. package/libcxx/include/__thread/support/c11.h +8 -8
  374. package/libcxx/include/__thread/support/pthread.h +8 -8
  375. package/libcxx/include/__thread/support/windows.h +8 -8
  376. package/libcxx/include/__thread/thread.h +13 -8
  377. package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
  378. package/libcxx/include/__tree +849 -701
  379. package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
  380. package/libcxx/include/__tuple/tuple_element.h +0 -12
  381. package/libcxx/include/__tuple/tuple_size.h +0 -4
  382. package/libcxx/include/__tuple/tuple_transform.h +45 -0
  383. package/libcxx/include/__type_traits/aligned_storage.h +13 -40
  384. package/libcxx/include/__type_traits/desugars_to.h +4 -0
  385. package/libcxx/include/__type_traits/invoke.h +8 -0
  386. package/libcxx/include/__type_traits/is_allocator.h +6 -7
  387. package/libcxx/include/__type_traits/is_array.h +26 -0
  388. package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
  389. package/libcxx/include/__type_traits/is_final.h +1 -1
  390. package/libcxx/include/__type_traits/is_floating_point.h +7 -6
  391. package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
  392. package/libcxx/include/__type_traits/is_specialization.h +2 -6
  393. package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
  394. package/libcxx/include/__type_traits/make_transparent.h +52 -0
  395. package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
  396. package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
  397. package/libcxx/include/__utility/cmp.h +19 -7
  398. package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
  399. package/libcxx/include/__utility/in_place.h +1 -1
  400. package/libcxx/include/__utility/integer_sequence.h +56 -41
  401. package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
  402. package/libcxx/include/__utility/pair.h +22 -25
  403. package/libcxx/include/__utility/scope_guard.h +2 -0
  404. package/libcxx/include/__utility/try_key_extraction.h +114 -0
  405. package/libcxx/include/__vector/vector.h +187 -160
  406. package/libcxx/include/__vector/vector_bool.h +76 -83
  407. package/libcxx/include/any +118 -155
  408. package/libcxx/include/array +88 -56
  409. package/libcxx/include/atomic +2 -0
  410. package/libcxx/include/barrier +20 -24
  411. package/libcxx/include/bitset +49 -30
  412. package/libcxx/include/ccomplex +3 -11
  413. package/libcxx/include/chrono +47 -0
  414. package/libcxx/include/ciso646 +3 -6
  415. package/libcxx/include/complex +77 -65
  416. package/libcxx/include/complex.h +10 -10
  417. package/libcxx/include/condition_variable +3 -3
  418. package/libcxx/include/cstdalign +3 -10
  419. package/libcxx/include/cstdbool +3 -10
  420. package/libcxx/include/ctgmath +2 -11
  421. package/libcxx/include/ctype.h +24 -24
  422. package/libcxx/include/cwchar +2 -2
  423. package/libcxx/include/deque +109 -225
  424. package/libcxx/include/errno.h +269 -269
  425. package/libcxx/include/exception +4 -1
  426. package/libcxx/include/ext/hash_map +7 -48
  427. package/libcxx/include/ext/hash_set +2 -8
  428. package/libcxx/include/fenv.h +43 -43
  429. package/libcxx/include/flat_map +663 -11
  430. package/libcxx/include/flat_set +543 -8
  431. package/libcxx/include/float.h +16 -16
  432. package/libcxx/include/forward_list +33 -53
  433. package/libcxx/include/fstream +57 -42
  434. package/libcxx/include/future +41 -51
  435. package/libcxx/include/initializer_list +9 -3
  436. package/libcxx/include/inttypes.h +16 -16
  437. package/libcxx/include/ios +28 -28
  438. package/libcxx/include/istream +19 -13
  439. package/libcxx/include/iterator +10 -0
  440. package/libcxx/include/latch +7 -5
  441. package/libcxx/include/limits +4 -4
  442. package/libcxx/include/list +61 -79
  443. package/libcxx/include/map +386 -274
  444. package/libcxx/include/math.h +19 -0
  445. package/libcxx/include/mdspan +1 -5
  446. package/libcxx/include/mutex +29 -19
  447. package/libcxx/include/optional +644 -149
  448. package/libcxx/include/print +9 -5
  449. package/libcxx/include/queue +39 -37
  450. package/libcxx/include/ranges +48 -0
  451. package/libcxx/include/regex +33 -31
  452. package/libcxx/include/scoped_allocator +16 -11
  453. package/libcxx/include/semaphore +15 -18
  454. package/libcxx/include/set +220 -192
  455. package/libcxx/include/shared_mutex +3 -8
  456. package/libcxx/include/span +53 -37
  457. package/libcxx/include/sstream +34 -28
  458. package/libcxx/include/stack +13 -15
  459. package/libcxx/include/stddef.h +10 -10
  460. package/libcxx/include/stdexcept +2 -2
  461. package/libcxx/include/stdio.h +20 -21
  462. package/libcxx/include/streambuf +59 -19
  463. package/libcxx/include/string +574 -573
  464. package/libcxx/include/string_view +113 -89
  465. package/libcxx/include/strstream +10 -10
  466. package/libcxx/include/syncstream +4 -4
  467. package/libcxx/include/tgmath.h +12 -12
  468. package/libcxx/include/tuple +242 -212
  469. package/libcxx/include/type_traits +8 -2
  470. package/libcxx/include/typeindex +5 -3
  471. package/libcxx/include/typeinfo +92 -89
  472. package/libcxx/include/unordered_map +179 -304
  473. package/libcxx/include/unordered_set +168 -195
  474. package/libcxx/include/utility +12 -0
  475. package/libcxx/include/valarray +106 -161
  476. package/libcxx/include/variant +25 -33
  477. package/libcxx/include/version +41 -24
  478. package/libcxx/include/wctype.h +29 -29
  479. package/libcxx/libc/hdr/errno_macros.h +3 -1
  480. package/libcxx/libc/hdr/stdint_proxy.h +18 -0
  481. package/libcxx/libc/hdr/types/wchar_t.h +23 -0
  482. package/libcxx/libc/hdr/wchar_overlay.h +69 -0
  483. package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
  484. package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
  485. package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
  486. package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
  487. package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
  488. package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
  489. package/libcxx/libc/shared/libc_common.h +5 -0
  490. package/libcxx/libc/src/__support/CPP/bit.h +50 -12
  491. package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
  492. package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
  493. package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
  494. package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
  495. package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
  496. package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
  497. package/libcxx/libc/src/__support/big_int.h +14 -14
  498. package/libcxx/libc/src/__support/common.h +3 -2
  499. package/libcxx/libc/src/__support/ctype_utils.h +19 -12
  500. package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
  501. package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
  502. package/libcxx/libc/src/__support/libc_assert.h +2 -0
  503. package/libcxx/libc/src/__support/macros/attributes.h +44 -1
  504. package/libcxx/libc/src/__support/macros/config.h +23 -0
  505. package/libcxx/libc/src/__support/macros/null_check.h +1 -2
  506. package/libcxx/libc/src/__support/macros/optimization.h +3 -0
  507. package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
  508. package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
  509. package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
  510. package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
  511. package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
  512. package/libcxx/libc/src/__support/math_extras.h +20 -4
  513. package/libcxx/libc/src/__support/str_to_float.h +98 -125
  514. package/libcxx/libc/src/__support/str_to_integer.h +39 -27
  515. package/libcxx/libc/src/__support/wctype_utils.h +588 -0
  516. package/libcxx/src/any.cpp +4 -0
  517. package/libcxx/src/atomic.cpp +365 -80
  518. package/libcxx/src/barrier.cpp +4 -3
  519. package/libcxx/src/charconv.cpp +6 -3
  520. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  521. package/libcxx/src/error_category.cpp +3 -1
  522. package/libcxx/src/exception.cpp +2 -10
  523. package/libcxx/src/experimental/time_zone.cpp +1 -1
  524. package/libcxx/src/experimental/tzdb.cpp +4 -1
  525. package/libcxx/src/filesystem/error.h +4 -22
  526. package/libcxx/src/filesystem/format_string.h +9 -18
  527. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  528. package/libcxx/src/filesystem/operations.cpp +2 -9
  529. package/libcxx/src/filesystem/path.cpp +3 -1
  530. package/libcxx/src/include/aligned_alloc.h +65 -0
  531. package/libcxx/src/include/config_elast.h +1 -1
  532. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  533. package/libcxx/src/include/overridable_function.h +8 -10
  534. package/libcxx/src/iostream.cpp +56 -37
  535. package/libcxx/src/locale.cpp +213 -196
  536. package/libcxx/src/memory.cpp +12 -14
  537. package/libcxx/src/mutex_destructor.cpp +1 -1
  538. package/libcxx/src/new.cpp +5 -5
  539. package/libcxx/src/optional.cpp +4 -0
  540. package/libcxx/src/print.cpp +9 -1
  541. package/libcxx/src/random.cpp +0 -26
  542. package/libcxx/src/string.cpp +10 -25
  543. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  544. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  545. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  546. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  547. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  548. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  549. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  550. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  551. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  552. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  553. package/libcxx/src/system_error.cpp +2 -0
  554. package/libcxx/src/thread.cpp +1 -3
  555. package/libcxx/src/valarray.cpp +1 -2
  556. package/libcxx/src/vector.cpp +2 -2
  557. package/libcxxabi/include/__cxxabi_config.h +42 -23
  558. package/libcxxabi/src/cxa_exception.cpp +4 -2
  559. package/libcxxabi/src/cxa_exception.h +16 -14
  560. package/libcxxabi/src/cxa_personality.cpp +126 -9
  561. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  562. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  563. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  564. package/libcxxabi/src/demangle/Utility.h +21 -7
  565. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  566. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  567. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  568. package/libtsan/LICENSE.TXT +311 -0
  569. package/libtsan/builtins/assembly.h +41 -8
  570. package/libtsan/interception/interception_win.cpp +4 -0
  571. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  572. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  573. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  574. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  575. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  576. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  577. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  578. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  579. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  580. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  581. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  582. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  583. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  584. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  585. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  586. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  587. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  588. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  589. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  590. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  591. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  592. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  593. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  594. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  595. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  596. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  597. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  598. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  599. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  600. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  601. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  602. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  603. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  604. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  605. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  606. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  607. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  608. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  609. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  610. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  611. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  612. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  613. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  614. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  615. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  616. package/libtsan/tsan_debugging.cpp +2 -2
  617. package/libtsan/tsan_flags.cpp +37 -0
  618. package/libtsan/tsan_flags.h +8 -0
  619. package/libtsan/tsan_flags.inc +12 -0
  620. package/libtsan/tsan_interceptors.h +9 -1
  621. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  622. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  623. package/libtsan/tsan_interface.h +3 -3
  624. package/libtsan/tsan_interface_ann.cpp +23 -9
  625. package/libtsan/tsan_mman.cpp +18 -4
  626. package/libtsan/tsan_platform.h +44 -7
  627. package/libtsan/tsan_platform_linux.cpp +42 -14
  628. package/libtsan/tsan_platform_mac.cpp +16 -3
  629. package/libtsan/tsan_report.h +14 -1
  630. package/libtsan/tsan_rtl.cpp +14 -0
  631. package/libtsan/tsan_rtl.h +7 -2
  632. package/libtsan/tsan_rtl_aarch64.S +3 -5
  633. package/libtsan/tsan_rtl_access.cpp +8 -3
  634. package/libtsan/tsan_rtl_amd64.S +2 -0
  635. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  636. package/libtsan/tsan_rtl_report.cpp +132 -65
  637. package/libtsan/tsan_rtl_thread.cpp +31 -9
  638. package/libtsan/tsan_symbolize.cpp +1 -1
  639. package/libtsan/tsan_symbolize.h +1 -1
  640. package/libtsan/tsan_trace.h +1 -1
  641. package/libunwind/include/__libunwind_config.h +11 -2
  642. package/libunwind/include/libunwind.h +117 -11
  643. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  644. package/libunwind/src/AddressSpace.hpp +42 -20
  645. package/libunwind/src/CompactUnwinder.hpp +16 -5
  646. package/libunwind/src/DwarfInstructions.hpp +24 -13
  647. package/libunwind/src/DwarfParser.hpp +62 -23
  648. package/libunwind/src/EHHeaderParser.hpp +7 -4
  649. package/libunwind/src/Registers.hpp +226 -22
  650. package/libunwind/src/Unwind-seh.cpp +6 -7
  651. package/libunwind/src/Unwind-wasm.c +7 -7
  652. package/libunwind/src/UnwindCursor.hpp +167 -49
  653. package/libunwind/src/UnwindLevel1.c +46 -17
  654. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  655. package/libunwind/src/UnwindRegistersSave.S +86 -2
  656. package/libunwind/src/assembly.h +5 -1
  657. package/libunwind/src/config.h +9 -0
  658. package/libunwind/src/gcc_personality_v0.c +79 -6
  659. package/libunwind/src/libunwind.cpp +104 -4
  660. package/libunwind/src/libunwind_ext.h +7 -1
  661. package/libunwind/src/shadow_stack_unwind.h +2 -2
  662. package/lldb/pretty_printers.py +948 -0
  663. package/package.json +1 -1
  664. package/std/Build/Step/Compile.zig +18 -19
  665. package/std/Build/Step/Run.zig +13 -6
  666. package/std/Build/Step.zig +0 -3
  667. package/std/Io/Threaded.zig +3 -0
  668. package/std/Target/aarch64.zig +620 -77
  669. package/std/Target/amdgcn.zig +421 -21
  670. package/std/Target/arm.zig +40 -6
  671. package/std/Target/bpf.zig +6 -0
  672. package/std/Target/hexagon.zig +41 -6
  673. package/std/Target/loongarch.zig +18 -0
  674. package/std/Target/mips.zig +6 -0
  675. package/std/Target/nvptx.zig +58 -35
  676. package/std/Target/powerpc.zig +27 -19
  677. package/std/Target/riscv.zig +415 -177
  678. package/std/Target/sparc.zig +17 -0
  679. package/std/Target/wasm.zig +7 -0
  680. package/std/Target/x86.zig +200 -31
  681. package/std/Target/xtensa.zig +65 -0
  682. package/std/Target.zig +16 -8
  683. package/std/c.zig +7 -0
  684. package/std/crypto/ml_kem.zig +0 -15
  685. package/std/debug/Dwarf.zig +14 -11
  686. package/std/debug/Pdb.zig +24 -16
  687. package/std/hash/xxhash.zig +0 -6
  688. package/std/math/log10.zig +0 -2
  689. package/std/math/modf.zig +1 -2
  690. package/std/mem.zig +1 -2
  691. package/std/os/linux/x86.zig +2 -2
  692. package/std/os/windows.zig +130 -1
  693. package/std/simd.zig +4 -21
  694. package/std/start.zig +4 -3
  695. package/std/zig/Ast.zig +5 -7
  696. package/std/zig/AstGen.zig +20 -14
  697. package/std/zig/ErrorBundle.zig +6 -2
  698. package/std/zig/ZonGen.zig +13 -21
  699. package/std/zig/llvm/Builder.zig +2 -2
  700. package/std/zig/system/arm.zig +56 -2
  701. package/std/zig/system/windows.zig +34 -1
  702. package/std/zig/system/x86.zig +60 -16
  703. package/std/zig/system.zig +0 -10
  704. package/std/zig/target.zig +1 -2
  705. package/std/zon/parse.zig +1 -1
  706. package/include/amxbf16transposeintrin.h +0 -94
  707. package/include/amxcomplextransposeintrin.h +0 -303
  708. package/include/amxfp16transposeintrin.h +0 -94
  709. package/include/amxmovrstransposeintrin.h +0 -200
  710. package/include/amxtf32transposeintrin.h +0 -105
  711. package/include/amxtransposeintrin.h +0 -248
  712. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  713. 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
- tid_t GetThreadID(uptr index) const override;
97
+ ThreadID GetThreadID(uptr index) const override;
98
98
  uptr ThreadCount() const override;
99
- bool ContainsTid(tid_t thread_id) const;
100
- void Append(tid_t tid);
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<tid_t> thread_ids_;
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(tid_t thread_id);
140
+ bool SuspendThread(ThreadID thread_id);
141
141
  };
142
142
 
143
- bool ThreadSuspender::SuspendThread(tid_t tid) {
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<tid_t> threads;
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 (tid_t tid : threads) {
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
- tid_t SuspendedThreadsListLinux::GetThreadID(uptr index) const {
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(tid_t thread_id) const {
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(tid_t tid) {
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
- tid_t tid;
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
- tid_t GetThreadID(uptr index) const override;
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
- tid_t SuspendedThreadsListMac::GetThreadID(uptr index) const {
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
- tid_t GetThreadID(uptr index) const;
55
+ ThreadID GetThreadID(uptr index) const;
56
56
  uptr ThreadCount() const;
57
- bool ContainsTid(tid_t thread_id) const;
58
- void Append(tid_t tid);
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<tid_t> thread_ids_;
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
- tid_t SuspendedThreadsListNetBSD::GetThreadID(uptr index) const {
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(tid_t thread_id) const {
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(tid_t tid) {
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
- tid_t GetThreadID(uptr index) const override;
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
- tid_t SuspendedThreadsListWindows::GetThreadID(uptr index) const {
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 *path, bool use_posix_spawn)
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
- return (length >= 1 && buffer[length - 1] == '\n');
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
- static bool ParseCommandOutput(const char *str, uptr addr, char **out_name,
106
- char **out_module, char **out_file, uptr *line,
107
- uptr *start_address) {
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 false;
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 true;
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) return false;
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
- // Only assign to `function_offset` if we were able to get the function's
184
- // start address and we got a sensible `start_address` (dladdr doesn't always
185
- // ensure that `addr >= sym_addr`).
186
- if (start_address != AddressInfo::kUnknown && addr >= start_address) {
187
- stack->info.function_offset = addr - start_address;
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
- fd_t fd = internal_spawn(argv, const_cast<const char **>(GetEnvP()), &pid);
162
- if (fd == kInvalidFd) {
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
- input_fd_ = fd;
169
- output_fd_ = fd;
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(tid_t _os_id, ThreadType _thread_type,
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(tid_t os_id) {
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, tid_t os_id, ThreadType thread_type,
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
- tid_t os_id; // PID (used for reporting).
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(tid_t _os_id, ThreadType _thread_type, void *arg);
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(tid_t os_id);
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, tid_t os_id, ThreadType thread_type, void *arg);
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
- tid_t GetTid() {
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, tid_t *os_id,
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
- tid_t *os_id) {
245
+ ThreadID *os_id) {
246
246
  MBlock *b = 0;
247
247
  Allocator *a = allocator();
248
248
  if (a->PointerIsMine((void *)addr)) {