@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
@@ -88,15 +88,33 @@ void ThreadFinalize(ThreadState *thr) {
88
88
  #if !SANITIZER_GO
89
89
  if (!ShouldReport(thr, ReportTypeThreadLeak))
90
90
  return;
91
- ThreadRegistryLock l(&ctx->thread_registry);
92
91
  Vector<ThreadLeak> leaks;
93
- ctx->thread_registry.RunCallbackForEachThreadLocked(CollectThreadLeaks,
94
- &leaks);
92
+ {
93
+ ThreadRegistryLock l(&ctx->thread_registry);
94
+ ctx->thread_registry.RunCallbackForEachThreadLocked(CollectThreadLeaks,
95
+ &leaks);
96
+ }
97
+
95
98
  for (uptr i = 0; i < leaks.Size(); i++) {
96
- ScopedReport rep(ReportTypeThreadLeak);
97
- rep.AddThread(leaks[i].tctx, true);
98
- rep.SetCount(leaks[i].count);
99
- OutputReport(thr, rep);
99
+ // Use alloca, because malloc during signal handling deadlocks
100
+ ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
101
+ // Take a new scope as Apple platforms require the below locks released
102
+ // before symbolizing in order to avoid a deadlock
103
+ {
104
+ ThreadRegistryLock l(&ctx->thread_registry);
105
+ new (rep) ScopedReport(ReportTypeThreadLeak);
106
+ rep->AddThread(leaks[i].tctx, true);
107
+ rep->SetCount(leaks[i].count);
108
+ # if SANITIZER_APPLE
109
+ } // Close this scope to release the locks
110
+ # endif
111
+ OutputReport(thr, *rep);
112
+
113
+ // Need to manually destroy this because we used placement new to allocate
114
+ rep->~ScopedReport();
115
+ # if !SANITIZER_APPLE
116
+ }
117
+ # endif
100
118
  }
101
119
  #endif
102
120
  }
@@ -149,7 +167,7 @@ struct OnStartedArgs {
149
167
  uptr tls_size;
150
168
  };
151
169
 
