RFR (M): 8036767 PPC64: Support for little endian execution model
gnu.andrew at redhat.com
Fri Feb 27 19:06:00 UTC 2015
----- Original Message -----
> On 27/02/2015 11:25 AM, Andrew Hughes wrote:
> > ----- Original Message -----
> >> <trimming>
> >> On 26/02/2015 12:31 PM, David Holmes wrote:
> >>> On 26/02/2015 2:57 AM, Andrew Hughes wrote:
> >>>>>>> These are the revised versions of the webrevs:
> >>>>>>> http://cr.openjdk.java.net/~andrew/rh1191652/webrev.02/root/
> >>>>>>> http://cr.openjdk.java.net/~andrew/rh1191652/webrev.02/jdk/
> >>>>>>> http://cr.openjdk.java.net/~andrew/rh1191652/webrev.02/hotspot/
> >>>>>>> (HotSpot is unchanged, dropped the sound changes from JDK)
> >>>> Ok if I push the jdk and root parts then? I think someone on the Oracle
> >>>> HS team (David?) needs to push the HotSpot bit.
> >>> Best to push it all together I think, which I can do through the hs-rt
> >>> forest. But first I need to see where things settled with all this :) I
> >>> was quite confused by some of the initial suggestions. Will try to get
> >>> to this today.
> > Well, I'd push it all myself if there weren't still restrictions on pushing
> > to HotSpot...
> >> I'm still very confused by these changes and have trouble tracking the
> >> values of the various "arch" related variables. If I follow this right
> >> presently the only distinction between ppc64 and ppc64le is the value of
> >> OPENJDK_TARGET_CPU_ENDIAN. In particular they both use ppc64 as the
> >> hotspot LIBARCH value and ppc as the ARCH value. (Aside: so ARCH/ppc64
> >> is either unused or only used by a hotspot-only build?)
> >> The desired change is that the top-level architecture (VAR_CPU which
> >> becomes OPENJDK_TARGET_CPU) should now be ppc64le not ppc64, but that
> >> for hotspot the only difference is LIBARCH becomes ppc64le. So to
> >> achieve this hotspot-spec.gmk switches ARCH to be ppc64 instead of the
> >> current ppc; and then hotspot's def.make uses that combined with being
> >> lttle-endian to reset the LIBARCH to ppc64le.
> > From ppc64le. Without the override in hotspot-spec.gmk, the HotSpot build
> > will get called with ARCH=ppc64le and fail, because make/defs.make will
> > set SRCARCH to x86
> No, ARCH comes from $(OPENJDK_TARGET_CPU_ARCH) which comes from
> $VAR_CPU_ARCH which is still ppc, not ppc64le. So SRCARCH will be set to
> ppc as per current code. Then BUILDARCH will check LP64 and so become
> ppc64. Then you can check endian-ness to define LIBARCH to ppc64le.
Ah, not in 8 where this was tested:
+# ppc64le uses the HotSpot ppc64 build
+ifeq ($(OPENJDK_TARGET_CPU), ppc64le)
OPENJDK_TARGET_CPU_LEGACY is set to OPENJDK_TARGET_CPU which is ppc64le in this case.
9 changed this with:
8046471: Use OPENJDK_TARGET_CPU_ARCH instead of legacy value for hotspot ARCH
So it looks like we're going to end up with three different patches for this issue.
> >> This all seems very convoluted! Why can you not simply check the value
> >> of BUILD_ARCH for ppc64 and then check the endianess to redefine
> >> LIBARCH? That way you don't need to change ARCH as set by
> >> hotspot-spec.gmk.
> > How is this different to what we are doing?
> Because it doesn't require the switcheroo in the hotspot-spec.gmk.in file
So yes, it's not needed on 9. ARCH will be passed to HotSpot as ppc there
and then BUILDARCH set to ppc64, then LIBARCH can be changed as:
ifeq ($(LIBARCH), ppc64)
ifeq ($(OPENJDK_TARGET_CPU_ENDIAN), little)
LIBARCH = ppc64le
I don't see this as a huge difference though, and now someone will need to
> > + # Override LIBARCH for ppc64le
> > + ifeq ($(ARCH), ppc64)
> > + ifeq ($(OPENJDK_TARGET_CPU_ENDIAN), little)
> > + LIBARCH = ppc64le
> > + endif
> > + endif
> > Right there; we're checking the endianness to redefine LIBARCH.
> Yes but you can do it based on the value of LIBARCH rather than a
> modified ARCH.
Yes, with 8046471 in place. Hardly a huge difference though.
> >> Does "uname -m" return ppc64le ? I'm unclear whether either your
> >> proposal or mine actually works correctly for a hotspot-only build. But
> >> maybe we just don't care about builds not done via configure any more.
> > It does. Different logic is employed for a configure build (which
> > sets various variables, including ARCH, in hotspot-spec.gmk) and
> > a HotSpot-only build which just use makefiles. If ARCH is not set
> > when we get to the HotSpot build, as in the latter, this block
> > in make/linux/makefiles/defs.make is used:
> > ifndef ARCH
> > ARCH := $(shell uname -m)
> > # Fold little endian PowerPC64 into big-endian (if ARCH is set in
> > # hotspot-spec.gmk, this will be done by the configure script).
> > ifeq ($(ARCH),ppc64le)
> > ARCH := ppc64
> > endif
> > endif
> > This was added as part of:
> > 8036767: PPC64: Support for little endian execution model
> I don't know if I already had this conversation but it strikes me as
> really bizarre that the PPC64 port uses two different ARCH values
> depending on whether it is a configure-based build or not! ???
It's not just that port. Every build either gets ARCH set by
hotspot-spec.gmk (by way of configure) or by uname -m in
make/linux/makefiles/defs.make. This is necessary if you're
going to allow someone to skip configure and just build HotSpot.
If no-one does that any more, then the old stuff that was needed
for 7 builds (no configure) could be culled.
> That aside if ARCH == ppc64 from uname then:
> - SRCARCH = ARCH/ppc64 = ppc
> - BUILDARCH = ppc64
> and so the same fix as above would work for this case.
It doesn't, as I said. It's ppc64le. So the uname override is necessary.
For consistency, it probably should now be overridden to be ppc, not
ppc64, given the value passed in from configure changed to that in
> > so our addition to hotspot-spec.gmk is just to do the same as this
> > block for configure builds.
> > It was unneeded before because configure would just set the arch
> > to ppc64 for the entire build, not just HotSpot.
> AFAICS it set it to ppc not ppc64.
I was referring to:
and in turn OPENJDK_TARGET_CPU_LEGACY, not VAR_CPU_ARCH/OPENJDK_TARGET_CPU_ARCH.
> >> Thanks,
> >> David
> >> Given the LIBARCH switcheroo that happens in hotspot/make/def.make, why
> >> bother also doing the switcheroo in
> >> <top>/common/autoconf/hotspot-spec.gmk.in when you could just do
> >> everything in hotspot/make/defs
> >>> David
> >>> -----
> >>>> Thanks,
Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)
PGP Key: ed25519/35964222 (hkp://keys.gnupg.net)
Fingerprint = 5132 579D D154 0ED2 3E04 C5A0 CFDA 0F9B 3596 4222
PGP Key: rsa4096/248BDC07 (hkp://keys.gnupg.net)
Fingerprint = EC5A 1F5E C0AD 1D15 8F1F 8F91 3B96 A578 248B DC07
More information about the hotspot-dev