Commit Graph

3193 Commits

Author SHA1 Message Date
Jacob Young b431e9af97 Elf: fix incrementally reallocating the last atom in a section 2025-03-31 19:06:25 -04:00
Андрей Краевский aac800ec65 std.meta.FieldType -> @FieldType 2025-03-27 03:49:38 +00:00
Jacob Young 6705cbd5eb codegen: fix packed byte-aligned relocations
Closes #23131
2025-03-23 18:35:34 -04:00
Alex Rønne Petersen 074dd4d083 mingw: Rename mingw32.lib to libmingw32.lib.
LLD expects the library file name (minus extension) to be exactly libmingw32. By
calling it mingw32 previously, we prevented it from being detected as being in
LLD's list of libraries that are excluded from the MinGW-specific auto-export
mechanism.

https://github.com/llvm/llvm-project/blob/b9d27ac252265839354fffeacaa8f39377ed7424/lld/COFF/MinGW.cpp#L30-L56

As a result, a DLL built for *-windows-gnu with Zig would export a bunch of
internal MinGW symbols. This sometimes worked out fine, but it could break at
link or run time when linking an EXE with a DLL, where both are targeting
*-windows-gnu and thus linking separate copies of mingw32.lib. In #23204, this
manifested as the linker getting confused about _gnu_exception_handler() because
it was incorrectly exported by the DLL while also being defined in the
mingw32.lib that was being linked into the EXE.

Closes #23204.
2025-03-18 10:58:52 +01:00
Jacob Young e83607f52c Dwarf: remove comptime parameters from generic origin functions
Since generic instantiations are missing comptime arguments in Air, they
must be removed from the generic origins too.
2025-03-10 08:46:00 -04:00
Linus Groh 79460d4a3e Remove uses of deprecated callconv aliases 2025-03-05 03:01:43 +00:00
Jacob Young d741be512b link: fixed bugs uncovered by changing the cache mode 2025-03-02 16:39:18 -05:00
mlugg 725c825829 link: make sure MachO closes the damn files
Windows is a ridiculous operating system designed by toddlers, and so
requires us to close all file handles in the `tmp/xxxxxxx` cache dir
before renaming it into `o/xxxxxxx`. We have a hack in place to handle
this for the main output file, but the MachO linker also outputs a file
with debug symbols, and we weren't closing it! This led to a fuckton of
CI failures when we enabled `.whole` cache mode by default for
self-hosted backends.

thanks jacob for figuring this out while i sat there
2025-03-02 16:39:18 -05:00
Andrew Kelley c45dcd013b Merge pull request #22488 from Rexicon226/ubsan-rt
implement a ubsan runtime for better error messages
2025-02-26 03:08:36 -05:00
Robin Voetter d856763aca Merge pull request #22937 from alichraghi/ali_spv
spirv: make test suite working again
2025-02-25 20:27:37 +01:00
David Rubin 931178494f Compilation: correct when to include ubsan 2025-02-25 11:22:33 -08:00
David Rubin 95720f007b move libubsan to lib/ and integrate it into -fubsan-rt 2025-02-25 11:22:33 -08:00
Andrew Kelley 466ce48e4c link.MachO.UnwindInfo: reproduce lld's comment
it explains why zero is used instead of saturation
2025-02-25 11:18:42 -08:00
Alex Rønne Petersen 743623bc54 link.MachO.UnwindInfo: Handle u24 overflow for CU records pointing to DWARF.
Closes #23010.
2025-02-25 11:13:00 -08:00
Ali Cheraghi 94af47d28c spirv: do not generate unnecessary forward pointer
Co-authored-by: Robin Voetter <robin@voetter.nl>
2025-02-24 19:12:38 +01:00
Jacob Young 220f80e71d Dwarf: fix lowering of comptime-only optional pointer null values
Closes #22974
2025-02-22 22:47:32 -05:00
Andrew Kelley eb3c7f5706 zig build fmt 2025-02-22 17:09:20 -08:00
Alex Rønne Petersen f87b443af1 link.MachO: Add support for the -x flag (discard local symbols).
This can also be extended to ELF later as it means roughly the same thing there.

