@zigc/lib 0.17.0-dev.27 → 0.17.0-dev.292
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.
- package/c/fcntl.zig +6 -1
- package/c/inttypes.zig +0 -10
- package/c/math.zig +52 -112
- package/c/pthread.zig +57 -0
- package/c/search.zig +1 -27
- package/c/stdlib/drand48.zig +0 -57
- package/c/stdlib.zig +31 -121
- package/c/string.zig +20 -7
- package/c/strings.zig +0 -38
- package/c/unistd.zig +27 -26
- package/c/wchar.zig +10 -0
- package/c.zig +2 -2
- package/compiler/aro/aro/CodeGen.zig +7 -8
- package/compiler/aro/aro/Compilation.zig +17 -17
- package/compiler/aro/aro/Driver.zig +14 -13
- package/compiler/aro/aro/Parser.zig +20 -15
- package/compiler/aro/aro/Pragma.zig +3 -2
- package/compiler/aro/aro/Preprocessor.zig +9 -6
- package/compiler/aro/aro/pragmas/message.zig +3 -2
- package/compiler/aro/aro/text_literal.zig +3 -2
- package/compiler/aro/assembly_backend/x86_64.zig +4 -4
- package/compiler/build_runner.zig +2 -4
- package/compiler/reduce/Walk.zig +8 -13
- package/compiler/resinator/compile.zig +1 -1
- package/compiler/resinator/cvtres.zig +4 -4
- package/compiler/resinator/errors.zig +7 -7
- package/compiler/resinator/ico.zig +4 -4
- package/compiler/resinator/parse.zig +2 -2
- package/compiler/resinator/res.zig +1 -1
- package/compiler/std-docs.zig +1 -1
- package/compiler/test_runner.zig +1 -1
- package/compiler/translate-c/MacroTranslator.zig +1 -1
- package/compiler/translate-c/Translator.zig +6 -2
- package/compiler/translate-c/ast.zig +16 -23
- package/compiler/translate-c/main.zig +1 -1
- package/compiler_rt/addf3.zig +1 -1
- package/compiler_rt/arm.zig +3 -3
- package/compiler_rt/atomics.zig +1 -1
- package/compiler_rt/comparef.zig +3 -3
- package/compiler_rt/cos.zig +1 -3
- package/compiler_rt/count0bits.zig +1 -1
- package/compiler_rt/divdf3.zig +2 -2
- package/compiler_rt/divsf3.zig +1 -1
- package/compiler_rt/divtf3.zig +1 -1
- package/compiler_rt/divxf3.zig +1 -1
- package/compiler_rt/exp.zig +0 -2
- package/compiler_rt/exp2.zig +0 -2
- package/compiler_rt/extendf.zig +5 -5
- package/compiler_rt/fabs.zig +1 -3
- package/compiler_rt/float_from_int.zig +3 -4
- package/compiler_rt/fma.zig +0 -2
- package/compiler_rt/fmax.zig +1 -3
- package/compiler_rt/fmin.zig +1 -3
- package/compiler_rt/fmod.zig +2 -4
- package/compiler_rt/limb64.zig +3 -2
- package/compiler_rt/log.zig +0 -2
- package/compiler_rt/log10.zig +0 -2
- package/compiler_rt/log2.zig +0 -2
- package/compiler_rt/mulf3.zig +2 -2
- package/compiler_rt/rem_pio2l.zig +1 -1
- package/compiler_rt/round.zig +0 -2
- package/compiler_rt/sin.zig +1 -3
- package/compiler_rt/sincos.zig +1 -3
- package/compiler_rt/sqrt.zig +0 -2
- package/compiler_rt/ssp.zig +2 -2
- package/compiler_rt/tan.zig +1 -3
- package/compiler_rt/trunc.zig +0 -2
- package/compiler_rt/truncf.zig +3 -3
- package/compiler_rt/trunctfhf2.zig +3 -0
- package/compiler_rt.zig +5 -26
- package/docs/wasm/Walk.zig +1 -3
- package/docs/wasm/html_render.zig +1 -2
- package/docs/wasm/markdown/Parser.zig +16 -20
- package/fuzzer.zig +2 -0
- package/include/__clang_spirv_builtins.h +12 -12
- package/include/__float_float.h +176 -0
- package/include/__float_header_macro.h +12 -0
- package/include/__float_infinity_nan.h +20 -0
- package/include/amo.h +131 -0
- package/include/amxavx512intrin.h +215 -1
- package/include/amxintrin.h +0 -2
- package/include/arm_acle.h +37 -27
- package/include/arm_neon.h +218 -82
- package/include/arm_sme.h +8 -8
- package/include/arm_sve.h +4162 -3782
- package/include/avx10_2_512bf16intrin.h +19 -12
- package/include/avx10_2_512convertintrin.h +1 -1
- package/include/avx10_2_512niintrin.h +31 -31
- package/include/avx10_2_512satcvtdsintrin.h +1 -1
- package/include/avx10_2bf16intrin.h +54 -45
- package/include/avx10_2convertintrin.h +2 -2
- package/include/avx10_2copyintrin.h +1 -1
- package/include/avx10_2niintrin.h +14 -14
- package/include/avx10_2satcvtdsintrin.h +2 -2
- package/include/avx2intrin.h +275 -377
- package/include/avx512bf16intrin.h +25 -16
- package/include/avx512bitalgintrin.h +19 -30
- package/include/avx512bwintrin.h +386 -505
- package/include/avx512cdintrin.h +42 -55
- package/include/avx512dqintrin.h +132 -161
- package/include/avx512fintrin.h +1015 -1424
- package/include/avx512fp16intrin.h +112 -110
- package/include/avx512ifmaintrin.h +32 -34
- package/include/avx512ifmavlintrin.h +73 -46
- package/include/avx512vbmi2intrin.h +43 -32
- package/include/avx512vbmiintrin.h +19 -27
- package/include/avx512vbmivlintrin.h +35 -49
- package/include/avx512vlbf16intrin.h +32 -22
- package/include/avx512vlbitalgintrin.h +37 -53
- package/include/avx512vlbwintrin.h +470 -573
- package/include/avx512vlcdintrin.h +74 -102
- package/include/avx512vldqintrin.h +110 -127
- package/include/avx512vlfp16intrin.h +130 -111
- package/include/avx512vlintrin.h +945 -1299
- package/include/avx512vlvbmi2intrin.h +78 -63
- package/include/avx512vlvnniintrin.h +21 -18
- package/include/avx512vlvp2intersectintrin.h +2 -2
- package/include/avx512vnniintrin.h +10 -10
- package/include/avx512vp2intersectintrin.h +1 -2
- package/include/avx512vpopcntdqintrin.h +8 -10
- package/include/avx512vpopcntdqvlintrin.h +17 -15
- package/include/avxifmaintrin.h +16 -0
- package/include/avxintrin.h +165 -241
- package/include/avxvnniint16intrin.h +118 -99
- package/include/avxvnniint8intrin.h +56 -32
- package/include/avxvnniintrin.h +16 -8
- package/include/cpuid.h +101 -4
- package/include/emmintrin.h +168 -168
- package/include/f16cintrin.h +23 -9
- package/include/float.h +16 -155
- package/include/fma4intrin.h +98 -96
- package/include/fmaintrin.h +96 -66
- package/include/gfniintrin.h +21 -16
- package/include/hexagon_types.h +23 -20
- package/include/hvx_hexagon_protos.h +649 -860
- package/include/immintrin.h +0 -12
- package/include/intrin.h +4 -0
- package/include/lasxintrin.h +113 -0
- package/include/llvm_libc_wrappers/assert.h +3 -5
- package/include/llvm_libc_wrappers/ctype.h +3 -115
- package/include/llvm_libc_wrappers/inttypes.h +3 -5
- package/include/llvm_libc_wrappers/stdio.h +10 -38
- package/include/llvm_libc_wrappers/stdlib.h +3 -24
- package/include/llvm_libc_wrappers/string.h +2 -70
- package/include/llvm_libc_wrappers/time.h +4 -10
- package/include/mmintrin.h +188 -257
- package/include/module.modulemap +23 -4
- package/include/movrs_avx10_2_512intrin.h +2 -2
- package/include/movrs_avx10_2intrin.h +4 -4
- package/include/pmmintrin.h +12 -24
- package/include/ptrauth.h +16 -2
- package/include/riscv_mips.h +34 -0
- package/include/riscv_nds.h +89 -0
- package/include/sifive_vector.h +58 -2
- package/include/sm4evexintrin.h +2 -2
- package/include/smmintrin.h +77 -59
- package/include/spirvintrin.h +194 -0
- package/include/stddefer.h +19 -0
- package/include/tmmintrin.h +116 -147
- package/include/vaesintrin.h +1 -2
- package/include/xmmintrin.h +44 -70
- package/include/xopintrin.h +20 -10
- package/libc/include/aarch64-linux-any/asm/hwcap.h +1 -0
- package/libc/include/aarch64-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/any-linux-any/asm-generic/errno.h +2 -0
- package/libc/include/any-linux-any/asm-generic/unistd.h +4 -1
- package/libc/include/any-linux-any/drm/amdgpu_drm.h +20 -6
- package/libc/include/any-linux-any/drm/amdxdna_accel.h +8 -0
- package/libc/include/any-linux-any/drm/drm_fourcc.h +6 -6
- package/libc/include/any-linux-any/drm/panfrost_drm.h +75 -1
- package/libc/include/any-linux-any/drm/panthor_drm.h +154 -3
- package/libc/include/any-linux-any/drm/rocket_accel.h +74 -24
- package/libc/include/any-linux-any/drm/xe_drm.h +89 -6
- package/libc/include/any-linux-any/linux/android/binder.h +1 -1
- package/libc/include/any-linux-any/linux/bpf.h +28 -0
- package/libc/include/any-linux-any/linux/btrfs.h +1 -0
- package/libc/include/any-linux-any/linux/btrfs_tree.h +32 -2
- package/libc/include/any-linux-any/linux/dma-buf.h +1 -0
- package/libc/include/any-linux-any/linux/dpll.h +1 -0
- package/libc/include/any-linux-any/linux/elf.h +2 -0
- package/libc/include/any-linux-any/linux/ethtool.h +21 -5
- package/libc/include/any-linux-any/linux/fs.h +1 -0
- package/libc/include/any-linux-any/linux/hyperv.h +1 -1
- package/libc/include/any-linux-any/linux/idxd.h +134 -134
- package/libc/include/any-linux-any/linux/if_alg.h +1 -1
- package/libc/include/any-linux-any/linux/if_link.h +1 -0
- package/libc/include/any-linux-any/linux/input-event-codes.h +4 -0
- package/libc/include/any-linux-any/linux/io_uring/bpf_filter.h +68 -0
- package/libc/include/any-linux-any/linux/io_uring/query.h +5 -1
- package/libc/include/any-linux-any/linux/io_uring.h +33 -2
- package/libc/include/any-linux-any/linux/iommufd.h +39 -0
- package/libc/include/any-linux-any/linux/kfd_ioctl.h +13 -3
- package/libc/include/any-linux-any/linux/kfd_sysfs.h +2 -1
- package/libc/include/any-linux-any/linux/kvm.h +30 -6
- package/libc/include/any-linux-any/linux/landlock.h +22 -8
- package/libc/include/any-linux-any/linux/magic.h +1 -0
- package/libc/include/any-linux-any/linux/mempolicy.h +3 -0
- package/libc/include/any-linux-any/linux/mount.h +11 -2
- package/libc/include/any-linux-any/linux/mptcp_pm.h +1 -1
- package/libc/include/any-linux-any/linux/mshv.h +2 -0
- package/libc/include/any-linux-any/linux/netfilter_bridge.h +5 -4
- package/libc/include/any-linux-any/linux/netfilter_ipv4.h +4 -5
- package/libc/include/any-linux-any/linux/netfilter_ipv6.h +3 -4
- package/libc/include/any-linux-any/linux/nfs.h +1 -1
- package/libc/include/any-linux-any/linux/nfsd_netlink.h +1 -0
- package/libc/include/any-linux-any/linux/nilfs2_api.h +2 -2
- package/libc/include/any-linux-any/linux/nilfs2_ondisk.h +97 -66
- package/libc/include/any-linux-any/linux/nl80211.h +104 -3
- package/libc/include/any-linux-any/linux/pci.h +7 -0
- package/libc/include/any-linux-any/linux/pci_regs.h +65 -6
- package/libc/include/any-linux-any/linux/pcitest.h +1 -0
- package/libc/include/any-linux-any/linux/perf_event.h +24 -3
- package/libc/include/any-linux-any/linux/pkt_sched.h +1 -0
- package/libc/include/any-linux-any/linux/prctl.h +30 -0
- package/libc/include/any-linux-any/linux/rseq.h +62 -5
- package/libc/include/any-linux-any/linux/shm.h +0 -1
- package/libc/include/any-linux-any/linux/stddef.h +4 -0
- package/libc/include/any-linux-any/linux/sysctl.h +1 -2
- package/libc/include/any-linux-any/linux/taskstats.h +12 -1
- package/libc/include/any-linux-any/linux/tcp.h +23 -3
- package/libc/include/any-linux-any/linux/typelimits.h +8 -0
- package/libc/include/any-linux-any/linux/ublk_cmd.h +120 -1
- package/libc/include/any-linux-any/linux/v4l2-controls.h +63 -0
- package/libc/include/any-linux-any/linux/vbox_vmmdev_types.h +2 -2
- package/libc/include/any-linux-any/linux/vduse.h +80 -5
- package/libc/include/any-linux-any/linux/version.h +3 -3
- package/libc/include/any-linux-any/linux/vfio.h +4 -0
- package/libc/include/any-linux-any/linux/videodev2.h +3 -0
- package/libc/include/any-linux-any/linux/virtio_ring.h +1 -2
- package/libc/include/any-linux-any/linux/vmclock-abi.h +20 -0
- package/libc/include/any-linux-any/rdma/bnxt_re-abi.h +16 -0
- package/libc/include/any-linux-any/rdma/ib_user_ioctl_cmds.h +16 -0
- package/libc/include/any-linux-any/rdma/mana-abi.h +3 -0
- package/libc/include/any-linux-any/scsi/scsi_bsg_ufs.h +8 -9
- package/libc/include/any-linux-any/sound/sof/tokens.h +6 -0
- package/libc/include/arc-linux-any/asm/swab.h +0 -63
- package/libc/include/arc-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/arm-linux-any/asm/ptrace.h +0 -9
- package/libc/include/arm-linux-any/asm/unistd-eabi.h +1 -0
- package/libc/include/arm-linux-any/asm/unistd-oabi.h +1 -0
- package/libc/include/csky-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/hexagon-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/loongarch-linux-any/asm/hwcap.h +1 -0
- package/libc/include/loongarch-linux-any/asm/kvm.h +1 -0
- package/libc/include/loongarch-linux-any/asm/kvm_para.h +1 -0
- package/libc/include/loongarch-linux-any/asm/unistd_32.h +2 -0
- package/libc/include/loongarch-linux-any/asm/unistd_64.h +2 -0
- package/libc/include/m68k-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/mips-linux-any/asm/errno.h +2 -0
- package/libc/include/mips-linux-any/asm/unistd_n32.h +1 -0
- package/libc/include/mips-linux-any/asm/unistd_n64.h +1 -0
- package/libc/include/mips-linux-any/asm/unistd_o32.h +1 -0
- package/libc/include/powerpc-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/powerpc-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/riscv-linux-any/asm/hwprobe.h +4 -0
- package/libc/include/riscv-linux-any/asm/kvm.h +3 -0
- package/libc/include/riscv-linux-any/asm/ptrace.h +37 -0
- package/libc/include/riscv-linux-any/asm/sigcontext.h +1 -0
- package/libc/include/riscv-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/riscv-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/s390x-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/sparc-linux-any/asm/errno.h +2 -0
- package/libc/include/sparc-linux-any/asm/ioctls.h +4 -4
- package/libc/include/sparc-linux-any/asm/unistd_32.h +2 -0
- package/libc/include/sparc-linux-any/asm/unistd_64.h +2 -0
- package/libc/include/x86-linux-any/asm/auxvec.h +0 -4
- package/libc/include/x86-linux-any/asm/kvm.h +13 -8
- package/libc/include/x86-linux-any/asm/svm.h +16 -16
- package/libc/include/x86-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/x86-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/x86-linux-any/asm/unistd_x32.h +1 -0
- package/libc/include/xtensa-linux-any/asm/unistd_32.h +1 -0
- package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
- package/libcxx/include/__algorithm/all_of.h +11 -5
- package/libcxx/include/__algorithm/comp.h +4 -0
- package/libcxx/include/__algorithm/copy.h +28 -147
- package/libcxx/include/__algorithm/copy_backward.h +9 -24
- package/libcxx/include/__algorithm/copy_n.h +50 -16
- package/libcxx/include/__algorithm/count.h +2 -2
- package/libcxx/include/__algorithm/equal.h +43 -55
- package/libcxx/include/__algorithm/fill.h +26 -8
- package/libcxx/include/__algorithm/fill_n.h +32 -46
- package/libcxx/include/__algorithm/find.h +96 -39
- package/libcxx/include/__algorithm/find_end.h +105 -0
- package/libcxx/include/__algorithm/for_each.h +18 -24
- package/libcxx/include/__algorithm/for_each_n.h +20 -47
- package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
- package/libcxx/include/__algorithm/for_each_segment.h +26 -0
- package/libcxx/include/__algorithm/generate.h +4 -2
- package/libcxx/include/__algorithm/generate_n.h +19 -6
- package/libcxx/include/__algorithm/is_permutation.h +4 -4
- package/libcxx/include/__algorithm/iterator_operations.h +3 -0
- package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
- package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
- package/libcxx/include/__algorithm/make_heap.h +16 -4
- package/libcxx/include/__algorithm/mismatch.h +2 -2
- package/libcxx/include/__algorithm/move.h +8 -19
- package/libcxx/include/__algorithm/move_backward.h +9 -24
- package/libcxx/include/__algorithm/none_of.h +4 -4
- package/libcxx/include/__algorithm/partial_sort.h +1 -1
- package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
- package/libcxx/include/__algorithm/pstl.h +9 -9
- package/libcxx/include/__algorithm/radix_sort.h +27 -25
- package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
- package/libcxx/include/__algorithm/ranges_equal.h +17 -26
- package/libcxx/include/__algorithm/ranges_fill.h +7 -6
- package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
- package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
- package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
- package/libcxx/include/__algorithm/rotate.h +27 -44
- package/libcxx/include/__algorithm/search_n.h +49 -37
- package/libcxx/include/__algorithm/sift_down.h +19 -18
- package/libcxx/include/__algorithm/simd_utils.h +33 -4
- package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
- package/libcxx/include/__algorithm/stable_sort.h +1 -1
- package/libcxx/include/__assertion_handler +31 -4
- package/libcxx/include/__atomic/atomic.h +36 -60
- package/libcxx/include/__atomic/atomic_flag.h +19 -37
- package/libcxx/include/__atomic/atomic_ref.h +29 -12
- package/libcxx/include/__atomic/atomic_sync.h +127 -55
- package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
- package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
- package/libcxx/include/__atomic/contention_t.h +27 -3
- package/libcxx/include/__atomic/floating_point_helper.h +55 -0
- package/libcxx/include/__bit/countl.h +1 -2
- package/libcxx/include/__bit/countr.h +1 -2
- package/libcxx/include/__bit/has_single_bit.h +1 -1
- package/libcxx/include/__bit/popcount.h +0 -1
- package/libcxx/include/__bit/rotate.h +15 -26
- package/libcxx/include/__bit_reference +207 -18
- package/libcxx/include/__charconv/from_chars_integral.h +1 -1
- package/libcxx/include/__charconv/from_chars_result.h +1 -1
- package/libcxx/include/__charconv/to_chars_integral.h +1 -0
- package/libcxx/include/__charconv/to_chars_result.h +1 -1
- package/libcxx/include/__charconv/traits.h +3 -24
- package/libcxx/include/__chrono/day.h +11 -0
- package/libcxx/include/__chrono/duration.h +58 -33
- package/libcxx/include/__chrono/file_clock.h +4 -2
- package/libcxx/include/__chrono/is_clock.h +72 -0
- package/libcxx/include/__chrono/leap_second.h +13 -0
- package/libcxx/include/__chrono/month.h +13 -0
- package/libcxx/include/__chrono/month_weekday.h +22 -0
- package/libcxx/include/__chrono/monthday.h +20 -0
- package/libcxx/include/__chrono/steady_clock.h +1 -1
- package/libcxx/include/__chrono/system_clock.h +3 -3
- package/libcxx/include/__chrono/time_point.h +37 -13
- package/libcxx/include/__chrono/weekday.h +25 -0
- package/libcxx/include/__chrono/year.h +11 -0
- package/libcxx/include/__chrono/year_month.h +13 -0
- package/libcxx/include/__chrono/year_month_day.h +23 -0
- package/libcxx/include/__chrono/year_month_weekday.h +26 -0
- package/libcxx/include/__chrono/zoned_time.h +16 -0
- package/libcxx/include/__compare/is_eq.h +6 -6
- package/libcxx/include/__compare/strong_order.h +12 -30
- package/libcxx/include/__compare/three_way_comparable.h +2 -2
- package/libcxx/include/__concepts/comparison_common_type.h +40 -0
- package/libcxx/include/__concepts/equality_comparable.h +2 -1
- package/libcxx/include/__condition_variable/condition_variable.h +1 -1
- package/libcxx/include/__config +63 -280
- package/libcxx/include/__configuration/abi.h +14 -24
- package/libcxx/include/__configuration/availability.h +65 -118
- package/libcxx/include/__configuration/compiler.h +6 -6
- package/libcxx/include/__configuration/experimental.h +38 -0
- package/libcxx/include/__configuration/hardening.h +215 -0
- package/libcxx/include/__configuration/language.h +3 -0
- package/libcxx/include/__configuration/platform.h +9 -16
- package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
- package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
- package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
- package/libcxx/include/__exception/exception.h +6 -4
- package/libcxx/include/__exception/exception_ptr.h +27 -5
- package/libcxx/include/__exception/nested_exception.h +2 -2
- package/libcxx/include/__exception/operations.h +5 -5
- package/libcxx/include/__expected/bad_expected_access.h +8 -6
- package/libcxx/include/__expected/expected.h +62 -64
- package/libcxx/include/__expected/unexpected.h +4 -4
- package/libcxx/include/__filesystem/copy_options.h +4 -4
- package/libcxx/include/__filesystem/directory_entry.h +37 -33
- package/libcxx/include/__filesystem/directory_iterator.h +9 -11
- package/libcxx/include/__filesystem/directory_options.h +7 -4
- package/libcxx/include/__filesystem/file_status.h +3 -3
- package/libcxx/include/__filesystem/filesystem_error.h +9 -10
- package/libcxx/include/__filesystem/operations.h +97 -66
- package/libcxx/include/__filesystem/path.h +68 -64
- package/libcxx/include/__filesystem/path_iterator.h +1 -3
- package/libcxx/include/__filesystem/perm_options.h +4 -4
- package/libcxx/include/__filesystem/perms.h +4 -4
- package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
- package/libcxx/include/__filesystem/space_info.h +1 -1
- package/libcxx/include/__filesystem/u8path.h +12 -14
- package/libcxx/include/__flat_map/flat_map.h +88 -71
- package/libcxx/include/__flat_map/flat_multimap.h +251 -172
- package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
- package/libcxx/include/__flat_map/utils.h +1 -0
- package/libcxx/include/__flat_set/flat_multiset.h +211 -143
- package/libcxx/include/__flat_set/flat_set.h +86 -68
- package/libcxx/include/__format/concepts.h +0 -14
- package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
- package/libcxx/include/__format/fmt_pair_like.h +42 -0
- package/libcxx/include/__format/format_arg.h +7 -10
- package/libcxx/include/__format/format_args.h +1 -1
- package/libcxx/include/__format/format_context.h +5 -5
- package/libcxx/include/__format/format_parse_context.h +2 -2
- package/libcxx/include/__format/formatter_output.h +30 -34
- package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
- package/libcxx/include/__format/range_default_formatter.h +2 -41
- package/libcxx/include/__format/range_format.h +71 -0
- package/libcxx/include/__format/range_formatter.h +1 -0
- package/libcxx/include/__format/width_estimation_table.h +4 -2
- package/libcxx/include/__functional/bind.h +10 -15
- package/libcxx/include/__functional/bind_back.h +1 -1
- package/libcxx/include/__functional/bind_front.h +1 -1
- package/libcxx/include/__functional/function.h +57 -75
- package/libcxx/include/__functional/hash.h +1 -10
- package/libcxx/include/__functional/identity.h +1 -1
- package/libcxx/include/__functional/is_transparent.h +8 -0
- package/libcxx/include/__functional/mem_fn.h +2 -1
- package/libcxx/include/__functional/operations.h +18 -0
- package/libcxx/include/__functional/ranges_operations.h +7 -0
- package/libcxx/include/__functional/reference_wrapper.h +7 -5
- package/libcxx/include/__functional/weak_result_type.h +14 -28
- package/libcxx/include/__fwd/ios.h +1 -1
- package/libcxx/include/__fwd/tuple.h +14 -0
- package/libcxx/include/__hash_table +371 -357
- package/libcxx/include/__ios/fpos.h +4 -4
- package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
- package/libcxx/include/__iterator/bounded_iter.h +7 -8
- package/libcxx/include/__iterator/concepts.h +6 -9
- package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
- package/libcxx/include/__iterator/distance.h +40 -18
- package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
- package/libcxx/include/__iterator/insert_iterator.h +1 -7
- package/libcxx/include/__iterator/istream_iterator.h +6 -7
- package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
- package/libcxx/include/__iterator/iter_move.h +1 -1
- package/libcxx/include/__iterator/iterator.h +13 -0
- package/libcxx/include/__iterator/iterator_traits.h +13 -14
- package/libcxx/include/__iterator/ostream_iterator.h +1 -7
- package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
- package/libcxx/include/__iterator/reverse_iterator.h +8 -13
- package/libcxx/include/__iterator/segmented_iterator.h +3 -8
- package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
- package/libcxx/include/__iterator/wrap_iter.h +8 -6
- package/libcxx/include/__locale +3 -10
- package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
- package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
- package/libcxx/include/__locale_dir/messages.h +1 -1
- package/libcxx/include/__locale_dir/money.h +2 -2
- package/libcxx/include/__locale_dir/num.h +190 -243
- package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
- package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
- package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
- package/libcxx/include/__locale_dir/support/linux.h +0 -37
- package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
- package/libcxx/include/__locale_dir/support/newlib.h +243 -0
- package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
- package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
- package/libcxx/include/__locale_dir/support/windows.h +0 -29
- package/libcxx/include/__locale_dir/time.h +3 -7
- package/libcxx/include/__math/hypot.h +1 -1
- package/libcxx/include/__math/logarithms.h +1 -1
- package/libcxx/include/__math/traits.h +80 -11
- package/libcxx/include/__mdspan/extents.h +7 -4
- package/libcxx/include/__mdspan/layout_stride.h +4 -5
- package/libcxx/include/__mdspan/mdspan.h +29 -23
- package/libcxx/include/__memory/addressof.h +7 -5
- package/libcxx/include/__memory/align.h +18 -1
- package/libcxx/include/__memory/allocate_at_least.h +15 -10
- package/libcxx/include/__memory/allocator.h +14 -26
- package/libcxx/include/__memory/allocator_traits.h +6 -4
- package/libcxx/include/__memory/compressed_pair.h +15 -9
- package/libcxx/include/__memory/construct_at.h +12 -23
- package/libcxx/include/__memory/inout_ptr.h +1 -1
- package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
- package/libcxx/include/__memory/out_ptr.h +1 -1
- package/libcxx/include/__memory/pointer_traits.h +1 -1
- package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
- package/libcxx/include/__memory/shared_count.h +9 -30
- package/libcxx/include/__memory/shared_ptr.h +100 -145
- package/libcxx/include/__memory/temp_value.h +1 -2
- package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
- package/libcxx/include/__memory/unique_ptr.h +14 -16
- package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
- package/libcxx/include/__memory_resource/memory_resource.h +4 -2
- package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
- package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
- package/libcxx/include/__memory_resource/pool_options.h +1 -1
- package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
- package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
- package/libcxx/include/__mutex/mutex.h +2 -2
- package/libcxx/include/__mutex/once_flag.h +14 -11
- package/libcxx/include/__mutex/tag_types.h +3 -3
- package/libcxx/include/__mutex/unique_lock.h +8 -7
- package/libcxx/include/__new/align_val_t.h +6 -0
- package/libcxx/include/__new/allocate.h +1 -2
- package/libcxx/include/__new/exceptions.h +8 -2
- package/libcxx/include/__new/global_new_delete.h +4 -11
- package/libcxx/include/__new/interference_size.h +0 -4
- package/libcxx/include/__new/launder.h +3 -5
- package/libcxx/include/__new/nothrow_t.h +1 -1
- package/libcxx/include/__numeric/gcd_lcm.h +24 -34
- package/libcxx/include/__numeric/midpoint.h +9 -14
- package/libcxx/include/__numeric/pstl.h +2 -2
- package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
- package/libcxx/include/__ostream/basic_ostream.h +8 -8
- package/libcxx/include/__pstl/backends/default.h +14 -14
- package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
- package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
- package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
- package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
- package/libcxx/include/__random/binomial_distribution.h +10 -4
- package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
- package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
- package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
- package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
- package/libcxx/include/__ranges/adjacent_view.h +419 -0
- package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
- package/libcxx/include/__ranges/chunk_by_view.h +6 -6
- package/libcxx/include/__ranges/common_view.h +7 -7
- package/libcxx/include/__ranges/drop_view.h +8 -8
- package/libcxx/include/__ranges/drop_while_view.h +5 -5
- package/libcxx/include/__ranges/elements_of.h +49 -0
- package/libcxx/include/__ranges/empty_view.h +5 -5
- package/libcxx/include/__ranges/filter_view.h +10 -10
- package/libcxx/include/__ranges/iota_view.h +41 -22
- package/libcxx/include/__ranges/owning_view.h +15 -15
- package/libcxx/include/__ranges/ref_view.h +6 -6
- package/libcxx/include/__ranges/repeat_view.h +17 -10
- package/libcxx/include/__ranges/single_view.h +8 -8
- package/libcxx/include/__ranges/take_view.h +9 -9
- package/libcxx/include/__ranges/transform_view.h +1 -2
- package/libcxx/include/__ranges/view_interface.h +10 -10
- package/libcxx/include/__ranges/zip_transform_view.h +357 -0
- package/libcxx/include/__ranges/zip_view.h +20 -20
- package/libcxx/include/__split_buffer +612 -240
- package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
- package/libcxx/include/__stop_token/stop_callback.h +2 -2
- package/libcxx/include/__stop_token/stop_source.h +1 -1
- package/libcxx/include/__stop_token/stop_state.h +4 -4
- package/libcxx/include/__stop_token/stop_token.h +1 -1
- package/libcxx/include/__string/char_traits.h +51 -31
- package/libcxx/include/__string/constexpr_c_functions.h +5 -5
- package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
- package/libcxx/include/__system_error/error_category.h +8 -8
- package/libcxx/include/__system_error/error_code.h +5 -5
- package/libcxx/include/__system_error/error_condition.h +4 -4
- package/libcxx/include/__system_error/system_error.h +1 -1
- package/libcxx/include/__thread/id.h +1 -1
- package/libcxx/include/__thread/jthread.h +1 -1
- package/libcxx/include/__thread/poll_with_backoff.h +27 -8
- package/libcxx/include/__thread/support/c11.h +8 -8
- package/libcxx/include/__thread/support/pthread.h +8 -8
- package/libcxx/include/__thread/support/windows.h +8 -8
- package/libcxx/include/__thread/thread.h +13 -8
- package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
- package/libcxx/include/__tree +849 -701
- package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
- package/libcxx/include/__tuple/tuple_element.h +0 -12
- package/libcxx/include/__tuple/tuple_size.h +0 -4
- package/libcxx/include/__tuple/tuple_transform.h +45 -0
- package/libcxx/include/__type_traits/aligned_storage.h +13 -40
- package/libcxx/include/__type_traits/desugars_to.h +4 -0
- package/libcxx/include/__type_traits/invoke.h +8 -0
- package/libcxx/include/__type_traits/is_allocator.h +6 -7
- package/libcxx/include/__type_traits/is_array.h +26 -0
- package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
- package/libcxx/include/__type_traits/is_final.h +1 -1
- package/libcxx/include/__type_traits/is_floating_point.h +7 -6
- package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
- package/libcxx/include/__type_traits/is_specialization.h +2 -6
- package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
- package/libcxx/include/__type_traits/make_transparent.h +52 -0
- package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
- package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
- package/libcxx/include/__utility/cmp.h +19 -7
- package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
- package/libcxx/include/__utility/in_place.h +1 -1
- package/libcxx/include/__utility/integer_sequence.h +56 -41
- package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
- package/libcxx/include/__utility/pair.h +22 -25
- package/libcxx/include/__utility/scope_guard.h +2 -0
- package/libcxx/include/__utility/try_key_extraction.h +114 -0
- package/libcxx/include/__vector/vector.h +187 -160
- package/libcxx/include/__vector/vector_bool.h +76 -83
- package/libcxx/include/any +118 -155
- package/libcxx/include/array +88 -56
- package/libcxx/include/atomic +2 -0
- package/libcxx/include/barrier +20 -24
- package/libcxx/include/bitset +49 -30
- package/libcxx/include/ccomplex +3 -11
- package/libcxx/include/chrono +47 -0
- package/libcxx/include/ciso646 +3 -6
- package/libcxx/include/complex +77 -65
- package/libcxx/include/complex.h +10 -10
- package/libcxx/include/condition_variable +3 -3
- package/libcxx/include/cstdalign +3 -10
- package/libcxx/include/cstdbool +3 -10
- package/libcxx/include/ctgmath +2 -11
- package/libcxx/include/ctype.h +24 -24
- package/libcxx/include/cwchar +2 -2
- package/libcxx/include/deque +109 -225
- package/libcxx/include/errno.h +269 -269
- package/libcxx/include/exception +4 -1
- package/libcxx/include/ext/hash_map +7 -48
- package/libcxx/include/ext/hash_set +2 -8
- package/libcxx/include/fenv.h +43 -43
- package/libcxx/include/flat_map +663 -11
- package/libcxx/include/flat_set +543 -8
- package/libcxx/include/float.h +16 -16
- package/libcxx/include/forward_list +33 -53
- package/libcxx/include/fstream +57 -42
- package/libcxx/include/future +41 -51
- package/libcxx/include/initializer_list +9 -3
- package/libcxx/include/inttypes.h +16 -16
- package/libcxx/include/ios +28 -28
- package/libcxx/include/istream +19 -13
- package/libcxx/include/iterator +10 -0
- package/libcxx/include/latch +7 -5
- package/libcxx/include/limits +4 -4
- package/libcxx/include/list +61 -79
- package/libcxx/include/map +386 -274
- package/libcxx/include/math.h +19 -0
- package/libcxx/include/mdspan +1 -5
- package/libcxx/include/mutex +29 -19
- package/libcxx/include/optional +644 -149
- package/libcxx/include/print +9 -5
- package/libcxx/include/queue +39 -37
- package/libcxx/include/ranges +48 -0
- package/libcxx/include/regex +33 -31
- package/libcxx/include/scoped_allocator +16 -11
- package/libcxx/include/semaphore +15 -18
- package/libcxx/include/set +220 -192
- package/libcxx/include/shared_mutex +3 -8
- package/libcxx/include/span +53 -37
- package/libcxx/include/sstream +34 -28
- package/libcxx/include/stack +13 -15
- package/libcxx/include/stddef.h +10 -10
- package/libcxx/include/stdexcept +2 -2
- package/libcxx/include/stdio.h +20 -21
- package/libcxx/include/streambuf +59 -19
- package/libcxx/include/string +574 -573
- package/libcxx/include/string_view +113 -89
- package/libcxx/include/strstream +10 -10
- package/libcxx/include/syncstream +4 -4
- package/libcxx/include/tgmath.h +12 -12
- package/libcxx/include/tuple +242 -212
- package/libcxx/include/type_traits +8 -2
- package/libcxx/include/typeindex +5 -3
- package/libcxx/include/typeinfo +92 -89
- package/libcxx/include/unordered_map +179 -304
- package/libcxx/include/unordered_set +168 -195
- package/libcxx/include/utility +12 -0
- package/libcxx/include/valarray +106 -161
- package/libcxx/include/variant +25 -33
- package/libcxx/include/version +41 -24
- package/libcxx/include/wctype.h +29 -29
- package/libcxx/libc/hdr/errno_macros.h +3 -1
- package/libcxx/libc/hdr/stdint_proxy.h +18 -0
- package/libcxx/libc/hdr/types/wchar_t.h +23 -0
- package/libcxx/libc/hdr/wchar_overlay.h +69 -0
- package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
- package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
- package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
- package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
- package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
- package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
- package/libcxx/libc/shared/libc_common.h +5 -0
- package/libcxx/libc/src/__support/CPP/bit.h +50 -12
- package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
- package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
- package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
- package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
- package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
- package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
- package/libcxx/libc/src/__support/big_int.h +14 -14
- package/libcxx/libc/src/__support/common.h +3 -2
- package/libcxx/libc/src/__support/ctype_utils.h +19 -12
- package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
- package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
- package/libcxx/libc/src/__support/libc_assert.h +2 -0
- package/libcxx/libc/src/__support/macros/attributes.h +44 -1
- package/libcxx/libc/src/__support/macros/config.h +23 -0
- package/libcxx/libc/src/__support/macros/null_check.h +1 -2
- package/libcxx/libc/src/__support/macros/optimization.h +3 -0
- package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
- package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
- package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
- package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
- package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
- package/libcxx/libc/src/__support/math_extras.h +20 -4
- package/libcxx/libc/src/__support/str_to_float.h +98 -125
- package/libcxx/libc/src/__support/str_to_integer.h +39 -27
- package/libcxx/libc/src/__support/wctype_utils.h +588 -0
- package/libcxx/src/any.cpp +4 -0
- package/libcxx/src/atomic.cpp +365 -80
- package/libcxx/src/barrier.cpp +4 -3
- package/libcxx/src/charconv.cpp +6 -3
- package/libcxx/src/condition_variable_destructor.cpp +1 -1
- package/libcxx/src/error_category.cpp +3 -1
- package/libcxx/src/exception.cpp +2 -10
- package/libcxx/src/experimental/time_zone.cpp +1 -1
- package/libcxx/src/experimental/tzdb.cpp +4 -1
- package/libcxx/src/filesystem/error.h +4 -22
- package/libcxx/src/filesystem/format_string.h +9 -18
- package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
- package/libcxx/src/filesystem/operations.cpp +2 -9
- package/libcxx/src/filesystem/path.cpp +3 -1
- package/libcxx/src/include/aligned_alloc.h +65 -0
- package/libcxx/src/include/config_elast.h +1 -1
- package/libcxx/src/include/from_chars_floating_point.h +11 -7
- package/libcxx/src/include/overridable_function.h +8 -10
- package/libcxx/src/iostream.cpp +56 -37
- package/libcxx/src/locale.cpp +213 -196
- package/libcxx/src/memory.cpp +12 -14
- package/libcxx/src/mutex_destructor.cpp +1 -1
- package/libcxx/src/new.cpp +5 -5
- package/libcxx/src/optional.cpp +4 -0
- package/libcxx/src/print.cpp +9 -1
- package/libcxx/src/random.cpp +0 -26
- package/libcxx/src/string.cpp +10 -25
- package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
- package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
- package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
- package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
- package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
- package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
- package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
- package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
- package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
- package/libcxx/src/support/win32/locale_win32.cpp +1 -1
- package/libcxx/src/system_error.cpp +2 -0
- package/libcxx/src/thread.cpp +1 -3
- package/libcxx/src/valarray.cpp +1 -2
- package/libcxx/src/vector.cpp +2 -2
- package/libcxxabi/include/__cxxabi_config.h +42 -23
- package/libcxxabi/src/cxa_exception.cpp +4 -2
- package/libcxxabi/src/cxa_exception.h +16 -14
- package/libcxxabi/src/cxa_personality.cpp +126 -9
- package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
- package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
- package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
- package/libcxxabi/src/demangle/Utility.h +21 -7
- package/libcxxabi/src/fallback_malloc.cpp +1 -1
- package/libcxxabi/src/private_typeinfo.cpp +6 -0
- package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
- package/libtsan/LICENSE.TXT +311 -0
- package/libtsan/builtins/assembly.h +41 -8
- package/libtsan/interception/interception_win.cpp +4 -0
- package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
- package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
- package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
- package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
- package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
- package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
- package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
- package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
- package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
- package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
- package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
- package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
- package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
- package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
- package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
- package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
- package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
- package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
- package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
- package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
- package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
- package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
- package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
- package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
- package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
- package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
- package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
- package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
- package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
- package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
- package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
- package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
- package/libtsan/tsan_debugging.cpp +2 -2
- package/libtsan/tsan_flags.cpp +37 -0
- package/libtsan/tsan_flags.h +8 -0
- package/libtsan/tsan_flags.inc +12 -0
- package/libtsan/tsan_interceptors.h +9 -1
- package/libtsan/tsan_interceptors_mac.cpp +19 -0
- package/libtsan/tsan_interceptors_posix.cpp +78 -32
- package/libtsan/tsan_interface.h +3 -3
- package/libtsan/tsan_interface_ann.cpp +23 -9
- package/libtsan/tsan_mman.cpp +18 -4
- package/libtsan/tsan_platform.h +44 -7
- package/libtsan/tsan_platform_linux.cpp +42 -14
- package/libtsan/tsan_platform_mac.cpp +16 -3
- package/libtsan/tsan_report.h +14 -1
- package/libtsan/tsan_rtl.cpp +14 -0
- package/libtsan/tsan_rtl.h +7 -2
- package/libtsan/tsan_rtl_aarch64.S +3 -5
- package/libtsan/tsan_rtl_access.cpp +8 -3
- package/libtsan/tsan_rtl_amd64.S +2 -0
- package/libtsan/tsan_rtl_mutex.cpp +94 -49
- package/libtsan/tsan_rtl_report.cpp +132 -65
- package/libtsan/tsan_rtl_thread.cpp +31 -9
- package/libtsan/tsan_symbolize.cpp +1 -1
- package/libtsan/tsan_symbolize.h +1 -1
- package/libtsan/tsan_trace.h +1 -1
- package/libunwind/include/__libunwind_config.h +11 -2
- package/libunwind/include/libunwind.h +117 -11
- package/libunwind/include/unwind_arm_ehabi.h +4 -1
- package/libunwind/src/AddressSpace.hpp +42 -20
- package/libunwind/src/CompactUnwinder.hpp +16 -5
- package/libunwind/src/DwarfInstructions.hpp +24 -13
- package/libunwind/src/DwarfParser.hpp +62 -23
- package/libunwind/src/EHHeaderParser.hpp +7 -4
- package/libunwind/src/Registers.hpp +226 -22
- package/libunwind/src/Unwind-seh.cpp +6 -7
- package/libunwind/src/Unwind-wasm.c +7 -7
- package/libunwind/src/UnwindCursor.hpp +167 -49
- package/libunwind/src/UnwindLevel1.c +46 -17
- package/libunwind/src/UnwindRegistersRestore.S +46 -5
- package/libunwind/src/UnwindRegistersSave.S +86 -2
- package/libunwind/src/assembly.h +5 -1
- package/libunwind/src/config.h +9 -0
- package/libunwind/src/gcc_personality_v0.c +79 -6
- package/libunwind/src/libunwind.cpp +104 -4
- package/libunwind/src/libunwind_ext.h +7 -1
- package/libunwind/src/shadow_stack_unwind.h +2 -2
- package/lldb/pretty_printers.py +948 -0
- package/package.json +1 -1
- package/std/Build/Cache/Path.zig +1 -1
- package/std/Build/Cache.zig +6 -6
- package/std/Build/Step/Compile.zig +18 -20
- package/std/Build/Step/ConfigHeader.zig +1 -1
- package/std/Build/Step/Run.zig +15 -8
- package/std/Build/Step.zig +2 -7
- package/std/Build/Watch/FsEvents.zig +1 -1
- package/std/Build/WebServer.zig +2 -2
- package/std/Build/abi.zig +1 -1
- package/std/Build.zig +0 -3
- package/std/Io/Dir.zig +9 -4
- package/std/Io/Dispatch.zig +8 -18
- package/std/Io/File/Writer.zig +8 -6
- package/std/Io/File.zig +0 -9
- package/std/Io/Kqueue.zig +3 -3
- package/std/Io/Reader.zig +8 -14
- package/std/Io/Semaphore.zig +112 -17
- package/std/Io/Terminal.zig +1 -1
- package/std/Io/Threaded.zig +183 -46
- package/std/Io/Uring.zig +18 -20
- package/std/Io/Writer.zig +10 -7
- package/std/Io/net/HostName.zig +11 -6
- package/std/Io/net.zig +11 -11
- package/std/Io.zig +104 -38
- package/std/Random/ChaCha.zig +2 -2
- package/std/Random/benchmark.zig +2 -2
- package/std/Random.zig +6 -6
- package/std/SemanticVersion.zig +1 -1
- package/std/Target/Query.zig +2 -2
- package/std/Target/aarch64.zig +620 -77
- package/std/Target/amdgcn.zig +421 -21
- package/std/Target/arm.zig +40 -6
- package/std/Target/bpf.zig +6 -0
- package/std/Target/hexagon.zig +41 -6
- package/std/Target/loongarch.zig +18 -0
- package/std/Target/mips.zig +6 -0
- package/std/Target/nvptx.zig +58 -35
- package/std/Target/powerpc.zig +27 -19
- package/std/Target/riscv.zig +415 -177
- package/std/Target/sparc.zig +17 -0
- package/std/Target/wasm.zig +7 -0
- package/std/Target/x86.zig +200 -31
- package/std/Target/xtensa.zig +65 -0
- package/std/Target.zig +67 -14
- package/std/Thread.zig +5 -2
- package/std/array_hash_map.zig +103 -57
- package/std/array_list.zig +10 -31
- package/std/base64.zig +5 -5
- package/std/bit_set.zig +86 -69
- package/std/c/haiku.zig +3 -0
- package/std/c/serenity.zig +1 -6
- package/std/c.zig +123 -32
- package/std/compress/flate/Decompress.zig +3 -4
- package/std/compress/zstd/Decompress.zig +7 -9
- package/std/crypto/25519/curve25519.zig +2 -2
- package/std/crypto/25519/edwards25519.zig +3 -3
- package/std/crypto/25519/ristretto255.zig +2 -2
- package/std/crypto/25519/scalar.zig +6 -6
- package/std/crypto/25519/x25519.zig +1 -1
- package/std/crypto/Certificate.zig +14 -2
- package/std/crypto/Sha1.zig +1 -1
- package/std/crypto/aegis.zig +45 -39
- package/std/crypto/aes_ccm.zig +22 -22
- package/std/crypto/aes_gcm.zig +10 -12
- package/std/crypto/aes_ocb.zig +9 -9
- package/std/crypto/argon2.zig +15 -15
- package/std/crypto/ascon.zig +75 -33
- package/std/crypto/bcrypt.zig +20 -10
- package/std/crypto/benchmark.zig +7 -7
- package/std/crypto/blake2.zig +100 -64
- package/std/crypto/cbc_mac.zig +1 -1
- package/std/crypto/chacha20.zig +10 -10
- package/std/crypto/cmac.zig +3 -3
- package/std/crypto/codecs/asn1/Oid.zig +12 -1
- package/std/crypto/codecs/asn1/der/Encoder.zig +1 -1
- package/std/crypto/codecs/asn1.zig +1 -1
- package/std/crypto/codecs/base64_hex_ct.zig +3 -5
- package/std/crypto/ecdsa.zig +9 -9
- package/std/crypto/ff.zig +4 -5
- package/std/crypto/ghash_polyval.zig +4 -4
- package/std/crypto/hkdf.zig +1 -1
- package/std/crypto/isap.zig +3 -3
- package/std/crypto/kangarootwelve.zig +1 -1
- package/std/crypto/keccak_p.zig +8 -8
- package/std/crypto/md5.zig +1 -1
- package/std/crypto/ml_dsa.zig +39 -39
- package/std/crypto/ml_kem.zig +12 -34
- package/std/crypto/modes.zig +2 -2
- package/std/crypto/pbkdf2.zig +1 -1
- package/std/crypto/pcurves/common.zig +4 -5
- package/std/crypto/pcurves/p256/scalar.zig +3 -3
- package/std/crypto/pcurves/p384/scalar.zig +2 -2
- package/std/crypto/pcurves/secp256k1/scalar.zig +3 -3
- package/std/crypto/pcurves/tests/p256.zig +5 -5
- package/std/crypto/pcurves/tests/p384.zig +5 -5
- package/std/crypto/pcurves/tests/secp256k1.zig +3 -3
- package/std/crypto/salsa20.zig +8 -8
- package/std/crypto/sha2.zig +2 -2
- package/std/crypto/sha3.zig +2 -2
- package/std/crypto/siphash.zig +1 -1
- package/std/crypto/timing_safe.zig +10 -9
- package/std/crypto/tls/Client.zig +89 -13
- package/std/crypto/tls.zig +1 -1
- package/std/crypto.zig +4 -3
- package/std/debug/Dwarf.zig +15 -12
- package/std/debug/Pdb.zig +25 -17
- package/std/debug.zig +14 -8
- package/std/deque.zig +1 -1
- package/std/elf.zig +1 -1
- package/std/enums.zig +8 -8
- package/std/fmt/parse_float/decimal.zig +1 -1
- package/std/fmt/parse_float.zig +1 -1
- package/std/fmt.zig +14 -10
- package/std/fs/path.zig +7 -5
- package/std/hash/Adler32.zig +3 -3
- package/std/hash/benchmark.zig +2 -2
- package/std/hash/wyhash.zig +2 -2
- package/std/hash/xxhash.zig +0 -6
- package/std/hash_map.zig +20 -1
- package/std/heap/BufferFirstAllocator.zig +165 -0
- package/std/heap/debug_allocator.zig +2 -2
- package/std/heap/memory_pool.zig +34 -197
- package/std/heap.zig +2 -133
- package/std/http/Client.zig +21 -24
- package/std/http.zig +4 -5
- package/std/json/Scanner.zig +2 -2
- package/std/json/static.zig +2 -2
- package/std/{builtin.zig → lang.zig} +5 -1
- package/std/leb128.zig +2 -2
- package/std/math/big/int.zig +5 -5
- package/std/math/big.zig +4 -4
- package/std/math/copysign.zig +1 -1
- package/std/math/float.zig +62 -0
- package/std/math/frexp.zig +4 -4
- package/std/math/ilogb.zig +1 -1
- package/std/math/isfinite.zig +1 -1
- package/std/math/isinf.zig +1 -1
- package/std/math/isnan.zig +1 -2
- package/std/math/isnormal.zig +2 -2
- package/std/math/iszero.zig +2 -2
- package/std/math/ldexp.zig +2 -2
- package/std/math/log10.zig +0 -2
- package/std/math/modf.zig +1 -2
- package/std/math/nextafter.zig +3 -4
- package/std/math/pow.zig +1 -1
- package/std/math/powi.zig +2 -3
- package/std/math/signbit.zig +0 -1
- package/std/math.zig +21 -26
- package/std/mem/Allocator.zig +0 -6
- package/std/mem.zig +31 -31
- package/std/meta/trailer_flags.zig +1 -1
- package/std/meta.zig +4 -36
- package/std/multi_array_list.zig +24 -0
- package/std/os/emscripten.zig +7 -6
- package/std/os/linux/IoUring.zig +2 -0
- package/std/os/linux/aarch64.zig +41 -12
- package/std/os/linux/arc.zig +41 -12
- package/std/os/linux/arm.zig +41 -12
- package/std/os/linux/bpf.zig +6 -0
- package/std/os/linux/hexagon.zig +33 -11
- package/std/os/linux/ioctl.zig +2 -2
- package/std/os/linux/loongarch32.zig +41 -13
- package/std/os/linux/loongarch64.zig +41 -12
- package/std/os/linux/m68k.zig +41 -13
- package/std/os/linux/mips.zig +67 -36
- package/std/os/linux/mips64.zig +60 -29
- package/std/os/linux/mipsn32.zig +60 -29
- package/std/os/linux/or1k.zig +41 -12
- package/std/os/linux/powerpc.zig +41 -12
- package/std/os/linux/powerpc64.zig +41 -12
- package/std/os/linux/riscv32.zig +41 -12
- package/std/os/linux/riscv64.zig +41 -12
- package/std/os/linux/s390x.zig +44 -7
- package/std/os/linux/sparc64.zig +83 -52
- package/std/os/linux/syscalls.zig +26 -1
- package/std/os/linux/thumb.zig +52 -36
- package/std/os/linux/x32.zig +41 -12
- package/std/os/linux/x86.zig +44 -15
- package/std/os/linux/x86_64.zig +41 -12
- package/std/os/linux.zig +416 -450
- package/std/os/plan9.zig +1 -1
- package/std/os/uefi/hii.zig +1 -1
- package/std/os/uefi/tables/boot_services.zig +9 -8
- package/std/os/uefi/tables/runtime_services.zig +1 -1
- package/std/os/windows.zig +130 -1
- package/std/os.zig +41 -0
- package/std/posix.zig +1 -1
- package/std/process/Environ.zig +1 -1
- package/std/process.zig +5 -4
- package/std/simd.zig +4 -21
- package/std/sort.zig +3 -3
- package/std/start.zig +17 -4
- package/std/std.zig +8 -1
- package/std/tar/Writer.zig +39 -33
- package/std/tar.zig +8 -4
- package/std/testing.zig +2 -2
- package/std/unicode.zig +13 -8
- package/std/zig/Ast/Render.zig +6 -30
- package/std/zig/Ast.zig +12 -37
- package/std/zig/AstGen.zig +175 -332
- package/std/zig/AstRlAnnotate.zig +1 -22
- package/std/zig/AstSmith.zig +5 -11
- package/std/zig/BuiltinFn.zig +0 -32
- package/std/zig/ErrorBundle.zig +6 -2
- package/std/zig/LibCInstallation.zig +34 -12
- package/std/zig/Parse.zig +11 -76
- package/std/zig/TokenSmith.zig +0 -6
- package/std/zig/WindowsSdk.zig +18 -18
- package/std/zig/Zir.zig +65 -132
- package/std/zig/ZonGen.zig +19 -27
- package/std/zig/llvm/Builder.zig +39 -33
- package/std/zig/llvm/bitcode_writer.zig +3 -3
- package/std/zig/llvm/ir.zig +8 -8
- package/std/zig/system/arm.zig +56 -2
- package/std/zig/system/windows.zig +34 -1
- package/std/zig/system/x86.zig +60 -16
- package/std/zig/system.zig +0 -10
- package/std/zig/target.zig +1 -4
- package/std/zig/tokenizer.zig +4 -43
- package/std/zig.zig +3 -14
- package/std/zip.zig +5 -5
- package/std/zon/parse.zig +1 -1
- package/zig.h +340 -1
- package/compiler_rt/long_double.zig +0 -37
- package/include/amxbf16transposeintrin.h +0 -94
- package/include/amxcomplextransposeintrin.h +0 -303
- package/include/amxfp16transposeintrin.h +0 -94
- package/include/amxmovrstransposeintrin.h +0 -200
- package/include/amxtf32transposeintrin.h +0 -105
- package/include/amxtransposeintrin.h +0 -248
- package/libc/include/hexagon-linux-any/asm/signal.h +0 -29
- package/libc/include/s390x-linux-any/asm/tape390.h +0 -103
- package/libc/mingw/math/lrintl.c +0 -18
- package/libc/mingw/math/rintl.c +0 -16
- package/libc/mingw/winpthreads/spinlock.c +0 -82
- package/libc/musl/src/linux/tee.c +0 -8
- package/libc/musl/src/math/i386/lrintl.c +0 -8
- package/libc/musl/src/math/i386/rintl.c +0 -7
- package/libc/musl/src/math/lrintl.c +0 -36
- package/libc/musl/src/math/rintl.c +0 -29
- package/libc/musl/src/math/s390x/rintl.c +0 -15
- package/libc/musl/src/math/x32/lrintl.s +0 -7
- package/libc/musl/src/math/x32/rintl.s +0 -6
- package/libc/musl/src/math/x86_64/lrintl.c +0 -8
- package/libc/musl/src/math/x86_64/rintl.c +0 -7
- package/libc/musl/src/string/strdup.c +0 -10
- package/libc/musl/src/string/strndup.c +0 -12
- package/libc/musl/src/string/wcsdup.c +0 -10
- package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
- package/libc/musl/src/thread/pthread_spin_init.c +0 -6
- package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
- package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
- package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
- package/libc/musl/src/unistd/dup2.c +0 -20
- package/libc/musl/src/unistd/dup3.c +0 -26
- package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
- package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
- package/std/Build/Step/CheckObject.zig +0 -2764
- /package/std/{builtin → lang}/assembly.zig +0 -0
|
@@ -88,15 +88,33 @@ void ThreadFinalize(ThreadState *thr) {
|
|
|
88
88
|
#if !SANITIZER_GO
|
|
89
89
|
if (!ShouldReport(thr, ReportTypeThreadLeak))
|
|
90
90
|
return;
|
|
91
|
-
ThreadRegistryLock l(&ctx->thread_registry);
|
|
92
91
|
Vector<ThreadLeak> leaks;
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
{
|
|
93
|
+
ThreadRegistryLock l(&ctx->thread_registry);
|
|
94
|
+
ctx->thread_registry.RunCallbackForEachThreadLocked(CollectThreadLeaks,
|
|
95
|
+
&leaks);
|
|
96
|
+
}
|
|
97
|
+
|
|
95
98
|
for (uptr i = 0; i < leaks.Size(); i++) {
|
|
96
|
-
|
|
97
|
-
rep
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
// Use alloca, because malloc during signal handling deadlocks
|
|
100
|
+
ScopedReport *rep = (ScopedReport *)__builtin_alloca(sizeof(ScopedReport));
|
|
101
|
+
// Take a new scope as Apple platforms require the below locks released
|
|
102
|
+
// before symbolizing in order to avoid a deadlock
|
|
103
|
+
{
|
|
104
|
+
ThreadRegistryLock l(&ctx->thread_registry);
|
|
105
|
+
new (rep) ScopedReport(ReportTypeThreadLeak);
|
|
106
|
+
rep->AddThread(leaks[i].tctx, true);
|
|
107
|
+
rep->SetCount(leaks[i].count);
|
|
108
|
+
# if SANITIZER_APPLE
|
|
109
|
+
} // Close this scope to release the locks
|
|
110
|
+
# endif
|
|
111
|
+
OutputReport(thr, *rep);
|
|
112
|
+
|
|
113
|
+
// Need to manually destroy this because we used placement new to allocate
|
|
114
|
+
rep->~ScopedReport();
|
|
115
|
+
# if !SANITIZER_APPLE
|
|
116
|
+
}
|
|
117
|
+
# endif
|
|
100
118
|
}
|
|
101
119
|
#endif
|
|
102
120
|
}
|
|
@@ -149,7 +167,7 @@ struct OnStartedArgs {
|
|
|
149
167
|
uptr tls_size;
|
|
150
168
|
};
|
|
151
169
|
|
|
152
|
-
void ThreadStart(ThreadState *thr, Tid tid,
|
|
170
|
+
void ThreadStart(ThreadState *thr, Tid tid, ThreadID os_id,
|
|
153
171
|
ThreadType thread_type) {
|
|
154
172
|
ctx->thread_registry.StartThread(tid, os_id, thread_type, thr);
|
|
155
173
|
if (!thr->ignore_sync) {
|
|
@@ -188,10 +206,14 @@ void ThreadStart(ThreadState *thr, Tid tid, tid_t os_id,
|
|
|
188
206
|
}
|
|
189
207
|
#endif
|
|
190
208
|
|
|
191
|
-
#if !SANITIZER_GO
|
|
209
|
+
#if !SANITIZER_GO && !SANITIZER_ANDROID
|
|
192
210
|
// Don't imitate stack/TLS writes for the main thread,
|
|
193
211
|
// because its initialization is synchronized with all
|
|
194
212
|
// subsequent threads anyway.
|
|
213
|
+
// Because thr is created by MmapOrDie, the thr object
|
|
214
|
+
// is not in tls, the pointer to the thr object is in
|
|
215
|
+
// TLS_SLOT_SANITIZER slot. So skip this check on
|
|
216
|
+
// Android platform.
|
|
195
217
|
if (tid != kMainTid) {
|
|
196
218
|
if (stk_addr && stk_size) {
|
|
197
219
|
const uptr pc = StackTrace::GetNextInstructionPc(
|
|
@@ -79,7 +79,7 @@ static void AddFrame(void *ctx, const char *function_name, const char *file,
|
|
|
79
79
|
info->column = column;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
SymbolizedStack
|
|
82
|
+
SymbolizedStack* SymbolizeCode(uptr addr, bool leaf) {
|
|
83
83
|
// Check if PC comes from non-native land.
|
|
84
84
|
if (addr & kExternalPCBit) {
|
|
85
85
|
SymbolizedStackBuilder ssb = {nullptr, nullptr, addr};
|
package/libtsan/tsan_symbolize.h
CHANGED
package/libtsan/tsan_trace.h
CHANGED
|
@@ -190,7 +190,7 @@ struct Trace {
|
|
|
190
190
|
Mutex mtx;
|
|
191
191
|
IList<TraceHeader, &TraceHeader::trace_parts, TracePart> parts;
|
|
192
192
|
// First node non-queued into ctx->trace_part_recycle.
|
|
193
|
-
TracePart* local_head;
|
|
193
|
+
TracePart* local_head = nullptr;
|
|
194
194
|
// Final position in the last part for finished threads.
|
|
195
195
|
Event* final_pos = nullptr;
|
|
196
196
|
// Number of trace parts allocated on behalf of this trace specifically.
|
|
@@ -73,11 +73,11 @@
|
|
|
73
73
|
# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC
|
|
74
74
|
# elif defined(__aarch64__)
|
|
75
75
|
# define _LIBUNWIND_TARGET_AARCH64 1
|
|
76
|
-
#
|
|
76
|
+
#define _LIBUNWIND_CONTEXT_SIZE 67
|
|
77
77
|
# if defined(__SEH__)
|
|
78
78
|
# define _LIBUNWIND_CURSOR_SIZE 164
|
|
79
79
|
# else
|
|
80
|
-
#
|
|
80
|
+
#define _LIBUNWIND_CURSOR_SIZE 79
|
|
81
81
|
# endif
|
|
82
82
|
# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64
|
|
83
83
|
# elif defined(__arm__)
|
|
@@ -212,4 +212,13 @@
|
|
|
212
212
|
# define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
|
|
213
213
|
#endif // _LIBUNWIND_IS_NATIVE_ONLY
|
|
214
214
|
|
|
215
|
+
#if defined(__has_feature)
|
|
216
|
+
# if __has_feature(ptrauth_calls) && __has_feature(ptrauth_returns)
|
|
217
|
+
# define _LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING 1
|
|
218
|
+
# elif __has_feature(ptrauth_calls) != __has_feature(ptrauth_returns)
|
|
219
|
+
# error "Either both or none of ptrauth_calls and ptrauth_returns "\
|
|
220
|
+
"is allowed to be enabled"
|
|
221
|
+
# endif
|
|
222
|
+
#endif
|
|
223
|
+
|
|
215
224
|
#endif // ____LIBUNWIND_CONFIG_H__
|
|
@@ -43,6 +43,109 @@
|
|
|
43
43
|
#define LIBUNWIND_AVAIL
|
|
44
44
|
#endif
|
|
45
45
|
|
|
46
|
+
#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
|
|
47
|
+
|
|
48
|
+
#include <ptrauth.h>
|
|
49
|
+
|
|
50
|
+
// `__ptrauth_restricted_intptr` is a feature of apple clang that predates
|
|
51
|
+
// support for direct application of `__ptrauth` to integer types. This
|
|
52
|
+
// guard is necessary to support compilation with those compiler.
|
|
53
|
+
#if __has_extension(ptrauth_restricted_intptr_qualifier)
|
|
54
|
+
#define __unwind_ptrauth_restricted_intptr(...) \
|
|
55
|
+
__ptrauth_restricted_intptr(__VA_ARGS__)
|
|
56
|
+
#else
|
|
57
|
+
#define __unwind_ptrauth_restricted_intptr(...) \
|
|
58
|
+
__ptrauth(__VA_ARGS__)
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
// ptrauth_string_discriminator("unw_proc_info_t::handler") == 0x7405
|
|
62
|
+
#define __ptrauth_unwind_upi_handler_disc 0x7405
|
|
63
|
+
|
|
64
|
+
#define __ptrauth_unwind_upi_handler \
|
|
65
|
+
__ptrauth(ptrauth_key_function_pointer, 1, __ptrauth_unwind_upi_handler_disc)
|
|
66
|
+
|
|
67
|
+
#define __ptrauth_unwind_upi_handler_intptr \
|
|
68
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1,\
|
|
69
|
+
__ptrauth_unwind_upi_handler_disc)
|
|
70
|
+
|
|
71
|
+
// ptrauth_string_discriminator("unw_proc_info_t::start_ip") == 0xCA2C
|
|
72
|
+
#define __ptrauth_unwind_upi_startip \
|
|
73
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 1, 0xCA2C)
|
|
74
|
+
|
|
75
|
+
// ptrauth_string_discriminator("unw_proc_info_t::end_ip") == 0xE183
|
|
76
|
+
#define __ptrauth_unwind_upi_endip \
|
|
77
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_independent_code, 1, 0xE183)
|
|
78
|
+
|
|
79
|
+
// ptrauth_string_discriminator("unw_proc_info_t::lsda") == 0x83DE
|
|
80
|
+
#define __ptrauth_unwind_upi_lsda \
|
|
81
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x83DE)
|
|
82
|
+
|
|
83
|
+
// ptrauth_string_discriminator("unw_proc_info_t::flags") == 0x79A1
|
|
84
|
+
#define __ptrauth_unwind_upi_flags \
|
|
85
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x79A1)
|
|
86
|
+
|
|
87
|
+
// ptrauth_string_discriminator("unw_proc_info_t::unwind_info") == 0xC20C
|
|
88
|
+
#define __ptrauth_unwind_upi_info \
|
|
89
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0xC20C)
|
|
90
|
+
|
|
91
|
+
// ptrauth_string_discriminator("unw_proc_info_t::extra") == 0x03DF
|
|
92
|
+
#define __ptrauth_unwind_upi_extra \
|
|
93
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x03DF)
|
|
94
|
+
|
|
95
|
+
// ptrauth_string_discriminator("Registers_arm64::link_reg_t") == 0x8301
|
|
96
|
+
#define __ptrauth_unwind_registers_arm64_link_reg \
|
|
97
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_code, 1, 0x8301)
|
|
98
|
+
|
|
99
|
+
// ptrauth_string_discriminator("UnwindInfoSections::dso_base") == 0x4FF5
|
|
100
|
+
#define __ptrauth_unwind_uis_dso_base \
|
|
101
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x4FF5)
|
|
102
|
+
|
|
103
|
+
// ptrauth_string_discriminator("UnwindInfoSections::dwarf_section") == 0x4974
|
|
104
|
+
#define __ptrauth_unwind_uis_dwarf_section \
|
|
105
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x4974)
|
|
106
|
+
|
|
107
|
+
// ptrauth_string_discriminator("UnwindInfoSections::dwarf_section_length") == 0x2A9A
|
|
108
|
+
#define __ptrauth_unwind_uis_dwarf_section_length \
|
|
109
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x2A9A)
|
|
110
|
+
|
|
111
|
+
// ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section") == 0xA27B
|
|
112
|
+
#define __ptrauth_unwind_uis_compact_unwind_section \
|
|
113
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0xA27B)
|
|
114
|
+
|
|
115
|
+
// ptrauth_string_discriminator("UnwindInfoSections::compact_unwind_section_length") == 0x5D0A
|
|
116
|
+
#define __ptrauth_unwind_uis_compact_unwind_section_length \
|
|
117
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_process_dependent_data, 1, 0x5D0A)
|
|
118
|
+
|
|
119
|
+
// ptrauth_string_discriminator("CIE_Info::personality") == 0x6A40
|
|
120
|
+
#define __ptrauth_unwind_cie_info_personality_disc 0x6A40
|
|
121
|
+
#define __ptrauth_unwind_cie_info_personality \
|
|
122
|
+
__unwind_ptrauth_restricted_intptr(ptrauth_key_function_pointer, 1, \
|
|
123
|
+
__ptrauth_unwind_cie_info_personality_disc)
|
|
124
|
+
|
|
125
|
+
// ptrauth_string_discriminator("personality") == 0x7EAD)
|
|
126
|
+
#define __ptrauth_unwind_pauthtest_personality_disc 0x7EAD
|
|
127
|
+
|
|
128
|
+
#else
|
|
129
|
+
|
|
130
|
+
#define __unwind_ptrauth_restricted_intptr(...)
|
|
131
|
+
#define __ptrauth_unwind_upi_handler
|
|
132
|
+
#define __ptrauth_unwind_upi_handler_intptr
|
|
133
|
+
#define __ptrauth_unwind_upi_startip
|
|
134
|
+
#define __ptrauth_unwind_upi_endip
|
|
135
|
+
#define __ptrauth_unwind_upi_lsda
|
|
136
|
+
#define __ptrauth_unwind_upi_flags
|
|
137
|
+
#define __ptrauth_unwind_upi_info
|
|
138
|
+
#define __ptrauth_unwind_upi_extra
|
|
139
|
+
#define __ptrauth_unwind_registers_arm64_link_reg
|
|
140
|
+
#define __ptrauth_unwind_uis_dso_base
|
|
141
|
+
#define __ptrauth_unwind_uis_dwarf_section
|
|
142
|
+
#define __ptrauth_unwind_uis_dwarf_section_length
|
|
143
|
+
#define __ptrauth_unwind_uis_compact_unwind_section
|
|
144
|
+
#define __ptrauth_unwind_uis_compact_unwind_section_length
|
|
145
|
+
#define __ptrauth_unwind_cie_info_personality
|
|
146
|
+
|
|
147
|
+
#endif
|
|
148
|
+
|
|
46
149
|
#if defined(_WIN32) && defined(__SEH__)
|
|
47
150
|
#define LIBUNWIND_CURSOR_ALIGNMENT_ATTR __attribute__((__aligned__(16)))
|
|
48
151
|
#else
|
|
@@ -88,17 +191,18 @@ typedef double unw_fpreg_t;
|
|
|
88
191
|
#endif
|
|
89
192
|
|
|
90
193
|
struct unw_proc_info_t {
|
|
91
|
-
unw_word_t
|
|
92
|
-
unw_word_t
|
|
93
|
-
unw_word_t
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
unw_word_t
|
|
97
|
-
unw_word_t
|
|
98
|
-
|
|
99
|
-
uint32_t
|
|
100
|
-
|
|
101
|
-
unw_word_t
|
|
194
|
+
unw_word_t __ptrauth_unwind_upi_startip start_ip; /* start address of function */
|
|
195
|
+
unw_word_t __ptrauth_unwind_upi_endip end_ip; /* address after end of function */
|
|
196
|
+
unw_word_t __ptrauth_unwind_upi_lsda lsda; /* address of language specific data area, */
|
|
197
|
+
/* or zero if not used */
|
|
198
|
+
|
|
199
|
+
unw_word_t __ptrauth_unwind_upi_handler_intptr handler;
|
|
200
|
+
unw_word_t gp; /* not used */
|
|
201
|
+
unw_word_t __ptrauth_unwind_upi_flags flags; /* not used */
|
|
202
|
+
uint32_t format; /* compact unwind encoding, or zero if none */
|
|
203
|
+
uint32_t unwind_info_size; /* size of DWARF unwind info, or zero if none */
|
|
204
|
+
unw_word_t __ptrauth_unwind_upi_info unwind_info; /* address of DWARF unwind info, or zero */
|
|
205
|
+
unw_word_t __ptrauth_unwind_upi_extra extra; /* mach_header of mach-o image containing func */
|
|
102
206
|
};
|
|
103
207
|
typedef struct unw_proc_info_t unw_proc_info_t;
|
|
104
208
|
|
|
@@ -130,6 +234,7 @@ extern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;
|
|
|
130
234
|
extern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL;
|
|
131
235
|
extern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL;
|
|
132
236
|
//extern int unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*);
|
|
237
|
+
extern const char *unw_strerror(int) LIBUNWIND_AVAIL;
|
|
133
238
|
|
|
134
239
|
extern unw_addr_space_t unw_local_addr_space;
|
|
135
240
|
|
|
@@ -532,6 +637,7 @@ enum {
|
|
|
532
637
|
UNW_AARCH64_X31 = 31,
|
|
533
638
|
UNW_AARCH64_SP = 31,
|
|
534
639
|
UNW_AARCH64_PC = 32,
|
|
640
|
+
UNW_AARCH64_VG = 46,
|
|
535
641
|
|
|
536
642
|
// reserved block
|
|
537
643
|
UNW_AARCH64_RA_SIGN_STATE = 34,
|
|
@@ -125,8 +125,11 @@ _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,
|
|
|
125
125
|
uint32_t discriminator,
|
|
126
126
|
_Unwind_VRS_DataRepresentation representation);
|
|
127
127
|
|
|
128
|
+
extern _Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception *,
|
|
129
|
+
_Unwind_Context *);
|
|
130
|
+
|
|
128
131
|
#if defined(_LIBUNWIND_UNWIND_LEVEL1_EXTERNAL_LINKAGE)
|
|
129
|
-
#define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern
|
|
132
|
+
#define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern __inline__
|
|
130
133
|
#else
|
|
131
134
|
#define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 static __inline__
|
|
132
135
|
#endif
|
|
@@ -129,22 +129,27 @@ struct UnwindInfoSections {
|
|
|
129
129
|
defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND) || \
|
|
130
130
|
defined(_LIBUNWIND_USE_DL_ITERATE_PHDR)
|
|
131
131
|
// No dso_base for SEH.
|
|
132
|
-
uintptr_t
|
|
132
|
+
uintptr_t __ptrauth_unwind_uis_dso_base
|
|
133
|
+
dso_base = 0;
|
|
133
134
|
#endif
|
|
134
135
|
#if defined(_LIBUNWIND_USE_DL_ITERATE_PHDR)
|
|
135
136
|
size_t text_segment_length;
|
|
136
137
|
#endif
|
|
137
138
|
#if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
|
|
138
|
-
uintptr_t
|
|
139
|
-
|
|
139
|
+
uintptr_t __ptrauth_unwind_uis_dwarf_section
|
|
140
|
+
dwarf_section = 0;
|
|
141
|
+
size_t __ptrauth_unwind_uis_dwarf_section_length
|
|
142
|
+
dwarf_section_length = 0;
|
|
140
143
|
#endif
|
|
141
144
|
#if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
|
|
142
145
|
uintptr_t dwarf_index_section;
|
|
143
146
|
size_t dwarf_index_section_length;
|
|
144
147
|
#endif
|
|
145
148
|
#if defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND)
|
|
146
|
-
uintptr_t
|
|
147
|
-
|
|
149
|
+
uintptr_t __ptrauth_unwind_uis_compact_unwind_section
|
|
150
|
+
compact_unwind_section = 0;
|
|
151
|
+
size_t __ptrauth_unwind_uis_compact_unwind_section_length
|
|
152
|
+
compact_unwind_section_length = 0;
|
|
148
153
|
#endif
|
|
149
154
|
#if defined(_LIBUNWIND_ARM_EHABI)
|
|
150
155
|
uintptr_t arm_section;
|
|
@@ -196,11 +201,16 @@ public:
|
|
|
196
201
|
static int64_t getSLEB128(pint_t &addr, pint_t end);
|
|
197
202
|
|
|
198
203
|
pint_t getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,
|
|
199
|
-
pint_t datarelBase = 0);
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
+
pint_t datarelBase = 0, pint_t *resultAddr = nullptr);
|
|
205
|
+
template <typename R>
|
|
206
|
+
bool findFunctionName(typename R::link_hardened_reg_arg_t addr, char *buf,
|
|
207
|
+
size_t bufLen, unw_word_t *offset);
|
|
208
|
+
template <typename R>
|
|
209
|
+
bool findUnwindSections(typename R::link_hardened_reg_arg_t targetAddr,
|
|
210
|
+
UnwindInfoSections &info);
|
|
211
|
+
template <typename R>
|
|
212
|
+
bool findOtherFDE(typename R::link_hardened_reg_arg_t targetAddr,
|
|
213
|
+
pint_t &fde);
|
|
204
214
|
|
|
205
215
|
static LocalAddressSpace sThisAddressSpace;
|
|
206
216
|
};
|
|
@@ -269,7 +279,7 @@ inline int64_t LocalAddressSpace::getSLEB128(pint_t &addr, pint_t end) {
|
|
|
269
279
|
|
|
270
280
|
inline LocalAddressSpace::pint_t
|
|
271
281
|
LocalAddressSpace::getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,
|
|
272
|
-
pint_t datarelBase) {
|
|
282
|
+
pint_t datarelBase, pint_t *resultAddr) {
|
|
273
283
|
pint_t startAddr = addr;
|
|
274
284
|
const uint8_t *p = (uint8_t *)addr;
|
|
275
285
|
pint_t result;
|
|
@@ -353,8 +363,14 @@ LocalAddressSpace::getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,
|
|
|
353
363
|
break;
|
|
354
364
|
}
|
|
355
365
|
|
|
356
|
-
if (encoding & DW_EH_PE_indirect)
|
|
366
|
+
if (encoding & DW_EH_PE_indirect) {
|
|
367
|
+
if (resultAddr)
|
|
368
|
+
*resultAddr = result;
|
|
357
369
|
result = getP(result);
|
|
370
|
+
} else {
|
|
371
|
+
if (resultAddr)
|
|
372
|
+
*resultAddr = startAddr;
|
|
373
|
+
}
|
|
358
374
|
|
|
359
375
|
return result;
|
|
360
376
|
}
|
|
@@ -486,9 +502,9 @@ static int findUnwindSectionsByPhdr(struct dl_phdr_info *pinfo,
|
|
|
486
502
|
|
|
487
503
|
#endif // defined(_LIBUNWIND_USE_DL_ITERATE_PHDR)
|
|
488
504
|
|
|
489
|
-
|
|
490
|
-
inline bool LocalAddressSpace::findUnwindSections(
|
|
491
|
-
|
|
505
|
+
template <typename R>
|
|
506
|
+
inline bool LocalAddressSpace::findUnwindSections(
|
|
507
|
+
typename R::link_hardened_reg_arg_t targetAddr, UnwindInfoSections &info) {
|
|
492
508
|
#ifdef __APPLE__
|
|
493
509
|
dyld_unwind_sections dyldInfo;
|
|
494
510
|
if (_dyld_find_unwind_sections((void *)targetAddr, &dyldInfo)) {
|
|
@@ -650,7 +666,8 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,
|
|
|
650
666
|
return true;
|
|
651
667
|
}
|
|
652
668
|
#endif
|
|
653
|
-
|
|
669
|
+
// zig patch: https://github.com/llvm/llvm-project/issues/194228
|
|
670
|
+
dl_iterate_cb_data cb_data = {this, &info, static_cast<pint_t>(targetAddr)};
|
|
654
671
|
int found = dl_iterate_phdr(findUnwindSectionsByPhdr, &cb_data);
|
|
655
672
|
return static_cast<bool>(found);
|
|
656
673
|
#endif
|
|
@@ -658,16 +675,21 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,
|
|
|
658
675
|
return false;
|
|
659
676
|
}
|
|
660
677
|
|
|
661
|
-
|
|
678
|
+
template <typename R>
|
|
679
|
+
inline bool
|
|
680
|
+
LocalAddressSpace::findOtherFDE(typename R::link_hardened_reg_arg_t targetAddr,
|
|
681
|
+
pint_t &fde) {
|
|
662
682
|
// TO DO: if OS has way to dynamically register FDEs, check that.
|
|
663
683
|
(void)targetAddr;
|
|
664
684
|
(void)fde;
|
|
665
685
|
return false;
|
|
666
686
|
}
|
|
667
687
|
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
688
|
+
template <typename R>
|
|
689
|
+
inline bool
|
|
690
|
+
LocalAddressSpace::findFunctionName(typename R::link_hardened_reg_arg_t addr,
|
|
691
|
+
char *buf, size_t bufLen,
|
|
692
|
+
unw_word_t *offset) {
|
|
671
693
|
#if _LIBUNWIND_USE_DLADDR
|
|
672
694
|
Dl_info dyldInfo;
|
|
673
695
|
if (dladdr((void *)addr, &dyldInfo)) {
|
|
@@ -601,11 +601,17 @@ int CompactUnwinder_arm64<A>::stepWithCompactEncodingFrameless(
|
|
|
601
601
|
savedRegisterLoc -= 8;
|
|
602
602
|
}
|
|
603
603
|
|
|
604
|
+
// We load the link register prior to setting the new SP as the authentication
|
|
605
|
+
// schema for LR entangles the SP of the old frame into the diversifier.
|
|
606
|
+
Registers_arm64::reg_t linkRegister = registers.getRegister(UNW_AARCH64_LR);
|
|
607
|
+
|
|
604
608
|
// subtract stack size off of sp
|
|
605
609
|
registers.setSP(savedRegisterLoc);
|
|
606
610
|
|
|
607
|
-
//
|
|
608
|
-
|
|
611
|
+
// Set pc to be value in lr. This needs to be performed after the new SP has
|
|
612
|
+
// been set, as the PC authentication schema entangles the SP of the new
|
|
613
|
+
// frame.
|
|
614
|
+
registers.setIP(linkRegister);
|
|
609
615
|
|
|
610
616
|
return UNW_STEP_SUCCESS;
|
|
611
617
|
}
|
|
@@ -614,7 +620,7 @@ template <typename A>
|
|
|
614
620
|
int CompactUnwinder_arm64<A>::stepWithCompactEncodingFrame(
|
|
615
621
|
compact_unwind_encoding_t encoding, uint64_t, A &addressSpace,
|
|
616
622
|
Registers_arm64 ®isters) {
|
|
617
|
-
|
|
623
|
+
Registers_arm64::reg_t savedRegisterLoc = registers.getFP() - 8;
|
|
618
624
|
|
|
619
625
|
if (encoding & UNWIND_ARM64_FRAME_X19_X20_PAIR) {
|
|
620
626
|
registers.setRegister(UNW_AARCH64_X19, addressSpace.get64(savedRegisterLoc));
|
|
@@ -680,11 +686,16 @@ int CompactUnwinder_arm64<A>::stepWithCompactEncodingFrame(
|
|
|
680
686
|
savedRegisterLoc -= 8;
|
|
681
687
|
}
|
|
682
688
|
|
|
683
|
-
|
|
689
|
+
Registers_arm64::reg_t fp = registers.getFP();
|
|
690
|
+
|
|
684
691
|
// fp points to old fp
|
|
685
692
|
registers.setFP(addressSpace.get64(fp));
|
|
686
|
-
|
|
693
|
+
|
|
694
|
+
// Old sp is fp less saved fp and lr. We need to set this prior to setting
|
|
695
|
+
// the lr as the pointer authentication schema for the lr incorporates the
|
|
696
|
+
// sp as part of the diversifier.
|
|
687
697
|
registers.setSP(fp + 16);
|
|
698
|
+
|
|
688
699
|
// pop return address into pc
|
|
689
700
|
registers.setIP(addressSpace.get64(fp + 8));
|
|
690
701
|
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
#include "dwarf2.h"
|
|
23
23
|
#include "libunwind_ext.h"
|
|
24
24
|
|
|
25
|
-
|
|
26
25
|
namespace libunwind {
|
|
27
26
|
|
|
28
27
|
|
|
@@ -34,8 +33,10 @@ public:
|
|
|
34
33
|
typedef typename A::pint_t pint_t;
|
|
35
34
|
typedef typename A::sint_t sint_t;
|
|
36
35
|
|
|
37
|
-
static int stepWithDwarf(A &addressSpace,
|
|
38
|
-
R
|
|
36
|
+
static int stepWithDwarf(A &addressSpace,
|
|
37
|
+
typename R::link_hardened_reg_arg_t pc,
|
|
38
|
+
pint_t fdeStart, R ®isters, bool &isSignalFrame,
|
|
39
|
+
bool stage2);
|
|
39
40
|
|
|
40
41
|
private:
|
|
41
42
|
|
|
@@ -64,9 +65,10 @@ private:
|
|
|
64
65
|
|
|
65
66
|
static pint_t getCFA(A &addressSpace, const PrologInfo &prolog,
|
|
66
67
|
const R ®isters) {
|
|
67
|
-
if (prolog.cfaRegister != 0)
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
if (prolog.cfaRegister != 0) {
|
|
69
|
+
uintptr_t cfaRegister = registers.getRegister((int)prolog.cfaRegister);
|
|
70
|
+
return (pint_t)(cfaRegister + prolog.cfaRegisterOffset);
|
|
71
|
+
}
|
|
70
72
|
if (prolog.cfaExpression != 0)
|
|
71
73
|
return evaluateExpression((pint_t)prolog.cfaExpression, addressSpace,
|
|
72
74
|
registers, 0);
|
|
@@ -207,16 +209,16 @@ bool DwarfInstructions<A, R>::isReturnAddressSignedWithPC(A &addressSpace,
|
|
|
207
209
|
#endif
|
|
208
210
|
|
|
209
211
|
template <typename A, typename R>
|
|
210
|
-
int DwarfInstructions<A, R>::stepWithDwarf(
|
|
211
|
-
|
|
212
|
-
|
|
212
|
+
int DwarfInstructions<A, R>::stepWithDwarf(
|
|
213
|
+
A &addressSpace, typename R::link_hardened_reg_arg_t pc, pint_t fdeStart,
|
|
214
|
+
R ®isters, bool &isSignalFrame, bool stage2) {
|
|
213
215
|
FDE_Info fdeInfo;
|
|
214
216
|
CIE_Info cieInfo;
|
|
215
217
|
if (CFI_Parser<A>::decodeFDE(addressSpace, fdeStart, &fdeInfo,
|
|
216
218
|
&cieInfo) == NULL) {
|
|
217
219
|
PrologInfo prolog;
|
|
218
|
-
if (CFI_Parser<A>::parseFDEInstructions(
|
|
219
|
-
|
|
220
|
+
if (CFI_Parser<A>::template parseFDEInstructions<R>(
|
|
221
|
+
addressSpace, fdeInfo, cieInfo, pc, R::getArch(), &prolog)) {
|
|
220
222
|
// get pointer to cfa (architecture specific)
|
|
221
223
|
pint_t cfa = getCFA(addressSpace, prolog, registers);
|
|
222
224
|
|
|
@@ -264,7 +266,7 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
|
|
|
264
266
|
// by a CFI directive later on.
|
|
265
267
|
newRegisters.setSP(cfa);
|
|
266
268
|
|
|
267
|
-
|
|
269
|
+
typename R::reg_t returnAddress = 0;
|
|
268
270
|
constexpr int lastReg = R::lastDwarfRegNum();
|
|
269
271
|
static_assert(static_cast<int>(CFI_Parser<A>::kMaxRegisterNumber) >=
|
|
270
272
|
lastReg,
|
|
@@ -300,7 +302,16 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
|
|
|
300
302
|
|
|
301
303
|
isSignalFrame = cieInfo.isSignalFrame;
|
|
302
304
|
|
|
303
|
-
#if defined(_LIBUNWIND_TARGET_AARCH64)
|
|
305
|
+
#if defined(_LIBUNWIND_TARGET_AARCH64) && \
|
|
306
|
+
!defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
|
|
307
|
+
// There are two ways of return address signing: pac-ret (enabled via
|
|
308
|
+
// -mbranch-protection=pac-ret) and ptrauth-returns (enabled as part of
|
|
309
|
+
// Apple's arm64e or experimental pauthtest ABI on Linux). The code
|
|
310
|
+
// below handles signed RA for pac-ret, while ptrauth-returns uses
|
|
311
|
+
// different logic.
|
|
312
|
+
// TODO: unify logic for both cases, see
|
|
313
|
+
// https://github.com/llvm/llvm-project/issues/160110
|
|
314
|
+
//
|
|
304
315
|
// If the target is aarch64 then the return address may have been signed
|
|
305
316
|
// using the v8.3 pointer authentication extensions. The original
|
|
306
317
|
// return address needs to be authenticated before the return address is
|