Can you try to investigate why it dies? I am not convinced -mminimal-toc would result in a boot failure. I think the kernel would fail to link.
On Wed, Dec 07, 2016 at 09:52:47PM -0800, Mark Millard wrote: > Top post of a FYI [head -r309656 powerpc64 context]: > > I commented out the one -mminimal-toc use in the modules and tried > buildkernel again (cross build). > > It reached the end. But it dies immediately if I try to > boot it after installing a copy. > > This was based on: > > # svnlite diff /usr/src/sys/modules/zfs/Makefile > Index: /usr/src/sys/modules/zfs/Makefile > =================================================================== > --- /usr/src/sys/modules/zfs/Makefile (revision 309656) > +++ /usr/src/sys/modules/zfs/Makefile (working copy) > @@ -93,9 +93,9 @@ > CFLAGS+=-I${SUNW}/common > CFLAGS+=-DBUILDING_ZFS > > -.if ${MACHINE_ARCH} == "powerpc64" > -CFLAGS+=-mminimal-toc > -.endif > +#.if ${MACHINE_ARCH} == "powerpc64" > +#CFLAGS+=-mminimal-toc > +#.endif > > .ifdef ZFS_DEBUG > CFLAGS+=-DDEBUG=1 > > as well as your .td file patch. > > zfs is not in use in the configuration: it just > uses ufs. > > I'll note that I had avoided 2.47 binutils variants > based on reported issues in powerpc land (not that > I know the details or the powerpc64 vs. powerpc vs. > both status of the issues). > > > > === > Mark Millard > markmi at dsl-only.net > > On 2016-Dec-7, at 4:11 PM, Mark Millard <mar...@dsl-only.net> wrote: > > On 2016-Dec-7, at 11:00 AM, Roman Divacky <rdivacky at vlakno.cz> wrote: > > > Can the compiler you built with the patch process this file: > > > > typedef int register_t; > > #define mtpmr(reg, val) \ > > __asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val)) > > #define mfpmr(reg) \ > > ( { register_t val; \ > > __asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg)); \ > > val; } ) > > > > #define PMR_PMC0 16 > > > > int foo() > > { > > return mfpmr(PMR_PMC0); > > } > > > > > > I can compile it just fine locally. Not sure why it wouldnt work in your > > case. > > I separately had helped with testing for bugzilla 214902 > and so had updated to head -r309656 so the context was > different. > > But I figured out the .td file related issue on powerpc64. > > My means of forcing all the compiles that target powerpc64 > to use -B to pick up the alternate toolchain (since the > bootstrap binutils ld can fail) also forced the system > compiler to be used instead of the bootstrapped clang. > (The SRC_CONF_ENV file that I used had the text that > forced this.) > > So my buildkernel was using an unpatched compiler when > I tried kernel-toolchain then buildkernel. > > This was visible in the .meta file part of my report on the > problem. It showed: > > > CMD /usr/bin/clang -B /usr/local/powerpc64-freebsd/bin/ > > > instead of having the path to the bootstrap compiler. > > It turns out that my amd64 cross build SRC_CONF_ENV file > also had remnants of an experiment that also happened to > force the system compiler to be used so it would have got > the same behavior. > > Based on use of compilers that actually have your > patch in them. . . > > Your patch worked fine to let the buildkernel reach > the next problem: use of -mminimial-toc in a kernel > module is made but is rejected for powerpc64. > > Sorry for the extra noise in reporting on your patch. > > > Trying to find new things to report (future problems) > by working around existing problems that are known but > unfixed tends to have these sorts of interferences. Of > course sometimes my workarounds might not be the best > ones available. > > This stupid mistake is probably what is going on in > at least one bugzilla report that I submitted: So > I've likely got more to clean up. > > === > Mark Millard > markmi at dsl-only.net > > Older material. . . > > On Mon, Dec 05, 2016 at 05:42:28PM -0800, Mark Millard wrote: > > On 2016-Dec-5, at 5:16 PM, Mark Millard <markmi at dsl-only.net> wrote: > > > >> Well it looks like: > >> > >> WITHOUT_CROSS_COMPILER= > >> WITH_SYSTEM_COMPILER= > >> > >> ignores the .td file change but > >> > >> WITH_CROSS_COMPILER= > >> WITHOUT_SYSTEM_COMPILER= > >> > >> may use it. > >> > >> I had accidentally used a SRC_CONF_ENV file that > >> was of the first form. > >> > >> So I've got a build going based on the 2nd form. . . > > > > No such luck: same type of failure at the same point. > > > > === > > Mark Millard > > markmi at dsl-only.net > > > > On 2016-Dec-5, at 4:05 PM, Mark Millard <markmi at dsl-only.net> wrote: > > > > On 2016-Dec-5, at 8:19 AM, Roman Divacky <rdivacky at vlakno.cz> wrote: > > > >> Can you try this patch? > >> > >> Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td > >> =================================================================== > >> --- llvm/lib/Target/PowerPC/PPCInstrInfo.td (revision 288675) > >> +++ llvm/lib/Target/PowerPC/PPCInstrInfo.td (working copy) > >> @@ -2373,6 +2373,12 @@ > >> def MFTB : XFXForm_1<31, 371, (outs gprc:$RT), (ins i32imm:$SPR), > >> "mftb $RT, $SPR", IIC_SprMFTB>; > >> > >> +def MFPMR : XFXForm_1<31, 334, (outs gprc:$RT), (ins i32imm:$PMRN), > >> + "mfpmr $RT, $PMRN", IIC_IntGeneral>; > >> + > >> +def MTPMR : XFXForm_1<31, 462, (outs), (ins i32imm:$PMRN, gprc:$RS), > >> + "mtpmr $PMRN, $RS", IIC_IntGeneral>; > >> + > >> // A pseudo-instruction used to implement the read of the 64-bit cycle > >> counter > >> // on a 32-bit target. > >> let hasSideEffects = 1, usesCustomInserter = 1 in > > > > Direct use of the patch (put into a file) was rejected: > > > > # patch -p0 < llvmPPCInstrInfo_td.patch > > Hmm... Looks like a unified diff to me... > > The text leading up to this was: > > -------------------------- > > |Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td > > |=================================================================== > > |--- llvm/lib/Target/PowerPC/PPCInstrInfo.td (revision 288675) > > |+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td (working copy) > > -------------------------- > > Patching file llvm/lib/Target/PowerPC/PPCInstrInfo.td using Plan A... > > patch: **** malformed patch at line 6: def MFTB : XFXForm_1<31, 371, (outs > > gprc:$RT), (ins i32imm:$SPR), > > > > So I hand put in the extra lines. > > > > I'll note that in llvm/lib/Target/PowerPC/PPCInstrInfo.td -r309124 > > the MFTB line is at line number 2300 while your patch listed: > > > > @@ -2373,6 +2373,12 @@ > > > > My edit shows as: > > > > # svnlite diff contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td > > Index: contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td > > =================================================================== > > --- contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td (revision 309179) > > +++ contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td (working copy) > > @@ -2300,6 +2300,12 @@ > > def MFTB : XFXForm_1<31, 371, (outs gprc:$RT), (ins i32imm:$SPR), > > "mftb $RT, $SPR", IIC_SprMFTB>; > > > > +def MFPMR : XFXForm_1<31, 334, (outs gprc:$RT), (ins i32imm:$PMRN), > > + "mfpmr $RT, $PMRN", IIC_IntGeneral>; > > + > > +def MTPMR : XFXForm_1<31, 462, (outs), (ins i32imm:$PMRN, gprc:$RS), > > + "mtpmr $PMRN, $RS", IIC_IntGeneral>; > > + > > // A pseudo-instruction used to implement the read of the 64-bit cycle > > counter > > // on a 32-bit target. > > let hasSideEffects = 1, usesCustomInserter = 1 in > > > > > > Unfortunately the buildkernel still gets the same errors: > > (This was tried after a kernel-toolchain .) > > > > # Meta data file > > /usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/sys/GENERIC64vtsc-NODBG/modules/usr/src/sys/modules/hwpmc/hwpmc_e500.o.meta > > CMD /usr/bin/clang -B /usr/local/powerpc64-freebsd/bin/ -target > > powerpc64-unknown-freebsd12.0 > > --sysroot=/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/tmp > > -B/usr/local/powerpc64-freebsd/bin/ -O2 -pipe -fno-strict-aliasing > > -D_KERNEL -DKLD_MODULE -nostdinc -DHAVE_KERNEL_OPTION_HEADERS -include > > /usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/sys/GENERIC64vtsc-NODBG/opt_global.h > > -I. -I/usr/src/sys -fno-common -g -fno-omit-frame-pointer > > -I/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/sys/GENERIC64vtsc-NODBG > > -mno-altivec -ffreestanding -fwrapv -fstack-protector -gdwarf-2 -Wall > > -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes > > -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign > > -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs > > -fdiagnostics-show-option -Wno-unknown-pragmas > > -Wno-error-tautological-compare -Wno-error-empty-body > > -Wno-error-parentheses-equality -Wn o-e > > rror-unused-function -Wno-error-pointer-sign > > -Wno-error-shift-negative-value -msoft-float -std=iso9899:1999 -c > > /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c -o hwpmc_e500.o > > CMD ctfconvert -L VERSION -g hwpmc_e500.o > > CWD > > /usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/sys/GENERIC64vtsc-NODBG/modules/usr/src/sys/modules/hwpmc > > TARGET hwpmc_e500.o > > -- command output -- > > /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:475:19: error: > > unrecognized instruction mnemonic > > uint32_t pmgc0 = mfpmr(PMR_PMGC0); > > ^ > > ./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr' > > __asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg)); \ > > ^ > > <inline asm>:1:2: note: instantiated into assembly here > > mfpmr 3,400 > > ^ > > /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:478:2: error: > > unrecognized instruction mnemonic > > mtpmr(PMR_PMGC0, pmgc0); > > ^ > > ./machine/pmc_mdep.h:21:19: note: expanded from macro 'mtpmr' > > __asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val)) > > ^ > > <inline asm>:1:2: note: instantiated into assembly here > > mtpmr 400,3 > > ^ > > /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:446:2: error: > > unrecognized instruction mnemonic > > mtpmr(PMR_PMGC0, PMGC_FAC | PMGC_PMIE | PMGC_FCECE); > > ^ > > ./machine/pmc_mdep.h:21:19: note: expanded from macro 'mtpmr' > > __asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val)) > > ^ > > <inline asm>:1:2: note: instantiated into assembly here > > mtpmr 400,3 > > ^ > > /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:408:14: error: > > unrecognized instruction mnemonic > > pmc_pmlc = mfpmr(PMR_PMLCa0); > > ^ > > ./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr' > > __asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg)); \ > > ^ > > <inline asm>:1:2: note: instantiated into assembly here > > mfpmr 10,144 > > ^ > > . . . > > > > > > === > > Mark Millard > > markmi at dsl-only.net > > > > Older content: > > > > On Sat, Dec 03, 2016 at 08:35:50PM -0800, Mark Millard wrote: > >> [Note: At present I can buildworld using WITH_LIB32= on > >> powerpc64 for TARGET_ARCH=powerpc64 via clang 3.9.0 from a > >> minor variant of head -r309179 . That does not work for > >> amd64 cross compiling to powerpc64 due to assembler > >> notation rejections.] > >> > >> When I attempt to buildkernel (with WERROR= ) via FreeBSD's > >> clang 3.9.0 I get the following sorts of error > >> reports, *even building on powerpc64* : > >> > >> --- hwpmc_e500.o --- > >> /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:475:19: error: > >> unrecognized instruction mnemonic > >> uint32_t pmgc0 = mfpmr(PMR_PMGC0); > >> ^ > >> ./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr' > >> __asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg)); \ > >> ^ > >> <inline asm>:1:2: note: instantiated into assembly here > >> mfpmr 3,400 > >> ^ > >> . . . > >> > >> When I look up these instructions I find that they are not > >> classic powerpc instructions: > >> ( > >> http://www.nxp.com/assets/documents/data/en/white-papers/POWRPCARCPRMRM.pdf > >> ) > >> > >>> Whereas the classic architecture defines special-purpose registers (SPRs) > >>> and > >>> two instructions to access them (Move to Special-Purpose Register (mtspr) > >>> and > >>> Move from Special-Purpose Register (mfspr)), Book E takes that model and > >>> defines > >>> optional device control registers (DCRs) and mtdcr and mfdcr > >>> instructions, and > >>> the EIS-defined performance monitor APU defines performance monitor > >>> registers > >>> (PMRs) and mtpmr and mfpmr instructions, all based on models provided by > >>> the > >>> UISA. > >> > >> . . . > >> > >> Does this imply that clang 3.9.0 needs to support more instructions when > >> it is targeting FreeBSD for GENERIC64 based builds? (I include GENERIC64 > >> and then override some items for my build activity.) > >> > >> If yes, then someone probably needs to make a list of what instructions > >> need to be present and have someone submit the list into llvm's bugzilla > >> and have the submittal listed in: > >> > >> [META] Using Clang as the FreeBSD/ppc system compiler > >> > >> (25780). > >> > >> > >> If GENERIC64 does not need the likes of hwpmc_e500.o built then some > >> work on the build environment to avoid GENERIC64 including things with > >> non-classic instruction use would appear to be needed. (No llvm > >> involvement for this case.) I doubt this is the case as it would > >> seem that the problem would reoccur when alternate KERNCONF's were > >> in use instead that do require something like of hwpmc_e500.o to be > >> built. > >> > >> > >> Note: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214903 is about > >> this issue from the FreeBSD side of things. I just noticed the status > >> of the specific instructions involved and also that the cross-build > >> and on-powerpc64 build get the same result (unlike the recent > >> WITH_LIB32= discovery). > >> > >> === > >> Mark Millard > >> markmi at dsl-only.net > > > > > > _______________________________________________ > > freebsd-...@freebsd.org mailing list > > https://lists.freebsd.org/mailman/listinfo/freebsd-ppc > > To unsubscribe, send any mail to "freebsd-ppc-unsubscr...@freebsd.org" _______________________________________________ freebsd-toolchain@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"