This addresses the main issue in #21721 but as I don't have a macOS machine to
do further testing on, I can't confirm whether zig cc is able to pass the entire
cgo test suite after this commit. It can, however, cross-compile a basic program
that uses cgo to x86_64-macos-none which previously failed due to lack of -x
support. Unlike previously, the resulting symbol table does not contain local
symbols (such as C static functions).

I believe this satisfies the related donor bounty: https://ziglang.org/news/second-donor-bounty
2025-02-22 06:35:19 +01:00
Ali Cheraghi d5e1cb3ea2 spirv: ziggify and remove unknown spirv features
`OpCapability` and `OpExtension` now can also be emitted from inline assembly
2025-02-18 18:08:47 +03:30
Ali Cheraghi 85169bbba2 spirv: respect cpu features 2025-02-18 18:07:48 +03:30
Ali Cheraghi 29e46633ce spirv: cache more types & merge constructX functions 2025-02-18 18:07:48 +03:30
Alex Rønne Petersen 481b7bf3f0 std.Target: Remove functions that just wrap component functions.
Functions like isMinGW() and isGnuLibC() have a good reason to exist: They look
at multiple components of the target. But functions like isWasm(), isDarwin(),
isGnu(), etc only exist to save 4-8 characters. I don't think this is a good
enough reason to keep them, especially given that:

* It's not immediately obvious to a reader whether target.isDarwin() means the
  same thing as target.os.tag.isDarwin() precisely because isMinGW() and similar
  functions *do* look at multiple components.
* It's not clear where we would draw the line. The logical conclusion before
  this commit would be to also wrap Arch.isX86(), Os.Tag.isSolarish(),
  Abi.isOpenHarmony(), etc... this obviously quickly gets out of hand.
* It's nice to just have a single correct way of doing something.
2025-02-17 19:18:19 +01:00
Alex Rønne Petersen e0f8d4e68e std.builtin: Rename CallingConvention.wasm_watc to wasm_mvp. 2025-02-17 19:17:56 +01:00
Alex Rønne Petersen 9c015e6c2b std.builtin: Remove CallingConvention.arm_(apcs,aapcs16_vfp).
* arm_apcs is the long dead "OABI" which we never had working support for.
* arm_aapcs16_vfp is for arm-watchos-none which is a dead target that we've
  dropped support for.
