@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
@@ -23,6 +23,10 @@
23
23
 
24
24
  #include "config.h"
25
25
 
26
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
27
+ #include <ptrauth.h>
28
+ #endif
29
+
26
30
  namespace libunwind {
27
31
 
28
32
  /// CFI_Parser does basic parsing of a CFI (Call Frame Information) records.
@@ -33,6 +37,7 @@ template <typename A>
33
37
  class CFI_Parser {
34
38
  public:
35
39
  typedef typename A::pint_t pint_t;
40
+ typedef pint_t __ptrauth_unwind_cie_info_personality personality_t;
36
41
 
37
42
  /// Information encoded in a CIE (Common Information Entry)
38
43
  struct CIE_Info {
@@ -43,7 +48,7 @@ public:
43
48
  uint8_t lsdaEncoding;
44
49
  uint8_t personalityEncoding;
45
50
  uint8_t personalityOffsetInCIE;
46
- pint_t personality;
51
+ personality_t personality;
47
52
  uint32_t codeAlignFactor;
48
53
  int dataAlignFactor;
49
54
  bool isSignalFrame;
@@ -155,14 +160,17 @@ public:
155
160
  }
156
161
  };
157
162
 
158
- static bool findFDE(A &addressSpace, pint_t pc, pint_t ehSectionStart,
159
- size_t sectionLength, pint_t fdeHint, FDE_Info *fdeInfo,
160
- CIE_Info *cieInfo);
163
+ template <typename R>
164
+ static bool findFDE(A &addressSpace, typename R::link_hardened_reg_arg_t pc,
165
+ pint_t ehSectionStart, size_t sectionLength,
166
+ pint_t fdeHint, FDE_Info *fdeInfo, CIE_Info *cieInfo);
161
167
  static const char *decodeFDE(A &addressSpace, pint_t fdeStart,
162
168
  FDE_Info *fdeInfo, CIE_Info *cieInfo,
163
169
  bool useCIEInfo = false);
170
+ template <typename R>
164
171
  static bool parseFDEInstructions(A &addressSpace, const FDE_Info &fdeInfo,
165
- const CIE_Info &cieInfo, pint_t upToPC,
172
+ const CIE_Info &cieInfo,
173
+ typename R::link_hardened_reg_arg_t upToPC,
166
174
  int arch, PrologInfo *results);
167
175
 
168
176
  static const char *parseCIE(A &addressSpace, pint_t cie, CIE_Info *cieInfo);
@@ -234,9 +242,12 @@ const char *CFI_Parser<A>::decodeFDE(A &addressSpace, pint_t fdeStart,
234
242
 
235
243
  /// Scan an eh_frame section to find an FDE for a pc
236
244
  template <typename A>
237
- bool CFI_Parser<A>::findFDE(A &addressSpace, pint_t pc, pint_t ehSectionStart,
238
- size_t sectionLength, pint_t fdeHint,
239
- FDE_Info *fdeInfo, CIE_Info *cieInfo) {
245
+ template <typename R>
246
+ bool CFI_Parser<A>::findFDE(A &addressSpace,
247
+ typename R::link_hardened_reg_arg_t pc,
248
+ pint_t ehSectionStart, size_t sectionLength,
249
+ pint_t fdeHint, FDE_Info *fdeInfo,
250
+ CIE_Info *cieInfo) {
240
251
  //fprintf(stderr, "findFDE(0x%llX)\n", (long long)pc);
241
252
  pint_t p = (fdeHint != 0) ? fdeHint : ehSectionStart;
242
253
  const pint_t ehSectionEnd = (sectionLength == SIZE_MAX)
@@ -273,7 +284,7 @@ bool CFI_Parser<A>::findFDE(A &addressSpace, pint_t pc, pint_t ehSectionStart,
273
284
  pint_t pcRange = addressSpace.getEncodedP(
274
285
  p, nextCFI, cieInfo->pointerEncoding & 0x0F);
275
286
  // Test if pc is within the function this FDE covers.
276
- if ((pcStart < pc) && (pc <= pcStart + pcRange)) {
287
+ if ((pcStart <= pc) && (pc < pcStart + pcRange)) {
277
288
  // parse rest of info
278
289
  fdeInfo->lsda = 0;
279
290
  // check for augmentation length
@@ -369,6 +380,7 @@ const char *CFI_Parser<A>::parseCIE(A &addressSpace, pint_t cie,
369
380
  cieInfo->returnAddressRegister = (uint8_t)raReg;
370
381
  // parse augmentation data based on augmentation string
371
382
  const char *result = NULL;
383
+ pint_t resultAddr = 0;
372
384
  if (addressSpace.get8(strStart) == 'z') {
373
385
  // parse augmentation data length
374
386
  addressSpace.getULEB128(p, cieContentEnd);
@@ -377,13 +389,41 @@ const char *CFI_Parser<A>::parseCIE(A &addressSpace, pint_t cie,
377
389
  case 'z':
378
390
  cieInfo->fdesHaveAugmentationData = true;
379
391
  break;
380
- case 'P':
392
+ case 'P': {
381
393
  cieInfo->personalityEncoding = addressSpace.get8(p);
382
394
  ++p;
383
395
  cieInfo->personalityOffsetInCIE = (uint8_t)(p - cie);
384
- cieInfo->personality = addressSpace
385
- .getEncodedP(p, cieContentEnd, cieInfo->personalityEncoding);
396
+ pint_t personality = addressSpace.getEncodedP(
397
+ p, cieContentEnd, cieInfo->personalityEncoding,
398
+ /*datarelBase=*/0, &resultAddr);
399
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
400
+ if (personality) {
401
+ // The GOT for the personality function was signed address
402
+ // authenticated. Manually re-sign with the CIE_Info::personality
403
+ // schema. If we could guarantee the encoding of the personality we
404
+ // could avoid this by simply giving resultAddr the correct ptrauth
405
+ // schema and performing an assignment.
406
+ #if defined(__arm64e__)
407
+ const auto oldDiscriminator = resultAddr;
408
+ #else
409
+ const auto oldDiscriminator = ptrauth_blend_discriminator(
410
+ (void *)resultAddr, __ptrauth_unwind_pauthtest_personality_disc);
411
+ #endif
412
+ const auto discriminator = ptrauth_blend_discriminator(
413
+ &cieInfo->personality,
414
+ __ptrauth_unwind_cie_info_personality_disc);
415
+ void *signedPtr = ptrauth_auth_and_resign(
416
+ (void *)personality, ptrauth_key_function_pointer,
417
+ oldDiscriminator, ptrauth_key_function_pointer, discriminator);
418
+ personality = (pint_t)signedPtr;
419
+ }
420
+ #endif
421
+ // We use memmove to set the CIE personality as we have already
422
+ // re-signed the pointer to the correct schema.
423
+ memmove((void *)&cieInfo->personality, (void *)&personality,
424
+ sizeof(personality));
386
425
  break;
426
+ }
387
427
  case 'L':
388
428
  cieInfo->lsdaEncoding = addressSpace.get8(p);
389
429
  ++p;
@@ -417,10 +457,10 @@ const char *CFI_Parser<A>::parseCIE(A &addressSpace, pint_t cie,
417
457
 
418
458
  /// "run" the DWARF instructions and create the abstract PrologInfo for an FDE
419
459
  template <typename A>
420
- bool CFI_Parser<A>::parseFDEInstructions(A &addressSpace,
421
- const FDE_Info &fdeInfo,
422
- const CIE_Info &cieInfo, pint_t upToPC,
423
- int arch, PrologInfo *results) {
460
+ template <typename R>
461
+ bool CFI_Parser<A>::parseFDEInstructions(
462
+ A &addressSpace, const FDE_Info &fdeInfo, const CIE_Info &cieInfo,
463
+ typename R::link_hardened_reg_arg_t upToPC, int arch, PrologInfo *results) {
424
464
  // Alloca is used for the allocation of the rememberStack entries. It removes
425
465
  // the dependency on new/malloc but the below for loop can not be refactored
426
466
  // into functions. Entry could be saved during the processing of a CIE and
@@ -433,11 +473,12 @@ bool CFI_Parser<A>::parseFDEInstructions(A &addressSpace,
433
473
  pint_t pcoffset;
434
474
  };
435
475
 
476
+ // zig patch: https://github.com/llvm/llvm-project/issues/194228
436
477
  ParseInfo parseInfoArray[] = {
437
478
  {cieInfo.cieInstructions, cieInfo.cieStart + cieInfo.cieLength,
438
479
  (pint_t)(-1)},
439
480
  {fdeInfo.fdeInstructions, fdeInfo.fdeStart + fdeInfo.fdeLength,
440
- upToPC - fdeInfo.pcStart}};
481
+ static_cast<pint_t>(upToPC) - fdeInfo.pcStart}};
441
482
 
442
483
  for (const auto &info : parseInfoArray) {
443
484
  pint_t p = info.instructions;
@@ -808,12 +849,10 @@ bool CFI_Parser<A>::parseFDEInstructions(A &addressSpace,
808
849
  results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x3;
809
850
  results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
810
851
  initialState);
811
- // When calculating the value of the PC, it is assumed that the CFI
812
- // instruction is placed before the signing instruction, however it is
813
- // placed after. Because of this, we need to take into account the CFI
814
- // instruction is one instruction call later than expected, and reduce
815
- // the PC value by 4 bytes to compensate.
816
- results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset - 0x4;
852
+ // When using Feat_PAuthLR, the PC value needs to be captured so that
853
+ // during unwinding, the correct PC value is used for re-authentication.
854
+ // It is assumed that the CFI is placed before the signing instruction.
855
+ results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset;
817
856
  _LIBUNWIND_TRACE_DWARF(
818
857
  "DW_CFA_AARCH64_negate_ra_state_with_pc(pc=0x%" PRIx64 ")\n",
819
858
  static_cast<uint64_t>(results->ptrAuthDiversifier));
@@ -37,8 +37,9 @@ public:
37
37
 
38
38
  static bool decodeEHHdr(A &addressSpace, pint_t ehHdrStart, pint_t ehHdrEnd,
39
39
  EHHeaderInfo &ehHdrInfo);
40
- static bool findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart,
41
- uint32_t sectionLength,
40
+ template <typename R>
41
+ static bool findFDE(A &addressSpace, typename R::link_hardened_reg_arg_t pc,
42
+ pint_t ehHdrStart, uint32_t sectionLength,
42
43
  typename CFI_Parser<A>::FDE_Info *fdeInfo,
43
44
  typename CFI_Parser<A>::CIE_Info *cieInfo);
44
45
 
@@ -112,8 +113,10 @@ bool EHHeaderParser<A>::decodeTableEntry(
112
113
  }
113
114
 
114
115
  template <typename A>
115
- bool EHHeaderParser<A>::findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart,
116
- uint32_t sectionLength,
116
+ template <typename R>
117
+ bool EHHeaderParser<A>::findFDE(A &addressSpace,
118
+ typename R::link_hardened_reg_arg_t pc,
119
+ pint_t ehHdrStart, uint32_t sectionLength,
117
120
  typename CFI_Parser<A>::FDE_Info *fdeInfo,
118
121
  typename CFI_Parser<A>::CIE_Info *cieInfo) {
119
122
  pint_t ehHdrEnd = ehHdrStart + sectionLength;
@@ -17,8 +17,13 @@
17
17
 
18
18
  #include "config.h"
19
19
  #include "libunwind.h"
20
+ #include "libunwind_ext.h"
20
21
  #include "shadow_stack_unwind.h"
21
22
 
23
+ #if defined(_LIBUNWIND_HAVE_GETAUXVAL) || defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
24
+ #include <sys/auxv.h>
25
+ #endif
26
+
22
27
  namespace libunwind {
23
28
 
24
29
  // For emulating 128-bit registers
@@ -60,6 +65,10 @@ public:
60
65
  Registers_x86();
61
66
  Registers_x86(const void *registers);
62
67
 
68
+ typedef uint32_t reg_t;
69
+ typedef uint32_t link_reg_t;
70
+ typedef const link_reg_t &link_hardened_reg_arg_t;
71
+
63
72
  bool validRegister(int num) const;
64
73
  uint32_t getRegister(int num) const;
65
74
  void setRegister(int num, uint32_t value);
@@ -278,6 +287,10 @@ public:
278
287
  Registers_x86_64();
279
288
  Registers_x86_64(const void *registers);
280
289
 
290
+ typedef uint64_t reg_t;
291
+ typedef uint64_t link_reg_t;
292
+ typedef const link_reg_t &link_hardened_reg_arg_t;
293
+
281
294
  bool validRegister(int num) const;
282
295
  uint64_t getRegister(int num) const;
283
296
  void setRegister(int num, uint64_t value);
@@ -597,6 +610,10 @@ public:
597
610
  Registers_ppc();
598
611
  Registers_ppc(const void *registers);
599
612
 
613
+ typedef uint32_t reg_t;
614
+ typedef uint32_t link_reg_t;
615
+ typedef const link_reg_t &link_hardened_reg_arg_t;
616
+
600
617
  bool validRegister(int num) const;
601
618
  uint32_t getRegister(int num) const;
602
619
  void setRegister(int num, uint32_t value);
@@ -1169,6 +1186,10 @@ public:
1169
1186
  Registers_ppc64();
1170
1187
  Registers_ppc64(const void *registers);
1171
1188
 
1189
+ typedef uint64_t reg_t;
1190
+ typedef uint64_t link_reg_t;
1191
+ typedef const link_reg_t &link_hardened_reg_arg_t;
1192
+
1172
1193
  bool validRegister(int num) const;
1173
1194
  uint64_t getRegister(int num) const;
1174
1195
  void setRegister(int num, uint64_t value);
@@ -1814,7 +1835,9 @@ inline const char *Registers_ppc64::getRegisterName(int regNum) {
1814
1835
  /// Registers_arm64 holds the register state of a thread in a 64-bit arm
1815
1836
  /// process.
1816
1837
  class _LIBUNWIND_HIDDEN Registers_arm64;
1817
- extern "C" void __libunwind_Registers_arm64_jumpto(Registers_arm64 *);
1838
+ extern "C" int64_t __libunwind_Registers_arm64_za_disable();
1839
+ extern "C" void __libunwind_Registers_arm64_jumpto(Registers_arm64 *,
1840
+ unsigned walkedFrames);
1818
1841
 
1819
1842
  #if defined(_LIBUNWIND_USE_GCS)
1820
1843
  extern "C" void *__libunwind_shstk_get_jump_target() {
@@ -1824,8 +1847,21 @@ extern "C" void *__libunwind_shstk_get_jump_target() {
1824
1847
 
1825
1848
  class _LIBUNWIND_HIDDEN Registers_arm64 {
1826
1849
  public:
1827
- Registers_arm64();
1850
+ Registers_arm64() = default;
1828
1851
  Registers_arm64(const void *registers);
1852
+ Registers_arm64(const Registers_arm64 &);
1853
+ Registers_arm64 &operator=(const Registers_arm64 &);
1854
+
1855
+ typedef uint64_t reg_t;
1856
+ typedef uint64_t __ptrauth_unwind_registers_arm64_link_reg link_reg_t;
1857
+
1858
+ // Use `link_hardened_reg_arg_t` to pass values of `link_reg_t` type as
1859
+ // function arguments. We need to use a const l-value reference to keep
1860
+ // signature of `__ptrauth`-qualified values of `link_reg_t` type on AArch64
1861
+ // PAuth-enabled ABI intact. Passing the raw pointer by value would cause
1862
+ // authentication on the caller side and make the pointer prone to
1863
+ // substitution if spilled to the stack in the callee.
1864
+ typedef const link_reg_t &link_hardened_reg_arg_t;
1829
1865
 
1830
1866
  bool validRegister(int num) const;
1831
1867
  uint64_t getRegister(int num) const;
@@ -1837,7 +1873,14 @@ public:
1837
1873
  v128 getVectorRegister(int num) const;
1838
1874
  void setVectorRegister(int num, v128 value);
1839
1875
  static const char *getRegisterName(int num);
1840
- void jumpto() { __libunwind_Registers_arm64_jumpto(this); }
1876
+ void jumpto(unsigned walkedFrames = 0) {
1877
+ zaDisable();
1878
+ __libunwind_Registers_arm64_jumpto(this, walkedFrames);
1879
+ }
1880
+ #ifdef _LIBUNWIND_TRACE_RET_INJECT
1881
+ _LIBUNWIND_TRACE_NO_INLINE
1882
+ void returnto(unsigned walkedFrames) { jumpto(walkedFrames); }
1883
+ #endif
1841
1884
  static constexpr int lastDwarfRegNum() {
1842
1885
  return _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64;
1843
1886
  }
@@ -1845,27 +1888,104 @@ public:
1845
1888
 
1846
1889
  uint64_t getSP() const { return _registers.__sp; }
1847
1890
  void setSP(uint64_t value) { _registers.__sp = value; }
1848
- uint64_t getIP() const { return _registers.__pc; }
1849
- void setIP(uint64_t value) { _registers.__pc = value; }
1850
- uint64_t getFP() const { return _registers.__fp; }
1851
- void setFP(uint64_t value) { _registers.__fp = value; }
1891
+ uint64_t getIP() const {
1892
+ uint64_t value = _registers.__pc;
1893
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
1894
+ // Note the value of the PC was signed to its address in the register state
1895
+ // but everyone else expects it to be sign by the SP, so convert on return.
1896
+ value = (uint64_t)ptrauth_auth_and_resign((void *)_registers.__pc,
1897
+ ptrauth_key_return_address,
1898
+ &_registers.__pc,
1899
+ ptrauth_key_return_address,
1900
+ getSP());
1901
+ #endif
1902
+ return value;
1903
+ }
1904
+ void setIP(uint64_t value) {
1905
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
1906
+ // Note the value which was set should have been signed with the SP.
1907
+ // We then resign with the slot we are being stored in to so that both SP
1908
+ // and LR can't be spoofed at the same time.
1909
+ value = (uint64_t)ptrauth_auth_and_resign((void *)value,
1910
+ ptrauth_key_return_address,
1911
+ getSP(),
1912
+ ptrauth_key_return_address,
1913
+ &_registers.__pc);
1914
+ #endif
1915
+ _registers.__pc = value;
1916
+ }
1917
+ uint64_t getFP() const { return _registers.__fp; }
1918
+ void setFP(uint64_t value) { _registers.__fp = value; }
1919
+
1920
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
1921
+ void
1922
+ loadAndAuthenticateLinkRegister(reg_t inplaceAuthedLinkRegister,
1923
+ link_reg_t *referenceAuthedLinkRegister) {
1924
+ // If we are in an arm64/arm64e frame, then the PC should have been signed
1925
+ // with the SP
1926
+ *referenceAuthedLinkRegister =
1927
+ (uint64_t)ptrauth_auth_data((void *)inplaceAuthedLinkRegister,
1928
+ ptrauth_key_return_address,
1929
+ _registers.__sp);
1930
+ }
1931
+ #endif
1852
1932
 
1853
1933
  private:
1934
+ uint64_t lazyGetVG() const;
1935
+
1936
+ void zaDisable() const {
1937
+ if (!_misc_registers.__has_sme)
1938
+ return;
1939
+ if (__libunwind_Registers_arm64_za_disable() != 0)
1940
+ _LIBUNWIND_ABORT("SME ZA disable failed");
1941
+ }
1942
+
1943
+ #if defined(_LIBUNWIND_HAVE_GETAUXVAL)
1944
+ static bool checkHasSME() {
1945
+ constexpr int hwcap2_sme = (1 << 23);
1946
+ unsigned long hwcap2 = getauxval(AT_HWCAP2);
1947
+ return (hwcap2 & hwcap2_sme) != 0;
1948
+ }
1949
+ #elif defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
1950
+ static bool checkHasSME() {
1951
+ constexpr int hwcap2_sme = (1 << 23);
1952
+ unsigned long hwcap2 = 0;
1953
+ elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2));
1954
+ return (hwcap2 & hwcap2_sme) != 0;
1955
+ }
1956
+ #else
1957
+ static bool checkHasSME() {
1958
+ // TODO: Support other platforms.
1959
+ return false;
1960
+ }
1961
+ #endif
1962
+
1854
1963
  struct GPRs {
1855
- uint64_t __x[29]; // x0-x28
1856
- uint64_t __fp; // Frame pointer x29
1857
- uint64_t __lr; // Link register x30
1858
- uint64_t __sp; // Stack pointer x31
1859
- uint64_t __pc; // Program counter
1860
- uint64_t __ra_sign_state; // RA sign state register
1964
+ uint64_t __x[29] = {}; // x0-x28
1965
+ uint64_t __fp = 0; // Frame pointer x29
1966
+ uint64_t __lr = 0; // Link register x30
1967
+ uint64_t __sp = 0; // Stack pointer x31
1968
+ uint64_t __pc = 0; // Program counter
1969
+ uint64_t __ra_sign_state = 0; // RA sign state register
1970
+ };
1971
+
1972
+ struct Misc {
1973
+ mutable uint32_t __vg = 0; // Vector Granule
1974
+ bool __has_sme = checkHasSME();
1861
1975
  };
1862
1976
 
1863
- GPRs _registers;
1864
- double _vectorHalfRegisters[32];
1977
+ GPRs _registers = {};
1865
1978
  // Currently only the lower double in 128-bit vectore registers
1866
1979
  // is perserved during unwinding. We could define new register
1867
1980
  // numbers (> 96) which mean whole vector registers, then this
1868
1981
  // struct would need to change to contain whole vector registers.
1982
+ double _vectorHalfRegisters[32] = {};
1983
+
1984
+ // Miscellaneous/virtual registers. These are stored below the GPRs and FPRs
1985
+ // as they do not correspond to physical registers, so do not need to be
1986
+ // saved/restored in UnwindRegistersRestore.S and UnwindRegistersSave.S, and
1987
+ // we don't want to modify the existing offsets for GPRs and FPRs.
1988
+ Misc _misc_registers;
1869
1989
  };
1870
1990
 
1871
1991
  inline Registers_arm64::Registers_arm64(const void *registers) {
@@ -1877,11 +1997,31 @@ inline Registers_arm64::Registers_arm64(const void *registers) {
1877
1997
  memcpy(_vectorHalfRegisters,
1878
1998
  static_cast<const uint8_t *>(registers) + sizeof(GPRs),
1879
1999
  sizeof(_vectorHalfRegisters));
2000
+ _misc_registers.__vg = 0;
2001
+
2002
+ #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
2003
+ // We have to do some pointer authentication fixups after this copy,
2004
+ // and as part of that we need to load the source pc without
2005
+ // authenticating so that we maintain the signature for the resigning
2006
+ // performed by setIP.
2007
+ uint64_t pcRegister = 0;
2008
+ memmove(&pcRegister, ((uint8_t *)&_registers) + offsetof(GPRs, __pc),
2009
+ sizeof(pcRegister));
2010
+ setIP(pcRegister);
2011
+ #endif
1880
2012
  }
1881
2013
 
1882
- inline Registers_arm64::Registers_arm64() {
1883
- memset(&_registers, 0, sizeof(_registers));
1884
- memset(&_vectorHalfRegisters, 0, sizeof(_vectorHalfRegisters));
2014
+ inline Registers_arm64::Registers_arm64(const Registers_arm64 &other) {
2015
+ *this = other;
2016
+ }
2017
+
2018
+ inline Registers_arm64 &
2019
+ Registers_arm64::operator=(const Registers_arm64 &other) {
2020
+ memmove(static_cast<void *>(this), &other, sizeof(*this));
2021
+ // We perform this step to ensure that we correctly authenticate and re-sign
2022
+ // the pc after the bitwise copy.
2023
+ setIP(other.getIP());
2024
+ return *this;
1885
2025
  }
1886
2026
 
1887
2027
  inline bool Registers_arm64::validRegister(int regNum) const {
@@ -1895,22 +2035,40 @@ inline bool Registers_arm64::validRegister(int regNum) const {
1895
2035
  return false;
1896
2036
  if (regNum == UNW_AARCH64_RA_SIGN_STATE)
1897
2037
  return true;
2038
+ if (regNum == UNW_AARCH64_VG)
2039
+ return true;
1898
2040
  if ((regNum > 32) && (regNum < 64))
1899
2041
  return false;
1900
2042
  return true;
1901
2043
  }
1902
2044
 
2045
+ inline uint64_t Registers_arm64::lazyGetVG() const {
2046
+ if (!_misc_registers.__vg) {
2047
+ #if defined(__aarch64__)
2048
+ register uint64_t vg asm("x0");
2049
+ asm(".inst 0x04e0e3e0" // CNTD x0
2050
+ : "=r"(vg));
2051
+ _misc_registers.__vg = vg;
2052
+ #else
2053
+ _LIBUNWIND_ABORT("arm64 VG undefined");
2054
+ #endif
2055
+ }
2056
+ return _misc_registers.__vg;
2057
+ }
2058
+
1903
2059
  inline uint64_t Registers_arm64::getRegister(int regNum) const {
1904
2060
  if (regNum == UNW_REG_IP || regNum == UNW_AARCH64_PC)
1905
- return _registers.__pc;
2061
+ return getIP();
1906
2062
  if (regNum == UNW_REG_SP || regNum == UNW_AARCH64_SP)
1907
2063
  return _registers.__sp;
1908
2064
  if (regNum == UNW_AARCH64_RA_SIGN_STATE)
1909
2065
  return _registers.__ra_sign_state;
1910
2066
  if (regNum == UNW_AARCH64_FP)
1911
- return _registers.__fp;
2067
+ return getFP();
1912
2068
  if (regNum == UNW_AARCH64_LR)
1913
2069
  return _registers.__lr;
2070
+ if (regNum == UNW_AARCH64_VG)
2071
+ return lazyGetVG();
1914
2072
  if ((regNum >= 0) && (regNum < 29))
1915
2073
  return _registers.__x[regNum];
1916
2074
  _LIBUNWIND_ABORT("unsupported arm64 register");
@@ -1918,15 +2076,17 @@ inline uint64_t Registers_arm64::getRegister(int regNum) const {
1918
2076
 
1919
2077
  inline void Registers_arm64::setRegister(int regNum, uint64_t value) {
1920
2078
  if (regNum == UNW_REG_IP || regNum == UNW_AARCH64_PC)
1921
- _registers.__pc = value;
2079
+ setIP(value);
1922
2080
  else if (regNum == UNW_REG_SP || regNum == UNW_AARCH64_SP)
1923
2081
  _registers.__sp = value;
1924
2082
  else if (regNum == UNW_AARCH64_RA_SIGN_STATE)
1925
2083
  _registers.__ra_sign_state = value;
1926
2084
  else if (regNum == UNW_AARCH64_FP)
1927
- _registers.__fp = value;
2085
+ setFP(value);
1928
2086
  else if (regNum == UNW_AARCH64_LR)
1929
2087
  _registers.__lr = value;
2088
+ else if (regNum == UNW_AARCH64_VG)
2089
+ _misc_registers.__vg = value;
1930
2090
  else if ((regNum >= 0) && (regNum < 29))
1931
2091
  _registers.__x[regNum] = value;
1932
2092
  else
@@ -2116,6 +2276,10 @@ public:
2116
2276
  Registers_arm();
2117
2277
  Registers_arm(const void *registers);
2118
2278
 
2279
+ typedef uint32_t reg_t;
2280
+ typedef uint32_t link_reg_t;
2281
+ typedef const link_reg_t &link_hardened_reg_arg_t;
2282
+
2119
2283
  bool validRegister(int num) const;
2120
2284
  uint32_t getRegister(int num) const;
2121
2285
  void setRegister(int num, uint32_t value);
@@ -2621,6 +2785,10 @@ public:
2621
2785
  Registers_or1k();
2622
2786
  Registers_or1k(const void *registers);
2623
2787
 
2788
+ typedef uint32_t reg_t;
2789
+ typedef uint32_t link_reg_t;
2790
+ typedef const link_reg_t &link_hardened_reg_arg_t;
2791
+
2624
2792
  bool validRegister(int num) const;
2625
2793
  uint32_t getRegister(int num) const;
2626
2794
  void setRegister(int num, uint32_t value);
@@ -2820,6 +2988,10 @@ public:
2820
2988
  Registers_mips_o32();
2821
2989
  Registers_mips_o32(const void *registers);
2822
2990
 
2991
+ typedef uint32_t reg_t;
2992
+ typedef uint32_t link_reg_t;
2993
+ typedef const link_reg_t &link_hardened_reg_arg_t;
2994
+
2823
2995
  bool validRegister(int num) const;
2824
2996
  uint32_t getRegister(int num) const;
2825
2997
  void setRegister(int num, uint32_t value);
@@ -3155,6 +3327,10 @@ public:
3155
3327
  Registers_mips_newabi();
3156
3328
  Registers_mips_newabi(const void *registers);
3157
3329
 
3330
+ typedef uint64_t reg_t;
3331
+ typedef uint64_t link_reg_t;
3332
+ typedef const link_reg_t &link_hardened_reg_arg_t;
3333
+
3158
3334
  bool validRegister(int num) const;
3159
3335
  uint64_t getRegister(int num) const;
3160
3336
  void setRegister(int num, uint64_t value);
@@ -3458,6 +3634,10 @@ public:
3458
3634
  Registers_sparc();
3459
3635
  Registers_sparc(const void *registers);
3460
3636
 
3637
+ typedef uint32_t reg_t;
3638
+ typedef uint32_t link_reg_t;
3639
+ typedef const link_reg_t &link_hardened_reg_arg_t;
3640
+
3461
3641
  bool validRegister(int num) const;
3462
3642
  uint32_t getRegister(int num) const;
3463
3643
  void setRegister(int num, uint32_t value);
@@ -3644,6 +3824,10 @@ public:
3644
3824
  Registers_sparc64() = default;
3645
3825
  Registers_sparc64(const void *registers);
3646
3826
 
3827
+ typedef uint64_t reg_t;
3828
+ typedef uint64_t link_reg_t;
3829
+ typedef const link_reg_t &link_hardened_reg_arg_t;
3830
+
3647
3831
  bool validRegister(int num) const;
3648
3832
  uint64_t getRegister(int num) const;
3649
3833
  void setRegister(int num, uint64_t value);
@@ -3829,6 +4013,10 @@ public:
3829
4013
  Registers_hexagon();
3830
4014
  Registers_hexagon(const void *registers);
3831
4015
 
4016
+ typedef uint32_t reg_t;
4017
+ typedef uint32_t link_reg_t;
4018
+ typedef const link_reg_t &link_hardened_reg_arg_t;
4019
+
3832
4020
  bool validRegister(int num) const;
3833
4021
  uint32_t getRegister(int num) const;
3834
4022
  void setRegister(int num, uint32_t value);
@@ -4044,6 +4232,10 @@ public:
4044
4232
  Registers_riscv();
4045
4233
  Registers_riscv(const void *registers);
4046
4234
 
4235
+ typedef ::libunwind::reg_t reg_t;
4236
+ typedef ::libunwind::reg_t link_reg_t;
4237
+ typedef const link_reg_t &link_hardened_reg_arg_t;
4238
+
4047
4239
  bool validRegister(int num) const;
4048
4240
  reg_t getRegister(int num) const;
4049
4241
  void setRegister(int num, reg_t value);
@@ -4341,6 +4533,10 @@ public:
4341
4533
  Registers_ve();
4342
4534
  Registers_ve(const void *registers);
4343
4535
 
4536
+ typedef uint64_t reg_t;
4537
+ typedef uint64_t link_reg_t;
4538
+ typedef const link_reg_t &link_hardened_reg_arg_t;
4539
+
4344
4540
  bool validRegister(int num) const;
4345
4541
  uint64_t getRegister(int num) const;
4346
4542
  void setRegister(int num, uint64_t value);
@@ -4784,6 +4980,10 @@ public:
4784
4980
  Registers_s390x();
4785
4981
  Registers_s390x(const void *registers);
4786
4982
 
4983
+ typedef uint64_t reg_t;
4984
+ typedef uint64_t link_reg_t;
4985
+ typedef const link_reg_t &link_hardened_reg_arg_t;
4986
+
4787
4987
  bool validRegister(int num) const;
4788
4988
  uint64_t getRegister(int num) const;
4789
4989
  void setRegister(int num, uint64_t value);
@@ -5072,6 +5272,10 @@ public:
5072
5272
  Registers_loongarch();
5073
5273
  Registers_loongarch(const void *registers);
5074
5274
 
5275
+ typedef uint64_t reg_t;
5276
+ typedef uint64_t link_reg_t;
5277
+ typedef const link_reg_t &link_hardened_reg_arg_t;
5278
+
5075
5279
  bool validRegister(int num) const;
5076
5280
  uint64_t getRegister(int num) const;
5077
5281
  void setRegister(int num, uint64_t value);
@@ -163,7 +163,7 @@ _GCC_specific_handler(PEXCEPTION_RECORD ms_exc, PVOID frame, PCONTEXT ms_ctx,
163
163
  // If we were called by __libunwind_seh_personality(), indicate that
164
164
  // a handler was found; otherwise, initiate phase 2 by unwinding.
165
165
  if (ours && ms_exc->NumberParameters > 1)
166
- return 4 /* ExceptionExecuteHandler in mingw */;
166
+ return static_cast<EXCEPTION_DISPOSITION>(4);
167
167
  // This should never happen in phase 2.
168
168
  if (IS_UNWINDING(ms_exc->ExceptionFlags))
169
169
  _LIBUNWIND_ABORT("Personality indicated exception handler in phase 2!");
@@ -182,7 +182,7 @@ _GCC_specific_handler(PEXCEPTION_RECORD ms_exc, PVOID frame, PCONTEXT ms_ctx,
182
182
  // a handler was found; otherwise, it's time to initiate a collided
183
183
  // unwind to the target.
184
184
  if (ours && !IS_UNWINDING(ms_exc->ExceptionFlags) && ms_exc->NumberParameters > 1)
185
- return 4 /* ExceptionExecuteHandler in mingw */;
185
+ return static_cast<EXCEPTION_DISPOSITION>(4);
186
186
  // This should never happen in phase 1.
187
187
  if (!IS_UNWINDING(ms_exc->ExceptionFlags))
188
188
  _LIBUNWIND_ABORT("Personality installed context during phase 1!");
@@ -259,13 +259,12 @@ __libunwind_seh_personality(int version, _Unwind_Action state,
259
259
  (void *)disp_ctx->LanguageHandler, (void *)&ms_exc,
260
260
  (void *)disp_ctx->EstablisherFrame,
261
261
  (void *)disp_ctx->ContextRecord, (void *)disp_ctx);
262
- EXCEPTION_DISPOSITION ms_act = disp_ctx->LanguageHandler(&ms_exc,
263
- (PVOID)disp_ctx->EstablisherFrame,
264
- disp_ctx->ContextRecord,
265
- disp_ctx);
262
+ int ms_act = static_cast<int>(
263
+ disp_ctx->LanguageHandler(&ms_exc, (PVOID)disp_ctx->EstablisherFrame,
264
+ disp_ctx->ContextRecord, disp_ctx));
266
265
  _LIBUNWIND_TRACE_UNWINDING("__libunwind_seh_personality() LanguageHandler "
267
266
  "returned %d",
268
- (int)ms_act);
267
+ ms_act);
269
268
  switch (ms_act) {
270
269
  case ExceptionContinueExecution: return _URC_END_OF_STACK;
271
270
  case ExceptionContinueSearch: return _URC_CONTINUE_UNWIND;