@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.
Files changed (673) 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/src/any.cpp +4 -0
  480. package/libcxx/src/atomic.cpp +365 -80
  481. package/libcxx/src/barrier.cpp +4 -3
  482. package/libcxx/src/charconv.cpp +6 -3
  483. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  484. package/libcxx/src/error_category.cpp +3 -1
  485. package/libcxx/src/exception.cpp +2 -10
  486. package/libcxx/src/experimental/time_zone.cpp +1 -1
  487. package/libcxx/src/experimental/tzdb.cpp +4 -1
  488. package/libcxx/src/filesystem/error.h +4 -22
  489. package/libcxx/src/filesystem/format_string.h +9 -18
  490. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  491. package/libcxx/src/filesystem/operations.cpp +2 -9
  492. package/libcxx/src/filesystem/path.cpp +3 -1
  493. package/libcxx/src/include/aligned_alloc.h +65 -0
  494. package/libcxx/src/include/config_elast.h +1 -1
  495. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  496. package/libcxx/src/include/overridable_function.h +8 -10
  497. package/libcxx/src/iostream.cpp +56 -37
  498. package/libcxx/src/locale.cpp +213 -196
  499. package/libcxx/src/memory.cpp +12 -14
  500. package/libcxx/src/mutex_destructor.cpp +1 -1
  501. package/libcxx/src/new.cpp +5 -5
  502. package/libcxx/src/optional.cpp +4 -0
  503. package/libcxx/src/print.cpp +9 -1
  504. package/libcxx/src/random.cpp +0 -26
  505. package/libcxx/src/string.cpp +10 -25
  506. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  507. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  508. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  509. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  510. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  511. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  512. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  513. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  514. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  515. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  516. package/libcxx/src/system_error.cpp +2 -0
  517. package/libcxx/src/thread.cpp +1 -3
  518. package/libcxx/src/valarray.cpp +1 -2
  519. package/libcxx/src/vector.cpp +2 -2
  520. package/libcxxabi/include/__cxxabi_config.h +42 -23
  521. package/libcxxabi/src/cxa_exception.cpp +4 -2
  522. package/libcxxabi/src/cxa_exception.h +16 -14
  523. package/libcxxabi/src/cxa_personality.cpp +126 -9
  524. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  525. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  526. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  527. package/libcxxabi/src/demangle/Utility.h +21 -7
  528. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  529. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  530. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  531. package/libtsan/LICENSE.TXT +311 -0
  532. package/libtsan/builtins/assembly.h +41 -8
  533. package/libtsan/interception/interception_win.cpp +4 -0
  534. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  535. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  536. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  537. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  538. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  539. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  540. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  541. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  542. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  543. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  544. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  545. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  546. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  547. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  548. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  549. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  550. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  551. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  552. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  553. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  554. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  555. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  556. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  557. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  558. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  559. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  560. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  561. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  562. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  563. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  564. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  565. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  566. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  567. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  568. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  569. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  570. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  571. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  572. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  573. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  574. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  575. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  576. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  577. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  578. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  579. package/libtsan/tsan_debugging.cpp +2 -2
  580. package/libtsan/tsan_flags.cpp +37 -0
  581. package/libtsan/tsan_flags.h +8 -0
  582. package/libtsan/tsan_flags.inc +12 -0
  583. package/libtsan/tsan_interceptors.h +9 -1
  584. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  585. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  586. package/libtsan/tsan_interface.h +3 -3
  587. package/libtsan/tsan_interface_ann.cpp +23 -9
  588. package/libtsan/tsan_mman.cpp +18 -4
  589. package/libtsan/tsan_platform.h +44 -7
  590. package/libtsan/tsan_platform_linux.cpp +42 -14
  591. package/libtsan/tsan_platform_mac.cpp +16 -3
  592. package/libtsan/tsan_report.h +14 -1
  593. package/libtsan/tsan_rtl.cpp +14 -0
  594. package/libtsan/tsan_rtl.h +7 -2
  595. package/libtsan/tsan_rtl_aarch64.S +3 -5
  596. package/libtsan/tsan_rtl_access.cpp +8 -3
  597. package/libtsan/tsan_rtl_amd64.S +2 -0
  598. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  599. package/libtsan/tsan_rtl_report.cpp +132 -65
  600. package/libtsan/tsan_rtl_thread.cpp +31 -9
  601. package/libtsan/tsan_symbolize.cpp +1 -1
  602. package/libtsan/tsan_symbolize.h +1 -1
  603. package/libtsan/tsan_trace.h +1 -1
  604. package/libunwind/include/__libunwind_config.h +11 -2
  605. package/libunwind/include/libunwind.h +117 -11
  606. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  607. package/libunwind/src/AddressSpace.hpp +40 -19
  608. package/libunwind/src/CompactUnwinder.hpp +16 -5
  609. package/libunwind/src/DwarfInstructions.hpp +24 -13
  610. package/libunwind/src/DwarfParser.hpp +60 -22
  611. package/libunwind/src/EHHeaderParser.hpp +7 -4
  612. package/libunwind/src/Registers.hpp +226 -22
  613. package/libunwind/src/Unwind-seh.cpp +6 -7
  614. package/libunwind/src/Unwind-wasm.c +7 -7
  615. package/libunwind/src/UnwindCursor.hpp +167 -49
  616. package/libunwind/src/UnwindLevel1.c +46 -17
  617. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  618. package/libunwind/src/UnwindRegistersSave.S +86 -2
  619. package/libunwind/src/assembly.h +5 -1
  620. package/libunwind/src/config.h +9 -0
  621. package/libunwind/src/gcc_personality_v0.c +79 -6
  622. package/libunwind/src/libunwind.cpp +104 -4
  623. package/libunwind/src/libunwind_ext.h +7 -1
  624. package/libunwind/src/shadow_stack_unwind.h +2 -2
  625. package/lldb/pretty_printers.py +948 -0
  626. package/package.json +1 -1
  627. package/std/Build/Step/Compile.zig +18 -19
  628. package/std/Build/Step/Run.zig +13 -6
  629. package/std/Build/Step.zig +0 -3
  630. package/std/Io/Threaded.zig +3 -0
  631. package/std/Target/aarch64.zig +620 -77
  632. package/std/Target/amdgcn.zig +421 -21
  633. package/std/Target/arm.zig +40 -6
  634. package/std/Target/bpf.zig +6 -0
  635. package/std/Target/hexagon.zig +41 -6
  636. package/std/Target/loongarch.zig +18 -0
  637. package/std/Target/mips.zig +6 -0
  638. package/std/Target/nvptx.zig +58 -35
  639. package/std/Target/powerpc.zig +27 -19
  640. package/std/Target/riscv.zig +415 -177
  641. package/std/Target/sparc.zig +17 -0
  642. package/std/Target/wasm.zig +7 -0
  643. package/std/Target/x86.zig +200 -31
  644. package/std/Target/xtensa.zig +65 -0
  645. package/std/Target.zig +11 -2
  646. package/std/c.zig +7 -0
  647. package/std/debug/Dwarf.zig +14 -11
  648. package/std/debug/Pdb.zig +24 -16
  649. package/std/hash/xxhash.zig +0 -6
  650. package/std/math/log10.zig +0 -2
  651. package/std/math/modf.zig +0 -1
  652. package/std/mem.zig +1 -2
  653. package/std/os/linux/x86.zig +2 -2
  654. package/std/os/windows.zig +130 -1
  655. package/std/simd.zig +4 -21
  656. package/std/start.zig +4 -3
  657. package/std/zig/Ast.zig +5 -7
  658. package/std/zig/AstGen.zig +20 -14
  659. package/std/zig/ErrorBundle.zig +6 -2
  660. package/std/zig/ZonGen.zig +13 -21
  661. package/std/zig/llvm/Builder.zig +2 -2
  662. package/std/zig/system/arm.zig +56 -2
  663. package/std/zig/system/windows.zig +34 -1
  664. package/std/zig/system/x86.zig +60 -16
  665. package/std/zig/system.zig +0 -10
  666. package/include/amxbf16transposeintrin.h +0 -94
  667. package/include/amxcomplextransposeintrin.h +0 -303
  668. package/include/amxfp16transposeintrin.h +0 -94
  669. package/include/amxmovrstransposeintrin.h +0 -200
  670. package/include/amxtf32transposeintrin.h +0 -105
  671. package/include/amxtransposeintrin.h +0 -248
  672. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  673. package/std/Build/Step/CheckObject.zig +0 -2764
