Commit Graph

358 Commits

Author SHA1 Message Date
ippsav 291fb43f27 fix(fmt): remove additional trailing newline 2024-08-09 13:07:54 -07:00
Andrew Kelley f6f1ecf0f9 more optimized and correct management of 8-bit PC counters
* Upgrade from u8 to usize element types.
  - WebAssembly assumes u64. It should probably try to be target-aware
    instead.
* Move the covered PC bits to after the header so it goes on the same
  page with the other rapidly changing memory (the header stats).

depends on the semantics of accepted proposal #19755

closes #20994
2024-08-08 21:46:36 -07:00
Alex Rønne Petersen 6976a5da19 generate_c_size_and_align_checks: Remove extraneous newline
Groups the assertions together properly.
2024-08-08 00:51:11 -07:00
Andrew Kelley 468b976f63 Merge pull request #20975 from squeek502/cpu-features-update
update_cpu_features: Fixes and updates
2024-08-07 22:48:57 -07:00
Andrew Kelley 0e99f517f2 Merge pull request #20958 from ziglang/fuzz
introduce a fuzz testing web interface
2024-08-07 11:55:30 -07:00
Ryan Liptak cf2558e971 update_cpu_features: Add x86 alias and arm override
Before this commit, the name `v9.5a` was being used for two different features, and one was overwriting the other in the `all_features` array.

`arrowlake_s` is an alias for `arrowlake-s`
2024-08-07 08:56:50 -07:00
Andrew Kelley cd5f673cae Merge pull request #20909 from alexrp/glibc-riscv
Support building glibc for riscv32/riscv64
2024-08-07 01:14:54 -07:00
Alex Rønne Petersen 8268d7be52 process_headers: Add arc-linux-gnu. 2024-08-07 01:07:09 -07:00
Andrew Kelley 895fa87d77 dump-cov: show seen PCs 2024-08-07 00:48:32 -07:00
Andrew Kelley 517cfb0dd1 fuzzing: progress towards web UI
* libfuzzer: close file after mmap
* fuzzer/main.js: connect with EventSource and debug dump the messages.
  currently this prints how many fuzzer runs have been attempted to
  console.log.
* extract some `std.debug.Info` logic into `std.debug.Coverage`.
  Prepares for consolidation across multiple different executables which
  share source files, and makes it possible to send all the
  PC/SourceLocation mapping data with 4 memcpy'd arrays.
* std.Build.Fuzz:
  - spawn a thread to watch the message queue and signal event
    subscribers.
  - track coverage map data
  - respond to /events URL with EventSource messages on a timer
2024-08-07 00:48:32 -07:00
Andrew Kelley 53aa9d75a9 std.debug.Info.resolveSourceLocations: O(N) implementation 2024-08-07 00:48:32 -07:00
Andrew Kelley c2ab4614b6 std.Debug.Info: remove std.Progress integration
it's too fast to need it now
2024-08-07 00:48:32 -07:00
Andrew Kelley de47acd732 code coverage dumping tool basic implementation
* std.debug.Dwarf: add `sortCompileUnits` along with a field to track
  the state for the purpose of assertions and correct API usage.
  This makes batch lookups faster.
  - in the future, findCompileUnit should be enhanced to rely on sorted
    compile units as well.
* implement `std.debug.Dwarf.resolveSourceLocations` as well as
  `std.debug.Info.resolveSourceLocations`. It's still pretty slow, since
  it calls getLineNumberInfo for each array element, repeating a lot of
  work unnecessarily.
* integrate these APIs with `std.Progress` to understand what is taking
  so long.

The output I'm seeing from this tool shows a lot of missing source
locations. In particular, the main area of interest is missing for my
tokenizer fuzzing example.
2024-08-07 00:48:32 -07:00
Andrew Kelley 2e12b45d8b introduce tool for dumping coverage file
with debug info resolved.

begin efforts of providing `std.debug.Info`, a cross-platform
abstraction for loading debug information into an in-memory format that
supports queries such as "what is the source location of this virtual
memory address?"

Unlike `std.debug.SelfInfo`, this API does not assume the debug
information in question happens to match the host CPU architecture, OS,
or other target properties.
2024-08-07 00:48:32 -07:00
Evan Haas 679ad36fa0 generate_c_size_and_align_checks: add __alignof check 2024-08-06 07:06:57 -07:00
Evan Haas b2dd0a669a generate_c_size_and_align_checks: print failed condition in _Static_assert 2024-08-06 07:03:00 -07:00
Evan Haas 4bdf04654e tools: Add tool for checking size and alignment of C types
Prints _Static_asserts for the size and alignment of all the basic built-in C
types. The output can be run through a compiler for the specified target to
verify that Zig's values are the same as those used by a C compiler for the
target.
2024-08-05 12:56:40 -07:00
ippsav 724804a4e0 Rewrite generate_linux_syscalls.zig (#20895)
refactors the syscall generation tool aiming to reduce code duplication for both the table based arches and the ones generated using a preprocessor.
2024-08-05 10:43:47 -07:00
Andrew Kelley fab5df4028 Merge pull request #20934 from alexrp/sparc32-leon3
`std.Target`: Bump baseline CPU for sparc32 to v9; add `sparcv9-linux-gnu` to `process_headers.zig`
2024-08-05 09:52:52 -07:00
Alex Rønne Petersen 4ba9a6f44c process_headers: Add sparcv9-linux-gnu for glibc.
This is 32-bit SPARC targeting the v8 ABI but v9 CPU.
2024-08-05 12:19:22 +02:00
YANG Xudong ea847535fc Add loongarch 64 to gen_stubs.zig. 2024-08-04 12:04:39 -07:00
Alex Rønne Petersen f43c05690e process_headers: Replace ilp32/lp64 with ilp32d/lp64d.
The former are soft float; the latter are hard float. We primarily care about
hard float here.
2024-08-02 09:54:08 +02:00
Alex Rønne Petersen 635a3d87de glibc: Change riscv32-linux-gnuilp32 target triple to riscv32-linux-gnu.
This target triple was weird on multiple levels:

* The `ilp32` ABI is the soft float ABI. This is not the main ABI we want to
  support on RISC-V; rather, we want `ilp32d`.
* `gnuilp32` is a bespoke tag that was introduced in Zig. The rest of the world
  just uses `gnu` for RISC-V target triples.
* `gnu_ilp32` is already the name of an ILP32 ABI used on AArch64. `gnuilp32` is
  too easy to confuse with this.
* We don't use this convention for `riscv64-linux-gnu`.
* Supporting all RISC-V ABIs with this convention will result in combinatorial
  explosion; see #20690.
2024-08-02 09:54:08 +02:00
Alex Rønne Petersen f29967f46c generate_linux_syscalls: Skip some reserved syscalls on mips and xtensa. 2024-07-30 01:32:48 +02:00
Alex Rønne Petersen 264b830964 generate_linux_syscalls: Add generation code for xtensa. 2024-07-30 01:32:48 +02:00
Alex Rønne Petersen 09914868ea generate_linux_syscalls: Add generation code for m68k. 2024-07-30 01:32:48 +02:00
Alex Rønne Petersen 6e7d619dc3 generate_linux_syscalls: Add generation code for s390x. 2024-07-30 01:32:48 +02:00
Alex Rønne Petersen 4028762a9a generate_linux_syscalls: Add generation code for mips n32. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen 2598aa574b generate_linux_syscalls: Add generation code for sparc32. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen fb249cf3e1 generate_linux_syscalls: Add generation code for hexagon. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen dd78ee43e4 generate_linux_syscalls: Add generation code for csky. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen 2e910f23f9 generate_linux_syscalls: Add generation code for arc. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen 94a1fd6e8e generate_linux_syscalls: Name mips types according to ABI. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen 1f9dcff747 generate_linux_syscalls: Don't expose the helper constants on mips/mips64. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen 2747fca226 generate_linux_syscalls: Simplify include paths.
Using the tooling includes means we won't run into the asm/bitsperlong.h issue.
2024-07-30 01:32:47 +02:00
Alex Rønne Petersen c9664cb657 generate_linux_syscalls: Bring loongarch64 generation code in line with other newer ports. 2024-07-30 01:32:47 +02:00
Alex Rønne Petersen 7e74276661 generate_linux_syscalls: Rework generation strategy for newer kernel ports.
If we're going to abuse the preprocessor, we may as well go all the way and have
it generate a convenient format for us. This achieves two things:

1. We no longer need hacks for the arch-specific syscalls.
2. We now generate the correct syscall names for 32-bit platforms.

The latter is because we now resolve __SC_3264, etc.
2024-07-29 09:50:41 +02:00
Alex Rønne Petersen f494a47ca5 generate_linux_syscalls: Add some missing include paths for riscv. 2024-07-29 09:50:41 +02:00
Alex Rønne Petersen 290609eff5 generate_linux_syscalls: Add riscv32 support. 2024-07-29 09:50:41 +02:00
Alex Rønne Petersen 0460248900 generate_linux_syscalls: Handle riscv_hwprobe. 2024-07-29 09:50:41 +02:00
Alex Rønne Petersen e0b9ebf322 gen_stubs: Add riscv32 handling in a few more places. 2024-07-29 09:50:41 +02:00
Andrew Kelley 26d2a7960e default "trace pc guard" coverage off
* Add -f(no-)sanitize-coverage-trace-pc-guard CLI flag which defaults to
  off. This value lowers to TracePCGuard = true (LLVM backend) and -Xclang
  -fsanitize-coverage-trace-pc-guard. These settings are not
  automatically included with -ffuzz.
* Add `Build.Step.Compile` flag for sanitize_coverage_trace_pc_guard
  with appropriate documentation.
* Add `zig cc` integration for the respective flags.
* Avoid crashing in ELF linker code when -ffuzz -femit-llvm-ir used
  together.
2024-07-23 17:30:53 -07:00
Andrew Kelley 645ad1ef72 incr-check: support running the generated binary 2024-07-20 01:06:29 -07:00
Andrew Kelley 9f112ce868 incr-test: running an update 2024-07-20 01:06:29 -07:00
Andrew Kelley ea2c45227a init incremental compilation check tool 2024-07-20 01:06:29 -07:00
Andrew Kelley 727f1fa743 update update_cpu_features tool to latest std.Progress API
closes #20261
2024-06-11 15:24:57 -07:00
Andrew Kelley c09f5f3795 glibc: add riscv32 and loongarch64 2024-06-05 22:43:53 -07:00
YANG Xudong 87150468fc generate loongarch64 Linux syscalls 2024-06-05 18:54:14 -04:00
Andrew Kelley 46b2f67905 update musl libc.S to v1.2.5
adds loongarch64 and riscv32
2024-06-04 22:37:28 -07:00
Andrew Kelley 85a46ee520 update musl headers to v1.2.5
adds loongarch64 and riscv32
2024-06-04 16:54:11 -07:00