Skip to content

Dynamic loading documentation#747

Open
vidyalakshmir wants to merge 7 commits intomainfrom
dynamic-loading-doc
Open

Dynamic loading documentation#747
vidyalakshmir wants to merge 7 commits intomainfrom
dynamic-loading-doc

Conversation

@vidyalakshmir
Copy link
Copy Markdown
Contributor

Describes how dynamic loading is implemented in wasmtime

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases148
Number of Successes147
Number of Failures1
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure1
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.051066s4.569538s
Success
chdir_getcwd.cSuccessNone0.050620s4.530107s
Success
chmod.cSuccessNone0.056609s4.568242s
Success
clock_gettime_highlevel.cSuccessNone0.123106s4.747309s
Success
clock_gettime_simple.cSuccessNone0.048242s4.495210s
Success
cloexec.cSuccessNone0.054124s6.187897s
Success
close.cSuccessNone0.063250s4.564986s
Success
creat_access.cSuccessNone0.054185s4.570130s
Success
doubleclose.cSuccessNone0.046680s4.509919s
Success
dup.cSuccessNone0.046590s4.573306s
Success
dup2.cSuccessNone0.052162s4.594357s
Success
dup3.cSuccessNone0.049448s4.549739s
Success
dupwrite.cSuccessNone0.053776s4.509560s
Success
fchdir.cSuccessNone0.056686s4.543855s
Success
fchmod.cSuccessNone0.058716s4.570568s
Success
fcntl.cSuccessNone0.052188s4.543773s
Success
fdatasync.cSuccessNone0.051256s4.533223s
Success
filetest.cSuccessNone0.054343s4.503077s
Success
filetest1000.cSuccessNone0.062470s4.525719s
Success
flock.cSuccessNone0.061031s4.615748s
Success
fstat.cSuccessNone0.055322s4.555978s
Success
fstatfs.cSuccessNone0.049509s4.533224s
Success
fsync.cSuccessNone0.053285s4.557473s
Success
ftruncate.cSuccessNone0.057101s4.582268s
Success
getcwd.cSuccessNone0.049950s4.554621s
Success
getrandom.cSuccessNone0.051929s4.542743s
Success
ioctl.cSuccessNone0.057166s4.538339s
Success
link.cSuccessNone0.057299s4.561758s
Success
lseek.cSuccessNone0.057605s4.580145s
Success
mkdir_rmdir.cSuccessNone0.054234s4.580093s
Success
open.cSuccessNone0.048374s4.536217s
Success
pread_pwrite.cSuccessNone0.050562s4.540406s
Success
printf.cSuccessNone0.046084s4.484685s
Success
read.cSuccessNone0.055267s4.518214s
Success
readbytes.cSuccessNone0.050031s4.472138s
Success
readlink.cSuccessNone0.053212s4.538026s
Success
readlinkat.cSuccessNone0.055040s4.544805s
Success
rename.cSuccessNone0.056754s4.597922s
Success
sc-writev.cSuccessNone0.054278s4.523358s
Success
stat.cSuccessNone0.056393s4.548216s
Success
statfs.cSuccessNone0.048909s4.514013s
Success
sync_file_range.cSuccessNone0.051474s4.527210s
Success
truncate.cSuccessNone0.056216s4.552035s
Success
unlink.cSuccessNone0.056654s4.599823s
Success
unlinkat.cSuccessNone0.055639s4.565125s
Success
write.cSuccessNone0.047259s4.484117s
Success
writeloop.cSuccessNone0.056213s4.522780s
Success
writepartial.cSuccessNone0.054577s4.497661s
Success
writev.cSuccessNone0.055085s4.545381s
Success
Math Tests
math_link_smoke.cFailureLind_wasm_compiling0.057599s0.110515s
wasm-ld: error: unable to find library -lm
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Memory Tests
brk.cSuccessNone0.051117s4.525663s
Success
malloc.cSuccessNone0.049762s4.490272s
Success
malloc_large.cSuccessNone0.050223s4.511466s
Success
memcpy.cSuccessNone0.048790s4.483666s
Success
memory_error_test.cSuccessNone0.055529s4.532880s
Success
mmap.cSuccessNone0.045501s4.518061s
Success
mmap_aligned.cSuccessNone0.048116s4.496518s
Success
mmap_complicated.cSuccessNone0.054026s4.546606s
Success
mmap_file.cSuccessNone0.054549s4.535107s
Success
mmap_shared.cSuccessNone0.052870s4.532576s
Success
mmaptest.cSuccessNone0.048528s4.517884s
Success
mprotect.cSuccessNone0.047608s4.516021s
Success
mprotect_boundary.cSuccessNone0.047375s4.528516s
Success
mprotect_end_region.cSuccessNone0.048813s4.509626s
Success
mprotect_middle_region.cSuccessNone0.047778s4.522833s
Success
mprotect_multiple_times.cSuccessNone0.047008s4.501460s
Success
mprotect_same_value.cSuccessNone0.046720s4.490584s
Success
mprotect_spanning_regions.cSuccessNone0.048498s4.527937s
Success
sbrk.cSuccessNone0.049880s4.528219s
Success
segfault.cSuccessNone0.055159s4.562326s
Success
shm.cSuccessNone0.053391s4.578998s
Success
shmtest.cSuccessNone0.048905s4.521444s
Success
vtable.cSuccessNone0.061898s4.517219s
Success
Networking Tests
dnstest.cSuccessNone0.054388s4.545365s
Success
epollcreate1.cSuccessNone0.055171s4.549162s
Success
gethostname.cSuccessNone0.047536s4.503563s
Success
getsockname.cSuccessNone0.056517s4.557863s
Success
getsockopt.cSuccessNone0.057519s4.555904s
Success
makepipe.cSuccessNone0.046412s4.486756s
Success
pipe.cSuccessNone0.056647s4.565243s
Success
pipe2.cSuccessNone0.054690s4.511798s
Success
pipeinput.cSuccessNone0.057092s4.581671s
Success
pipeinput2.cSuccessNone0.057580s4.569721s
Success
pipeonestring.cSuccessNone0.056908s4.600615s
Success
pipepong.cSuccessNone0.056181s4.608055s
Success
pipewrite.cSuccessNone0.050940s4.517303s
Success
poll.cSuccessNone0.054426s4.545756s
Success
recvfrom-sendto.cSuccessNone0.058653s4.562419s
Success
serverclient.cSuccessNone0.056099s4.540482s
Success
shutdown.cSuccessNone0.056193s4.500271s
Success
shutdown_fork.cSuccessNone0.054990s4.647578s
Success
simple-select.cSuccessNone0.057221s4.565495s
Success
simple_epoll.cSuccessNone0.054975s4.529151s
Success
socket.cSuccessNone0.053823s4.499936s
Success
socket_cloexec.cSuccessNone0.053587s4.504175s
Success
socketepoll.cSuccessNone0.053014s4.514807s
Success
socketpair.cSuccessNone0.053735s4.544909s
Success
socketselect.cSuccessNone0.053668s4.542775s
Success
tcp_connect_single.cSuccessNone0.056195s4.605561s
Success
uds-getsockname.cSuccessNone0.054940s4.528041s
Success
uds-socketselect.cSuccessNone0.057414s4.541598s
Success
Process Tests
chain_thread.cSuccessNone1.055597s5.697277s
Success
exit.cSuccessNone0.051177s4.505248s
Success
fork2malloc.cSuccessNone0.056415s4.576862s
Success
fork_select.cSuccessNone0.053915s4.566340s
Success
fork_simple.cSuccessNone0.052148s4.551433s
Success
fork_syscall.cSuccessNone0.058852s4.613004s
Success
forkandopen.cSuccessNone0.056623s4.655602s
Success
forkdup.cSuccessNone0.056742s4.524687s
Success
forkexecuid.cSuccessNone0.052904s6.215156s
Success
forkexecv-arg.cSuccessNone0.053542s6.194415s
Success
forkexecv.cSuccessNone0.052056s6.261873s
Success
forkfiles.cSuccessNone0.056466s4.588710s
Success
forkmalloc.cSuccessNone0.068480s4.545530s
Success
forknodup.cSuccessNone0.056323s4.564422s
Success
function-ptr.cSuccessNone0.050494s4.551342s
Success
getegid_syscall.cSuccessNone0.054844s4.572400s
Success
getgid_syscall.cSuccessNone0.055683s4.590433s
Success
getpid.cSuccessNone0.048183s4.524971s
Success
getpid_syscall.cSuccessNone0.056483s4.596169s
Success
getppid.cSuccessNone0.054271s4.575308s
Success
getppid_syscall.cSuccessNone0.058857s4.586469s
Success
getuid.cSuccessNone0.057349s4.528887s
Success
getuid_syscall.cSuccessNone0.054751s4.578285s
Success
hello-arg.cSuccessNone0.044962s4.498075s
Success
hello.cSuccessNone0.045273s4.501620s
Success
longjmp.cSuccessNone0.047468s4.519161s
Success
mutex.cSuccessNone2.059849s6.800296s
Success
sem_forks.cSuccessNone0.058117s4.570439s
Success
setsid.cSuccessNone0.047222s4.494880s
Success
template.cSuccessNone0.054679s4.544945s
Success
test_exec_nofork.cSuccessNone0.054253s6.233941s
Success
test_unlink_open_file.cSuccessNone0.049088s4.504366s
Success
thread.cSuccessNone0.049150s4.659809s
Success
uname.cSuccessNone0.048371s4.558785s
Success
wait.cSuccessNone2.053841s6.547648s
Success
waitpid_anychild.cSuccessNone0.056001s4.555547s
Success
waitpid_syscall.cSuccessNone1.055726s5.573861s
Success
waitpid_wnohang.cSuccessNone0.055122s4.551275s
Success
Signal Tests
alarm.cSuccessNone7.054619s11.561637s
Success
setitimer.cSuccessNone7.054059s11.542503s
Success
sigalrm.cSuccessNone2.053721s6.525021s
Success
sigchld.cSuccessNone1.055813s5.540572s
Success
signal-fork.cSuccessNone4.055820s8.552714s
Success
signal-simple.cSuccessNone0.055078s4.524199s
Success
signal_fork.cSuccessNone0.051947s4.579469s
Success
signal_int_ignored.cSuccessNone2.055184s6.608008s
Success
sigprocmask.cSuccessNone1.054954s5.546456s
Success
Fail Tests

