157 Commits

Author SHA1 Message Date
jake
21743f7bc5 Add missing includes. 2001-10-20 18:52:44 +00:00
jake
b1b34c6861 Remove interrupt queue array. Its in globaldata now. 2001-10-20 18:51:45 +00:00
jake
d9948593f9 Fix get_cyclecount. Wrap in ifdef _KERNEL. 2001-10-20 18:51:10 +00:00
jake
e821bbbc6a Use KTR_PMAP instead of KTR_CT1. 2001-10-20 17:11:07 +00:00
jake
5e879c167b Catch up to changing entry point names so traces through traps
mostly work right.  This catches recursive traps too early, but
generally such traps are fatal and we won't get this far anyway.
2001-10-20 17:10:34 +00:00
jake
872f6c4015 Add a definition for normal kernel window state. 2001-10-20 17:08:33 +00:00
jake
38c7466c9a Catch up to new assembly language code. 2001-10-20 17:07:18 +00:00
jake
fd0d094ecb Fix a bug in the kernel entry window handling where the wrong register
was used.  This resulted in bogus bad window traps (invalid wstate).

Add a trace to sfsr traps (alignment among other things).

Use KTR_TRAP instead of KTR_CT1.

Use the right registers when storing the values of various
mmu registers into the trap frame.  This fixes a bug where sometimes
the context number reported by a fault would be garbage.  Sometimes
it would be zero for faults on user address space so the kernel would
wrongly think that it was a fault on kernel address space and fail.

Use the preloaded registers in the vectored interrupt trap instead
of reading pointers from memory.  Remove traces due to register
pressure and excess verbosity.  We can probably still sneak in one
trace.  Remove some debug code.

Go back to using the tsb register during kernel page table lookups.
This is the best way to not have to have the address of the kernel tsb be
a compile time constant.  We lie and say we have 1 page tsb when really
its much larger.  This way the hardware provides bits 13-22 of the
virtual address (the lower 9 bits of the virtual page number) in the
form of the address of the tte corresponding to the fault address in
the (1 page) kernel tsb.  With some clever arithmetic we can then get
bits 22 and up from the tte tag and add them to the tte address in
order to index massive tsbs (basically unlimited).

Add traps for physical address hardware watchpoints.

Don't try to pass the window state from the trap table entry point
all the way down to the common trap code.  Its too easy to clobber
and reading it again doesn't cost much.

Fixup some traces.

Fiddle the cwp bits on return from the kernel to user mode so that
the window we are returning to is always the same as the one we
restore to in the trap code.  Strictly speaking this is not necessary,
it only affects return from fork and exec, but setting up the windows
right would require hard coding the right cwp values in cpu_fork and
setregs, basically hard coding the number of frames between syscall and
tl0_ret.  The result of getting it wrong is usually a spill to an invalid
stack pointer; either 0 or pointing into kernel space.  This should also
alleviate the need to context switch the cwp.

Transfer the trap state from locals to alternate globals in the trap
return code so that we can do a restore and rotate the windows before
reloading the trap registers.  If the restore fails we'll trap back
into the kernel, so there's no point in loading the trap registers
before hand.  Its is crucial that the window trap recovery code not
clobber the alternate globals.
2001-10-20 17:06:04 +00:00
jake
1d421d0a01 Align the symbol that demarks the end of the signal code on a 16 byte
boundary.  It must be on at least an 8 byte boundary so that the length
of the signal code is a multiple of 8 (well aligned).  The size is used
in the calculation of the address of the argument and environment vectors
on the user stack; getting it wrong results in the string pointers being
misaligned and causes alignment faults in getenv() among other things.

Allocate a regular stack frame below the signal frame on the user stack
and join up the frame pointer to the previous frame.  This fixes longjmp-ing
out of signal handlers.  Longjmp traverses the stack upwards in order to
find the right frame to return to, so the frame pointers must join up
seamlessly.  I thought this would just work, but obviously the frame
needs to be below the signal frame, not above it like before.  Account
for the extra space in the signal code.

Preload pointers to interrupt data structures in interrupt globals.
This avoids the need to load the pointers from memory in the vectored
interrupt trap handler.

Transfer the first 2 out registers into td_retval in setregs.  We use
the same registers for system call arguments as return values, so these
registers got clobbered by the system call return values on return from
execve.  They now get clobbered by the right values.  We must put the values
in both the out registers in the trapframe and in td_retval because init
calls exec but fails to transfer the return value into the out registers.
This fixes a bug where the first exec after init would pass junk to the
c runtime, instead of a pointer to the argument strings.  A better solution
would be to return EJUSTRETURN on success from execve.

Adjust for change in pmap_bootstraps prototype.

