@zigc/lib 0.17.0-dev.131 → 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 (786) 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/libc/include/aarch64-linux-any/asm/hwcap.h +1 -0
  97. package/libc/include/aarch64-linux-any/asm/unistd_64.h +1 -0
  98. package/libc/include/any-linux-any/asm-generic/errno.h +2 -0
  99. package/libc/include/any-linux-any/asm-generic/unistd.h +4 -1
  100. package/libc/include/any-linux-any/drm/amdgpu_drm.h +20 -6
  101. package/libc/include/any-linux-any/drm/amdxdna_accel.h +8 -0
  102. package/libc/include/any-linux-any/drm/drm_fourcc.h +6 -6
  103. package/libc/include/any-linux-any/drm/panfrost_drm.h +75 -1
  104. package/libc/include/any-linux-any/drm/panthor_drm.h +154 -3
  105. package/libc/include/any-linux-any/drm/rocket_accel.h +74 -24
  106. package/libc/include/any-linux-any/drm/xe_drm.h +89 -6
  107. package/libc/include/any-linux-any/linux/android/binder.h +1 -1
  108. package/libc/include/any-linux-any/linux/bpf.h +28 -0
  109. package/libc/include/any-linux-any/linux/btrfs.h +1 -0
  110. package/libc/include/any-linux-any/linux/btrfs_tree.h +32 -2
  111. package/libc/include/any-linux-any/linux/dma-buf.h +1 -0
  112. package/libc/include/any-linux-any/linux/dpll.h +1 -0
  113. package/libc/include/any-linux-any/linux/elf.h +2 -0
  114. package/libc/include/any-linux-any/linux/ethtool.h +21 -5
  115. package/libc/include/any-linux-any/linux/fs.h +1 -0
  116. package/libc/include/any-linux-any/linux/hyperv.h +1 -1
  117. package/libc/include/any-linux-any/linux/idxd.h +134 -134
  118. package/libc/include/any-linux-any/linux/if_alg.h +1 -1
  119. package/libc/include/any-linux-any/linux/if_link.h +1 -0
  120. package/libc/include/any-linux-any/linux/input-event-codes.h +4 -0
  121. package/libc/include/any-linux-any/linux/io_uring/bpf_filter.h +68 -0
  122. package/libc/include/any-linux-any/linux/io_uring/query.h +5 -1
  123. package/libc/include/any-linux-any/linux/io_uring.h +33 -2
  124. package/libc/include/any-linux-any/linux/iommufd.h +39 -0
  125. package/libc/include/any-linux-any/linux/kfd_ioctl.h +13 -3
  126. package/libc/include/any-linux-any/linux/kfd_sysfs.h +2 -1
  127. package/libc/include/any-linux-any/linux/kvm.h +30 -6
  128. package/libc/include/any-linux-any/linux/landlock.h +22 -8
  129. package/libc/include/any-linux-any/linux/magic.h +1 -0
  130. package/libc/include/any-linux-any/linux/mempolicy.h +3 -0
  131. package/libc/include/any-linux-any/linux/mount.h +11 -2
  132. package/libc/include/any-linux-any/linux/mptcp_pm.h +1 -1
  133. package/libc/include/any-linux-any/linux/mshv.h +2 -0
  134. package/libc/include/any-linux-any/linux/netfilter_bridge.h +5 -4
  135. package/libc/include/any-linux-any/linux/netfilter_ipv4.h +4 -5
  136. package/libc/include/any-linux-any/linux/netfilter_ipv6.h +3 -4
  137. package/libc/include/any-linux-any/linux/nfs.h +1 -1
  138. package/libc/include/any-linux-any/linux/nfsd_netlink.h +1 -0
  139. package/libc/include/any-linux-any/linux/nilfs2_api.h +2 -2
  140. package/libc/include/any-linux-any/linux/nilfs2_ondisk.h +97 -66
  141. package/libc/include/any-linux-any/linux/nl80211.h +104 -3
  142. package/libc/include/any-linux-any/linux/pci.h +7 -0
  143. package/libc/include/any-linux-any/linux/pci_regs.h +65 -6
  144. package/libc/include/any-linux-any/linux/pcitest.h +1 -0
  145. package/libc/include/any-linux-any/linux/perf_event.h +24 -3
  146. package/libc/include/any-linux-any/linux/pkt_sched.h +1 -0
  147. package/libc/include/any-linux-any/linux/prctl.h +30 -0
  148. package/libc/include/any-linux-any/linux/rseq.h +62 -5
  149. package/libc/include/any-linux-any/linux/shm.h +0 -1
  150. package/libc/include/any-linux-any/linux/stddef.h +4 -0
  151. package/libc/include/any-linux-any/linux/sysctl.h +1 -2
  152. package/libc/include/any-linux-any/linux/taskstats.h +12 -1
  153. package/libc/include/any-linux-any/linux/tcp.h +23 -3
  154. package/libc/include/any-linux-any/linux/typelimits.h +8 -0
  155. package/libc/include/any-linux-any/linux/ublk_cmd.h +120 -1
  156. package/libc/include/any-linux-any/linux/v4l2-controls.h +63 -0
  157. package/libc/include/any-linux-any/linux/vbox_vmmdev_types.h +2 -2
  158. package/libc/include/any-linux-any/linux/vduse.h +80 -5
  159. package/libc/include/any-linux-any/linux/version.h +3 -3
  160. package/libc/include/any-linux-any/linux/vfio.h +4 -0
  161. package/libc/include/any-linux-any/linux/videodev2.h +3 -0
  162. package/libc/include/any-linux-any/linux/virtio_ring.h +1 -2
  163. package/libc/include/any-linux-any/linux/vmclock-abi.h +20 -0
  164. package/libc/include/any-linux-any/rdma/bnxt_re-abi.h +16 -0
  165. package/libc/include/any-linux-any/rdma/ib_user_ioctl_cmds.h +16 -0
  166. package/libc/include/any-linux-any/rdma/mana-abi.h +3 -0
  167. package/libc/include/any-linux-any/scsi/scsi_bsg_ufs.h +8 -9
  168. package/libc/include/any-linux-any/sound/sof/tokens.h +6 -0
  169. package/libc/include/arc-linux-any/asm/swab.h +0 -63
  170. package/libc/include/arc-linux-any/asm/unistd_32.h +1 -0
  171. package/libc/include/arm-linux-any/asm/ptrace.h +0 -9
  172. package/libc/include/arm-linux-any/asm/unistd-eabi.h +1 -0
  173. package/libc/include/arm-linux-any/asm/unistd-oabi.h +1 -0
  174. package/libc/include/csky-linux-any/asm/unistd_32.h +1 -0
  175. package/libc/include/hexagon-linux-any/asm/unistd_32.h +1 -0
  176. package/libc/include/loongarch-linux-any/asm/hwcap.h +1 -0
  177. package/libc/include/loongarch-linux-any/asm/kvm.h +1 -0
  178. package/libc/include/loongarch-linux-any/asm/kvm_para.h +1 -0
  179. package/libc/include/loongarch-linux-any/asm/unistd_32.h +2 -0
  180. package/libc/include/loongarch-linux-any/asm/unistd_64.h +2 -0
  181. package/libc/include/m68k-linux-any/asm/unistd_32.h +1 -0
  182. package/libc/include/mips-linux-any/asm/errno.h +2 -0
  183. package/libc/include/mips-linux-any/asm/unistd_n32.h +1 -0
  184. package/libc/include/mips-linux-any/asm/unistd_n64.h +1 -0
  185. package/libc/include/mips-linux-any/asm/unistd_o32.h +1 -0
  186. package/libc/include/powerpc-linux-any/asm/unistd_32.h +1 -0
  187. package/libc/include/powerpc-linux-any/asm/unistd_64.h +1 -0
  188. package/libc/include/riscv-linux-any/asm/hwprobe.h +4 -0
  189. package/libc/include/riscv-linux-any/asm/kvm.h +3 -0
  190. package/libc/include/riscv-linux-any/asm/ptrace.h +37 -0
  191. package/libc/include/riscv-linux-any/asm/sigcontext.h +1 -0
  192. package/libc/include/riscv-linux-any/asm/unistd_32.h +1 -0
  193. package/libc/include/riscv-linux-any/asm/unistd_64.h +1 -0
  194. package/libc/include/s390x-linux-any/asm/unistd_64.h +1 -0
  195. package/libc/include/sparc-linux-any/asm/errno.h +2 -0
  196. package/libc/include/sparc-linux-any/asm/ioctls.h +4 -4
  197. package/libc/include/sparc-linux-any/asm/unistd_32.h +2 -0
  198. package/libc/include/sparc-linux-any/asm/unistd_64.h +2 -0
  199. package/libc/include/x86-linux-any/asm/auxvec.h +0 -4
  200. package/libc/include/x86-linux-any/asm/kvm.h +13 -8
  201. package/libc/include/x86-linux-any/asm/svm.h +16 -16
  202. package/libc/include/x86-linux-any/asm/unistd_32.h +1 -0
  203. package/libc/include/x86-linux-any/asm/unistd_64.h +1 -0
  204. package/libc/include/x86-linux-any/asm/unistd_x32.h +1 -0
  205. package/libc/include/xtensa-linux-any/asm/unistd_32.h +1 -0
  206. package/libcxx/include/__algorithm/all_of.h +11 -5
  207. package/libcxx/include/__algorithm/comp.h +4 -0
  208. package/libcxx/include/__algorithm/copy.h +28 -147
  209. package/libcxx/include/__algorithm/copy_backward.h +9 -24
  210. package/libcxx/include/__algorithm/copy_n.h +50 -16
  211. package/libcxx/include/__algorithm/count.h +2 -2
  212. package/libcxx/include/__algorithm/equal.h +43 -55
  213. package/libcxx/include/__algorithm/fill.h +26 -8
  214. package/libcxx/include/__algorithm/fill_n.h +32 -46
  215. package/libcxx/include/__algorithm/find.h +96 -39
  216. package/libcxx/include/__algorithm/find_end.h +105 -0
  217. package/libcxx/include/__algorithm/for_each.h +18 -24
  218. package/libcxx/include/__algorithm/for_each_n.h +20 -47
  219. package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
  220. package/libcxx/include/__algorithm/for_each_segment.h +26 -0
  221. package/libcxx/include/__algorithm/generate.h +4 -2
  222. package/libcxx/include/__algorithm/generate_n.h +19 -6
  223. package/libcxx/include/__algorithm/is_permutation.h +4 -4
  224. package/libcxx/include/__algorithm/iterator_operations.h +3 -0
  225. package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
  226. package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
  227. package/libcxx/include/__algorithm/make_heap.h +16 -4
  228. package/libcxx/include/__algorithm/mismatch.h +2 -2
  229. package/libcxx/include/__algorithm/move.h +8 -19
  230. package/libcxx/include/__algorithm/move_backward.h +9 -24
  231. package/libcxx/include/__algorithm/none_of.h +4 -4
  232. package/libcxx/include/__algorithm/partial_sort.h +1 -1
  233. package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
  234. package/libcxx/include/__algorithm/pstl.h +9 -9
  235. package/libcxx/include/__algorithm/radix_sort.h +27 -25
  236. package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
  237. package/libcxx/include/__algorithm/ranges_equal.h +17 -26
  238. package/libcxx/include/__algorithm/ranges_fill.h +7 -6
  239. package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
  240. package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
  241. package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
  242. package/libcxx/include/__algorithm/rotate.h +27 -44
  243. package/libcxx/include/__algorithm/search_n.h +49 -37
  244. package/libcxx/include/__algorithm/sift_down.h +19 -18
  245. package/libcxx/include/__algorithm/simd_utils.h +33 -4
  246. package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
  247. package/libcxx/include/__algorithm/stable_sort.h +1 -1
  248. package/libcxx/include/__assertion_handler +31 -4
  249. package/libcxx/include/__atomic/atomic.h +36 -60
  250. package/libcxx/include/__atomic/atomic_flag.h +19 -37
  251. package/libcxx/include/__atomic/atomic_ref.h +29 -12
  252. package/libcxx/include/__atomic/atomic_sync.h +127 -55
  253. package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
  254. package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
  255. package/libcxx/include/__atomic/contention_t.h +27 -3
  256. package/libcxx/include/__atomic/floating_point_helper.h +55 -0
  257. package/libcxx/include/__bit/countl.h +1 -2
  258. package/libcxx/include/__bit/countr.h +1 -2
  259. package/libcxx/include/__bit/has_single_bit.h +1 -1
  260. package/libcxx/include/__bit/popcount.h +0 -1
  261. package/libcxx/include/__bit/rotate.h +15 -26
  262. package/libcxx/include/__bit_reference +207 -18
  263. package/libcxx/include/__charconv/from_chars_integral.h +1 -1
  264. package/libcxx/include/__charconv/from_chars_result.h +1 -1
  265. package/libcxx/include/__charconv/to_chars_integral.h +1 -0
  266. package/libcxx/include/__charconv/to_chars_result.h +1 -1
  267. package/libcxx/include/__charconv/traits.h +3 -24
  268. package/libcxx/include/__chrono/day.h +11 -0
  269. package/libcxx/include/__chrono/duration.h +58 -33
  270. package/libcxx/include/__chrono/file_clock.h +4 -2
  271. package/libcxx/include/__chrono/is_clock.h +72 -0
  272. package/libcxx/include/__chrono/leap_second.h +13 -0
  273. package/libcxx/include/__chrono/month.h +13 -0
  274. package/libcxx/include/__chrono/month_weekday.h +22 -0
  275. package/libcxx/include/__chrono/monthday.h +20 -0
  276. package/libcxx/include/__chrono/steady_clock.h +1 -1
  277. package/libcxx/include/__chrono/system_clock.h +3 -3
  278. package/libcxx/include/__chrono/time_point.h +37 -13
  279. package/libcxx/include/__chrono/weekday.h +25 -0
  280. package/libcxx/include/__chrono/year.h +11 -0
  281. package/libcxx/include/__chrono/year_month.h +13 -0
  282. package/libcxx/include/__chrono/year_month_day.h +23 -0
  283. package/libcxx/include/__chrono/year_month_weekday.h +26 -0
  284. package/libcxx/include/__chrono/zoned_time.h +16 -0
  285. package/libcxx/include/__compare/is_eq.h +6 -6
  286. package/libcxx/include/__compare/strong_order.h +12 -30
  287. package/libcxx/include/__compare/three_way_comparable.h +2 -2
  288. package/libcxx/include/__concepts/comparison_common_type.h +40 -0
  289. package/libcxx/include/__concepts/equality_comparable.h +2 -1
  290. package/libcxx/include/__condition_variable/condition_variable.h +1 -1
  291. package/libcxx/include/__config +63 -280
  292. package/libcxx/include/__configuration/abi.h +14 -24
  293. package/libcxx/include/__configuration/availability.h +65 -118
  294. package/libcxx/include/__configuration/compiler.h +6 -6
  295. package/libcxx/include/__configuration/experimental.h +38 -0
  296. package/libcxx/include/__configuration/hardening.h +215 -0
  297. package/libcxx/include/__configuration/language.h +3 -0
  298. package/libcxx/include/__configuration/platform.h +9 -16
  299. package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
  300. package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
  301. package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
  302. package/libcxx/include/__exception/exception.h +6 -4
  303. package/libcxx/include/__exception/exception_ptr.h +27 -5
  304. package/libcxx/include/__exception/nested_exception.h +2 -2
  305. package/libcxx/include/__exception/operations.h +5 -5
  306. package/libcxx/include/__expected/bad_expected_access.h +8 -6
  307. package/libcxx/include/__expected/expected.h +62 -64
  308. package/libcxx/include/__expected/unexpected.h +4 -4
  309. package/libcxx/include/__filesystem/copy_options.h +4 -4
  310. package/libcxx/include/__filesystem/directory_entry.h +37 -33
  311. package/libcxx/include/__filesystem/directory_iterator.h +9 -11
  312. package/libcxx/include/__filesystem/directory_options.h +7 -4
  313. package/libcxx/include/__filesystem/file_status.h +3 -3
  314. package/libcxx/include/__filesystem/filesystem_error.h +9 -10
  315. package/libcxx/include/__filesystem/operations.h +97 -66
  316. package/libcxx/include/__filesystem/path.h +68 -64
  317. package/libcxx/include/__filesystem/path_iterator.h +1 -3
  318. package/libcxx/include/__filesystem/perm_options.h +4 -4
  319. package/libcxx/include/__filesystem/perms.h +4 -4
  320. package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
  321. package/libcxx/include/__filesystem/space_info.h +1 -1
  322. package/libcxx/include/__filesystem/u8path.h +12 -14
  323. package/libcxx/include/__flat_map/flat_map.h +88 -71
  324. package/libcxx/include/__flat_map/flat_multimap.h +251 -172
  325. package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
  326. package/libcxx/include/__flat_map/utils.h +1 -0
  327. package/libcxx/include/__flat_set/flat_multiset.h +211 -143
  328. package/libcxx/include/__flat_set/flat_set.h +86 -68
  329. package/libcxx/include/__format/concepts.h +0 -14
  330. package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
  331. package/libcxx/include/__format/fmt_pair_like.h +42 -0
  332. package/libcxx/include/__format/format_arg.h +7 -10
  333. package/libcxx/include/__format/format_args.h +1 -1
  334. package/libcxx/include/__format/format_context.h +5 -5
  335. package/libcxx/include/__format/format_parse_context.h +2 -2
  336. package/libcxx/include/__format/formatter_output.h +30 -34
  337. package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
  338. package/libcxx/include/__format/range_default_formatter.h +2 -41
  339. package/libcxx/include/__format/range_format.h +71 -0
  340. package/libcxx/include/__format/range_formatter.h +1 -0
  341. package/libcxx/include/__format/width_estimation_table.h +4 -2
  342. package/libcxx/include/__functional/bind.h +10 -15
  343. package/libcxx/include/__functional/bind_back.h +1 -1
  344. package/libcxx/include/__functional/bind_front.h +1 -1
  345. package/libcxx/include/__functional/function.h +57 -75
  346. package/libcxx/include/__functional/hash.h +1 -10
  347. package/libcxx/include/__functional/identity.h +1 -1
  348. package/libcxx/include/__functional/is_transparent.h +8 -0
  349. package/libcxx/include/__functional/mem_fn.h +2 -1
  350. package/libcxx/include/__functional/operations.h +18 -0
  351. package/libcxx/include/__functional/ranges_operations.h +7 -0
  352. package/libcxx/include/__functional/reference_wrapper.h +7 -5
  353. package/libcxx/include/__functional/weak_result_type.h +14 -28
  354. package/libcxx/include/__fwd/ios.h +1 -1
  355. package/libcxx/include/__fwd/tuple.h +14 -0
  356. package/libcxx/include/__hash_table +371 -357
  357. package/libcxx/include/__ios/fpos.h +4 -4
  358. package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
  359. package/libcxx/include/__iterator/bounded_iter.h +7 -8
  360. package/libcxx/include/__iterator/concepts.h +6 -9
  361. package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
  362. package/libcxx/include/__iterator/distance.h +40 -18
  363. package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
  364. package/libcxx/include/__iterator/insert_iterator.h +1 -7
  365. package/libcxx/include/__iterator/istream_iterator.h +6 -7
  366. package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
  367. package/libcxx/include/__iterator/iter_move.h +1 -1
  368. package/libcxx/include/__iterator/iterator.h +13 -0
  369. package/libcxx/include/__iterator/iterator_traits.h +13 -14
  370. package/libcxx/include/__iterator/ostream_iterator.h +1 -7
  371. package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
  372. package/libcxx/include/__iterator/reverse_iterator.h +8 -13
  373. package/libcxx/include/__iterator/segmented_iterator.h +3 -8
  374. package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
  375. package/libcxx/include/__iterator/wrap_iter.h +8 -6
  376. package/libcxx/include/__locale +3 -10
  377. package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
  378. package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
  379. package/libcxx/include/__locale_dir/messages.h +1 -1
  380. package/libcxx/include/__locale_dir/money.h +2 -2
  381. package/libcxx/include/__locale_dir/num.h +190 -243
  382. package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
  383. package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
  384. package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
  385. package/libcxx/include/__locale_dir/support/linux.h +0 -37
  386. package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
  387. package/libcxx/include/__locale_dir/support/newlib.h +243 -0
  388. package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
  389. package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
  390. package/libcxx/include/__locale_dir/support/windows.h +0 -29
  391. package/libcxx/include/__locale_dir/time.h +3 -7
  392. package/libcxx/include/__math/hypot.h +1 -1
  393. package/libcxx/include/__math/logarithms.h +1 -1
  394. package/libcxx/include/__math/traits.h +80 -11
  395. package/libcxx/include/__mdspan/extents.h +7 -4
  396. package/libcxx/include/__mdspan/layout_stride.h +4 -5
  397. package/libcxx/include/__mdspan/mdspan.h +29 -23
  398. package/libcxx/include/__memory/addressof.h +7 -5
  399. package/libcxx/include/__memory/align.h +18 -1
  400. package/libcxx/include/__memory/allocate_at_least.h +15 -10
  401. package/libcxx/include/__memory/allocator.h +14 -26
  402. package/libcxx/include/__memory/allocator_traits.h +6 -4
  403. package/libcxx/include/__memory/compressed_pair.h +15 -9
  404. package/libcxx/include/__memory/construct_at.h +12 -23
  405. package/libcxx/include/__memory/inout_ptr.h +1 -1
  406. package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
  407. package/libcxx/include/__memory/out_ptr.h +1 -1
  408. package/libcxx/include/__memory/pointer_traits.h +1 -1
  409. package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
  410. package/libcxx/include/__memory/shared_count.h +9 -30
  411. package/libcxx/include/__memory/shared_ptr.h +100 -145
  412. package/libcxx/include/__memory/temp_value.h +1 -2
  413. package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
  414. package/libcxx/include/__memory/unique_ptr.h +14 -16
  415. package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
  416. package/libcxx/include/__memory_resource/memory_resource.h +4 -2
  417. package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
  418. package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
  419. package/libcxx/include/__memory_resource/pool_options.h +1 -1
  420. package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
  421. package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
  422. package/libcxx/include/__mutex/mutex.h +2 -2
  423. package/libcxx/include/__mutex/once_flag.h +14 -11
  424. package/libcxx/include/__mutex/tag_types.h +3 -3
  425. package/libcxx/include/__mutex/unique_lock.h +8 -7
  426. package/libcxx/include/__new/align_val_t.h +6 -0
  427. package/libcxx/include/__new/allocate.h +1 -2
  428. package/libcxx/include/__new/exceptions.h +8 -2
  429. package/libcxx/include/__new/global_new_delete.h +4 -11
  430. package/libcxx/include/__new/interference_size.h +0 -4
  431. package/libcxx/include/__new/launder.h +3 -5
  432. package/libcxx/include/__new/nothrow_t.h +1 -1
  433. package/libcxx/include/__numeric/gcd_lcm.h +24 -34
  434. package/libcxx/include/__numeric/midpoint.h +9 -14
  435. package/libcxx/include/__numeric/pstl.h +2 -2
  436. package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
  437. package/libcxx/include/__ostream/basic_ostream.h +8 -8
  438. package/libcxx/include/__pstl/backends/default.h +14 -14
  439. package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
  440. package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
  441. package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
  442. package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
  443. package/libcxx/include/__random/binomial_distribution.h +10 -4
  444. package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
  445. package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
  446. package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
  447. package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
  448. package/libcxx/include/__ranges/adjacent_view.h +419 -0
  449. package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
  450. package/libcxx/include/__ranges/chunk_by_view.h +6 -6
  451. package/libcxx/include/__ranges/common_view.h +7 -7
  452. package/libcxx/include/__ranges/drop_view.h +8 -8
  453. package/libcxx/include/__ranges/drop_while_view.h +5 -5
  454. package/libcxx/include/__ranges/elements_of.h +49 -0
  455. package/libcxx/include/__ranges/empty_view.h +5 -5
  456. package/libcxx/include/__ranges/filter_view.h +10 -10
  457. package/libcxx/include/__ranges/iota_view.h +41 -22
  458. package/libcxx/include/__ranges/owning_view.h +15 -15
  459. package/libcxx/include/__ranges/ref_view.h +6 -6
  460. package/libcxx/include/__ranges/repeat_view.h +17 -10
  461. package/libcxx/include/__ranges/single_view.h +8 -8
  462. package/libcxx/include/__ranges/take_view.h +9 -9
  463. package/libcxx/include/__ranges/transform_view.h +1 -2
  464. package/libcxx/include/__ranges/view_interface.h +10 -10
  465. package/libcxx/include/__ranges/zip_transform_view.h +357 -0
  466. package/libcxx/include/__ranges/zip_view.h +20 -20
  467. package/libcxx/include/__split_buffer +612 -240
  468. package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
  469. package/libcxx/include/__stop_token/stop_callback.h +2 -2
  470. package/libcxx/include/__stop_token/stop_source.h +1 -1
  471. package/libcxx/include/__stop_token/stop_state.h +4 -4
  472. package/libcxx/include/__stop_token/stop_token.h +1 -1
  473. package/libcxx/include/__string/char_traits.h +51 -31
  474. package/libcxx/include/__string/constexpr_c_functions.h +5 -5
  475. package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
  476. package/libcxx/include/__system_error/error_category.h +8 -8
  477. package/libcxx/include/__system_error/error_code.h +5 -5
  478. package/libcxx/include/__system_error/error_condition.h +4 -4
  479. package/libcxx/include/__system_error/system_error.h +1 -1
  480. package/libcxx/include/__thread/id.h +1 -1
  481. package/libcxx/include/__thread/jthread.h +1 -1
  482. package/libcxx/include/__thread/poll_with_backoff.h +27 -8
  483. package/libcxx/include/__thread/support/c11.h +8 -8
  484. package/libcxx/include/__thread/support/pthread.h +8 -8
  485. package/libcxx/include/__thread/support/windows.h +8 -8
  486. package/libcxx/include/__thread/thread.h +13 -8
  487. package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
  488. package/libcxx/include/__tree +849 -701
  489. package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
  490. package/libcxx/include/__tuple/tuple_element.h +0 -12
  491. package/libcxx/include/__tuple/tuple_size.h +0 -4
  492. package/libcxx/include/__tuple/tuple_transform.h +45 -0
  493. package/libcxx/include/__type_traits/aligned_storage.h +13 -40
  494. package/libcxx/include/__type_traits/desugars_to.h +4 -0
  495. package/libcxx/include/__type_traits/invoke.h +8 -0
  496. package/libcxx/include/__type_traits/is_allocator.h +6 -7
  497. package/libcxx/include/__type_traits/is_array.h +26 -0
  498. package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
  499. package/libcxx/include/__type_traits/is_final.h +1 -1
  500. package/libcxx/include/__type_traits/is_floating_point.h +7 -6
  501. package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
  502. package/libcxx/include/__type_traits/is_specialization.h +2 -6
  503. package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
  504. package/libcxx/include/__type_traits/make_transparent.h +52 -0
  505. package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
  506. package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
  507. package/libcxx/include/__utility/cmp.h +19 -7
  508. package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
  509. package/libcxx/include/__utility/in_place.h +1 -1
  510. package/libcxx/include/__utility/integer_sequence.h +56 -41
  511. package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
  512. package/libcxx/include/__utility/pair.h +22 -25
  513. package/libcxx/include/__utility/scope_guard.h +2 -0
  514. package/libcxx/include/__utility/try_key_extraction.h +114 -0
  515. package/libcxx/include/__vector/vector.h +187 -160
  516. package/libcxx/include/__vector/vector_bool.h +76 -83
  517. package/libcxx/include/any +118 -155
  518. package/libcxx/include/array +88 -56
  519. package/libcxx/include/atomic +2 -0
  520. package/libcxx/include/barrier +20 -24
  521. package/libcxx/include/bitset +49 -30
  522. package/libcxx/include/ccomplex +3 -11
  523. package/libcxx/include/chrono +47 -0
  524. package/libcxx/include/ciso646 +3 -6
  525. package/libcxx/include/complex +77 -65
  526. package/libcxx/include/complex.h +10 -10
  527. package/libcxx/include/condition_variable +3 -3
  528. package/libcxx/include/cstdalign +3 -10
  529. package/libcxx/include/cstdbool +3 -10
  530. package/libcxx/include/ctgmath +2 -11
  531. package/libcxx/include/ctype.h +24 -24
  532. package/libcxx/include/cwchar +2 -2
  533. package/libcxx/include/deque +109 -225
  534. package/libcxx/include/errno.h +269 -269
  535. package/libcxx/include/exception +4 -1
  536. package/libcxx/include/ext/hash_map +7 -48
  537. package/libcxx/include/ext/hash_set +2 -8
  538. package/libcxx/include/fenv.h +43 -43
  539. package/libcxx/include/flat_map +663 -11
  540. package/libcxx/include/flat_set +543 -8
  541. package/libcxx/include/float.h +16 -16
  542. package/libcxx/include/forward_list +33 -53
  543. package/libcxx/include/fstream +57 -42
  544. package/libcxx/include/future +41 -51
  545. package/libcxx/include/initializer_list +9 -3
  546. package/libcxx/include/inttypes.h +16 -16
  547. package/libcxx/include/ios +28 -28
  548. package/libcxx/include/istream +19 -13
  549. package/libcxx/include/iterator +10 -0
  550. package/libcxx/include/latch +7 -5
  551. package/libcxx/include/limits +4 -4
  552. package/libcxx/include/list +61 -79
  553. package/libcxx/include/map +386 -274
  554. package/libcxx/include/math.h +19 -0
  555. package/libcxx/include/mdspan +1 -5
  556. package/libcxx/include/mutex +29 -19
  557. package/libcxx/include/optional +644 -149
  558. package/libcxx/include/print +9 -5
  559. package/libcxx/include/queue +39 -37
  560. package/libcxx/include/ranges +48 -0
  561. package/libcxx/include/regex +33 -31
  562. package/libcxx/include/scoped_allocator +16 -11
  563. package/libcxx/include/semaphore +15 -18
  564. package/libcxx/include/set +220 -192
  565. package/libcxx/include/shared_mutex +3 -8
  566. package/libcxx/include/span +53 -37
  567. package/libcxx/include/sstream +34 -28
  568. package/libcxx/include/stack +13 -15
  569. package/libcxx/include/stddef.h +10 -10
  570. package/libcxx/include/stdexcept +2 -2
  571. package/libcxx/include/stdio.h +20 -21
  572. package/libcxx/include/streambuf +59 -19
  573. package/libcxx/include/string +574 -573
  574. package/libcxx/include/string_view +113 -89
  575. package/libcxx/include/strstream +10 -10
  576. package/libcxx/include/syncstream +4 -4
  577. package/libcxx/include/tgmath.h +12 -12
  578. package/libcxx/include/tuple +242 -212
  579. package/libcxx/include/type_traits +8 -2
  580. package/libcxx/include/typeindex +5 -3
  581. package/libcxx/include/typeinfo +92 -89
  582. package/libcxx/include/unordered_map +179 -304
  583. package/libcxx/include/unordered_set +168 -195
  584. package/libcxx/include/utility +12 -0
  585. package/libcxx/include/valarray +106 -161
  586. package/libcxx/include/variant +25 -33
  587. package/libcxx/include/version +41 -24
  588. package/libcxx/include/wctype.h +29 -29
  589. package/libcxx/src/any.cpp +4 -0
  590. package/libcxx/src/atomic.cpp +365 -80
  591. package/libcxx/src/barrier.cpp +4 -3
  592. package/libcxx/src/charconv.cpp +6 -3
  593. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  594. package/libcxx/src/error_category.cpp +3 -1
  595. package/libcxx/src/exception.cpp +2 -10
  596. package/libcxx/src/experimental/time_zone.cpp +1 -1
  597. package/libcxx/src/experimental/tzdb.cpp +4 -1
  598. package/libcxx/src/filesystem/error.h +4 -22
  599. package/libcxx/src/filesystem/format_string.h +9 -18
  600. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  601. package/libcxx/src/filesystem/operations.cpp +2 -9
  602. package/libcxx/src/filesystem/path.cpp +3 -1
  603. package/libcxx/src/include/aligned_alloc.h +65 -0
  604. package/libcxx/src/include/config_elast.h +1 -1
  605. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  606. package/libcxx/src/include/overridable_function.h +8 -10
  607. package/libcxx/src/iostream.cpp +56 -37
  608. package/libcxx/src/locale.cpp +213 -196
  609. package/libcxx/src/memory.cpp +12 -14
  610. package/libcxx/src/mutex_destructor.cpp +1 -1
  611. package/libcxx/src/new.cpp +5 -5
  612. package/libcxx/src/optional.cpp +4 -0
  613. package/libcxx/src/print.cpp +9 -1
  614. package/libcxx/src/random.cpp +0 -26
  615. package/libcxx/src/string.cpp +10 -25
  616. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  617. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  618. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  619. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  620. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  621. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  622. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  623. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  624. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  625. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  626. package/libcxx/src/system_error.cpp +2 -0
  627. package/libcxx/src/thread.cpp +1 -3
  628. package/libcxx/src/valarray.cpp +1 -2
  629. package/libcxx/src/vector.cpp +2 -2
  630. package/libcxxabi/include/__cxxabi_config.h +42 -23
  631. package/libcxxabi/src/cxa_exception.cpp +4 -2
  632. package/libcxxabi/src/cxa_exception.h +16 -14
  633. package/libcxxabi/src/cxa_personality.cpp +126 -9
  634. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  635. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  636. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  637. package/libcxxabi/src/demangle/Utility.h +21 -7
  638. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  639. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  640. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  641. package/libtsan/LICENSE.TXT +311 -0
  642. package/libtsan/builtins/assembly.h +41 -8
  643. package/libtsan/interception/interception_win.cpp +4 -0
  644. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  645. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  646. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  647. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  648. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  649. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  650. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  651. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  652. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  653. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  654. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  655. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  656. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  657. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  658. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  659. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  660. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  661. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  662. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  663. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  664. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  665. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  666. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  667. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  668. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  669. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  670. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  671. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  672. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  673. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  674. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  675. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  676. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  677. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  678. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  679. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  680. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  681. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  682. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  683. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  684. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  685. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  686. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  687. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  688. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  689. package/libtsan/tsan_debugging.cpp +2 -2
  690. package/libtsan/tsan_flags.cpp +37 -0
  691. package/libtsan/tsan_flags.h +8 -0
  692. package/libtsan/tsan_flags.inc +12 -0
  693. package/libtsan/tsan_interceptors.h +9 -1
  694. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  695. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  696. package/libtsan/tsan_interface.h +3 -3
  697. package/libtsan/tsan_interface_ann.cpp +23 -9
  698. package/libtsan/tsan_mman.cpp +18 -4
  699. package/libtsan/tsan_platform.h +44 -7
  700. package/libtsan/tsan_platform_linux.cpp +42 -14
  701. package/libtsan/tsan_platform_mac.cpp +16 -3
  702. package/libtsan/tsan_report.h +14 -1
  703. package/libtsan/tsan_rtl.cpp +14 -0
  704. package/libtsan/tsan_rtl.h +7 -2
  705. package/libtsan/tsan_rtl_aarch64.S +3 -5
  706. package/libtsan/tsan_rtl_access.cpp +8 -3
  707. package/libtsan/tsan_rtl_amd64.S +2 -0
  708. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  709. package/libtsan/tsan_rtl_report.cpp +132 -65
  710. package/libtsan/tsan_rtl_thread.cpp +31 -9
  711. package/libtsan/tsan_symbolize.cpp +1 -1
  712. package/libtsan/tsan_symbolize.h +1 -1
  713. package/libtsan/tsan_trace.h +1 -1
  714. package/libunwind/include/__libunwind_config.h +11 -2
  715. package/libunwind/include/libunwind.h +117 -11
  716. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  717. package/libunwind/src/AddressSpace.hpp +40 -19
  718. package/libunwind/src/CompactUnwinder.hpp +16 -5
  719. package/libunwind/src/DwarfInstructions.hpp +24 -13
  720. package/libunwind/src/DwarfParser.hpp +60 -22
  721. package/libunwind/src/EHHeaderParser.hpp +7 -4
  722. package/libunwind/src/Registers.hpp +226 -22
  723. package/libunwind/src/Unwind-seh.cpp +6 -7
  724. package/libunwind/src/Unwind-wasm.c +7 -7
  725. package/libunwind/src/UnwindCursor.hpp +167 -49
  726. package/libunwind/src/UnwindLevel1.c +46 -17
  727. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  728. package/libunwind/src/UnwindRegistersSave.S +86 -2
  729. package/libunwind/src/assembly.h +5 -1
  730. package/libunwind/src/config.h +9 -0
  731. package/libunwind/src/gcc_personality_v0.c +79 -6
  732. package/libunwind/src/libunwind.cpp +104 -4
  733. package/libunwind/src/libunwind_ext.h +7 -1
  734. package/libunwind/src/shadow_stack_unwind.h +2 -2
  735. package/lldb/pretty_printers.py +948 -0
  736. package/package.json +1 -1
  737. package/std/Build/Step/Compile.zig +18 -19
  738. package/std/Build/Step/Run.zig +13 -6
  739. package/std/Build/Step.zig +0 -3
  740. package/std/Io/Threaded.zig +3 -0
  741. package/std/Target/aarch64.zig +620 -77
  742. package/std/Target/amdgcn.zig +421 -21
  743. package/std/Target/arm.zig +40 -6
  744. package/std/Target/bpf.zig +6 -0
  745. package/std/Target/hexagon.zig +41 -6
  746. package/std/Target/loongarch.zig +18 -0
  747. package/std/Target/mips.zig +6 -0
  748. package/std/Target/nvptx.zig +58 -35
  749. package/std/Target/powerpc.zig +27 -19
  750. package/std/Target/riscv.zig +415 -177
  751. package/std/Target/sparc.zig +17 -0
  752. package/std/Target/wasm.zig +7 -0
  753. package/std/Target/x86.zig +200 -31
  754. package/std/Target/xtensa.zig +65 -0
  755. package/std/Target.zig +11 -2
  756. package/std/c.zig +7 -0
  757. package/std/debug/Dwarf.zig +14 -11
  758. package/std/debug/Pdb.zig +24 -16
  759. package/std/hash/xxhash.zig +0 -6
  760. package/std/math/log10.zig +0 -2
  761. package/std/math/modf.zig +0 -1
  762. package/std/mem.zig +1 -2
  763. package/std/os/linux/syscalls.zig +26 -1
  764. package/std/os/linux/x86.zig +2 -2
  765. package/std/os/windows.zig +130 -1
  766. package/std/simd.zig +4 -21
  767. package/std/start.zig +4 -3
  768. package/std/zig/Ast.zig +5 -7
  769. package/std/zig/AstGen.zig +20 -14
  770. package/std/zig/ErrorBundle.zig +6 -2
  771. package/std/zig/ZonGen.zig +13 -21
  772. package/std/zig/llvm/Builder.zig +2 -2
  773. package/std/zig/system/arm.zig +56 -2
  774. package/std/zig/system/windows.zig +34 -1
  775. package/std/zig/system/x86.zig +60 -16
  776. package/std/zig/system.zig +0 -10
  777. package/include/amxbf16transposeintrin.h +0 -94
  778. package/include/amxcomplextransposeintrin.h +0 -303
  779. package/include/amxfp16transposeintrin.h +0 -94
  780. package/include/amxmovrstransposeintrin.h +0 -200
  781. package/include/amxtf32transposeintrin.h +0 -105
  782. package/include/amxtransposeintrin.h +0 -248
  783. package/libc/include/hexagon-linux-any/asm/signal.h +0 -29
  784. package/libc/include/s390x-linux-any/asm/tape390.h +0 -103
  785. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  786. package/std/Build/Step/CheckObject.zig +0 -2764
