31608 Commits

Author SHA1 Message Date
Bruno Franca dos Reis
cdd8e82f0a
closes #21824 (#21832) 2024-10-28 14:54:02 +00:00
Alex Rønne Petersen
4c336705b9
Merge pull request #21807 from Rexicon226/riscv-interupt
implement new interrupt calling conventions in the llvm backend
2024-10-28 13:51:11 +01:00
David Rubin
6415ff29d7 remove needs_mem_loc
This field isn't used anymore and was related to old RLS
2024-10-28 08:17:31 +00:00
mlugg
05b445a276 Sema: add missing coercion to bool for condbr_inline
Also, start using labeled switch statements when dispatching
maybe-runtime instructions like condbr to comptime-only variants like
condbr_inline.

This can't be merged until we get a zig1.wasm update due to #21385.

Resolves: #21405
2024-10-28 02:24:59 +00:00
Krzysztof Wolicki
e9f3d18b57
Fix small TODO in tools/migrate_langref.zig (#21825) 2024-10-28 00:03:33 +00:00
David Rubin
93e5ea033c
implement new interrupts in the llvm backend 2024-10-27 13:33:27 -07:00
Robin Voetter
6d8ee89721
fix compile error tests with unstable error sets
The print order of error sets depends on the order that the compiler
adds names to its internal state. These names can be anything, and
do not necessarily need to be from the same error set or be errors
at all. When the last remaining reference to builtin.cpu.arch was
removed in start.zig in 9b42bc1ce5, this order changed. Likely there
is something that has the name 'C' that is referenced somewhere
recursively from builtin.cpu.arch.

This all causes these few tests to fail, and hence the expected
order is simply updated now. Perhaps there is a better way to
add this.
2024-10-27 18:02:12 +01:00
Robin Voetter
49a067ccfe
spirv: forbid merging logical pointers
Under some architecture/operating system combinations it is forbidden
to return a pointer from a merge, as these pointers must point to a
location at compile time. This adds a check for those cases when
returning a pointer from a block merge.
2024-10-27 16:31:45 +01:00
Robin Voetter
39013619b9
spirv: generate test entry points for vulkan 2024-10-27 15:19:57 +01:00
Robin Voetter
7c69231367
spirv: use PhysicalStorageBuffer64 for global pointers under vk
We can use real pointers with this storage class!!
2024-10-27 15:19:56 +01:00
Robin Voetter
6de456c179
spirv: fix up calling conventions for vulkan
* Fragment and Vertex CCs are only valid for SPIR-V when
  running under Vulkan.
* Emit GLCompute instead of Kernel for SPIR-V kernels.
2024-10-27 15:19:55 +01:00
Robin Voetter
9b42bc1ce5
spirv: start.zig support for vulkan
* Use builtin.zig_backend instead of builtin.cpu.arch, the latter
  does not yet compile under VK.
* Don't call regular _start for either opencl or vulkan. We might
  even want to disable these completely.
2024-10-27 14:20:52 +01:00
Alex Rønne Petersen
059f18855f
std.Target: Make DynamicLinker.standard() much stricter.
Its semantics are now documented in terms of DynamicLinker.kind(os.tag).

The idea here is two-fold:

* The term "standard" actually means something; we shouldn't return a valid
  dynamic linker path for a triple for which it hasn't *actually* been
  standardized. That's just incorrect. For example, previously, this function
  would happily return a path for x86_64-linux-androideabi, csky-macos-gnu, or
  aarch64-hurd-msvc, and other such obvious nonsense.
* Callers that use the return value from this function to do host probing (such
  as std.zig.system.detectAbiAndDynamicLinker()) can now do so with greater
  confidence because DynamicLinker.standard() will eagerly reject nonsensical
  target triples.
2024-10-26 22:00:49 +02:00
Alex Rønne Petersen
8818dc6213
std.zig.system: Fix detectAbiAndDynamicLinker() for non-Linux/Hurd ELF hosts.
Since we exclude Abi.none from the list of ABIs to be tested, it means that
Abi.gnu, which happens to be the first in the list, always gets picked for hosts
where the dynamic linker path does not depend on the ABI component of the
triple. Such hosts include all the BSDs, Haiku, Serenity, Solaris, etc.

To fix this, use DynamicLinker.kind() to determine whether this whole exercise
even makes sense. If it doesn't, as is the case on every OS other than Linux and
Hurd, we'll just fall back to Abi.default() which will try to pick a sensible
default based on the arch and OS components. This detection logic still has
plenty of room for improvement, but is at least a notable step up from
confusingly detecting Abi.gnu ~everywhere.

Closes #9089.
2024-10-26 22:00:49 +02:00
Alex Rønne Petersen
27c85e5969
std.Target: Remove hasDynamicLinker() in favor of DynamicLinker.kind().
hasDynamicLinker() was just kind of lying in the case of Darwin platforms for
the benefit of std.zig.system.detectAbiAndDynamicLinker(). A better name would
have been hasElfDynamicLinker() or something. It also got the answer wrong for a
bunch of platforms that don't actually use ELF. Anyway, this was clearly the
wrong layer to do this at, so remove this function and instead use
DynamicLinker.kind() + an isDarwin() check in detectAbiAndDynamicLinker().
2024-10-26 22:00:49 +02:00
Alex Rønne Petersen
f02d25d883
std.Target: Implement DynamicLinker.kind() function.
This helps callers of DynamicLinker.standard() make informed decisions about
the usefulness of the returned value.
2024-10-26 22:00:49 +02:00
Alex Rønne Petersen
bf31c9505c
test: Add some missing android, haiku, illumos, solaris triples to llvm_targets. 2024-10-26 22:00:49 +02:00
Alex Rønne Petersen
c2e6be97ff
wasm2c: Add an optional endianness command line argument.
If not given, endianness is inferred from the target that wasm2c is built for.
2024-10-26 22:00:09 +02:00
Alex Rønne Petersen
5cb45b6855
wasm2c: Add big endian support.
I took a slightly unconventional approach to detecting endianness here. We have
no compiler/platform-specific preprocessor checks in the stage1 C code today,
and I think that's a property worth maintaining.
2024-10-26 22:00:09 +02:00
Alex Rønne Petersen
79717740bd
std.Target: Pick better baseline CPU models for darwin and ps4/ps5 on x86_64.
These are sourced from getX86TargetCPU() in Clang.
2024-10-26 21:59:59 +02:00
Alex Rønne Petersen
ea987faa85
std.Target: Use explicit baseline CPU models for bpf, m68k, msp430, and xcore.
This makes no difference presently, but if LLVM ever starts modeling features
for these, we would not get them by default for our baseline if we use the
generic model.
2024-10-26 21:59:59 +02:00
Alex Rønne Petersen
e26b64a87d
std.Target: Use mips32r2/mips64r2 as the baseline CPU models for mips/mips64.
This matches Clang's defaults. That also means these CPU models tend to get more
testing, so they're a safer baseline choice. Anecdotally, the oldest MIPS
hardware that I've seen anyone run Zig on was also r2.
2024-10-26 21:59:59 +02:00
Alex Rønne Petersen
385f586605
std.Target: Use sm_52 as the baseline CPU model for nvptx.
This matches Clang's default.
2024-10-26 21:59:59 +02:00
Alex Rønne Petersen
2d22cc9f61
std.Target: Use gfx906 as the baseline CPU model for amdgcn.
This matches Clang's default.
2024-10-26 21:59:59 +02:00
Alex Rønne Petersen
5b7eba95ba
std.Target: Use gfx600 as the generic CPU model for amdgcn.
This is the first model that was actually in the GCN family.
2024-10-26 21:59:59 +02:00
Alex Rønne Petersen
51dc4b0549
std.Target: Use ppc64 as the generic CPU model for powerpc64le.
ppc64le remains the baseline CPU model. Note that there's nothing about little
endian, 64-bit PowerPC that requires the features in the ppc64le model; the
reason it exists is that 64-bit PowerPC wasn't really used in little endian mode
prior to those features being commonplace. That makes the ppc64le model a good
baseline model, but not the right choice for a generic model.
2024-10-26 21:59:59 +02:00
Alex Rønne Petersen
8062bdba9a
std.Target: Use avr1 as the generic CPU model for avr.
avr2 remains the baseline CPU model.
2024-10-26 21:59:58 +02:00
Alex Rønne Petersen
c50fb58307
std.Target: Use v11 as the baseline CPU model for lanai. 2024-10-26 21:59:58 +02:00
Alex Rønne Petersen
73b4cb6314
std.Target: Use ck810 as the baseline CPU model for csky. 2024-10-26 21:59:58 +02:00
Alex Rønne Petersen
8282f3be96
std.Target: Add doc comments for Cpu.Arch.generic() and baseline(). 2024-10-26 21:59:58 +02:00
Alex Rønne Petersen
4b78dbe068
Compilation: Omit Clang CPU model flags for some targets. 2024-10-26 21:59:58 +02:00
Xavier Bouchoux
6a364b4a5e link/Elf.zig: ensure capacity before appending linker args.
fixes e567abb339e1edaf5a3c86fe632522a3b8005275 "rework linker inputs"
closes https://github.com/ziglang/zig/issues/21801
2024-10-26 19:46:40 +02:00
Nelson Crosby
b1361f237a Fix up Linux xattr syscalls
fgetxattr now doesn't accidentally call lgetxattr,
and argument types are more consistent.
2024-10-26 13:53:07 +02:00
David Rubin
b122b9fbe0
remove default field for RiscvInterruptOptions.Mode 2024-10-25 20:00:43 -07:00
Matthew Lugg
4adf63aefc
Merge pull request #21796 from Rexicon226/var-args
fix callconv resolution for varargs
2024-10-25 18:31:01 +01:00
llogick
985b13934d Remove @setAlignStack from the langref 2024-10-25 15:13:41 +02:00
Andrew Kelley
b8795b4d02
Merge pull request #21795 from ziglang/kqueue-watch
Build Runner: Implement File System Watching for kqueue
2024-10-25 04:00:26 -07:00
Alex Rønne Petersen
03d0e296cb
Merge pull request #21710 from alexrp/function-alignment
Some improvements to the compiler's handling of function alignment
2024-10-25 11:10:28 +02:00
Linus Groh
5769592cdd std.os.uefi: Fix calling convention build error
```
std/os/uefi/protocol/simple_text_input.zig:10:63: error: no field named 'Win64' in enum '@typeInfo(builtin.CallingConvention).@"union".tag_type.?'
std/builtin.zig:169:31: note: enum declared here
std/os/uefi/protocol/simple_text_output.zig:9:64: error: no field named 'Win64' in enum '@typeInfo(builtin.CallingConvention).@"union".tag_type.?'
std/builtin.zig:169:31: note: enum declared here
std/os/uefi/tables/runtime_services.zig:26:86: error: no field named 'Win64' in enum '@typeInfo(builtin.CallingConvention).@"union".tag_type.?'
std/builtin.zig:169:31: note: enum declared here
```
2024-10-25 10:45:55 +02:00
David Rubin
97e584a6b9
use cCallingConvention instead of .C in Sema
using `.C` in Sema is incorrect since it will be resolved under the target that Zig was compiled with, not the target build configuration. This is easily solved by just calling `cCallingConvention` on the target to resolve it.
2024-10-25 00:08:41 -07:00
Andrew Kelley
cc671a2d40 std.Build.Watch: implement removing watches for kqueue 2024-10-24 23:31:56 -07:00
David Rubin
0d83304228
remove leak from linker 2024-10-24 23:23:15 -07:00
Andrew Kelley
8819d8b061 std.Build.Watch: limit to one switch on os tag
DRY
2024-10-24 16:29:02 -07:00
Andrew Kelley
7a46ba73ce implement --watch for kqueue
it doesn't detect and remove no longer watched things yet

it also isn't aware of any file names reported by kqueue. I'm unsure if
that functionality exists.
2024-10-24 16:24:56 -07:00
Jakub Konka
56996a2809
link/Coff: simplify file structure by collapsing all files into Coff.zig (#21761)
* coff: collapse Coff/lld.zig logic into Coff.zig

* coff: rename std.coff uses to coff_util

* coff: rename self to coff for *Coff references

* coff: collapse Coff/Atom.zig logic into Coff.zig

* coff: collapse Coff/Relocation.zig logic into Coff.zig

* coff: collapse Coff/ImportTable.zig logic into Coff.zig

* coff: remove unused Coff/Object.zig

* link/Coff: fix rebase gone wrong
2024-10-24 13:50:02 +00:00
Veikka Tuominen
9ffee5abed
Sema: fix check for whether current AnalUnit is a test function
Closes #21159
2024-10-24 13:34:07 +03:00
Andrew Kelley
c563ba6b15
Merge pull request #21700 from ziglang/cli-lib-dirs
move linker input file parsing to the frontend
2024-10-23 22:56:04 -07:00
Andrew Kelley
4bdc2d3871 avoid unnecessarily building Scrt1.o when cross-compiling glibc
which, in this branch causes a miscompilation because it would get sent
to the linker.
2024-10-23 16:27:39 -07:00
Andrew Kelley
5e11790c7b mutex protect comp.arena in --verbose-link 2024-10-23 16:27:39 -07:00
Andrew Kelley
2530d638d6 more helpful message when testTlsOffsetAlignment fails 2024-10-23 16:27:39 -07:00