Date: Sat, 3 Dec 2016 20:35:50 -0800 From: Mark Millard <markmi@dsl-only.net> To: Justin Hibbits <chmeeedalf@gmail.com> Cc: FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org> Subject: clang 3.9.0 buildkernel on old powerpc64's vs. trying to build hwpmc_e500.o and the like. . . Message-ID: <300CB7A2-34BB-407F-B2E9-D263B119A989@dsl-only.net>
next in thread | raw e-mail | index | archive | help
[Note: At present I can buildworld using WITH_LIB32=3D on powerpc64 for TARGET_ARCH=3Dpowerpc64 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=3D ) 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 =3D mfpmr(PMR_PMGC0); ^ ./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr' __asm __volatile("mfpmr %0,%1" : "=3Dr"(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.pd= f ) > 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=3D214903 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=3D discovery). =3D=3D=3D Mark Millard markmi at dsl-only.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?300CB7A2-34BB-407F-B2E9-D263B119A989>