2025-02-17 19:17:56 +01:00
David Rubin 914f822025 link.Elf: implement non-alloc {SET,SUB}_ULEB128 2025-02-11 20:41:52 +01:00
Meghan Denny 9142482372 std.ArrayList: popOrNull() -> pop() [v2] (#22720) 2025-02-10 04:21:31 +00:00
Jacob Young ba5e64ff6b x86_64: fix backend assertion failures
Fixes the backend portion of #22798
2025-02-07 23:30:35 -08:00
Meghan Denny a8af36ab10 std.ArrayHashMap: popOrNul() -> pop() 2025-02-07 17:52:19 -08:00
Isaac Freund b3c63e5de0 Dwarf: fix cross_section_relocs capacity
This ensure capacity call does not match the number of
appendAssumeCapacity() calls that follow it. Fix this.

This was discovered due to hitting the assertion failure in
appendAssumeCapacity() while building river.

I'm not sure how to isolate a minimal reproducer for a test.
2025-02-07 07:20:13 +01:00
mlugg d3ca10d5d8 Zcu: remove *_loaded fields on File
Instead, `source`, `tree`, and `zir` should all be optional. This is
precisely what we're actually trying to model here; and `File` isn't
optimized for memory consumption or serializability anyway, so it's fine
to use a couple of extra bytes on actual optionals here.
2025-02-04 16:20:29 +00:00
Alex Rønne Petersen afe2fed34d link: Set machine and float ABI when invoking ld.lld and lld-link.
If this isn't done, LTO can completely miscompile the input bitcode modules for
certain targets where we need to explicitly set these ABIs (because LLVM's
defaults are bad).
2025-01-25 14:57:33 +01:00
Alex Rønne Petersen 68c6a88770 link.Wasm.Feature: Make fromCpuFeature() and toCpuFeature() less cute.
This is more verbose, but at least we now get a compile error instead of UB when
a new feature is added to std.Target.wasm.Feature but not to link.Wasm.Feature.
2025-01-22 21:18:15 +01:00
Alex Rønne Petersen ea1502974d wasm: Add a nontrapping_bulk_memory_len0 feature.
This will mainly be used when targeting our wasm2c implementation which has no
problem with zero-length bulk memory operations, as a non-standard extension.
2025-01-22 20:56:28 +01:00
Andrew Kelley f7f6217df9 macho linker: adjust symbol priority
strong symbols always take precedence over weak symbols.
2025-01-17 15:12:01 -08:00
Jacob Young e5d5a8bc4e x86_64: implement switch jump tables 2025-01-16 20:42:08 -05:00
Jacob Young ac1a975f9b x86_64: implement clz and not 2025-01-16 20:42:08 -05:00
Jacob Young a1828ebcda x86_64: demolish the old 2025-01-16 20:42:08 -05:00
Jacob Young b9c4400776 x86_64: implement fallback for pcmpeqq 2025-01-16 20:42:08 -05:00
mlugg d00e05f186 all: update to std.builtin.Type.Pointer.Size field renames
This was done by regex substitution with `sed`. I then manually went
over the entire diff and fixed any incorrect changes.

This diff also changes a lot of `callconv(.C)` to `callconv(.c)`, since
my regex happened to also trigger here. I opted to leave these changes
in, since they *are* a correct migration, even if they're not the one I
was trying to do!
2025-01-16 12:46:29 +00:00
Andrew Kelley eda8b6e137 link.MachO: fix error reporting in flushModule 2025-01-15 20:21:33 -08:00
Andrew Kelley ed810eeb06 link.Elf: fix error reporting for failed hot swap 2025-01-15 20:16:40 -08:00
Andrew Kelley 605311211b wasm linker: omit data count section when value is zero 2025-01-15 19:43:31 -08:00
Andrew Kelley 744bb5d16a wasm linker: change rules about symbol visibility
export by default means export, as expected. if you want hidden
visibility then use hidden visibility.
2025-01-15 18:31:44 -08:00
Andrew Kelley dcb4134835 wasm linker: delete commented out code
this logic has not yet been ported to the new design, but the logic is
safe and sound in the git history and does not need to also live as
commented out code
2025-01-15 18:19:46 -08:00
Andrew Kelley 9dd6efb7e4 wasm linker: fix TLS data segments
fix calculation of alignment and size

include __tls_align and __tls_size globals along with __tls_base

include them only if the TLS segment is emitted

add missing reloc logic for memory_addr_tls_sleb

fix name of data segments to include only the prefix
2025-01-15 18:17:37 -08:00
Andrew Kelley 10db1b9eda wasm linker: fix explicit exports not affecting object files 2025-01-15 18:17:20 -08:00
Andrew Kelley ae16414121 wasm linker: ability to get data and functions from objects 2025-01-15 15:11:37 -08:00
Andrew Kelley 9ddb1c5092 wasm linker: implement --export-table 2025-01-15 15:11:37 -08:00
Andrew Kelley 617eca13eb wasm-linker: remap function types during flush
this is technically not necessary, and loses value the bigger the output
binary is, however it means a smaller output file, so let's do it.
2025-01-15 15:11:36 -08:00
Andrew Kelley c2a918b7a3 wasm linker: implement __wasm_init_tls synthetic function 2025-01-15 15:11:36 -08:00