we don't overwrite valid data when moving the symbol and string
tables.
Assume for instance that the boot-loader left us with:
+--------------+ +--------+ +--------------+
| string table | | kernel | | symbol table |
+--------------+ +--------+ +--------------+
The new addresses computed by lines 338-359 (here, it's really
lines 344-345) will move the tables so that they end up as:
+--------+--------------+--------------+
| kernel | symbol table | string table |
+--------+--------------+--------------+
The current version (rev. 1.20) will, however, first copy the
string table and then the symbol table. But the copy of the
string table will overwrite the symbol table (see the pictures).
The old code (rev. 1.19) uses the right order of table copy to
make sure that we don't overwrite one table when moving the
other. Here, we simply restore this behavior. This makes
multibooting from GRUB2 work again (for MONOLITHIC).
ok jmcneill@
It is executed after IF and the purposes to guarantee the right
order in cross-component interface address configuration.
(e.g. lo0 is attached by net but 127.0.0.1 is configured by netinet)
16- and 32-bit type, but now PRIu8 is needed for tools/disklabel.
Also define SCN[diouxX]{8,16,32}, the scanf counterparts
to the PRI[diouxX]{8,16,32} macros.
Tested via "build.sh tools" on a system whose native definitions
or the PRI* and SCN* mcros was disabled.
* don't hold spc mutex while sending data
* use send() for the banner to avoid SIGPIPE in case a client
connects and immediately goes away
* fix error path locking
* use kevent() instead of pollts() in the client. Apparently that
is the only sensible way for a library to support both multithreading
and signal-reentrancy in a race-free manner.
(can I catch all signals with one kevent instead of installing
NSIG different ones??)
* mark client comm descriptor non-blocking so that clients have
better signal-interruptibility (we now sleep in signal-accepting
kevent() instead of signal-masked recvfrom())