152
- void ThreadStart(ThreadState *thr, Tid tid, tid_t os_id,
170
+ void ThreadStart(ThreadState *thr, Tid tid, ThreadID os_id,
153
171
  ThreadType thread_type) {
154
172
  ctx->thread_registry.StartThread(tid, os_id, thread_type, thr);
155
173
  if (!thr->ignore_sync) {
@@ -188,10 +206,14 @@ void ThreadStart(ThreadState *thr, Tid tid, tid_t os_id,
188
206
  }
189
207
  #endif
190
208
 
191
- #if !SANITIZER_GO
209
+ #if !SANITIZER_GO && !SANITIZER_ANDROID
192
210
  // Don't imitate stack/TLS writes for the main thread,
193
211
  // because its initialization is synchronized with all
194
212
  // subsequent threads anyway.
213
+ // Because thr is created by MmapOrDie, the thr object
214
+ // is not in tls, the pointer to the thr object is in
215
+ // TLS_SLOT_SANITIZER slot. So skip this check on
216
+ // Android platform.
195
217
  if (tid != kMainTid) {
196
218
  if (stk_addr && stk_size) {
197
219
  const uptr pc = StackTrace::GetNextInstructionPc(
@@ -79,7 +79,7 @@ static void AddFrame(void *ctx, const char *function_name, const char *file,
79
79
  info->column = column;
80
80
  }
81
81
 
82
- SymbolizedStack *SymbolizeCode(uptr addr) {
82
+ SymbolizedStack* SymbolizeCode(uptr addr, bool leaf) {
83
83
  // Check if PC comes from non-native land.
84
84
  if (addr & kExternalPCBit) {
85
85
  SymbolizedStackBuilder ssb = {nullptr, nullptr, addr};
@@ -19,7 +19,7 @@ namespace __tsan {
19
19
 
20
20
  void EnterSymbolizer();
21
21
  void ExitSymbolizer();
22
- SymbolizedStack *SymbolizeCode(uptr addr);
22
+ SymbolizedStack* SymbolizeCode(uptr addr, bool leaf);
23
23
  ReportLocation *SymbolizeData(uptr addr);
24
24
  void SymbolizeFlush();
25
25
 
@@ -190,7 +190,7 @@ struct Trace {
190
190
  Mutex mtx;
191
191
  IList<TraceHeader, &TraceHeader::trace_parts, TracePart> parts;
192
192
  // First node non-queued into ctx->trace_part_recycle.
193
- TracePart* local_head;
193
+ TracePart* local_head = nullptr;
194
194
  // Final position in the last part for finished threads.
195
195
  Event* final_pos = nullptr;
196
196
  // Number of trace parts allocated on behalf of this trace specifically.
@@ -73,11 +73,11 @@
73
73
  # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC
74
74
  # elif defined(__aarch64__)
75
75
  # define _LIBUNWIND_TARGET_AARCH64 1
76
- # define _LIBUNWIND_CONTEXT_SIZE 66
76
+ #define _LIBUNWIND_CONTEXT_SIZE 67
77
77
  # if defined(__SEH__)
78
78
  # define _LIBUNWIND_CURSOR_SIZE 164
79
79
  # else
80
- # define _LIBUNWIND_CURSOR_SIZE 78
80
+ #define _LIBUNWIND_CURSOR_SIZE 79
81
81
  # endif
82
82
  # define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64
83
83
  # elif defined(__arm__)
@@ -212,4 +212,13 @@
212
212
  # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
213
213
  #endif // _LIBUNWIND_IS_NATIVE_ONLY
214
214
 
215
+ #if defined(__has_feature)
216
+ # if __has_feature(ptrauth_calls) && __has_feature(ptrauth_returns)
217
+ # define _LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING 1
218
+ # elif __has_feature(ptrauth_calls) != __has_feature(ptrauth_returns)
219
+ # error "Either both or none of ptrauth_calls and ptrauth_returns "\
220
+ "is allowed to be enabled"
221
+ # endif
222
+ #endif
223
+
215
224
  #endif // ____LIBUNWIND_CONFIG_H__
@@ -43,6 +43,109 @@
43
43
  #define LIBUNWIND_AVAIL
44
44
  #endif
45
45
 
46
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
47
+
48
+ #include <ptrauth.h>
49
+
50
+ // `__ptrauth_restricted_intptr` is a feature of apple clang that predates
51
+ // support for direct application of `__ptrauth` to integer types. This
52
+ // guard is necessary to support compilation with those compiler.
53
+ #if __has_extension(ptrauth_restricted_intptr_qualifier)
54
+ #define __unwind_ptrauth_restricted_intptr(...) \
55
+ __ptrauth_restricted_intptr(__VA_ARGS__)
56
+ #else
57
+ #define __unwind_ptrauth_restricted_intptr(...) \
58
+ __ptrauth(__VA_ARGS__)
59
+ #endif
60
+
61
+ // ptrauth_string_discriminator("unw_proc_info_t::handler") == 0x7405
62
+ #define __ptrauth_unwind_upi_handler_disc 0x7405
63
+
64
+ #define __ptrauth_unwind_upi_handler \
65
+ __ptrauth(ptrauth_key_function_pointer, 1, __ptrauth_unwind_upi_handler_disc)
66
+
67
+ #define __ptrauth_unwind_upi_handler_intptr \
68
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1,\
69
+ __ptrauth_unwind_upi_handler_disc)
70
+
71
+ // ptrauth_string_discriminator("unw_proc_info_t::start_ip") == 0xCA2C
72
+ #define __ptrauth_unwind_upi_startip \
73
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 1, 0xCA2C)
74
+
75
+ // ptrauth_string_discriminator("unw_proc_info_t::end_ip") == 0xE183
76
+ #define __ptrauth_unwind_upi_endip \
77
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 1, 0xE183)
78
+
79
+ // ptrauth_string_discriminator("unw_proc_info_t::lsda") == 0x83DE
80
+ #define __ptrauth_unwind_upi_lsda \
81
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x83DE)
82
+
83
+ // ptrauth_string_discriminator("unw_proc_info_t::flags") == 0x79A1
84
+ #define __ptrauth_unwind_upi_flags \
85
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x79A1)
86
+
87
+ // ptrauth_string_discriminator("unw_proc_info_t::unwind_info") == 0xC20C
88
+ #define __ptrauth_unwind_upi_info \
89
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0xC20C)
90
+
91
+ // ptrauth_string_discriminator("unw_proc_info_t::extra") == 0x03DF
92
+ #define __ptrauth_unwind_upi_extra \
93
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x03DF)
94
+
95
+ // ptrauth_string_discriminator("Registers_arm64::link_reg_t") == 0x8301
96
+ #define __ptrauth_unwind_registers_arm64_link_reg \
97
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_code, 1, 0x8301)
98
+
99
+ // ptrauth_string_discriminator("UnwindInfoSections::dso_base") == 0x4FF5
100
+ #define __ptrauth_unwind_uis_dso_base \
101
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x4FF5)
102
+
103
+ // ptrauth_string_discriminator("UnwindInfoSections::dwarf_section") == 0x4974
104
+ #define __ptrauth_unwind_uis_dwarf_section \
105
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x4974)
106
+
107
+ // ptrauth_string_discriminator("UnwindInfoSections::dwarf_section_length") == 0x2A9A
108
+ #define __ptrauth_unwind_uis_dwarf_section_length \
109
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x2A9A)
110
+
111
+ // ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section") == 0xA27B
112
+ #define __ptrauth_unwind_uis_compact_unwind_section \
113
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0xA27B)
114
+
115
+ // ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section_length") == 0x5D0A
116
+ #define __ptrauth_unwind_uis_compact_unwind_section_length \
117
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x5D0A)
118
+
119
+ // ptrauth_string_discriminator("CIE_Info::personality") == 0x6A40
120
+ #define __ptrauth_unwind_cie_info_personality_disc 0x6A40
121
+ #define __ptrauth_unwind_cie_info_personality \
122
+ __unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1, \
123
+ __ptrauth_unwind_cie_info_personality_disc)
124
+
125
+ // ptrauth_string_discriminator("personality") == 0x7EAD)
126
+ #define __ptrauth_unwind_pauthtest_personality_disc 0x7EAD
127
+
128
+ #else
129
+
130
+ #define __unwind_ptrauth_restricted_intptr(...)
131
+ #define __ptrauth_unwind_upi_handler
132
+ #define __ptrauth_unwind_upi_handler_intptr
133
+ #define __ptrauth_unwind_upi_startip
134
+ #define __ptrauth_unwind_upi_endip
135
+ #define __ptrauth_unwind_upi_lsda
136
+ #define __ptrauth_unwind_upi_flags
137
+ #define __ptrauth_unwind_upi_info
138
+ #define __ptrauth_unwind_upi_extra
139
+ #define __ptrauth_unwind_registers_arm64_link_reg
140
+ #define __ptrauth_unwind_uis_dso_base
141
+ #define __ptrauth_unwind_uis_dwarf_section
142
+ #define __ptrauth_unwind_uis_dwarf_section_length
143
+ #define __ptrauth_unwind_uis_compact_unwind_section
144
+ #define __ptrauth_unwind_uis_compact_unwind_section_length
145
+ #define __ptrauth_unwind_cie_info_personality
146
+
147
+ #endif
148
+
46
149
  #if defined(_WIN32) && defined(__SEH__)