Summary

MetricCount
Total Test Cases2
Number of Successes2
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.123419s4.950487s
Success
mmap-negative2.cSuccessNone0.156190s4.859466s
Success

- Handling dynamic libraries which are loaded via dlopen()
- When dlopen(), dlsym() and dlclose() with glibc invokes their respective implementations within Lind.
- when lind dlopen is invoked, it does the following:
- Gets the full path of the library by prepending LIND_ROOT to the library name
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this still true? we've removed lind root

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current implementation works this way. This has to be changed to adapt to Lind-boot

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases149
Number of Successes149
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.050947s4.237350s
Success
chdir_getcwd.cSuccessNone0.050938s4.256927s
Success
chmod.cSuccessNone0.056901s4.216431s
Success
clock_gettime_highlevel.cSuccessNone0.121944s4.443830s
Success
clock_gettime_simple.cSuccessNone0.045217s4.202666s
Success
cloexec.cSuccessNone0.056383s5.283706s
Success
close.cSuccessNone0.064642s4.229783s
Success
creat_access.cSuccessNone0.054313s4.228864s
Success
doubleclose.cSuccessNone0.045831s3.795311s
Success
dup.cSuccessNone0.047765s4.218352s
Success
dup2.cSuccessNone0.053153s3.842901s
Success
dup3.cSuccessNone0.050582s4.217182s
Success
dupwrite.cSuccessNone0.054128s3.825793s
Success
fchdir.cSuccessNone0.057268s4.221922s
Success
fchmod.cSuccessNone0.058588s4.208843s
Success
fcntl.cSuccessNone0.053317s4.216539s
Success
fdatasync.cSuccessNone0.052132s4.206933s
Success
filetest.cSuccessNone0.053039s3.818932s
Success
filetest1000.cSuccessNone0.064840s3.858996s
Success
flock.cSuccessNone0.060863s4.283953s
Success
fstat.cSuccessNone0.055513s4.214423s
Success
fstatfs.cSuccessNone0.048315s4.207251s
Success
fsync.cSuccessNone0.052828s4.199325s
Success
ftruncate.cSuccessNone0.058260s4.284920s
Success
getcwd.cSuccessNone0.049125s4.244812s
Success
getrandom.cSuccessNone0.054485s4.209527s
Success
ioctl.cSuccessNone0.058789s4.212693s
Success
link.cSuccessNone0.058308s4.242756s
Success
lseek.cSuccessNone0.058303s4.327459s
Success
mkdir_rmdir.cSuccessNone0.055406s4.218844s
Success
open.cSuccessNone0.049187s4.198506s
Success
pread_pwrite.cSuccessNone0.051574s4.214234s
Success
printf.cSuccessNone0.045901s3.810890s
Success
read.cSuccessNone0.054189s4.210982s
Success
readbytes.cSuccessNone0.049741s3.837410s
Success
readlink.cSuccessNone0.055488s4.214157s
Success
readlinkat.cSuccessNone0.057162s4.223543s
Success
rename.cSuccessNone0.056263s4.227502s
Success
sc-writev.cSuccessNone0.052750s4.189730s
Success
stat.cSuccessNone0.056320s4.225640s
Success
statfs.cSuccessNone0.048811s4.213649s
Success
sync_file_range.cSuccessNone0.053154s4.217609s
Success
truncate.cSuccessNone0.057434s4.241841s
Success
unlink.cSuccessNone0.057783s4.269363s
Success
unlinkat.cSuccessNone0.056819s4.256667s
Success
write.cSuccessNone0.047567s3.800021s
Success
writeloop.cSuccessNone0.057811s3.817945s
Success
writepartial.cSuccessNone0.055391s3.824664s
Success
writev.cSuccessNone0.055905s4.210708s
Success
Math Tests
math_link_smoke.cSuccessNone0.058674s3.855004s
Success
math_tests.cSuccessNone0.062670s4.017084s
Success
Memory Tests
brk.cSuccessNone0.051315s4.201974s
Success
malloc.cSuccessNone0.048907s3.812262s
Success
malloc_large.cSuccessNone0.050799s4.191004s
Success
memcpy.cSuccessNone0.050922s3.800439s
Success
memory_error_test.cSuccessNone0.055303s4.214635s
Success
mmap.cSuccessNone0.047508s4.206667s
Success
mmap_aligned.cSuccessNone0.048414s4.211062s
Success
mmap_complicated.cSuccessNone0.053497s4.238783s
Success
mmap_file.cSuccessNone0.054282s4.216968s
Success
mmap_shared.cSuccessNone0.053298s4.222217s
Success
mmaptest.cSuccessNone0.049611s4.211930s
Success
mprotect.cSuccessNone0.047395s4.196069s
Success
mprotect_boundary.cSuccessNone0.048162s4.203616s
Success
mprotect_end_region.cSuccessNone0.046920s4.188763s
Success
mprotect_middle_region.cSuccessNone0.047839s4.196236s
Success
mprotect_multiple_times.cSuccessNone0.047175s4.197825s
Success
mprotect_same_value.cSuccessNone0.046590s4.193309s
Success
mprotect_spanning_regions.cSuccessNone0.048709s4.190978s
Success
sbrk.cSuccessNone0.050853s4.246515s
Success
segfault.cSuccessNone0.056578s4.224242s
Success
shm.cSuccessNone0.054082s4.244619s
Success
shmtest.cSuccessNone0.047979s4.202859s
Success
vtable.cSuccessNone0.062827s3.863485s
Success
Networking Tests
dnstest.cSuccessNone0.053783s4.235681s
Success
epollcreate1.cSuccessNone0.056035s4.243455s
Success
gethostname.cSuccessNone0.048782s3.800877s
Success
getsockname.cSuccessNone0.056761s4.228135s
Success
getsockopt.cSuccessNone0.058240s4.233776s
Success
makepipe.cSuccessNone0.047129s3.818468s
Success
pipe.cSuccessNone0.059904s4.281011s
Success
pipe2.cSuccessNone0.056095s4.199459s
Success
pipeinput.cSuccessNone0.057999s4.251403s
Success
pipeinput2.cSuccessNone0.058480s4.246513s
Success
pipeonestring.cSuccessNone0.057713s4.246051s
Success
pipepong.cSuccessNone0.057577s4.278361s
Success
pipewrite.cSuccessNone0.051064s4.222636s
Success
poll.cSuccessNone0.058250s4.216055s
Success
recvfrom-sendto.cSuccessNone0.056175s4.240277s
Success
serverclient.cSuccessNone0.054934s3.825764s
Success
shutdown.cSuccessNone0.057879s3.852802s
Success
shutdown_fork.cSuccessNone0.058605s4.235209s
Success
simple-select.cSuccessNone0.057036s4.234597s
Success
simple_epoll.cSuccessNone0.056414s4.211887s
Success
socket.cSuccessNone0.054663s3.851665s
Success
socket_cloexec.cSuccessNone0.054650s4.232269s
Success
socketepoll.cSuccessNone0.053968s3.821755s
Success
socketpair.cSuccessNone0.054023s4.261860s
Success
socketselect.cSuccessNone0.055578s4.230590s
Success
tcp_connect_single.cSuccessNone0.055275s4.249858s
Success
uds-getsockname.cSuccessNone0.055597s4.210667s
Success
uds-socketselect.cSuccessNone0.054962s3.871128s
Success
Process Tests
chain_thread.cSuccessNone1.057120s5.367936s
Success
exit.cSuccessNone0.052740s3.799251s
Success
fork2malloc.cSuccessNone0.056678s4.249529s
Success
fork_select.cSuccessNone0.054001s4.261395s
Success
fork_simple.cSuccessNone0.052893s4.243683s
Success
fork_syscall.cSuccessNone0.060378s4.298466s
Success
forkandopen.cSuccessNone0.056343s4.235769s
Success
forkdup.cSuccessNone0.056770s3.862442s
Success
forkexecuid.cSuccessNone0.053146s5.851874s
Success
forkexecv-arg.cSuccessNone0.053794s5.644752s
Success
forkexecv.cSuccessNone0.052974s5.672575s
Success
forkfiles.cSuccessNone0.055851s4.246784s
Success
forkmalloc.cSuccessNone0.067374s4.225541s
Success
forknodup.cSuccessNone0.056935s4.252520s
Success
function-ptr.cSuccessNone0.052268s4.192512s
Success
getegid_syscall.cSuccessNone0.056794s4.287338s
Success
getgid_syscall.cSuccessNone0.056990s4.256769s
Success
getpid.cSuccessNone0.047924s4.190432s
Success
getpid_syscall.cSuccessNone0.057828s4.283845s
Success
getppid.cSuccessNone0.056483s4.244809s
Success
getppid_syscall.cSuccessNone0.060375s4.284490s
Success
getuid.cSuccessNone0.055325s4.229430s
Success
getuid_syscall.cSuccessNone0.054317s4.258581s
Success
hello-arg.cSuccessNone0.046615s3.811532s
Success
hello.cSuccessNone0.045761s3.817071s
Success
longjmp.cSuccessNone0.047390s3.834743s
Success
mutex.cSuccessNone2.061808s6.489587s
Success
sem_forks.cSuccessNone0.058235s4.267091s
Success
setsid.cSuccessNone0.047222s3.833608s
Success
template.cSuccessNone0.055574s4.237568s
Success
test_exec_nofork.cSuccessNone0.053739s5.826309s
Success
test_unlink_open_file.cSuccessNone0.049431s3.839567s
Success
thread.cSuccessNone0.049748s4.351719s
Success
uname.cSuccessNone0.049067s4.197065s
Success
wait.cSuccessNone2.051618s5.867170s
Success
waitpid_anychild.cSuccessNone0.055852s4.281457s
Success
waitpid_syscall.cSuccessNone1.056669s5.262932s
Success
waitpid_wnohang.cSuccessNone0.056101s3.860608s
Success
Signal Tests
alarm.cSuccessNone7.054214s10.868757s
Success
setitimer.cSuccessNone7.054940s10.880866s
Success
sigalrm.cSuccessNone2.056770s5.852097s
Success
sigchld.cSuccessNone1.056900s4.855257s
Success
signal-fork.cSuccessNone4.056875s7.884673s
Success
signal-simple.cSuccessNone0.056291s3.846242s
Success
signal_fork.cSuccessNone0.051201s4.234681s
Success
signal_int_ignored.cSuccessNone2.055044s6.277576s
Success
sigprocmask.cSuccessNone1.054927s4.854653s
Success
Fail Tests