Map the message buffer after the trap table is setup.  We will fault
on it immediately.
2001-10-20 16:36:08 +00:00
jake
0241151d04 Parameterize the size of the kernel virtual address space on KVA_PAGES.
Don't use a hard coded address constant for the virtual address of the
kernel tsb.  Allocate kernel virtual address space for the kernel tsb
at runtime.
Remove unused parameter to pmap_bootstrap.
Adapt pmap.c to use KVA_PAGES.
Map the message buffer too.
Add some traces.
Implement pmap_protect.
2001-10-20 16:17:04 +00:00
jake
bce44fcf8d Remove hardcoded cwp value. 2001-10-20 16:10:13 +00:00
jake
b8032ff6ca Use KTR_PROC instead of KTR_CT1 in traces. 2001-10-20 16:09:50 +00:00
jake
85fc06a229 Return zero on success from su*. Apparently no one checks the return
values.
Add traces to fubyte, subyte, etc.  These are useful for catching errors.
due to alignment since its usually not checked for by the caller.
2001-10-20 16:09:20 +00:00
jake
cb7ca29ccf Add support for physical address hardware watchpoints. 2001-10-20 16:04:39 +00:00
jake
21fd58664d Change the stray count in struct intr_vector to a vector number that can
be used to index tables of counters.
Remove intr_dispatch() inline, it is implemented directly in tl*_intr now.
Count stray interrupts in a table of counters like intrcnt.
Disable interrupts briefly when setting up the interrupt vector table.
We must disable interrupts completely, not just raise the pil.
Pass pointers to the intr_vector structures rather than a vector number
to sched_ithd and intr_stray.
2001-10-20 16:03:41 +00:00
jake
c2c8a8c21a Remove traces that are loud and not that useful. Remove nested include
of ktr.h.
2001-10-20 15:58:31 +00:00
jake
c5b8016f63 Remove an unused macro arg. 2001-10-20 15:57:39 +00:00
jake
1ec51b364f Include a whole interrupt queue in struct globaldata instead of just a
pointer.  Minor style.
2001-10-20 15:57:09 +00:00
jake
be0d728a75 Add fields for boothowto and the kernel environment to boothowto. 2001-10-20 15:55:42 +00:00
obrien
e4ab2c9a0f Try two on the preprocessing logic.
Reviewed by:	ru
2001-10-19 20:01:01 +00:00
obrien
975b6d2e75 Blah, fix braino where ru had to remind me of proper preprocessor syntax.
Bad fingers, no cookie.
2001-10-19 19:17:11 +00:00
obrien
2b9b303646 My attempts at minimizing the number of #def's got me in trouble. 2001-10-18 16:07:21 +00:00
obrien
1d7ce16d9a Add support for "__gnuc_va_list". Some overly "smart" libraries assume
the existence of the __gnuc_va_list type[*] because our compiler is GCC.

[*] __gnuc_va_list is defined in the GCC ginclude/stdarg.h replacement
headerwhich we don't use.
2001-10-18 00:27:39 +00:00
tmm
369a58f711 Add inthand_add() and inthand_remove() for use by the MD bus code and
some glue code.
2001-10-12 16:06:41 +00:00
tmm
05cbaa6ba0 Fix some warnings. 2001-10-12 16:00:30 +00:00
tmm
d2f70b2e81 Save the floating point context to the right pcb in cpu_fork(), and add
an empty stub for is_physical_memory().
2001-10-12 15:58:48 +00:00
tmm
f6584937ae Make the NTOHL, NTOHS, HTONL and HTONS macros (which are nops on
sparc64) empty to avoid compiler warnings.
2001-10-12 15:55:45 +00:00
tmm
8ab8d21a7b Implement DELAY() using the %tick register. 2001-10-12 15:51:19 +00:00
tmm
05eb54c2c7 Add pmap_kenter_flags(), which is used by MD bus code that will be
committed soon, add a stub form pmap_kenter_temporary(), and implement
pmap_extract() and pmap_kextract().
2001-10-12 15:49:51 +00:00
ps
db0d5cd641 Make MAXTSIZ, DFLDSIZ, MAXDSIZ, DFLSSIZ, MAXSSIZ, SGROWSIZ loader
tunable.

Reviewed by:	peter
MFC after:	2 weeks
2001-10-10 23:06:54 +00:00
des
29c5c858fc Dissociate ptrace from procfs.
Until now, the ptrace syscall was implemented as a wrapper that called
various functions in procfs depending on which ptrace operation was
requested.  Most of these functions were themselves wrappers around
procfs_{read,write}_{,db,fp}regs(), with only some extra error checks,
which weren't necessary in the ptrace case anyway.