47
150
  #define LIBUNWIND_CURSOR_ALIGNMENT_ATTR __attribute__((__aligned__(16)))
48
151
  #else
@@ -88,17 +191,18 @@ typedef double unw_fpreg_t;
88
191
  #endif
89
192
 
90
193
  struct unw_proc_info_t {
91
- unw_word_t start_ip; /* start address of function */
92
- unw_word_t end_ip; /* address after end of function */
93
- unw_word_t lsda; /* address of language specific data area, */
94
- /* or zero if not used */
95
- unw_word_t handler; /* personality routine, or zero if not used */
96
- unw_word_t gp; /* not used */
97
- unw_word_t flags; /* not used */
98
- uint32_t format; /* compact unwind encoding, or zero if none */
99
- uint32_t unwind_info_size; /* size of DWARF unwind info, or zero if none */
100
- unw_word_t unwind_info; /* address of DWARF unwind info, or zero */
101
- unw_word_t extra; /* mach_header of mach-o image containing func */
194
+ unw_word_t __ptrauth_unwind_upi_startip start_ip; /* start address of function */
195
+ unw_word_t __ptrauth_unwind_upi_endip end_ip; /* address after end of function */
196
+ unw_word_t __ptrauth_unwind_upi_lsda lsda; /* address of language specific data area, */
197
+ /* or zero if not used */
198
+
199
+ unw_word_t __ptrauth_unwind_upi_handler_intptr handler;
200
+ unw_word_t gp; /* not used */
201
+ unw_word_t __ptrauth_unwind_upi_flags flags; /* not used */
202
+ uint32_t format; /* compact unwind encoding, or zero if none */
203
+ uint32_t unwind_info_size; /* size of DWARF unwind info, or zero if none */
204
+ unw_word_t __ptrauth_unwind_upi_info unwind_info; /* address of DWARF unwind info, or zero */
205
+ unw_word_t __ptrauth_unwind_upi_extra extra; /* mach_header of mach-o image containing func */
102
206
  };