@@ -76,6 +76,7 @@
76
76
  #include <sys/vt.h>
77
77
  #include <linux/cdrom.h>
78
78
  #include <linux/fd.h>
79
+ #include <linux/filter.h>
79
80
  #if SANITIZER_ANDROID
80
81
  #include <linux/fs.h>
81
82
  #endif
@@ -151,16 +152,15 @@ typedef struct user_fpregs elf_fpregset_t;
151
152
  #if defined(__mips64)
152
153
  # include <sys/procfs.h>
153
154
  #endif
154
- #include <sys/user.h>
155
- #include <linux/if_eql.h>
156
- #include <linux/if_plip.h>
157
- #include <linux/lp.h>
158
- #include <linux/mroute.h>
159
- #include <linux/mroute6.h>
160
- #include <linux/scc.h>
161
- #include <linux/serial.h>
162
- #include <sys/msg.h>
163
- #include <sys/ipc.h>
155
+ # include <linux/if_eql.h>
156
+ # include <linux/if_plip.h>
157
+ # include <linux/lp.h>
158
+ # include <linux/mroute.h>
159
+ # include <linux/mroute6.h>
160
+ # include <linux/serial.h>
161
+ # include <sys/ipc.h>
162
+ # include <sys/msg.h>
163
+ # include <sys/user.h>
164
164
  #endif // SANITIZER_ANDROID
