RFR (M): 8036767 PPC64: Support for little endian execution model
david.holmes at oracle.com
Fri Feb 27 02:04:02 UTC 2015
On 27/02/2015 11:25 AM, Andrew Hughes wrote:
> ----- Original Message -----
>> 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:
>>>>>>> (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.
>> 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
> + # 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
>> 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
> 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! ???
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.
> 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.
>> 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
More information about the hotspot-dev