Summary

MetricCount
Total Test Cases2
Number of Successes2
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.112443s4.447864s
Success
mmap-negative2.cSuccessNone0.185381s4.059447s
Success

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases149
Number of Successes149
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.050101s4.205650s
Success
chdir_getcwd.cSuccessNone0.050726s4.235024s
Success
chmod.cSuccessNone0.057028s4.208954s
Success
clock_gettime_highlevel.cSuccessNone0.120676s4.416180s
Success
clock_gettime_simple.cSuccessNone0.045747s4.194076s
Success
cloexec.cSuccessNone0.055027s5.261629s
Success
close.cSuccessNone0.062690s4.226813s
Success
creat_access.cSuccessNone0.055805s4.230275s
Success
doubleclose.cSuccessNone0.046158s3.779002s
Success
dup.cSuccessNone0.046131s4.200945s
Success
dup2.cSuccessNone0.052442s3.822851s
Success
dup3.cSuccessNone0.050572s4.191748s
Success
dupwrite.cSuccessNone0.054982s3.813638s
Success
fchdir.cSuccessNone0.057629s4.222659s
Success
fchmod.cSuccessNone0.058549s4.208185s
Success
fcntl.cSuccessNone0.053715s4.190188s
Success
fdatasync.cSuccessNone0.052101s4.197069s
Success
filetest.cSuccessNone0.053923s3.815734s
Success
filetest1000.cSuccessNone0.065786s3.869088s
Success
flock.cSuccessNone0.062200s4.276352s
Success
fstat.cSuccessNone0.055506s4.206172s
Success
fstatfs.cSuccessNone0.047228s4.187408s
Success
fsync.cSuccessNone0.052430s4.186821s
Success
ftruncate.cSuccessNone0.058287s4.255184s
Success
getcwd.cSuccessNone0.049404s4.224793s
Success
getrandom.cSuccessNone0.053977s4.195386s
Success
ioctl.cSuccessNone0.059889s4.231878s
Success
link.cSuccessNone0.056911s4.249055s
Success
lseek.cSuccessNone0.058238s4.246046s
Success
mkdir_rmdir.cSuccessNone0.054929s4.201655s
Success
open.cSuccessNone0.047306s4.194097s
Success
pread_pwrite.cSuccessNone0.050370s4.192089s
Success
printf.cSuccessNone0.045319s3.807993s
Success
read.cSuccessNone0.053969s4.193775s
Success
readbytes.cSuccessNone0.049970s3.802356s
Success
readlink.cSuccessNone0.053646s4.202120s
Success
readlinkat.cSuccessNone0.055218s4.204636s
Success
rename.cSuccessNone0.055971s4.213193s
Success
sc-writev.cSuccessNone0.052892s4.193957s
Success
stat.cSuccessNone0.055334s4.194119s
Success
statfs.cSuccessNone0.048319s4.188413s
Success
sync_file_range.cSuccessNone0.054636s4.219537s
Success
truncate.cSuccessNone0.055568s4.228952s
Success
unlink.cSuccessNone0.055790s4.232859s
Success
unlinkat.cSuccessNone0.055174s4.232232s
Success
write.cSuccessNone0.047106s3.782284s
Success
writeloop.cSuccessNone0.056526s3.801541s
Success
writepartial.cSuccessNone0.055132s3.798670s
Success
writev.cSuccessNone0.055030s4.203112s
Success
Math Tests
math_link_smoke.cSuccessNone0.057305s3.838854s
Success
math_tests.cSuccessNone0.063912s3.988734s
Success
Memory Tests
brk.cSuccessNone0.051535s4.207659s
Success
malloc.cSuccessNone0.049812s3.795635s
Success
malloc_large.cSuccessNone0.050041s4.178706s
Success
memcpy.cSuccessNone0.049118s3.788129s
Success
memory_error_test.cSuccessNone0.055300s4.195106s
Success
mmap.cSuccessNone0.046137s4.187511s
Success
mmap_aligned.cSuccessNone0.048495s4.223940s
Success
mmap_complicated.cSuccessNone0.054377s4.238067s
Success
mmap_file.cSuccessNone0.054027s4.195156s
Success
mmap_shared.cSuccessNone0.053086s4.217383s
Success
mmaptest.cSuccessNone0.049560s4.202406s
Success
mprotect.cSuccessNone0.048301s4.180167s
Success
mprotect_boundary.cSuccessNone0.047832s4.180650s
Success
mprotect_end_region.cSuccessNone0.047235s4.176871s
Success
mprotect_middle_region.cSuccessNone0.048373s4.190068s
Success
mprotect_multiple_times.cSuccessNone0.048533s4.203475s
Success
mprotect_same_value.cSuccessNone0.046637s4.213739s
Success
mprotect_spanning_regions.cSuccessNone0.048467s4.194470s
Success
sbrk.cSuccessNone0.049439s4.194077s
Success
segfault.cSuccessNone0.054511s4.235113s
Success
shm.cSuccessNone0.052992s4.207054s
Success
shmtest.cSuccessNone0.047704s4.180617s
Success
vtable.cSuccessNone0.058992s3.821208s
Success
Networking Tests
dnstest.cSuccessNone0.053684s4.202666s
Success
epollcreate1.cSuccessNone0.057077s4.229100s
Success
gethostname.cSuccessNone0.047013s3.821037s
Success
getsockname.cSuccessNone0.055724s4.263112s
Success
getsockopt.cSuccessNone0.057572s4.223166s
Success
makepipe.cSuccessNone0.047445s3.817162s
Success
pipe.cSuccessNone0.055663s4.244169s
Success
pipe2.cSuccessNone0.055880s4.178967s
Success
pipeinput.cSuccessNone0.060789s4.276325s
Success
pipeinput2.cSuccessNone0.057667s4.246675s
Success
pipeonestring.cSuccessNone0.058169s4.236625s
Success
pipepong.cSuccessNone0.056559s4.257462s
Success
pipewrite.cSuccessNone0.050788s4.203014s
Success
poll.cSuccessNone0.055009s4.229208s
Success
recvfrom-sendto.cSuccessNone0.056450s4.224557s
Success
serverclient.cSuccessNone0.055535s3.836893s
Success
shutdown.cSuccessNone0.056796s3.834782s
Success
shutdown_fork.cSuccessNone0.055981s4.233317s
Success
simple-select.cSuccessNone0.057271s4.221759s
Success
simple_epoll.cSuccessNone0.055304s4.202017s
Success
socket.cSuccessNone0.054826s3.843728s
Success
socket_cloexec.cSuccessNone0.052960s4.204534s
Success
socketepoll.cSuccessNone0.053655s3.807389s
Success
socketpair.cSuccessNone0.053654s4.231750s
Success
socketselect.cSuccessNone0.054172s4.218956s
Success
tcp_connect_single.cSuccessNone0.055224s4.221886s
Success
uds-getsockname.cSuccessNone0.055765s4.225399s
Success
uds-socketselect.cSuccessNone0.054810s3.825511s
Success
Process Tests
chain_thread.cSuccessNone1.055665s5.359579s
Success
exit.cSuccessNone0.051794s3.795448s
Success
fork2malloc.cSuccessNone0.056070s4.215123s
Success
fork_select.cSuccessNone0.053134s4.237395s
Success
fork_simple.cSuccessNone0.052568s4.223833s
Success
fork_syscall.cSuccessNone0.059311s4.308709s
Success
forkandopen.cSuccessNone0.056100s4.233059s
Success
forkdup.cSuccessNone0.056752s3.857096s
Success
forkexecuid.cSuccessNone0.053687s5.860731s
Success
forkexecv-arg.cSuccessNone0.053022s5.631736s
Success
forkexecv.cSuccessNone0.051406s5.653777s
Success
forkfiles.cSuccessNone0.056176s4.216778s
Success
forkmalloc.cSuccessNone0.068337s4.222445s
Success
forknodup.cSuccessNone0.057280s4.235589s
Success
function-ptr.cSuccessNone0.049457s4.204227s
Success
getegid_syscall.cSuccessNone0.055817s4.239976s
Success
getgid_syscall.cSuccessNone0.055015s4.263221s
Success
getpid.cSuccessNone0.047415s4.207437s
Success
getpid_syscall.cSuccessNone0.057152s4.281936s
Success
getppid.cSuccessNone0.054872s4.223743s
Success
getppid_syscall.cSuccessNone0.058305s4.266329s
Success
getuid.cSuccessNone0.055834s4.219532s
Success
getuid_syscall.cSuccessNone0.053243s4.251484s
Success
hello-arg.cSuccessNone0.044670s3.804939s
Success
hello.cSuccessNone0.045143s3.825599s
Success
longjmp.cSuccessNone0.046132s3.824317s
Success
mutex.cSuccessNone2.057680s6.488071s
Success
sem_forks.cSuccessNone0.057861s4.248445s
Success
setsid.cSuccessNone0.048572s3.833636s
Success
template.cSuccessNone0.053950s4.221578s
Success
test_exec_nofork.cSuccessNone0.053299s5.794308s
Success
test_unlink_open_file.cSuccessNone0.050089s3.797433s
Success
thread.cSuccessNone0.049728s4.364879s
Success
uname.cSuccessNone0.047965s4.196053s
Success
wait.cSuccessNone2.051430s5.844156s
Success
waitpid_anychild.cSuccessNone0.054457s4.238636s
Success
waitpid_syscall.cSuccessNone1.056605s5.263365s
Success
waitpid_wnohang.cSuccessNone0.055550s3.841147s
Success
Signal Tests
alarm.cSuccessNone7.053646s10.831783s
Success
setitimer.cSuccessNone7.054133s10.862774s
Success
sigalrm.cSuccessNone2.054737s5.832152s
Success
sigchld.cSuccessNone1.056856s4.853108s
Success
signal-fork.cSuccessNone4.056271s7.862131s
Success
signal-simple.cSuccessNone0.054969s3.834927s
Success
signal_fork.cSuccessNone0.051654s4.229949s
Success
signal_int_ignored.cSuccessNone2.054571s6.275864s
Success
sigprocmask.cSuccessNone1.054903s4.842350s
Success
Fail Tests