165
165
 
166
166
  #include <link.h>
@@ -516,6 +516,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
516
516
  unsigned struct_seq_event_rec_sz = sizeof(struct seq_event_rec);
517
517
  unsigned struct_synth_info_sz = sizeof(struct synth_info);
518
518
  unsigned struct_vt_mode_sz = sizeof(struct vt_mode);
519
+ unsigned struct_sock_fprog_sz = sizeof(struct sock_fprog);
519
520
  #endif // SANITIZER_LINUX
520
521
 
521
522
  #if SANITIZER_GLIBC
@@ -532,8 +533,6 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
532
533
  unsigned struct_kbsentry_sz = sizeof(struct kbsentry);
533
534
  unsigned struct_mtconfiginfo_sz = sizeof(struct mtconfiginfo);
534
535
  unsigned struct_nr_parms_struct_sz = sizeof(struct nr_parms_struct);
535
- unsigned struct_scc_modem_sz = sizeof(struct scc_modem);
536
- unsigned struct_scc_stat_sz = sizeof(struct scc_stat);
537
536
  unsigned struct_serial_multiport_struct_sz
538
537
  = sizeof(struct serial_multiport_struct);
539
538
  unsigned struct_serial_struct_sz = sizeof(struct serial_struct);
@@ -543,7 +542,6 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
543
542
 
544
543
  unsigned struct_audio_buf_info_sz = sizeof(struct audio_buf_info);
545
544
  unsigned struct_ppp_stats_sz = sizeof(struct ppp_stats);
546
- unsigned struct_sock_fprog_sz = sizeof(struct sock_fprog);
547
545
  # endif // SANITIZER_GLIBC
548
546
 
549
547
  # if !SANITIZER_ANDROID && !SANITIZER_APPLE && !SANITIZER_HAIKU
@@ -779,16 +777,16 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
779
777
  unsigned IOCTL_SOUND_PCM_WRITE_FILTER = SOUND_PCM_WRITE_FILTER;
780
778
  #endif // SOUND_VERSION
781
779
  unsigned IOCTL_TCFLSH = TCFLSH;
782
- unsigned IOCTL_TCGETA = TCGETA;
780
+ # if SANITIZER_TERMIOS_IOCTL_CONSTANTS
783
781
  unsigned IOCTL_TCGETS = TCGETS;
782
+ # endif
784
783
  unsigned IOCTL_TCSBRK = TCSBRK;
785
784
  unsigned IOCTL_TCSBRKP = TCSBRKP;
786
- unsigned IOCTL_TCSETA = TCSETA;
787
- unsigned IOCTL_TCSETAF = TCSETAF;
788
- unsigned IOCTL_TCSETAW = TCSETAW;
785
+ # if SANITIZER_TERMIOS_IOCTL_CONSTANTS
789
786
  unsigned IOCTL_TCSETS = TCSETS;
790
787
  unsigned IOCTL_TCSETSF = TCSETSF;
791
788
  unsigned IOCTL_TCSETSW = TCSETSW;
789
+ # endif
792
790
  unsigned IOCTL_TCXONC = TCXONC;
793
791
  unsigned IOCTL_TIOCGLCKTRMIOS = TIOCGLCKTRMIOS;
794
792
  unsigned IOCTL_TIOCGSOFTCAR = TIOCGSOFTCAR;
@@ -32,6 +32,8 @@
32
32
  # elif SANITIZER_GLIBC || SANITIZER_ANDROID
33
33
  # define SANITIZER_HAS_STAT64 1
34
34
  # define SANITIZER_HAS_STATFS64 1
35
+ # elif SANITIZER_HAIKU
36
+ # include <stdint.h>
35
37
  # endif
36
38
 
37
39
  # if defined(__sparc__)
@@ -102,6 +104,8 @@ const unsigned struct_kernel_stat_sz = SANITIZER_ANDROID
102
104
  ? FIRST_32_SECOND_64(104, 128)
103
105
  # if defined(_ABIN32) && _MIPS_SIM == _ABIN32
104
106
  : FIRST_32_SECOND_64(176, 216);
107
+ # elif SANITIZER_MUSL
108
+ : FIRST_32_SECOND_64(160, 208);
105
109
  # else
106
110
  : FIRST_32_SECOND_64(160, 216);
107
111
  # endif
@@ -476,6 +480,30 @@ struct __sanitizer_cmsghdr {
476
480
  int cmsg_level;
477
481
  int cmsg_type;
478
482
  };
483
+ # elif SANITIZER_MUSL
484
+ struct __sanitizer_msghdr {
485
+ void *msg_name;
486
+ unsigned msg_namelen;
487
+ struct __sanitizer_iovec *msg_iov;
488
+ int msg_iovlen;
489
+ # if SANITIZER_WORDSIZE == 64
490
+ int __pad1;
491
+ # endif
492
+ void *msg_control;
493
+ unsigned msg_controllen;
494
+ # if SANITIZER_WORDSIZE == 64
495
+ int __pad2;
496
+ # endif
497
+ int msg_flags;
498
+ };
499
+ struct __sanitizer_cmsghdr {
500
+ unsigned cmsg_len;
501
+ # if SANITIZER_WORDSIZE == 64
502
+ int __pad1;
503
+ # endif
504
+ int cmsg_level;
505
+ int cmsg_type;
506
+ };
479
507
  # else
