-
Notifications
You must be signed in to change notification settings - Fork 74
Description
In the description of the passive segments portion of linking it mentions that __wasm_init_memory
will be used to initialize all memory segments. This is presumably called on the first thread, and LLD today also executes data.drop
for each memory segment.
I think, though, that all new threads also need to execute data.drop
for all memory segments to avoid keeping them around, right? Should data.drop
not be part of __wasm_init_memory
? Or perhaps another synthetic function to drop segments?
FWIW we've had a strategy of doing this in wasm-bindgen prior to LLVM 9 which involved injecting a start
function which did an atomic add to initialize a thread id counter, and based off the thread ID it'd initialize memory or drop segments. I wonder if perhaps most modules need something like that anyway to get synthesized during LLD as well?