Skip site navigation (1)Skip section navigation (2)
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>