Skip to content

Refactor cage_map to allow concurrent access#1156

Open
Yaxuan-w wants to merge 1 commit into
mainfrom
cage-concurrent
Open

Refactor cage_map to allow concurrent access#1156
Yaxuan-w wants to merge 1 commit into
mainfrom
cage-concurrent

Conversation

@Yaxuan-w

@Yaxuan-w Yaxuan-w commented May 4, 2026

Copy link
Copy Markdown
Member

Resolves #1050

This PR replaces the unsynchronized mutable slot with ArcSwapOption<Cage>, so each cage table entry can be atomically loaded, replaced, or cleared. This removes the data race between concurrent lookup and removal while preserving O(1) indexed lookup by cage ID.

Performance Impact

Raw implementation:

lind@de860ae5950e:~/lind-wasm$ ./scripts/lind_run cage_stress.cwasm 1000000 2000 4
pid=1 iters=1000000 forks=2000 threads=4
getpid loop                  ops=10000 time=0.001481 sec ns/op=148.13 ops/sec=6750640.13
getppid loop                 ops=10000 time=0.001490 sec ns/op=148.98 ops/sec=6712522.14
mixed lookup syscalls        ops=10000 time=0.002143 sec ns/op=214.30 ops/sec=4666312.03

--- measured ---
getpid loop                  ops=1000000 time=0.228167 sec ns/op=228.17 ops/sec=4382761.08
getppid loop                 ops=1000000 time=0.145727 sec ns/op=145.73 ops/sec=6862161.60
mixed lookup syscalls        ops=1000000 time=0.203926 sec ns/op=203.93 ops/sec=4903746.16
pthread mixed lookup         ops=1000000 time=0.180652 sec ns/op=180.65 ops/sec=5535506.87
fork + waitpid               ops=2000 time=18.764816 sec ns/op=9382408.15 ops/sec=106.58

ArcSwap implementation:

lind@de860ae5950e:~/lind-wasm$ ./scripts/lind_run cage_stress.cwasm 1000000 2000 4
pid=1 iters=1000000 forks=2000 threads=4
getpid loop                  ops=10000 time=0.008866 sec ns/op=886.60 ops/sec=1127902.57
getppid loop                 ops=10000 time=0.001904 sec ns/op=190.36 ops/sec=5253301.04
mixed lookup syscalls        ops=10000 time=0.009859 sec ns/op=985.93 ops/sec=1014268.32

--- measured ---
getpid loop                  ops=1000000 time=0.280564 sec ns/op=280.56 ops/sec=3564254.95
getppid loop                 ops=1000000 time=0.189801 sec ns/op=189.80 ops/sec=5268670.14
mixed lookup syscalls        ops=1000000 time=0.270599 sec ns/op=270.60 ops/sec=3695504.31
pthread mixed lookup         ops=1000000 time=0.193474 sec ns/op=193.47 ops/sec=5168659.70
fork + waitpid               ops=2000 time=18.503752 sec ns/op=9251875.85 ops/sec=108.09

This change does introduce measurable overhead on lightweight metadata syscall paths where cage lookup dominates the operation cost. The overhead is most visible in very lightweight syscalls such as getpid(), getppid(), getuid(), and geteuid(), because these calls do little work besides runtime metadata lookup.

The fork + waitpid lifecycle benchmark does not show a measurable regression.

Future Optimization

There is still room to optimize cage lookup after the remaining exit-handling issues #1072 are resolved. In particular, once we can guarantee cage lifetime through 3i. For example, by ensuring that a cage cannot be removed while a grate dispatch or syscall path is still using it, we may be able to optimize hot-path lookup further.

@github-actions

github-actions Bot commented May 4, 2026

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

grate harness

Grate Test Report