103
207
  typedef struct unw_proc_info_t unw_proc_info_t;
104
208
 
@@ -130,6 +234,7 @@ extern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;
130
234
  extern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL;
131
235
  extern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL;
132
236
  //extern int unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*);
237
+ extern const char *unw_strerror(int) LIBUNWIND_AVAIL;
133
238
 
134
239
  extern unw_addr_space_t unw_local_addr_space;
135
240
 
@@ -532,6 +637,7 @@ enum {
532
637
  UNW_AARCH64_X31 = 31,
533
638
  UNW_AARCH64_SP = 31,
534
639
  UNW_AARCH64_PC = 32,
640
+ UNW_AARCH64_VG = 46,
535
641
 
536
642
  // reserved block
537
643
  UNW_AARCH64_RA_SIGN_STATE = 34,
@@ -125,8 +125,11 @@ _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,
125
125
  uint32_t discriminator,
126
126
  _Unwind_VRS_DataRepresentation representation);
127
127
 
128
+ extern _Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception *,
129
+ _Unwind_Context *);
130
+
128
131
  #if defined(_LIBUNWIND_UNWIND_LEVEL1_EXTERNAL_LINKAGE)
129
- #define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern
132
+ #define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern __inline__
130
133
  #else
131
134
  #define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 static __inline__
132
135
  #endif
@@ -129,22 +129,27 @@ struct UnwindInfoSections {
129
129
  defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) || \
130
130
  defined(_LIBUNWIND_USE_DL_ITERATE_PHDR)
131
131
  // No dso_base for SEH.
132
- uintptr_t dso_base;
132
+ uintptr_t __ptrauth_unwind_uis_dso_base
133
+ dso_base = 0;
133
134
  #endif
134
135
  #if defined(_LIBUNWIND_USE_DL_ITERATE_PHDR)
135
136
  size_t text_segment_length;
136
137
  #endif
137
138
  #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
138
- uintptr_t dwarf_section;
139
- size_t dwarf_section_length;
139
+ uintptr_t __ptrauth_unwind_uis_dwarf_section
140
+ dwarf_section = 0;
141
+ size_t __ptrauth_unwind_uis_dwarf_section_length
142
+ dwarf_section_length = 0;
140
143
  #endif
