DF-5639 / run.3.log
orig fs base=0x80045efc0 size=0xffffffffffffffff gs base=0x0
== which-index validation (tls.c:82-84, 132-134) ==
set which=-1 rc=-1 errno=34(Result too large) EXPECT -1 ERANGE
set which=2 rc=-1 errno=34(Result too large) EXPECT -1 ERANGE
set which=INT_MIN rc=-1 errno=34(Result too large) EXPECT -1 ERANGE
set which=INT_MAX rc=-1 errno=34(Result too large) EXPECT -1 ERANGE
get which=1 rc=0 errno=0 EXPECT 0
== size validation, signed long (tls.c:100-101) ==
set size=-2 rc=-1 errno=22(Invalid argument) EXPECT -1 EINVAL
set size=INT64MIN rc=-1 errno=22(Invalid argument) EXPECT -1 EINVAL
set size=-1 rc=0 errno=0 EXPECT 0 (sentinel ok)
set size=INT64MAX rc=0 errno=0 EXPECT 0
== infosize handling, size_t (tls.c:85-99) ==
set infosize=0 ptr=-1 rc=0 errno=0 EXPECT 0 (len-0 copyin)
set infosize=1 ptr=-1 rc=-1 errno=14(Bad address) EXPECT -1 EFAULT
set infosize=~0 rc=0 errno=0 EXPECT 0 (min clamps)
== get_tls_area destination (tls.c:135-141) ==
get to kern addr rc=-1 errno=14(Bad address) EXPECT -1 EFAULT
get infosize=0 rc=0 errno=0 EXPECT 0 (len-0 copyout)
get infosize=~0 rc=0 errno=0 EXPECT 0 (clamps to 16)
get to NULLpage+ rc=-1 errno=14(Bad address) EXPECT -1 EFAULT
== round trip + fork inheritance (vm_machdep.c:137,229) ==
set gs 0x12345000/0x1000 rc=0 EXPECT 0
get gs -> 0x12345000/0x1000 EXPECT 0x12345000/0x1000
child-of-fork get gs -> rc=0 0x12345000 EXPECT inherited
== wild bases accepted by design (tls.c:103-108) ==
set fs kernel-canon rc=0 errno=0 EXPECT 0 (accepted)
child %fs access -> SIGNAL 11 (user-mode fault only)
set fs noncanon rc=-1 errno=22 EXPECT 0 (accepted)
child %fs:0 read OK -> 0x80045efc0 (NO fault)
child exited 0
== exec reset (exec_setregs machdep.c:1536-1543) ==
pre-exec get fs -> 0x3000 EXPECT 0x3000
== post-exec image (fresh process image, base reset by kernel) ==
post-exec get fs rc=0 -> base=0x80045efc0 size=0xffffffffffffffff
child %fs:0 -> 0x80045efc0 NO FAULT
note: td_tls readback is stale iff base above != 0 (pcb zeroed, td_tls not)
MATRIX_EXIT=0