svn commit: r197762 - projects/ppc64/sys/powerpc/aim64
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Mon Oct 5 00:28:48 UTC 2009
Author: nwhitehorn
Date: Mon Oct 5 00:28:47 2009
New Revision: 197762
URL: http://svn.freebsd.org/changeset/base/197762
Log:
Change the fake top stack frame from 16 to 48 bytes to match the ABI, and
use the dsitrap handler for data segment exceptions in order to record
the DAR. Still weird crashing bugs associated with threading -- maybe the
trap handlers are misbehaving in a way that completely eludes me.
Modified:
projects/ppc64/sys/powerpc/aim64/locore.S
projects/ppc64/sys/powerpc/aim64/machdep.c
projects/ppc64/sys/powerpc/aim64/trap_subr.S
Modified: projects/ppc64/sys/powerpc/aim64/locore.S
==============================================================================
--- projects/ppc64/sys/powerpc/aim64/locore.S Sun Oct 4 23:30:08 2009 (r197761)
+++ projects/ppc64/sys/powerpc/aim64/locore.S Mon Oct 5 00:28:47 2009 (r197762)
@@ -147,8 +147,8 @@ ASENTRY(__start)
std 5,openfirmware_entry at l(8) /* save client interface handler */
/* Set up the stack pointer */
- lis 1,(tmpstk+TMPSTKSZ-16)@ha
- addi 1,1,(tmpstk+TMPSTKSZ-16)@l
+ lis 1,(tmpstk+TMPSTKSZ-48)@ha
+ addi 1,1,(tmpstk+TMPSTKSZ-48)@l
/* Set up the TOC pointer */
lis 2,tocbase at ha
Modified: projects/ppc64/sys/powerpc/aim64/machdep.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim64/machdep.c Sun Oct 4 23:30:08 2009 (r197761)
+++ projects/ppc64/sys/powerpc/aim64/machdep.c Mon Oct 5 00:28:47 2009 (r197762)
@@ -128,8 +128,8 @@ extern vm_offset_t ksym_start, ksym_end;
#endif
int cold = 1;
-int cacheline_size = 32;
-int ppc64 = 0;
+int cacheline_size = 128;
+int ppc64 = 1;
int hw_direct_map = 1;
struct pcpu __pcpu[MAXCPU];
@@ -145,17 +145,10 @@ SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST,
SYSCTL_INT(_machdep, CPU_CACHELINE, cacheline_size,
CTLFLAG_RD, &cacheline_size, 0, "");
-u_int powerpc_init(u_int, u_int, u_int, void *);
-
-int save_ofw_mapping(void);
-int restore_ofw_mapping(void);
-
-void install_extint(void (*)(void));
-
-int setfault(faultbuf); /* defined in locore.S */
-
+uintptr_t powerpc_init(vm_offset_t, vm_offset_t, vm_offset_t, void *);
static int grab_mcontext(struct thread *, mcontext_t *, int);
+int setfault(faultbuf); /* defined in locore.S */
void asm_panic(char *);
long Maxmem = 0;
@@ -239,8 +232,9 @@ extern void *decrint, *decrsize;
extern void *extint, *extsize;
extern void *dblow, *dbsize;
-u_int
-powerpc_init(u_int startkernel, u_int endkernel, u_int basekernel, void *mdp)
+uintptr_t
+powerpc_init(vm_offset_t startkernel, vm_offset_t endkernel,
+ vm_offset_t basekernel, void *mdp)
{
struct pcpu *pc;
vm_offset_t end;
@@ -372,11 +366,9 @@ powerpc_init(u_int startkernel, u_int en
cache_check[cacheline_size] == 0; cacheline_size++);
/*
- * This is a PPC64 system
+ * Install interrupt handlers
*/
- ppc64 = 1;
-
#ifdef SMP
bcopy(&rstcode, (void *)EXC_RST, (size_t)&rstsize);
#else
@@ -395,7 +387,7 @@ powerpc_init(u_int startkernel, u_int en
bcopy(&trapcode, (void *)EXC_BPT, (size_t)&trapsize);
#endif
bcopy(&dsitrap, (void *)EXC_DSI, (size_t)&dsisize);
- bcopy(&trapcode, (void *)EXC_DSE, (size_t)&trapsize);
+ bcopy(&dsitrap, (void *)EXC_DSE, (size_t)&dsisize);
bcopy(&alitrap, (void *)EXC_ALI, (size_t)&alisize);
bcopy(&trapcode, (void *)EXC_ISI, (size_t)&trapsize);
bcopy(&trapcode, (void *)EXC_ISE, (size_t)&trapsize);
@@ -464,7 +456,7 @@ powerpc_init(u_int startkernel, u_int en
"Boot flags requested debugger");
#endif
- return (((uintptr_t)thread0.td_pcb - 16) & ~15UL);
+ return (((uintptr_t)thread0.td_pcb - 48) & ~15UL);
}
void
Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S
==============================================================================
--- projects/ppc64/sys/powerpc/aim64/trap_subr.S Sun Oct 4 23:30:08 2009 (r197761)
+++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Mon Oct 5 00:28:47 2009 (r197762)
@@ -543,8 +543,8 @@ dbtrap:
andi. %r1,%r1,0xff00
mtsprg3 %r1
- lis %r1,(tmpstk+TMPSTKSZ-16)@ha /* get new SP */
- addi %r1,%r1,(tmpstk+TMPSTKSZ-16)@l
+ lis %r1,(tmpstk+TMPSTKSZ-48)@ha /* get new SP */
+ addi %r1,%r1,(tmpstk+TMPSTKSZ-48)@l
FRAME_SETUP(PC_DBSAVE)
/* Call C trap code: */
More information about the svn-src-projects
mailing list