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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/c/stdlib.zig +32 -22
  2. package/compiler/aro/aro/Compilation.zig +0 -3
  3. package/compiler/translate-c/ast.zig +5 -2
  4. package/compiler_rt/arm.zig +3 -3
  5. package/compiler_rt/trunctfhf2.zig +3 -0
  6. package/compiler_rt.zig +1 -22
  7. package/docs/wasm/markdown/Parser.zig +5 -9
  8. package/include/__clang_spirv_builtins.h +12 -12
  9. package/include/__float_float.h +176 -0
  10. package/include/__float_header_macro.h +12 -0
  11. package/include/__float_infinity_nan.h +20 -0
  12. package/include/amo.h +131 -0
  13. package/include/amxavx512intrin.h +215 -1
  14. package/include/amxintrin.h +0 -2
  15. package/include/arm_acle.h +37 -27
  16. package/include/arm_neon.h +218 -82
  17. package/include/arm_sme.h +8 -8
  18. package/include/arm_sve.h +4162 -3782
  19. package/include/avx10_2_512bf16intrin.h +19 -12
  20. package/include/avx10_2_512convertintrin.h +1 -1
  21. package/include/avx10_2_512niintrin.h +31 -31
  22. package/include/avx10_2_512satcvtdsintrin.h +1 -1
  23. package/include/avx10_2bf16intrin.h +54 -45
  24. package/include/avx10_2convertintrin.h +2 -2
  25. package/include/avx10_2copyintrin.h +1 -1
  26. package/include/avx10_2niintrin.h +14 -14
  27. package/include/avx10_2satcvtdsintrin.h +2 -2
  28. package/include/avx2intrin.h +275 -377
  29. package/include/avx512bf16intrin.h +25 -16
  30. package/include/avx512bitalgintrin.h +19 -30
  31. package/include/avx512bwintrin.h +386 -505
  32. package/include/avx512cdintrin.h +42 -55
  33. package/include/avx512dqintrin.h +132 -161
  34. package/include/avx512fintrin.h +1015 -1424
  35. package/include/avx512fp16intrin.h +112 -110
  36. package/include/avx512ifmaintrin.h +32 -34
  37. package/include/avx512ifmavlintrin.h +73 -46
  38. package/include/avx512vbmi2intrin.h +43 -32
  39. package/include/avx512vbmiintrin.h +19 -27
  40. package/include/avx512vbmivlintrin.h +35 -49
  41. package/include/avx512vlbf16intrin.h +32 -22
  42. package/include/avx512vlbitalgintrin.h +37 -53
  43. package/include/avx512vlbwintrin.h +470 -573
  44. package/include/avx512vlcdintrin.h +74 -102
  45. package/include/avx512vldqintrin.h +110 -127
  46. package/include/avx512vlfp16intrin.h +130 -111
  47. package/include/avx512vlintrin.h +945 -1299
  48. package/include/avx512vlvbmi2intrin.h +78 -63
  49. package/include/avx512vlvnniintrin.h +21 -18
  50. package/include/avx512vlvp2intersectintrin.h +2 -2
  51. package/include/avx512vnniintrin.h +10 -10
  52. package/include/avx512vp2intersectintrin.h +1 -2
  53. package/include/avx512vpopcntdqintrin.h +8 -10
  54. package/include/avx512vpopcntdqvlintrin.h +17 -15
  55. package/include/avxifmaintrin.h +16 -0
  56. package/include/avxintrin.h +165 -241
  57. package/include/avxvnniint16intrin.h +118 -99
  58. package/include/avxvnniint8intrin.h +56 -32
  59. package/include/avxvnniintrin.h +16 -8
  60. package/include/cpuid.h +101 -4
  61. package/include/emmintrin.h +168 -168
  62. package/include/f16cintrin.h +23 -9
  63. package/include/float.h +16 -155
  64. package/include/fma4intrin.h +98 -96
  65. package/include/fmaintrin.h +96 -66
  66. package/include/gfniintrin.h +21 -16
  67. package/include/hexagon_types.h +23 -20
  68. package/include/hvx_hexagon_protos.h +649 -860
  69. package/include/immintrin.h +0 -12
  70. package/include/intrin.h +4 -0
  71. package/include/lasxintrin.h +113 -0
  72. package/include/llvm_libc_wrappers/assert.h +3 -5
  73. package/include/llvm_libc_wrappers/ctype.h +3 -115
  74. package/include/llvm_libc_wrappers/inttypes.h +3 -5
  75. package/include/llvm_libc_wrappers/stdio.h +10 -38
  76. package/include/llvm_libc_wrappers/stdlib.h +3 -24
  77. package/include/llvm_libc_wrappers/string.h +2 -70
  78. package/include/llvm_libc_wrappers/time.h +4 -10
  79. package/include/mmintrin.h +188 -257
  80. package/include/module.modulemap +23 -4
  81. package/include/movrs_avx10_2_512intrin.h +2 -2
  82. package/include/movrs_avx10_2intrin.h +4 -4
  83. package/include/pmmintrin.h +12 -24
  84. package/include/ptrauth.h +16 -2
  85. package/include/riscv_mips.h +34 -0
  86. package/include/riscv_nds.h +89 -0
  87. package/include/sifive_vector.h +58 -2
  88. package/include/sm4evexintrin.h +2 -2
  89. package/include/smmintrin.h +77 -59
  90. package/include/spirvintrin.h +194 -0
  91. package/include/stddefer.h +19 -0
  92. package/include/tmmintrin.h +116 -147
  93. package/include/vaesintrin.h +1 -2
  94. package/include/xmmintrin.h +44 -70
  95. package/include/xopintrin.h +20 -10
  96. package/libcxx/include/__algorithm/all_of.h +11 -5
  97. package/libcxx/include/__algorithm/comp.h +4 -0
  98. package/libcxx/include/__algorithm/copy.h +28 -147
  99. package/libcxx/include/__algorithm/copy_backward.h +9 -24
  100. package/libcxx/include/__algorithm/copy_n.h +50 -16
  101. package/libcxx/include/__algorithm/count.h +2 -2
  102. package/libcxx/include/__algorithm/equal.h +43 -55
  103. package/libcxx/include/__algorithm/fill.h +26 -8
  104. package/libcxx/include/__algorithm/fill_n.h +32 -46
  105. package/libcxx/include/__algorithm/find.h +96 -39
  106. package/libcxx/include/__algorithm/find_end.h +105 -0
  107. package/libcxx/include/__algorithm/for_each.h +18 -24
  108. package/libcxx/include/__algorithm/for_each_n.h +20 -47
  109. package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
  110. package/libcxx/include/__algorithm/for_each_segment.h +26 -0
  111. package/libcxx/include/__algorithm/generate.h +4 -2
  112. package/libcxx/include/__algorithm/generate_n.h +19 -6
  113. package/libcxx/include/__algorithm/is_permutation.h +4 -4
  114. package/libcxx/include/__algorithm/iterator_operations.h +3 -0
  115. package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
  116. package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
  117. package/libcxx/include/__algorithm/make_heap.h +16 -4
  118. package/libcxx/include/__algorithm/mismatch.h +2 -2
  119. package/libcxx/include/__algorithm/move.h +8 -19
  120. package/libcxx/include/__algorithm/move_backward.h +9 -24
  121. package/libcxx/include/__algorithm/none_of.h +4 -4
  122. package/libcxx/include/__algorithm/partial_sort.h +1 -1
  123. package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
  124. package/libcxx/include/__algorithm/pstl.h +9 -9
  125. package/libcxx/include/__algorithm/radix_sort.h +27 -25
  126. package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
  127. package/libcxx/include/__algorithm/ranges_equal.h +17 -26
  128. package/libcxx/include/__algorithm/ranges_fill.h +7 -6
  129. package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
  130. package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
  131. package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
  132. package/libcxx/include/__algorithm/rotate.h +27 -44
  133. package/libcxx/include/__algorithm/search_n.h +49 -37
  134. package/libcxx/include/__algorithm/sift_down.h +19 -18
  135. package/libcxx/include/__algorithm/simd_utils.h +33 -4
  136. package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
  137. package/libcxx/include/__algorithm/stable_sort.h +1 -1
  138. package/libcxx/include/__assertion_handler +31 -4
  139. package/libcxx/include/__atomic/atomic.h +36 -60
  140. package/libcxx/include/__atomic/atomic_flag.h +19 -37
  141. package/libcxx/include/__atomic/atomic_ref.h +29 -12
  142. package/libcxx/include/__atomic/atomic_sync.h +127 -55
  143. package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
  144. package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
  145. package/libcxx/include/__atomic/contention_t.h +27 -3
  146. package/libcxx/include/__atomic/floating_point_helper.h +55 -0
  147. package/libcxx/include/__bit/countl.h +1 -2
  148. package/libcxx/include/__bit/countr.h +1 -2
  149. package/libcxx/include/__bit/has_single_bit.h +1 -1
  150. package/libcxx/include/__bit/popcount.h +0 -1
  151. package/libcxx/include/__bit/rotate.h +15 -26
  152. package/libcxx/include/__bit_reference +207 -18
  153. package/libcxx/include/__charconv/from_chars_integral.h +1 -1
  154. package/libcxx/include/__charconv/from_chars_result.h +1 -1
  155. package/libcxx/include/__charconv/to_chars_integral.h +1 -0
  156. package/libcxx/include/__charconv/to_chars_result.h +1 -1
  157. package/libcxx/include/__charconv/traits.h +3 -24
  158. package/libcxx/include/__chrono/day.h +11 -0
  159. package/libcxx/include/__chrono/duration.h +58 -33
  160. package/libcxx/include/__chrono/file_clock.h +4 -2
  161. package/libcxx/include/__chrono/is_clock.h +72 -0
  162. package/libcxx/include/__chrono/leap_second.h +13 -0
  163. package/libcxx/include/__chrono/month.h +13 -0
  164. package/libcxx/include/__chrono/month_weekday.h +22 -0
  165. package/libcxx/include/__chrono/monthday.h +20 -0
  166. package/libcxx/include/__chrono/steady_clock.h +1 -1
  167. package/libcxx/include/__chrono/system_clock.h +3 -3
  168. package/libcxx/include/__chrono/time_point.h +37 -13
  169. package/libcxx/include/__chrono/weekday.h +25 -0
  170. package/libcxx/include/__chrono/year.h +11 -0
  171. package/libcxx/include/__chrono/year_month.h +13 -0
  172. package/libcxx/include/__chrono/year_month_day.h +23 -0
  173. package/libcxx/include/__chrono/year_month_weekday.h +26 -0
  174. package/libcxx/include/__chrono/zoned_time.h +16 -0
  175. package/libcxx/include/__compare/is_eq.h +6 -6
  176. package/libcxx/include/__compare/strong_order.h +12 -30
  177. package/libcxx/include/__compare/three_way_comparable.h +2 -2
  178. package/libcxx/include/__concepts/comparison_common_type.h +40 -0
  179. package/libcxx/include/__concepts/equality_comparable.h +2 -1
  180. package/libcxx/include/__condition_variable/condition_variable.h +1 -1
  181. package/libcxx/include/__config +63 -280
  182. package/libcxx/include/__configuration/abi.h +14 -24
  183. package/libcxx/include/__configuration/availability.h +65 -118
  184. package/libcxx/include/__configuration/compiler.h +6 -6
  185. package/libcxx/include/__configuration/experimental.h +38 -0
  186. package/libcxx/include/__configuration/hardening.h +215 -0
  187. package/libcxx/include/__configuration/language.h +3 -0
  188. package/libcxx/include/__configuration/platform.h +9 -16
  189. package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
  190. package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
  191. package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
  192. package/libcxx/include/__exception/exception.h +6 -4
  193. package/libcxx/include/__exception/exception_ptr.h +27 -5
  194. package/libcxx/include/__exception/nested_exception.h +2 -2
  195. package/libcxx/include/__exception/operations.h +5 -5
  196. package/libcxx/include/__expected/bad_expected_access.h +8 -6
  197. package/libcxx/include/__expected/expected.h +62 -64
  198. package/libcxx/include/__expected/unexpected.h +4 -4
  199. package/libcxx/include/__filesystem/copy_options.h +4 -4
  200. package/libcxx/include/__filesystem/directory_entry.h +37 -33
  201. package/libcxx/include/__filesystem/directory_iterator.h +9 -11
  202. package/libcxx/include/__filesystem/directory_options.h +7 -4
  203. package/libcxx/include/__filesystem/file_status.h +3 -3
  204. package/libcxx/include/__filesystem/filesystem_error.h +9 -10
  205. package/libcxx/include/__filesystem/operations.h +97 -66
  206. package/libcxx/include/__filesystem/path.h +68 -64
  207. package/libcxx/include/__filesystem/path_iterator.h +1 -3
  208. package/libcxx/include/__filesystem/perm_options.h +4 -4
  209. package/libcxx/include/__filesystem/perms.h +4 -4
  210. package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
  211. package/libcxx/include/__filesystem/space_info.h +1 -1
  212. package/libcxx/include/__filesystem/u8path.h +12 -14
  213. package/libcxx/include/__flat_map/flat_map.h +88 -71
  214. package/libcxx/include/__flat_map/flat_multimap.h +251 -172
  215. package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
  216. package/libcxx/include/__flat_map/utils.h +1 -0
  217. package/libcxx/include/__flat_set/flat_multiset.h +211 -143
  218. package/libcxx/include/__flat_set/flat_set.h +86 -68
  219. package/libcxx/include/__format/concepts.h +0 -14
  220. package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
  221. package/libcxx/include/__format/fmt_pair_like.h +42 -0
  222. package/libcxx/include/__format/format_arg.h +7 -10
  223. package/libcxx/include/__format/format_args.h +1 -1
  224. package/libcxx/include/__format/format_context.h +5 -5
  225. package/libcxx/include/__format/format_parse_context.h +2 -2
  226. package/libcxx/include/__format/formatter_output.h +30 -34
  227. package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
  228. package/libcxx/include/__format/range_default_formatter.h +2 -41
  229. package/libcxx/include/__format/range_format.h +71 -0
  230. package/libcxx/include/__format/range_formatter.h +1 -0
  231. package/libcxx/include/__format/width_estimation_table.h +4 -2
  232. package/libcxx/include/__functional/bind.h +10 -15
  233. package/libcxx/include/__functional/bind_back.h +1 -1
  234. package/libcxx/include/__functional/bind_front.h +1 -1
  235. package/libcxx/include/__functional/function.h +57 -75
  236. package/libcxx/include/__functional/hash.h +1 -10
  237. package/libcxx/include/__functional/identity.h +1 -1
  238. package/libcxx/include/__functional/is_transparent.h +8 -0
  239. package/libcxx/include/__functional/mem_fn.h +2 -1
  240. package/libcxx/include/__functional/operations.h +18 -0
  241. package/libcxx/include/__functional/ranges_operations.h +7 -0
  242. package/libcxx/include/__functional/reference_wrapper.h +7 -5
  243. package/libcxx/include/__functional/weak_result_type.h +14 -28
  244. package/libcxx/include/__fwd/ios.h +1 -1
  245. package/libcxx/include/__fwd/tuple.h +14 -0
  246. package/libcxx/include/__hash_table +371 -357
  247. package/libcxx/include/__ios/fpos.h +4 -4
  248. package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
  249. package/libcxx/include/__iterator/bounded_iter.h +7 -8
  250. package/libcxx/include/__iterator/concepts.h +6 -9
  251. package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
  252. package/libcxx/include/__iterator/distance.h +40 -18
  253. package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
  254. package/libcxx/include/__iterator/insert_iterator.h +1 -7
  255. package/libcxx/include/__iterator/istream_iterator.h +6 -7
  256. package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
  257. package/libcxx/include/__iterator/iter_move.h +1 -1
  258. package/libcxx/include/__iterator/iterator.h +13 -0
  259. package/libcxx/include/__iterator/iterator_traits.h +13 -14
  260. package/libcxx/include/__iterator/ostream_iterator.h +1 -7
  261. package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
  262. package/libcxx/include/__iterator/reverse_iterator.h +8 -13
  263. package/libcxx/include/__iterator/segmented_iterator.h +3 -8
  264. package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
  265. package/libcxx/include/__iterator/wrap_iter.h +8 -6
  266. package/libcxx/include/__locale +3 -10
  267. package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
  268. package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
  269. package/libcxx/include/__locale_dir/messages.h +1 -1
  270. package/libcxx/include/__locale_dir/money.h +2 -2
  271. package/libcxx/include/__locale_dir/num.h +190 -243
  272. package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
  273. package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
  274. package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
  275. package/libcxx/include/__locale_dir/support/linux.h +0 -37
  276. package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
  277. package/libcxx/include/__locale_dir/support/newlib.h +243 -0
  278. package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
  279. package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
  280. package/libcxx/include/__locale_dir/support/windows.h +0 -29
  281. package/libcxx/include/__locale_dir/time.h +3 -7
  282. package/libcxx/include/__math/hypot.h +1 -1
  283. package/libcxx/include/__math/logarithms.h +1 -1
  284. package/libcxx/include/__math/traits.h +80 -11
  285. package/libcxx/include/__mdspan/extents.h +7 -4
  286. package/libcxx/include/__mdspan/layout_stride.h +4 -5
  287. package/libcxx/include/__mdspan/mdspan.h +29 -23
  288. package/libcxx/include/__memory/addressof.h +7 -5
  289. package/libcxx/include/__memory/align.h +18 -1
  290. package/libcxx/include/__memory/allocate_at_least.h +15 -10
  291. package/libcxx/include/__memory/allocator.h +14 -26
  292. package/libcxx/include/__memory/allocator_traits.h +6 -4
  293. package/libcxx/include/__memory/compressed_pair.h +15 -9
  294. package/libcxx/include/__memory/construct_at.h +12 -23
  295. package/libcxx/include/__memory/inout_ptr.h +1 -1
  296. package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
  297. package/libcxx/include/__memory/out_ptr.h +1 -1
  298. package/libcxx/include/__memory/pointer_traits.h +1 -1
  299. package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
  300. package/libcxx/include/__memory/shared_count.h +9 -30
  301. package/libcxx/include/__memory/shared_ptr.h +100 -145
  302. package/libcxx/include/__memory/temp_value.h +1 -2
  303. package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
  304. package/libcxx/include/__memory/unique_ptr.h +14 -16
  305. package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
  306. package/libcxx/include/__memory_resource/memory_resource.h +4 -2
  307. package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
  308. package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
  309. package/libcxx/include/__memory_resource/pool_options.h +1 -1
  310. package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
  311. package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
  312. package/libcxx/include/__mutex/mutex.h +2 -2
  313. package/libcxx/include/__mutex/once_flag.h +14 -11
  314. package/libcxx/include/__mutex/tag_types.h +3 -3
  315. package/libcxx/include/__mutex/unique_lock.h +8 -7
  316. package/libcxx/include/__new/align_val_t.h +6 -0
  317. package/libcxx/include/__new/allocate.h +1 -2
  318. package/libcxx/include/__new/exceptions.h +8 -2
  319. package/libcxx/include/__new/global_new_delete.h +4 -11
  320. package/libcxx/include/__new/interference_size.h +0 -4
  321. package/libcxx/include/__new/launder.h +3 -5
  322. package/libcxx/include/__new/nothrow_t.h +1 -1
  323. package/libcxx/include/__numeric/gcd_lcm.h +24 -34
  324. package/libcxx/include/__numeric/midpoint.h +9 -14
  325. package/libcxx/include/__numeric/pstl.h +2 -2
  326. package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
  327. package/libcxx/include/__ostream/basic_ostream.h +8 -8
  328. package/libcxx/include/__pstl/backends/default.h +14 -14
  329. package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
  330. package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
  331. package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
  332. package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
  333. package/libcxx/include/__random/binomial_distribution.h +10 -4
  334. package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
  335. package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
  336. package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
  337. package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
  338. package/libcxx/include/__ranges/adjacent_view.h +419 -0
  339. package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
  340. package/libcxx/include/__ranges/chunk_by_view.h +6 -6
  341. package/libcxx/include/__ranges/common_view.h +7 -7
  342. package/libcxx/include/__ranges/drop_view.h +8 -8
  343. package/libcxx/include/__ranges/drop_while_view.h +5 -5
  344. package/libcxx/include/__ranges/elements_of.h +49 -0
  345. package/libcxx/include/__ranges/empty_view.h +5 -5
  346. package/libcxx/include/__ranges/filter_view.h +10 -10
  347. package/libcxx/include/__ranges/iota_view.h +41 -22
  348. package/libcxx/include/__ranges/owning_view.h +15 -15
  349. package/libcxx/include/__ranges/ref_view.h +6 -6
  350. package/libcxx/include/__ranges/repeat_view.h +17 -10
  351. package/libcxx/include/__ranges/single_view.h +8 -8
  352. package/libcxx/include/__ranges/take_view.h +9 -9
  353. package/libcxx/include/__ranges/transform_view.h +1 -2
  354. package/libcxx/include/__ranges/view_interface.h +10 -10
  355. package/libcxx/include/__ranges/zip_transform_view.h +357 -0
  356. package/libcxx/include/__ranges/zip_view.h +20 -20
  357. package/libcxx/include/__split_buffer +612 -240
  358. package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
  359. package/libcxx/include/__stop_token/stop_callback.h +2 -2
  360. package/libcxx/include/__stop_token/stop_source.h +1 -1
  361. package/libcxx/include/__stop_token/stop_state.h +4 -4
  362. package/libcxx/include/__stop_token/stop_token.h +1 -1
  363. package/libcxx/include/__string/char_traits.h +51 -31
  364. package/libcxx/include/__string/constexpr_c_functions.h +5 -5
  365. package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
  366. package/libcxx/include/__system_error/error_category.h +8 -8
  367. package/libcxx/include/__system_error/error_code.h +5 -5
  368. package/libcxx/include/__system_error/error_condition.h +4 -4
  369. package/libcxx/include/__system_error/system_error.h +1 -1
  370. package/libcxx/include/__thread/id.h +1 -1
  371. package/libcxx/include/__thread/jthread.h +1 -1
  372. package/libcxx/include/__thread/poll_with_backoff.h +27 -8
  373. package/libcxx/include/__thread/support/c11.h +8 -8
  374. package/libcxx/include/__thread/support/pthread.h +8 -8
  375. package/libcxx/include/__thread/support/windows.h +8 -8
  376. package/libcxx/include/__thread/thread.h +13 -8
  377. package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
  378. package/libcxx/include/__tree +849 -701
  379. package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
  380. package/libcxx/include/__tuple/tuple_element.h +0 -12
  381. package/libcxx/include/__tuple/tuple_size.h +0 -4
  382. package/libcxx/include/__tuple/tuple_transform.h +45 -0
  383. package/libcxx/include/__type_traits/aligned_storage.h +13 -40
  384. package/libcxx/include/__type_traits/desugars_to.h +4 -0
  385. package/libcxx/include/__type_traits/invoke.h +8 -0
  386. package/libcxx/include/__type_traits/is_allocator.h +6 -7
  387. package/libcxx/include/__type_traits/is_array.h +26 -0
  388. package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
  389. package/libcxx/include/__type_traits/is_final.h +1 -1
  390. package/libcxx/include/__type_traits/is_floating_point.h +7 -6
  391. package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
  392. package/libcxx/include/__type_traits/is_specialization.h +2 -6
  393. package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
  394. package/libcxx/include/__type_traits/make_transparent.h +52 -0
  395. package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
  396. package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
  397. package/libcxx/include/__utility/cmp.h +19 -7
  398. package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
  399. package/libcxx/include/__utility/in_place.h +1 -1
  400. package/libcxx/include/__utility/integer_sequence.h +56 -41
  401. package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
  402. package/libcxx/include/__utility/pair.h +22 -25
  403. package/libcxx/include/__utility/scope_guard.h +2 -0
  404. package/libcxx/include/__utility/try_key_extraction.h +114 -0
  405. package/libcxx/include/__vector/vector.h +187 -160
  406. package/libcxx/include/__vector/vector_bool.h +76 -83
  407. package/libcxx/include/any +118 -155
  408. package/libcxx/include/array +88 -56
  409. package/libcxx/include/atomic +2 -0
  410. package/libcxx/include/barrier +20 -24
  411. package/libcxx/include/bitset +49 -30
  412. package/libcxx/include/ccomplex +3 -11
  413. package/libcxx/include/chrono +47 -0
  414. package/libcxx/include/ciso646 +3 -6
  415. package/libcxx/include/complex +77 -65
  416. package/libcxx/include/complex.h +10 -10
  417. package/libcxx/include/condition_variable +3 -3
  418. package/libcxx/include/cstdalign +3 -10
  419. package/libcxx/include/cstdbool +3 -10
  420. package/libcxx/include/ctgmath +2 -11
  421. package/libcxx/include/ctype.h +24 -24
  422. package/libcxx/include/cwchar +2 -2
  423. package/libcxx/include/deque +109 -225
  424. package/libcxx/include/errno.h +269 -269
  425. package/libcxx/include/exception +4 -1
  426. package/libcxx/include/ext/hash_map +7 -48
  427. package/libcxx/include/ext/hash_set +2 -8
  428. package/libcxx/include/fenv.h +43 -43
  429. package/libcxx/include/flat_map +663 -11
  430. package/libcxx/include/flat_set +543 -8
  431. package/libcxx/include/float.h +16 -16
  432. package/libcxx/include/forward_list +33 -53
  433. package/libcxx/include/fstream +57 -42
  434. package/libcxx/include/future +41 -51
  435. package/libcxx/include/initializer_list +9 -3
  436. package/libcxx/include/inttypes.h +16 -16
  437. package/libcxx/include/ios +28 -28
  438. package/libcxx/include/istream +19 -13
  439. package/libcxx/include/iterator +10 -0
  440. package/libcxx/include/latch +7 -5
  441. package/libcxx/include/limits +4 -4
  442. package/libcxx/include/list +61 -79
  443. package/libcxx/include/map +386 -274
  444. package/libcxx/include/math.h +19 -0
  445. package/libcxx/include/mdspan +1 -5
  446. package/libcxx/include/mutex +29 -19
  447. package/libcxx/include/optional +644 -149
  448. package/libcxx/include/print +9 -5
  449. package/libcxx/include/queue +39 -37
  450. package/libcxx/include/ranges +48 -0
  451. package/libcxx/include/regex +33 -31
  452. package/libcxx/include/scoped_allocator +16 -11
  453. package/libcxx/include/semaphore +15 -18
  454. package/libcxx/include/set +220 -192
  455. package/libcxx/include/shared_mutex +3 -8
  456. package/libcxx/include/span +53 -37
  457. package/libcxx/include/sstream +34 -28
  458. package/libcxx/include/stack +13 -15
  459. package/libcxx/include/stddef.h +10 -10
  460. package/libcxx/include/stdexcept +2 -2
  461. package/libcxx/include/stdio.h +20 -21
  462. package/libcxx/include/streambuf +59 -19
  463. package/libcxx/include/string +574 -573
  464. package/libcxx/include/string_view +113 -89
  465. package/libcxx/include/strstream +10 -10
  466. package/libcxx/include/syncstream +4 -4
  467. package/libcxx/include/tgmath.h +12 -12
  468. package/libcxx/include/tuple +242 -212
  469. package/libcxx/include/type_traits +8 -2
  470. package/libcxx/include/typeindex +5 -3
  471. package/libcxx/include/typeinfo +92 -89
  472. package/libcxx/include/unordered_map +179 -304
  473. package/libcxx/include/unordered_set +168 -195
  474. package/libcxx/include/utility +12 -0
  475. package/libcxx/include/valarray +106 -161
  476. package/libcxx/include/variant +25 -33
  477. package/libcxx/include/version +41 -24
  478. package/libcxx/include/wctype.h +29 -29
  479. package/libcxx/libc/hdr/errno_macros.h +3 -1
  480. package/libcxx/libc/hdr/stdint_proxy.h +18 -0
  481. package/libcxx/libc/hdr/types/wchar_t.h +23 -0
  482. package/libcxx/libc/hdr/wchar_overlay.h +69 -0
  483. package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
  484. package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
  485. package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
  486. package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
  487. package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
  488. package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
  489. package/libcxx/libc/shared/libc_common.h +5 -0
  490. package/libcxx/libc/src/__support/CPP/bit.h +50 -12
  491. package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
  492. package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
  493. package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
  494. package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
  495. package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
  496. package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
  497. package/libcxx/libc/src/__support/big_int.h +14 -14
  498. package/libcxx/libc/src/__support/common.h +3 -2
  499. package/libcxx/libc/src/__support/ctype_utils.h +19 -12
  500. package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
  501. package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
  502. package/libcxx/libc/src/__support/libc_assert.h +2 -0
  503. package/libcxx/libc/src/__support/macros/attributes.h +44 -1
  504. package/libcxx/libc/src/__support/macros/config.h +23 -0
  505. package/libcxx/libc/src/__support/macros/null_check.h +1 -2
  506. package/libcxx/libc/src/__support/macros/optimization.h +3 -0
  507. package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
  508. package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
  509. package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
  510. package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
  511. package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
  512. package/libcxx/libc/src/__support/math_extras.h +20 -4
  513. package/libcxx/libc/src/__support/str_to_float.h +98 -125
  514. package/libcxx/libc/src/__support/str_to_integer.h +39 -27
  515. package/libcxx/libc/src/__support/wctype_utils.h +588 -0
  516. package/libcxx/src/any.cpp +4 -0
  517. package/libcxx/src/atomic.cpp +365 -80
  518. package/libcxx/src/barrier.cpp +4 -3
  519. package/libcxx/src/charconv.cpp +6 -3
  520. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  521. package/libcxx/src/error_category.cpp +3 -1
  522. package/libcxx/src/exception.cpp +2 -10
  523. package/libcxx/src/experimental/time_zone.cpp +1 -1
  524. package/libcxx/src/experimental/tzdb.cpp +4 -1
  525. package/libcxx/src/filesystem/error.h +4 -22
  526. package/libcxx/src/filesystem/format_string.h +9 -18
  527. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  528. package/libcxx/src/filesystem/operations.cpp +2 -9
  529. package/libcxx/src/filesystem/path.cpp +3 -1
  530. package/libcxx/src/include/aligned_alloc.h +65 -0
  531. package/libcxx/src/include/config_elast.h +1 -1
  532. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  533. package/libcxx/src/include/overridable_function.h +8 -10
  534. package/libcxx/src/iostream.cpp +56 -37
  535. package/libcxx/src/locale.cpp +213 -196
  536. package/libcxx/src/memory.cpp +12 -14
  537. package/libcxx/src/mutex_destructor.cpp +1 -1
  538. package/libcxx/src/new.cpp +5 -5
  539. package/libcxx/src/optional.cpp +4 -0
  540. package/libcxx/src/print.cpp +9 -1
  541. package/libcxx/src/random.cpp +0 -26
  542. package/libcxx/src/string.cpp +10 -25
  543. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  544. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  545. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  546. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  547. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  548. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  549. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  550. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  551. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  552. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  553. package/libcxx/src/system_error.cpp +2 -0
  554. package/libcxx/src/thread.cpp +1 -3
  555. package/libcxx/src/valarray.cpp +1 -2
  556. package/libcxx/src/vector.cpp +2 -2
  557. package/libcxxabi/include/__cxxabi_config.h +42 -23
  558. package/libcxxabi/src/cxa_exception.cpp +4 -2
  559. package/libcxxabi/src/cxa_exception.h +16 -14
  560. package/libcxxabi/src/cxa_personality.cpp +126 -9
  561. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  562. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  563. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  564. package/libcxxabi/src/demangle/Utility.h +21 -7
  565. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  566. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  567. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  568. package/libtsan/LICENSE.TXT +311 -0
  569. package/libtsan/builtins/assembly.h +41 -8
  570. package/libtsan/interception/interception_win.cpp +4 -0
  571. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  572. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  573. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  574. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  575. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  576. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  577. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  578. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  579. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  580. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  581. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  582. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  583. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  584. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  585. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  586. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  587. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  588. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  589. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  590. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  591. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  592. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  593. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  594. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  595. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  596. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  597. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  598. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  599. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  600. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  601. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  602. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  603. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  604. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  605. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  606. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  607. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  608. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  609. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  610. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  611. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  612. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  613. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  614. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  615. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  616. package/libtsan/tsan_debugging.cpp +2 -2
  617. package/libtsan/tsan_flags.cpp +37 -0
  618. package/libtsan/tsan_flags.h +8 -0
  619. package/libtsan/tsan_flags.inc +12 -0
  620. package/libtsan/tsan_interceptors.h +9 -1
  621. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  622. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  623. package/libtsan/tsan_interface.h +3 -3
  624. package/libtsan/tsan_interface_ann.cpp +23 -9
  625. package/libtsan/tsan_mman.cpp +18 -4
  626. package/libtsan/tsan_platform.h +44 -7
  627. package/libtsan/tsan_platform_linux.cpp +42 -14
  628. package/libtsan/tsan_platform_mac.cpp +16 -3
  629. package/libtsan/tsan_report.h +14 -1
  630. package/libtsan/tsan_rtl.cpp +14 -0
  631. package/libtsan/tsan_rtl.h +7 -2
  632. package/libtsan/tsan_rtl_aarch64.S +3 -5
  633. package/libtsan/tsan_rtl_access.cpp +8 -3
  634. package/libtsan/tsan_rtl_amd64.S +2 -0
  635. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  636. package/libtsan/tsan_rtl_report.cpp +132 -65
  637. package/libtsan/tsan_rtl_thread.cpp +31 -9
  638. package/libtsan/tsan_symbolize.cpp +1 -1
  639. package/libtsan/tsan_symbolize.h +1 -1
  640. package/libtsan/tsan_trace.h +1 -1
  641. package/libunwind/include/__libunwind_config.h +11 -2
  642. package/libunwind/include/libunwind.h +117 -11
  643. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  644. package/libunwind/src/AddressSpace.hpp +42 -20
  645. package/libunwind/src/CompactUnwinder.hpp +16 -5
  646. package/libunwind/src/DwarfInstructions.hpp +24 -13
  647. package/libunwind/src/DwarfParser.hpp +62 -23
  648. package/libunwind/src/EHHeaderParser.hpp +7 -4
  649. package/libunwind/src/Registers.hpp +226 -22
  650. package/libunwind/src/Unwind-seh.cpp +6 -7
  651. package/libunwind/src/Unwind-wasm.c +7 -7
  652. package/libunwind/src/UnwindCursor.hpp +167 -49
  653. package/libunwind/src/UnwindLevel1.c +46 -17
  654. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  655. package/libunwind/src/UnwindRegistersSave.S +86 -2
  656. package/libunwind/src/assembly.h +5 -1
  657. package/libunwind/src/config.h +9 -0
  658. package/libunwind/src/gcc_personality_v0.c +79 -6
  659. package/libunwind/src/libunwind.cpp +104 -4
  660. package/libunwind/src/libunwind_ext.h +7 -1
  661. package/libunwind/src/shadow_stack_unwind.h +2 -2
  662. package/lldb/pretty_printers.py +948 -0
  663. package/package.json +1 -1
  664. package/std/Build/Step/Compile.zig +18 -19
  665. package/std/Build/Step/Run.zig +13 -6
  666. package/std/Build/Step.zig +0 -3
  667. package/std/Io/Threaded.zig +3 -0
  668. package/std/Target/aarch64.zig +620 -77
  669. package/std/Target/amdgcn.zig +421 -21
  670. package/std/Target/arm.zig +40 -6
  671. package/std/Target/bpf.zig +6 -0
  672. package/std/Target/hexagon.zig +41 -6
  673. package/std/Target/loongarch.zig +18 -0
  674. package/std/Target/mips.zig +6 -0
  675. package/std/Target/nvptx.zig +58 -35
  676. package/std/Target/powerpc.zig +27 -19
  677. package/std/Target/riscv.zig +415 -177
  678. package/std/Target/sparc.zig +17 -0
  679. package/std/Target/wasm.zig +7 -0
  680. package/std/Target/x86.zig +200 -31
  681. package/std/Target/xtensa.zig +65 -0
  682. package/std/Target.zig +16 -8
  683. package/std/c.zig +7 -0
  684. package/std/crypto/ml_kem.zig +0 -15
  685. package/std/debug/Dwarf.zig +14 -11
  686. package/std/debug/Pdb.zig +24 -16
  687. package/std/hash/xxhash.zig +0 -6
  688. package/std/math/log10.zig +0 -2
  689. package/std/math/modf.zig +1 -2
  690. package/std/mem.zig +1 -2
  691. package/std/os/linux/x86.zig +2 -2
  692. package/std/os/windows.zig +130 -1
  693. package/std/simd.zig +4 -21
  694. package/std/start.zig +4 -3
  695. package/std/zig/Ast.zig +5 -7
  696. package/std/zig/AstGen.zig +20 -14
  697. package/std/zig/ErrorBundle.zig +6 -2
  698. package/std/zig/ZonGen.zig +13 -21
  699. package/std/zig/llvm/Builder.zig +2 -2
  700. package/std/zig/system/arm.zig +56 -2
  701. package/std/zig/system/windows.zig +34 -1
  702. package/std/zig/system/x86.zig +60 -16
  703. package/std/zig/system.zig +0 -10
  704. package/std/zig/target.zig +1 -2
  705. package/std/zon/parse.zig +1 -1
  706. package/include/amxbf16transposeintrin.h +0 -94
  707. package/include/amxcomplextransposeintrin.h +0 -303
  708. package/include/amxfp16transposeintrin.h +0 -94
  709. package/include/amxmovrstransposeintrin.h +0 -200
  710. package/include/amxtf32transposeintrin.h +0 -105
  711. package/include/amxtransposeintrin.h +0 -248
  712. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  713. package/std/Build/Step/CheckObject.zig +0 -2764
