32187 Commits

Author SHA1 Message Date
Andrew Kelley
9cd7cad42e Compilation: account for C objects and resources in prelink 2025-01-15 15:11:36 -08:00
Andrew Kelley
0d028e4407 wasm linker: fix active data segment offset value 2025-01-15 15:11:36 -08:00
Andrew Kelley
50626565ba wasm linker: fix missing function type entry for import 2025-01-15 15:11:36 -08:00
Andrew Kelley
f1e167c1d8 use fixed writer in more places 2025-01-15 15:11:36 -08:00
Andrew Kelley
2174d20540 fix stack pointer initialized to wrong vaddr 2025-01-15 15:11:36 -08:00
Andrew Kelley
728103467e wasm linker: implement indirect function calls 2025-01-15 15:11:36 -08:00
Andrew Kelley
fbbb54bab2 std.io: remove the "temporary workaround" for stage2_aarch64 2025-01-15 15:11:36 -08:00
Andrew Kelley
2dbf66dd69 wasm linker: implement stack pointer global 2025-01-15 15:11:36 -08:00
Andrew Kelley
d1cde847a3 implement the prelink phase in the frontend
this strategy uses a "postponed" queue to handle codegen tasks that
spawn too early. there's probably a better way.
2025-01-15 15:11:36 -08:00
Andrew Kelley
694b129d89 wasm linker: fix data section in flush 2025-01-15 15:11:36 -08:00
Andrew Kelley
ee999d5a14 implement error table and error names data segments 2025-01-15 15:11:36 -08:00
Andrew Kelley
7bf53d236d wasm linker: zcu data fixups are already applied 2025-01-15 15:11:36 -08:00
Andrew Kelley
13eef2f8ab wasm linker: initialize the data segments table in flush
it cannot be done earlier since ids are not stable yet
2025-01-15 15:11:36 -08:00
Andrew Kelley
5e0d33f00f wasm linker: also call lowerZcuData in updateFunc
codegen can generate zcu data dependencies that need to be populated
2025-01-15 15:11:36 -08:00
Andrew Kelley
389b29fd8c wasm linker: avoid recursion in lowerZcuData
instead of recursion, callers of the function are responsible for
checking the respective tables that might have new entries in them and
then calling lowerZcuData again.
2025-01-15 15:11:36 -08:00
Andrew Kelley
4f8a6b0888 wasm linker: implement data fixups
one hash table lookup per fixup
2025-01-15 15:11:36 -08:00
Andrew Kelley
5fac6f380e wasm linker: fix eliding empty data segments 2025-01-15 15:11:36 -08:00
Andrew Kelley
568d9936ab wasm codegen: fix call_indirect 2025-01-15 15:11:36 -08:00
Andrew Kelley
070b973c4a wasm linker: allow undefined imports when lib name is provided
and expose object_host_name as an option for setting the lib name for
object files, since the wasm linking standards don't specify a way to do
it.
2025-01-15 15:11:36 -08:00
Andrew Kelley
23d0882b54 wasm linker: handle extern functions in updateNav 2025-01-15 15:11:36 -08:00
Andrew Kelley
766284fec8 wasm linker: fix data segments memory flow
Recognize three distinct phases:
* before prelink ("object phase")
* after prelink, before flush ("zcu phase")
* during flush ("flush phase")

With this setup, we create data structures during the object phase, then
mutate them during the zcu phase, and then further mutate them during
the flush phase. In order to make the flush phase repeatable, the data
structures are copied just before starting the flush phase.

Further Zcu updates occur against the non-copied data structures.

