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