add L4_StringItem_t to <l4/message.h>

And its inline functions. Only the C parts, though.

These are a mild rewrite (and therefore a direct derivative work) of the
L4Ka::Pistachio <l4/message.h>'s related bits.
ipc: scan and skip string items

The scanning part may be broken. This avoids the panic() when unit tests are
supposed to instead fail cleanly.
testbench: add unverified basic test of string transfers

This could be validated against L4Ka::Pistachio, which is known to have
working string transfers.
user: turn down the pf chatter

From sigma0, and from forkserv's pager.
testbench: load BRs correctly in string_test_thread
ipc: add simplest intraspace string transfers

These should break early and often, but pass the first unit tests and
therefore happy happy joy joy.
ipc: fix page-boundary breakage

What a surprise. Also the stritem_next() termination condition spotter was set
to actually spot the termination condition by initializing it->sub to 1 so
that it indicates the next valid substring, and handling that field
accordingly in stritem_next().
testbench: add interspace echo test

Also move echo() into a stub in anticipation of offset-twiddling tests, which
should appear once interspace echo works.
ipc: add inter-space fully-mapped string transfers

The "fully-mapped" bit means that it only works if all memory between there
and here is mapped. When not, there's an ugly kernel failure.
ipc: implement stritem_is_mapped()

Required to have the next unit test merely fail instead of panicing the
kernel.
testbench: add pre-transfer pagefault test

I.e. string:space:echo_with_hole . This test fails correctly when run by
itself, but seems to crap out when run after the other tests. Likely related
to forkserv badness.
testbench: fix string:echo_with_hole send-side

Previously echo() would compute strlen() over the send-string, which would've
been unmapped at that point. Changed to accepting an unsigned length argument,
and computing strlen() if that is zero.

The unmap address was also incorrect; it should hit at sendstr's page, rather
than the page where the buffer starts.

Also some unrelated debugging aids, such as reporting of IPC failure in
string_test_thread() .
export get_thread_pager(), set_pf_msg()

The former was renamed to thread_get_pager() to resemble thread_get_utcb(),
and moved into thread.c; and the latter was declared in <ukernel/ipc.h>
because <ukernel/exception.h> doesn't exist and won't be created just for one
export.
ipc: add pre-transfer faults to string item transfer

This breaks in the send-to-helper part of the intraspace xfer fault echo
test, but works if there's only a fault in the receiver. That casts a bit of
doubt on the TS_XFER state's meaning at this point, but it'll straighten out
with the "->ipc != NULL" test.
use TS_{SEND,RECV}_WAIT in string transfers

As an involved thread's ipc_{from,to} will be pointing at the other thread
(despite no waiter structure being installed), other threads' IPC is sure to
never cut in. However, ->status may be one of the IPC send/recv/r_recv states
due to interaction with the thread's pager.

The scheduler resumes a pagefaulted string transfer by selecting a TS_XFER
thread for running, and then calling ipc_resume() .

As of this cset, testbench becomes stuck somewhere.
handle IPC suspension in ipc_recv_half()

Also set the source wakeup_time correctly in ipc_resume(). Unrelated changes,
and frowned upon, but w/e; testing will straighten it out.
testbench: fix out-of-scope auto reference in string_suite

The string_test_thread() put a reference into "tmp" in a string item, which is
accessed from an IPC operation called from outside "tmp"'s scope. Fixed by
moving "tmp" into function scope.
sched: remove tl;dr comment from schedule()'s TS_XFER case
make trace prints in sys_ipc, sys_exregs more useful

config.mk makes no mention of NDEBUG, though.