What's not implemented is frontend garbage collection, in which case
some more changes will be needed in this linker logic to achieve a valid
state with data invariants intact.
2025-01-15 15:11:36 -08:00
Andrew Kelley
3cb00c5bcd std.ArrayHashMap: allow passing empty values array
in which case the values array is set to undefined
2025-01-15 15:11:35 -08:00
Andrew Kelley
91efc5c98b wasm linker: fix calling imported functions
and more disciplined type safety for output function indexes
2025-01-15 15:11:35 -08:00
Andrew Kelley
1a58ae2ed6 wasm codegen: fix extra index not relative 2025-01-15 15:11:35 -08:00
Andrew Kelley
3c70392210 wasm linker: add __zig_error_name_table data when needed 2025-01-15 15:11:35 -08:00
Andrew Kelley
85b53730fe add safety for calling functions that get virtual addrs 2025-01-15 15:11:35 -08:00
Andrew Kelley
2d899e9a9f wasm codegen: fix wrong union field for locals 2025-01-15 15:11:35 -08:00
Andrew Kelley
0630344894 fix calculation of nav alignment 2025-01-15 15:11:35 -08:00
Andrew Kelley
416fc2df94 complete wasm.Emit implementation 2025-01-15 15:11:35 -08:00
Andrew Kelley
458f658b42 wasm linker: implement missing logic
fix some compilation errors for reworked Emit now that it's actually
referenced

introduce DataSegment.Id for sorting data both from object files and
from the Zcu.

introduce optimization: data segment sorting includes a descending sort
on reference count so that references to data can be smaller integers
leading to better LEB encodings. this optimization is skipped for object
files.

implement uav address access function which is based on only 1 hash
table lookup to find out the offset after sorting.
2025-01-15 15:11:35 -08:00
Andrew Kelley
761387dc55 wasm linker: implement type index method 2025-01-15 15:11:35 -08:00
Andrew Kelley
70414c1f43 std.Thread: don't export wasi_thread_start in single-threaded mode 2025-01-15 15:11:35 -08:00
Andrew Kelley
0555fe8d5b fix replaceVecSectionHeader 2025-01-15 15:11:35 -08:00
Andrew Kelley
d6b42e585b wasm linker: implement name subsection
unlike the previous implementation, we can simply iterate an array.
2025-01-15 15:11:35 -08:00
Andrew Kelley
e80a203768 wasm linker fixes
* function resolution now links to zcu_funcs, not navs_exe/navs_obj
* updateFunc now adds things to output functions
* updateNav now handles function aliases correctly
* only report start symbol missing when it is unresolved
2025-01-15 15:11:35 -08:00
Andrew Kelley
4ecc4addc4 wasm codegen: remove dependency on PerThread where possible 2025-01-15 15:11:35 -08:00
Andrew Kelley
098e0b1906 wasm codegen: fix lowering of 32/64 float rt calls 2025-01-15 15:11:35 -08:00
Andrew Kelley
55773aee3f remove bad deinit 2025-01-15 15:11:35 -08:00
Andrew Kelley
4a4fb16c27 add dev env for wasm
with this I get 5s compilations
2025-01-15 15:11:35 -08:00
Andrew Kelley
7879d2cf41 cmake: remove deleted file 2025-01-15 15:11:35 -08:00
Andrew Kelley
edd592d371 fix compilation when enabling llvm 2025-01-15 15:11:35 -08:00
Andrew Kelley
968941b535 wasm linker: finish the flush function
This branch is passing type checking now.
2025-01-15 15:11:35 -08:00
Andrew Kelley
264a63b000 wasm linker: flush export section 2025-01-15 15:11:35 -08:00
Andrew Kelley
bf88059591 wasm linker: flush implemented up to the export section 2025-01-15 15:11:35 -08:00
Andrew Kelley
e21a42723b wasm linker: implement name, module name, and type for function imports 2025-01-15 15:11:35 -08:00
Andrew Kelley
c96e23632f frontend: add const to more Zcu pointers 2025-01-15 15:11:35 -08:00
Andrew Kelley
26c38b2d42 wasm linker: support export section as implicit symbols 2025-01-15 15:11:35 -08:00
Andrew Kelley
031c84c8cb wasm: fix many compilation errors
Still, the branch is not yet passing semantic analysis.
2025-01-15 15:11:35 -08:00
Andrew Kelley
b3ecdb21ee switch to ArrayListUnmanaged for machine code 2025-01-15 15:11:35 -08:00
Andrew Kelley
bf20a4aa9e wasm: use call_intrinsic MIR instruction 2025-01-15 15:11:35 -08:00