Skip to content

support for dlopen within threads #1202

Open
qianxichen233 wants to merge 2 commits into
mainfrom
dlopen-thread
Open

support for dlopen within threads #1202
qianxichen233 wants to merge 2 commits into
mainfrom
dlopen-thread

Conversation

@qianxichen233

Copy link
Copy Markdown
Contributor

dlopen within threads: epoch-based cross-thread library replay (#1028 Task 3)

When one thread calls dlopen() while other threads are already running, the newly-loaded library must be instantiated into every running thread's Wasm store. Previously this was unsupported (guarded with a panic).

Mechanism (fire-and-forget)

  • epoch_dlopen_trigger_others() sets EPOCH_DLOPEN (0xd10ad) on all other registered threads and sends SIGUSR2 to interrupt any blocked syscalls
  • handle_dlopen_replay() runs inside each thread's epoch callback: pre-grows the shared function table, instantiates the library via module_with_child, and pre-fills GOT cells from symbol_cache so function indices are correct without a full GOT update
  • LindGOT::new_entry pre-fills duplicate GOT handlers from cache so replaying threads immediately see valid function table indices
  • The GOT lock is dropped before triggering the epoch to avoid contention with worker threads entering handle_dlopen_replay
  • dlopen_modules is snapshotted at the same point as global_snapshots (before asyncify unwind in pthread_create_call) to eliminate a TOCTOU race

Limitation

The epoch fires at Wasm function entries. Application code must ensure at least one function-call epoch checkpoint is reached between when dlopen fires and when worker threads first call into the newly-loaded library. The test enforces this with a two-barrier design: workers signal they are registered before main calls dlopen, then wait on a second barrier whose function-entry epoch check delivers the replay.

Test

thread_dlopen_concurrent.c — 4 workers block on g_ready (guaranteeing registration), main calls dlopen, then releases via g_go. Workers verify the library via both an inherited function pointer and an independent dlsym call. Passes 15/15 runs consistently.

…Task 3)

When one thread calls dlopen(), all other running threads in the same cage
now automatically get the library instantiated into their Wasm stores via
a fire-and-forget epoch interrupt (EPOCH_DLOPEN = 0xd10ad).

Runtime changes:
- cage/signal: add epoch_dlopen_trigger_others() — sets EPOCH_DLOPEN on all
  other threads and sends SIGUSR2 to interrupt blocked syscalls
- lind-multi-process/signal: add handle_dlopen_replay() — called from
  signal_handler for all non-main threads; pre-grows the table, calls
  module_with_child, and registers library symbols for dlsym
- lind-boot/execute: drop got_guard before epoch_dlopen_trigger_others to
  avoid lock contention; call epoch_dlopen_trigger_others after append_module
- lind-multi-process/lib: snapshot dlopen_modules at the same point as
  global_snapshots (before asyncify unwind) to eliminate a TOCTOU race
  in pthread_create_call
- wasmtime/linker: skip apply_global_snapshots when snapshots is empty
  (the dlopen replay path; globals are set by attach_memory_base/attach_table_base)
- lind-utils (LindGOT::new_entry): pre-fill duplicate GOT handlers from
  symbol_cache so replaying threads see correct function table indices

Test (thread_dlopen_concurrent.c):
Uses a two-barrier design — workers first signal via g_ready that they are
registered, then main calls dlopen (EPOCH_DLOPEN fires on all workers), then
main releases via g_go. The epoch check at pthread_barrier_wait's Wasm function
entry delivers handle_dlopen_replay before any library call.

lib.c: add add(int,int) export used by the new test.
@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

grate harness

Grate Test Report

MetricValue
Total15
Success15
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: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

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

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

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

STDERR:

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

[Grate|interpose-exit] PASS

STDERR:

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

