Separate user and kernel address spaces and move the kernel down to
0x0000000001000000 -- 0x00000000f0000000, below the PROM where the PROM thinks we should be.
This commit is contained in:
parent
d21456569e
commit
5c98160d2b
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile.sparc64,v 1.30 2000/08/02 22:24:38 eeh Exp $
|
||||
# $NetBSD: Makefile.sparc64,v 1.31 2000/09/28 19:56:15 eeh Exp $
|
||||
|
||||
# Makefile for NetBSD
|
||||
#
|
||||
|
@ -72,8 +72,14 @@ CFLAGS= ${DEBUG} ${COPTS} ${CWARNFLAGS} -Wa,-Av9a -mno-fpu
|
|||
CFLAGS += -mcmodel=medlow
|
||||
.endif
|
||||
AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE -Wa,-Av9a
|
||||
LINKFLAGS= -Ttext f1000000 -Tdata f1400000 -e start
|
||||
#LINKFLAGS= -N -Ttext f1000000 -e start
|
||||
|
||||
#
|
||||
# Gotta find a way to make kernel base tuneable.
|
||||
#
|
||||
|
||||
LINKFLAGS= -Ttext 01000000 -Tdata 01400000 -e start
|
||||
|
||||
#LINKFLAGS= -Ttext f1000000 -Tdata f1400000 -e start
|
||||
STRIPFLAGS= -g
|
||||
|
||||
%INCLUDES
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: param.h,v 1.22 2000/06/30 17:55:18 itojun Exp $ */
|
||||
/* $NetBSD: param.h,v 1.23 2000/09/28 19:56:14 eeh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -171,8 +171,8 @@ extern int nbpg, pgofset, pgshift;
|
|||
* 0x00000000fe000000: IODEV_END -- end of device mapping space.
|
||||
*
|
||||
*/
|
||||
#define KERNBASE 0x0f1000000 /* start of kernel virtual space */
|
||||
#define KERNEND 0x0fe000000 /* end of kernel virtual space */
|
||||
#define KERNBASE 0x001000000 /* start of kernel virtual space */
|
||||
#define KERNEND 0x0e0000000 /* end of kernel virtual space */
|
||||
#define VM_MAX_KERNEL_BUF ((KERNEND-KERNBASE)/4)
|
||||
|
||||
#define _MAXNBPG 8192 /* fixed VAs, independent of actual NBPG */
|
||||
|
@ -184,10 +184,10 @@ extern int nbpg, pgofset, pgshift;
|
|||
* Here's the location of the interrupt stack and CPU structure.
|
||||
*/
|
||||
#define INTSTACK ( KERNEND + 8*_MAXNBPG)/* 64K after kernel end */
|
||||
#define EINTSTACK ( INTSTACK + 2*USPACE)
|
||||
#define EINTSTACK ( INTSTACK + 2*USPACE) /* 32KB */
|
||||
#define CPUINFO_VA ( EINTSTACK)
|
||||
#define IODEV_BASE ( CPUINFO_VA + 8*_MAXNBPG)/* 64K long */
|
||||
#define IODEV_END 0x0ff000000UL /* 16 MB of iospace */
|
||||
#define IODEV_END 0x0f0000000UL /* 16 MB of iospace */
|
||||
|
||||
/*
|
||||
* Constants related to network buffer management.
|
||||
|
@ -228,7 +228,7 @@ extern int nbpg, pgofset, pgshift;
|
|||
|
||||
/* pages to bytes */
|
||||
#define ctob(x) ((x) << PGSHIFT)
|
||||
#define btoc(x) (((x) + PGOFSET) >> PGSHIFT)
|
||||
#define btoc(x) (((vsize_t)(x) + PGOFSET) >> PGSHIFT)
|
||||
|
||||
/* bytes to disk blocks */
|
||||
#define btodb(x) ((x) >> DEV_BSHIFT)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: vmparam.h,v 1.12 2000/08/31 19:12:45 eeh Exp $ */
|
||||
/* $NetBSD: vmparam.h,v 1.13 2000/09/28 19:56:14 eeh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -56,10 +56,16 @@
|
|||
* is the top (end) of the user stack.
|
||||
*/
|
||||
#define USRTEXT 0x2000 /* Start of user text */
|
||||
#define USRSTACK KERNBASE /* Start of user stack */
|
||||
#ifdef __arch64__
|
||||
#define USRSTACK 0xffffffffffffe000L
|
||||
#else
|
||||
#define USRSTACK 0xffffe000L
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Virtual memory related constants, all in bytes
|
||||
*
|
||||
* XXXX -- These need to be updated to 64-bits.
|
||||
*/
|
||||
#ifndef MAXTSIZ
|
||||
#define MAXTSIZ (64*1024*1024) /* max text size */
|
||||
|
@ -103,8 +109,9 @@
|
|||
* User/kernel map constants.
|
||||
*/
|
||||
#define VM_MIN_ADDRESS ((vaddr_t)0)
|
||||
#define VM_MAX_ADDRESS ((vaddr_t)KERNBASE)
|
||||
#define VM_MAXUSER_ADDRESS ((vaddr_t)KERNBASE)
|
||||
#define VM_MAX_ADDRESS ((vaddr_t)-1)
|
||||
#define VM_MAXUSER_ADDRESS ((vaddr_t)-1)
|
||||
|
||||
#define VM_MIN_KERNEL_ADDRESS ((vaddr_t)KERNBASE)
|
||||
#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)KERNEND)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: db_trace.c,v 1.18 2000/09/28 15:34:38 eeh Exp $ */
|
||||
/* $NetBSD: db_trace.c,v 1.19 2000/09/28 19:56:14 eeh Exp $ */
|
||||
|
||||
/*
|
||||
* Mach Operating System
|
||||
|
@ -29,7 +29,9 @@
|
|||
#include <sys/param.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/user.h>
|
||||
#include <machine/db_machdep.h>
|
||||
#include <machine/ctlreg.h>
|
||||
|
||||
#include <ddb/db_access.h>
|
||||
#include <ddb/db_sym.h>
|
||||
|
@ -48,6 +50,8 @@ void db_print_window __P((u_int64_t));
|
|||
#define INKERNEL(va) 1 /* Everything's in the kernel now. 8^) */
|
||||
#endif
|
||||
|
||||
#define KLOAD(x) probeget((paddr_t)(long)&(x), ASI_PRIMARY, sizeof(x))
|
||||
#define ULOAD(x) probeget((paddr_t)(long)&(x), ASI_AIUS, sizeof(x))
|
||||
void
|
||||
db_stack_trace_print(addr, have_addr, count, modif, pr)
|
||||
db_expr_t addr;
|
||||
|
@ -58,19 +62,39 @@ db_stack_trace_print(addr, have_addr, count, modif, pr)
|
|||
{
|
||||
vaddr_t frame;
|
||||
boolean_t kernel_only = TRUE;
|
||||
boolean_t trace_thread = FALSE;
|
||||
char c, *cp = modif;
|
||||
|
||||
{
|
||||
register char c, *cp = modif;
|
||||
while ((c = *cp++) != 0)
|
||||
if (c == 'u')
|
||||
kernel_only = FALSE;
|
||||
while ((c = *cp++) != 0) {
|
||||
if (c == 't')
|
||||
trace_thread = TRUE;
|
||||
if (c == 'u')
|
||||
kernel_only = FALSE;
|
||||
}
|
||||
|
||||
if (!have_addr)
|
||||
frame = (vaddr_t)DDB_TF->tf_out[6];
|
||||
else
|
||||
frame = (vaddr_t)addr;
|
||||
|
||||
else {
|
||||
if (trace_thread) {
|
||||
struct proc *p;
|
||||
struct user *u;
|
||||
(*pr)("trace: pid %d ", (int)addr);
|
||||
p = pfind(addr);
|
||||
if (p == NULL) {
|
||||
(*pr)("not found\n");
|
||||
return;
|
||||
}
|
||||
if ((p->p_flag & P_INMEM) == 0) {
|
||||
(*pr)("swapped out\n");
|
||||
return;
|
||||
}
|
||||
u = p->p_addr;
|
||||
frame = (vaddr_t)u->u_pcb.pcb_sp;
|
||||
(*pr)("at %p\n", frame);
|
||||
} else {
|
||||
frame = (vaddr_t)addr;
|
||||
}
|
||||
}
|
||||
while (count--) {
|
||||
int i;
|
||||
db_expr_t offset;
|
||||
|
@ -81,24 +105,22 @@ db_stack_trace_print(addr, have_addr, count, modif, pr)
|
|||
|
||||
if (frame & 1) {
|
||||
f64 = (struct frame64 *)(frame + BIAS);
|
||||
pc = f64->fr_pc;
|
||||
if (!INKERNEL(pc))
|
||||
pc = KLOAD(f64->fr_pc);
|
||||
if (pc == -1)
|
||||
break;
|
||||
|
||||
/*
|
||||
* Switch to frame that contains arguments
|
||||
*/
|
||||
frame = f64->fr_fp;
|
||||
frame = KLOAD(f64->fr_fp);
|
||||
} else {
|
||||
f32 = (struct frame32 *)(frame);
|
||||
pc = f32->fr_pc;
|
||||
if (!INKERNEL(pc))
|
||||
break;
|
||||
pc = KLOAD(f32->fr_pc);
|
||||
|
||||
/*
|
||||
* Switch to frame that contains arguments
|
||||
*/
|
||||
frame = (long)f32->fr_fp;
|
||||
frame = (long)KLOAD(f32->fr_fp);
|
||||
}
|
||||
if (!INKERNEL(frame))
|
||||
break;
|
||||
|
@ -116,8 +138,9 @@ db_stack_trace_print(addr, have_addr, count, modif, pr)
|
|||
* actual arguments somewhat...
|
||||
*/
|
||||
for (i=0; i < 5; i++)
|
||||
(*pr)("%lx, ", (long)f64->fr_arg[i]);
|
||||
(*pr)("%lx) at ", (long)f64->fr_arg[i]);
|
||||
(*pr)("%lx, ",
|
||||
(long)KLOAD(f64->fr_arg[i]));
|
||||
(*pr)("%lx) at ", (long)KLOAD(f64->fr_arg[i]));
|
||||
} else {
|
||||
f32 = (struct frame32 *)(frame);
|
||||
/*
|
||||
|
@ -125,8 +148,8 @@ db_stack_trace_print(addr, have_addr, count, modif, pr)
|
|||
* actual arguments somewhat...
|
||||
*/
|
||||
for (i=0; i < 5; i++)
|
||||
(*pr)("%x, ", f32->fr_arg[i]);
|
||||
(*pr)("%x) at ", f32->fr_arg[i]);
|
||||
(*pr)("%x, ", KLOAD(f32->fr_arg[i]));
|
||||
(*pr)("%x) at ", KLOAD(f32->fr_arg[i]));
|
||||
}
|
||||
db_printsym(pc, DB_STGY_PROC, pr);
|
||||
(*pr)("\n");
|
||||
|
@ -236,13 +259,11 @@ db_dump_stack(addr, have_addr, count, modif)
|
|||
int i;
|
||||
u_int64_t frame, oldframe;
|
||||
boolean_t kernel_only = TRUE;
|
||||
char c, *cp = modif;
|
||||
|
||||
{
|
||||
register char c, *cp = modif;
|
||||
while ((c = *cp++) != 0)
|
||||
if (c == 'u')
|
||||
kernel_only = FALSE;
|
||||
}
|
||||
while ((c = *cp++) != 0)
|
||||
if (c == 'u')
|
||||
kernel_only = FALSE;
|
||||
|
||||
if (count == -1)
|
||||
count = 65535;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: machdep.c,v 1.89 2000/09/16 14:07:59 eeh Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.90 2000/09/28 19:56:14 eeh Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
|
||||
|
@ -131,7 +131,7 @@
|
|||
|
||||
/* #include "fb.h" */
|
||||
|
||||
int bus_space_debug = 0; /* This may be used by macros elsewhere. */
|
||||
int bus_space_debug = 1; /* This may be used by macros elsewhere. */
|
||||
#ifdef DEBUG
|
||||
#define DPRINTF(l, s) do { if (bus_space_debug & l) printf s; } while (0)
|
||||
#else
|
||||
|
@ -407,7 +407,7 @@ setregs(p, pack, stack)
|
|||
}
|
||||
bzero((caddr_t)tf, sizeof *tf);
|
||||
tf->tf_tstate = tstate;
|
||||
tf->tf_global[1] = (vaddr_t)PS_STRINGS;
|
||||
tf->tf_global[1] = (vaddr_t)p->p_psstr;
|
||||
/* %g4 needs to point to the start of the data segment */
|
||||
tf->tf_global[4] = 0;
|
||||
tf->tf_pc = pack->ep_entry & ~3;
|
||||
|
@ -1552,6 +1552,8 @@ static void sparc_bus_barrier __P(( bus_space_tag_t, bus_space_handle_t,
|
|||
bus_size_t, bus_size_t, int));
|
||||
|
||||
|
||||
vaddr_t iobase = IODEV_BASE;
|
||||
|
||||
int
|
||||
sparc_bus_map(t, iospace, addr, size, flags, vaddr, hp)
|
||||
bus_space_tag_t t;
|
||||
|
@ -1565,7 +1567,6 @@ sparc_bus_map(t, iospace, addr, size, flags, vaddr, hp)
|
|||
u_int64_t pa;
|
||||
paddr_t pm_flags = 0;
|
||||
vm_prot_t pm_prot = VM_PROT_READ;
|
||||
static vaddr_t iobase = IODEV_BASE;
|
||||
|
||||
t->type = iospace;
|
||||
if (iobase == NULL)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: netbsd32_machdep.c,v 1.9 2000/08/01 00:34:13 eeh Exp $ */
|
||||
/* $NetBSD: netbsd32_machdep.c,v 1.10 2000/09/28 19:56:14 eeh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Matthew R. Green
|
||||
|
@ -97,7 +97,7 @@ netbsd32_setregs(p, pack, stack)
|
|||
}
|
||||
bzero((caddr_t)tf, sizeof *tf);
|
||||
tf->tf_tstate = tstate;
|
||||
tf->tf_global[1] = (int)PS_STRINGS;
|
||||
tf->tf_global[1] = (int)(long)p->p_psstr;
|
||||
tf->tf_pc = pack->ep_entry & ~3;
|
||||
tf->tf_npc = tf->tf_pc + 4;
|
||||
|
||||
|
@ -231,7 +231,7 @@ netbsd32_sendsig(catcher, sig, mask, code)
|
|||
* Arrange to continue execution at the code copied out in exec().
|
||||
* It needs the function to call in %g1, and a new stack pointer.
|
||||
*/
|
||||
addr = (long)PS_STRINGS - szsigcode;
|
||||
addr = (long)p->p_psstr - szsigcode;
|
||||
tf->tf_global[1] = (long)catcher;
|
||||
tf->tf_pc = addr;
|
||||
tf->tf_npc = addr + 4;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: trap.c,v 1.53 2000/08/08 19:59:41 tv Exp $ */
|
||||
/* $NetBSD: trap.c,v 1.54 2000/09/28 19:56:13 eeh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996
|
||||
|
@ -716,8 +716,12 @@ badtrap:
|
|||
* We may have more FPEs stored up and/or ops queued.
|
||||
* If they exist, handle them and get out. Otherwise,
|
||||
* resolve the FPU state, turn it on, and try again.
|
||||
*
|
||||
* Ultras should never have a FPU queue.
|
||||
*/
|
||||
if (fs->fs_qsize) {
|
||||
|
||||
printf("trap: Warning fs_qsize is %d\n",fs->fs_qsize);
|
||||
fpu_cleanup(p, fs);
|
||||
break;
|
||||
}
|
||||
|
@ -881,9 +885,6 @@ rwindow_save(p)
|
|||
register struct trapframe64 *tf = p->p_md.md_tf;
|
||||
#endif
|
||||
|
||||
/* Make sure our D$ is not polluted w/bad data */
|
||||
blast_vcache();
|
||||
|
||||
i = pcb->pcb_nsaved;
|
||||
#ifdef DEBUG
|
||||
if (rwindow_debug&RW_FOLLOW)
|
||||
|
@ -1126,7 +1127,7 @@ data_access_fault(type, addr, pc, tf)
|
|||
*/
|
||||
if ((caddr_t)va >= vm->vm_maxsaddr) {
|
||||
if (rv == KERN_SUCCESS) {
|
||||
unsigned nss = btoc(USRSTACK - va);
|
||||
segsz_t nss = btoc(p->p_vmspace->vm_minsaddr - va);
|
||||
if (nss > vm->vm_ssize)
|
||||
vm->vm_ssize = nss;
|
||||
} else if (rv == KERN_PROTECTION_FAILURE)
|
||||
|
@ -1383,7 +1384,7 @@ data_access_error(type, sfva, sfsr, afva, afsr, tf)
|
|||
*/
|
||||
if ((caddr_t)va >= vm->vm_maxsaddr) {
|
||||
if (rv == KERN_SUCCESS) {
|
||||
unsigned nss = btoc(USRSTACK - va);
|
||||
segsz_t nss = btoc(p->p_vmspace->vm_minsaddr - va);
|
||||
if (nss > vm->vm_ssize)
|
||||
vm->vm_ssize = nss;
|
||||
} else if (rv == KERN_PROTECTION_FAILURE)
|
||||
|
@ -1530,7 +1531,7 @@ text_access_fault(type, pc, tf)
|
|||
*/
|
||||
if ((caddr_t)va >= vm->vm_maxsaddr) {
|
||||
if (rv == KERN_SUCCESS) {
|
||||
unsigned nss = btoc(USRSTACK - va);
|
||||
segsz_t nss = btoc(p->p_vmspace->vm_minsaddr - va);
|
||||
if (nss > vm->vm_ssize)
|
||||
vm->vm_ssize = nss;
|
||||
} else if (rv == KERN_PROTECTION_FAILURE)
|
||||
|
@ -1697,7 +1698,7 @@ text_access_error(type, pc, sfsr, afva, afsr, tf)
|
|||
*/
|
||||
if ((caddr_t)va >= vm->vm_maxsaddr) {
|
||||
if (rv == KERN_SUCCESS) {
|
||||
unsigned nss = btoc(USRSTACK - va);
|
||||
segsz_t nss = btoc(p->p_vmspace->vm_minsaddr - va);
|
||||
if (nss > vm->vm_ssize)
|
||||
vm->vm_ssize = nss;
|
||||
} else if (rv == KERN_PROTECTION_FAILURE)
|
||||
|
|
Loading…
Reference in New Issue