141
144
  #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
142
145
  uintptr_t dwarf_index_section;
143
146
  size_t dwarf_index_section_length;
144
147
  #endif
145
148
  #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND)
146
- uintptr_t compact_unwind_section;
147
- size_t compact_unwind_section_length;
149
+ uintptr_t __ptrauth_unwind_uis_compact_unwind_section
150
+ compact_unwind_section = 0;
151
+ size_t __ptrauth_unwind_uis_compact_unwind_section_length
152
+ compact_unwind_section_length = 0;
148
153
  #endif
149
154
  #if defined(_LIBUNWIND_ARM_EHABI)
150
155
  uintptr_t arm_section;
@@ -196,11 +201,16 @@ public:
196
201
  static int64_t getSLEB128(pint_t &addr, pint_t end);
197
202
 
198
203
  pint_t getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,
199
- pint_t datarelBase = 0);
200
- bool findFunctionName(pint_t addr, char *buf, size_t bufLen,
201
- unw_word_t *offset);
202
- bool findUnwindSections(pint_t targetAddr, UnwindInfoSections &info);
203
- bool findOtherFDE(pint_t targetAddr, pint_t &fde);
204
+ pint_t datarelBase = 0, pint_t *resultAddr = nullptr);
205
+ template <typename R>
206
+ bool findFunctionName(typename R::link_hardened_reg_arg_t addr, char *buf,
207
+ size_t bufLen, unw_word_t *offset);
208
+ template <typename R>
209
+ bool findUnwindSections(typename R::link_hardened_reg_arg_t targetAddr,
210
+ UnwindInfoSections &info);
211
+ template <typename R>
212
+ bool findOtherFDE(typename R::link_hardened_reg_arg_t targetAddr,
213
+ pint_t &fde);
204
214
 
205
215
  static LocalAddressSpace sThisAddressSpace;
206
216
  };
@@ -269,7 +279,7 @@ inline int64_t LocalAddressSpace::getSLEB128(pint_t &addr, pint_t end) {
269
279
 
270
280
  inline LocalAddressSpace::pint_t
271
281
  LocalAddressSpace::getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,
272
- pint_t datarelBase) {
282
+ pint_t datarelBase, pint_t *resultAddr) {
273
283
  pint_t startAddr = addr;
274
284
  const uint8_t *p = (uint8_t *)addr;
275
285
  pint_t result;
@@ -353,8 +363,14 @@ LocalAddressSpace::getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,
353
363
  break;
354
364
  }
355
365
 
356
- if (encoding & DW_EH_PE_indirect)
366
+ if (encoding & DW_EH_PE_indirect) {
367
+ if (resultAddr)
368
+ *resultAddr = result;
357
369
  result = getP(result);
370
+ } else {
371
+ if (resultAddr)
372
+ *resultAddr = startAddr;
373
+ }
358
374
 
359
375
  return result;
360
376
  }