MetricValue
Total14
Success14
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/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.055241s4.546966s
Success
thread.cSuccessNone0.046255s4.499574s
Success
tls_test.cSuccessNone0.058531s4.484596s
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 Cases211
Number of Successes211
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.050029s0.141101s
Success
chdir_getcwd.cSuccessNone0.048334s0.111192s
Success
chmod.cSuccessNone0.055836s0.126032s
Success
clock_gettime_highlevel.cSuccessNone0.118337s0.156996s
Success
clock_gettime_simple.cSuccessNone0.043951s0.098528s
Success
cloexec.cSuccessNone0.052724s0.125400s
Success
close.cSuccessNone0.059705s0.131810s
Success
creat_access.cSuccessNone0.051490s0.112479s
Success
doubleclose.cSuccessNone0.043653s0.093917s
Success
dup.cSuccessNone0.043573s0.112730s
Success
dup2.cSuccessNone0.049404s0.108565s
Success
dup3.cSuccessNone0.052057s0.111667s
Success
dupwrite.cSuccessNone0.050361s0.107248s
Success
etc_conf.cSuccessNone0.047882s0.116375s
Success
fchdir.cSuccessNone0.056212s0.127590s
Success
fchmod.cSuccessNone0.052856s0.121690s
Success
fcntl.cSuccessNone0.049733s0.126245s
Success
fdatasync.cSuccessNone0.049854s0.106055s
Success
filetest.cSuccessNone0.050803s0.105853s
Success
filetest1000.cSuccessNone0.059820s0.121595s
Success
flock.cSuccessNone0.060454s0.146883s
Success
fstat.cSuccessNone0.054385s0.128077s
Success
fstatfs.cSuccessNone0.045793s0.100641s
Success
fsync.cSuccessNone0.048901s0.105863s
Success
ftruncate.cSuccessNone0.053536s0.202811s
Success
getcwd.cSuccessNone0.046766s0.102350s
Success
getcwd_null.cSuccessNone0.050731s0.115340s
Success
getpgid.cSuccessNone0.046716s0.101038s
Success
getrandom.cSuccessNone0.050712s0.122804s
Success
ioctl.cSuccessNone0.055334s0.119564s
Success
link.cSuccessNone0.057244s0.156154s
Success
locale_test.cSuccessNone0.067357s0.317062s
Success
lseek.cSuccessNone0.058092s0.194547s
Success
lstat.cSuccessNone0.055390s0.130081s
Success
mkdir_rmdir.cSuccessNone0.052369s0.113499s
Success
mkfifo_test.cSuccessNone0.057095s0.155536s
Success
mknod.cSuccessNone0.049846s0.119633s
Success
nocancel_io.cSuccessNone0.057691s0.139197s
Success
open.cSuccessNone0.044892s0.098511s
Success
openat.cSuccessNone0.047299s0.109122s
Success
path_conversion_safety.cSuccessNone0.053623s0.128846s
Success
ppoll.cSuccessNone0.054501s0.121627s
Success
pread_pwrite.cSuccessNone0.048343s0.113332s
Success
preadv_pwritev.cSuccessNone0.052977s0.127401s
Success
printf.cSuccessNone0.042017s0.093918s
Success
prlimit64.cSuccessNone0.045378s0.104132s
Success
read.cSuccessNone0.053997s0.126572s
Success
readbytes.cSuccessNone0.047554s0.103176s
Success
readdir_basic.cSuccessNone0.054286s0.142998s
Success
readlink.cSuccessNone0.054074s0.121199s
Success
readlinkat.cSuccessNone0.054525s0.125272s
Success
readv_writev_test.cSuccessNone0.052561s0.123102s
Success
rename.cSuccessNone0.055766s0.117924s
Success
sc-writev.cSuccessNone0.048614s0.109752s
Success
stat.cSuccessNone0.051182s0.119458s
Success
symlink.cSuccessNone0.055640s0.145750s
Success
sync_file_range.cSuccessNone0.049728s0.109910s
Success
timespec_time_t_compat.cSuccessNone0.049296s0.106314s
Success
truncate.cSuccessNone0.053128s0.130264s
Success
unlink.cSuccessNone0.055534s0.150324s
Success
unlinkat.cSuccessNone0.052275s0.128716s
Success
write.cSuccessNone0.044802s0.095677s
Success
writeloop.cSuccessNone0.055647s0.116240s
Success
writepartial.cSuccessNone0.050776s0.105286s
Success
writev.cSuccessNone0.054553s0.121149s
Success
Math Tests
math_link_smoke.cSuccessNone0.056040s0.106429s
Success
math_tests.cSuccessNone0.061510s0.134795s
Success
printf_float.cSuccessNone0.056276s0.127206s
Success
Memory Tests
brk.cSuccessNone0.051021s0.111843s
Success
fork_large_memory.cSuccessNone0.086666s0.391765s
Success
malloc.cSuccessNone0.048348s0.100320s
Success
malloc_large.cSuccessNone0.049835s0.100412s
Success
memcpy.cSuccessNone0.048385s0.104424s
Success
memory_error_test.cSuccessNone0.056532s0.132865s
Success
mmap.cSuccessNone0.046590s0.103420s
Success
mmap_aligned.cSuccessNone0.045599s0.112321s
Success
mmap_complicated.cSuccessNone0.054244s0.127188s
Success
mmap_file.cSuccessNone0.054705s0.119062s
Success
mmap_shared.cSuccessNone0.053506s0.123483s
Success
mmaptest.cSuccessNone0.049453s0.109739s
Success
mprotect.cSuccessNone0.046246s0.101808s
Success
mprotect_boundary.cSuccessNone0.048733s0.114533s
Success
mprotect_end_region.cSuccessNone0.047224s0.111410s
Success
mprotect_middle_region.cSuccessNone0.046245s0.108783s
Success
mprotect_multiple_times.cSuccessNone0.047904s0.111838s
Success
mprotect_same_value.cSuccessNone0.047487s0.105866s
Success
mprotect_spanning_regions.cSuccessNone0.047211s0.125887s
Success
munmap_adjacent_shm.cSuccessNone0.049694s0.125012s
Success
sbrk.cSuccessNone0.048537s0.106192s
Success
segfault.cSuccessNone0.055382s0.138588s
Success
shm.cSuccessNone0.054319s0.128492s
Success
shmtest.cSuccessNone0.045854s0.107813s
Success
thread_malloc_sequential.cSuccessNone0.053795s0.152905s
Success
vtable.cSuccessNone0.058822s0.122924s
Success
Networking Tests
accept4.cSuccessNone0.059108s0.128738s
Success
dns_resolve_test.cSuccessNone0.051243s0.115787s
Success
dnstest.cSuccessNone0.055130s0.113771s
Success
epoll_badfd.cSuccessNone0.044560s0.099676s
Success
epoll_edge_triggered.cSuccessNone0.211051s0.378033s
Success
epollcreate1.cSuccessNone0.055756s0.127510s
Success
error_handling_net.cSuccessNone0.060735s0.187078s
Success
getaddrinfo_test.cSuccessNone0.054472s0.149033s
Success
getaddrinfo_unspec.cSuccessNone0.063807s0.121686s
Success
gethostname.cSuccessNone0.045275s0.096152s
Success
getifaddrs.cSuccessNone0.053979s0.117395s
Success
getsockname.cSuccessNone0.058954s0.119759s
Success
getsockopt.cSuccessNone0.056040s0.153846s
Success
ipv6_basic.cSuccessNone0.057174s0.150650s
Success
makepipe.cSuccessNone0.045969s0.098707s
Success
nonblocking_eagain.cSuccessNone0.057975s0.160609s
Success
pipe.cSuccessNone0.054689s0.126441s
Success
pipe2.cSuccessNone0.054424s0.113914s
Success
pipeinput.cSuccessNone0.054416s0.136053s
Success
pipeinput2.cSuccessNone0.055475s0.141233s
Success
pipeonestring.cSuccessNone0.056085s0.143358s
Success
pipepong.cSuccessNone0.054081s0.144599s
Success
pipewrite.cSuccessNone0.048729s0.112265s
Success
poll.cSuccessNone0.053557s0.114275s
Success
recvfrom-sendto.cSuccessNone0.055376s0.123570s
Success
sendmsg_recvmsg_test.cSuccessNone0.055754s0.128149s
Success
serverclient.cSuccessNone0.053691s0.129381s
Success
shutdown.cSuccessNone0.055135s0.124866s
Success
shutdown_fork.cSuccessNone0.053666s0.127257s
Success
simple-select.cSuccessNone0.057352s0.142359s
Success
simple_epoll.cSuccessNone0.052767s0.117835s
Success
socket.cSuccessNone0.051713s0.114095s
Success
socket_cloexec.cSuccessNone0.051979s0.113033s
Success
socket_options_advanced.cSuccessNone0.058666s0.170087s
Success
socketepoll.cSuccessNone0.052958s0.114404s
Success
socketpair.cSuccessNone0.050270s0.122253s
Success
socketselect.cSuccessNone0.052709s0.120732s
Success
udp_send_recv.cSuccessNone0.162007s0.263096s
Success
uds-getsockname.cSuccessNone0.053164s0.111842s
Success
uds-nb-select.cSuccessNone2.061106s2.176102s
Success
uds-serverclient.cSuccessNone0.056526s0.146435s
Success
uds-socketselect.cSuccessNone0.052650s0.123218s
Success
writev_socket.cSuccessNone0.056611s0.150716s
Success
Process Tests
barrier_test.cSuccessNone0.051695s0.118058s
Success
chain_thread.cSuccessNone1.055245s1.122569s
Success
ctor_syscall_test.cSuccessNone0.041743s0.096364s
Success
cxa_atexit_test.cSuccessNone0.048717s0.102505s
Success
exec_non_utf8.cSuccessNone0.052241s0.111305s
Success
execve_shebang.cSuccessNone0.053996s0.113107s
Success
exit.cSuccessNone0.050122s0.103661s
Success
exit_failure.cSuccessNone0.053357s0.115075s
Success
exit_group_thread.cSuccessNone0.053770s0.126560s
Success
flockfile_test.cSuccessNone0.054213s0.130182s
Success
fork2malloc.cSuccessNone0.053894s0.123765s
Success
fork_select.cSuccessNone0.052517s0.127258s
Success
fork_simple.cSuccessNone0.050861s0.116876s
Success
fork_syscall.cSuccessNone0.059833s0.346090s
Success
fork_tls_ctype.cSuccessNone0.056270s0.139872s
Success
forkandopen.cSuccessNone0.055013s0.132402s
Success
forkdup.cSuccessNone0.055666s0.121814s
Success
forkexecuid.cSuccessNone0.053330s0.135675s
Success
forkexecv-arg.cSuccessNone0.055067s0.124633s
Success
forkexecv.cSuccessNone0.050573s0.120120s
Success
forkfiles.cSuccessNone0.054475s0.127452s
Success
forkmalloc.cSuccessNone0.052238s0.113605s
Success
forknodup.cSuccessNone0.053162s0.127693s
Success
function-ptr.cSuccessNone0.046367s0.099338s
Success
getegid_syscall.cSuccessNone0.053534s0.274143s
Success
getgid_syscall.cSuccessNone0.052103s0.268161s
Success
getpid.cSuccessNone0.045570s0.097482s
Success
getpid_syscall.cSuccessNone0.054967s0.277131s
Success
getppid.cSuccessNone0.054271s0.117616s
Success
getppid_syscall.cSuccessNone0.055370s0.242279s
Success
getuid.cSuccessNone0.053394s0.109295s
Success
getuid_syscall.cSuccessNone0.052434s0.173974s
Success
hello-arg.cSuccessNone0.042991s0.097304s
Success
hello.cSuccessNone0.042296s0.093042s
Success
longjmp.cSuccessNone0.045087s0.103959s
Success
mutex.cSuccessNone2.054939s2.117965s
Success
printf_deadlock_smoke.cSuccessNone0.063317s0.150962s
Success
printf_thread_test.cSuccessNone0.052811s0.128105s
Success
sem_forks.cSuccessNone0.053724s0.138781s
Success
setsid.cSuccessNone0.047136s0.100166s
Success
template.cSuccessNone0.054579s0.146098s
Success
test_exec_nofork.cSuccessNone0.052710s0.118606s
Success
test_unlink_open_file.cSuccessNone0.047553s0.099815s
Success
thread-guard.cSuccessNone0.051065s0.119887s
Success
thread-test.cSuccessNone0.047139s0.114224s
Success
thread.cSuccessNone0.047822s0.107842s
Success
thread_cageid_race.cSuccessNone0.047165s0.154633s
Success
tls_test.cSuccessNone0.050988s0.123176s
Success
uname.cSuccessNone0.045003s0.096125s
Success
wait.cSuccessNone0.050391s0.128708s
Success
waitpid_anychild.cSuccessNone0.053269s0.120981s
Success
waitpid_syscall.cSuccessNone1.053932s1.171599s
Success
waitpid_wnohang.cSuccessNone0.054127s0.125729s
Success
Signal Tests
alarm.cSuccessNone7.050921s7.143233s
Success
eintr_fork_signal.cSuccessNone1.054178s1.132993s
Success
kill.cSuccessNone1.052265s1.124768s
Success
setitimer.cSuccessNone7.054338s7.147315s
Success
sigalrm.cSuccessNone2.052167s2.124531s
Success
sigaltstack.cSuccessNone0.053355s0.121049s
Success
sigchld.cSuccessNone1.053673s1.118238s
Success
signal-fork.cSuccessNone4.055305s4.119156s
Success
signal-simple.cSuccessNone0.051861s0.111463s
Success
signal_SIGCHLD.cSuccessNone0.051239s0.122458s
Success
signal_fork.cSuccessNone0.049297s0.124222s
Success
signal_int_ignored.cSuccessNone2.051417s2.124419s
Success
signal_kill_cleanup.cSuccessNone1.051981s1.115549s
Success
signal_procmask.cSuccessNone0.046348s0.107607s
Success
signal_read_interrupt.cSuccessNone0.557828s0.628737s
Success
signal_recursive.cSuccessNone0.047307s0.112161s
Success
signal_sa_mask.cSuccessNone0.045715s0.105695s
Success
signal_select_interrupt.cSuccessNone0.556640s0.630370s
Success
signal_write_interrupt.cSuccessNone1.054212s1.127700s
Success
sigpipe.cSuccessNone1.056561s1.127263s
Success
sigprocmask.cSuccessNone1.051242s1.114754s
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.046484s0.100404s
Success
Memory Tests
mmap-negative1.cSuccessNone0.165242s0.109735s
Success
mmap-negative2.cSuccessNone0.128447s0.121337s
Success
Signal Tests
signal_resethand.cSuccessNone1.053376s1.119279s
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.603022s10.229123s
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.

CAGE_MAP missing concurrent access protection

1 participant