From d25d71ff316bc2b0b28eaad7b42e9c19e8baa2d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?=
Date: Thu, 10 Oct 2024 17:30:09 +0200
Subject: [PATCH 1/2] update zig sources to 0.14.0-dev.1876+41dbd0d0d
---
README.md | 2 +-
build | 2 +-
build.bat | 2 +-
zig/CMakeLists.txt | 6 +-
zig/README.md | 2 +-
zig/bootstrap.c | 4 +-
zig/build.zig | 4 +
zig/doc/langref.html.in | 34 +-
zig/lib/compiler/aro/aro/Compilation.zig | 2 +-
zig/lib/compiler/aro/aro/target.zig | 23 +-
zig/lib/compiler/fmt.zig | 1 +
zig/lib/compiler/objcopy.zig | 343 ++-
zig/lib/compiler_rt/aulldiv.zig | 3 +-
zig/lib/compiler_rt/aullrem.zig | 3 +-
zig/lib/compiler_rt/common.zig | 26 +-
zig/lib/compiler_rt/emutls.zig | 2 +-
zig/lib/compiler_rt/fixdfdi.zig | 5 +
zig/lib/compiler_rt/fixsfdi.zig | 5 +
zig/lib/compiler_rt/fixunsdfdi.zig | 5 +
zig/lib/compiler_rt/fixunssfdi.zig | 5 +
zig/lib/compiler_rt/floatdidf.zig | 5 +
zig/lib/compiler_rt/floatdisf.zig | 5 +
zig/lib/compiler_rt/floatundidf.zig | 5 +
zig/lib/compiler_rt/floatundisf.zig | 5 +
zig/lib/libc/glibc/abilists | Bin 274738 -> 246035 bytes
zig/lib/libc/glibc/sysdeps/mips/mips32/crtn.S | 6 +-
.../libc/glibc/sysdeps/mips/mips64/n32/crtn.S | 6 +-
.../libc/glibc/sysdeps/mips/mips64/n64/crtn.S | 6 +-
zig/lib/libc/glibc/sysdeps/unix/mips/sysdep.h | 3 +-
.../loongarch64-linux-gnusf/bits/endianness.h | 11 +
.../loongarch64-linux-gnusf/bits/fcntl.h | 61 +
.../loongarch64-linux-gnusf/bits/fenv.h | 90 +
.../loongarch64-linux-gnusf/bits/hwcap.h | 38 +
.../loongarch64-linux-gnusf/bits/link.h | 76 +
.../bits/link_lavcurrent.h | 25 +
.../bits/long-double.h | 21 +
.../loongarch64-linux-gnusf/bits/procfs.h | 52 +
.../bits/pthread_stack_min.h | 20 +
.../loongarch64-linux-gnusf/bits/setjmp.h | 42 +
.../loongarch64-linux-gnusf/bits/shmlba.h | 24 +
.../loongarch64-linux-gnusf/bits/sigstack.h | 32 +
.../bits/struct_stat.h | 127 ++
.../loongarch64-linux-gnusf/bits/timesize.h | 20 +
.../loongarch64-linux-gnusf/bits/wordsize.h | 19 +
.../loongarch64-linux-gnusf/fpu_control.h | 119 ++
.../gnu/lib-names-lp64s.h | 27 +
.../loongarch64-linux-gnusf/gnu/lib-names.h | 16 +
.../loongarch64-linux-gnusf/gnu/stubs-lp64s.h | 38 +
.../loongarch64-linux-gnusf/gnu/stubs.h | 12 +
.../include/loongarch64-linux-gnusf/ieee754.h | 170 ++
.../include/loongarch64-linux-gnusf/sys/asm.h | 78 +
.../loongarch64-linux-gnusf/sys/ucontext.h | 64 +
.../loongarch64-linux-gnusf/sys/user.h | 42 +
zig/lib/libc/musl/crt/arm/crti.s | 2 +
zig/lib/libc/musl/crt/mips/crtn.s | 6 +-
zig/lib/libc/musl/crt/mips64/crtn.s | 6 +-
zig/lib/libunwind/src/gcc_personality_v0.c | 36 +-
zig/lib/std/Build.zig | 213 +-
zig/lib/std/Build/Cache.zig | 7 +
zig/lib/std/Build/Cache/Path.zig | 24 +-
zig/lib/std/Build/Module.zig | 69 +-
zig/lib/std/Build/Step/CheckObject.zig | 44 +-
zig/lib/std/Build/Step/Compile.zig | 12 +
zig/lib/std/Build/Step/ObjCopy.zig | 80 +
zig/lib/std/Build/Step/TranslateC.zig | 49 +-
zig/lib/std/Build/Watch.zig | 7 +-
zig/lib/std/Target.zig | 662 ++++--
zig/lib/std/Target/Query.zig | 2 +-
zig/lib/std/Target/aarch64.zig | 86 +-
zig/lib/std/Target/arm.zig | 1 -
zig/lib/std/Target/lanai.zig | 37 +
zig/lib/std/Target/propeller.zig | 20 +
zig/lib/std/Target/xcore.zig | 37 +
zig/lib/std/Thread.zig | 77 +
zig/lib/std/Thread/Futex.zig | 21 +-
zig/lib/std/Thread/ResetEvent.zig | 8 +-
zig/lib/std/Thread/WaitGroup.zig | 3 +-
zig/lib/std/atomic.zig | 48 +-
zig/lib/std/bit_set.zig | 3 -
zig/lib/std/builtin.zig | 243 +--
zig/lib/std/c.zig | 99 +-
zig/lib/std/c/darwin.zig | 3 +-
zig/lib/std/crypto/tls.zig | 4 +-
zig/lib/std/crypto/tls/Client.zig | 14 +-
zig/lib/std/debug.zig | 168 +-
zig/lib/std/debug/FormattedPanic.zig | 45 +
zig/lib/std/debug/SimplePanic.zig | 86 +
zig/lib/std/elf.zig | 112 +-
zig/lib/std/fmt.zig | 12 +-
zig/lib/std/fs/Dir.zig | 7 +
zig/lib/std/fs/test.zig | 30 +
zig/lib/std/heap.zig | 2 -
zig/lib/std/http/test.zig | 5 +
zig/lib/std/io.zig | 192 +-
zig/lib/std/io/Reader/test.zig | 3 +-
zig/lib/std/io/buffered_reader.zig | 72 +-
zig/lib/std/math/float.zig | 3 -
zig/lib/std/math/gcd.zig | 59 +-
zig/lib/std/math/isnan.zig | 8 +-
zig/lib/std/mem.zig | 4 -
zig/lib/std/meta.zig | 11 +-
zig/lib/std/os/linux.zig | 115 +-
zig/lib/std/os/linux/IoUring.zig | 8 +-
.../std/os/linux/{arm64.zig => aarch64.zig} | 0
.../std/os/linux/{arm-eabi.zig => arm.zig} | 0
zig/lib/std/os/linux/hexagon.zig | 254 +++
.../std/os/linux/{start_pie.zig => pie.zig} | 0
zig/lib/std/os/linux/powerpc64.zig | 10 +-
zig/lib/std/os/linux/s390x.zig | 276 +++
zig/lib/std/os/linux/syscalls.zig | 4 +-
zig/lib/std/os/linux/thumb.zig | 2 +-
zig/lib/std/os/linux/tls.zig | 14 +-
zig/lib/std/os/uefi/pool_allocator.zig | 7 +-
zig/lib/std/os/wasi.zig | 42 +
zig/lib/std/os/windows.zig | 3 +
zig/lib/std/os/windows/tls.zig | 2 +-
zig/lib/std/posix.zig | 25 +-
zig/lib/std/posix/test.zig | 5 +
zig/lib/std/process/Child.zig | 4 +-
zig/lib/std/sort.zig | 37 +-
zig/lib/std/start.zig | 6 +-
zig/lib/std/tar.zig | 1 +
zig/lib/std/tar/writer.zig | 10 +-
zig/lib/std/time.zig | 82 +-
zig/lib/std/zig.zig | 1 -
zig/lib/std/zig/AstGen.zig | 19 +-
zig/lib/std/zig/AstRlAnnotate.zig | 1 -
zig/lib/std/zig/BuiltinFn.zig | 8 -
zig/lib/std/zig/LibCDirs.zig | 21 +-
zig/lib/std/zig/LibCInstallation.zig | 332 ++-
zig/lib/std/zig/Zir.zig | 18 +-
zig/lib/std/zig/system.zig | 19 +-
zig/lib/std/zig/target.zig | 1 +
zig/lib/std/zig/tokenizer.zig | 3 +
zig/lib/tsan/builtins/assembly.h | 293 +++
zig/lib/tsan/interception/interception.h | 29 +-
.../tsan/interception/interception_linux.h | 16 +-
.../tsan/interception/interception_win.cpp | 83 +-
.../sanitizer_common/sanitizer_allocator.cpp | 10 +-
.../sanitizer_allocator_interface.h | 2 +
.../sanitizer_allocator_primary32.h | 2 +-
.../sanitizer_allocator_primary64.h | 16 +-
zig/lib/tsan/sanitizer_common/sanitizer_asm.h | 43 +-
.../tsan/sanitizer_common/sanitizer_atomic.h | 14 +-
.../sanitizer_common/sanitizer_atomic_clang.h | 85 +-
.../sanitizer_atomic_clang_mips.h | 117 --
.../sanitizer_atomic_clang_other.h | 85 -
.../sanitizer_atomic_clang_x86.h | 113 -
.../sanitizer_common/sanitizer_atomic_msvc.h | 8 +-
.../sanitizer_common/sanitizer_bitvector.h | 8 +-
.../sanitizer_chained_origin_depot.cpp | 6 +-
.../sanitizer_chained_origin_depot.h | 4 +-
.../sanitizer_common/sanitizer_common.cpp | 20 +-
.../tsan/sanitizer_common/sanitizer_common.h | 45 +-
.../sanitizer_common_interceptors.inc | 203 +-
.../sanitizer_common_interceptors_format.inc | 15 +-
.../sanitizer_common_interface.inc | 1 +
.../sanitizer_common_interface_posix.inc | 1 +
.../sanitizer_common_libcdep.cpp | 10 +-
.../sanitizer_common_syscalls.inc | 35 +
.../tsan/sanitizer_common/sanitizer_dl.cpp | 37 +
zig/lib/tsan/sanitizer_common/sanitizer_dl.h | 26 +
.../tsan/sanitizer_common/sanitizer_file.cpp | 4 +-
.../tsan/sanitizer_common/sanitizer_file.h | 2 +-
.../sanitizer_flag_parser.cpp | 7 +-
.../sanitizer_common/sanitizer_flag_parser.h | 4 +-
.../tsan/sanitizer_common/sanitizer_flags.cpp | 4 +-
.../tsan/sanitizer_common/sanitizer_flags.inc | 13 +
.../sanitizer_common/sanitizer_flat_map.h | 4 +
.../tsan/sanitizer_common/sanitizer_freebsd.h | 137 --
.../sanitizer_common/sanitizer_fuchsia.cpp | 107 +-
.../tsan/sanitizer_common/sanitizer_hash.h | 2 +-
.../sanitizer_internal_defs.h | 34 +-
.../tsan/sanitizer_common/sanitizer_libc.cpp | 16 +
.../tsan/sanitizer_common/sanitizer_libc.h | 3 +-
.../sanitizer_common/sanitizer_libignore.cpp | 4 +-
.../tsan/sanitizer_common/sanitizer_linux.cpp | 1842 +++++++++--------
.../tsan/sanitizer_common/sanitizer_linux.h | 114 +-
.../sanitizer_linux_libcdep.cpp | 483 ++---
.../sanitizer_common/sanitizer_linux_s390.cpp | 164 +-
.../tsan/sanitizer_common/sanitizer_mac.cpp | 8 +-
.../sanitizer_common/sanitizer_mallinfo.h | 4 +
.../sanitizer_common/sanitizer_malloc_mac.inc | 2 +-
.../tsan/sanitizer_common/sanitizer_mutex.cpp | 6 +-
.../sanitizer_placement_new.h | 4 +-
.../sanitizer_common/sanitizer_platform.h | 24 +-
.../sanitizer_platform_interceptors.h | 16 +-
.../sanitizer_platform_limits_freebsd.cpp | 2 +
.../sanitizer_platform_limits_freebsd.h | 24 +-
.../sanitizer_platform_limits_openbsd.cpp | 0
.../sanitizer_platform_limits_openbsd.h | 0
.../sanitizer_platform_limits_posix.h | 1 +
.../tsan/sanitizer_common/sanitizer_posix.cpp | 12 +-
.../tsan/sanitizer_common/sanitizer_posix.h | 28 +-
.../sanitizer_posix_libcdep.cpp | 33 +-
.../sanitizer_common/sanitizer_printf.cpp | 11 +-
.../sanitizer_procmaps_bsd.cpp | 47 +-
.../sanitizer_procmaps_common.cpp | 2 +-
.../tsan/sanitizer_common/sanitizer_ptrauth.h | 46 +-
.../sanitizer_redefine_builtins.h | 16 +-
.../sanitizer_common/sanitizer_ring_buffer.h | 4 +-
.../sanitizer_stack_store.cpp | 9 +-
.../sanitizer_common/sanitizer_stackdepot.cpp | 8 +-
.../sanitizer_common/sanitizer_stackdepot.h | 4 +-
.../sanitizer_stackdepotbase.h | 31 +-
.../sanitizer_stacktrace_libcdep.cpp | 42 +-
.../sanitizer_stacktrace_printer.cpp | 133 +-
.../sanitizer_stacktrace_printer.h | 143 +-
.../sanitizer_stacktrace_sparc.cpp | 11 +-
.../sanitizer_stoptheworld_linux_libcdep.cpp | 10 +-
.../sanitizer_stoptheworld_netbsd_libcdep.cpp | 4 +-
.../sanitizer_suppressions.cpp | 7 +-
.../sanitizer_common/sanitizer_symbolizer.cpp | 5 +-
.../sanitizer_common/sanitizer_symbolizer.h | 27 +-
.../sanitizer_symbolizer_internal.h | 9 +
.../sanitizer_symbolizer_libbacktrace.cpp | 2 +-
.../sanitizer_symbolizer_libcdep.cpp | 20 +-
.../sanitizer_symbolizer_mac.cpp | 5 +-
.../sanitizer_symbolizer_markup.cpp | 228 +-
.../sanitizer_symbolizer_markup.h | 79 +
...> sanitizer_symbolizer_markup_constants.h} | 19 +-
.../sanitizer_symbolizer_markup_fuchsia.cpp | 85 +
.../sanitizer_symbolizer_posix_libcdep.cpp | 67 +-
.../sanitizer_symbolizer_report.cpp | 80 +-
.../sanitizer_symbolizer_report_fuchsia.cpp | 33 +
.../sanitizer_symbolizer_win.cpp | 6 +-
.../sanitizer_syscall_linux_hexagon.inc | 131 ++
.../sanitizer_syscall_linux_loongarch64.inc | 171 ++
.../sanitizer_syscall_linux_riscv64.inc | 174 ++
.../sanitizer_thread_arg_retval.cpp | 23 +-
.../sanitizer_thread_arg_retval.h | 1 +
.../sanitizer_tls_get_addr.cpp | 15 +-
.../sanitizer_unwind_fuchsia.cpp | 66 +
.../sanitizer_common/sanitizer_unwind_win.cpp | 7 +
.../tsan/sanitizer_common/sanitizer_win.cpp | 25 +-
zig/lib/tsan/tsan_debugging.cpp | 4 +-
zig/lib/tsan/tsan_defs.h | 2 +-
zig/lib/tsan/tsan_dispatch_defs.h | 7 -
zig/lib/tsan/tsan_interceptors_posix.cpp | 135 +-
zig/lib/tsan/tsan_interface.h | 8 +
zig/lib/tsan/tsan_interface_ann.cpp | 24 +-
zig/lib/tsan/tsan_interface_atomic.cpp | 24 +
zig/lib/tsan/tsan_mman.cpp | 29 +-
zig/lib/tsan/tsan_mman.h | 4 +-
zig/lib/tsan/tsan_platform.h | 151 +-
zig/lib/tsan/tsan_platform_linux.cpp | 220 +-
zig/lib/tsan/tsan_platform_mac.cpp | 9 +-
zig/lib/tsan/tsan_platform_posix.cpp | 43 +-
zig/lib/tsan/tsan_preinit.cpp | 10 +-
zig/lib/tsan/tsan_report.cpp | 38 +-
zig/lib/tsan/tsan_report.h | 3 +-
zig/lib/tsan/tsan_rtl.cpp | 24 +-
zig/lib/tsan/tsan_rtl.h | 12 +-
zig/lib/tsan/tsan_rtl_aarch64.S | 7 +
zig/lib/tsan/tsan_rtl_access.cpp | 22 +-
zig/lib/tsan/tsan_rtl_loongarch64.S | 196 ++
zig/lib/tsan/tsan_rtl_mutex.cpp | 2 +-
zig/lib/tsan/tsan_rtl_riscv64.S | 203 ++
zig/lib/tsan/tsan_rtl_s390x.S | 49 +
zig/lib/tsan/tsan_rtl_thread.cpp | 10 +-
zig/lib/tsan/tsan_suppressions.cpp | 3 +-
zig/lib/tsan/tsan_vector_clock.h | 2 +-
zig/lib/zig.h | 60 +-
zig/src/Air.zig | 7 -
zig/src/Air/types_resolved.zig | 1 -
zig/src/Compilation.zig | 185 +-
zig/src/Compilation/Config.zig | 2 +-
zig/src/InternPool.zig | 34 +-
zig/src/Liveness.zig | 3 -
zig/src/Liveness/Verify.zig | 1 -
zig/src/Package/Manifest.zig | 7 +
zig/src/Sema.zig | 775 +++----
zig/src/Sema/bitcast.zig | 12 +-
zig/src/Type.zig | 6 +-
zig/src/Value.zig | 12 +-
zig/src/Zcu.zig | 23 +-
zig/src/Zcu/PerThread.zig | 96 +-
zig/src/arch/aarch64/CodeGen.zig | 6 -
zig/src/arch/aarch64/Mir.zig | 2 +-
zig/src/arch/arm/CodeGen.zig | 6 -
zig/src/arch/mips/abi.zig | 2 -
zig/src/arch/riscv64/CodeGen.zig | 21 -
zig/src/arch/sparc64/CodeGen.zig | 24 -
zig/src/arch/wasm/CodeGen.zig | 65 +-
zig/src/arch/x86_64/CodeGen.zig | 101 +-
zig/src/arch/x86_64/Emit.zig | 24 +
zig/src/arch/x86_64/Lower.zig | 2 +
zig/src/arch/x86_64/Mir.zig | 4 +
zig/src/arch/x86_64/encoder.zig | 8 +-
zig/src/clang.zig | 2 +-
zig/src/codegen/c.zig | 12 -
zig/src/codegen/llvm.zig | 131 +-
zig/src/codegen/spirv.zig | 3 +
zig/src/crash_report.zig | 21 +-
zig/src/glibc.zig | 81 +-
zig/src/libcxx.zig | 2 +-
zig/src/libtsan.zig | 16 +-
zig/src/libunwind.zig | 4 +
zig/src/link.zig | 32 +-
zig/src/link/C.zig | 3 +-
zig/src/link/Coff.zig | 1 -
zig/src/link/Coff/lld.zig | 53 +-
zig/src/link/Dwarf.zig | 194 +-
zig/src/link/Elf.zig | 1411 ++++++-------
zig/src/link/Elf/Archive.zig | 23 +-
zig/src/link/Elf/Atom.zig | 41 +-
zig/src/link/Elf/AtomList.zig | 43 +-
zig/src/link/Elf/LdScript.zig | 38 +-
zig/src/link/Elf/LinkerDefined.zig | 10 +-
zig/src/link/Elf/Object.zig | 145 +-
zig/src/link/Elf/SharedObject.zig | 34 +-
zig/src/link/Elf/Symbol.zig | 16 +-
zig/src/link/Elf/ZigObject.zig | 296 ++-
zig/src/link/Elf/file.zig | 52 +-
zig/src/link/Elf/merge_section.zig | 4 +
zig/src/link/Elf/relocatable.zig | 146 +-
zig/src/link/Elf/synthetic_sections.zig | 29 +-
zig/src/link/MachO.zig | 368 ++--
zig/src/link/MachO/Archive.zig | 16 +-
zig/src/link/MachO/Atom.zig | 4 +-
zig/src/link/MachO/Dylib.zig | 11 +-
zig/src/link/MachO/InternalObject.zig | 44 +-
zig/src/link/MachO/Object.zig | 63 +-
zig/src/link/MachO/ZigObject.zig | 4 +-
zig/src/link/MachO/file.zig | 11 +-
zig/src/link/MachO/load_commands.zig | 5 +-
zig/src/link/MachO/relocatable.zig | 40 +-
zig/src/link/NvPtx.zig | 1 -
zig/src/link/Plan9.zig | 1 -
zig/src/link/SpirV.zig | 1 -
zig/src/link/StringTable.zig | 2 +-
zig/src/link/Wasm.zig | 60 +-
zig/src/main.zig | 82 +-
zig/src/mingw.zig | 42 +-
zig/src/musl.zig | 4 +-
zig/src/mutable_value.zig | 4 +-
zig/src/print_air.zig | 7 -
zig/src/print_zir.zig | 3 +-
zig/src/target.zig | 44 +-
zig/src/wasi_libc.zig | 14 +-
zig/test/behavior/array.zig | 67 +
zig/test/behavior/atomics.zig | 10 -
zig/test/behavior/basic.zig | 1 +
zig/test/behavior/bitcast.zig | 3 -
...n_functions_returning_void_or_noreturn.zig | 1 -
zig/test/behavior/export_keyword.zig | 13 +
zig/test/behavior/math.zig | 6 -
zig/test/behavior/union.zig | 1 +
zig/test/behavior/var_args.zig | 5 +
...ray slice sentinel mismatch non-scalar.zig | 13 +
...orderings_of_fence_Acquire_or_stricter.zig | 9 -
.../comptime_var_referenced_at_runtime.zig | 20 +
.../comptime_var_referenced_by_decl.zig | 7 +
.../destructure_error_union.zig | 15 +
.../compile_errors/minmax_missing_args.zig | 9 +
.../compile_errors/splat_bad_result_type.zig | 7 +
.../splat_result_type_non_vector.zig | 9 -
zig/test/cases/errdefer_discard.zig | 7 +
zig/test/cases/exit.zig | 2 +-
...ray slice sentinel mismatch non-scalar.zig | 21 -
zig/test/incremental/add_decl | 4 +-
zig/test/incremental/add_decl_namespaced | 4 +-
zig/test/incremental/delete_comptime_decls | 4 +-
zig/test/incremental/hello | 4 +-
zig/test/incremental/modify_inline_fn | 4 +-
zig/test/incremental/move_src | 4 +-
zig/test/incremental/remove_enum_field | 4 +-
.../incremental/type_becomes_comptime_only | 4 +-
zig/test/incremental/unreferenced_error | 4 +-
zig/test/link/elf.zig | 16 +-
zig/test/link/link.zig | 2 +-
zig/test/link/macho.zig | 26 +
zig/test/llvm_targets.zig | 343 ++-
zig/test/src/Debugger.zig | 485 +++--
zig/test/standalone/empty_env/build.zig | 7 +
zig/test/tests.zig | 76 +
zig/tools/generate_linux_syscalls.zig | 2 +
zig/tools/incr-check.zig | 427 ++--
zig/tools/lldb_pretty_printers.py | 13 +-
zig/tools/process_headers.zig | 5 +
zig/tools/update_cpu_features.zig | 36 +-
381 files changed, 13437 insertions(+), 6724 deletions(-)
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/endianness.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/fcntl.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/fenv.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/hwcap.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/link.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/link_lavcurrent.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/long-double.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/procfs.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/pthread_stack_min.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/setjmp.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/shmlba.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/sigstack.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/struct_stat.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/timesize.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/bits/wordsize.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/fpu_control.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names-lp64s.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/gnu/lib-names.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/gnu/stubs-lp64s.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/gnu/stubs.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/ieee754.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/sys/asm.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/sys/ucontext.h
create mode 100644 zig/lib/libc/include/loongarch64-linux-gnusf/sys/user.h
create mode 100644 zig/lib/std/Target/lanai.zig
create mode 100644 zig/lib/std/Target/propeller.zig
create mode 100644 zig/lib/std/Target/xcore.zig
create mode 100644 zig/lib/std/debug/FormattedPanic.zig
create mode 100644 zig/lib/std/debug/SimplePanic.zig
rename zig/lib/std/os/linux/{arm64.zig => aarch64.zig} (100%)
rename zig/lib/std/os/linux/{arm-eabi.zig => arm.zig} (100%)
create mode 100644 zig/lib/std/os/linux/hexagon.zig
rename zig/lib/std/os/linux/{start_pie.zig => pie.zig} (100%)
create mode 100644 zig/lib/std/os/linux/s390x.zig
create mode 100644 zig/lib/tsan/builtins/assembly.h
delete mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_atomic_clang_mips.h
delete mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_atomic_clang_other.h
delete mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_atomic_clang_x86.h
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_dl.cpp
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_dl.h
delete mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_freebsd.h
delete mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_platform_limits_openbsd.cpp
delete mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_platform_limits_openbsd.h
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_symbolizer_markup.h
rename zig/lib/tsan/sanitizer_common/{sanitizer_symbolizer_fuchsia.h => sanitizer_symbolizer_markup_constants.h} (69%)
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_symbolizer_markup_fuchsia.cpp
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_symbolizer_report_fuchsia.cpp
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_syscall_linux_hexagon.inc
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_syscall_linux_loongarch64.inc
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_syscall_linux_riscv64.inc
create mode 100644 zig/lib/tsan/sanitizer_common/sanitizer_unwind_fuchsia.cpp
create mode 100644 zig/lib/tsan/tsan_rtl_loongarch64.S
create mode 100644 zig/lib/tsan/tsan_rtl_riscv64.S
create mode 100644 zig/lib/tsan/tsan_rtl_s390x.S
create mode 100644 zig/test/cases/compile_errors/array slice sentinel mismatch non-scalar.zig
delete mode 100644 zig/test/cases/compile_errors/atomic_orderings_of_fence_Acquire_or_stricter.zig
create mode 100644 zig/test/cases/compile_errors/destructure_error_union.zig
create mode 100644 zig/test/cases/compile_errors/minmax_missing_args.zig
create mode 100644 zig/test/cases/compile_errors/splat_bad_result_type.zig
delete mode 100644 zig/test/cases/compile_errors/splat_result_type_non_vector.zig
create mode 100644 zig/test/cases/errdefer_discard.zig
delete mode 100644 zig/test/cases/safety/array slice sentinel mismatch non-scalar.zig
diff --git a/README.md b/README.md
index 70f12ae933..f1e0009a79 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ to find and inspect the patch diffs.
* LLVM, LLD, Clang 19.1.0
* zlib 1.3.1
* zstd 1.5.2
- * zig 0.14.0-dev.1622+2ac543388
+ * zig 0.14.0-dev.1876+41dbd0d0d
For other versions, check the git tags of this repository.
diff --git a/build b/build
index cc5bd56008..b1c233233a 100755
--- a/build
+++ b/build
@@ -7,7 +7,7 @@ TARGET="$1" # Example: riscv64-linux-gnu
MCPU="$2" # Examples: `baseline`, `native`, `generic+v7a`, or `arm1176jzf_s`
ROOTDIR="$(pwd)"
-ZIG_VERSION="0.14.0-dev.1622+2ac543388"
+ZIG_VERSION="0.14.0-dev.1876+41dbd0d0d"
TARGET_OS_AND_ABI=${TARGET#*-} # Example: linux-gnu
diff --git a/build.bat b/build.bat
index 609d7ce87f..331bd1d043 100644
--- a/build.bat
+++ b/build.bat
@@ -35,7 +35,7 @@ if "%VSCMD_ARG_HOST_ARCH%"=="x86" set OUTDIR=out-win-x86
set ROOTDIR=%~dp0
set "ROOTDIR_CMAKE=%ROOTDIR:\=/%"
-set ZIG_VERSION="0.14.0-dev.1622+2ac543388"
+set ZIG_VERSION="0.14.0-dev.1876+41dbd0d0d"
set JOBS_ARG=
pushd %ROOTDIR%
diff --git a/zig/CMakeLists.txt b/zig/CMakeLists.txt
index d7dfbfce81..e71f799b54 100644
--- a/zig/CMakeLists.txt
+++ b/zig/CMakeLists.txt
@@ -125,8 +125,8 @@ check_pie_supported(
OUTPUT_VARIABLE ZIG_PIE_SUPPORTED_BY_CMAKE
LANGUAGES C CXX
)
-if(ZIG_PIE AND NOT ZIG_PIE_SUPPORTED_BY_CMAKE)
- message(SEND_ERROR "ZIG_PIE was requested but CMake does not support it for \"zigcpp\" target")
+if(ZIG_PIE AND NOT CMAKE_CXX_LINK_PIE_SUPPORTED)
+ message(SEND_ERROR "ZIG_PIE was requested but CMake does not support it for \"zigcpp\" target: ${ZIG_PIE_SUPPORTED_BY_CMAKE}")
endif()
@@ -894,9 +894,7 @@ set(BUILD_COMPILER_RT_ARGS
--name compiler_rt
-femit-bin="${ZIG_COMPILER_RT_C_SOURCE}"
-target "${ZIG_HOST_TARGET_TRIPLE}"
- --dep "build_options"
"-Mroot=lib/compiler_rt.zig"
- "-Mbuild_options=${ZIG_CONFIG_ZIG_OUT}"
)
add_custom_command(
diff --git a/zig/README.md b/zig/README.md
index 865bd178b3..818a7d67f8 100644
--- a/zig/README.md
+++ b/zig/README.md
@@ -47,7 +47,7 @@ Ensure you have the required dependencies:
* CMake >= 3.15
* System C/C++ Toolchain
- * LLVM, Clang, LLD development libraries == 18.x
+ * LLVM, Clang, LLD development libraries == 19.x
Then it is the standard CMake build process:
diff --git a/zig/bootstrap.c b/zig/bootstrap.c
index a373522de4..f341740a0e 100644
--- a/zig/bootstrap.c
+++ b/zig/bootstrap.c
@@ -123,7 +123,7 @@ int main(int argc, char **argv) {
if (f == NULL)
panic("unable to open config.zig for writing");
- const char *zig_version = "0.14.0-dev.1622+2ac543388";
+ const char *zig_version = "0.14.0-dev.1876+41dbd0d0d";
int written = fprintf(f,
"pub const have_llvm = false;\n"
@@ -170,9 +170,7 @@ int main(int argc, char **argv) {
"-ofmt=c", "-OReleaseSmall",
"--name", "compiler_rt", "-femit-bin=compiler_rt.c",
"-target", host_triple,
- "--dep", "build_options",
"-Mroot=lib/compiler_rt.zig",
- "-Mbuild_options=config.zig",
NULL,
};
print_and_run(child_argv);
diff --git a/zig/build.zig b/zig/build.zig
index 731b825c07..a5f4cd5675 100644
--- a/zig/build.zig
+++ b/zig/build.zig
@@ -577,6 +577,10 @@ pub fn build(b: *std.Build) !void {
} else {
update_mingw_step.dependOn(&b.addFail("The -Dmingw-src=... option is required for this step").step);
}
+
+ const test_incremental_step = b.step("test-incremental", "Run the incremental compilation test cases");
+ try tests.addIncrementalTests(b, test_incremental_step);
+ test_step.dependOn(test_incremental_step);
}
fn addWasiUpdateStep(b: *std.Build, version: [:0]const u8) !void {
diff --git a/zig/doc/langref.html.in b/zig/doc/langref.html.in
index 9f12829349..54b923d0d9 100644
--- a/zig/doc/langref.html.in
+++ b/zig/doc/langref.html.in
@@ -4218,11 +4218,10 @@ pub fn print(self: *Writer, arg0: []const u8, arg1: i32) !void {
{#header_close#}
{#header_open|Atomics#}
- TODO: @fence()
TODO: @atomic rmw
TODO: builtin atomic memory ordering enum
- {#see_also|@atomicLoad|@atomicStore|@atomicRmw|@fence|@cmpxchgWeak|@cmpxchgStrong#}
+ {#see_also|@atomicLoad|@atomicStore|@atomicRmw|@cmpxchgWeak|@cmpxchgStrong#}
{#header_close#}
@@ -4307,7 +4306,7 @@ comptime {
an integer or an enum.
{#syntax#}AtomicOrder{#endsyntax#} can be found with {#syntax#}@import("std").builtin.AtomicOrder{#endsyntax#}.
- {#see_also|@atomicStore|@atomicRmw|@fence|@cmpxchgWeak|@cmpxchgStrong#}
+ {#see_also|@atomicStore|@atomicRmw||@cmpxchgWeak|@cmpxchgStrong#}
{#header_close#}
{#header_open|@atomicRmw#}
@@ -4322,7 +4321,7 @@ comptime {
{#syntax#}AtomicOrder{#endsyntax#} can be found with {#syntax#}@import("std").builtin.AtomicOrder{#endsyntax#}.
{#syntax#}AtomicRmwOp{#endsyntax#} can be found with {#syntax#}@import("std").builtin.AtomicRmwOp{#endsyntax#}.
- {#see_also|@atomicStore|@atomicLoad|@fence|@cmpxchgWeak|@cmpxchgStrong#}
+ {#see_also|@atomicStore|@atomicLoad|@cmpxchgWeak|@cmpxchgStrong#}
{#header_close#}
{#header_open|@atomicStore#}
@@ -4335,7 +4334,7 @@ comptime {
an integer or an enum.
{#syntax#}AtomicOrder{#endsyntax#} can be found with {#syntax#}@import("std").builtin.AtomicOrder{#endsyntax#}.
- {#see_also|@atomicLoad|@atomicRmw|@fence|@cmpxchgWeak|@cmpxchgStrong#}
+ {#see_also|@atomicLoad|@atomicRmw|@cmpxchgWeak|@cmpxchgStrong#}
{#header_close#}
{#header_open|@bitCast#}
@@ -4568,7 +4567,7 @@ comptime {
{#syntax#}@typeInfo(@TypeOf(ptr)).pointer.alignment{#endsyntax#} must be {#syntax#}>= @sizeOf(T).{#endsyntax#}
{#syntax#}AtomicOrder{#endsyntax#} can be found with {#syntax#}@import("std").builtin.AtomicOrder{#endsyntax#}.
- {#see_also|@atomicStore|@atomicLoad|@atomicRmw|@fence|@cmpxchgWeak#}
+ {#see_also|@atomicStore|@atomicLoad|@atomicRmw|@cmpxchgWeak#}
{#header_close#}
{#header_open|@cmpxchgWeak#}
@@ -4600,7 +4599,7 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val
{#syntax#}@typeInfo(@TypeOf(ptr)).pointer.alignment{#endsyntax#} must be {#syntax#}>= @sizeOf(T).{#endsyntax#}
{#syntax#}AtomicOrder{#endsyntax#} can be found with {#syntax#}@import("std").builtin.AtomicOrder{#endsyntax#}.
- {#see_also|@atomicStore|@atomicLoad|@atomicRmw|@fence|@cmpxchgStrong#}
+ {#see_also|@atomicStore|@atomicLoad|@atomicRmw|@cmpxchgStrong#}
{#header_close#}
{#header_open|@compileError#}
@@ -4766,10 +4765,10 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val
Converts an integer into an {#link|enum#} value. The return type is the inferred result type.
- Attempting to convert an integer with no corresponding value in the enum invokes
+ Attempting to convert an integer with no corresponding value in the enum invokes
safety-checked {#link|Undefined Behavior#}.
Note that a {#link|non-exhaustive enum|Non-exhaustive enum#} has corresponding values for all
- integers in the enum's integer tag type: the {#syntax#}_{#endsyntax#} value represents all
+ integers in the enum's integer tag type: the {#syntax#}_{#endsyntax#} value represents all
the remaining unnamed integers in the enum's tag type.
{#see_also|@intFromEnum#}
@@ -4857,15 +4856,6 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val
{#see_also|@export#}
{#header_close#}
- {#header_open|@fence#}
- {#syntax#}@fence(order: AtomicOrder) void{#endsyntax#}
-
- The {#syntax#}fence{#endsyntax#} function is used to introduce happens-before edges between operations.
-
- {#syntax#}AtomicOrder{#endsyntax#} can be found with {#syntax#}@import("std").builtin.AtomicOrder{#endsyntax#}.
- {#see_also|@atomicStore|@atomicLoad|@atomicRmw|@cmpxchgWeak|@cmpxchgStrong#}
- {#header_close#}
-
{#header_open|@field#}
{#syntax#}@field(lhs: anytype, comptime field_name: []const u8) (field){#endsyntax#}
Performs field access by a compile-time string. Works on both fields and declarations.
@@ -6241,11 +6231,13 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val
Are you linking libc? In this case, {#syntax#}std.heap.c_allocator{#endsyntax#} is likely
the right choice, at least for your main allocator.
+
+ Need to use the same allocator in multiple threads? Use one of your choice
+ wrapped around {#syntax#}std.heap.ThreadSafeAllocator{#endsyntax#}
+
Is the maximum number of bytes that you will need bounded by a number known at
- {#link|comptime#}? In this case, use {#syntax#}std.heap.FixedBufferAllocator{#endsyntax#} or
- {#syntax#}std.heap.ThreadSafeFixedBufferAllocator{#endsyntax#} depending on whether you need
- thread-safety or not.
+ {#link|comptime#}? In this case, use {#syntax#}std.heap.FixedBufferAllocator{#endsyntax#}.
Is your program a command line application which runs from start to end without any fundamental
diff --git a/zig/lib/compiler/aro/aro/Compilation.zig b/zig/lib/compiler/aro/aro/Compilation.zig
index 22ca9c00ed..414cdb45f0 100644
--- a/zig/lib/compiler/aro/aro/Compilation.zig
+++ b/zig/lib/compiler/aro/aro/Compilation.zig
@@ -308,7 +308,7 @@ fn generateSystemDefines(comp: *Compilation, w: anytype) !void {
),
else => {},
}
- if (comp.target.abi == .android) {
+ if (comp.target.isAndroid()) {
try w.writeAll("#define __ANDROID__ 1\n");
}
diff --git a/zig/lib/compiler/aro/aro/target.zig b/zig/lib/compiler/aro/aro/target.zig
index b84788429a..c07935a420 100644
--- a/zig/lib/compiler/aro/aro/target.zig
+++ b/zig/lib/compiler/aro/aro/target.zig
@@ -482,7 +482,6 @@ pub fn get32BitArchVariant(target: std.Target) ?std.Target {
.spirv,
.spirv32,
.loongarch32,
- .dxil,
.xtensa,
=> {}, // Already 32 bit
@@ -509,7 +508,6 @@ pub fn get64BitArchVariant(target: std.Target) ?std.Target {
.arc,
.avr,
.csky,
- .dxil,
.hexagon,
.kalimba,
.lanai,
@@ -578,7 +576,6 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
.bpfel => "bpfel",
.bpfeb => "bpfeb",
.csky => "csky",
- .dxil => "dxil",
.hexagon => "hexagon",
.loongarch32 => "loongarch32",
.loongarch64 => "loongarch64",
@@ -655,7 +652,6 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
.tvos => "tvos",
.watchos => "watchos",
.driverkit => "driverkit",
- .shadermodel => "shadermodel",
.visionos => "xros",
.serenity => "serenity",
.bridgeos => "bridgeos",
@@ -693,6 +689,7 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
.eabi => "eabi",
.eabihf => "eabihf",
.android => "android",
+ .androideabi => "androideabi",
.musl => "musl",
.musleabi => "musleabi",
.musleabihf => "musleabihf",
@@ -702,22 +699,8 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
.cygnus => "cygnus",
.simulator => "simulator",
.macabi => "macabi",
- .pixel => "pixel",
- .vertex => "vertex",
- .geometry => "geometry",
- .hull => "hull",
- .domain => "domain",
- .compute => "compute",
- .library => "library",
- .raygeneration => "raygeneration",
- .intersection => "intersection",
- .anyhit => "anyhit",
- .closesthit => "closesthit",
- .miss => "miss",
- .callable => "callable",
- .mesh => "mesh",
- .amplification => "amplification",
- .ohos => "openhos",
+ .ohos => "ohos",
+ .ohoseabi => "ohoseabi",
};
writer.writeAll(llvm_abi) catch unreachable;
return stream.getWritten();
diff --git a/zig/lib/compiler/fmt.zig b/zig/lib/compiler/fmt.zig
index c747addd72..5a4f112c34 100644
--- a/zig/lib/compiler/fmt.zig
+++ b/zig/lib/compiler/fmt.zig
@@ -207,6 +207,7 @@ const FmtError = error{
LockViolation,
NetNameDeleted,
InvalidArgument,
+ ProcessNotFound,
} || fs.File.OpenError;
fn fmtPath(fmt: *Fmt, file_path: []const u8, check_mode: bool, dir: fs.Dir, sub_path: []const u8) FmtError!void {
diff --git a/zig/lib/compiler/objcopy.zig b/zig/lib/compiler/objcopy.zig
index ac609c94e5..9794671e6f 100644
--- a/zig/lib/compiler/objcopy.zig
+++ b/zig/lib/compiler/objcopy.zig
@@ -40,6 +40,9 @@ fn cmdObjCopy(
var only_keep_debug: bool = false;
var compress_debug_sections: bool = false;
var listen = false;
+ var add_section: ?AddSection = null;
+ var set_section_alignment: ?SetSectionAlignment = null;
+ var set_section_flags: ?SetSectionFlags = null;
while (i < args.len) : (i += 1) {
const arg = args[i];
if (!mem.startsWith(u8, arg, "-")) {
@@ -104,6 +107,37 @@ fn cmdObjCopy(
i += 1;
if (i >= args.len) fatal("expected another argument after '{s}'", .{arg});
opt_extract = args[i];
+ } else if (mem.eql(u8, arg, "--set-section-alignment")) {
+ i += 1;
+ if (i >= args.len) fatal("expected section name and alignment arguments after '{s}'", .{arg});
+
+ if (splitOption(args[i])) |split| {
+ const alignment = std.fmt.parseInt(u32, split.second, 10) catch |err| {
+ fatal("unable to parse alignment number: '{s}': {s}", .{ split.second, @errorName(err) });
+ };
+ if (!std.math.isPowerOfTwo(alignment)) fatal("alignment must be a power of two", .{});
+ set_section_alignment = .{ .section_name = split.first, .alignment = alignment };
+ } else {
+ fatal("unrecognized argument: '{s}', expecting =", .{args[i]});
+ }
+ } else if (mem.eql(u8, arg, "--set-section-flags")) {
+ i += 1;
+ if (i >= args.len) fatal("expected section name and filename arguments after '{s}'", .{arg});
+
+ if (splitOption(args[i])) |split| {
+ set_section_flags = .{ .section_name = split.first, .flags = parseSectionFlags(split.second) };
+ } else {
+ fatal("unrecognized argument: '{s}', expecting =", .{args[i]});
+ }
+ } else if (mem.eql(u8, arg, "--add-section")) {
+ i += 1;
+ if (i >= args.len) fatal("expected section name and filename arguments after '{s}'", .{arg});
+
+ if (splitOption(args[i])) |split| {
+ add_section = .{ .section_name = split.first, .file_path = split.second };
+ } else {
+ fatal("unrecognized argument: '{s}', expecting =", .{args[i]});
+ }
} else {
fatal("unrecognized argument: '{s}'", .{arg});
}
@@ -151,6 +185,12 @@ fn cmdObjCopy(
fatal("zig objcopy: ELF to RAW or HEX copying does not support --strip", .{});
if (opt_extract != null)
fatal("zig objcopy: ELF to RAW or HEX copying does not support --extract-to", .{});
+ if (add_section != null)
+ fatal("zig objcopy: ELF to RAW or HEX copying does not support --add-section", .{});
+ if (set_section_alignment != null)
+ fatal("zig objcopy: ELF to RAW or HEX copying does not support --set_section_alignment", .{});
+ if (set_section_flags != null)
+ fatal("zig objcopy: ELF to RAW or HEX copying does not support --set_section_flags", .{});
try emitElf(arena, in_file, out_file, elf_hdr, .{
.ofmt = out_fmt,
@@ -175,6 +215,9 @@ fn cmdObjCopy(
.add_debuglink = opt_add_debuglink,
.extract_to = opt_extract,
.compress_debug = compress_debug_sections,
+ .add_section = add_section,
+ .set_section_alignment = set_section_alignment,
+ .set_section_flags = set_section_flags,
});
return std.process.cleanExit();
},
@@ -217,18 +260,21 @@ const usage =
\\Usage: zig objcopy [options] input output
\\
\\Options:
- \\ -h, --help Print this help and exit
- \\ --output-target= Format of the output file
- \\ -O Alias for --output-target
- \\ --only-section= Remove all but
- \\ -j Alias for --only-section
- \\ --pad-to Pad the last section up to address
- \\ --strip-debug, -g Remove all debug sections from the output.
- \\ --strip-all, -S Remove all debug sections and symbol table from the output.
- \\ --only-keep-debug Strip a file, removing contents of any sections that would not be stripped by --strip-debug and leaving the debugging sections intact.
- \\ --add-gnu-debuglink= Creates a .gnu_debuglink section which contains a reference to and adds it to the output file.
- \\ --extract-to Extract the removed sections into , and add a .gnu-debuglink section.
- \\ --compress-debug-sections Compress DWARF debug sections with zlib
+ \\ -h, --help Print this help and exit
+ \\ --output-target= Format of the output file
+ \\ -O Alias for --output-target
+ \\ --only-section= Remove all but
+ \\ -j Alias for --only-section
+ \\ --pad-to Pad the last section up to address
+ \\ --strip-debug, -g Remove all debug sections from the output.
+ \\ --strip-all, -S Remove all debug sections and symbol table from the output.
+ \\ --only-keep-debug Strip a file, removing contents of any sections that would not be stripped by --strip-debug and leaving the debugging sections intact.
+ \\ --add-gnu-debuglink= Creates a .gnu_debuglink section which contains a reference to and adds it to the output file.
+ \\ --extract-to Extract the removed sections into , and add a .gnu-debuglink section.
+ \\ --compress-debug-sections Compress DWARF debug sections with zlib
+ \\ --set-section-alignment = Set alignment of section to bytes. Must be a power of two.
+ \\ --set-section-flags = Set flags of section to represented as a comma separated set of flags.
+ \\ --add-section = Add file content from with the a new section named .
\\
;
@@ -236,6 +282,24 @@ pub const EmitRawElfOptions = struct {
ofmt: std.Target.ObjectFormat,
only_section: ?[]const u8 = null,
pad_to: ?u64 = null,
+ add_section: ?AddSection = null,
+ set_section_alignment: ?SetSectionAlignment = null,
+ set_section_flags: ?SetSectionFlags = null,
+};
+
+const AddSection = struct {
+ section_name: []const u8,
+ file_path: []const u8,
+};
+
+const SetSectionAlignment = struct {
+ section_name: []const u8,
+ alignment: u32,
+};
+
+const SetSectionFlags = struct {
+ section_name: []const u8,
+ flags: SectionFlags,
};
fn emitElf(
@@ -392,7 +456,7 @@ const BinaryElfOutput = struct {
if (phdr.p_type == elf.PT_LOAD) {
const newSegment = try allocator.create(BinaryElfSegment);
- newSegment.physicalAddress = if (phdr.p_paddr != 0) phdr.p_paddr else phdr.p_vaddr;
+ newSegment.physicalAddress = phdr.p_paddr;
newSegment.virtualAddress = phdr.p_vaddr;
newSegment.fileSize = @intCast(phdr.p_filesz);
newSegment.elfOffset = phdr.p_offset;
@@ -678,6 +742,9 @@ const StripElfOptions = struct {
strip_debug: bool = false,
only_keep_debug: bool = false,
compress_debug: bool = false,
+ add_section: ?AddSection,
+ set_section_alignment: ?SetSectionAlignment,
+ set_section_flags: ?SetSectionFlags,
};
fn stripElf(
@@ -721,6 +788,14 @@ fn stripElf(
var elf_file = try ElfFile(is_64).parse(allocator, in_file, elf_hdr);
defer elf_file.deinit();
+ if (options.add_section) |user_section| {
+ for (elf_file.sections) |section| {
+ if (std.mem.eql(u8, section.name, user_section.section_name)) {
+ fatal("zig objcopy: unable to add section '{s}'. Section already exists in input", .{user_section.section_name});
+ }
+ }
+ }
+
if (filter_complement) |flt| {
// write the .dbg file and close it, so it can be read back to compute the debuglink checksum.
const path = options.extract_to.?;
@@ -733,7 +808,14 @@ fn stripElf(
}
const debuglink: ?DebugLink = if (debuglink_path) |path| ElfFileHelper.createDebugLink(path) else null;
- try elf_file.emit(allocator, out_file, in_file, .{ .section_filter = filter, .debuglink = debuglink, .compress_debug = options.compress_debug });
+ try elf_file.emit(allocator, out_file, in_file, .{
+ .section_filter = filter,
+ .debuglink = debuglink,
+ .compress_debug = options.compress_debug,
+ .add_section = options.add_section,
+ .set_section_alignment = options.set_section_alignment,
+ .set_section_flags = options.set_section_flags,
+ });
},
}
}
@@ -786,7 +868,7 @@ fn ElfFile(comptime is_64: bool) type {
// program header: list of segments
const program_segments = blk: {
if (@sizeOf(Elf_Phdr) != header.phentsize)
- fatal("zig objcopy: unsuported ELF file, unexpected phentsize ({d})", .{header.phentsize});
+ fatal("zig objcopy: unsupported ELF file, unexpected phentsize ({d})", .{header.phentsize});
const program_header = try allocator.alloc(Elf_Phdr, header.phnum);
const bytes_read = try in_file.preadAll(std.mem.sliceAsBytes(program_header), header.phoff);
@@ -798,7 +880,7 @@ fn ElfFile(comptime is_64: bool) type {
// section header
const sections = blk: {
if (@sizeOf(Elf_Shdr) != header.shentsize)
- fatal("zig objcopy: unsuported ELF file, unexpected shentsize ({d})", .{header.shentsize});
+ fatal("zig objcopy: unsupported ELF file, unexpected shentsize ({d})", .{header.shentsize});
const section_header = try allocator.alloc(Section, header.shnum);
@@ -896,6 +978,9 @@ fn ElfFile(comptime is_64: bool) type {
section_filter: Filter = .all,
debuglink: ?DebugLink = null,
compress_debug: bool = false,
+ add_section: ?AddSection = null,
+ set_section_alignment: ?SetSectionAlignment = null,
+ set_section_flags: ?SetSectionFlags = null,
};
fn emit(self: *const Self, gpa: Allocator, out_file: File, in_file: File, options: EmitElfOptions) !void {
var arena = std.heap.ArenaAllocator.init(gpa);
@@ -934,6 +1019,10 @@ fn ElfFile(comptime is_64: bool) type {
if (options.debuglink != null)
next_idx += 1;
+ if (options.add_section != null) {
+ next_idx += 1;
+ }
+
break :blk next_idx;
};
@@ -959,6 +1048,28 @@ fn ElfFile(comptime is_64: bool) type {
break :blk new_offset;
};
+ // add user section to the string table if needed
+ const user_section_name: u32 = blk: {
+ if (options.add_section == null) break :blk elf.SHN_UNDEF;
+ if (self.raw_elf_header.e_shstrndx == elf.SHN_UNDEF)
+ fatal("zig objcopy: no strtab, cannot add the user section", .{}); // TODO add the section if needed?
+
+ const strtab = &self.sections[self.raw_elf_header.e_shstrndx];
+ const update = §ions_update[self.raw_elf_header.e_shstrndx];
+
+ const name = options.add_section.?.section_name;
+ const new_offset: u32 = @intCast(strtab.payload.?.len);
+ const buf = try allocator.alignedAlloc(u8, section_memory_align, new_offset + name.len + 1);
+ @memcpy(buf[0..new_offset], strtab.payload.?);
+ @memcpy(buf[new_offset..][0..name.len], name);
+ buf[new_offset + name.len] = 0;
+
+ assert(update.action == .keep);
+ update.payload = buf;
+
+ break :blk new_offset;
+ };
+
// maybe compress .debug sections
if (options.compress_debug) {
for (self.sections[1..], sections_update[1..]) |section, *update| {
@@ -1018,7 +1129,7 @@ fn ElfFile(comptime is_64: bool) type {
if (section.section.sh_type == elf.SHT_NOBITS)
continue;
if (section.section.sh_offset < offset) {
- fatal("zig objcopy: unsuported ELF file", .{});
+ fatal("zig objcopy: unsupported ELF file", .{});
}
offset = section.section.sh_offset;
}
@@ -1134,10 +1245,100 @@ fn ElfFile(comptime is_64: bool) type {
eof_offset += @as(Elf_OffSize, @intCast(payload.len));
}
+ // --add-section
+ if (options.add_section) |add_section| {
+ var section_file = fs.cwd().openFile(add_section.file_path, .{}) catch |err|
+ fatal("unable to open '{s}': {s}", .{ add_section.file_path, @errorName(err) });
+ defer section_file.close();
+
+ const payload = try section_file.readToEndAlloc(arena.allocator(), std.math.maxInt(usize));
+
+ dest_sections[dest_section_idx] = Elf_Shdr{
+ .sh_name = user_section_name,
+ .sh_type = elf.SHT_PROGBITS,
+ .sh_flags = 0,
+ .sh_addr = 0,
+ .sh_offset = eof_offset,
+ .sh_size = @intCast(payload.len),
+ .sh_link = elf.SHN_UNDEF,
+ .sh_info = elf.SHN_UNDEF,
+ .sh_addralign = 4,
+ .sh_entsize = 0,
+ };
+ dest_section_idx += 1;
+
+ cmdbuf.appendAssumeCapacity(.{ .write_data = .{ .data = payload, .out_offset = eof_offset } });
+ eof_offset += @as(Elf_OffSize, @intCast(payload.len));
+ }
+
assert(dest_section_idx == new_shnum);
break :blk dest_sections;
};
+ // --set-section-alignment: overwrite alignment
+ if (options.set_section_alignment) |set_align| {
+ if (self.raw_elf_header.e_shstrndx == elf.SHN_UNDEF)
+ fatal("zig objcopy: no strtab, cannot add the user section", .{}); // TODO add the section if needed?
+
+ const strtab = §ions_update[self.raw_elf_header.e_shstrndx];
+ for (updated_section_header) |*section| {
+ const section_name = std.mem.span(@as([*:0]const u8, @ptrCast(&strtab.payload.?[section.sh_name])));
+ if (std.mem.eql(u8, section_name, set_align.section_name)) {
+ section.sh_addralign = set_align.alignment;
+ break;
+ }
+ } else std.log.warn("Skipping --set-section-alignment. Section '{s}' not found", .{set_align.section_name});
+ }
+
+ // --set-section-flags: overwrite flags
+ if (options.set_section_flags) |set_flags| {
+ if (self.raw_elf_header.e_shstrndx == elf.SHN_UNDEF)
+ fatal("zig objcopy: no strtab, cannot add the user section", .{}); // TODO add the section if needed?
+
+ const strtab = §ions_update[self.raw_elf_header.e_shstrndx];
+ for (updated_section_header) |*section| {
+ const section_name = std.mem.span(@as([*:0]const u8, @ptrCast(&strtab.payload.?[section.sh_name])));
+ if (std.mem.eql(u8, section_name, set_flags.section_name)) {
+ section.sh_flags = std.elf.SHF_WRITE; // default is writable cleared by "readonly"
+ const f = set_flags.flags;
+
+ // Supporting a subset of GNU and LLVM objcopy for ELF only
+ // GNU:
+ // alloc: add SHF_ALLOC
+ // contents: if section is SHT_NOBITS, set SHT_PROGBITS, otherwise do nothing
+ // load: if section is SHT_NOBITS, set SHT_PROGBITS, otherwise do nothing (same as contents)
+ // noload: not ELF relevant
+ // readonly: clear default SHF_WRITE flag
+ // code: add SHF_EXECINSTR
+ // data: not ELF relevant
+ // rom: ignored
+ // exclude: add SHF_EXCLUDE
+ // share: not ELF relevant
+ // debug: not ELF relevant
+ // large: add SHF_X86_64_LARGE. Fatal error if target is not x86_64
+ if (f.alloc) section.sh_flags |= std.elf.SHF_ALLOC;
+ if (f.contents or f.load) {
+ if (section.sh_type == std.elf.SHT_NOBITS) section.sh_type = std.elf.SHT_PROGBITS;
+ }
+ if (f.readonly) section.sh_flags &= ~@as(@TypeOf(section.sh_type), std.elf.SHF_WRITE);
+ if (f.code) section.sh_flags |= std.elf.SHF_EXECINSTR;
+ if (f.exclude) section.sh_flags |= std.elf.SHF_EXCLUDE;
+ if (f.large) {
+ if (updated_elf_header.e_machine != std.elf.EM.X86_64)
+ fatal("zig objcopy: 'large' section flag is only supported on x86_64 targets", .{});
+ section.sh_flags |= std.elf.SHF_X86_64_LARGE;
+ }
+
+ // LLVM:
+ // merge: add SHF_MERGE
+ // strings: add SHF_STRINGS
+ if (f.merge) section.sh_flags |= std.elf.SHF_MERGE;
+ if (f.strings) section.sh_flags |= std.elf.SHF_STRINGS;
+ break;
+ }
+ } else std.log.warn("Skipping --set-section-flags. Section '{s}' not found", .{set_flags.section_name});
+ }
+
// write the section header at the tail
{
const offset = std.mem.alignForward(Elf_OffSize, eof_offset, @alignOf(Elf_Shdr));
@@ -1361,3 +1562,111 @@ const ElfFileHelper = struct {
return hasher.final();
}
};
+
+const SectionFlags = packed struct {
+ alloc: bool = false,
+ contents: bool = false,
+ load: bool = false,
+ noload: bool = false,
+ readonly: bool = false,
+ code: bool = false,
+ data: bool = false,
+ rom: bool = false,
+ exclude: bool = false,
+ shared: bool = false,
+ debug: bool = false,
+ large: bool = false,
+ merge: bool = false,
+ strings: bool = false,
+};
+
+fn parseSectionFlags(comma_separated_flags: []const u8) SectionFlags {
+ const P = struct {
+ fn parse(flags: *SectionFlags, string: []const u8) void {
+ if (string.len == 0) return;
+
+ if (std.mem.eql(u8, string, "alloc")) {
+ flags.alloc = true;
+ } else if (std.mem.eql(u8, string, "contents")) {
+ flags.contents = true;
+ } else if (std.mem.eql(u8, string, "load")) {
+ flags.load = true;
+ } else if (std.mem.eql(u8, string, "noload")) {
+ flags.noload = true;
+ } else if (std.mem.eql(u8, string, "readonly")) {
+ flags.readonly = true;
+ } else if (std.mem.eql(u8, string, "code")) {
+ flags.code = true;
+ } else if (std.mem.eql(u8, string, "data")) {
+ flags.data = true;
+ } else if (std.mem.eql(u8, string, "rom")) {
+ flags.rom = true;
+ } else if (std.mem.eql(u8, string, "exclude")) {
+ flags.exclude = true;
+ } else if (std.mem.eql(u8, string, "shared")) {
+ flags.shared = true;
+ } else if (std.mem.eql(u8, string, "debug")) {
+ flags.debug = true;
+ } else if (std.mem.eql(u8, string, "large")) {
+ flags.large = true;
+ } else if (std.mem.eql(u8, string, "merge")) {
+ flags.merge = true;
+ } else if (std.mem.eql(u8, string, "strings")) {
+ flags.strings = true;
+ } else {
+ std.log.warn("Skipping unrecognized section flag '{s}'", .{string});
+ }
+ }
+ };
+
+ var flags = SectionFlags{};
+ var offset: usize = 0;
+ for (comma_separated_flags, 0..) |c, i| {
+ if (c == ',') {
+ defer offset = i + 1;
+ const string = comma_separated_flags[offset..i];
+ P.parse(&flags, string);
+ }
+ }
+ P.parse(&flags, comma_separated_flags[offset..]);
+ return flags;
+}
+
+test "Parse section flags" {
+ const F = SectionFlags;
+ try std.testing.expectEqual(F{}, parseSectionFlags(""));
+ try std.testing.expectEqual(F{}, parseSectionFlags(","));
+ try std.testing.expectEqual(F{}, parseSectionFlags("abc"));
+ try std.testing.expectEqual(F{ .alloc = true }, parseSectionFlags("alloc"));
+ try std.testing.expectEqual(F{ .data = true }, parseSectionFlags("data,"));
+ try std.testing.expectEqual(F{ .alloc = true, .code = true }, parseSectionFlags("alloc,code"));
+ try std.testing.expectEqual(F{ .alloc = true, .code = true }, parseSectionFlags("alloc,code,not_supported"));
+}
+
+const SplitResult = struct { first: []const u8, second: []const u8 };
+
+fn splitOption(option: []const u8) ?SplitResult {
+ const separator = '=';
+ if (option.len < 3) return null; // minimum "a=b"
+ for (1..option.len - 1) |i| {
+ if (option[i] == separator) return .{
+ .first = option[0..i],
+ .second = option[i + 1 ..],
+ };
+ }
+ return null;
+}
+
+test "Split option" {
+ {
+ const split = splitOption(".abc=123");
+ try std.testing.expect(split != null);
+ try std.testing.expectEqualStrings(".abc", split.?.first);
+ try std.testing.expectEqualStrings("123", split.?.second);
+ }
+
+ try std.testing.expectEqual(null, splitOption(""));
+ try std.testing.expectEqual(null, splitOption("=abc"));
+ try std.testing.expectEqual(null, splitOption("abc="));
+ try std.testing.expectEqual(null, splitOption("abc"));
+}
diff --git a/zig/lib/compiler_rt/aulldiv.zig b/zig/lib/compiler_rt/aulldiv.zig
index 21ec61722b..6d822b7b86 100644
--- a/zig/lib/compiler_rt/aulldiv.zig
+++ b/zig/lib/compiler_rt/aulldiv.zig
@@ -1,13 +1,14 @@
const std = @import("std");
const builtin = @import("builtin");
const arch = builtin.cpu.arch;
+const os = builtin.os.tag;
const abi = builtin.abi;
const common = @import("common.zig");
pub const panic = common.panic;
comptime {
- if (arch == .x86 and abi == .msvc and builtin.zig_backend != .stage2_c) {
+ if (arch == .x86 and os == .windows and (abi == .msvc or abi == .itanium) and builtin.zig_backend != .stage2_c) {
// Don't let LLVM apply the stdcall name mangling on those MSVC builtins
@export(&_alldiv, .{ .name = "\x01__alldiv", .linkage = common.linkage, .visibility = common.visibility });
@export(&_aulldiv, .{ .name = "\x01__aulldiv", .linkage = common.linkage, .visibility = common.visibility });
diff --git a/zig/lib/compiler_rt/aullrem.zig b/zig/lib/compiler_rt/aullrem.zig
index c1578aeb8b..5c4d0588f7 100644
--- a/zig/lib/compiler_rt/aullrem.zig
+++ b/zig/lib/compiler_rt/aullrem.zig
@@ -1,13 +1,14 @@
const std = @import("std");
const builtin = @import("builtin");
const arch = builtin.cpu.arch;
+const os = builtin.os.tag;
const abi = builtin.abi;
const common = @import("common.zig");
pub const panic = common.panic;
comptime {
- if (arch == .x86 and abi == .msvc and builtin.zig_backend != .stage2_c) {
+ if (arch == .x86 and os == .windows and (abi == .msvc or abi == .itanium) and builtin.zig_backend != .stage2_c) {
// Don't let LLVM apply the stdcall name mangling on those MSVC builtins
@export(&_allrem, .{ .name = "\x01__allrem", .linkage = common.linkage, .visibility = common.visibility });
@export(&_aullrem, .{ .name = "\x01__aullrem", .linkage = common.linkage, .visibility = common.visibility });
diff --git a/zig/lib/compiler_rt/common.zig b/zig/lib/compiler_rt/common.zig
index 1dfd4be07f..786dc7303a 100644
--- a/zig/lib/compiler_rt/common.zig
+++ b/zig/lib/compiler_rt/common.zig
@@ -1,8 +1,14 @@
const std = @import("std");
const builtin = @import("builtin");
const native_endian = builtin.cpu.arch.endian();
+const ofmt_c = builtin.object_format == .c;
-pub const linkage: std.builtin.GlobalLinkage = if (builtin.is_test) .internal else .weak;
+pub const linkage: std.builtin.GlobalLinkage = if (builtin.is_test)
+ .internal
+else if (ofmt_c)
+ .strong
+else
+ .weak;
/// Determines the symbol's visibility to other objects.
/// For WebAssembly this allows the symbol to be resolved to other modules, but will not
/// export it to the host runtime.
@@ -16,19 +22,22 @@ pub const want_aeabi = switch (builtin.abi) {
.gnueabi,
.gnueabihf,
.android,
+ .androideabi,
=> switch (builtin.cpu.arch) {
.arm, .armeb, .thumb, .thumbeb => true,
else => false,
},
else => false,
};
+pub const want_mingw_arm_abi = builtin.cpu.arch.isArmOrThumb() and builtin.target.isMinGW();
+
pub const want_ppc_abi = builtin.cpu.arch.isPowerPC();
pub const want_float_exceptions = !builtin.cpu.arch.isWasm();
// Libcalls that involve u128 on Windows x86-64 are expected by LLVM to use the
// calling convention of @Vector(2, u64), rather than what's standard.
-pub const want_windows_v2u64_abi = builtin.os.tag == .windows and builtin.cpu.arch == .x86_64 and @import("builtin").object_format != .c;
+pub const want_windows_v2u64_abi = builtin.os.tag == .windows and builtin.cpu.arch == .x86_64 and !ofmt_c;
/// This governs whether to use these symbol names for f16/f32 conversions
/// rather than the standard names:
@@ -67,13 +76,14 @@ pub const gnu_f16_abi = switch (builtin.cpu.arch) {
pub const want_sparc_abi = builtin.cpu.arch.isSPARC();
-// Avoid dragging in the runtime safety mechanisms into this .o file,
-// unless we're trying to test compiler-rt.
-pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, _: ?usize) noreturn {
- _ = error_return_trace;
+// Avoid dragging in the runtime safety mechanisms into this .o file, unless
+// we're trying to test compiler-rt.
+pub const Panic = if (builtin.is_test) std.debug.FormattedPanic else struct {};
+
+/// To be deleted after zig1.wasm is updated.
+pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, ret_addr: ?usize) noreturn {
if (builtin.is_test) {
- @branchHint(.cold);
- std.debug.panic("{s}", .{msg});
+ std.debug.defaultPanic(msg, error_return_trace, ret_addr orelse @returnAddress());
} else {
unreachable;
}
diff --git a/zig/lib/compiler_rt/emutls.zig b/zig/lib/compiler_rt/emutls.zig
index 55927b8b37..b0244a14f5 100644
--- a/zig/lib/compiler_rt/emutls.zig
+++ b/zig/lib/compiler_rt/emutls.zig
@@ -18,7 +18,7 @@ const gcc_word = usize;
pub const panic = common.panic;
comptime {
- if (builtin.link_libc and (builtin.abi == .android or builtin.os.tag == .openbsd)) {
+ if (builtin.link_libc and (builtin.abi.isAndroid() or builtin.os.tag == .openbsd)) {
@export(&__emutls_get_address, .{ .name = "__emutls_get_address", .linkage = common.linkage, .visibility = common.visibility });
}
}
diff --git a/zig/lib/compiler_rt/fixdfdi.zig b/zig/lib/compiler_rt/fixdfdi.zig
index 78744b145d..b9bc5797b9 100644
--- a/zig/lib/compiler_rt/fixdfdi.zig
+++ b/zig/lib/compiler_rt/fixdfdi.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const intFromFloat = @import("./int_from_float.zig").intFromFloat;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_d2lz, .{ .name = "__aeabi_d2lz", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__fixdfdi, .{ .name = "__fixdfdi", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__fixdfdi, .{ .name = "__dtoi64", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/compiler_rt/fixsfdi.zig b/zig/lib/compiler_rt/fixsfdi.zig
index c75e401475..192614bd79 100644
--- a/zig/lib/compiler_rt/fixsfdi.zig
+++ b/zig/lib/compiler_rt/fixsfdi.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const intFromFloat = @import("./int_from_float.zig").intFromFloat;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_f2lz, .{ .name = "__aeabi_f2lz", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__fixsfdi, .{ .name = "__fixsfdi", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__fixsfdi, .{ .name = "__stoi64", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/compiler_rt/fixunsdfdi.zig b/zig/lib/compiler_rt/fixunsdfdi.zig
index 68a0c44ff9..86a4fa9de1 100644
--- a/zig/lib/compiler_rt/fixunsdfdi.zig
+++ b/zig/lib/compiler_rt/fixunsdfdi.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const intFromFloat = @import("./int_from_float.zig").intFromFloat;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_d2ulz, .{ .name = "__aeabi_d2ulz", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__fixunsdfdi, .{ .name = "__fixunsdfdi", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__fixunsdfdi, .{ .name = "__dtou64", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/compiler_rt/fixunssfdi.zig b/zig/lib/compiler_rt/fixunssfdi.zig
index 9157a71e2f..81d1c77f06 100644
--- a/zig/lib/compiler_rt/fixunssfdi.zig
+++ b/zig/lib/compiler_rt/fixunssfdi.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const intFromFloat = @import("./int_from_float.zig").intFromFloat;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_f2ulz, .{ .name = "__aeabi_f2ulz", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__fixunssfdi, .{ .name = "__fixunssfdi", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__fixunssfdi, .{ .name = "__stou64", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/compiler_rt/floatdidf.zig b/zig/lib/compiler_rt/floatdidf.zig
index 393fa95c19..fc145e836d 100644
--- a/zig/lib/compiler_rt/floatdidf.zig
+++ b/zig/lib/compiler_rt/floatdidf.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const floatFromInt = @import("./float_from_int.zig").floatFromInt;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_l2d, .{ .name = "__aeabi_l2d", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__floatdidf, .{ .name = "__floatdidf", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__floatdidf, .{ .name = "__i64tod", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/compiler_rt/floatdisf.zig b/zig/lib/compiler_rt/floatdisf.zig
index 4f3b42ef79..d1c9515f9a 100644
--- a/zig/lib/compiler_rt/floatdisf.zig
+++ b/zig/lib/compiler_rt/floatdisf.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const floatFromInt = @import("./float_from_int.zig").floatFromInt;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_l2f, .{ .name = "__aeabi_l2f", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__floatdisf, .{ .name = "__floatdisf", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__floatdisf, .{ .name = "__i64tos", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/compiler_rt/floatundidf.zig b/zig/lib/compiler_rt/floatundidf.zig
index 5cb1de0d35..3448f0cf20 100644
--- a/zig/lib/compiler_rt/floatundidf.zig
+++ b/zig/lib/compiler_rt/floatundidf.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const floatFromInt = @import("./float_from_int.zig").floatFromInt;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_ul2d, .{ .name = "__aeabi_ul2d", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__floatundidf, .{ .name = "__floatundidf", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__floatundidf, .{ .name = "__u64tod", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/compiler_rt/floatundisf.zig b/zig/lib/compiler_rt/floatundisf.zig
index 17f9148575..9054982b54 100644
--- a/zig/lib/compiler_rt/floatundisf.zig
+++ b/zig/lib/compiler_rt/floatundisf.zig
@@ -1,3 +1,4 @@
+const builtin = @import("builtin");
const common = @import("./common.zig");
const floatFromInt = @import("./float_from_int.zig").floatFromInt;
@@ -8,6 +9,10 @@ comptime {
@export(&__aeabi_ul2f, .{ .name = "__aeabi_ul2f", .linkage = common.linkage, .visibility = common.visibility });
} else {
@export(&__floatundisf, .{ .name = "__floatundisf", .linkage = common.linkage, .visibility = common.visibility });
+
+ if (common.want_mingw_arm_abi) {
+ @export(&__floatundisf, .{ .name = "__u64tos", .linkage = common.linkage, .visibility = common.visibility });
+ }
}
}
diff --git a/zig/lib/libc/glibc/abilists b/zig/lib/libc/glibc/abilists
index 4e617973270d8c6fd227a4d35865cd7aa9a4bc07..3aed1e0f930ed2e4e9f6d558c1a42a9ec24eff14 100644
GIT binary patch
literal 246035
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]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
<~5mJ_7`sobhc~{x%AeZ)0+uoMP{iot^?Mq`
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