Summary

MetricCount
Total Test Cases2
Number of Successes2
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.110493s4.429487s
Success
mmap-negative2.cSuccessNone0.200936s4.052524s
Success

@rennergade
Copy link
Copy Markdown
Contributor

In terms of motivation I think it needs:

  • at the top reasoning on why we want to support dynamic loading
  • prominently lay out any places we diverge from Linux's dynamic loading model (including things that are in trusted code vs untrusted)
  • Anywhere we make a design decision explain why we made that decision

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases149
Number of Successes149
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.041672s4.061018s
Success
chdir_getcwd.cSuccessNone0.040666s4.067307s
Success
chmod.cSuccessNone0.045487s4.057164s
Success
clock_gettime_highlevel.cSuccessNone0.274673s4.269498s
Success
clock_gettime_simple.cSuccessNone0.035746s4.034524s
Success
cloexec.cSuccessNone0.044063s5.037233s
Success
close.cSuccessNone0.046011s4.085924s
Success
creat_access.cSuccessNone0.042554s4.060883s
Success
doubleclose.cSuccessNone0.037725s3.661269s
Success
dup.cSuccessNone0.037261s4.058661s
Success
dup2.cSuccessNone0.042065s3.701164s
Success
dup3.cSuccessNone0.040227s4.047078s
Success
dupwrite.cSuccessNone0.043163s3.665056s
Success
fchdir.cSuccessNone0.045630s4.063739s
Success
fchmod.cSuccessNone0.047194s4.052751s
Success
fcntl.cSuccessNone0.041916s4.066950s
Success
fdatasync.cSuccessNone0.041862s4.035363s
Success
filetest.cSuccessNone0.041992s3.679182s
Success
filetest1000.cSuccessNone0.045710s3.693651s
Success
flock.cSuccessNone0.049524s4.111753s
Success
fstat.cSuccessNone0.043638s4.055228s
Success
fstatfs.cSuccessNone0.037832s4.029392s
Success
fsync.cSuccessNone0.042556s4.031126s
Success
ftruncate.cSuccessNone0.046107s4.121662s
Success
getcwd.cSuccessNone0.040761s4.071409s
Success
getrandom.cSuccessNone0.043136s4.067414s
Success
ioctl.cSuccessNone0.047578s4.047520s
Success
link.cSuccessNone0.045950s4.080190s
Success
lseek.cSuccessNone0.046275s4.094559s
Success
mkdir_rmdir.cSuccessNone0.043136s4.056211s
Success
open.cSuccessNone0.038674s4.024661s
Success
pread_pwrite.cSuccessNone0.040621s4.043524s
Success
printf.cSuccessNone0.035498s3.679282s
Success
read.cSuccessNone0.044209s4.036350s
Success
readbytes.cSuccessNone0.040090s3.669758s
Success
readlink.cSuccessNone0.043679s4.053096s
Success
readlinkat.cSuccessNone0.044113s4.032464s
Success
rename.cSuccessNone0.044506s4.057385s
Success
sc-writev.cSuccessNone0.041889s4.054496s
Success
stat.cSuccessNone0.045182s4.066770s
Success
statfs.cSuccessNone0.038829s4.034530s
Success
sync_file_range.cSuccessNone0.040938s4.040919s
Success
truncate.cSuccessNone0.044476s4.079654s
Success
unlink.cSuccessNone0.045694s4.100610s
Success
unlinkat.cSuccessNone0.044460s4.062221s
Success
write.cSuccessNone0.037079s3.653170s
Success
writeloop.cSuccessNone0.045385s3.664256s
Success
writepartial.cSuccessNone0.043428s3.663651s
Success
writev.cSuccessNone0.043563s4.045303s
Success
Math Tests
math_link_smoke.cSuccessNone0.046715s3.698910s
Success
math_tests.cSuccessNone0.051157s3.856083s
Success
Memory Tests
brk.cSuccessNone0.040810s4.039594s
Success
malloc.cSuccessNone0.039110s3.657434s
Success
malloc_large.cSuccessNone0.040698s4.025841s
Success
memcpy.cSuccessNone0.039645s3.643213s
Success
memory_error_test.cSuccessNone0.044461s4.059377s
Success
mmap.cSuccessNone0.036397s4.040242s
Success
mmap_aligned.cSuccessNone0.039481s4.028926s
Success
mmap_complicated.cSuccessNone0.041821s4.070741s
Success
mmap_file.cSuccessNone0.043574s4.039645s
Success
mmap_shared.cSuccessNone0.042239s4.077508s
Success
mmaptest.cSuccessNone0.039061s4.045370s
Success
mprotect.cSuccessNone0.037998s4.032643s
Success
mprotect_boundary.cSuccessNone0.038549s4.034073s
Success
mprotect_end_region.cSuccessNone0.036739s4.025566s
Success
mprotect_middle_region.cSuccessNone0.037700s4.033142s
Success
mprotect_multiple_times.cSuccessNone0.037797s4.034977s
Success
mprotect_same_value.cSuccessNone0.037997s4.020776s
Success
mprotect_spanning_regions.cSuccessNone0.038731s4.028062s
Success
sbrk.cSuccessNone0.039686s4.040374s
Success
segfault.cSuccessNone0.044000s4.067161s
Success
shm.cSuccessNone0.042869s4.084197s
Success
shmtest.cSuccessNone0.038166s4.049794s
Success
vtable.cSuccessNone0.049019s3.703786s
Success
Networking Tests
dnstest.cSuccessNone0.043019s4.035069s
Success
epollcreate1.cSuccessNone0.044768s4.085554s
Success
gethostname.cSuccessNone0.038336s3.687334s
Success
getsockname.cSuccessNone0.045034s4.054749s
Success
getsockopt.cSuccessNone0.046278s4.074690s
Success
makepipe.cSuccessNone0.037999s3.664534s
Success
pipe.cSuccessNone0.045391s4.069027s
Success
pipe2.cSuccessNone0.045141s4.023603s
Success
pipeinput.cSuccessNone0.045741s4.089892s
Success
pipeinput2.cSuccessNone0.045997s4.067160s
Success
pipeonestring.cSuccessNone0.045859s4.087218s
Success
pipepong.cSuccessNone0.045134s4.098300s
Success
pipewrite.cSuccessNone0.040208s4.035494s
Success
poll.cSuccessNone0.045386s4.046692s
Success
recvfrom-sendto.cSuccessNone0.047022s4.077330s
Success
serverclient.cSuccessNone0.044726s3.694663s
Success
shutdown.cSuccessNone0.045065s3.685989s
Success
shutdown_fork.cSuccessNone0.044713s4.068568s
Success
simple-select.cSuccessNone0.045469s4.084507s
Success
simple_epoll.cSuccessNone0.044383s4.053699s
Success
socket.cSuccessNone0.044034s3.679640s
Success
socket_cloexec.cSuccessNone0.042614s4.052438s
Success
socketepoll.cSuccessNone0.042886s3.660152s
Success
socketpair.cSuccessNone0.042956s4.083867s
Success
socketselect.cSuccessNone0.042802s4.048426s
Success
tcp_connect_single.cSuccessNone0.044524s4.064291s
Success
uds-getsockname.cSuccessNone0.043903s4.044309s
Success
uds-socketselect.cSuccessNone0.044413s3.689735s
Success
Process Tests
chain_thread.cSuccessNone1.044449s5.206567s
Success
exit.cSuccessNone0.041337s3.660611s
Success
fork2malloc.cSuccessNone0.043475s4.072284s
Success
fork_select.cSuccessNone0.042920s4.099261s
Success
fork_simple.cSuccessNone0.041188s4.072187s
Success
fork_syscall.cSuccessNone0.047646s4.123792s
Success
forkandopen.cSuccessNone0.044256s4.077639s
Success
forkdup.cSuccessNone0.045043s3.721259s
Success
forkexecuid.cSuccessNone0.042414s5.579771s
Success
forkexecv-arg.cSuccessNone0.041080s5.400989s
Success
forkexecv.cSuccessNone0.040501s5.426717s
Success
forkfiles.cSuccessNone0.044535s4.083525s
Success
forkmalloc.cSuccessNone0.056792s4.079696s
Success
forknodup.cSuccessNone0.045701s4.091200s
Success
function-ptr.cSuccessNone0.041869s4.055046s
Success
getegid_syscall.cSuccessNone0.044136s4.089995s
Success
getgid_syscall.cSuccessNone0.044582s4.109852s
Success
getpid.cSuccessNone0.038112s4.018600s
Success
getpid_syscall.cSuccessNone0.045092s4.121343s
Success
getppid.cSuccessNone0.043973s4.093315s
Success
getppid_syscall.cSuccessNone0.046970s4.111831s
Success
getuid.cSuccessNone0.044378s4.050560s
Success
getuid_syscall.cSuccessNone0.042875s4.090664s
Success
hello-arg.cSuccessNone0.036097s3.682796s
Success
hello.cSuccessNone0.036035s3.665125s
Success
longjmp.cSuccessNone0.037975s3.691593s
Success
mutex.cSuccessNone2.050906s6.334133s
Success
sem_forks.cSuccessNone0.047888s4.107673s
Success
setsid.cSuccessNone0.038071s3.677479s
Success
template.cSuccessNone0.044103s4.088819s
Success
test_exec_nofork.cSuccessNone0.042726s5.554285s
Success
test_unlink_open_file.cSuccessNone0.040362s3.668974s
Success
thread.cSuccessNone0.039690s4.206009s
Success
uname.cSuccessNone0.038043s4.061031s
Success
wait.cSuccessNone2.041536s5.727747s
Success
waitpid_anychild.cSuccessNone0.043315s4.077192s
Success
waitpid_syscall.cSuccessNone1.047700s5.096636s
Success
waitpid_wnohang.cSuccessNone0.045218s3.695332s
Success
Signal Tests
alarm.cSuccessNone7.043446s10.716532s
Success
setitimer.cSuccessNone7.043692s10.717471s
Success
sigalrm.cSuccessNone2.043279s5.706298s
Success
sigchld.cSuccessNone1.045746s4.727276s
Success
signal-fork.cSuccessNone4.044953s7.719967s
Success
signal-simple.cSuccessNone0.044160s3.688998s
Success
signal_fork.cSuccessNone0.040768s4.072482s
Success
signal_int_ignored.cSuccessNone2.043237s6.114080s
Success
sigprocmask.cSuccessNone1.042915s4.704302s
Success
Fail Tests

