On 2015-11-30 05:23, David Holmes wrote:
Hi Sasha,
Trying to trace through this is somewhat complex :)
So ...
At the top level if we see ppc64le then we set VAR_CPU to ppc64le
instead of ppc64. However, once we get into hotspot build we want ARCH
to be ppc64 again (in hotspot-spec.gmk.in) - why is that?
Inside hotpot we want:
SRCARCH := ppc
BUILDARCH := ppc64
LIBARCH := ppc64le
right? So can ARCH not be ppc64le from the top-level and then we
adjust SRCARCH and BUILDARCH? And avoid the top-level changes to ARCH.
More comments below ...
On 30/11/2015 12:39 PM, Alexander Smundak wrote:
Please review the patch set that fixes
https://bugs.openjdk.java.net/browse/JDK-8073139: PPC64: User-visible
arch directory and os.arch value on ppc64le cause issues with Java
tooling:
http://cr.openjdk.java.net/~asmundak/8073139/hotspot/webrev.02
agent/src/os/linux/LinuxDebuggerLocal.c
agent/src/os/linux/libproc.h
Is it not the case that ppc64le -> ppc64, so that we can avoid "if
defined(ppc64) | defined(ppc64le) ? I would hope that the only places
in the sources where you need to check for ppc64le is where that code
differs from the ppc64 code.
---
make/defs.make
See above discussion re ARCH etc.
---
src/share/vm/runtime/vm_version.cpp
I think this messy code block relates to builds where CPU is not set -
which should never be the case these days. Maybe just put in a check
"ifndef CPU -> error" ?
I agree. There might be a case for handling zero, though. If I remember
correctly the hotspot build might not set CPU, or set it incorrectly,
when building zero. (Then again, zero is a strange beast, a mix between
a variant and a platform...)
http://cr.openjdk.java.net/~asmundak/8073139/jdk/webrev.02
No comments.
http://cr.openjdk.java.net/~asmundak/8073139/root/webrev.02
Again referring back to earlier ARCH discussion, I don't like seeing
the platform specific code in hotspot-spec.gmk.in.
I agree. No logic in the spec files, if it can at all be avoided.
I also think something's very weird here. OPENJDK_TARGET_CPU_ARCH is
defined to ppc for both ppc64 and the new ppc64le platform, that it, it
explicitely excludes address size. I think it's reasonable that it
excludes endianness as well, but we have not really had to make that
discussion before. In any case, it should not contain "64", otherwise
the value will be "ppc" for ppc64 and "ppc64le" for ppc64le, and that's
just plain wrong.
I'm not sure what would be the proper way to solve this, but as a start,
I'm not sure you need to really change any of the defines used to build
hotspot, as long as the build is correct. Instead, if you need to update
os.arch, maybe you should just add a check for endianness if you're
running on ppc64 where os.arch is set?
/Magnus
Thanks,
David
The patch is based on the patch by Andrew Hughes
(gnu.and...@redhat.com),
please see the thread
http://mail.openjdk.java.net/pipermail/hotspot-dev/2015-February/017148.html
The current patch set adds the changes to show the correct
architecture in the
'java -Xinternalversion' output and test_env.sh (both pointed by
goetz.lindenma...@sap.com), and fixes Serviceability Agent and
disassembler (hsdis).
I need a sponsor.
Sasha