@@ -20,6 +20,43 @@
20
20
  #include "tsan_rtl.h"
21
21
  #include "ubsan/ubsan_flags.h"
22
22
 
23
+ #if SANITIZER_APPLE && !SANITIZER_GO
24
+ namespace __sanitizer {
25
+
26
+ template <>
27
+ inline bool FlagHandler<LockDuringWriteSetting>::Parse(const char *value) {
28
+ if (internal_strcmp(value, "on") == 0) {
29
+ *t_ = kLockDuringAllWrites;
30
+ return true;
31
+ }
32
+ if (internal_strcmp(value, "disable_for_current_process") == 0) {
33
+ *t_ = kNoLockDuringWritesCurrentProcess;
34
+ return true;
35
+ }
36
+ if (internal_strcmp(value, "disable_for_all_processes") == 0) {
37
+ *t_ = kNoLockDuringWritesAllProcesses;
38
+ return true;
39
+ }
40
+ Printf("ERROR: Invalid value for signal handler option: '%s'\n", value);
41
+ return false;
42
+ }
43
+
44
+ template <>
45
+ inline bool FlagHandler<LockDuringWriteSetting>::Format(char *buffer,
46
+ uptr size) {
47
+ switch (*t_) {
48
+ case kLockDuringAllWrites:
49
+ return FormatString(buffer, size, "on");
50
+ case kNoLockDuringWritesCurrentProcess:
51
+ return FormatString(buffer, size, "disable_for_current_process");
52
+ case kNoLockDuringWritesAllProcesses:
53
+ return FormatString(buffer, size, "disable_for_all_processes");
54
+ }
55
+ }
56
+
57
+ } // namespace __sanitizer
58
+ #endif // SANITIZER_APPLE && !SANITIZER_GO
59
+
23
60
  namespace __tsan {
24
61
 
25
62
  // Can be overriden in frontend.
@@ -16,6 +16,14 @@
16
16
  #include "sanitizer_common/sanitizer_flags.h"
17
17
  #include "sanitizer_common/sanitizer_deadlock_detector_interface.h"
18
18
 
19
+ #if SANITIZER_APPLE && !SANITIZER_GO
20
+ enum LockDuringWriteSetting {
21
+ kLockDuringAllWrites,
22
+ kNoLockDuringWritesCurrentProcess,
23
+ kNoLockDuringWritesAllProcesses,
24
+ };
25
+ #endif
26
+
19
27
  namespace __tsan {
20
28
 
21
29
  struct Flags : DDFlags {
@@ -80,3 +80,15 @@ TSAN_FLAG(bool, shared_ptr_interceptor, true,
80
80
  TSAN_FLAG(bool, print_full_thread_history, false,
81
81
  "If set, prints thread creation stacks for the threads involved in "
82
82
  "the report and their ancestors up to the main thread.")
83
+
84
+ #if SANITIZER_APPLE && !SANITIZER_GO
85
+ TSAN_FLAG(LockDuringWriteSetting, lock_during_write, kLockDuringAllWrites,
86
+ "Determines whether to obtain a lock while writing logs or error "
87
+ "reports. "
88
+ "\"on\" - [default] lock during all writes. "
89
+ "\"disable_for_current_process\" - don't lock during all writes in "
90
+ "the current process, but do lock for all writes in child "
91
+ "processes."
92
+ "\"disable_for_all_processes\" - don't lock during all writes in "
93
+ "the current process and it's children processes.")
94
+ #endif
@@ -1,6 +1,9 @@
1
1
  #ifndef TSAN_INTERCEPTORS_H
2
2
  #define TSAN_INTERCEPTORS_H
3
3
 
4
+ #if SANITIZER_APPLE && !SANITIZER_GO
5
+ # include "sanitizer_common/sanitizer_mac.h"
6
+ #endif
4
7
  #include "sanitizer_common/sanitizer_stacktrace.h"
5
8
  #include "tsan_rtl.h"
6
9
 
@@ -43,7 +46,12 @@ inline bool in_symbolizer() {
43
46
  #endif
44
47
 
45
48
  inline bool MustIgnoreInterceptor(ThreadState *thr) {
46
- return !thr->is_inited || thr->ignore_interceptors || thr->in_ignored_lib;
49
+ return !thr->is_inited || thr->ignore_interceptors || thr->in_ignored_lib
50
+ #if SANITIZER_APPLE && !SANITIZER_GO
51
+ || (flags()->lock_during_write != kLockDuringAllWrites &&
52
+ thr->in_internal_write_call)
53
+ #endif
54
+ ;
47
55
  }
48
56
 
49
57
  } // namespace __tsan
@@ -281,6 +281,25 @@ TSAN_INTERCEPTOR(void, os_unfair_lock_lock, os_unfair_lock_t lock) {
281
281
  Acquire(thr, pc, (uptr)lock);
282
282
  }
283
283
 
284
+ // os_unfair_lock_lock_with_flags was introduced in macOS 15
285
+ # if defined(__MAC_15_0) || defined(__IPHONE_18_0) || defined(__TVOS_18_0) || \
286
+ defined(__VISIONOS_2_0) || defined(__WATCHOS_11_0)
287
+ # pragma clang diagnostic push
288
+ # pragma clang diagnostic ignored "-Wunguarded-availability-new"
289
+ // We're just intercepting this - if it doesn't exist on the platform, then the
290
+ // process shouldn't have called it in the first place.
291
+ TSAN_INTERCEPTOR(void, os_unfair_lock_lock_with_flags, os_unfair_lock_t lock,
292
+ os_unfair_lock_flags_t flags) {
293
+ if (!cur_thread()->is_inited || cur_thread()->is_dead) {
294
+ return REAL(os_unfair_lock_lock_with_flags)(lock, flags);
295
+ }
296
+ SCOPED_TSAN_INTERCEPTOR(os_unfair_lock_lock_with_flags, lock, flags);
297
+ REAL(os_unfair_lock_lock_with_flags)(lock, flags);
298
+ Acquire(thr, pc, (uptr)lock);
299
+ }
300
+ # pragma clang diagnostic pop
301
+ # endif
302
+
284
303
  TSAN_INTERCEPTOR(void, os_unfair_lock_lock_with_options, os_unfair_lock_t lock,
285
304
  u32 options) {
286
305
  if (!cur_thread()->is_inited || cur_thread()->is_dead) {
@@ -22,6 +22,7 @@
22
22
  #include "sanitizer_common/sanitizer_internal_defs.h"
23
23
  #include "sanitizer_common/sanitizer_libc.h"
24
24
  #include "sanitizer_common/sanitizer_linux.h"
25
+ #include "sanitizer_common/sanitizer_placement_new.h"
25
26
  #include "sanitizer_common/sanitizer_platform_interceptors.h"
26
27
  #include "sanitizer_common/sanitizer_platform_limits_netbsd.h"
27
28
  #include "sanitizer_common/sanitizer_platform_limits_posix.h"
@@ -30,6 +31,9 @@
30
31
  #include "sanitizer_common/sanitizer_tls_get_addr.h"
31
32
  #include "sanitizer_common/sanitizer_vector.h"
32
33
  #include "tsan_fd.h"
34
+ #if SANITIZER_APPLE && !SANITIZER_GO
35
+ # include "tsan_flags.h"
36
+ #endif
33
37
  #include "tsan_interceptors.h"
34
38
  #include "tsan_interface.h"
35
39
  #include "tsan_mman.h"
@@ -78,17 +82,6 @@ struct ucontext_t {
78
82
  };
79
83
  #endif
80
84
 
81
- #if defined(__x86_64__) || defined(__mips__) || SANITIZER_PPC64V1 || \
82
- defined(__s390x__)
83
- #define PTHREAD_ABI_BASE "GLIBC_2.3.2"
84
- #elif defined(__aarch64__) || SANITIZER_PPC64V2
85
- #define PTHREAD_ABI_BASE "GLIBC_2.17"
86
- #elif SANITIZER_LOONGARCH64
87
- #define PTHREAD_ABI_BASE "GLIBC_2.36"
88
- #elif SANITIZER_RISCV64
89
- # define PTHREAD_ABI_BASE "GLIBC_2.27"
90
- #endif
91
-
92
85
  extern "C" int pthread_attr_init(void *attr);
93
86
  extern "C" int pthread_attr_destroy(void *attr);
94
87
  DECLARE_REAL(int, pthread_attr_getdetachstate, void *, void *)
@@ -340,11 +333,6 @@ void ScopedInterceptor::DisableIgnoresImpl() {
340
333
  }
341
334
 
342
335
  #define TSAN_INTERCEPT(func) INTERCEPT_FUNCTION(func)
343
- #if SANITIZER_FREEBSD || SANITIZER_NETBSD
344
- # define TSAN_INTERCEPT_VER(func, ver) INTERCEPT_FUNCTION(func)
345
- #else
346
- # define TSAN_INTERCEPT_VER(func, ver) INTERCEPT_FUNCTION_VER(func, ver)
347
- #endif
348
336
  #if SANITIZER_FREEBSD
349
337
  # define TSAN_MAYBE_INTERCEPT_FREEBSD_ALIAS(func) \
350
338
  INTERCEPT_FUNCTION(_pthread_##func)
@@ -1145,6 +1133,22 @@ TSAN_INTERCEPTOR(int, pthread_create,
1145
1133
 
1146
1134
  TSAN_INTERCEPTOR(int, pthread_join, void *th, void **ret) {
1147
1135
  SCOPED_INTERCEPTOR_RAW(pthread_join, th, ret);
1136
+ #if SANITIZER_ANDROID
1137
+ {
1138
+ // In Bionic, if the target thread has already exited when pthread_detach is
1139
+ // called, pthread_detach will call pthread_join internally to clean it up.
1140
+ // In that case, the thread has already been consumed by the pthread_detach
1141
+ // interceptor.
1142
+ Tid tid = ctx->thread_registry.FindThread(
1143
+ [](ThreadContextBase* tctx, void* arg) {
1144
+ return tctx->user_id == (uptr)arg;
1145
+ },
1146
+ th);
1147
+ if (tid == kInvalidTid) {
1148
+ return REAL(pthread_join)(th, ret);
1149
+ }
1150
+ }
1151
+ #endif
1148
1152
  Tid tid = ThreadConsumeTid(thr, pc, (uptr)th);
1149
1153
  ThreadIgnoreBegin(thr, pc);
1150
1154
  int res = BLOCK_REAL(pthread_join)(th, ret);
@@ -1664,6 +1668,14 @@ TSAN_INTERCEPTOR(int, pthread_barrier_wait, void *b) {
1664
1668
 
1665
1669
  TSAN_INTERCEPTOR(int, pthread_once, void *o, void (*f)()) {
1666
1670
  SCOPED_INTERCEPTOR_RAW(pthread_once, o, f);
1671
+ #if SANITIZER_APPLE && !SANITIZER_GO
1672
+ if (flags()->lock_during_write != kLockDuringAllWrites &&
1673
+ cur_thread_init()->in_internal_write_call) {
1674
+ // This is needed to make it through process launch without hanging
1675
+ f();
1676
+ return 0;
1677
+ }
1678
+ #endif
1667
1679
  if (o == 0 || f == 0)
1668
1680
  return errno_EINVAL;
1669
1681
  atomic_uint32_t *a;
@@ -2141,13 +2153,29 @@ static void ReportErrnoSpoiling(ThreadState *thr, uptr pc, int sig) {
2141
2153
  // StackTrace::GetNestInstructionPc(pc) is used because return address is
2142
2154
  // expected, OutputReport() will undo this.
2143
2155
  ObtainCurrentStack(thr, StackTrace::GetNextInstructionPc(pc), &stack);
2144
- ThreadRegistryLock l(&ctx->thread_registry);
2145
- ScopedReport rep(ReportTypeErrnoInSignal);
2146
- rep.SetSigNum(sig);
2147
- if (!IsFiredSuppression(ctx, ReportTypeErrnoInSignal, stack)) {
2148
- rep.AddStack(stack, true);
2149
- OutputReport(thr, rep);
2156
+ // Use alloca, because malloc during signal handling deadlocks
2157
+ ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
2158
+ bool suppressed;
2159
+ // Take a new scope as Apple platforms require the below locks released
2160
+ // before symbolizing in order to avoid a deadlock
2161
+ {
2162
+ ThreadRegistryLock l(&ctx->thread_registry);
2163
+ new (rep) ScopedReport(ReportTypeErrnoInSignal);
2164
+ rep->SetSigNum(sig);
2165
+ suppressed = IsFiredSuppression(ctx, ReportTypeErrnoInSignal, stack);
2166
+ if (!suppressed)
2167
+ rep->AddStack(stack, true);
2168
+ #if SANITIZER_APPLE
2169
+ } // Close this scope to release the locks before writing report
2170
+ #endif
2171
+ if (!suppressed)
2172
+ OutputReport(thr, *rep);
2173
+
2174
+ // Need to manually destroy this because we used placement new to allocate
2175
+ rep->~ScopedReport();
2176
+ #if !SANITIZER_APPLE
2150
2177
  }
2178
+ #endif
2151
2179
  }
2152
2180
 
2153
2181
  static void CallUserSignalHandler(ThreadState *thr, bool sync, bool acquire,
@@ -2411,7 +2439,11 @@ TSAN_INTERCEPTOR(int, vfork, int fake) {
2411
2439
  }
2412
2440
  #endif
2413
2441
 
2414
- #if SANITIZER_LINUX
2442
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
2443
+ // Bionic's pthread_create internally calls clone. When the CLONE_THREAD flag is
2444
+ // set, clone does not create a new process but a new thread. This is a
2445
+ // workaround for Android. Disabling the interception of clone solves the
2446
+ // problem in most scenarios.
2415
2447
  TSAN_INTERCEPTOR(int, clone, int (*fn)(void *), void *stack, int flags,
2416
2448
  void *arg, int *parent_tid, void *tls, pid_t *child_tid) {
2417
2449
  SCOPED_INTERCEPTOR_RAW(clone, fn, stack, flags, arg, parent_tid, tls,
@@ -2888,12 +2920,12 @@ TSAN_INTERCEPTOR(void, _lwp_exit) {
2888
2920
  #endif
2889
2921
 
2890
2922
  #if SANITIZER_FREEBSD
2891
- TSAN_INTERCEPTOR(void, thr_exit, tid_t *state) {
2923
+ TSAN_INTERCEPTOR(void, thr_exit, ThreadID *state) {
2892
2924
  SCOPED_TSAN_INTERCEPTOR(thr_exit, state);
2893
2925
  DestroyThreadState();
2894
2926
  REAL(thr_exit(state));
2895
2927
  }
2896
- #define TSAN_MAYBE_INTERCEPT_THR_EXIT TSAN_INTERCEPT(thr_exit)
2928
+ # define TSAN_MAYBE_INTERCEPT_THR_EXIT TSAN_INTERCEPT(thr_exit)
2897
2929
  #else
2898
2930
  #define TSAN_MAYBE_INTERCEPT_THR_EXIT
2899
2931
  #endif
@@ -3024,12 +3056,26 @@ void InitializeInterceptors() {
3024
3056
  TSAN_INTERCEPT(pthread_timedjoin_np);
3025
3057
  #endif
3026
3058
 
3027
- TSAN_INTERCEPT_VER(pthread_cond_init, PTHREAD_ABI_BASE);
3028
- TSAN_INTERCEPT_VER(pthread_cond_signal, PTHREAD_ABI_BASE);
3029
- TSAN_INTERCEPT_VER(pthread_cond_broadcast, PTHREAD_ABI_BASE);
3030
- TSAN_INTERCEPT_VER(pthread_cond_wait, PTHREAD_ABI_BASE);
3031
- TSAN_INTERCEPT_VER(pthread_cond_timedwait, PTHREAD_ABI_BASE);
3032
- TSAN_INTERCEPT_VER(pthread_cond_destroy, PTHREAD_ABI_BASE);
3059
+ // In glibc versions older than 2.36, dlsym(RTLD_NEXT, "pthread_cond_init")
3060
+ // may return an outdated symbol (max(2.2,base_version)) if the port was
3061
+ // introduced before 2.3.2 (when the new pthread_cond_t was introduced).
3062
+ #if SANITIZER_GLIBC && !__GLIBC_PREREQ(2, 36) && \
3063
+ (defined(__x86_64__) || defined(__mips__) || SANITIZER_PPC64V1 || \
3064
+ defined(__s390x__))
3065
+ INTERCEPT_FUNCTION_VER(pthread_cond_init, "GLIBC_2.3.2");
3066
+ INTERCEPT_FUNCTION_VER(pthread_cond_signal, "GLIBC_2.3.2");
3067
+ INTERCEPT_FUNCTION_VER(pthread_cond_broadcast, "GLIBC_2.3.2");
3068
+ INTERCEPT_FUNCTION_VER(pthread_cond_wait, "GLIBC_2.3.2");
3069
+ INTERCEPT_FUNCTION_VER(pthread_cond_timedwait, "GLIBC_2.3.2");
3070
+ INTERCEPT_FUNCTION_VER(pthread_cond_destroy, "GLIBC_2.3.2");
3071
+ #else
3072
+ INTERCEPT_FUNCTION(pthread_cond_init);
3073
+ INTERCEPT_FUNCTION(pthread_cond_signal);
3074
+ INTERCEPT_FUNCTION(pthread_cond_broadcast);
3075
+ INTERCEPT_FUNCTION(pthread_cond_wait);
3076
+ INTERCEPT_FUNCTION(pthread_cond_timedwait);
3077
+ INTERCEPT_FUNCTION(pthread_cond_destroy);
3078
+ #endif
3033
3079
 
3034
3080
  TSAN_MAYBE_PTHREAD_COND_CLOCKWAIT;
3035
3081
 
@@ -3120,7 +3166,7 @@ void InitializeInterceptors() {
3120
3166
 
3121
3167
  TSAN_INTERCEPT(fork);
3122
3168
  TSAN_INTERCEPT(vfork);
3123
- #if SANITIZER_LINUX
3169
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
3124
3170
  TSAN_INTERCEPT(clone);
3125
3171
  #endif
3126
3172
  #if !SANITIZER_ANDROID
@@ -16,7 +16,7 @@
16
16
  #define TSAN_INTERFACE_H
17
17
 
18
18
  #include <sanitizer_common/sanitizer_internal_defs.h>
19
- using __sanitizer::tid_t;
19
+ using __sanitizer::ThreadID;
20
20
  using __sanitizer::uptr;
21
21
 
22
22
  // This header should NOT include any other headers.
@@ -175,7 +175,7 @@ int __tsan_get_report_mutex(void *report, uptr idx, uptr *mutex_id, void **addr,
175
175
 
176
176
  // Returns information about threads included in the report.
177
177
  SANITIZER_INTERFACE_ATTRIBUTE
178
- int __tsan_get_report_thread(void *report, uptr idx, int *tid, tid_t *os_id,
178
+ int __tsan_get_report_thread(void *report, uptr idx, int *tid, ThreadID *os_id,
179
179
  int *running, const char **name, int *parent_tid,
180
180
  void **trace, uptr trace_size);
181
181
 
@@ -192,7 +192,7 @@ const char *__tsan_locate_address(uptr addr, char *name, uptr name_size,
192
192
  // Returns the allocation stack for a heap pointer.
193
193
  SANITIZER_INTERFACE_ATTRIBUTE
194
194
  int __tsan_get_alloc_stack(uptr addr, uptr *trace, uptr size, int *thread_id,
195
- tid_t *os_id);
195
+ ThreadID *os_id);
196
196
 
197
197
  #endif // SANITIZER_GO
198
198
 
@@ -437,16 +437,30 @@ void __tsan_mutex_post_divert(void *addr, unsigned flagz) {
437
437
  }
438
438
 
439
439
  static void ReportMutexHeldWrongContext(ThreadState *thr, uptr pc) {
440
- ThreadRegistryLock l(&ctx->thread_registry);
441
- ScopedReport rep(ReportTypeMutexHeldWrongContext);
442
- for (uptr i = 0; i < thr->mset.Size(); ++i) {
443
- MutexSet::Desc desc = thr->mset.Get(i);
444
- rep.AddMutex(desc.addr, desc.stack_id);
440
+ // Use alloca, because malloc during signal handling deadlocks
441
+ ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
442
+ // Take a new scope as Apple platforms require the below locks released
443
+ // before symbolizing in order to avoid a deadlock
444
+ {
445
+ ThreadRegistryLock l(&ctx->thread_registry);
446
+ new (rep) ScopedReport(ReportTypeMutexHeldWrongContext);
447
+ for (uptr i = 0; i < thr->mset.Size(); ++i) {
448
+ MutexSet::Desc desc = thr->mset.Get(i);
449
+ rep->AddMutex(desc.addr, desc.stack_id);
450
+ }
451
+ VarSizeStackTrace trace;
452
+ ObtainCurrentStack(thr, pc, &trace);
453
+ rep->AddStack(trace, true);
454
+ #if SANITIZER_APPLE
455
+ } // Close this scope to release the locks
456
+ #endif
457
+ OutputReport(thr, *rep);
458
+
459
+ // Need to manually destroy this because we used placement new to allocate
460
+ rep->~ScopedReport();
461
+ #if !SANITIZER_APPLE
445
462
  }
446
- VarSizeStackTrace trace;
447
- ObtainCurrentStack(thr, pc, &trace);
448
- rep.AddStack(trace, true);
449
- OutputReport(thr, rep);
463
+ #endif
450
464
  }
451
465
 
452
466
  INTERFACE_ATTRIBUTE
@@ -182,10 +182,24 @@ static void SignalUnsafeCall(ThreadState *thr, uptr pc) {
182
182
  ObtainCurrentStack(thr, pc, &stack);
183
183
  if (IsFiredSuppression(ctx, ReportTypeSignalUnsafe, stack))
184
184
  return;
185
- ThreadRegistryLock l(&ctx->thread_registry);
186
- ScopedReport rep(ReportTypeSignalUnsafe);
187
- rep.AddStack(stack, true);
188
- OutputReport(thr, rep);
185
+ // Use alloca, because malloc during signal handling deadlocks
186
+ ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
187
+ // Take a new scope as Apple platforms require the below locks released
188
+ // before symbolizing in order to avoid a deadlock
189
+ {
190
+ ThreadRegistryLock l(&ctx->thread_registry);
191
+ new (rep) ScopedReport(ReportTypeSignalUnsafe);
192
+ rep->AddStack(stack, true);
193
+ #if SANITIZER_APPLE
194
+ } // Close this scope to release the locks
195
+ #endif
196
+ OutputReport(thr, *rep);
197
+
198
+ // Need to manually destroy this because we used placement new to allocate
199
+ rep->~ScopedReport();
200
+ #if !SANITIZER_APPLE
201
+ }
202
+ #endif
189
203
  }
190
204
 
191
205
 
@@ -681,6 +681,32 @@ struct MappingGoMips64_47 {
681
681
  static const uptr kShadowAdd = 0x200000000000ull;
682
682
  };
683
683
 
684
+ /* Go on linux/riscv64 (39-bit VMA)
685
+ 0000 0001 0000 - 000f 0000 0000: executable and heap (60 GiB)
686
+ 000f 0000 0000 - 0010 0000 0000: -
687
+ 0010 0000 0000 - 0030 0000 0000: shadow - 128 GiB ( ~ 2 * app)
688
+ 0030 0000 0000 - 0038 0000 0000: metainfo - 32 GiB ( ~ 0.5 * app)
689
+ 0038 0000 0000 - 0040 0000 0000: -
690
+ */
691
+ struct MappingGoRiscv64_39 {
692
+ static const uptr kMetaShadowBeg = 0x003000000000ull;
693
+ static const uptr kMetaShadowEnd = 0x003800000000ull;
694
+ static const uptr kShadowBeg = 0x001000000000ull;
695
+ static const uptr kShadowEnd = 0x003000000000ull;
696
+ static const uptr kLoAppMemBeg = 0x000000010000ull;
697
+ static const uptr kLoAppMemEnd = 0x000f00000000ull;
698
+ static const uptr kMidAppMemBeg = 0;
699
+ static const uptr kMidAppMemEnd = 0;
700
+ static const uptr kHiAppMemBeg = 0;
701
+ static const uptr kHiAppMemEnd = 0;
702
+ static const uptr kHeapMemBeg = 0;
703
+ static const uptr kHeapMemEnd = 0;
704
+ static const uptr kVdsoBeg = 0;
705
+ static const uptr kShadowMsk = 0;
706
+ static const uptr kShadowXor = 0;
707
+ static const uptr kShadowAdd = 0x001000000000ull;
708
+ };
709
+
684
710
  /* Go on linux/riscv64 (48-bit VMA)
685
711
  0000 0001 0000 - 00e0 0000 0000: executable and heap (896 GiB)
686
712
  00e0 0000 0000 - 2000 0000 0000: -
@@ -689,13 +715,13 @@ struct MappingGoMips64_47 {
689
715
  3000 0000 0000 - 3100 0000 0000: metainfo - 1 TiB ( ~ 1 * app)
690
716
  3100 0000 0000 - 8000 0000 0000: -
691
717
  */
692
- struct MappingGoRiscv64 {
718
+ struct MappingGoRiscv64_48 {
693
719
  static const uptr kMetaShadowBeg = 0x300000000000ull;
694
720
  static const uptr kMetaShadowEnd = 0x310000000000ull;
695
721
  static const uptr kShadowBeg = 0x200000000000ull;
696
722
  static const uptr kShadowEnd = 0x240000000000ull;
697
723
  static const uptr kLoAppMemBeg = 0x000000010000ull;
698
- static const uptr kLoAppMemEnd = 0x000e00000000ull;
724
+ static const uptr kLoAppMemEnd = 0x00e000000000ull;
699
725
  static const uptr kMidAppMemBeg = 0;
700
726
  static const uptr kMidAppMemEnd = 0;
701
727
  static const uptr kHiAppMemBeg = 0;
@@ -756,7 +782,12 @@ ALWAYS_INLINE auto SelectMapping(Arg arg) {
756
782
  # elif defined(__loongarch_lp64)
757
783
  return Func::template Apply<MappingGoLoongArch64_47>(arg);
758
784
  # elif SANITIZER_RISCV64
759
- return Func::template Apply<MappingGoRiscv64>(arg);
785
+ switch (vmaSize) {
786
+ case 39:
787
+ return Func::template Apply<MappingGoRiscv64_39>(arg);
788
+ case 48:
789
+ return Func::template Apply<MappingGoRiscv64_48>(arg);
790
+ }
760
791
  # elif SANITIZER_WINDOWS
761
792
  return Func::template Apply<MappingGoWindows>(arg);
762
793
  # else
@@ -827,7 +858,8 @@ void ForEachMapping() {
827
858
  Func::template Apply<MappingGoAarch64>();
828
859
  Func::template Apply<MappingGoLoongArch64_47>();
829
860
  Func::template Apply<MappingGoMips64_47>();
830
- Func::template Apply<MappingGoRiscv64>();
861
+ Func::template Apply<MappingGoRiscv64_39>();
862
+ Func::template Apply<MappingGoRiscv64_48>();
831
863
  Func::template Apply<MappingGoS390x>();
832
864
  }
833
865
 
@@ -926,7 +958,9 @@ struct IsAppMemImpl {
926
958
  };
927
959
 
928
960
  ALWAYS_INLINE
929
- bool IsAppMem(uptr mem) { return SelectMapping<IsAppMemImpl>(mem); }
961
+ bool IsAppMem(uptr mem) {
962
+ return SelectMapping<IsAppMemImpl>(STRIP_MTE_TAG(mem));
963
+ }
930
964
 
931
965
  struct IsShadowMemImpl {
932
966
  template <typename Mapping>
@@ -965,7 +999,8 @@ struct MemToShadowImpl {
965
999
 
966
1000
  ALWAYS_INLINE
967
1001
  RawShadow *MemToShadow(uptr x) {
968
- return reinterpret_cast<RawShadow *>(SelectMapping<MemToShadowImpl>(x));
1002
+ return reinterpret_cast<RawShadow*>(
1003
+ SelectMapping<MemToShadowImpl>(STRIP_MTE_TAG(x)));
969
1004
  }
970
1005
 
971
1006
  struct MemToMetaImpl {
@@ -979,7 +1014,9 @@ struct MemToMetaImpl {
979
1014
  };
980
1015
 
981
1016
  ALWAYS_INLINE
982
- u32 *MemToMeta(uptr x) { return SelectMapping<MemToMetaImpl>(x); }
1017
+ u32* MemToMeta(uptr x) {
1018
+ return SelectMapping<MemToMetaImpl>(STRIP_MTE_TAG(x));
1019
+ }
983
1020
 
984
1021
  struct ShadowToMemImpl {
985
1022
  template <typename Mapping>
@@ -393,9 +393,9 @@ void InitializePlatformEarly() {
393
393
  Die();
394
394
  }
395
395
  # else
396
- if (vmaSize != 48) {
396
+ if (vmaSize != 39 && vmaSize != 48) {
397
397
  Printf("FATAL: ThreadSanitizer: unsupported VMA range\n");
398
- Printf("FATAL: Found %zd - Supported 48\n", vmaSize);
398
+ Printf("FATAL: Found %zd - Supported 39 and 48\n", vmaSize);
399
399
  Die();
400
400
  }
401
401
  # endif
@@ -415,7 +415,7 @@ void InitializePlatform() {
415
415
  // is not compiled with -pie.
416
416
  #if !SANITIZER_GO
417
417
  {
418
- # if SANITIZER_LINUX && (defined(__aarch64__) || defined(__loongarch_lp64))
418
+ # if INIT_LONGJMP_XOR_KEY
419
419
  // Initialize the xor key used in {sig}{set,long}jump.
420
420
  InitializeLongjmpXorKey();
421
421
  # endif
@@ -486,8 +486,20 @@ int ExtractRecvmsgFDs(void *msgp, int *fds, int nfd) {
486
486
 
487
487
  // Reverse operation of libc stack pointer mangling
488
488
  static uptr UnmangleLongJmpSp(uptr mangled_sp) {
489
- #if defined(__x86_64__)
490
- # if SANITIZER_LINUX
489
+ # if SANITIZER_ANDROID && INIT_LONGJMP_XOR_KEY
490
+ if (longjmp_xor_key == 0) {
491
+ // bionic libc initialization process: __libc_init_globals ->
492
+ // __libc_init_vdso (calls strcmp) -> __libc_init_setjmp_cookie. strcmp is
493
+ // intercepted by TSan, so during TSan initialization the setjmp_cookie
494
+ // remains uninitialized. On Android, longjmp_xor_key must be set on first
495
+ // use.
496
+ InitializeLongjmpXorKey();
497
+ CHECK_NE(longjmp_xor_key, 0);
498
+ }
499
+ # endif
500
+
501
+ # if defined(__x86_64__)
502
+ # if SANITIZER_LINUX
491
503
  // Reverse of:
492
504
  // xor %fs:0x30, %rsi
493
505
  // rol $0x11, %rsi
@@ -542,13 +554,23 @@ static uptr UnmangleLongJmpSp(uptr mangled_sp) {
542
554
  # else
543
555
  # define LONG_JMP_SP_ENV_SLOT 2
544
556
  # endif
545
- #elif SANITIZER_LINUX
546
- # ifdef __aarch64__
547
- # define LONG_JMP_SP_ENV_SLOT 13
548
- # elif defined(__loongarch__)
549
- # define LONG_JMP_SP_ENV_SLOT 1
550
- # elif defined(__mips64)
551
- # define LONG_JMP_SP_ENV_SLOT 1
557
+ # elif SANITIZER_ANDROID
558
+ # ifdef __aarch64__
559
+ # define LONG_JMP_SP_ENV_SLOT 3
560
+ # elif SANITIZER_RISCV64
561
+ # define LONG_JMP_SP_ENV_SLOT 3
562
+ # elif defined(__x86_64__)
563
+ # define LONG_JMP_SP_ENV_SLOT 6
564
+ # else
565
+ # error unsupported
566
+ # endif
567
+ # elif SANITIZER_LINUX
568
+ # ifdef __aarch64__
569
+ # define LONG_JMP_SP_ENV_SLOT 13
570
+ # elif defined(__loongarch__)
571
+ # define LONG_JMP_SP_ENV_SLOT 1
572
+ # elif defined(__mips64)
573
+ # define LONG_JMP_SP_ENV_SLOT 1
552
574
  # elif SANITIZER_RISCV64
553
575
  # define LONG_JMP_SP_ENV_SLOT 13
554
576
  # elif defined(__s390x__)
@@ -556,7 +578,7 @@ static uptr UnmangleLongJmpSp(uptr mangled_sp) {
556
578
  # else
557
579
  # define LONG_JMP_SP_ENV_SLOT 6
558
580
  # endif
559
- #endif
581
+ # endif
560
582
 
561
583
  uptr ExtractLongJmpSp(uptr *env) {
562
584
  uptr mangled_sp = env[LONG_JMP_SP_ENV_SLOT];
@@ -653,7 +675,13 @@ ThreadState *cur_thread() {
653
675
  }
654
676
  CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, &oldset, nullptr));
655
677
  }
656
- return thr;
678
+
679
+ // Skia calls mallopt(M_THREAD_DISABLE_MEM_INIT, 1), which sets the least
680
+ // significant bit of TLS_SLOT_SANITIZER to 1. Scudo allocator uses this bit
681
+ // as a flag to disable memory initialization. This is a workaround to get the
682
+ // correct ThreadState pointer.
683
+ uptr addr = reinterpret_cast<uptr>(thr);
684
+ return reinterpret_cast<ThreadState*>(addr & ~1ULL);
657
685
  }
658
686
 
659
687
  void set_cur_thread(ThreadState *thr) {
@@ -226,9 +226,20 @@ static void ThreadTerminateCallback(uptr thread) {
226
226
  void InitializePlatformEarly() {
227
227
  # if !SANITIZER_GO && SANITIZER_IOS
228
228
  uptr max_vm = GetMaxUserVirtualAddress() + 1;
229
- if (max_vm != HiAppMemEnd()) {
230
- Printf("ThreadSanitizer: unsupported vm address limit %p, expected %p.\n",
231
- (void *)max_vm, (void *)HiAppMemEnd());
229
+ if (max_vm < HiAppMemEnd()) {
230
+ Report(
231
+ "ThreadSanitizer: Unsupported virtual memory layout:\n\tVM address "
232
+ "limit = %p\n\tExpected %p.\n",
233
+ (void*)max_vm, (void*)HiAppMemEnd());
234
+ Die();
235
+ }
236
+ // In some configurations, the max_vm is expanded, but much of this space is
237
+ // already mapped. TSAN will not work in this configuration.
238
+ if (!MemoryRangeIsAvailable(HiAppMemEnd() - 1, HiAppMemEnd() - 1)) {
239
+ Report(
240
+ "ThreadSanitizer: Unsupported virtual memory layout: Address %p is "
241
+ "already mapped.\n",
242
+ (void*)(HiAppMemEnd() - 1));
232
243
  Die();
233
244
  }
234
245
  #endif
@@ -248,7 +259,9 @@ void InitializePlatform() {
248
259
 
249
260
  ThreadEventCallbacks callbacks = {
250
261
  .create = ThreadCreateCallback,
262
+ .start = nullptr,
251
263
  .terminate = ThreadTerminateCallback,
264
+ .destroy = nullptr,
252
265
  };
253
266
  InstallPthreadIntrospectionHook(callbacks);
254
267
  #endif