Summary

MetricCount
Total Test Cases2
Number of Successes2
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.082362s4.150821s
Success
mmap-negative2.cSuccessNone0.090986s3.909952s
Success


In contrast, WebAssembly (WASM) binaries are not executed directly by the operating system. They run inside a runtime such as Wasmtime, which parses and validates the module, JIT-compiles the code, and instantiates the module. Instantiation involves allocating linear memory—a contiguous, sandboxed memory region —initializing globals and tables, and copying data segments into memory. Unlike ELF binaries, WASM modules do not rely on OS-level virtual memory mapping for code or libraries. Instead, execution and memory management are handled entirely within the runtime, which enforces isolation, bounds checking, and memory safety.

In the Lind system, dynamic loading support is implemented by extending Wasmtime’s parsing and instantiation mechanisms. Calls such as `dlopen`, `dlsym`, and `dlclose` from glibc are redirected to runtime-provided implementations. The runtime then loads additional WASM modules, allocates memory, resolves symbols, and performs relocation handling—all within the sandboxed environment. Integrating the dynamic loader inside the runtime is necessary because WebAssembly linking requires direct, synchronous modification of internal runtime state, such as function tables and memory bounds, which an external process cannot access without prohibitive serialization overhead. Keeping the dynamic loader internal also avoids the latency of inter-process communication, ensuring that module instantiation remains fast, secure, and fully within the trusted computing base.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a decent first take but the connection between paragraph 2 and 3 is a little blurry.

The last sentence of paragraph 3 also doesn't make any sense to me.


## Changes made to implement dynamic loading:

"To execute WebAssembly applications within Lind, Wasmtime is modified to interface with RawPOSIX for handling system calls such as `mmap`. Specifically, the following changes were implemented in Wasmtime to support dynamic loading:"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you mention mmap here but then you dont really again? this is a bit more confusing, maybe list the changes up front?

### Parsing the dynamic section
The `dylink.0` custom section within WASM shared libraries is parsed to retrieve dynamic linking metadata. The `load_module` function is responsible for parsing the entire WASM binary to extract all section contents, including code, data, imports, exports, and the dynamic linking information.

### Instantiate the dynamic libraries which are passed using `--preload`
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these next two sections just read like recipes but have little context. Either needs to be explanatory text or give some context up front before listgin.


3. When dlsym() is invoked, correspond lind function, fetches the address of the function passed as argument, and invokes it.

### Linear Memory Changes
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need rationale for this layout

Copy link
Copy Markdown
Contributor

