FYI: powerpc EXC_LAST==0x2f00 vs. EXC_DEBUG ==0x2f10 and such?
Mark Millard
markmi at dsl-only.net
Tue May 16 22:41:35 UTC 2017
[Context:
I'm having problems with production-style kernel builds
for TARGET_ARCH=powerpc (used an old PowerMac G5 so-called
"Quad Core") getting occasional panics that involve
oddities like:
frame->exc == 0x903a64e
in the fatal kernel trap information on the console
display.
I'm not claiming the below is related but while looking
around to figure out how to investigate I ran into
what I report below. (The first 2 are from a block of
4xx / 85xx EXC_<?>'s).
]
From /usr/src/sys/powerpc/include/trap.h :
#define EXC_DEBUG 0x2f10 /* Debug trap */
#define EXC_VECAST_E 0x2f20 /* Altivec Assist (Book-E) */
#define EXC_LAST 0x2f00 /* Last possible exception vector */
#define EXC_AST 0x3000 /* Fake AST vector */
/* Trap was in user mode */
#define EXC_USER 0x10000
And also:
/usr/src/sys/powerpc/ofw/ofw_machdep.c:char save_trap_init[0x2f00]; /* EXC_LAST */
/usr/src/sys/powerpc/ofw/ofw_machdep.c:char save_trap_of[0x2f00]; /* EXC_LAST */
/usr/src/sys/powerpc/include/profile.h:#define __PROFILE_VECTOR_TOP (EXC_LAST + 0x100)
These makes it look like EXC_LAST and some literal
0x2f00's might be insufficient for some contexts.
If they are sufficient for those contexts some
notes about the relationships of the beyond-last
ones would seem appropriate.
The other power specific references for EXC_LAST are below.
Note the __syncicache ones and bcopy ones, for example.
/usr/src/sys/powerpc/aim/mmu_oea.c: if (phys_avail[j] < EXC_LAST)
/usr/src/sys/powerpc/aim/mmu_oea.c: phys_avail[j] += EXC_LAST;
/usr/src/sys/powerpc/aim/mmu_oea64.c: if (phys_avail[j] < EXC_LAST)
/usr/src/sys/powerpc/aim/mmu_oea64.c: phys_avail[j] += EXC_LAST;
/usr/src/sys/powerpc/aim/aim_machdep.c: for (trap = EXC_RST; trap < EXC_LAST; trap += 0x20)
/usr/src/sys/powerpc/aim/aim_machdep.c: __syncicache(EXC_RSVD, EXC_LAST - EXC_RSVD);
/usr/src/sys/powerpc/powerpc/trap.c: { EXC_LAST, NULL }
/usr/src/sys/powerpc/powerpc/trap.c: for (pe = powerpc_exceptions; pe->vector != EXC_LAST; pe++) {
/usr/src/sys/powerpc/ofw/ofw_machdep.c: bcopy((void *)EXC_RST, save_trap_vec, EXC_LAST - EXC_RST);
/usr/src/sys/powerpc/ofw/ofw_machdep.c: bcopy(restore_trap_vec, (void *)EXC_RST, EXC_LAST - EXC_RST);
/usr/src/sys/powerpc/ofw/ofw_machdep.c: __syncicache(EXC_RSVD, EXC_LAST - EXC_RSVD);
===
Mark Millard
markmi at dsl-only.net
More information about the freebsd-ppc
mailing list