@@ -37,13 +37,13 @@ struct _Unwind_LandingPadContext {
37
37
  // function
38
38
  thread_local struct _Unwind_LandingPadContext __wasm_lpad_context;
39
39
 
40
- /// Calls to this function is in landing pads in compiler-generated user code.
40
+ /// Calls to this function are in landing pads in compiler-generated user code.
41
41
  /// In other EH schemes, stack unwinding is done by libunwind library, which
42
- /// calls the personality function for each each frame it lands. On the other
43
- /// hand, WebAssembly stack unwinding process is performed by a VM, and the
44
- /// personality function cannot be called from there. So the compiler inserts
45
- /// a call to this function in landing pads in the user code, which in turn
46
- /// calls the personality function.
42
+ /// calls the personality function for each frame it lands. On the other hand,
43
+ /// WebAssembly stack unwinding process is performed by a VM, and the
44
+ /// personality function cannot be called from there. So the compiler inserts a
45
+ /// call to this function in landing pads in the user code, which in turn calls
46
+ /// the personality function.
47
47
  _Unwind_Reason_Code _Unwind_CallPersonality(void *exception_ptr) {
48
48
  struct _Unwind_Exception *exception_object =
49
49
  (struct _Unwind_Exception *)exception_ptr;
@@ -92,7 +92,7 @@ _LIBUNWIND_EXPORT void _Unwind_SetGR(struct _Unwind_Context *context, int index,
92
92
 
93
93
  /// Called by personality handler to get instruction pointer.
94
94
  _LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) {
95
- // The result will be used as an 1-based index after decrementing 1, so we
95
+ // The result will be used as a 1-based index after decrementing 1, so we
96
96
  // increment 2 here
97
97
  uintptr_t result =
98
98
  ((struct _Unwind_LandingPadContext *)context)->lpad_index + 2;
@@ -41,7 +41,8 @@
41
41
  #define _LIBUNWIND_CHECK_LINUX_SIGRETURN 1
42
42
  #endif
43
43
 
44
- #if defined(_LIBUNWIND_TARGET_HAIKU) && defined(_LIBUNWIND_TARGET_X86_64)
44
+ #if defined(_LIBUNWIND_TARGET_HAIKU) && \
45
+ (defined(_LIBUNWIND_TARGET_I386) || defined(_LIBUNWIND_TARGET_X86_64))
45
46
  #include <OS.h>
46
47
  #include <signal.h>
47
48
  #define _LIBUNWIND_CHECK_HAIKU_SIGRETURN 1
@@ -120,7 +121,9 @@ class _LIBUNWIND_HIDDEN DwarfFDECache {
120
121
  typedef typename A::pint_t pint_t;
121
122
  public:
122
123
  static constexpr pint_t kSearchAll = static_cast<pint_t>(-1);
123
- static pint_t findFDE(pint_t mh, pint_t pc);
124
+ template <typename R>
125
+ static pint_t findFDE(pint_t mh, typename R::link_hardened_reg_arg_t pc);
126
+
124
127
  static void add(pint_t mh, pint_t ip_start, pint_t ip_end, pint_t fde);
125
128
  static void removeAllIn(pint_t mh);
126
129
  static void iterateCacheEntries(void (*func)(unw_word_t ip_start,
@@ -173,7 +176,9 @@ bool DwarfFDECache<A>::_registeredForDyldUnloads = false;
173
176
  #endif
174
177
 
175
178
  template <typename A>
176
- typename A::pint_t DwarfFDECache<A>::findFDE(pint_t mh, pint_t pc) {
179
+ template <typename R>
180
+ typename DwarfFDECache<A>::pint_t
181
+ DwarfFDECache<A>::findFDE(pint_t mh, typename R::link_hardened_reg_arg_t pc) {
177
182
  pint_t result = 0;
178
183
  _LIBUNWIND_LOG_IF_FALSE(_lock.lock_shared());
179
184
  for (entry *p = _buffer; p < _bufferUsed; ++p) {
@@ -471,7 +476,9 @@ public:
471
476
  virtual void getInfo(unw_proc_info_t *) {
472
477
  _LIBUNWIND_ABORT("getInfo not implemented");
473
478
  }
474
- virtual void jumpto() { _LIBUNWIND_ABORT("jumpto not implemented"); }
479
+ _LIBUNWIND_TRACE_NO_INLINE virtual void jumpto() {
480
+ _LIBUNWIND_ABORT("jumpto not implemented");
481
+ }
475
482
  virtual bool isSignalFrame() {
476
483
  _LIBUNWIND_ABORT("isSignalFrame not implemented");
477
484
  }
@@ -488,6 +495,12 @@ public:
488
495
  virtual void saveVFPAsX() { _LIBUNWIND_ABORT("saveVFPAsX not implemented"); }
489
496
  #endif
490
497
 
498
+ #ifdef _LIBUNWIND_TRACE_RET_INJECT
499
+ virtual void setWalkedFrames(unsigned) {
500
+ _LIBUNWIND_ABORT("setWalkedFrames not implemented");
501
+ }
502
+ #endif
503
+
491
504
  #ifdef _AIX
492
505
  virtual uintptr_t getDataRelBase() {
493
506
  _LIBUNWIND_ABORT("getDataRelBase not implemented");
@@ -964,7 +977,8 @@ public:
964
977
  virtual void setFloatReg(int, unw_fpreg_t);
965
978
  virtual int step(bool stage2 = false);
966
979
  virtual void getInfo(unw_proc_info_t *);
967
- virtual void jumpto();
980
+ _LIBUNWIND_TRACE_NO_INLINE
981
+ virtual void jumpto();
968
982
  virtual bool isSignalFrame();
969
983
  virtual bool getFunctionName(char *buf, size_t len, unw_word_t *off);
970
984
  virtual void setInfoBasedOnIPRegister(bool isReturnAddress = false);
@@ -973,6 +987,10 @@ public:
973
987
  virtual void saveVFPAsX();
974
988
  #endif
975
989
 
990
+ #ifdef _LIBUNWIND_TRACE_RET_INJECT
991
+ virtual void setWalkedFrames(unsigned);
992
+ #endif
993
+
976
994
  #ifdef _AIX
977
995
  virtual uintptr_t getDataRelBase();
978
996
  #endif
@@ -1045,19 +1063,28 @@ private:
1045
1063
  #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
1046
1064
  bool getInfoFromFdeCie(const typename CFI_Parser<A>::FDE_Info &fdeInfo,
1047
1065
  const typename CFI_Parser<A>::CIE_Info &cieInfo,
1048
- pint_t pc, uintptr_t dso_base);
1049
- bool getInfoFromDwarfSection(pint_t pc, const UnwindInfoSections &sects,
1050
- uint32_t fdeSectionOffsetHint=0);
1066
+ typename R::link_hardened_reg_arg_t pc,
1067
+ uintptr_t dso_base);
1068
+ bool getInfoFromDwarfSection(typename R::link_hardened_reg_arg_t pc,
1069
+ const UnwindInfoSections &sects,
1070
+ uint32_t fdeSectionOffsetHint = 0);
1051
1071
  int stepWithDwarfFDE(bool stage2) {
1072
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
1073
+ typename R::reg_t rawPC = this->getReg(UNW_REG_IP);
1074
+ typename R::link_reg_t pc;
1075
+ _registers.loadAndAuthenticateLinkRegister(rawPC, &pc);
1076
+ #else
1077
+ typename R::link_reg_t pc = this->getReg(UNW_REG_IP);
1078
+ #endif
1052
1079
  return DwarfInstructions<A, R>::stepWithDwarf(
1053
- _addressSpace, (pint_t)this->getReg(UNW_REG_IP),
1054
- (pint_t)_info.unwind_info, _registers, _isSignalFrame, stage2);
1080
+ _addressSpace, pc, (pint_t)_info.unwind_info, _registers,
1081
+ _isSignalFrame, stage2);
1055
1082
  }
1056
1083
  #endif
1057
1084
 
1058
1085
  #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND)
1059
- bool getInfoFromCompactEncodingSection(pint_t pc,
1060
- const UnwindInfoSections &sects);
1086
+ bool getInfoFromCompactEncodingSection(typename R::link_hardened_reg_arg_t pc,
1087
+ const UnwindInfoSections &sects);
1061
1088
  int stepWithCompactEncoding(bool stage2 = false) {
1062
1089
  #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
1063
1090
  if ( compactSaysUseDwarf() )
@@ -1344,9 +1371,12 @@ private:
1344
1371
  bool _unwindInfoMissing;
1345
1372
  bool _isSignalFrame;
1346
1373
  #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) || \
1347
- defined(_LIBUNWIND_TARGET_HAIKU)
1374
+ defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN)
1348
1375
  bool _isSigReturn = false;
1349
1376
  #endif
1377
+ #ifdef _LIBUNWIND_TRACE_RET_INJECT
1378
+ uint32_t _walkedFrames;
1379
+ #endif
1350
1380
  };
1351
1381
 
1352
1382
 
@@ -1358,13 +1388,13 @@ UnwindCursor<A, R>::UnwindCursor(unw_context_t *context, A &as)
1358
1388
  "UnwindCursor<> does not fit in unw_cursor_t");
1359
1389
  static_assert((alignof(UnwindCursor<A, R>) <= alignof(unw_cursor_t)),
1360
1390
  "UnwindCursor<> requires more alignment than unw_cursor_t");
1361
- memset(&_info, 0, sizeof(_info));
1391
+ memset(static_cast<void *>(&_info), 0, sizeof(_info));
1362
1392
  }
1363
1393
 
1364
1394
  template <typename A, typename R>
1365
1395
  UnwindCursor<A, R>::UnwindCursor(A &as, void *)
1366
1396
  : _addressSpace(as), _unwindInfoMissing(false), _isSignalFrame(false) {
1367
- memset(&_info, 0, sizeof(_info));
1397
+ memset(static_cast<void *>(&_info), 0, sizeof(_info));
1368
1398
  // FIXME
1369
1399
  // fill in _registers from thread arg
1370
1400
  }
@@ -1401,7 +1431,46 @@ void UnwindCursor<A, R>::setFloatReg(int regNum, unw_fpreg_t value) {
1401
1431
  }
1402
1432
 
1403
1433
  template <typename A, typename R> void UnwindCursor<A, R>::jumpto() {
1434
+ #ifdef _LIBUNWIND_TRACE_RET_INJECT
1435
+ /*
1436
+
1437
+ The value of `_walkedFrames` is computed in `unwind_phase2` and represents the
1438
+ number of frames walked starting `unwind_phase2` to get to the landing pad.
1439
+
1440
+ ```
1441
+ // uc is initialized by __unw_getcontext in the parent frame.
1442
+ // The first stack frame walked is unwind_phase2.
1443
+ unsigned framesWalked = 1;
1444
+ ```
1445
+
1446
+ To that, we need to add the number of function calls in libunwind between
1447
+ `unwind_phase2` & `__libunwind_Registers_arm64_jumpto` which performs the long
1448
+ jump, to rebalance the execution flow.
1449
+
1450
+ ```
1451
+ frame #0: libunwind.1.dylib`__libunwind_Registers_arm64_jumpto at UnwindRegistersRestore.S:646
1452
+ frame #1: libunwind.1.dylib`libunwind::Registers_arm64::returnto at Registers.hpp:2291:3
1453
+ frame #2: libunwind.1.dylib`libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_arm64>::jumpto at UnwindCursor.hpp:1474:14
1454
+ frame #3: libunwind.1.dylib`__unw_resume at libunwind.cpp:375:7
1455
+ frame #4: libunwind.1.dylib`__unw_resume_with_frames_walked at libunwind.cpp:363:10
1456
+ frame #5: libunwind.1.dylib`unwind_phase2 at UnwindLevel1.c:328:9
1457
+ frame #6: libunwind.1.dylib`_Unwind_RaiseException at UnwindLevel1.c:480:10
1458
+ frame #7: libc++abi.dylib`__cxa_throw at cxa_exception.cpp:295:5
1459
+ ...
1460
+ ```
1461
+
1462
+ If we look at the backtrace from `__libunwind_Registers_arm64_jumpto`, we see
1463
+ there are 5 frames on the stack to reach `unwind_phase2`. However, only 4 of
1464
+ them will never return, since `__libunwind_Registers_arm64_jumpto` returns
1465
+ back to the landing pad, so we need to subtract 1 to the number of
1466
+ `_EXTRA_LIBUNWIND_FRAMES_WALKED`.
1467
+ */
1468
+
1469
+ static constexpr size_t _EXTRA_LIBUNWIND_FRAMES_WALKED = 5 - 1;
1470
+ _registers.returnto(_walkedFrames + _EXTRA_LIBUNWIND_FRAMES_WALKED);
1471
+ #else
1404
1472
  _registers.jumpto();
1473
+ #endif
1405
1474
  }
1406
1475
 
1407
1476
  #ifdef __arm__
@@ -1410,6 +1479,13 @@ template <typename A, typename R> void UnwindCursor<A, R>::saveVFPAsX() {
1410
1479
  }
1411
1480
  #endif
1412
1481
 
1482
+ #ifdef _LIBUNWIND_TRACE_RET_INJECT
1483
+ template <typename A, typename R>
1484
+ void UnwindCursor<A, R>::setWalkedFrames(unsigned walkedFrames) {
1485
+ _walkedFrames = walkedFrames;
1486
+ }
1487
+ #endif
1488
+
1413
1489
  #ifdef _AIX
1414
1490
  template <typename A, typename R>
1415
1491
  uintptr_t UnwindCursor<A, R>::getDataRelBase() {
@@ -1658,11 +1734,11 @@ bool UnwindCursor<A, R>::getInfoFromEHABISection(
1658
1734
  template <typename A, typename R>
1659
1735
  bool UnwindCursor<A, R>::getInfoFromFdeCie(
1660
1736
  const typename CFI_Parser<A>::FDE_Info &fdeInfo,
1661
- const typename CFI_Parser<A>::CIE_Info &cieInfo, pint_t pc,
1662
- uintptr_t dso_base) {
1737
+ const typename CFI_Parser<A>::CIE_Info &cieInfo,
1738
+ typename R::link_hardened_reg_arg_t pc, uintptr_t dso_base) {
1663
1739
  typename CFI_Parser<A>::PrologInfo prolog;
1664
- if (CFI_Parser<A>::parseFDEInstructions(_addressSpace, fdeInfo, cieInfo, pc,
1665
- R::getArch(), &prolog)) {
1740
+ if (CFI_Parser<A>::template parseFDEInstructions<R>(
1741
+ _addressSpace, fdeInfo, cieInfo, pc, R::getArch(), &prolog)) {
1666
1742
  // Save off parsed FDE info
1667
1743
  _info.start_ip = fdeInfo.pcStart;
1668
1744
  _info.end_ip = fdeInfo.pcEnd;
@@ -1682,43 +1758,42 @@ bool UnwindCursor<A, R>::getInfoFromFdeCie(
1682
1758
  }
1683
1759
 
1684
1760
  template <typename A, typename R>
1685
- bool UnwindCursor<A, R>::getInfoFromDwarfSection(pint_t pc,
1686
- const UnwindInfoSections &sects,
1687
- uint32_t fdeSectionOffsetHint) {
1761
+ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
1762
+ typename R::link_hardened_reg_arg_t pc, const UnwindInfoSections &sects,
1763
+ uint32_t fdeSectionOffsetHint) {
1688
1764
  typename CFI_Parser<A>::FDE_Info fdeInfo;
1689
1765
  typename CFI_Parser<A>::CIE_Info cieInfo;
1690
1766
  bool foundFDE = false;
1691
1767
  bool foundInCache = false;
1692
1768
  // If compact encoding table gave offset into dwarf section, go directly there
1693
1769
  if (fdeSectionOffsetHint != 0) {
1694
- foundFDE = CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,
1695
- sects.dwarf_section_length,
1696
- sects.dwarf_section + fdeSectionOffsetHint,
1697
- &fdeInfo, &cieInfo);
1770
+ foundFDE = CFI_Parser<A>::template findFDE<R>(
1771
+ _addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length,
1772
+ sects.dwarf_section + fdeSectionOffsetHint, &fdeInfo, &cieInfo);
1698
1773
  }
1699
1774
  #if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
1700
1775
  if (!foundFDE && (sects.dwarf_index_section != 0)) {
1701
- foundFDE = EHHeaderParser<A>::findFDE(
1776
+ foundFDE = EHHeaderParser<A>::template findFDE<R>(
1702
1777
  _addressSpace, pc, sects.dwarf_index_section,
1703
1778
  (uint32_t)sects.dwarf_index_section_length, &fdeInfo, &cieInfo);
1704
1779
  }
1705
1780
  #endif
1706
1781
  if (!foundFDE) {
1707
1782
  // otherwise, search cache of previously found FDEs.
1708
- pint_t cachedFDE = DwarfFDECache<A>::findFDE(sects.dso_base, pc);
1783
+ pint_t cachedFDE =
1784
+ DwarfFDECache<A>::template findFDE<R>(sects.dso_base, pc);
1709
1785
  if (cachedFDE != 0) {
1710
- foundFDE =
1711
- CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,
1712
- sects.dwarf_section_length,
1713
- cachedFDE, &fdeInfo, &cieInfo);
1786
+ foundFDE = CFI_Parser<A>::template findFDE<R>(
1787
+ _addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length,
1788
+ cachedFDE, &fdeInfo, &cieInfo);
1714
1789
  foundInCache = foundFDE;
1715
1790
  }
1716
1791
  }
1717
1792
  if (!foundFDE) {
1718
1793
  // Still not found, do full scan of __eh_frame section.
1719
- foundFDE = CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,
1720
- sects.dwarf_section_length, 0,
1721
- &fdeInfo, &cieInfo);
1794
+ foundFDE = CFI_Parser<A>::template findFDE<R>(
1795
+ _addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length, 0,
1796
+ &fdeInfo, &cieInfo);
1722
1797
  }
1723
1798
  if (foundFDE) {
1724
1799
  if (getInfoFromFdeCie(fdeInfo, cieInfo, pc, sects.dso_base)) {
@@ -1742,8 +1817,8 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(pint_t pc,
1742
1817
 
1743
1818
  #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND)
1744
1819
  template <typename A, typename R>
1745
- bool UnwindCursor<A, R>::getInfoFromCompactEncodingSection(pint_t pc,
1746
- const UnwindInfoSections &sects) {
1820
+ bool UnwindCursor<A, R>::getInfoFromCompactEncodingSection(
1821
+ typename R::link_hardened_reg_arg_t pc, const UnwindInfoSections &sects) {
1747
1822
  const bool log = false;
1748
1823
  if (log)
1749
1824
  fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX, mh=0x%llX)\n",
@@ -1974,6 +2049,16 @@ bool UnwindCursor<A, R>::getInfoFromCompactEncodingSection(pint_t pc,
1974
2049
  personalityIndex * sizeof(uint32_t));
1975
2050
  pint_t personalityPointer = sects.dso_base + (pint_t)personalityDelta;
1976
2051
  personality = _addressSpace.getP(personalityPointer);
2052
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
2053
+ // The GOT for the personality function was signed address authenticated.
2054
+ // Resign it as a regular function pointer.
2055
+ const auto discriminator = ptrauth_blend_discriminator(
2056
+ &_info.handler, __ptrauth_unwind_upi_handler_disc);
2057
+ void *signedPtr = ptrauth_auth_and_resign(
2058
+ (void *)personality, ptrauth_key_function_pointer, personalityPointer,
2059
+ ptrauth_key_function_pointer, discriminator);
2060
+ personality = (__typeof(personality))signedPtr;
2061
+ #endif
1977
2062
  if (log)
1978
2063
  fprintf(stderr, "getInfoFromCompactEncodingSection(pc=0x%llX), "
1979
2064
  "personalityDelta=0x%08X, personality=0x%08llX\n",
@@ -1987,7 +2072,11 @@ bool UnwindCursor<A, R>::getInfoFromCompactEncodingSection(pint_t pc,
1987
2072
  _info.start_ip = funcStart;
1988
2073
  _info.end_ip = funcEnd;
1989
2074
  _info.lsda = lsda;
1990
- _info.handler = personality;
2075
+ // We use memmove to copy the personality function as we have already manually
2076
+ // re-signed the pointer, and assigning directly will attempt to incorrectly
2077
+ // sign the already signed value.
2078
+ memmove(reinterpret_cast<void *>(&_info.handler),
2079
+ reinterpret_cast<void *>(&personality), sizeof(personality));
1991
2080
  _info.gp = 0;
1992
2081
  _info.flags = 0;
1993
2082
  _info.format = encoding;
@@ -2640,11 +2729,19 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {
2640
2729
  _isSigReturn = false;
2641
2730
  #endif
2642
2731
 
2643
- pint_t pc = static_cast<pint_t>(this->getReg(UNW_REG_IP));
2732
+ typename R::reg_t rawPC = this->getReg(UNW_REG_IP);
2733
+
2644
2734
  #if defined(_LIBUNWIND_ARM_EHABI)
2645
2735
  // Remove the thumb bit so the IP represents the actual instruction address.
2646
2736
  // This matches the behaviour of _Unwind_GetIP on arm.
2647
- pc &= (pint_t)~0x1;
2737
+ rawPC &= (pint_t)~0x1;
2738
+ #endif
2739
+
2740
+ typename R::link_reg_t pc;
2741
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
2742
+ _registers.loadAndAuthenticateLinkRegister(rawPC, &pc);
2743
+ #else
2744
+ pc = rawPC;
2648
2745
  #endif
2649
2746
 
2650
2747
  // Exit early if at the top of the stack.
@@ -2679,7 +2776,7 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {
2679
2776
 
2680
2777
  // Ask address space object to find unwind sections for this pc.
2681
2778
  UnwindInfoSections sects;
2682
- if (_addressSpace.findUnwindSections(pc, sects)) {
2779
+ if (_addressSpace.template findUnwindSections<R>(pc, sects)) {
2683
2780
  #if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND)
2684
2781
  // If there is a compact unwind encoding table, look there first.
2685
2782
  if (sects.compact_unwind_section != 0) {
@@ -2735,8 +2832,8 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {
2735
2832
  #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
2736
2833
  // There is no static unwind info for this pc. Look to see if an FDE was
2737
2834
  // dynamically registered for it.
2738
- pint_t cachedFDE = DwarfFDECache<A>::findFDE(DwarfFDECache<A>::kSearchAll,
2739
- pc);
2835
+ pint_t cachedFDE =
2836
+ DwarfFDECache<A>::template findFDE<R>(DwarfFDECache<A>::kSearchAll, pc);
2740
2837
  if (cachedFDE != 0) {
2741
2838
  typename CFI_Parser<A>::FDE_Info fdeInfo;
2742
2839
  typename CFI_Parser<A>::CIE_Info cieInfo;
@@ -2748,7 +2845,7 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {
2748
2845
  // Lastly, ask AddressSpace object about platform specific ways to locate
2749
2846
  // other FDEs.
2750
2847
  pint_t fde;
2751
- if (_addressSpace.findOtherFDE(pc, fde)) {
2848
+ if (_addressSpace.template findOtherFDE<R>(pc, fde)) {
2752
2849
  typename CFI_Parser<A>::FDE_Info fdeInfo;
2753
2850
  typename CFI_Parser<A>::CIE_Info cieInfo;
2754
2851
  if (!CFI_Parser<A>::decodeFDE(_addressSpace, fde, &fdeInfo, &cieInfo)) {
@@ -2772,6 +2869,21 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {
2772
2869
 
2773
2870
  #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) && \
2774
2871
  defined(_LIBUNWIND_TARGET_AARCH64)
2872
+
2873
+ /*
2874
+ * The linux sigreturn restorer stub will always have the form:
2875
+ *
2876
+ * d2801168 movz x8, #0x8b
2877
+ * d4000001 svc #0x0
2878
+ */
2879
+ #if defined(__AARCH64EB__)
2880
+ #define MOVZ_X8_8B 0x681180d2
2881
+ #define SVC_0 0x010000d4
2882
+ #else
2883
+ #define MOVZ_X8_8B 0xd2801168
2884
+ #define SVC_0 0xd4000001
2885
+ #endif
2886
+
2775
2887
  template <typename A, typename R>
2776
2888
  bool UnwindCursor<A, R>::setInfoForSigReturn(Registers_arm64 &) {
2777
2889
  // Look for the sigreturn trampoline. The trampoline's body is two
@@ -2796,7 +2908,7 @@ bool UnwindCursor<A, R>::setInfoForSigReturn(Registers_arm64 &) {
2796
2908
  return false;
2797
2909
  auto *instructions = reinterpret_cast<const uint32_t *>(pc);
2798
2910
  // Look for instructions: mov x8, #0x8b; svc #0x0
2799
- if (instructions[0] != 0xd2801168 || instructions[1] != 0xd4000001)
2911
+ if (instructions[0] != MOVZ_X8_8B || instructions[1] != SVC_0)
2800
2912
  return false;
2801
2913
 
2802
2914
  _info = {};
@@ -3188,16 +3300,22 @@ template <typename A, typename R> int UnwindCursor<A, R>::step(bool stage2) {
3188
3300
  template <typename A, typename R>
3189
3301
  void UnwindCursor<A, R>::getInfo(unw_proc_info_t *info) {
3190
3302
  if (_unwindInfoMissing)
3191
- memset(info, 0, sizeof(*info));
3303
+ memset(static_cast<void *>(info), 0, sizeof(*info));
3192
3304
  else
3193
3305
  *info = _info;
3194
3306
  }
3195
3307
 
3196
3308
  template <typename A, typename R>
3197
3309
  bool UnwindCursor<A, R>::getFunctionName(char *buf, size_t bufLen,
3198
- unw_word_t *offset) {
3199
- return _addressSpace.findFunctionName((pint_t)this->getReg(UNW_REG_IP),
3200
- buf, bufLen, offset);
3310
+ unw_word_t *offset) {
3311
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
3312
+ typename R::reg_t rawPC = this->getReg(UNW_REG_IP);
3313
+ typename R::link_reg_t pc;
3314
+ _registers.loadAndAuthenticateLinkRegister(rawPC, &pc);
3315
+ #else
3316
+ typename R::link_reg_t pc = this->getReg(UNW_REG_IP);
3317
+ #endif
3318
+ return _addressSpace.template findFunctionName<R>(pc, buf, bufLen, offset);
3201
3319
  }
3202
3320
 
3203
3321
  #if defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN)
@@ -48,16 +48,15 @@
48
48
  // avoided when invoking the `jumpto()` function. To do this, we use inline
49
49
  // assemblies to "goto" the `jumpto()` for these architectures.
50
50
  #if !defined(_LIBUNWIND_USE_CET) && !defined(_LIBUNWIND_USE_GCS)
51
- #define __unw_phase2_resume(cursor, fn) \
51
+ #define __unw_phase2_resume(cursor, payload) \
52
52
  do { \
53
- (void)fn; \
54
- __unw_resume((cursor)); \
53
+ __unw_resume_with_frames_walked((cursor), (payload)); \
55
54
  } while (0)
56
55
  #elif defined(_LIBUNWIND_TARGET_I386)
57
56
  #define __shstk_step_size (4)
58
- #define __unw_phase2_resume(cursor, fn) \
57
+ #define __unw_phase2_resume(cursor, payload) \
59
58
  do { \
60
- _LIBUNWIND_POP_SHSTK_SSP((fn)); \
59
+ _LIBUNWIND_POP_SHSTK_SSP((payload)); \
61
60
  void *shstkRegContext = __libunwind_shstk_get_registers((cursor)); \
62
61
  void *shstkJumpAddress = __libunwind_shstk_get_jump_target(); \
63
62
  __asm__ volatile("push %%edi\n\t" \
@@ -67,9 +66,9 @@
67
66
  } while (0)
68
67
  #elif defined(_LIBUNWIND_TARGET_X86_64)
69
68
  #define __shstk_step_size (8)
70
- #define __unw_phase2_resume(cursor, fn) \
69
+ #define __unw_phase2_resume(cursor, payload) \
71
70
  do { \
72
- _LIBUNWIND_POP_SHSTK_SSP((fn)); \
71
+ _LIBUNWIND_POP_SHSTK_SSP((payload)); \
73
72
  void *shstkRegContext = __libunwind_shstk_get_registers((cursor)); \
74
73
  void *shstkJumpAddress = __libunwind_shstk_get_jump_target(); \
75
74
  __asm__ volatile("jmpq *%%rdx\n\t" ::"D"(shstkRegContext), \
@@ -77,19 +76,37 @@
77
76
  } while (0)
78
77
  #elif defined(_LIBUNWIND_TARGET_AARCH64)
79
78
  #define __shstk_step_size (8)
80
- #define __unw_phase2_resume(cursor, fn) \
79
+ #define __unw_phase2_resume(cursor, payload) \
81
80
  do { \
82
- _LIBUNWIND_POP_SHSTK_SSP((fn)); \
81
+ _LIBUNWIND_POP_SHSTK_SSP((payload)); \
83
82
  void *shstkRegContext = __libunwind_shstk_get_registers((cursor)); \
84
83
  void *shstkJumpAddress = __libunwind_shstk_get_jump_target(); \
85
84
  __asm__ volatile("mov x0, %0\n\t" \
85
+ "mov x1, #0\n\t" \
86
86
  "br %1\n\t" \
87
87
  : \
88
88
  : "r"(shstkRegContext), "r"(shstkJumpAddress) \
89
- : "x0"); \
89
+ : "x0", "x1"); \
90
90
  } while (0)
91
91
  #endif
92
92
 
93
+ // We need this helper function as the semantics of casting between integers and
94
+ // function pointers mean that we end up with a function pointer without the
95
+ // correct signature. Instead we assign to an integer with a matching schema,
96
+ // and then memmove the result into a variable of the correct type. This memmove
97
+ // is possible as `_Unwind_Personality_Fn` is a standard function pointer, and
98
+ // as such is not address diversified.
99
+ static _Unwind_Personality_Fn get_handler_function(unw_proc_info_t *frameInfo) {
100
+ uintptr_t __unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer,
101
+ 0,
102
+ ptrauth_function_pointer_type_discriminator(_Unwind_Personality_Fn))
103
+ reauthenticatedIntegerHandler = frameInfo->handler;
104
+ _Unwind_Personality_Fn handler;
105
+ memmove(&handler, (void *)&reauthenticatedIntegerHandler,
106
+ sizeof(_Unwind_Personality_Fn));
107
+ return handler;
108
+ }
109
+
93
110
  static _Unwind_Reason_Code
94
111
  unwind_phase1(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) {
95
112
  __unw_init_local(cursor, uc);
@@ -147,8 +164,7 @@ unwind_phase1(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *except
147
164
  // If there is a personality routine, ask it if it will want to stop at
148
165
  // this frame.
149
166
  if (frameInfo.handler != 0) {
150
- _Unwind_Personality_Fn p =
151
- (_Unwind_Personality_Fn)(uintptr_t)(frameInfo.handler);
167
+ _Unwind_Personality_Fn p = get_handler_function(&frameInfo);
152
168
  _LIBUNWIND_TRACE_UNWINDING(
153
169
  "unwind_phase1(ex_obj=%p): calling personality function %p",
154
170
  (void *)exception_object, (void *)(uintptr_t)p);
@@ -184,11 +200,12 @@ unwind_phase1(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *except
184
200
  }
185
201
  return _URC_NO_REASON;
186
202
  }
187
- extern int __unw_step_stage2(unw_cursor_t *);
188
203
 
189
204
  #if defined(_LIBUNWIND_USE_GCS)
190
205
  // Enable the GCS target feature to permit gcspop instructions to be used.
191
206
  __attribute__((target("+gcs")))
207
+ #else
208
+ _LIBUNWIND_TRACE_NO_INLINE
192
209
  #endif
193
210
  static _Unwind_Reason_Code
194
211
  unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor,
@@ -276,8 +293,7 @@ unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor,
276
293
  ++framesWalked;
277
294
  // If there is a personality routine, tell it we are unwinding.
278
295
  if (frameInfo.handler != 0) {
279
- _Unwind_Personality_Fn p =
280
- (_Unwind_Personality_Fn)(uintptr_t)(frameInfo.handler);
296
+ _Unwind_Personality_Fn p = get_handler_function(&frameInfo);
281
297
  _Unwind_Action action = _UA_CLEANUP_PHASE;
282
298
  if (sp == exception_object->private_2) {
283
299
  // Tell personality this was the frame it marked in phase 1.
@@ -334,6 +350,8 @@ unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor,
334
350
  #if defined(_LIBUNWIND_USE_GCS)
335
351
  // Enable the GCS target feature to permit gcspop instructions to be used.
336
352
  __attribute__((target("+gcs")))
353
+ #else
354
+ _LIBUNWIND_TRACE_NO_INLINE
337
355
  #endif
338
356
  static _Unwind_Reason_Code
339
357
  unwind_phase2_forced(unw_context_t *uc, unw_cursor_t *cursor,
@@ -394,8 +412,7 @@ unwind_phase2_forced(unw_context_t *uc, unw_cursor_t *cursor,
394
412
  ++framesWalked;
395
413
  // If there is a personality routine, tell it we are unwinding.
396
414
  if (frameInfo.handler != 0) {
397
- _Unwind_Personality_Fn p =
398
- (_Unwind_Personality_Fn)(intptr_t)(frameInfo.handler);
415
+ _Unwind_Personality_Fn p = get_handler_function(&frameInfo);
399
416
  _LIBUNWIND_TRACE_UNWINDING(
400
417
  "unwind_phase2_forced(ex_obj=%p): calling personality function %p",
401
418
  (void *)exception_object, (void *)(uintptr_t)p);
@@ -597,6 +614,18 @@ _LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) {
597
614
  unw_cursor_t *cursor = (unw_cursor_t *)context;
598
615
  unw_word_t result;
599
616
  __unw_get_reg(cursor, UNW_REG_IP, &result);
617
+
618
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
619
+ // If we are in an arm64e frame, then the PC should have been signed with the
620
+ // sp
621
+ {
622
+ unw_word_t sp;
623
+ __unw_get_reg(cursor, UNW_REG_SP, &sp);
624
+ result = (unw_word_t)ptrauth_auth_data((void *)result,
625
+ ptrauth_key_return_address, sp);
626
+ }
627
+ #endif
628
+
600
629
  _LIBUNWIND_TRACE_API("_Unwind_GetIP(context=%p) => 0x%" PRIxPTR,
601
630
  (void *)context, result);
602
631
  return (uintptr_t)result;