@rennergade rennergade left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gave some more feedback. It's getting closer but needs some more polish and context.

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases175
Number of Successes175
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.047836s4.295399s
Success
chdir_getcwd.cSuccessNone0.048396s4.294206s
Success
chmod.cSuccessNone0.053329s4.222576s
Success
clock_gettime_highlevel.cSuccessNone0.117923s4.441948s
Success
clock_gettime_simple.cSuccessNone0.043792s4.254777s
Success
cloexec.cSuccessNone0.052221s3.898038s
Success
close.cSuccessNone0.057757s4.246619s
Success
creat_access.cSuccessNone0.049752s4.256299s
Success
doubleclose.cSuccessNone0.042181s3.815771s
Success
dup.cSuccessNone0.043849s4.236261s
Success
dup2.cSuccessNone0.049621s3.865681s
Success
dup3.cSuccessNone0.046525s4.267275s
Success
dupwrite.cSuccessNone0.050618s3.848083s
Success
etc_conf.cSuccessNone0.044925s4.214890s
Success
fchdir.cSuccessNone0.053774s4.322972s
Success
fchmod.cSuccessNone0.055923s4.242462s
Success
fcntl.cSuccessNone0.050330s4.233628s
Success
fdatasync.cSuccessNone0.048156s4.227581s
Success
filetest.cSuccessNone0.051310s3.844317s
Success
filetest1000.cSuccessNone0.057914s3.854488s
Success
flock.cSuccessNone0.059115s4.370926s
Success
fstat.cSuccessNone0.051643s4.297741s
Success
fstatfs.cSuccessNone0.046036s4.207646s
Success
fsync.cSuccessNone0.048213s4.217796s
Success
ftruncate.cSuccessNone0.054602s4.267173s
Success
getcwd.cSuccessNone0.047132s4.286080s
Success
getrandom.cSuccessNone0.052326s4.275056s
Success
ioctl.cSuccessNone0.053016s4.237008s
Success
link.cSuccessNone0.053135s4.238992s
Success
locale_test.cSuccessNone0.063919s6.011816s
Success
lseek.cSuccessNone0.054779s4.303530s
Success
mkdir_rmdir.cSuccessNone0.051886s4.291524s
Success
nocancel_io.cSuccessNone0.053827s5.558121s
Success
open.cSuccessNone0.045151s4.245249s
Success
pread_pwrite.cSuccessNone0.047014s4.217148s
Success
printf.cSuccessNone0.041742s3.831169s
Success
read.cSuccessNone0.050622s4.201253s
Success
readbytes.cSuccessNone0.048324s3.843066s
Success
readlink.cSuccessNone0.051764s4.257686s
Success
readlinkat.cSuccessNone0.053210s4.249414s
Success
rename.cSuccessNone0.052682s4.227021s
Success
sc-writev.cSuccessNone0.050742s4.240871s
Success
stat.cSuccessNone0.050619s4.221307s
Success
statfs.cSuccessNone0.046923s4.274999s
Success
sync_file_range.cSuccessNone0.048227s4.235883s
Success
truncate.cSuccessNone0.051487s4.232558s
Success
unlink.cSuccessNone0.054027s4.276584s
Success
unlinkat.cSuccessNone0.052004s4.262101s
Success
write.cSuccessNone0.043740s3.809587s
Success
writeloop.cSuccessNone0.053664s3.860867s
Success
writepartial.cSuccessNone0.051437s3.818481s
Success
writev.cSuccessNone0.051595s4.246120s
Success
Math Tests
math_link_smoke.cSuccessNone0.054620s3.884010s
Success
math_tests.cSuccessNone0.058178s4.104195s
Success
Memory Tests
brk.cSuccessNone0.050216s4.305807s
Success
malloc.cSuccessNone0.049007s3.878125s
Success
malloc_large.cSuccessNone0.051199s4.303371s
Success
memcpy.cSuccessNone0.048463s3.983142s
Success
memory_error_test.cSuccessNone0.054423s4.320782s
Success
mmap.cSuccessNone0.046597s4.261122s
Success
mmap_aligned.cSuccessNone0.045669s4.299143s
Success
mmap_complicated.cSuccessNone0.050917s4.315770s
Success
mmap_file.cSuccessNone0.053919s4.306684s
Success
mmap_shared.cSuccessNone0.051646s4.308464s
Success
mmaptest.cSuccessNone0.048324s4.305293s
Success
mprotect.cSuccessNone0.048221s4.326185s
Success
mprotect_boundary.cSuccessNone0.045461s4.243896s
Success
mprotect_end_region.cSuccessNone0.044893s4.254646s
Success
mprotect_middle_region.cSuccessNone0.045312s4.259333s
Success
mprotect_multiple_times.cSuccessNone0.045805s4.276772s
Success
mprotect_same_value.cSuccessNone0.046684s4.266228s
Success
mprotect_spanning_regions.cSuccessNone0.045761s4.266386s
Success
sbrk.cSuccessNone0.049449s4.292014s
Success
segfault.cSuccessNone0.053843s4.437435s
Success
shm.cSuccessNone0.051194s4.292305s
Success
shmtest.cSuccessNone0.046590s4.261905s
Success
tcache_test.cSuccessNone0.057648s4.502866s
Success
vtable.cSuccessNone0.059970s3.894510s
Success
Networking Tests
dnstest.cSuccessNone0.052964s4.259329s
Success
epollcreate1.cSuccessNone0.054430s4.326327s
Success
error_handling_net.cSuccessNone0.058621s4.298336s
Success
getaddrinfo_test.cSuccessNone0.056975s6.025701s
Success
gethostname.cSuccessNone0.045455s3.864805s
Success
getsockname.cSuccessNone0.053148s4.234322s
Success
getsockopt.cSuccessNone0.055840s4.295453s
Success
makepipe.cSuccessNone0.046172s3.901696s
Success
nonblocking_eagain.cSuccessNone0.057421s4.357799s
Success
pipe.cSuccessNone0.055183s4.252711s
Success
pipe2.cSuccessNone0.054706s4.257284s
Success
pipeinput.cSuccessNone0.055473s4.287477s
Success
pipeinput2.cSuccessNone0.054875s4.300753s
Success
pipeonestring.cSuccessNone0.054999s4.344254s
Success
pipepong.cSuccessNone0.055117s4.352563s
Success
pipewrite.cSuccessNone0.047797s4.238876s
Success
poll.cSuccessNone0.051149s4.243048s
Success
recvfrom-sendto.cSuccessNone0.052980s4.286144s
Success
serverclient.cSuccessNone0.054862s3.969811s
Success
shutdown.cSuccessNone0.054704s3.918508s
Success
shutdown_fork.cSuccessNone0.052176s4.288647s
Success
simple-select.cSuccessNone0.055649s4.347013s
Success
simple_epoll.cSuccessNone0.052526s4.257425s
Success
socket.cSuccessNone0.050850s3.934178s
Success
socket_cloexec.cSuccessNone0.051918s4.242606s
Success
socket_options_advanced.cSuccessNone0.057363s4.288500s
Success
socketepoll.cSuccessNone0.050538s3.873109s
Success
socketpair.cSuccessNone0.050468s4.303602s
Success
socketselect.cSuccessNone0.052314s4.260091s
Success
tcp_connect_single.cSuccessNone0.053232s4.306470s
Success
uds-getsockname.cSuccessNone0.051376s4.292170s
Success
uds-socketselect.cSuccessNone0.052703s3.922302s
Success
writev_socket.cSuccessNone0.057476s4.333977s
Success
Process Tests
barrier_test.cSuccessNone0.050959s4.363007s
Success
chain_thread.cSuccessNone1.052040s5.397912s
Success
cxa_atexit_test.cSuccessNone0.046724s3.853684s
Success
exit.cSuccessNone0.047916s3.812254s
Success
flockfile_test.cSuccessNone0.050366s4.392626s
Success
fork2malloc.cSuccessNone0.052713s4.283243s
Success
fork_select.cSuccessNone0.049712s4.244500s
Success
fork_simple.cSuccessNone0.051132s4.258904s
Success
fork_syscall.cSuccessNone0.054330s4.307354s
Success
forkandopen.cSuccessNone0.051503s4.308107s
Success
forkdup.cSuccessNone0.058531s3.878086s
Success
forkexecuid.cSuccessNone0.048771s4.303663s
Success
forkexecv-arg.cSuccessNone0.049020s4.291763s
Success
forkexecv.cSuccessNone0.047599s4.292272s
Success
forkfiles.cSuccessNone0.051488s4.295879s
Success
forkmalloc.cSuccessNone0.051573s4.290999s
Success
forknodup.cSuccessNone0.053062s4.265831s
Success
function-ptr.cSuccessNone0.054385s4.193337s
Success
getegid_syscall.cSuccessNone0.051058s4.299588s
Success
getgid_syscall.cSuccessNone0.051703s4.278522s
Success
getpid.cSuccessNone0.044732s4.208411s
Success
getpid_syscall.cSuccessNone0.053150s4.306420s
Success
getppid.cSuccessNone0.051032s4.277862s
Success
getppid_syscall.cSuccessNone0.055462s4.301298s
Success
getuid.cSuccessNone0.051418s4.230293s
Success
getuid_syscall.cSuccessNone0.049737s4.281914s
Success
hello-arg.cSuccessNone0.041457s3.808607s
Success
hello.cSuccessNone0.041604s3.795133s
Success
longjmp.cSuccessNone0.042764s3.818713s
Success
mutex.cSuccessNone2.053306s6.487316s
Success
printf_deadlock_smoke.cSuccessNone0.059361s4.529698s
Success
printf_thread_test.cSuccessNone0.049224s4.388978s
Success
sem_forks.cSuccessNone0.053308s4.274951s
Success
setsid.cSuccessNone0.043640s3.816818s
Success
template.cSuccessNone0.050565s4.256687s
Success
test_exec_nofork.cSuccessNone0.049251s4.211572s
Success
test_unlink_open_file.cSuccessNone0.046804s3.835460s
Success
thread-test.cSuccessNone0.045667s4.375779s
Success
thread.cSuccessNone0.045454s4.352944s
Success
thread_cageid_race.cSuccessNone0.046634s4.352295s
Success
tls_test.cSuccessNone0.048691s4.359006s
Success
uname.cSuccessNone0.044380s4.229623s
Success
wait.cSuccessNone2.047439s5.872710s
Success
waitpid_anychild.cSuccessNone0.051393s4.290173s
Success
waitpid_syscall.cSuccessNone1.050468s5.271476s
Success
waitpid_wnohang.cSuccessNone0.051480s3.879888s
Success
Signal Tests
alarm.cSuccessNone7.051582s10.932244s
Success
setitimer.cSuccessNone7.052659s10.944298s
Success
sigalrm.cSuccessNone2.052478s5.884932s
Success
sigchld.cSuccessNone1.052280s4.931134s
Success
signal-fork.cSuccessNone4.056050s7.926820s
Success
signal-simple.cSuccessNone0.052047s3.911378s
Success
signal.cSuccessNone0.049367s3.902531s
Success
signal_SIGCHLD.cSuccessNone0.050274s4.279759s
Success
signal_fork.cSuccessNone0.047874s4.287826s
Success
signal_int_ignored.cSuccessNone2.053065s6.324682s
Success
signal_int_thread.cSuccessNone0.049654s4.387854s
Success
signal_longjmp.cSuccessNone0.050176s3.878378s
Success
signal_nodefer.cSuccessNone0.048447s3.881759s
Success
signal_procmask.cSuccessNone0.046913s4.230109s
Success
signal_recursive.cSuccessNone0.046140s3.856508s
Success
signal_sa_mask.cSuccessNone0.046394s3.849866s
Success
sigpipe.cSuccessNone1.053648s5.303662s
Success
sigprocmask.cSuccessNone1.051182s4.881945s
Success
Fail Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.112083s4.410489s
Success
mmap-negative2.cSuccessNone0.111124s4.110191s
Success
Signal Tests
signal_resethand.cSuccessNone1.051714s3.940762s
Success

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases175
Number of Successes175
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.047251s4.248075s
Success
chdir_getcwd.cSuccessNone0.048745s4.301456s
Success
chmod.cSuccessNone0.053539s4.274033s
Success
clock_gettime_highlevel.cSuccessNone0.119204s4.468895s
Success
clock_gettime_simple.cSuccessNone0.042169s4.262440s
Success
cloexec.cSuccessNone0.052790s3.900107s
Success
close.cSuccessNone0.059052s4.305186s
Success
creat_access.cSuccessNone0.052539s4.259395s
Success
doubleclose.cSuccessNone0.042369s3.829933s
Success
dup.cSuccessNone0.043992s4.219907s
Success
dup2.cSuccessNone0.050678s3.899218s
Success
dup3.cSuccessNone0.046286s4.247764s
Success
dupwrite.cSuccessNone0.050079s3.860606s
Success
etc_conf.cSuccessNone0.045658s4.256692s
Success
fchdir.cSuccessNone0.052594s4.261774s
Success
fchmod.cSuccessNone0.054771s4.276730s
Success
fcntl.cSuccessNone0.049793s4.246405s
Success
fdatasync.cSuccessNone0.048924s4.226647s
Success
filetest.cSuccessNone0.049860s3.886650s
Success
filetest1000.cSuccessNone0.058523s3.865857s
Success
flock.cSuccessNone0.058902s4.353261s
Success
fstat.cSuccessNone0.051320s4.264850s
Success
fstatfs.cSuccessNone0.044804s4.302373s
Success
fsync.cSuccessNone0.048522s4.222260s
Success
ftruncate.cSuccessNone0.054324s4.296675s
Success
getcwd.cSuccessNone0.047647s4.275718s
Success
getrandom.cSuccessNone0.051561s4.274895s
Success
ioctl.cSuccessNone0.054915s4.261254s
Success
link.cSuccessNone0.052745s4.269807s
Success
locale_test.cSuccessNone0.063995s6.006647s
Success
lseek.cSuccessNone0.054844s4.288904s
Success
mkdir_rmdir.cSuccessNone0.051544s4.243079s
Success
nocancel_io.cSuccessNone0.054155s5.571974s
Success
open.cSuccessNone0.045429s4.279929s
Success
pread_pwrite.cSuccessNone0.047222s4.257361s
Success
printf.cSuccessNone0.042573s3.854665s
Success
read.cSuccessNone0.050522s4.225331s
Success
readbytes.cSuccessNone0.047759s3.838712s
Success
readlink.cSuccessNone0.050792s4.242163s
Success
readlinkat.cSuccessNone0.052260s4.268805s
Success
rename.cSuccessNone0.054673s4.269682s
Success
sc-writev.cSuccessNone0.049849s4.230782s
Success
stat.cSuccessNone0.050837s4.230901s
Success
statfs.cSuccessNone0.045616s4.274509s
Success
sync_file_range.cSuccessNone0.048200s4.214226s
Success
truncate.cSuccessNone0.052761s4.271720s
Success
unlink.cSuccessNone0.053446s4.293942s
Success
unlinkat.cSuccessNone0.052028s4.273463s
Success
write.cSuccessNone0.044015s3.820235s
Success
writeloop.cSuccessNone0.052691s3.841754s
Success
writepartial.cSuccessNone0.051521s3.858032s
Success
writev.cSuccessNone0.053542s4.239406s
Success
Math Tests
math_link_smoke.cSuccessNone0.055517s3.878467s
Success
math_tests.cSuccessNone0.058017s4.021608s
Success
Memory Tests
brk.cSuccessNone0.048640s4.248302s
Success
malloc.cSuccessNone0.045579s3.866808s
Success
malloc_large.cSuccessNone0.048406s4.221811s
Success
memcpy.cSuccessNone0.046676s3.853317s
Success
memory_error_test.cSuccessNone0.052138s4.243315s
Success
mmap.cSuccessNone0.043337s4.224437s
Success
mmap_aligned.cSuccessNone0.045589s4.272894s
Success
mmap_complicated.cSuccessNone0.050130s4.261262s
Success
mmap_file.cSuccessNone0.052260s4.234697s
Success
mmap_shared.cSuccessNone0.051117s4.299277s
Success
mmaptest.cSuccessNone0.046855s4.285643s
Success
mprotect.cSuccessNone0.045110s4.250269s
Success
mprotect_boundary.cSuccessNone0.044769s4.217363s
Success
mprotect_end_region.cSuccessNone0.044062s4.246710s
Success
mprotect_middle_region.cSuccessNone0.044872s4.235495s
Success
mprotect_multiple_times.cSuccessNone0.043649s4.236673s
Success
mprotect_same_value.cSuccessNone0.044584s4.220718s
Success
mprotect_spanning_regions.cSuccessNone0.044688s4.242557s
Success
sbrk.cSuccessNone0.045868s4.264878s
Success
segfault.cSuccessNone0.051457s4.286045s
Success
shm.cSuccessNone0.051134s4.304293s
Success
shmtest.cSuccessNone0.045216s4.217407s
Success
tcache_test.cSuccessNone0.053556s4.414950s
Success
vtable.cSuccessNone0.057374s3.874580s
Success
Networking Tests
dnstest.cSuccessNone0.051004s4.241045s
Success
epollcreate1.cSuccessNone0.053228s4.269513s
Success
error_handling_net.cSuccessNone0.058766s4.306679s
Success
getaddrinfo_test.cSuccessNone0.055587s6.016747s
Success
gethostname.cSuccessNone0.044421s3.859069s
Success
getsockname.cSuccessNone0.052236s4.281695s
Success
getsockopt.cSuccessNone0.054910s4.255818s
Success
makepipe.cSuccessNone0.044071s3.828141s
Success
nonblocking_eagain.cSuccessNone0.055758s4.299128s
Success
pipe.cSuccessNone0.053279s4.283058s
Success
pipe2.cSuccessNone0.052686s4.233755s
Success
pipeinput.cSuccessNone0.053572s4.276971s
Success
pipeinput2.cSuccessNone0.054267s4.280426s
Success
pipeonestring.cSuccessNone0.055697s4.297634s
Success
pipepong.cSuccessNone0.053284s4.317611s
Success
pipewrite.cSuccessNone0.046933s4.202838s
Success
poll.cSuccessNone0.051185s4.238024s
Success
recvfrom-sendto.cSuccessNone0.053695s4.268764s
Success
serverclient.cSuccessNone0.051691s3.866543s
Success
shutdown.cSuccessNone0.053294s3.884573s
Success
shutdown_fork.cSuccessNone0.052406s4.285941s
Success
simple-select.cSuccessNone0.052841s4.288193s
Success
simple_epoll.cSuccessNone0.051311s4.260947s
Success
socket.cSuccessNone0.050318s3.862100s
Success
socket_cloexec.cSuccessNone0.050218s4.231630s
Success
socket_options_advanced.cSuccessNone0.055668s4.266739s
Success
socketepoll.cSuccessNone0.054660s3.875724s
Success
socketpair.cSuccessNone0.049076s4.302846s
Success
socketselect.cSuccessNone0.051632s4.218548s
Success
tcp_connect_single.cSuccessNone0.052595s4.267338s
Success
uds-getsockname.cSuccessNone0.051062s4.261961s
Success
uds-socketselect.cSuccessNone0.051781s3.866269s
Success
writev_socket.cSuccessNone0.054247s4.277429s
Success
Process Tests
barrier_test.cSuccessNone0.051906s4.385543s
Success
chain_thread.cSuccessNone1.051375s5.383281s
Success
cxa_atexit_test.cSuccessNone0.047210s3.844081s
Success
exit.cSuccessNone0.048568s3.824446s
Success
flockfile_test.cSuccessNone0.051010s4.421031s
Success
fork2malloc.cSuccessNone0.052684s4.276006s
Success
fork_select.cSuccessNone0.050513s4.268126s
Success
fork_simple.cSuccessNone0.049300s4.279818s
Success
fork_syscall.cSuccessNone0.056447s4.320379s
Success
forkandopen.cSuccessNone0.051806s4.273249s
Success
forkdup.cSuccessNone0.059279s3.893026s
Success
forkexecuid.cSuccessNone0.049865s4.287871s
Success
forkexecv-arg.cSuccessNone0.050705s4.287361s
Success
forkexecv.cSuccessNone0.047710s4.267439s
Success
forkfiles.cSuccessNone0.058674s4.316658s
Success
forkmalloc.cSuccessNone0.051657s4.298691s
Success
forknodup.cSuccessNone0.051661s4.276188s
Success
function-ptr.cSuccessNone0.056843s4.234142s
Success
getegid_syscall.cSuccessNone0.051354s4.298225s
Success
getgid_syscall.cSuccessNone0.052005s4.285154s
Success
getpid.cSuccessNone0.044407s4.207379s
Success
getpid_syscall.cSuccessNone0.052975s4.303313s
Success
getppid.cSuccessNone0.051651s4.278988s
Success
getppid_syscall.cSuccessNone0.055038s4.302219s
Success
getuid.cSuccessNone0.052761s4.243466s
Success
getuid_syscall.cSuccessNone0.050495s4.301718s
Success
hello-arg.cSuccessNone0.041864s3.827494s
Success
hello.cSuccessNone0.041981s3.838661s
Success
longjmp.cSuccessNone0.042888s3.845442s
Success
mutex.cSuccessNone2.053326s6.501819s
Success
printf_deadlock_smoke.cSuccessNone0.060429s4.571591s
Success
printf_thread_test.cSuccessNone0.049315s4.422449s
Success
sem_forks.cSuccessNone0.053285s4.289874s
Success
setsid.cSuccessNone0.043692s3.836945s
Success
template.cSuccessNone0.052181s4.281782s
Success
test_exec_nofork.cSuccessNone0.049713s4.242912s
Success
test_unlink_open_file.cSuccessNone0.046523s3.820202s
Success
thread-test.cSuccessNone0.046032s4.352801s
Success
thread.cSuccessNone0.045889s4.370628s
Success
thread_cageid_race.cSuccessNone0.047131s4.375915s
Success
tls_test.cSuccessNone0.048973s4.380841s
Success
uname.cSuccessNone0.044184s4.227248s
Success
wait.cSuccessNone2.047577s5.914592s
Success
waitpid_anychild.cSuccessNone0.051058s4.268312s
Success
waitpid_syscall.cSuccessNone1.051194s5.273967s
Success
waitpid_wnohang.cSuccessNone0.052712s3.882529s
Success
Signal Tests
alarm.cSuccessNone7.050837s10.919899s
Success
setitimer.cSuccessNone7.050397s10.891337s
Success
sigalrm.cSuccessNone2.051120s5.901461s
Success
sigchld.cSuccessNone1.053029s4.950559s
Success
signal-fork.cSuccessNone4.052566s7.948455s
Success
signal-simple.cSuccessNone0.051708s3.864233s
Success
signal.cSuccessNone0.047281s3.858894s
Success
signal_SIGCHLD.cSuccessNone0.049972s4.315340s
Success
signal_fork.cSuccessNone0.049454s4.303550s
Success
signal_int_ignored.cSuccessNone2.051276s6.309870s
Success
signal_int_thread.cSuccessNone0.049435s4.443192s
Success
signal_longjmp.cSuccessNone0.058705s3.876229s
Success
signal_nodefer.cSuccessNone0.047909s3.864796s
Success
signal_procmask.cSuccessNone0.046171s4.275020s
Success
signal_recursive.cSuccessNone0.045248s3.848283s
Success
signal_sa_mask.cSuccessNone0.046140s3.864985s
Success
sigpipe.cSuccessNone1.053984s5.328808s
Success
sigprocmask.cSuccessNone1.051394s4.901107s
Success
Fail Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.115868s4.415960s
Success
mmap-negative2.cSuccessNone0.169964s4.069905s
Success
Signal Tests
signal_resethand.cSuccessNone1.050621s3.917350s
Success

