Start doing the work necessary to support DAC (Dual Address Cycle)
environments. This allows for direct DMA to > 4GB memory from a PCI
card.
Lose STRNCAT over the side and use SNPRINTF instead.
In particular, use r8 to hold the old process, and r7 for medium-term
scratch, saving r0-r3 for things we don't need saved over function
calls. This gets rid of five register-to-register MOVs.
and hence save fewer into the PCB. This should give me enough free
registers in cpu_switch to tidy things up and support MULTIPROCESSOR
properly. While we're here, make the stacked registers into an
APCS stack frame, so that DDB backtraces through cpu_switch() will
work.
This also affects cpu_fork(), which has to fabricate a switchframe and
PCB for the new process.
(which runs rc.shutdown, which might do stuff like, say, save your
ipnat or ipf state for restoration on reboot) can tell machines (sparc
and sun3 machines presently) how to boot.
"normal", ie, "hash filename" (like all the simple checksum output
forms) as opposed to "hashname (filename) = hash". This output form
is, imho, somewhat more useful because you can pass it directly to
sort to find identical files. For example:
md5 * | sort | uniq -c | grep -v ' 1 '
change INITIALIZE_TRAMPOLINE() to use it, and apply the following
patch to it (which I have already submitted to GCC 3.3):
* config/i386/i386.c (x86_initialize_trampoline): Emit a call
to __enable_execute_stack with the address of the trampoline
if TRANSFER_FROM_TRAMPOLINE is defined.
Define a TRANSFER_FROM_TRAMPOLINE suitable for NetBSD targets, to enable
stack execution on target machines which can separate exec permissions for
a region:
* config/netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): Define.
* config/alpha/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Define
as NETBSD_ENABLE_EXECUTE_STACK.
* config/i386/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
* config/i386/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
* config/sparc/netbsd-elf-common.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
* config/sparc/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
(A similar patch will be submitted to GCC 3.3.)
allocations can be merged either forwards or backwards, meaning no new
entries will be added to the list, and some can even be merged in both
directions, resulting in a surplus entry.
This code typically reduces the number of map entries in the
kernel_map by an order of magnitude or more. It also makes possible
recovery from the pathological case of "5000 processes created and
then killed", which leaves behind a large number of map entries.
The only forward merge case not covered is the instance of an amap
that has to be extended backwards (WIP). Note that this only affects
processes, not the kernel (the kernel doesn't use amaps), and that
merge opportunities like this come up *very* rarely, if at all. Eg,
after being up for eight days, I see only three failures in this
regard, and even those are most likely due to programs I'm developing
to exercise this case.
Code reviewed by thorpej, matt, christos, mrg, chuq, chuck, perry,
tls, and probably others. I'd like to thank my mother, the Hollywood
Foreign Press...
using a "movi imm, Rn / sub R15, RN, R15" pair. This is how the compiler
creates frames which are too big to fit in the immediate field of "addi";
something which happens a lot with -O0 ...
While I'm here, add a simple heuristic to detect infinite loops caused by
tracing back through some non-leaf asm routines which don't set up frames.
2002-10-17 Jason Thorpe <thorpej@wasabisystems.com>
* config/alpha/alpha.c (alpha_initialize_trampoline): Use
tramp, not addr, to pass the trampoline address to
__enable_execute_stack.
Otherwise, incorrect behavior would result if the trampoline happend
to stradle a page boundary.
merely " == 1" is just *not* helpful).
Note which symbols were missing (better for bug reports, if anyone
files one :).
Make the kernel submap symbols optional (sparc, sparc64, most powerpc,
and the sh3 ports seem not to have a phys_map -- problem noted by
myself yesterday).
Oh, and a little misc lint cleanup while I'm here.