various orders depending how the upper level driver is flushing it's queue's.
This prevents the deadlocks I was seeing before with >8k writes.
XXX: Still not completely there as > 64k copies trigger bugs and the page
table support still needs to be written to break those down.
keep track of the receive right for the port. There can be only one, and
the receive right references struct proc should we need it.
This makes easier to find the receive right associated with the port.
This does not buy us new functionnality for now, because we still have to
discover how mach_init (which acts as a name server, enabling processes to
discover each other's ports) is able to receive messages from other processes
(this is a bootstrap problem, and the bootstrap port might be the place to
search).
While we are there:
- removed a lot of debug which is now available using ktrace.
- reworked message handling to avoid mutliple copyin/copyout of the
same data. ktrace of Mach message now uses the in-kernel copy of the
message instead of copying it from userland.
- packed mach trap handlers arguments into a structure to avoid modifying
everything next time we have to add an argument.
remove special ttyaction hook from etc/etc.sun[23]/Makefile.inc, it's no longer
needed
ld.so.conf is ${MACHINE}-specific, the code happened to work for i386 and sparc
only because ${MACHINE} == ${MACHINE_ARCH} there
remove basesrc/etc/ld.so.conf and its special vax/ns32k/m68k hook in Makefile -
vax & m68k are ELF now, and ns32k doesn't need to be handled here
require flushing (even in the instruction cache handlers). This gives
about a 4% improvement in a "make depend" benchmark.
Mark the SB-1 CPUs as having a fully coherent data cache that only
require flushing in the instruction cache handlers. This gives about
a 5% improvement in a "make depend" benchmark.
Background:
Originally, the EH labels were placed on the permanent obstack, which
could end up using a lot of memory (for heavy inlining) since inlined
labels also needed to be permanent as a result of this.
This was changed in
Wed Dec 9 09:12:40 1998 Andrew MacLeod <amacleod@cygnus.com>
* except.h (struct handler_info): Add handler_number field.
* except.c (gen_exception_label): EH labels no longer need to be
on the permanent obstack.
(get_new_handler): Set the label number field.
(output_exception_table_entry): Regenerate handler label reference
from the label number field.
(init_eh): Remove a blank line.
* integrate.c (get_label_from_map): Labels no longer need to be
on the permanent obstack.
by using the label numbers instead of the label structures in most cases.
The operative word here is "most" cases. Addresses to the EH RTX was still
used in (at least) flow.c, that now used freed memory. Oops.
For this to happen, the freed address of the RTX representing a EH label
must be reused for a new label that is located in dead code. delete_block()
will then see that this RTX is mentioned in the EH table, and (incorrectly)
remove the exception handler.
This might be seen when, for example, compiling
src/gnu/dist/groff/src/roff/troff/node.cc for m68k.