@@ -486,9 +502,9 @@ static int findUnwindSectionsByPhdr(struct dl_phdr_info *pinfo,
486
502
 
487
503
  #endif // defined(_LIBUNWIND_USE_DL_ITERATE_PHDR)
488
504
 
489
-
490
- inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,
491
- UnwindInfoSections &info) {
505
+ template <typename R>
506
+ inline bool LocalAddressSpace::findUnwindSections(
507
+ typename R::link_hardened_reg_arg_t targetAddr, UnwindInfoSections &info) {
492
508
  #ifdef __APPLE__
493
509
  dyld_unwind_sections dyldInfo;
494
510
  if (_dyld_find_unwind_sections((void *)targetAddr, &dyldInfo)) {
@@ -658,16 +674,21 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,
658
674
  return false;
659
675
  }
660
676
 
661
- inline bool LocalAddressSpace::findOtherFDE(pint_t targetAddr, pint_t &fde) {
677
+ template <typename R>
678
+ inline bool
679
+ LocalAddressSpace::findOtherFDE(typename R::link_hardened_reg_arg_t targetAddr,
680
+ pint_t &fde) {
662
681
  // TO DO: if OS has way to dynamically register FDEs, check that.
663
682
  (void)targetAddr;
664
683
  (void)fde;
665
684
  return false;
666
685
  }
667
686
 
668
- inline bool LocalAddressSpace::findFunctionName(pint_t addr, char *buf,
669
- size_t bufLen,
670
- unw_word_t *offset) {
687
+ template <typename R>
688
+ inline bool
689
+ LocalAddressSpace::findFunctionName(typename R::link_hardened_reg_arg_t addr,
690
+ char *buf, size_t bufLen,
691
+ unw_word_t *offset) {
671
692
  #if _LIBUNWIND_USE_DLADDR
672
693
  Dl_info dyldInfo;
673
694
  if (dladdr((void *)addr, &dyldInfo)) {
@@ -601,11 +601,17 @@ int CompactUnwinder_arm64<A>::stepWithCompactEncodingFrameless(
601
601
  savedRegisterLoc -= 8;
602
602
  }
603
603
 
604
+ // We load the link register prior to setting the new SP as the authentication
605
+ // schema for LR entangles the SP of the old frame into the diversifier.
606
+ Registers_arm64::reg_t linkRegister = registers.getRegister(UNW_AARCH64_LR);
607
+
604
608
  // subtract stack size off of sp
605
609
  registers.setSP(savedRegisterLoc);
606
610
 
607
- // set pc to be value in lr
608
- registers.setIP(registers.getRegister(UNW_AARCH64_LR));
611
+ // Set pc to be value in lr. This needs to be performed after the new SP has
612
+ // been set, as the PC authentication schema entangles the SP of the new
613
+ // frame.
614
+ registers.setIP(linkRegister);
609
615
 
610
616
  return UNW_STEP_SUCCESS;
611
617
  }
@@ -614,7 +620,7 @@ template <typename A>
614
620
  int CompactUnwinder_arm64<A>::stepWithCompactEncodingFrame(
615
621
  compact_unwind_encoding_t encoding, uint64_t, A &addressSpace,
616
622
  Registers_arm64 &registers) {
617
- uint64_t savedRegisterLoc = registers.getFP() - 8;
623
+ Registers_arm64::reg_t savedRegisterLoc = registers.getFP() - 8;
618
624
 
619
625
  if (encoding & UNWIND_ARM64_FRAME_X19_X20_PAIR) {
620
626
  registers.setRegister(UNW_AARCH64_X19, addressSpace.get64(savedRegisterLoc));
@@ -680,11 +686,16 @@ int CompactUnwinder_arm64<A>::stepWithCompactEncodingFrame(
680
686
  savedRegisterLoc -= 8;
681
687
  }
682
688
 
683
- uint64_t fp = registers.getFP();
689
+ Registers_arm64::reg_t fp = registers.getFP();
690
+
684
691
  // fp points to old fp
685
692
  registers.setFP(addressSpace.get64(fp));
686
- // old sp is fp less saved fp and lr
693
+
694
+ // Old sp is fp less saved fp and lr. We need to set this prior to setting
695
+ // the lr as the pointer authentication schema for the lr incorporates the
696
+ // sp as part of the diversifier.
687
697
  registers.setSP(fp + 16);
698
+
688
699
  // pop return address into pc
689
700
  registers.setIP(addressSpace.get64(fp + 8));
690
701
 
@@ -22,7 +22,6 @@
22
22
  #include "dwarf2.h"
23
23
  #include "libunwind_ext.h"
24
24
 
25
-
26
25
  namespace libunwind {
27
26
 
28
27
 
@@ -34,8 +33,10 @@ public:
34
33
  typedef typename A::pint_t pint_t;
35
34
  typedef typename A::sint_t sint_t;
36
35
 
37
- static int stepWithDwarf(A &addressSpace, pint_t pc, pint_t fdeStart,
38
- R &registers, bool &isSignalFrame, bool stage2);
36
+ static int stepWithDwarf(A &addressSpace,
37
+ typename R::link_hardened_reg_arg_t pc,
38
+ pint_t fdeStart, R &registers, bool &isSignalFrame,
39
+ bool stage2);
39
40
 
40
41
  private:
41
42
 
@@ -64,9 +65,10 @@ private:
64
65
 
65
66
  static pint_t getCFA(A &addressSpace, const PrologInfo &prolog,
66
67
  const R &registers) {
67
- if (prolog.cfaRegister != 0)
68
- return (pint_t)((sint_t)registers.getRegister((int)prolog.cfaRegister) +
69
- prolog.cfaRegisterOffset);
68
+ if (prolog.cfaRegister != 0) {
69
+ uintptr_t cfaRegister = registers.getRegister((int)prolog.cfaRegister);
70
+ return (pint_t)(cfaRegister + prolog.cfaRegisterOffset);
71
+ }
70
72
  if (prolog.cfaExpression != 0)
71
73
  return evaluateExpression((pint_t)prolog.cfaExpression, addressSpace,
72
74
  registers, 0);
@@ -207,16 +209,16 @@ bool DwarfInstructions<A, R>::isReturnAddressSignedWithPC(A &addressSpace,
207
209
  #endif
208
210
 
209
211
  template <typename A, typename R>
210
- int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
211
- pint_t fdeStart, R &registers,
212
- bool &isSignalFrame, bool stage2) {
212
+ int DwarfInstructions<A, R>::stepWithDwarf(
213
+ A &addressSpace, typename R::link_hardened_reg_arg_t pc, pint_t fdeStart,
214
+ R &registers, bool &isSignalFrame, bool stage2) {
213
215
  FDE_Info fdeInfo;
214
216
  CIE_Info cieInfo;
215
217
  if (CFI_Parser<A>::decodeFDE(addressSpace, fdeStart, &fdeInfo,
216
218
  &cieInfo) == NULL) {
217
219
  PrologInfo prolog;
218
- if (CFI_Parser<A>::parseFDEInstructions(addressSpace, fdeInfo, cieInfo, pc,
219
- R::getArch(), &prolog)) {
220
+ if (CFI_Parser<A>::template parseFDEInstructions<R>(
221
+ addressSpace, fdeInfo, cieInfo, pc, R::getArch(), &prolog)) {
220
222
  // get pointer to cfa (architecture specific)
221
223
  pint_t cfa = getCFA(addressSpace, prolog, registers);
222
224
 
@@ -264,7 +266,7 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
264
266
  // by a CFI directive later on.
265
267
  newRegisters.setSP(cfa);
266
268
 
267
- pint_t returnAddress = 0;
269
+ typename R::reg_t returnAddress = 0;
268
270
  constexpr int lastReg = R::lastDwarfRegNum();
269
271
  static_assert(static_cast<int>(CFI_Parser<A>::kMaxRegisterNumber) >=
270
272
  lastReg,
@@ -300,7 +302,16 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
300
302
 
301
303
  isSignalFrame = cieInfo.isSignalFrame;
302
304
 
303
- #if defined(_LIBUNWIND_TARGET_AARCH64)
305
+ #if defined(_LIBUNWIND_TARGET_AARCH64) && \
306
+ !defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
307
+ // There are two ways of return address signing: pac-ret (enabled via
308
+ // -mbranch-protection=pac-ret) and ptrauth-returns (enabled as part of
309
+ // Apple's arm64e or experimental pauthtest ABI on Linux). The code
310
+ // below handles signed RA for pac-ret, while ptrauth-returns uses
311
+ // different logic.
312
+ // TODO: unify logic for both cases, see
313
+ // https://github.com/llvm/llvm-project/issues/160110
314
+ //
304
315
  // If the target is aarch64 then the return address may have been signed
305
316
  // using the v8.3 pointer authentication extensions. The original
306
317
  // return address needs to be authenticated before the return address is