@vidyalakshmir
Copy link
Copy Markdown
Contributor Author

@rennergade Improved the motivation, design decisions and improved implementation details including dlopen/dlsym.

The following have to be added:

  • Integration with lind-boot
  • Details about memory
  • More info about fork, signals etc

# Dynamic Loading in wasmtime

## Motivation
Dynamic loading reduces the memory footprint by allowing shared libraries to be loaded only when they are actually needed at runtime, rather than being statically linked into the application at compile time. This leads to more efficient memory usage, especially when multiple programs share the same libraries. It also avoids code duplication across binaries, reducing overall storage requirements.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is more "What is dynamic loading" than "why we want dynamic loading"

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 4, 2026

End-to-End Test Report

Test Preview

Unified Test Report

grate harness

MetricValue
Total9
Success9
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 2
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 2
[Grate|interpose-exec] Handling function ptr: 2 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 2 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 2
Exiting...

[Grate|interpose-exit] Handling function ptr: 2 from cage: 1
[Grate|interpose-exit] In exit_grate 1 handler for cage: 1
[Grate|interpose-exit] PASS

STDERR:

interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 2
[Grate|interpose-fork] Handling function ptr: 2 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 2
[Grate|interpose-mmap] Handling function ptr: 2 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 2 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage|interpose-register] In cage 2, about to register handler for geteuid
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 0 with fn ptr addr: 7021753225191620609
[Grate|interpose-register] Handling function ptr: 2 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Cage|interpose-register] PASS: geteuid ret = 10
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 2
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 2 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 2
[Grate|geteuid] Handling function ptr: 2 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases179
Number of Successes179
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.051711s4.338646s
Success
chdir_getcwd.cSuccessNone0.052042s4.288036s
Success
chmod.cSuccessNone0.057017s4.322029s
Success
clock_gettime_highlevel.cSuccessNone0.123649s4.471022s
Success
clock_gettime_simple.cSuccessNone0.044868s4.286707s
Success
cloexec.cSuccessNone0.057284s3.941171s
Success
close.cSuccessNone0.062579s4.280042s
Success
creat_access.cSuccessNone0.054587s4.332161s
Success
doubleclose.cSuccessNone0.046885s3.892239s
Success
dup.cSuccessNone0.048086s4.278940s
Success
dup2.cSuccessNone0.053824s3.889160s
Success
dup3.cSuccessNone0.051043s4.320746s
Success
dupwrite.cSuccessNone0.055674s3.920519s
Success
etc_conf.cSuccessNone0.049517s4.338293s
Success
fchdir.cSuccessNone0.057241s4.330038s
Success
fchmod.cSuccessNone0.079451s4.313431s
Success
fcntl.cSuccessNone0.055173s4.269306s
Success
fdatasync.cSuccessNone0.054158s4.276763s
Success
filetest.cSuccessNone0.054541s3.903025s
Success
filetest1000.cSuccessNone0.062838s3.906516s
Success
flock.cSuccessNone0.062947s4.387621s
Success
fstat.cSuccessNone0.055650s4.291341s
Success
fstatfs.cSuccessNone0.050815s4.296529s
Success
fsync.cSuccessNone0.053896s4.252986s
Success
ftruncate.cSuccessNone0.057255s4.327393s
Success
getcwd.cSuccessNone0.049215s4.303576s
Success
getrandom.cSuccessNone0.053986s4.282826s
Success
ioctl.cSuccessNone0.067718s4.300617s
Success
link.cSuccessNone0.058945s4.321246s
Success
locale_test.cSuccessNone0.067727s6.143303s
Success
lseek.cSuccessNone0.058151s4.330398s
Success
mkdir_rmdir.cSuccessNone0.054733s4.334554s
Success
mknod.cSuccessNone0.054594s4.353703s
Success
nocancel_io.cSuccessNone0.056594s5.672172s
Success
open.cSuccessNone0.049567s4.329403s
Success
path_conversion_safety.cSuccessNone0.058387s4.307754s
Success
pread_pwrite.cSuccessNone0.052385s4.323576s
Success
printf.cSuccessNone0.045548s3.891592s
Success
read.cSuccessNone0.056124s4.288322s
Success
readbytes.cSuccessNone0.051969s3.902618s
Success
readlink.cSuccessNone0.055273s4.296706s
Success
readlinkat.cSuccessNone0.055016s4.300452s
Success
readv_writev_test.cSuccessNone0.057239s4.258252s
Success
rename.cSuccessNone0.057139s4.290363s
Success
sc-writev.cSuccessNone0.051437s4.312618s
Success
stat.cSuccessNone0.054343s4.303778s
Success
statfs.cSuccessNone0.050375s4.286669s
Success
sync_file_range.cSuccessNone0.053038s4.262500s
Success
truncate.cSuccessNone0.055310s4.354643s
Success
unlink.cSuccessNone0.057447s4.341314s
Success
unlinkat.cSuccessNone0.056942s4.312954s
Success
write.cSuccessNone0.046277s3.891712s
Success
writeloop.cSuccessNone0.057426s3.893751s
Success
writepartial.cSuccessNone0.056363s3.870055s
Success
writev.cSuccessNone0.057102s4.301867s
Success
Math Tests
math_link_smoke.cSuccessNone0.059870s3.907223s
Success
math_tests.cSuccessNone0.064126s4.056717s
Success
Memory Tests
brk.cSuccessNone0.052780s4.264376s
Success
fork_large_memory.cSuccessNone0.088437s4.839330s
Success
malloc.cSuccessNone0.050504s3.890006s
Success
malloc_large.cSuccessNone0.050944s4.257176s
Success
memcpy.cSuccessNone0.051790s3.887005s
Success
memory_error_test.cSuccessNone0.057283s4.317278s
Success
mmap.cSuccessNone0.048833s4.265494s
Success
mmap_aligned.cSuccessNone0.050719s4.304314s
Success
mmap_complicated.cSuccessNone0.052634s4.330247s
Success
mmap_file.cSuccessNone0.055703s4.294351s
Success
mmap_shared.cSuccessNone0.052678s4.317087s
Success
mmaptest.cSuccessNone0.048414s4.258872s
Success
mprotect.cSuccessNone0.049257s4.281889s
Success
mprotect_boundary.cSuccessNone0.048498s4.292967s
Success
mprotect_end_region.cSuccessNone0.047807s4.298545s
Success
mprotect_middle_region.cSuccessNone0.047464s4.290782s
Success
mprotect_multiple_times.cSuccessNone0.048633s4.288936s
Success
mprotect_same_value.cSuccessNone0.047629s4.283317s
Success
mprotect_spanning_regions.cSuccessNone0.050561s4.308269s
Success
sbrk.cSuccessNone0.048985s4.296332s
Success
segfault.cSuccessNone0.056471s4.357654s
Success
shm.cSuccessNone0.057118s4.357450s
Success
shmtest.cSuccessNone0.047836s4.266452s
Success
vtable.cSuccessNone0.063731s3.977333s
Success
Networking Tests
dnstest.cSuccessNone0.054082s4.280511s
Success
epollcreate1.cSuccessNone0.056607s4.316859s
Success
error_handling_net.cSuccessNone0.063915s4.376404s
Success
getaddrinfo_test.cSuccessNone0.060298s6.097925s
Success
gethostname.cSuccessNone0.047297s3.905437s
Success
getifaddrs.cSuccessNone0.058223s4.364790s
Success
getsockname.cSuccessNone0.057402s4.331369s
Success
getsockopt.cSuccessNone0.059215s4.331103s
Success
makepipe.cSuccessNone0.047333s3.845462s
Success
nonblocking_eagain.cSuccessNone0.060193s4.359177s
Success
pipe.cSuccessNone0.058354s4.329793s
Success
pipe2.cSuccessNone0.055746s4.250224s
Success
pipeinput.cSuccessNone0.057151s4.332121s
Success
pipeinput2.cSuccessNone0.059240s4.321420s
Success
pipeonestring.cSuccessNone0.058693s4.319045s
Success
pipepong.cSuccessNone0.058152s4.382691s
Success
pipewrite.cSuccessNone0.050997s4.258647s
Success
poll.cSuccessNone0.055700s4.291803s
Success
recvfrom-sendto.cSuccessNone0.057223s4.322373s
Success
sendmsg_recvmsg_test.cSuccessNone0.055826s4.254677s
Success
serverclient.cSuccessNone0.055890s3.908144s
Success
shutdown.cSuccessNone0.057820s3.926112s
Success
shutdown_fork.cSuccessNone0.056175s4.356738s
Success
simple-select.cSuccessNone0.058940s4.336831s
Success
simple_epoll.cSuccessNone0.056443s4.337786s
Success
socket.cSuccessNone0.054265s3.899586s
Success
socket_cloexec.cSuccessNone0.053075s4.291859s
Success
socket_options_advanced.cSuccessNone0.060187s4.333113s
Success
socketepoll.cSuccessNone0.055612s3.890196s
Success
socketpair.cSuccessNone0.052850s4.308126s
Success
socketselect.cSuccessNone0.055599s4.298494s
Success
tcp_connect_single.cSuccessNone0.057526s4.314910s
Success
uds-getsockname.cSuccessNone0.055274s4.335204s
Success
uds-nb-select.cSuccessNone2.066047s6.557022s
Success
uds-serverclient.cSuccessNone0.061171s4.369028s
Success
uds-socketselect.cSuccessNone0.056462s3.918317s
Success
writev_socket.cSuccessNone0.059473s4.311176s
Success
Process Tests
barrier_test.cSuccessNone0.055497s4.465804s
Success
chain_thread.cSuccessNone1.055804s5.434588s
Success
cxa_atexit_test.cSuccessNone0.050569s3.933416s
Success
exit.cSuccessNone0.051846s3.905011s
Success
flockfile_test.cSuccessNone0.054788s4.493647s
Success
fork2malloc.cSuccessNone0.058237s4.400413s
Success
fork_select.cSuccessNone0.054878s4.335902s
Success
fork_simple.cSuccessNone0.052669s4.327390s
Success
fork_syscall.cSuccessNone0.060150s4.445331s
Success
fork_tls_ctype.cSuccessNone0.058938s4.373010s
Success
forkandopen.cSuccessNone0.059071s4.367826s
Success
forkdup.cSuccessNone0.056410s3.973304s
Success
forkexecuid.cSuccessNone0.052689s4.335131s
Success
forkexecv-arg.cSuccessNone0.054485s4.338016s
Success
forkexecv.cSuccessNone0.084611s4.356204s
Success
forkfiles.cSuccessNone0.054878s4.324513s
Success
forkmalloc.cSuccessNone0.066835s4.359605s
Success
forknodup.cSuccessNone0.057368s4.338363s
Success
function-ptr.cSuccessNone0.051661s4.287567s
Success
getegid_syscall.cSuccessNone0.056912s4.365100s
Success
getgid_syscall.cSuccessNone0.056151s4.381060s
Success
getpid.cSuccessNone0.047964s4.281530s
Success
getpid_syscall.cSuccessNone0.057121s4.382027s
Success
getppid.cSuccessNone0.058974s4.354672s
Success
getppid_syscall.cSuccessNone0.058827s4.379639s
Success
getuid.cSuccessNone0.056118s4.282639s
Success
getuid_syscall.cSuccessNone0.056696s4.413448s
Success
hello-arg.cSuccessNone0.048675s3.973264s
Success
hello.cSuccessNone0.045845s3.907813s
Success
longjmp.cSuccessNone0.046343s3.902148s
Success
mutex.cSuccessNone2.061619s6.563233s
Success
printf_deadlock_smoke.cSuccessNone0.064749s4.589266s
Success
printf_thread_test.cSuccessNone0.054939s4.490423s
Success
sem_forks.cSuccessNone0.056858s4.401266s
Success
setsid.cSuccessNone0.048665s3.919506s
Success
template.cSuccessNone0.055664s4.334335s
Success
test_exec_nofork.cSuccessNone0.053830s4.309408s
Success
test_unlink_open_file.cSuccessNone0.051124s3.875037s
Success
thread-test.cSuccessNone0.051258s4.450646s
Success
thread.cSuccessNone0.048719s4.473597s
Success
thread_cageid_race.cSuccessNone0.052107s4.453267s
Success
tls_test.cSuccessNone0.053505s4.472388s
Success
uname.cSuccessNone0.048949s4.305014s
Success
wait.cSuccessNone2.052918s5.958209s
Success
waitpid_anychild.cSuccessNone0.055442s4.341195s
Success
waitpid_syscall.cSuccessNone1.057377s5.350679s
Success
waitpid_wnohang.cSuccessNone0.055349s3.946453s
Success
Signal Tests
alarm.cSuccessNone7.054028s10.906034s
Success
setitimer.cSuccessNone7.053728s10.928474s
Success
sigalrm.cSuccessNone2.054234s5.918449s
Success
sigchld.cSuccessNone1.058249s4.946081s
Success
signal-fork.cSuccessNone4.056136s7.962937s
Success
signal-simple.cSuccessNone0.056543s3.943219s
Success
signal_SIGCHLD.cSuccessNone0.053431s4.342687s
Success
signal_fork.cSuccessNone0.052476s4.366412s
Success
signal_int_ignored.cSuccessNone2.055418s6.377941s
Success
signal_procmask.cSuccessNone0.049318s4.307368s
Success
signal_recursive.cSuccessNone0.051088s3.912436s
Success
signal_sa_mask.cSuccessNone0.051026s3.927010s
Success
sigpipe.cSuccessNone1.059451s5.351347s
Success
sigprocmask.cSuccessNone1.055026s4.960506s
Success
Fail Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.114937s4.156969s
Success
mmap-negative2.cSuccessNone0.221105s4.114166s
Success
Signal Tests
signal_resethand.cSuccessNone1.054557s3.970499s
Success

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants