Date: Sun, 13 May 2018 17:35:01 -0700 From: Nathan Whitehorn <nwhitehorn@freebsd.org> To: freebsd-ppc@freebsd.org Subject: Re: head -r333575's kernel: fails to boot old PowerMac G5 so-called "Quad Core", failing very early Message-ID: <1c62913a-0caa-aa6e-b0b6-97c338aa50c7@freebsd.org> In-Reply-To: <94E173AD-74C0-43ED-9D0D-86D9A56C2A74@yahoo.com> References: <94E173AD-74C0-43ED-9D0D-86D9A56C2A74@yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This should be fixed if you update past r333594. -Nathan On 05/13/18 16:12, Mark Millard via freebsd-ppc wrote: > I'd had to revert to the old kernel from the last time I'd > updated the old PowerMac G5 "Quad Core" for powerpc64 style > use [back in early Jan.]: > > # uname -apKU > FreeBSD FBSDG5L 12.0-CURRENT FreeBSD 12.0-CURRENT r327364M powerpc powerpc64 1200054 1200063 > > because buildkernel instalkernel for -r333575 results for > all the following fail in the same way: > > A) devel/powerpc64-xtoolchain-gcc based build > (from /usr/ports/ -r469767 so before the upgrade to 6.4) > B) gcc 4.2.1 based build > C) system clang6 based build > > These were all amd64 -> powerpc64 cross builds. Each is a > non-debug build --but with symbols. > > The following 3 lines are displayed and nothing more > visible happens after that in the boot sequence, the > lines are the ones that start with: > > GDB: no debug ports present > KDB: debugger backends: > KDB: current backend: > > It does not display any Copyright notice line or even > clear the screen. > > The old -r327364 kernel boots the old PowerMac G5 "Quad Core" > just fine (with the -r333575 world at this point). > > So far, this much suggests the issue is not toolchain related, > although in all 3 cases devel/powerpc64-binutils is in use > so it can not be eliminated as easily. > > [A problem is I'm very restricted on the amount of time > I can be involved in bisecting this and 333575-327364==6211 > for the version span. Another problem is that, at the failure > stage, getting information about failure details is > problematical on the old PowerMac, even if I could apply > the time for such.] > > > For powerpc64 context I have: > > # more /usr/src/sys/powerpc/conf/GENERIC64vtsc-NODBG > # > # GENERIC -- Custom configuration for the powerpc/powerpc64 > # > > include "GENERIC64" > > ident GENERIC64vtsc-NODBG > > makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols > > nooptions PS3 # Sony Playstation 3 HACK!!! to allow sc > > options KDB # Enable kernel debugger support > > options ALT_BREAK_TO_DEBUGGER > options BREAK_TO_DEBUGGER > > # For minimum debugger support (stable branch) use: > options KDB_TRACE # Print a stack trace for a panic > options DDB # Enable the kernel debugger > options GDB # HACK!!! ... > > # Extra stuff: > #options VERBOSE_SYSINIT # Enable verbose sysinit messages > #options BOOTVERBOSE=1 > #options BOOTHOWTO=RB_VERBOSE > #options KTR > #options KTR_MASK=KTR_TRAP > ##options KTR_CPUMASK=0xF > #options KTR_VERBOSE > > # HACK!!! to allow sc for 2560x1440 display on Radeon X1950 that vt historically mishandled during booting > device sc > #device kbdmux # HACK: already listed by vt > options SC_OFWFB # OFW frame buffer > options SC_DFLT_FONT # compile font in > makeoptions SC_DFLT_FONT=cp437 > > > # Disable any extra checking for. . . > nooptions DEADLKRES # Enable the deadlock resolver > nooptions INVARIANTS # Enable calls of extra sanity checking > nooptions INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS > nooptions WITNESS # Enable checks to detect deadlocks and cycles > nooptions WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed > nooptions DIAGNOSTIC > nooptions MALLOC_DEBUG_MAXZONES # Separate malloc(9) zones > > device filemon > device geom_label > > > > # svnlite diff /usr/src/contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp > Index: /usr/src/contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp > =================================================================== > --- /usr/src/contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp (revision 333575) > +++ /usr/src/contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp (working copy) > @@ -1176,7 +1176,7 @@ > // For SVR4, don't emit a move for the CR spill slot if we haven't > // spilled CRs. > if (isSVR4ABI && (PPC::CR2 <= Reg && Reg <= PPC::CR4) > - && !MustSaveCR) > + && (!MustSaveCR && isPPC64)) > continue; > > // For 64-bit SVR4 when we have spilled CRs, the spill location > > > > Note: The following file does not intend a powerpc64 functional change > but a powerpc (32-bit) change: > > # svnlite diff /usr/src/sys/powerpc/ofw/ofw_machdep.c > Index: /usr/src/sys/powerpc/ofw/ofw_machdep.c > =================================================================== > --- /usr/src/sys/powerpc/ofw/ofw_machdep.c (revision 333575) > +++ /usr/src/sys/powerpc/ofw/ofw_machdep.c (working copy) > @@ -116,26 +116,27 @@ > * Assume that interrupt are disabled at this point, or > * SPRG1-3 could be trashed > */ > -#ifdef __powerpc64__ > - __asm __volatile("mtsprg1 %0\n\t" > - "mtsprg2 %1\n\t" > - "mtsprg3 %2\n\t" > - : > - : "r"(ofmsr[2]), > - "r"(ofmsr[3]), > - "r"(ofmsr[4])); > -#else > - __asm __volatile("mfsprg0 %0\n\t" > - "mtsprg0 %1\n\t" > - "mtsprg1 %2\n\t" > - "mtsprg2 %3\n\t" > - "mtsprg3 %4\n\t" > - : "=&r"(ofw_sprg0_save) > - : "r"(ofmsr[1]), > - "r"(ofmsr[2]), > - "r"(ofmsr[3]), > - "r"(ofmsr[4])); > +#ifndef __powerpc64__ > + if (!(cpu_features & PPC_FEATURE_64)) > + __asm __volatile("mfsprg0 %0\n\t" > + "mtsprg0 %1\n\t" > + "mtsprg1 %2\n\t" > + "mtsprg2 %3\n\t" > + "mtsprg3 %4\n\t" > + : "=&r"(ofw_sprg0_save) > + : "r"(ofmsr[1]), > + "r"(ofmsr[2]), > + "r"(ofmsr[3]), > + "r"(ofmsr[4])); > + else > #endif > + __asm __volatile("mtsprg1 %0\n\t" > + "mtsprg2 %1\n\t" > + "mtsprg3 %2\n\t" > + : > + : "r"(ofmsr[2]), > + "r"(ofmsr[3]), > + "r"(ofmsr[4])); > } > > static __inline void > @@ -152,7 +153,8 @@ > * PCPU data cannot be used until this routine is called ! > */ > #ifndef __powerpc64__ > - __asm __volatile("mtsprg0 %0" :: "r"(ofw_sprg0_save)); > + if (!(cpu_features & PPC_FEATURE_64)) > + __asm __volatile("mtsprg0 %0" :: "r"(ofw_sprg0_save)); > #endif > } > #endif > > > > Note: The following file's change is actually for > !defined(__powerpc64__) added code . . . > > # svnlite diff /usr/src/sys/powerpc/aim/mmu_oea64.c > Index: /usr/src/sys/powerpc/aim/mmu_oea64.c > =================================================================== > --- /usr/src/sys/powerpc/aim/mmu_oea64.c (revision 333575) > +++ /usr/src/sys/powerpc/aim/mmu_oea64.c (working copy) > @@ -1820,6 +1820,18 @@ > PV_PAGE_UNLOCK(m); > } > > +#if defined(AIM) && !defined(__powerpc64__) > +// > +// Part of PowerMac G5 HACK FOR PROBLEM FINDING. . . > +// (G5 used via 32-bit FreeBSD.) > +// > + > +extern char _GOT_START_[]; // beginning of .got/.got.plt > +extern char _GOT_END_[]; // ending of .got/.got.plt > + > +extern vm_offset_t __startkernel, __endkernel; > +#endif > + > /* > * Map a wired page into kernel virtual address space. > */ > @@ -1830,6 +1842,52 @@ > struct pvo_entry *pvo, *oldpvo; > > pvo = alloc_pvo_entry(0); > +#if defined(AIM) && !defined(__powerpc64__) > + // > + // PowerMac G5 HACK FOR PROBLEM FINDING. . . > + // (G5 used via 32-bit FreeBSD.) > + // > + // As a problem-finding-aid try to catch some examples of > + // jumping to non-code in the kernel before it tries to > + // execute that that code. Hopefully this will show where > + // the bad jump into the likes of the .hash section is > + // happening. (dbb bt and vmcore.*'s have not lead to > + // that information so far.) > + // > + if (cpu_features & PPC_FEATURE_64) > + { > + // First deal with pages that should have the original > + // VM_PROT_EXECUTE status for something on the page > + // (most pages in the kernel area). So pages with some > + // byte(s) from .text, .got, or .got.plt, along with > + // any requested from before where __startkernel > + // indicates. Also any va requested from a page > + // containing where __endkernel indicates or later > + // gets VM_PROT_EXECUTE if such a va is requested. > + // > + // So: have just the rest of the kernel area not have > + // VM_PROT_EXECUTE status in hopes that it will report > + // where the code is that is making bad jumps to > + // non-code, such as jumping into the .hash section > + // instead of reporting on illegal instructions > + // from the incorrect traget area. > + // > + if ( va < ((vm_offset_t)(etext+(PAGE_SIZE-1)) & ~PAGE_MASK) ) > + pvo->pvo_pte.prot = VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE; > + > + else if ( ((vm_offset_t)_GOT_START_ & ~PAGE_MASK) <= va > + && va < ((vm_offset_t)(_GOT_END_+(PAGE_SIZE-1)) & ~PAGE_MASK) > + ) > + pvo->pvo_pte.prot = VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE; > + > + else if ( va < (__endkernel & ~PAGE_MASK) ) > + pvo->pvo_pte.prot = VM_PROT_READ | VM_PROT_WRITE; > + > + else // Otherwise do as before the HACK: > + pvo->pvo_pte.prot = VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE; > + } > + else > +#endif > pvo->pvo_pte.prot = VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE; > pvo->pvo_pte.pa = (pa & ~ADDR_POFF) | moea64_calc_wimg(pa, ma); > pvo->pvo_vaddr |= PVO_WIRED; > > > > Note: The following should not matter because it is only for > devel/powerpc64-gcc but gcc 4.2.1 and system clang6 got the > same result: > > # svnlite diff /usr/ports/devel/powerpc64-gcc/Makefile > Index: /usr/ports/devel/powerpc64-gcc/Makefile > =================================================================== > --- /usr/ports/devel/powerpc64-gcc/Makefile (revision 469767) > +++ /usr/ports/devel/powerpc64-gcc/Makefile (working copy) > @@ -2,7 +2,7 @@ > > PORTNAME= gcc > PORTVERSION= 6.3.0 > -PORTREVISION= 5 > +PORTREVISION= 6 > CATEGORIES= devel > MASTER_SITES= GCC/releases/gcc-${DISTVERSION} > PKGNAMEPREFIX?= powerpc64- > @@ -42,6 +42,7 @@ > GNU_CONFIGURE= yes > CONFIGURE_OUTSOURCE= yes > CONFIGURE_ARGS+=--target=${GCC_TARGET} --disable-nls --enable-languages=c,c++ \ > + --enable-gnu-indirect-function \ > --without-headers \ > --with-gmp=${LOCALBASE} \ > --with-pkgversion="FreeBSD Ports Collection for ${PKGNAMEPREFIX:C/-//g}" \ > @@ -104,6 +105,6 @@ > > # This port and all its slave ports fail on aarch64 -- but not all > # the same way. Provide this definition for the master. > -BROKEN_aarch64?= fails to package > +#BROKEN_aarch64?= fails to package > > .include <bsd.port.post.mk> > > > === > Mark Millard > marklmi26-fbsd at yahoo.com > ( dsl-only.net went > away in early 2018-Mar) > > > > > > > _______________________________________________ > freebsd-ppc@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-ppc > To unsubscribe, send any mail to "freebsd-ppc-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1c62913a-0caa-aa6e-b0b6-97c338aa50c7>