480
508
  // In POSIX, int msg_iovlen; socklen_t msg_controllen; socklen_t cmsg_len; but
481
509
  // many implementations don't conform to the standard.
@@ -603,7 +631,7 @@ typedef unsigned long __sanitizer_sigset_t;
603
631
  # elif SANITIZER_APPLE
604
632
  typedef unsigned __sanitizer_sigset_t;
605
633
  # elif SANITIZER_HAIKU
606
- typedef unsigned long __sanitizer_sigset_t;
634
+ typedef uint64_t __sanitizer_sigset_t;
607
635
  # elif SANITIZER_LINUX
608
636
  struct __sanitizer_sigset_t {
609
637
  // The size is determined by looking at sizeof of real sigset_t on linux.
@@ -1312,16 +1340,14 @@ extern unsigned IOCTL_SNDCTL_COPR_SENDMSG;
1312
1340
  extern unsigned IOCTL_SNDCTL_COPR_WCODE;
1313
1341
  extern unsigned IOCTL_SNDCTL_COPR_WDATA;
1314
1342
  extern unsigned IOCTL_TCFLSH;
1315
- extern unsigned IOCTL_TCGETA;
1316
- extern unsigned IOCTL_TCGETS;
1317
1343
  extern unsigned IOCTL_TCSBRK;
1318
1344
  extern unsigned IOCTL_TCSBRKP;
1319
- extern unsigned IOCTL_TCSETA;
1320
- extern unsigned IOCTL_TCSETAF;
1321
- extern unsigned IOCTL_TCSETAW;
1345
+ # if SANITIZER_TERMIOS_IOCTL_CONSTANTS
1346
+ extern unsigned IOCTL_TCGETS;
1322
1347
  extern unsigned IOCTL_TCSETS;
1323
1348
  extern unsigned IOCTL_TCSETSF;
1324
1349
  extern unsigned IOCTL_TCSETSW;
1350
+ # endif
1325
1351
  extern unsigned IOCTL_TCXONC;
1326
1352
  extern unsigned IOCTL_TIOCGLCKTRMIOS;
1327
1353
  extern unsigned IOCTL_TIOCGSOFTCAR;
@@ -225,17 +225,9 @@ void *MapWritableFileToMemory(void *addr, uptr size, fd_t fd, OFF_T offset) {
225
225
  return (void *)p;
226
226
  }
227
227
 
228
- static inline bool IntervalsAreSeparate(uptr start1, uptr end1,
229
- uptr start2, uptr end2) {
230
- CHECK(start1 <= end1);
231
- CHECK(start2 <= end2);
232
- return (end1 < start2) || (end2 < start1);
233
- }
234
-
228
+ # if !SANITIZER_APPLE
235
229
  // FIXME: this is thread-unsafe, but should not cause problems most of the time.
236
- // When the shadow is mapped only a single thread usually exists (plus maybe
237
- // several worker threads on Mac, which aren't expected to map big chunks of
238
- // memory).
230
+ // When the shadow is mapped only a single thread usually exists
239
231
  bool MemoryRangeIsAvailable(uptr range_start, uptr range_end) {
240
232
  MemoryMappingLayout proc_maps(/*cache_enabled*/true);
241
233
  if (proc_maps.Error())
@@ -251,7 +243,6 @@ bool MemoryRangeIsAvailable(uptr range_start, uptr range_end) {
251
243
  return true;
252
244
  }
253
245
 
254
- #if !SANITIZER_APPLE
255
246
  void DumpProcessMap() {
256
247
  MemoryMappingLayout proc_maps(/*cache_enabled*/true);
257
248
  const sptr kBufSize = 4095;
@@ -265,7 +256,7 @@ void DumpProcessMap() {
265
256
  Report("End of process memory map.\n");
266
257
  UnmapOrDie(filename, kBufSize);
267
258
  }
268
- #endif
259
+ # endif
269
260
 
270
261
  const char *GetPwd() {
271
262
  return GetEnv("PWD");
@@ -67,7 +67,8 @@ uptr internal_ptrace(int request, int pid, void *addr, void *data);
67
67
  uptr internal_waitpid(int pid, int *status, int options);
68
68
 
69
69
  int internal_fork();
70
- fd_t internal_spawn(const char *argv[], const char *envp[], pid_t *pid);
70
+ bool internal_spawn(const char* argv[], const char* envp[], pid_t* pid,
71
+ fd_t fd_stdin, fd_t fd_stdout);
71
72
 
72
73
  int internal_sysctl(const int *name, unsigned int namelen, void *oldp,
73
74
  uptr *oldlenp, const void *newp, uptr newlen);
@@ -47,6 +47,8 @@ typedef void (*sa_sigaction_t)(int, siginfo_t *, void *);
47
47
 
48
48
  namespace __sanitizer {
49
49
 
50
+ [[maybe_unused]] static atomic_uint8_t signal_handler_is_from_sanitizer[64];
51
+
50
52
  u32 GetUid() {
51
53
  return getuid();
52
54
  }
@@ -210,6 +212,20 @@ void UnsetAlternateSignalStack() {
210
212
  UnmapOrDie(oldstack.ss_sp, oldstack.ss_size);
211
213
  }
212
214
 
215
+ bool IsSignalHandlerFromSanitizer(int signum) {
216
+ return atomic_load(&signal_handler_is_from_sanitizer[signum],
217
+ memory_order_relaxed);
218
+ }
219
+
220
+ bool SetSignalHandlerFromSanitizer(int signum, bool new_state) {
221
+ if (signum < 0 || static_cast<unsigned>(signum) >=
222
+ ARRAY_SIZE(signal_handler_is_from_sanitizer))
223
+ return false;
224
+
225
+ return atomic_exchange(&signal_handler_is_from_sanitizer[signum], new_state,
226
+ memory_order_relaxed);
227
+ }
228
+
213
229
  static void MaybeInstallSigaction(int signum,
214
230
  SignalHandlerType handler) {
215
231
  if (GetHandleSignalMode(signum) == kHandleSignalNo) return;
@@ -223,6 +239,9 @@ static void MaybeInstallSigaction(int signum,
223
239
  if (common_flags()->use_sigaltstack) sigact.sa_flags |= SA_ONSTACK;
224
240
  CHECK_EQ(0, internal_sigaction(signum, &sigact, nullptr));
225
241
  VReport(1, "Installed the sigaction for signal %d\n", signum);
242
+
243
+ if (common_flags()->cloak_sanitizer_signal_handlers)
244
+ SetSignalHandlerFromSanitizer(signum, true);
226
245
  }
227
246
 
228
247
  void InstallDeadlySignalHandlers(SignalHandlerType handler) {
@@ -20,18 +20,21 @@
20
20
  #include <mach/mach.h>
21
21
 
22
22
  // These are not available in older macOS SDKs.
23
- #ifndef CPU_SUBTYPE_X86_64_H
24
- #define CPU_SUBTYPE_X86_64_H ((cpu_subtype_t)8) /* Haswell */
25
- #endif
26
- #ifndef CPU_SUBTYPE_ARM_V7S
27
- #define CPU_SUBTYPE_ARM_V7S ((cpu_subtype_t)11) /* Swift */
28
- #endif
29
- #ifndef CPU_SUBTYPE_ARM_V7K
30
- #define CPU_SUBTYPE_ARM_V7K ((cpu_subtype_t)12)
31
- #endif
32
- #ifndef CPU_TYPE_ARM64
33
- #define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
34
- #endif
23
+ # ifndef CPU_SUBTYPE_X86_64_H
24
+ # define CPU_SUBTYPE_X86_64_H ((cpu_subtype_t)8) /* Haswell */
25
+ # endif
26
+ # ifndef CPU_SUBTYPE_ARM_V7S
27
+ # define CPU_SUBTYPE_ARM_V7S ((cpu_subtype_t)11) /* Swift */
28
+ # endif
29
+ # ifndef CPU_SUBTYPE_ARM_V7K
30
+ # define CPU_SUBTYPE_ARM_V7K ((cpu_subtype_t)12)
31
+ # endif
32
+ # ifndef CPU_TYPE_ARM64
33
+ # define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
34
+ # endif
35
+ # ifndef CPU_SUBTYPE_ARM64E
36
+ # define CPU_SUBTYPE_ARM64E ((cpu_subtype_t)2)
37
+ # endif
35
38
 
36
39
  namespace __sanitizer {
37
40
 
@@ -42,7 +45,6 @@ struct MemoryMappedSegmentData {
42
45
  const char *current_load_cmd_addr;
43
46
  u32 lc_type;
44
47
  uptr base_virt_addr;
45
- uptr addr_mask;
46
48
  };
47
49
 
48
50
  template <typename Section>
@@ -51,12 +53,62 @@ static void NextSectionLoad(LoadedModule *module, MemoryMappedSegmentData *data,
51
53
  const Section *sc = (const Section *)data->current_load_cmd_addr;
52
54
  data->current_load_cmd_addr += sizeof(Section);
53
55
 
54
- uptr sec_start = (sc->addr & data->addr_mask) + data->base_virt_addr;
56
+ uptr sec_start = sc->addr + data->base_virt_addr;
55
57
  uptr sec_end = sec_start + sc->size;
56
58
  module->addAddressRange(sec_start, sec_end, /*executable=*/false, isWritable,
57
59
  sc->sectname);
58
60
  }
59
61
 
62
+ static bool VerifyMemoryMapping(MemoryMappingLayout* mapping) {
63
+ InternalMmapVector<LoadedModule> modules;
64
+ modules.reserve(128); // matches DumpProcessMap
65
+ mapping->DumpListOfModules(&modules);
66
+
67
+ InternalMmapVector<LoadedModule::AddressRange> segments;
68
+ for (uptr i = 0; i < modules.size(); ++i) {
69
+ for (auto& range : modules[i].ranges()) {
70
+ if (range.beg == range.end)
71
+ continue;
72
+ segments.push_back(range);
73
+ }
74
+ }
75
+
76
+ // Verify that none of the segments overlap:
77
+ // 1. Sort the segments by the start address
78
+ // 2. Check that every segment starts after the previous one ends.
79
+ Sort(segments.data(), segments.size(),
80
+ [](LoadedModule::AddressRange& a, LoadedModule::AddressRange& b) {
81
+ return a.beg < b.beg;
82
+ });
83
+
84
+ // To avoid spam, we only print the report message once-per-process.
85
+ static bool invalid_module_map_reported = false;
86
+ bool well_formed = true;
87
+
88
+ for (size_t i = 1; i < segments.size(); i++) {
89
+ uptr cur_start = segments[i].beg;
90
+ uptr prev_end = segments[i - 1].end;
91
+ if (cur_start < prev_end) {
92
+ well_formed = false;
93
+ VReport(2, "Overlapping mappings: %s start = %p, %s end = %p\n",
94
+ segments[i].name, (void*)cur_start, segments[i - 1].name,
95
+ (void*)prev_end);
96
+ if (!invalid_module_map_reported) {
97
+ Report(
98
+ "WARN: Invalid dyld module map detected. This is most likely a bug "
99
+ "in the sanitizer.\n");
100
+ Report("WARN: Backtraces may be unreliable.\n");
101
+ invalid_module_map_reported = true;
102
+ }
103
+ }
104
+ }
105
+
106
+ for (auto& m : modules) m.clear();
107
+
108
+ mapping->Reset();
109
+ return well_formed;
110
+ }
111
+
60
112
  void MemoryMappedSegment::AddAddressRanges(LoadedModule *module) {
61
113
  // Don't iterate over sections when the caller hasn't set up the
62
114
  // data pointer, when there are no sections, or when the segment
@@ -82,6 +134,7 @@ void MemoryMappedSegment::AddAddressRanges(LoadedModule *module) {
82
134
 
83
135
  MemoryMappingLayout::MemoryMappingLayout(bool cache_enabled) {
84
136
  Reset();
137
+ VerifyMemoryMapping(this);
85
138
  }
86
139
 
87
140
  MemoryMappingLayout::~MemoryMappingLayout() {
@@ -123,7 +176,7 @@ void MemoryMappingLayout::Reset() {
123
176
  // The dyld load address should be unchanged throughout process execution,
124
177
  // and it is expensive to compute once many libraries have been loaded,
125
178
  // so cache it here and do not reset.
126
- static mach_header *dyld_hdr = 0;
179
+ static const mach_header* dyld_hdr = 0;
127
180
  static const char kDyldPath[] = "/usr/lib/dyld";
128
181
  static const int kDyldImageIdx = -1;
129
182
 
@@ -187,17 +240,22 @@ typedef struct dyld_shared_cache_dylib_text_info
187
240
 
188
241
  extern bool _dyld_get_shared_cache_uuid(uuid_t uuid);
189
242
  extern const void *_dyld_get_shared_cache_range(size_t *length);
243
+ extern intptr_t _dyld_get_image_slide(const struct mach_header* mh);
190
244
  extern int dyld_shared_cache_iterate_text(
191
245
  const uuid_t cacheUuid,
192
246
  void (^callback)(const dyld_shared_cache_dylib_text_info *info));
247
+ SANITIZER_WEAK_IMPORT const struct mach_header* _dyld_get_dyld_header(void);
193
248
  } // extern "C"
194
249
 
195
- static mach_header *GetDyldImageHeaderViaSharedCache() {
250
+ static const mach_header* GetDyldImageHeaderViaSharedCache() {
196
251
  uuid_t uuid;
197
252
  bool hasCache = _dyld_get_shared_cache_uuid(uuid);
198
253
  if (!hasCache)
199
254
  return nullptr;
200
255
 
256
+ if (&_dyld_get_dyld_header != nullptr)
257
+ return _dyld_get_dyld_header();
258
+
201
259
  size_t cacheLength;
202
260
  __block uptr cacheStart = (uptr)_dyld_get_shared_cache_range(&cacheLength);
203
261
  CHECK(cacheStart && cacheLength);
@@ -255,23 +313,21 @@ static bool NextSegmentLoad(MemoryMappedSegment *segment,
255
313
  layout_data->current_load_cmd_count--;
256
314
  if (((const load_command *)lc)->cmd == kLCSegment) {
257
315
  const SegmentCommand* sc = (const SegmentCommand *)lc;
258
- uptr base_virt_addr, addr_mask;
259
- if (layout_data->current_image == kDyldImageIdx) {
260
- base_virt_addr = (uptr)get_dyld_hdr();
261
- // vmaddr is masked with 0xfffff because on macOS versions < 10.12,
262
- // it contains an absolute address rather than an offset for dyld.
263
- // To make matters even more complicated, this absolute address
264
- // isn't actually the absolute segment address, but the offset portion
265
- // of the address is accurate when combined with the dyld base address,
266
- // and the mask will give just this offset.
267
- addr_mask = 0xfffff;
268
- } else {
316
+ if (internal_strcmp(sc->segname, "__LINKEDIT") == 0) {
317
+ // The LINKEDIT sections are for internal linker use, and may alias
318
+ // with the LINKEDIT section for other modules. (If we included them,
319
+ // our memory map would contain overlappping sections.)
320
+ return false;
321
+ }
322
+
323
+ uptr base_virt_addr;
324
+ if (layout_data->current_image == kDyldImageIdx)
325
+ base_virt_addr = (uptr)_dyld_get_image_slide(get_dyld_hdr());
326
+ else
269
327
  base_virt_addr =
270
328
  (uptr)_dyld_get_image_vmaddr_slide(layout_data->current_image);
271
- addr_mask = ~0;
272
- }
273
329
 
274
- segment->start = (sc->vmaddr & addr_mask) + base_virt_addr;
330
+ segment->start = sc->vmaddr + base_virt_addr;
275
331
  segment->end = segment->start + sc->vmsize;
276
332
  // Most callers don't need section information, so only fill this struct
277
333
  // when required.
@@ -281,9 +337,9 @@ static bool NextSegmentLoad(MemoryMappedSegment *segment,
281
337
  (const char *)lc + sizeof(SegmentCommand);
282
338
  seg_data->lc_type = kLCSegment;
283
339
  seg_data->base_virt_addr = base_virt_addr;
284
- seg_data->addr_mask = addr_mask;
285
340
  internal_strncpy(seg_data->name, sc->segname,
286
341
  ARRAY_SIZE(seg_data->name));
342
+ seg_data->name[ARRAY_SIZE(seg_data->name) - 1] = 0;
287
343
  }
288
344
 
289
345
  // Return the initial protection.
@@ -297,6 +353,7 @@ static bool NextSegmentLoad(MemoryMappedSegment *segment,
297
353
  ? kDyldPath
298
354
  : _dyld_get_image_name(layout_data->current_image);
299
355
  internal_strncpy(segment->filename, src, segment->filename_size);
356
+ segment->filename[segment->filename_size - 1] = 0;
300
357
  }
301
358
  segment->arch = layout_data->current_arch;
302
359
  internal_memcpy(segment->uuid, layout_data->current_uuid, kModuleUUIDSize);
@@ -311,18 +368,26 @@ ModuleArch ModuleArchFromCpuType(cpu_type_t cputype, cpu_subtype_t cpusubtype) {
311
368
  case CPU_TYPE_I386:
312
369
  return kModuleArchI386;
313
370
  case CPU_TYPE_X86_64:
314
- if (cpusubtype == CPU_SUBTYPE_X86_64_ALL) return kModuleArchX86_64;
315
- if (cpusubtype == CPU_SUBTYPE_X86_64_H) return kModuleArchX86_64H;
371
+ if (cpusubtype == CPU_SUBTYPE_X86_64_ALL)
372
+ return kModuleArchX86_64;
373
+ if (cpusubtype == CPU_SUBTYPE_X86_64_H)
374
+ return kModuleArchX86_64H;
316
375
  CHECK(0 && "Invalid subtype of x86_64");
317
376
  return kModuleArchUnknown;
318
377
  case CPU_TYPE_ARM:
319
- if (cpusubtype == CPU_SUBTYPE_ARM_V6) return kModuleArchARMV6;
320
- if (cpusubtype == CPU_SUBTYPE_ARM_V7) return kModuleArchARMV7;
321
- if (cpusubtype == CPU_SUBTYPE_ARM_V7S) return kModuleArchARMV7S;
322
- if (cpusubtype == CPU_SUBTYPE_ARM_V7K) return kModuleArchARMV7K;
378
+ if (cpusubtype == CPU_SUBTYPE_ARM_V6)
379
+ return kModuleArchARMV6;
380
+ if (cpusubtype == CPU_SUBTYPE_ARM_V7)
381
+ return kModuleArchARMV7;
382
+ if (cpusubtype == CPU_SUBTYPE_ARM_V7S)
383
+ return kModuleArchARMV7S;
384
+ if (cpusubtype == CPU_SUBTYPE_ARM_V7K)
385
+ return kModuleArchARMV7K;
323
386
  CHECK(0 && "Invalid subtype of ARM");
324
387
  return kModuleArchUnknown;
325
388
  case CPU_TYPE_ARM64:
389
+ if (cpusubtype == CPU_SUBTYPE_ARM64E)
390
+ return kModuleArchARM64E;
326
391
  return kModuleArchARM64;
327
392
  default:
328
393
  CHECK(0 && "Invalid CPU type");
@@ -15,7 +15,7 @@
15
15
  # define SANITIZER_REDEFINE_BUILTINS_H
16
16
 
17
17
  // The asm hack only works with GCC and Clang.
18
- # if !defined(_WIN32) && !defined(_AIX)
18
+ # if !defined(_WIN32) && !defined(_AIX) && !defined(__APPLE__)
19
19
 
20
20
  asm(R"(
21
21
  .set memcpy, __sanitizer_internal_memcpy
@@ -45,6 +45,8 @@ using namespace __sanitizer;
45
45
  INTERCEPTOR(uptr, bsd_signal, int signum, uptr handler) {
46
46
  SIGNAL_INTERCEPTOR_ENTER();
47
47
  if (GetHandleSignalMode(signum) == kHandleSignalExclusive) return 0;
48
+
49
+ // TODO: support cloak_sanitizer_signal_handlers
48
50
  SIGNAL_INTERCEPTOR_SIGNAL_IMPL(bsd_signal, signum, handler);
49
51
  }
50
52
  #define INIT_BSD_SIGNAL COMMON_INTERCEPT_FUNCTION(bsd_signal)
@@ -56,19 +58,55 @@ INTERCEPTOR(uptr, bsd_signal, int signum, uptr handler) {
56
58
  INTERCEPTOR(uptr, signal, int signum, uptr handler) {
57
59
  SIGNAL_INTERCEPTOR_ENTER();
58
60
  if (GetHandleSignalMode(signum) == kHandleSignalExclusive)
61
+ // The user can neither view nor change the signal handler, regardless of
62
+ // the cloak_sanitizer_signal_handlers setting. This differs from
63
+ // sigaction().
59
64
  return (uptr) nullptr;
60
- SIGNAL_INTERCEPTOR_SIGNAL_IMPL(signal, signum, handler);
65
+
66
+ uptr ret = +[](auto signal, int signum, uptr handler) {
67
+ SIGNAL_INTERCEPTOR_SIGNAL_IMPL(signal, signum, handler);
68
+ }(signal, signum, handler);
69
+
70
+ if (ret != sig_err && SetSignalHandlerFromSanitizer(signum, false))
71
+ // If the user sets a signal handler, it becomes uncloaked, even if they
72
+ // reuse a sanitizer's signal handler.
73
+ ret = sig_dfl;
74
+
75
+ return ret;
61
76
  }
62
77
  #define INIT_SIGNAL COMMON_INTERCEPT_FUNCTION(signal)
63
78
 
64
79
  INTERCEPTOR(int, sigaction_symname, int signum,
65
80
  const __sanitizer_sigaction *act, __sanitizer_sigaction *oldact) {
66
81
  SIGNAL_INTERCEPTOR_ENTER();
82
+
67
83
  if (GetHandleSignalMode(signum) == kHandleSignalExclusive) {
68
84
  if (!oldact) return 0;
69
85
  act = nullptr;
86
+ // If cloak_sanitizer_signal_handlers=true, the user can neither view nor
87
+ // change the signal handle.
88
+ // If false, the user can view but not change the signal handler. This
89
+ // differs from signal().
70
90
  }
71
- SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signum, act, oldact);
91
+
92
+ int ret = +[](int signum, const __sanitizer_sigaction* act,
93
+ __sanitizer_sigaction* oldact) {
94
+ SIGNAL_INTERCEPTOR_SIGACTION_IMPL(signum, act, oldact);
95
+ }(signum, act, oldact);
96
+
97
+ if (act) {
98
+ if (ret == 0 && SetSignalHandlerFromSanitizer(signum, false)) {
99
+ // If the user sets a signal handler, it becomes uncloaked, even if they
100
+ // reuse a sanitizer's signal handler.
101
+
102
+ if (oldact)
103
+ oldact->handler = reinterpret_cast<__sanitizer_sighandler_ptr>(sig_dfl);
104
+ }
105
+ } else if (ret == 0 && oldact && IsSignalHandlerFromSanitizer(signum)) {
106
+ oldact->handler = reinterpret_cast<__sanitizer_sighandler_ptr>(sig_dfl);
107
+ }
108
+
109
+ return ret;
72
110
  }
73
111
  #define INIT_SIGACTION COMMON_INTERCEPT_FUNCTION(sigaction_symname)
74
112
 
@@ -38,7 +38,7 @@ class SuspendedThreadsList {
38
38
  }
39
39
 
40
40
  virtual uptr ThreadCount() const { UNIMPLEMENTED(); }
41
- virtual tid_t GetThreadID(uptr index) const { UNIMPLEMENTED(); }
41
+ virtual ThreadID GetThreadID(uptr index) const { UNIMPLEMENTED(); }
42
42
 
43
43
  protected:
44
44
  ~SuspendedThreadsList() {}