code wiki / (root) / nx_fbx_mapping_lifecycle_gate_t181.nx

nx_fbx_mapping_lifecycle_gate_t181.nx

buildroot/runtime/nx_fbx_mapping_lifecycle_gate_t181.nx

2204 B5 linesdepth 8pulls 8 transitivereach 0 importersview sourcekind tooltopic fbx
docsdependenciesstructsconstsfunctions

dependencies 1 imports · 0 importers

nx_fbx_bind.nx nx_fbx_mapping_lifecycle_gate_

imports: nx_fbx_bind.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main pages mp fbb_compose fbb_compose_into fbb_compose_into ↻

structs

none

consts

none

functions

3func mp(s:*u8)->i64{var n:i64=0;while s[n]!=(0 as u8){n=n+1};sys_write(1,s,n);return 0}
called by 1: main
4func pages(buf:*u8)->i64{let fd:i64=sys_openat_rd("/proc/self/statm");if fd<0{return -1};let n:i64=sys_read(fd,buf,127);sys_close(fd);if n<=0{return -1};var i:i64=0;var v:i64=0;while i<n&&buf[i]>=(48 as u8)&&buf[i]<=(57 as u8){v=v*10+(buf[i] as i64)-48;i=i+1};if i==0{return -1};return v}
called by 1: main
5func main()->i64{let buf:*u8=sys_mmap(128);let sizes:*i64=sys_mmap(32) as *i64;sizes[0]=1;sizes[1]=128;sizes[2]=256;sizes[3]=4096;var k:i64=0;while k<4{let p:*u8=sys_mmap_try(sizes[k]);if (p as i64)<=0{return 1};p[0]=17 as u8;if sys_munmap_direct(p,sizes[k])!=0{return 2};k=k+1};let before:i64=pages(buf);if before<=0{return 3};k=0;while k<4{var i:i64=0;while i<2048{let p:*u8=sys_mmap_try(sizes[k]);if (p as i64)<=0{return 4};p[0]=19 as u8;p[sizes[k]-1]=23 as u8;if sys_munmap_direct(p,sizes[k])!=0{return 5};i=i+1};k=k+1};let after:i64=pages(buf);if after!=before{mp("FAIL mapping-growth\n");return 6};let p:*u8=sys_mmap_try(128);if (p as i64)<=0{return 7};p[0]=29 as u8;if sys_munmap_direct(p,0)!=NXA_MAP_INVALID||sys_munmap_direct(p,0-1)!=NXA_MAP_INVALID||sys_munmap_direct(0 as *u8,128)!=NXA_MAP_INVALID{mp("FAIL invalid-length\n");return 8};if p[0]!=(29 as u8){return 9};if sys_munmap_direct(p,128)!=0{return 10};if pages(buf)!=before{return 11};let a:*i64=sys_mmap(128) as *i64;let b:*i64=sys_mmap(128) as *i64;let out:*i64=sys_mmap(128) as *i64;let scratch:*i64=sys_mmap(128) as *i64;var mi:i64=0;while mi<16{a[mi]=0;b[mi]=0;mi=mi+1};a[0]=FBB_Q;a[5]=FBB_Q;a[10]=FBB_Q;a[15]=FBB_Q;b[0]=FBB_Q;b[5]=FBB_Q;b[10]=FBB_Q;b[15]=FBB_Q;let base:i64=pages(buf);mi=0;while mi<2048{if fbb_compose(a,b,out)!=0{return 12};var mj:i64=0;while mj<16{if out[mj]!=a[mj]{return 13};mj=mj+1};mi=mi+1};if pages(buf)!=base{mp("FAIL wrapper-mapping-growth\n");return 14};mi=0;while mi<2048{if fbb_compose_into(a,b,out,scratch,16)!=0{return 15};mi=mi+1};if pages(buf)!=base{return 16};mp("PASS wrapper-repeats=2048 scratch-repeats=2048 virtual-page-delta=0 output-correct\n");mp("PASS mapping-lifecycle cycles=8192 sizes=1,128,256,4096 virtual-page-delta=0 invalid-lengths-refused mapping-survived-refusal\n");return 0}