This commit moves procfs_rwmem() from procfs_mem.c into sys_process.c
(renaming it to proc_rwmem() in the process), and implements ptrace()
directly in terms of procfs_{read,write}_{,db,fp}regs() instead of
having it fake up a struct uio and then call procfs_do{,db,fp}regs().

It also moves the prototypes for procfs_{read,write}_{,db,fp}regs()
and proc_rwmem() from proc.h to ptrace.h, and marks all procfs files
except procfs_machdep.c as "optional procfs" instead of "standard".
2001-10-07 20:08:42 +00:00
jake
6815a9f859 Add contents to struct *reg. 2001-09-30 19:59:07 +00:00
jake
cbc8263434 Optimize bcopy and bzero etc to use 64 bit loads and stores if possible.
Handle overlap in bcopy.
Add routines for copying and zeroing pages using physical addresses
directly.
Remove all the hacks to account for calling the firmware on its own
trap table, we use the kernel trap table.  There is still a problem
with OF_exit().
2001-09-30 19:50:39 +00:00
jake
5e37317159 Use %ver to identify the cpu instead of openfirmware.
Submitted by:	robert
2001-09-30 19:45:34 +00:00
jake
31f25c3f3d Remove some debug code, add traces. 2001-09-30 19:44:19 +00:00
jake
e0d2d2b6d0 Return EIO for procfs_*_dbregs. 2001-09-30 19:43:18 +00:00
jake
9ace52fc69 Add a place holder for PSTATE_SECURE, which detects if user code it
trying to set bad pstate bits.
2001-09-30 19:42:34 +00:00
jake
9f3535edc7 Split the low level trap code into trap, interrupt and syscall, its
easier and hopefully this code is done changing radically.

Don't use the mmu tlb register to address the kernel page table, nor
the 8k pointer register.  The hardware will do some of the page table
lookup by storing the the base address in an internal register and
calculating the address of the tte in the table.  However it is limited
to a 1 meg tsb, which only maps 512 megs.  The kernel page table only
has one level, so its easy to just do it by hand, which has the advantage
of supporting abitrary amounts of kvm and only costs a few more instructions.

Increase kvm to 1 gig now that its easy to do so and so we don't waste
most of a 4 meg page.

Fix some traces.  Fix more proc locking.

Call tsb_stte_promote if we get a soft fault on a mapping in the upper
levels of the tsb.  If there is an invalid or unreferenced mapping
in the primary tsb, it will be replaced.

Immediately fail for faults occuring in {f,s}uswintr.
2001-09-30 19:41:20 +00:00
jake
8b63e53025 Implement sysarch(). 2001-09-30 19:06:45 +00:00
jake
fdfc3c2c60 Fix some traces. td->p_comm doesn't exist. 2001-09-30 19:05:30 +00:00
jake
d495dd131c Move the kernel to end of the first 4 gigabytes of address space, so that
one 4 meg page can map both the kernel and the openfirmware mappings.
Add the openfirmware mappings to the kernel tsb so we can call the firmware
on the kernel trap table and access kernel memory normally.
Implement pmap_swapout_proc, pmap_swapin_proc, pmap_swapout_thread,
pmap_swapin_thread, pmap_activate, pmap_page_exists, and pmap_phys_address.
2001-09-30 19:03:22 +00:00
jake
ac0e71fb28 Add a macro to get the context from a tte tag, not necesarily a whole
tte.  Remove the old inline.
2001-09-30 18:55:05 +00:00
jake
c552424869 Include <machine/setjmp.h> instead of <setjmp.h>. 2001-09-30 18:52:56 +00:00
jake
f6a5e3f810 Don't use types that require other headers. 2001-09-30 18:52:17 +00:00
jake
539ccfaeb2 Wrap hardware trap types in ifdef _kernel. 2001-09-30 18:51:18 +00:00
jake
0faa0047f4 Move the pcb the to the top of the kernel stack.
Add a guard page at the bottom of the kernel stack.  Its unclear how easy
it will be to detect these faults and do something useful.
Setup the registers on exec how the c runtime expects.
Implement various {fill,set}_*regs.
Fix proc locking.
2001-09-30 18:48:37 +00:00
jake
de1928a0bc Don't overflow the ktr buffer <gulp>. 2001-09-30 18:42:56 +00:00
jake
327570ce60 Implement PCPU_ADDR. Align functions on 16 bytes boundaries. 2001-09-30 18:41:57 +00:00
obrien
94003d0787 + Fix misplacement of `txp'
+ Document our -CURRENT debugging bits
2001-09-24 03:23:48 +00:00
jake
297dc90746 Add kernbase symbol and use it instead of magic numbers in the
linker script.
2001-09-21 05:43:38 +00:00