STDERR:

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

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[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: 4
[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: 4 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/copy-handler-table_grate.cSuccess
STDOUT:
[Grate|copy-handler-table] Registering geteuid handler for cage 2 in grate 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Cage|copy-handler-table] PASS: child inherited handler, then overwrite changed geteuid to 0
[Cage|copy-handler-table] PASS: parent=123 child_exit=0
[Grate|copy-handler-table] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

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

STDERR:

static harness

Test Report

Deterministic 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
Static Tests
fork_simple.cSuccessNone0.058234s3.944110s
Success
thread.cSuccessNone0.048223s4.049383s
Success
tls_test.cSuccessNone0.051278s4.074385s
Success
Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
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

wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases220
Number of Successes220
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.045601s0.142231s
Success
chdir_getcwd.cSuccessNone0.046080s0.114193s
Success
chmod.cSuccessNone0.051896s0.124825s
Success
clock_gettime_highlevel.cSuccessNone0.117187s0.158226s
Success
clock_gettime_simple.cSuccessNone0.040458s0.101107s
Success
cloexec.cSuccessNone0.050816s0.136084s
Success
close.cSuccessNone0.057049s0.134534s
Success
creat_access.cSuccessNone0.048846s0.113982s
Success
doubleclose.cSuccessNone0.041458s0.096238s
Success
dup.cSuccessNone0.042053s0.112364s
Success
dup2.cSuccessNone0.047192s0.112432s
Success
dup3.cSuccessNone0.048384s0.112129s
Success
dupwrite.cSuccessNone0.048913s0.111613s
Success
etc_conf.cSuccessNone0.045019s0.115825s
Success
faccessat.cSuccessNone0.045344s0.113196s
Success
fchdir.cSuccessNone0.051587s0.125819s
Success
fchmod.cSuccessNone0.050460s0.125127s
Success
fchmodat.cSuccessNone0.044279s0.112972s
Success
fcntl.cSuccessNone0.047805s0.127535s
Success
fcntl_dupfd.cSuccessNone0.042549s0.107139s
Success
fdatasync.cSuccessNone0.048738s0.109248s
Success
filetest.cSuccessNone0.048046s0.108221s
Success
filetest1000.cSuccessNone0.057345s0.120657s
Success
flock.cSuccessNone0.055813s0.157609s
Success
fstat.cSuccessNone0.050528s0.126218s
Success
fstatfs.cSuccessNone0.043612s0.105968s
Success
fsync.cSuccessNone0.047755s0.109228s
Success
ftruncate.cSuccessNone0.053399s0.202824s
Success
getcwd.cSuccessNone0.044955s0.104182s
Success
getcwd_null.cSuccessNone0.049609s0.117763s
Success
getpgid.cSuccessNone0.042923s0.100672s
Success
getrandom.cSuccessNone0.048136s0.125609s
Success
ioctl.cSuccessNone0.050613s0.119779s
Success
link.cSuccessNone0.052183s0.153425s
Success
locale_test.cSuccessNone0.062539s0.302881s
Success
lseek.cSuccessNone0.053556s0.185226s
Success
lstat.cSuccessNone0.052530s0.135106s
Success
mkdir_rmdir.cSuccessNone0.049137s0.115613s
Success
mkfifo_test.cSuccessNone0.054473s0.162668s
Success
mknod.cSuccessNone0.048028s0.122352s
Success
nocancel_io.cSuccessNone0.052313s0.138219s
Success
open.cSuccessNone0.043149s0.102178s
Success
openat.cSuccessNone0.044399s0.109314s
Success
path_conversion_safety.cSuccessNone0.052430s0.132488s
Success
ppoll.cSuccessNone0.053763s0.125103s
Success
pread_pwrite.cSuccessNone0.046373s0.115786s
Success
preadv_pwritev.cSuccessNone0.051803s0.129855s
Success
printf.cSuccessNone0.041360s0.097124s
Success
prlimit64.cSuccessNone0.041996s0.103435s
Success
read.cSuccessNone0.049445s0.123652s
Success
readbytes.cSuccessNone0.045195s0.106045s
Success
readdir_basic.cSuccessNone0.052359s0.147498s
Success
readlink.cSuccessNone0.050145s0.120466s
Success
readlinkat.cSuccessNone0.050353s0.124523s
Success
readv_writev_test.cSuccessNone0.050781s0.126332s
Success
rename.cSuccessNone0.051363s0.115328s
Success
renameat.cSuccessNone0.052197s0.129243s
Success
sc-writev.cSuccessNone0.047421s0.113502s
Success
stat.cSuccessNone0.050225s0.123511s
Success
statfs.cSuccessNone0.042941s0.104656s
Success
symlink.cSuccessNone0.053206s0.143781s
Success
sync_file_range.cSuccessNone0.050660s0.114498s
Success
timespec_time_t_compat.cSuccessNone0.046701s0.106604s
Success
trailing_slash.cSuccessNone0.047343s0.116527s
Success
truncate.cSuccessNone0.050342s0.134874s
Success
unlink.cSuccessNone0.051019s0.147827s
Success
unlinkat.cSuccessNone0.050991s0.129685s
Success
utimensat.cSuccessNone0.049743s0.135142s
Success
write.cSuccessNone0.041967s0.097591s
Success
writeloop.cSuccessNone0.051954s0.114304s
Success
writepartial.cSuccessNone0.049221s0.106859s
Success
writev.cSuccessNone0.049973s0.121367s
Success
Math Tests
math_link_smoke.cSuccessNone0.052289s0.106879s
Success
math_tests.cSuccessNone0.056580s0.131384s
Success
printf_float.cSuccessNone0.053147s0.128674s
Success
Memory Tests
brk.cSuccessNone0.053320s0.126033s
Success
fork_large_memory.cSuccessNone0.092304s0.468571s
Success
malloc.cSuccessNone0.047836s0.109295s
Success
malloc_large.cSuccessNone0.051813s0.108882s
Success
memcpy.cSuccessNone0.058206s0.135959s
Success
memory_error_test.cSuccessNone0.059994s0.151390s
Success
mmap.cSuccessNone0.046242s0.108343s
Success
mmap_aligned.cSuccessNone0.062958s0.152624s
Success
mmap_complicated.cSuccessNone0.073121s0.198111s
Success
mmap_file.cSuccessNone0.056619s0.125024s
Success
mmap_shared.cSuccessNone0.054088s0.138654s
Success
mmaptest.cSuccessNone0.047711s0.117193s
Success
mprotect.cSuccessNone0.048550s0.113648s
Success
mprotect_boundary.cSuccessNone0.046826s0.119178s
Success
mprotect_end_region.cSuccessNone0.053894s0.131330s
Success
mprotect_middle_region.cSuccessNone0.064024s0.162122s
Success
mprotect_multiple_times.cSuccessNone0.050610s0.118388s
Success
mprotect_same_value.cSuccessNone0.044442s0.111842s
Success
mprotect_spanning_regions.cSuccessNone0.047595s0.129977s
Success
munmap_adjacent_shm.cSuccessNone0.049879s0.136529s
Success
sbrk.cSuccessNone0.048927s0.111555s
Success
segfault.cSuccessNone0.062009s0.154927s
Success
shm.cSuccessNone0.057717s0.151577s
Success
shmtest.cSuccessNone0.047463s0.118176s
Success
thread_malloc_sequential.cSuccessNone0.055349s0.207384s
Success
vtable.cSuccessNone0.058859s0.131645s
Success
Networking Tests
accept4.cSuccessNone0.054792s0.129569s
Success
dns_resolve_test.cSuccessNone0.049484s0.118887s
Success
dnstest.cSuccessNone0.049833s0.115959s
Success
epoll_badfd.cSuccessNone0.044057s0.103986s
Success
epoll_edge_triggered.cSuccessNone0.207920s0.373221s
Success
epollcreate1.cSuccessNone0.050291s0.125860s
Success
error_handling_net.cSuccessNone0.057706s0.187360s
Success
getaddrinfo_test.cSuccessNone0.053877s0.153110s
Success
getaddrinfo_unspec.cSuccessNone0.052326s0.130402s
Success
gethostname.cSuccessNone0.043187s0.099601s
Success
getifaddrs.cSuccessNone0.052155s0.120542s
Success
getsockname.cSuccessNone0.052562s0.119969s
Success
getsockopt.cSuccessNone0.053636s0.153311s
Success
ipv6_basic.cSuccessNone0.054139s0.151092s
Success
makepipe.cSuccessNone0.043708s0.101193s
Success
nonblocking_eagain.cSuccessNone0.054120s0.158973s
Success
pipe.cSuccessNone0.051921s0.124009s
Success
pipe2.cSuccessNone0.057031s0.117564s
Success
pipeinput.cSuccessNone0.054947s0.150931s
Success
pipeinput2.cSuccessNone0.052742s0.152662s
Success
pipeonestring.cSuccessNone0.054739s0.150729s
Success
pipepong.cSuccessNone0.051601s0.152705s
Success
pipewrite.cSuccessNone0.045650s0.112712s
Success
poll.cSuccessNone0.049199s0.110311s
Success
recvfrom-sendto.cSuccessNone0.051805s0.125727s
Success
sendmsg_recvmsg_test.cSuccessNone0.051306s0.128114s
Success
serverclient.cSuccessNone0.050584s0.129320s
Success
shutdown.cSuccessNone0.052697s0.129848s
Success
shutdown_fork.cSuccessNone0.051551s0.139031s
Success
simple-select.cSuccessNone0.053554s0.147580s
Success
simple_epoll.cSuccessNone0.050443s0.119743s
Success
socket.cSuccessNone0.049856s0.117362s
Success
socket_cloexec.cSuccessNone0.048458s0.110173s
Success
socket_options_advanced.cSuccessNone0.055469s0.167390s
Success
socketepoll.cSuccessNone0.048933s0.114128s
Success
socketpair.cSuccessNone0.048287s0.133292s
Success
socketselect.cSuccessNone0.049735s0.120186s
Success
udp_send_recv.cSuccessNone0.159341s0.273304s
Success
uds-getsockname.cSuccessNone0.050375s0.113702s
Success
uds-nb-select.cSuccessNone2.059985s2.191568s
Success
uds-serverclient.cSuccessNone0.055685s0.154448s
Success
uds-socketselect.cSuccessNone0.051543s0.124747s
Success
uds_listen_poll.cSuccessNone1.058225s1.164419s
Success
writev_socket.cSuccessNone0.053376s0.151237s
Success
Process Tests
barrier_test.cSuccessNone0.050349s0.141800s
Success
chain_thread.cSuccessNone1.056774s1.178806s
Success
ctor_syscall_test.cSuccessNone0.042741s0.107019s
Success
cxa_atexit_test.cSuccessNone0.046576s0.107653s
Success
exec_non_utf8.cSuccessNone0.053216s0.120013s
Success
execve_shebang.cSuccessNone0.053079s0.117499s
Success
exit.cSuccessNone0.048699s0.103953s
Success
exit_failure.cSuccessNone0.052375s0.185274s
Success
exit_group_thread.cSuccessNone0.053235s0.157256s
Success
exit_status_first_wins.cSuccessNone0.062571s0.173011s
Success
flockfile_test.cSuccessNone0.050614s0.149070s
Success
fork2malloc.cSuccessNone0.053468s0.139877s
Success
fork_select.cSuccessNone0.051801s0.139357s
Success
fork_simple.cSuccessNone0.050928s0.128560s
Success
fork_syscall.cSuccessNone0.054442s0.577845s
Success
fork_tls_ctype.cSuccessNone0.054497s0.154245s
Success
forkandopen.cSuccessNone0.068436s0.179671s
Success
forkdup.cSuccessNone0.051776s0.136923s
Success
forkexecuid.cSuccessNone0.049768s0.149420s
Success
forkexecv-arg.cSuccessNone0.049708s0.140787s
Success
forkexecv.cSuccessNone0.048555s0.137056s
Success
forkfiles.cSuccessNone0.050417s0.138437s
Success
forkmalloc.cSuccessNone0.050912s0.130183s
Success
forknodup.cSuccessNone0.051145s0.139420s
Success
function-ptr.cSuccessNone0.044444s0.103007s
Success
getegid_syscall.cSuccessNone0.052576s0.471848s
Success
getgid_syscall.cSuccessNone0.055469s0.477984s
Success
getpid.cSuccessNone0.046195s0.108559s
Success
getpid_syscall.cSuccessNone0.052309s0.477943s
Success
getppid.cSuccessNone0.055895s0.138851s
Success
getppid_syscall.cSuccessNone0.054549s0.386758s
Success
getuid.cSuccessNone0.056014s0.115570s
Success
getuid_syscall.cSuccessNone0.048728s0.232979s
Success
hello-arg.cSuccessNone0.041614s0.103964s
Success
hello.cSuccessNone0.040743s0.099232s
Success
longjmp.cSuccessNone0.042063s0.111477s
Success
mutex.cSuccessNone2.056480s2.145060s
Success
printf_deadlock_smoke.cSuccessNone0.059928s0.171408s
Success
printf_thread_test.cSuccessNone0.049481s0.145153s
Success
sem_forks.cSuccessNone0.053272s0.174015s
Success
setsid.cSuccessNone0.042273s0.100155s
Success
template.cSuccessNone0.050033s0.172797s
Success
test_exec_nofork.cSuccessNone0.049185s0.130935s
Success
test_unlink_open_file.cSuccessNone0.074339s0.122201s
Success
thread-guard.cSuccessNone0.047582s0.130010s
Success
thread-test.cSuccessNone0.045745s0.123577s
Success
thread.cSuccessNone0.045168s0.121269s
Success
thread_cageid_race.cSuccessNone0.046876s0.296505s
Success
tls_test.cSuccessNone0.049234s0.162732s
Success
uname.cSuccessNone0.046664s0.109841s
Success
wait.cSuccessNone0.048824s0.147475s
Success
waitpid_anychild.cSuccessNone0.050962s0.132547s
Success
waitpid_syscall.cSuccessNone1.052847s1.222627s
Success
waitpid_wnohang.cSuccessNone0.051647s0.135879s
Success
Signal Tests
alarm.cSuccessNone7.049962s7.152507s
Success
eintr_fork_signal.cSuccessNone1.051841s1.149834s
Success
kill.cSuccessNone1.049793s1.132175s
Success
setitimer.cSuccessNone7.050721s7.150962s
Success
sigalrm.cSuccessNone2.050173s2.134500s
Success
sigaltstack.cSuccessNone0.051854s0.128164s
Success
sigchld.cSuccessNone1.051521s1.137161s
Success
signal-fork.cSuccessNone4.053174s4.131270s
Success
signal-simple.cSuccessNone0.050796s0.116713s
Success
signal_SIGCHLD.cSuccessNone0.049219s0.138485s
Success
signal_fork.cSuccessNone0.046685s0.134164s
Success
signal_int_ignored.cSuccessNone2.050683s2.130989s
Success
signal_kill_cleanup.cSuccessNone1.051778s1.128249s
Success
signal_procmask.cSuccessNone0.045750s0.115209s
Success
signal_read_interrupt.cSuccessNone0.555642s0.648649s
Success
signal_recursive.cSuccessNone0.045148s0.124444s
Success
signal_sa_mask.cSuccessNone0.044381s0.111475s
Success
signal_select_interrupt.cSuccessNone0.554118s0.647050s
Success
signal_write_interrupt.cSuccessNone1.052835s1.134464s
Success
sigpipe.cSuccessNone1.055449s1.150291s
Success
sigprocmask.cSuccessNone1.050379s1.125322s
Success
Fail Tests

Summary

MetricCount
Total Test Cases4
Number of Successes4
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
Dylink Tests
dlerror.cSuccessNone0.041632s0.103213s
Success
Memory Tests
mmap-negative1.cSuccessNone0.131962s0.112662s
Success
mmap-negative2.cSuccessNone0.113608s0.127565s
Success
Signal Tests
signal_resethand.cSuccessNone1.049655s1.128792s
Success

C++ harness

Summary

MetricValue
Total1
Success1
Failures0
Compile failures0
Runtime failures0
Output mismatch0
Timeouts0

Cases

TestStatusError typeNative timeWasm timeOutput
tests/unit-tests/cpp/sort.cppSuccess0.383523s8.299679s
LIBCPP_SORT_OK 1 2 3

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.

1 participant