ziglang/zig
259
6.0k
Fork
You've already forked zig
771

Coff linker enhancements, new linker testing framework, and COFF objdump implementation #35674

Merged
andrewrk merged 94 commits from kcbanner/zig:coff_linker_wip into master 2026年06月25日 19:21:12 +02:00

This changeset enhances the Coff linker with the following features:

  • Outputing objects (.obj) and archives (.lib)
  • Outputing implibs alongside images
  • Outputing the TLS and Exports data directories for images
  • Consuming objects, archives, and import libraries as inputs
  • Only links in objects from archives as required, ie. if they contain a symbol needed to satisfy a reference
  • COMDAT rules (enough support for linking compiler_rt and libc, some COMDAT types are not supported yet)
  • Supports linking against both -gnu and -msvc libc
  • TLS support
  • __dllimport support: Indirect calls / loads from the IAT directly
  • Detects which entrypoint to choose based on exported symbols
  • -gnu: Constructor / destructor support (ie. merge .ctor and .dtor, and set up the __CTOR_LIST__, __DTOR_LIST__ symbols)
  • Support for several .drectve arguments (these are required to correctly link msvc libc):
    • /INCLUDE: Forcing a symbol to be referenced
    • /ALTERNATENAME: Adding symbol aliases
    • /MERGE: Section merging. This functionality is also used to direct certain sections into the right place (like .ctor / .dtor into .rdata)
    • /DEFAULTLIB: Adding new inputs
  • Enhanced the --debug-link-snapshot output

Supporting changes:

  • Linker crash reporting now can optionally dump a linker snapshot if --debug-link-snapshot is provided. This is not enabled by default as dumping snapshots for large binaries can take some time, and gets in the way if actually debugging the process.
  • x86_64/Emit: Support __dllimported functions / data by codegening the indirect call / load to the __imp_ symbol directly.
  • MappedFile: Added realign, shrink, and unit tests
  • MappedFile: A few fixes to resizing, mainly around when sibling nodes don't have the same alignment. Linking libc adds a lot of input section, and they tend to vary in alignment, so I hit this case a lot.
  • MappedFile: Added a safety lock. This is used in idle() as to prevent accidently introducing a node modification in an idle task, which would break deterministic output.
  • meta: Add BareUnion (from multi_array_list)

Additionally, this PR also contains the new linker testing framework, and objdump implementation for COFF (see below).

I removed the legacy compiler_rt dynlib hack as it's no longer needed, we now support all the COMDAT features required to link compiler_rt statically.

See the added linker tests for more details, but in summary: the COFF linker generates working binaries for both gnu and msvc (including libc), linking statically against compiler_rt!

There are several remaining TODOs in Coff.zig, which I plan on addressing in future PRs. I didn't want to hold off on PRing this branch any longer, as some of these are non-trivial, and I haven't figured out how to address them yet.

New linker testing framework

I've added a new set of linker tests (which were removed in #32065), in a new form that aims to address the points outlined in that pr:

  • less effort to create and maintain tests
  • less CPU overhead - we should be able to add a lot of tests without
    adding a lot of CI time.
  • more helpful failures. A failed linker test should provide the next
    steps a developer can take to understand why the test failed.
  • a goal of porting over all of LLD and mold's test suites, or at least the good
    ones.

The new framework works as follows:

  • test-link is the root step
  • Test targets are defined explicitly in test.link_targets
  • I've chosen to only run .Debug targets for now, to reduce the CI cost. Both llvm and self-hosted linkers are tested.
  • Tests are a combination of comparing objdump snapshot output, actually running the artifacts, and checking for linker errors
  • verifyObjdump is used to compare existing snapshots to zig objdump output for an artifact
  • -Dlink-snapshot-update causes tests to run in a mode that outputs snapshots instead of checking against them

A typical workflow for adding a new test:

  1. Add the test
  2. zig-debug build test-link -Dtest-filter=my-test -Dlink-snapshot-update
    • This will output a .dmp file for all the snapshot combinations defined in any verifyObjdump calls
    • A single snapshot intentionally aliaes between many targets to reduce noise in the snapshot folder, so snapshot updates are made by whichever test runs first for that snapshot name. If differences between targets do exist, they will be revealed in step 4.
  3. Inspect the snapshot output for correctness
  4. zig-debug build test-link -Dtest-filter=my-test
    • This will now run all targets against the newly added snapshots
  5. If there are now snapshot failures, that means different targets had different snapshot outputs. The output should be inspected to see if these results are indeed valid differences. If they are, then the scope parameter should be used to cause -Dlink-snapshot-update to output snapshot to different filenames, scoped on the diference.
  6. Re-run -Dlink-snapshot-update to update the new set of snapshots

I've only added COFF targets for these tests, as they rely on objdump functionality which only exists for COFF so far.

I plan on enhancing this test framework further in futures PRs (alongside objdump, see below), to address the 4th point about porting over tests from other linkers. There are also lots of missing tests that still need to be added back.

COFF Objdump

This was a requirement for snapshot testing, as well as aiding in developing the linker itself

Supported features:

Usage: zig objdump [options] file
Options:
 -h, --help Print this help and exit
 --all-headers Alias for --file-headers --linker-member=2 --member-headers --section-headers --relocs --symbols
 --exports[=sort] Display exported symbols.
 In the case of COFF import libraries, displays the symbol list and import headers.
 Specify =sort to optionally sort the import headers by symbol name.
 --file-headers Display file-format specific headers
 --imports Display imported symbols
 --linker-member[=1|2|longnames] (Coff) Display contents of the specified archive linker member (default 2)
 --member-headers Display archive member headers
 --elements=[e1],[e2],-[e3],... Select which formatting elements are displayed. Intended for snapshot testing.
 file-type File type summary
 header-name Name that precedes a header block
 member-path Display full member paths. If removed, only basenames will be used.
 newlines Newlines between output sections
 table-header Table headers with column names
 all (default) All of the above
 --only-member=[name] Only consider archive members names that contain [name]. Can be specified multiple times.
 --only-section=[name] Only consider section names that contain [name]. Can be specified multiple times.
 --only-symbol=[name] Only consider symbol names that contain [name]. Can be specified multiple times.
 --redact=[kind] Redact the specified field kind. Intended for snapshot testing.
 rva Relative virtual addresses
 va Virtual addresses and file offsets
 ord Symbol ordinals / hints
 size Sizes and lengths
 all All of the above
 --relocs Display relocations
 -s, --snapshot Alias for --redact=all --elements=-all
 --section-headers Display section headers
 --strings Display string tables
 --symbols Display symbol tables
 --tls Display TLS information

Some example output:

❯ zig objdump mathtest-dync-exe-no-llvm.dll --all-headers
mathtest-dync-exe-no-llvm.dll: PE/COFF image
COFF Header:
 8664 machine (AMD64)
 7 number_of_sections
 6a08670a time_date_stamp
 0 pointer_to_symbol_table
 0 number_of_symbols
 f0 size_of_optional_header
 2022 flags
 | EXECUTABLE_IMAGE
 | LARGE_ADDRESS_AWARE
 | DLL
COFF Optional Header:
 20b magic (PE32+)
 14.00 linker_version
 14a400 size_of_code
 84e00 size_of_initialized_data
 0 size_of_uninitialized_data
 1000 address_of_entry_point ( 180001000)
 1000 base_of_code ( 180001000)
 180000000 image_base
 1000 section_alignment
 200 file_alignment
 6.00 operating_system_version
 1.00 image_version
 6.00 subsystem_version
 0 win32_version_value
 1d6000 size_of_image
 400 size_of_headers
 0 checksum
 2 subsystem (WINDOWS_GUI)
 160 dll_flags
 | HIGH_ENTROPY_VA
 | DYNAMIC_BASE
 | NX_COMPAT
 100000 size_of_stack_reserve
 1000 size_of_stack_commit
 100000 size_of_heap_reserve
 1000 size_of_heap_commit
 0 loader_flags
 10 number_of_rva_and_sizes
Data Directories:
 1b48d0 54 EXPORT
 1b4924 8c IMPORT
 0 0 RESOURCE
 1cc000 633c EXCEPTION
 0 0 SECURITY
 1d4000 1280 BASERELOC
 1bc000 1c DEBUG
 0 0 ARCHITECTURE
 0 0 GLOBALPTR
 1aebc8 28 TLS
 0 0 LOAD_CONFIG
 0 0 BOUND_IMPORT
 1b4c80 2d0 IAT
 0 0 DELAY_IMPORT
 0 0 COM_DESCRIPTOR
 0 0 RESERVED
Sections in 'mathtest-dync-exe-no-llvm.dll':
Num Name RVA Virt Size Data Size & Data & Relocs & Lines # Relocs # Lines Flags
 1 .text 1000 14a346 14a400 400 0 0 0 0 60000020 | CNT_CODE MEM_EXECUTE MEM_READ
 2 .rdata 14c000 6fe3c 70000 14a800 0 0 0 0 40000040 | CNT_INITIALIZED_DATA MEM_READ
 3 .buildid 1bc000 52 200 1ba800 0 0 0 0 40000040 | CNT_INITIALIZED_DATA MEM_READ
 4 .data 1bd000 e2a0 d200 1baa00 0 0 0 0 c0000040 | CNT_INITIALIZED_DATA MEM_READ MEM_WRITE
 5 .pdata 1cc000 633c 6400 1c7c00 0 0 0 0 40000040 | CNT_INITIALIZED_DATA MEM_READ
 6 .tls 1d3000 20 200 1ce000 0 0 0 0 c0000040 | CNT_INITIALIZED_DATA MEM_READ MEM_WRITE
 7 .reloc 1d4000 1280 1400 1ce200 0 0 0 0 42000040 | CNT_INITIALIZED_DATA MEM_DISCARDABLE MEM_READ
No symbol table found

If this output was used for a snapshot test that wanted to test the presence of a particular export:

❯ zig objdump mathtest-dync-exe-no-llvm.dll --exports --only-symbol=add --redact=rva --elements=-all
Export directory:
 0 flags
 0 time_date_stamp
 0.00 version
xxxxxxxxxxxxxxxx name_rva
 1 ordinal_base
 1 number_of_entries
 1 number_of_names
xxxxxxxxxxxxxxxx export_address_table_rva
xxxxxxxxxxxxxxxx name_pointer_table_rva
xxxxxxxxxxxxxxxx ordinal_table_rva
 1 0 xxxxxxxx | add

The redaction (--redact=) and element removal (--elements=) functionality is used to remove parts of the output that don't matter for the particular test, as to not cause spurious failures if say, an RVA for a symbol changes due to some unrelated change to the linker. -s is shorthand which enables all the redacts and removes all extra output elements, but particular tests may not use this if they do care about specific values.

This changeset enhances the Coff linker with the following features: - Outputing objects (.obj) and archives (.lib) - Outputing implibs alongside images - Outputing the TLS and Exports data directories for images - Consuming objects, archives, and import libraries as inputs - Only links in objects from archives as required, ie. if they contain a symbol needed to satisfy a reference - COMDAT rules (enough support for linking compiler_rt and libc, some COMDAT types are not supported yet) - Supports linking against both -gnu and -msvc libc - TLS support - `__dllimport` support: Indirect calls / loads from the IAT directly - Detects which entrypoint to choose based on exported symbols - `-gnu`: Constructor / destructor support (ie. merge .ctor and .dtor, and set up the `__CTOR_LIST__`, `__DTOR_LIST__` symbols) - Support for several `.drectve` arguments (these are required to correctly link `msvc` libc): - `/INCLUDE`: Forcing a symbol to be referenced - `/ALTERNATENAME`: Adding symbol aliases - `/MERGE`: Section merging. This functionality is also used to direct certain sections into the right place (like `.ctor` / `.dtor` into `.rdata`) - `/DEFAULTLIB`: Adding new inputs - Enhanced the `--debug-link-snapshot` output Supporting changes: - Linker crash reporting now can optionally dump a linker snapshot if `--debug-link-snapshot` is provided. This is not enabled by default as dumping snapshots for large binaries can take some time, and gets in the way if actually debugging the process. - x86_64/Emit: Support `__dllimport`ed functions / data by codegening the indirect call / load to the `__imp_` symbol directly. - MappedFile: Added realign, shrink, and unit tests - MappedFile: A few fixes to resizing, mainly around when sibling nodes don't have the same alignment. Linking libc adds a lot of input section, and they tend to vary in alignment, so I hit this case a lot. - MappedFile: Added a safety lock. This is used in `idle()` as to prevent accidently introducing a node modification in an idle task, which would break deterministic output. - meta: Add BareUnion (from `multi_array_list`) Additionally, this PR also contains the new linker testing framework, and `objdump` implementation for COFF (see below). I removed the legacy compiler_rt dynlib hack as it's no longer needed, we now support all the COMDAT features required to link compiler_rt statically. See the added linker tests for more details, but in summary: the COFF linker generates working binaries for both `gnu` and `msvc` (including libc), linking statically against `compiler_rt`! There are several remaining TODOs in Coff.zig, which I plan on addressing in future PRs. I didn't want to hold off on PRing this branch any longer, as some of these are non-trivial, and I haven't figured out how to address them yet. ### New linker testing framework I've added a new set of linker tests (which were removed in https://codeberg.org/ziglang/zig/pulls/32065), in a new form that aims to address the points outlined in that pr: > - less effort to create and maintain tests > - less CPU overhead - we should be able to add a lot of tests without adding a lot of CI time. > - more helpful failures. A failed linker test should provide the next steps a developer can take to understand why the test failed. > - a goal of porting over all of LLD and mold's test suites, or at least the good ones. The new framework works as follows: - `test-link` is the root step - Test targets are defined explicitly in `test.link_targets` - I've chosen to only run .Debug targets for now, to reduce the CI cost. Both llvm and self-hosted linkers are tested. - Tests are a combination of comparing objdump snapshot output, actually running the artifacts, and checking for linker errors - `verifyObjdump` is used to compare existing snapshots to `zig objdump` output for an artifact - `-Dlink-snapshot-update` causes tests to run in a mode that outputs snapshots instead of checking against them A typical workflow for adding a new test: 1. Add the test 2. zig-debug build test-link -Dtest-filter=my-test -Dlink-snapshot-update - This will output a .dmp file for all the snapshot combinations defined in any `verifyObjdump` calls - A single snapshot intentionally aliaes between many targets to reduce noise in the snapshot folder, so snapshot updates are made by whichever test runs first for that snapshot name. If differences between targets do exist, they will be revealed in step 4. 3. Inspect the snapshot output for correctness 4. zig-debug build test-link -Dtest-filter=my-test - This will now run all targets against the newly added snapshots 5. If there are now snapshot failures, that means different targets had different snapshot outputs. The output should be inspected to see if these results are indeed valid differences. If they are, then the `scope` parameter should be used to cause `-Dlink-snapshot-update` to output snapshot to different filenames, scoped on the diference. 6. Re-run `-Dlink-snapshot-update` to update the new set of snapshots I've only added COFF targets for these tests, as they rely on objdump functionality which only exists for COFF so far. I plan on enhancing this test framework further in futures PRs (alongside objdump, see below), to address the 4th point about porting over tests from other linkers. There are also lots of missing tests that still need to be added back. ### COFF Objdump This was a requirement for snapshot testing, as well as aiding in developing the linker itself Supported features: ``` Usage: zig objdump [options] file Options: -h, --help Print this help and exit --all-headers Alias for --file-headers --linker-member=2 --member-headers --section-headers --relocs --symbols --exports[=sort] Display exported symbols. In the case of COFF import libraries, displays the symbol list and import headers. Specify =sort to optionally sort the import headers by symbol name. --file-headers Display file-format specific headers --imports Display imported symbols --linker-member[=1|2|longnames] (Coff) Display contents of the specified archive linker member (default 2) --member-headers Display archive member headers --elements=[e1],[e2],-[e3],... Select which formatting elements are displayed. Intended for snapshot testing. file-type File type summary header-name Name that precedes a header block member-path Display full member paths. If removed, only basenames will be used. newlines Newlines between output sections table-header Table headers with column names all (default) All of the above --only-member=[name] Only consider archive members names that contain [name]. Can be specified multiple times. --only-section=[name] Only consider section names that contain [name]. Can be specified multiple times. --only-symbol=[name] Only consider symbol names that contain [name]. Can be specified multiple times. --redact=[kind] Redact the specified field kind. Intended for snapshot testing. rva Relative virtual addresses va Virtual addresses and file offsets ord Symbol ordinals / hints size Sizes and lengths all All of the above --relocs Display relocations -s, --snapshot Alias for --redact=all --elements=-all --section-headers Display section headers --strings Display string tables --symbols Display symbol tables --tls Display TLS information ``` Some example output: ``` ❯ zig objdump mathtest-dync-exe-no-llvm.dll --all-headers mathtest-dync-exe-no-llvm.dll: PE/COFF image COFF Header: 8664 machine (AMD64) 7 number_of_sections 6a08670a time_date_stamp 0 pointer_to_symbol_table 0 number_of_symbols f0 size_of_optional_header 2022 flags | EXECUTABLE_IMAGE | LARGE_ADDRESS_AWARE | DLL COFF Optional Header: 20b magic (PE32+) 14.00 linker_version 14a400 size_of_code 84e00 size_of_initialized_data 0 size_of_uninitialized_data 1000 address_of_entry_point ( 180001000) 1000 base_of_code ( 180001000) 180000000 image_base 1000 section_alignment 200 file_alignment 6.00 operating_system_version 1.00 image_version 6.00 subsystem_version 0 win32_version_value 1d6000 size_of_image 400 size_of_headers 0 checksum 2 subsystem (WINDOWS_GUI) 160 dll_flags | HIGH_ENTROPY_VA | DYNAMIC_BASE | NX_COMPAT 100000 size_of_stack_reserve 1000 size_of_stack_commit 100000 size_of_heap_reserve 1000 size_of_heap_commit 0 loader_flags 10 number_of_rva_and_sizes Data Directories: 1b48d0 54 EXPORT 1b4924 8c IMPORT 0 0 RESOURCE 1cc000 633c EXCEPTION 0 0 SECURITY 1d4000 1280 BASERELOC 1bc000 1c DEBUG 0 0 ARCHITECTURE 0 0 GLOBALPTR 1aebc8 28 TLS 0 0 LOAD_CONFIG 0 0 BOUND_IMPORT 1b4c80 2d0 IAT 0 0 DELAY_IMPORT 0 0 COM_DESCRIPTOR 0 0 RESERVED Sections in 'mathtest-dync-exe-no-llvm.dll': Num Name RVA Virt Size Data Size & Data & Relocs & Lines # Relocs # Lines Flags 1 .text 1000 14a346 14a400 400 0 0 0 0 60000020 | CNT_CODE MEM_EXECUTE MEM_READ 2 .rdata 14c000 6fe3c 70000 14a800 0 0 0 0 40000040 | CNT_INITIALIZED_DATA MEM_READ 3 .buildid 1bc000 52 200 1ba800 0 0 0 0 40000040 | CNT_INITIALIZED_DATA MEM_READ 4 .data 1bd000 e2a0 d200 1baa00 0 0 0 0 c0000040 | CNT_INITIALIZED_DATA MEM_READ MEM_WRITE 5 .pdata 1cc000 633c 6400 1c7c00 0 0 0 0 40000040 | CNT_INITIALIZED_DATA MEM_READ 6 .tls 1d3000 20 200 1ce000 0 0 0 0 c0000040 | CNT_INITIALIZED_DATA MEM_READ MEM_WRITE 7 .reloc 1d4000 1280 1400 1ce200 0 0 0 0 42000040 | CNT_INITIALIZED_DATA MEM_DISCARDABLE MEM_READ No symbol table found ``` If this output was used for a snapshot test that wanted to test the presence of a particular export: ``` ❯ zig objdump mathtest-dync-exe-no-llvm.dll --exports --only-symbol=add --redact=rva --elements=-all Export directory: 0 flags 0 time_date_stamp 0.00 version xxxxxxxxxxxxxxxx name_rva 1 ordinal_base 1 number_of_entries 1 number_of_names xxxxxxxxxxxxxxxx export_address_table_rva xxxxxxxxxxxxxxxx name_pointer_table_rva xxxxxxxxxxxxxxxx ordinal_table_rva 1 0 xxxxxxxx | add ``` The redaction (`--redact=`) and element removal (`--elements=`) functionality is used to remove parts of the output that don't matter for the particular test, as to not cause spurious failures if say, an RVA for a symbol changes due to some unrelated change to the linker. `-s` is shorthand which enables all the redacts and removes all extra output elements, but particular tests may not use this if they do care about specific values.
jacobly requested changes 2026年06月08日 15:57:44 +02:00
Dismissed
jacobly left a comment
Copy link

First pass, just looking at linker infra changes.

First pass, just looking at linker infra changes.
@ -113,1 +132,4 @@
trydumpCrashContextSema(anal,w,&S.crash_heap);
}elseif(LinkerOp.current)|linker_op|{
tryw.writeAll("Linker snapshot:\n");
if(build_options.enable_link_snapshots){
Owner
Copy link

Please delete this dead option and just use enable_debug_extensions instead. As is, this is too specific of an option to need to remember when your goal is to debug the compiler. If you ever have a use case for enabling only this option, it can be a dev feature instead.

Please delete this dead option and just use `enable_debug_extensions` instead. As is, this is too specific of an option to need to remember when your goal is to debug the compiler. If you ever have a use case for enabling only this option, it can be a dev feature instead.
kcbanner marked this conversation as resolved
src/link.zig Outdated
@ -1086,0 +1103,4 @@
};
pubfndump(base:*File,w:*Io.Writer,tid:Zcu.PerThread.Id)!DumpResult{
if(!build_options.enable_link_snapshots)unreachable;
Owner
Copy link

This just adds extra burden to call sites for no reason, instead return a different tag if the caller needs to be able to distinguish this condition.

This just adds extra burden to call sites for no reason, instead return a different tag if the caller needs to be able to distinguish this condition.
kcbanner marked this conversation as resolved
@ -2624,6 +2625,7 @@ fn create(
.synth_prog_node=.none,
.input_prog_node=.none,
.textrel_count=0,
.dump_snapshot=options.enable_link_snapshots,
Owner
Copy link

Redundant with options.

Redundant with `options`.
kcbanner marked this conversation as resolved
@ -354,3 +363,4 @@
mf:*MappedFile,
gpa:std.mem.Allocator,
new_alignment:std.mem.Alignment,
set_alignment:bool,
Owner
Copy link

This is always passed as a literal, and not a named variable, so a bare bool makes the call sites too hard to understand.

Possible solutions:

  • options struct
  • enum type
This is always passed as a literal, and not a named variable, so a bare `bool` makes the call sites too hard to understand. Possible solutions: - options struct - enum type
kcbanner marked this conversation as resolved
kcbanner force-pushed coff_linker_wip from 04b614164b
Some checks failed
ci / s390x-linux-debug (pull_request) Failing after 7m19s
ci / s390x-linux-release (pull_request) Failing after 8m51s
ci / x86_64-freebsd-release (pull_request) Failing after 30m2s
ci / x86_64-linux-debug (pull_request) Failing after 20m42s
ci / x86_64-netbsd-release (pull_request) Failing after 29m41s
ci / x86_64-linux-debug-llvm (pull_request) Failing after 27m55s
ci / x86_64-freebsd-debug (pull_request) Failing after 42m29s
ci / x86_64-linux-release (pull_request) Failing after 30m18s
ci / x86_64-openbsd-release (pull_request) Failing after 48m28s
ci / x86_64-netbsd-debug (pull_request) Failing after 50m55s
ci / x86_64-openbsd-debug (pull_request) Failing after 54m14s
ci / aarch64-macos-release (pull_request) Failing after 56m59s
ci / x86_64-windows-release (pull_request) Failing after 58m18s
ci / aarch64-linux-release (pull_request) Failing after 1h23m56s
ci / powerpc64le-linux-release (pull_request) Failing after 1h40m26s
ci / x86_64-windows-debug (pull_request) Failing after 1h42m31s
ci / aarch64-macos-debug (pull_request) Failing after 1h47m28s
ci / aarch64-linux-debug (pull_request) Failing after 2h9m56s
ci / powerpc64le-linux-debug (pull_request) Failing after 5h13m35s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / loongarch64-linux-debug (pull_request) Has been cancelled
ci / loongarch64-linux-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
to 8e34fad16a
Some checks failed
ci / aarch64-macos-release (pull_request) Failing after 44m53s
ci / x86_64-netbsd-release (pull_request) Failing after 32m32s
ci / aarch64-linux-release (pull_request) Failing after 1h17m15s
ci / x86_64-netbsd-debug (pull_request) Failing after 48m42s
ci / x86_64-freebsd-debug (pull_request) Successful in 59m42s
ci / x86_64-freebsd-release (pull_request) Successful in 59m57s
ci / powerpc64le-linux-release (pull_request) Failing after 1h40m58s
ci / aarch64-macos-debug (pull_request) Failing after 2h7m17s
ci / aarch64-linux-debug (pull_request) Failing after 2h15m15s
ci / x86_64-openbsd-release (pull_request) Failing after 47m14s
ci / x86_64-openbsd-debug (pull_request) Failing after 1h7m8s
ci / s390x-linux-debug (pull_request) Failing after 7m28s
ci / s390x-linux-release (pull_request) Failing after 10m36s
ci / x86_64-windows-release (pull_request) Failing after 1h3m3s
ci / x86_64-linux-debug (pull_request) Successful in 1h15m46s
ci / x86_64-windows-debug (pull_request) Failing after 1h43m22s
ci / powerpc64le-linux-debug (pull_request) Failing after 4h1m34s
ci / x86_64-linux-release (pull_request) Failing after 3h19m28s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 4h17m27s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / loongarch64-linux-debug (pull_request) Has been cancelled
ci / loongarch64-linux-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
2026年06月11日 08:23:07 +02:00
Compare
kcbanner force-pushed coff_linker_wip from 8e34fad16a
Some checks failed
ci / aarch64-macos-release (pull_request) Failing after 44m53s
ci / x86_64-netbsd-release (pull_request) Failing after 32m32s
ci / aarch64-linux-release (pull_request) Failing after 1h17m15s
ci / x86_64-netbsd-debug (pull_request) Failing after 48m42s
ci / x86_64-freebsd-debug (pull_request) Successful in 59m42s
ci / x86_64-freebsd-release (pull_request) Successful in 59m57s
ci / powerpc64le-linux-release (pull_request) Failing after 1h40m58s
ci / aarch64-macos-debug (pull_request) Failing after 2h7m17s
ci / aarch64-linux-debug (pull_request) Failing after 2h15m15s
ci / x86_64-openbsd-release (pull_request) Failing after 47m14s
ci / x86_64-openbsd-debug (pull_request) Failing after 1h7m8s
ci / s390x-linux-debug (pull_request) Failing after 7m28s
ci / s390x-linux-release (pull_request) Failing after 10m36s
ci / x86_64-windows-release (pull_request) Failing after 1h3m3s
ci / x86_64-linux-debug (pull_request) Successful in 1h15m46s
ci / x86_64-windows-debug (pull_request) Failing after 1h43m22s
ci / powerpc64le-linux-debug (pull_request) Failing after 4h1m34s
ci / x86_64-linux-release (pull_request) Failing after 3h19m28s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 4h17m27s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / loongarch64-linux-debug (pull_request) Has been cancelled
ci / loongarch64-linux-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
to 8896719327
Some checks failed
ci / x86_64-windows-release (pull_request) Failing after 42m42s
ci / x86_64-netbsd-release (pull_request) Successful in 43m47s
ci / x86_64-netbsd-debug (pull_request) Successful in 44m16s
ci / x86_64-freebsd-release (pull_request) Successful in 45m17s
ci / x86_64-freebsd-debug (pull_request) Successful in 48m38s
ci / x86_64-openbsd-release (pull_request) Successful in 51m25s
ci / aarch64-macos-release (pull_request) Successful in 52m0s
ci / x86_64-linux-debug (pull_request) Successful in 55m38s
ci / x86_64-openbsd-debug (pull_request) Successful in 58m36s
ci / x86_64-windows-debug (pull_request) Failing after 1h2m42s
ci / aarch64-macos-debug (pull_request) Successful in 1h15m31s
ci / aarch64-linux-release (pull_request) Successful in 1h29m50s
ci / s390x-linux-release (pull_request) Failing after 1h40m3s
ci / powerpc64le-linux-release (pull_request) Successful in 2h17m45s
ci / s390x-linux-debug (pull_request) Failing after 2h24m21s
ci / x86_64-linux-release (pull_request) Failing after 2h28m49s
ci / aarch64-linux-debug (pull_request) Successful in 2h42m0s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 3h4m14s
ci / powerpc64le-linux-debug (pull_request) Successful in 4h57m9s
ci / loongarch64-linux-release (pull_request) Successful in 2h22m54s
ci / loongarch64-linux-debug (pull_request) Successful in 4h1m41s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
2026年06月12日 01:34:19 +02:00
Compare
kcbanner force-pushed coff_linker_wip from 8896719327
Some checks failed
ci / x86_64-windows-release (pull_request) Failing after 42m42s
ci / x86_64-netbsd-release (pull_request) Successful in 43m47s
ci / x86_64-netbsd-debug (pull_request) Successful in 44m16s
ci / x86_64-freebsd-release (pull_request) Successful in 45m17s
ci / x86_64-freebsd-debug (pull_request) Successful in 48m38s
ci / x86_64-openbsd-release (pull_request) Successful in 51m25s
ci / aarch64-macos-release (pull_request) Successful in 52m0s
ci / x86_64-linux-debug (pull_request) Successful in 55m38s
ci / x86_64-openbsd-debug (pull_request) Successful in 58m36s
ci / x86_64-windows-debug (pull_request) Failing after 1h2m42s
ci / aarch64-macos-debug (pull_request) Successful in 1h15m31s
ci / aarch64-linux-release (pull_request) Successful in 1h29m50s
ci / s390x-linux-release (pull_request) Failing after 1h40m3s
ci / powerpc64le-linux-release (pull_request) Successful in 2h17m45s
ci / s390x-linux-debug (pull_request) Failing after 2h24m21s
ci / x86_64-linux-release (pull_request) Failing after 2h28m49s
ci / aarch64-linux-debug (pull_request) Successful in 2h42m0s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 3h4m14s
ci / powerpc64le-linux-debug (pull_request) Successful in 4h57m9s
ci / loongarch64-linux-release (pull_request) Successful in 2h22m54s
ci / loongarch64-linux-debug (pull_request) Successful in 4h1m41s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
to 42bed82818
Some checks failed
ci / x86_64-windows-release (pull_request) Failing after 38m29s
ci / x86_64-netbsd-release (pull_request) Successful in 43m54s
ci / x86_64-freebsd-release (pull_request) Successful in 44m52s
ci / x86_64-netbsd-debug (pull_request) Successful in 46m7s
ci / x86_64-openbsd-release (pull_request) Successful in 47m14s
ci / x86_64-freebsd-debug (pull_request) Successful in 48m46s
ci / x86_64-openbsd-debug (pull_request) Successful in 50m30s
ci / x86_64-windows-debug (pull_request) Failing after 1h7m0s
ci / aarch64-macos-release (pull_request) Successful in 1h12m51s
ci / aarch64-macos-debug (pull_request) Successful in 1h16m23s
ci / s390x-linux-release (pull_request) Successful in 1h26m22s
ci / aarch64-linux-release (pull_request) Successful in 1h28m49s
ci / x86_64-linux-debug (pull_request) Successful in 1h35m20s
ci / x86_64-linux-release (pull_request) Failing after 2h14m39s
ci / s390x-linux-debug (pull_request) Successful in 2h17m40s
ci / powerpc64le-linux-release (pull_request) Successful in 2h18m32s
ci / aarch64-linux-debug (pull_request) Successful in 2h49m23s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 3h21m34s
ci / powerpc64le-linux-debug (pull_request) Successful in 3h45m58s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / loongarch64-linux-debug (pull_request) Has been cancelled
ci / loongarch64-linux-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
2026年06月13日 20:17:34 +02:00
Compare
kcbanner force-pushed coff_linker_wip from bf8e5ccbad
Some checks failed
ci / x86_64-linux-release (pull_request) Failing after 36m58s
ci / x86_64-linux-debug (pull_request) Failing after 40m38s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / loongarch64-linux-debug (pull_request) Has been cancelled
ci / loongarch64-linux-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
ci / x86_64-windows-debug (pull_request) Has been cancelled
ci / x86_64-windows-release (pull_request) Has been cancelled
ci / aarch64-linux-debug (pull_request) Has been cancelled
ci / aarch64-linux-release (pull_request) Has been cancelled
ci / x86_64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-macos-release (pull_request) Has been cancelled
ci / x86_64-linux-debug-llvm (pull_request) Has been cancelled
ci / x86_64-netbsd-debug (pull_request) Has been cancelled
ci / x86_64-openbsd-debug (pull_request) Has been cancelled
ci / x86_64-openbsd-release (pull_request) Has been cancelled
ci / x86_64-netbsd-release (pull_request) Has been cancelled
ci / x86_64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-macos-debug (pull_request) Has been cancelled
ci / s390x-linux-debug (pull_request) Has been cancelled
ci / s390x-linux-release (pull_request) Has been cancelled
ci / powerpc64le-linux-release (pull_request) Has been cancelled
ci / powerpc64le-linux-debug (pull_request) Has been cancelled
to 54ce968195
Some checks failed
ci / aarch64-macos-release (pull_request) Successful in 41m57s
ci / x86_64-linux-debug (pull_request) Successful in 56m46s
ci / x86_64-windows-release (pull_request) Failing after 1h0m29s
ci / x86_64-freebsd-debug (pull_request) Successful in 1h2m14s
ci / x86_64-freebsd-release (pull_request) Successful in 50m15s
ci / x86_64-netbsd-debug (pull_request) Successful in 1h1m32s
ci / x86_64-netbsd-release (pull_request) Successful in 46m55s
ci / x86_64-windows-debug (pull_request) Failing after 1h31m7s
ci / aarch64-linux-release (pull_request) Successful in 1h44m4s
ci / x86_64-openbsd-release (pull_request) Successful in 52m26s
ci / x86_64-openbsd-debug (pull_request) Successful in 56m52s
ci / aarch64-macos-debug (pull_request) Successful in 1h58m35s
ci / powerpc64le-linux-release (pull_request) Successful in 2h11m42s
ci / s390x-linux-release (pull_request) Successful in 1h22m39s
ci / aarch64-linux-debug (pull_request) Successful in 2h42m9s
ci / s390x-linux-debug (pull_request) Successful in 2h55m25s
ci / x86_64-linux-release (pull_request) Successful in 3h45m17s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 4h40m30s
ci / powerpc64le-linux-debug (pull_request) Successful in 5h28m7s
ci / loongarch64-linux-release (pull_request) Successful in 2h11m17s
ci / loongarch64-linux-debug (pull_request) Successful in 4h12m4s
ci / aarch64-freebsd-debug (pull_request) Has been cancelled
ci / aarch64-freebsd-release (pull_request) Has been cancelled
ci / aarch64-netbsd-debug (pull_request) Has been cancelled
ci / aarch64-netbsd-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
2026年06月14日 06:29:16 +02:00
Compare
@ -1533,0 +3980,4 @@
trycoff.ensureManyUnusedStringCapacity(
header.number_of_sections+header.number_of_symbols,
string_table_len-@sizeOf(u32),
Owner
Copy link

This does not seem to account for short section names that are not stored in the string table, leading to frequent crashes due to not enough reserved bytes.

This does not seem to account for short section names that are not stored in the string table, leading to frequent crashes due to not enough reserved bytes.
kcbanner marked this conversation as resolved

Can be rebased on master now, and don't forget to enable the tests from #35865.

Can be rebased on master now, and don't forget to enable the tests from #35865.
Author
Member
Copy link

Thanks! I need to fix up an issue where undefs from imported objects don't resolve properly if those globals were first seen with an explicit lib name. I'll rebase and test with your changes once I sort that out 👍

Thanks! I need to fix up an issue where undefs from imported objects don't resolve properly if those globals were first seen with an explicit lib name. I'll rebase and test with your changes once I sort that out 👍
kcbanner force-pushed coff_linker_wip from b4cd85c591
Some checks failed
ci / aarch64-freebsd-debug (pull_request) Has been skipped
ci / aarch64-freebsd-release (pull_request) Has been skipped
ci / x86_64-netbsd-release (pull_request) Successful in 44m47s
ci / x86_64-windows-release (pull_request) Failing after 44m26s
ci / x86_64-openbsd-release (pull_request) Successful in 47m27s
ci / x86_64-freebsd-release (pull_request) Successful in 46m51s
ci / x86_64-freebsd-debug (pull_request) Successful in 50m12s
ci / x86_64-netbsd-debug (pull_request) Successful in 52m19s
ci / aarch64-macos-release (pull_request) Successful in 55m52s
ci / x86_64-openbsd-debug (pull_request) Successful in 57m8s
ci / x86_64-windows-debug (pull_request) Failing after 1h1m10s
ci / aarch64-macos-debug (pull_request) Successful in 1h12m18s
ci / x86_64-linux-debug (pull_request) Successful in 1h26m23s
ci / aarch64-linux-release (pull_request) Successful in 1h29m37s
ci / aarch64-netbsd-debug (pull_request) Has been skipped
ci / aarch64-netbsd-release (pull_request) Has been skipped
ci / s390x-linux-release (pull_request) Successful in 2h14m11s
ci / powerpc64le-linux-release (pull_request) Successful in 2h23m17s
ci / aarch64-linux-debug (pull_request) Successful in 2h49m15s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 3h20m9s
ci / s390x-linux-debug (pull_request) Successful in 3h20m39s
ci / powerpc64le-linux-debug (pull_request) Successful in 3h31m30s
ci / x86_64-linux-release (pull_request) Successful in 3h33m35s
ci / loongarch64-linux-debug (pull_request) Has been cancelled
ci / loongarch64-linux-release (pull_request) Has been cancelled
ci / riscv64-linux-debug (pull_request) Has been cancelled
ci / riscv64-linux-release (pull_request) Has been cancelled
to 594b3faaa3
All checks were successful
ci / aarch64-netbsd-debug (pull_request) Has been skipped
ci / aarch64-netbsd-release (pull_request) Has been skipped
ci / aarch64-freebsd-debug (pull_request) Has been skipped
ci / aarch64-freebsd-release (pull_request) Has been skipped
ci / x86_64-netbsd-release (pull_request) Successful in 49m24s
ci / x86_64-netbsd-debug (pull_request) Successful in 53m19s
ci / x86_64-freebsd-release (pull_request) Successful in 55m52s
ci / x86_64-freebsd-debug (pull_request) Successful in 55m59s
ci / x86_64-openbsd-release (pull_request) Successful in 1h7m27s
ci / x86_64-openbsd-debug (pull_request) Successful in 1h19m36s
ci / aarch64-linux-release (pull_request) Successful in 1h29m56s
ci / aarch64-macos-release (pull_request) Successful in 1h31m14s
ci / x86_64-windows-release (pull_request) Successful in 1h19m31s
ci / x86_64-windows-debug (pull_request) Successful in 1h53m23s
ci / s390x-linux-release (pull_request) Successful in 1h42m32s
ci / powerpc64le-linux-release (pull_request) Successful in 2h16m4s
ci / aarch64-macos-debug (pull_request) Successful in 2h15m53s
ci / x86_64-linux-debug (pull_request) Successful in 1h39m5s
ci / aarch64-linux-debug (pull_request) Successful in 2h33m9s
ci / x86_64-linux-debug-llvm (pull_request) Successful in 2h58m28s
ci / s390x-linux-debug (pull_request) Successful in 4h19m30s
ci / powerpc64le-linux-debug (pull_request) Successful in 5h10m19s
ci / x86_64-linux-release (pull_request) Successful in 4h2m26s
ci / loongarch64-linux-debug (pull_request) Successful in 3h24m57s
ci / loongarch64-linux-release (pull_request) Successful in 2h8m36s
ci / riscv64-linux-debug (pull_request) Has been skipped
ci / riscv64-linux-release (pull_request) Has been skipped
2026年06月24日 04:06:47 +02:00
Compare
andrewrk left a comment
Copy link

Fantastic work! I'm looking forward to using this new linker testing framework.

Fantastic work! I'm looking forward to using this new linker testing framework.
Sign in to join this conversation.
No reviewers
Labels
Clear labels
abi/f32
abi/ilp32
abi/sf
accepted
This proposal is planned.
arch/21k
arch/6502
arch/aarch64
arch/alpha
arch/amdgcn
arch/arc
arch/arc32
arch/arc64
arch/arm
arch/avr
arch/bfin
arch/bpf
arch/colossus
arch/cris
arch/csky
arch/dlx
arch/epiphany
arch/fr30
arch/frv
arch/hexagon
arch/hppa
arch/hppa64
arch/ia64
arch/kalimba
arch/kvx
arch/lanai
arch/lm32
arch/loongarch32
arch/loongarch64
arch/m32r
arch/m68k
arch/m88k
arch/mcore
arch/microblaze
arch/mips
arch/mips64
arch/mmix
arch/moxie
arch/mrisc32
arch/msp430
arch/nds32
arch/ns32k
arch/nvptx
arch/or1k
arch/powerpc
arch/powerpc64
arch/propeller
arch/riscv32
arch/riscv64
arch/rl78
arch/rx
arch/s390x
arch/sh
arch/sparc
arch/sparc64
arch/spirv
arch/spu
arch/tricore
arch/v850
arch/vax
arch/vc4
arch/ve
arch/wasm
arch/x86
arch/x86_64
arch/xcore
arch/xtensa
autodoc
The web application for interactive documentation and generation of its assets.
backend/c
The C backend outputs C source code.
backend/llvm
The LLVM backend outputs an LLVM bitcode module.
backend/self-hosted
The self-hosted backends produce machine code directly.
binutils
Zig's included binary utilities: zig ar, zig dlltool, zig lib, zig ranlib, zig objcopy, and zig rc.
breaking
Implementing this issue could cause existing code to no longer compile or have different behavior.
build system
The Zig build system - zig build, std.Build, the build runner, and package management.
debug info
An issue related to debug information (e.g. DWARF) produced by the Zig compiler.
docs
An issue with documentation, e.g. the language reference or standard library doc comments.
error message
This issue points out an error message that is unhelpful and should be improved.
frontend
Tokenization, parsing, AstGen, ZonGen, Sema, Legalize, and Liveness.
fuzzing
An issue related to Zig's integrated fuzz testing.
incremental
Reuse of internal compiler state for faster compilation.
lib/c
This issue relates to Zig's libc implementation and/or vendored libcs.
lib/compiler-rt
This issue relates to Zig's compiler-rt library.
lib/cxx
This issue relates to Zig's vendored libc++ and/or libc++abi.
lib/std
This issue relates to Zig's standard library.
lib/tsan
This issue relates to Zig's vendored libtsan.
lib/ubsan-rt
This issue relates to Zig's ubsan-rt library.
lib/unwind
This issue relates to Zig's vendored libunwind.
linking
Zig's integrated object file and incremental linker.
miscompilation
The compiler reports success but produces semantically incorrect code.
os/android
os/contiki
os/dragonfly
os/driverkit
os/emscripten
os/freebsd
os/fuchsia
os/haiku
os/hermit
os/hurd
os/illumos
os/ios
os/linux
os/maccatalyst
os/macos
os/managarm
os/netbsd
os/ohos
os/openbsd
os/plan9
os/redox
os/rtems
os/serenity
os/tvos
os/uefi
os/visionos
os/wasi
os/watchos
os/windows
proposal
This issue suggests language modifications. If it also has the "accepted" label then it is planned.
release notes
This issue or pull request should be mentioned in the release notes.
testing
This issue is related to testing the compiler, standard library, or other parts of Zig.
zig cc
Zig as a drop-in C-family compiler.
zig fmt
The Zig source code formatter.
zig reduce
The Zig source code reduction tool.
bounty
https://ziglang.org/news/announcing-donor-bounties
bug
Observed behavior contradicts documented or intended behavior.
contributor-friendly
This issue is limited in scope and/or knowledge of project internals.
downstream
An issue with a third-party project that uses this project.
enhancement
Solving this issue will likely involve adding new logic or components to the codebase.
infra
An issue related to project infrastructure, e.g. continuous integration.
optimization
A task to improve performance and/or resource usage.
question
No questions on the issue tracker; use a community space instead.
regression
Something that used to work in a previous version stopped working
upstream
An issue with a third-party project that this project uses.
use case
Describes a real use case that is difficult or impossible, but does not propose a solution.
No labels
abi/f32
abi/ilp32
abi/sf
accepted
arch/21k
arch/6502
arch/aarch64
arch/alpha
arch/amdgcn
arch/arc
arch/arc32
arch/arc64
arch/arm
arch/avr
arch/bfin
arch/bpf
arch/colossus
arch/cris
arch/csky
arch/dlx
arch/epiphany
arch/fr30
arch/frv
arch/hexagon
arch/hppa
arch/hppa64
arch/ia64
arch/kalimba
arch/kvx
arch/lanai
arch/lm32
arch/loongarch32
arch/loongarch64
arch/m32r
arch/m68k
arch/m88k
arch/mcore
arch/microblaze
arch/mips
arch/mips64
arch/mmix
arch/moxie
arch/mrisc32
arch/msp430
arch/nds32
arch/ns32k
arch/nvptx
arch/or1k
arch/powerpc
arch/powerpc64
arch/propeller
arch/riscv32
arch/riscv64
arch/rl78
arch/rx
arch/s390x
arch/sh
arch/sparc
arch/sparc64
arch/spirv
arch/spu
arch/tricore
arch/v850
arch/vax
arch/vc4
arch/ve
arch/wasm
arch/x86
arch/x86_64
arch/xcore
arch/xtensa
autodoc
backend/c
backend/llvm
backend/self-hosted
binutils
breaking
build system
debug info
docs
error message
frontend
fuzzing
incremental
lib/c
lib/compiler-rt
lib/cxx
lib/std
lib/tsan
lib/ubsan-rt
lib/unwind
linking
miscompilation
os/android
os/contiki
os/dragonfly
os/driverkit
os/emscripten
os/freebsd
os/fuchsia
os/haiku
os/hermit
os/hurd
os/illumos
os/ios
os/linux
os/maccatalyst
os/macos
os/managarm
os/netbsd
os/ohos
os/openbsd
os/plan9
os/redox
os/rtems
os/serenity
os/tvos
os/uefi
os/visionos
os/wasi
os/watchos
os/windows
proposal
release notes
testing
zig cc
zig fmt
zig reduce
bounty
bug
contributor-friendly
downstream
enhancement
infra
optimization
question
regression
upstream
use case
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ziglang/zig!35674
Reference in a new issue
ziglang/zig
No description provided.
Delete branch "kcbanner/zig:coff_linker_wip"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?