On 01/12/20 04:03 PM, Gary Mills wrote:
I'm attempting to build openjdk-8-162 with gcc-6 on SPARC hardware. I
finally got a successful gmake build, but a failure with gmake
install. The error was this one:
Error occurred during initialization of VM
java.lang.StackOverflowError
at java.lang.Object.<clinit>(Object.java:41)
All newly-build java applications produce the same error. With a
search on the web, I found exactly the same error for linux. The bug
apparently affected all architectures except x86. It appeared because
of increased optimization in later versions of gcc. This is the linux
patch:
diff --git a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
--- jdk8/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+++ jdk8/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
@@ -55,8 +55,8 @@
#include "utilities/vmError.hpp"
address os::current_stack_pointer() {
- address dummy = (address) &dummy;
- return dummy;
+ // return the address of the current function
+ return (address)__builtin_frame_address(0);
}
frame os::get_sender_for_C_frame(frame* fr) {
This, of course, has no effect on OI. During the build, OI is
detected as solaris. The equivalent function for solaris-sparc, in
openjdk/hotspot/src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp,
has this code:
address os::current_stack_pointer() {
volatile int dummy;
address sp = (address)&dummy + 8; // %%%% need to confirm if this is
right
return sp;
}
I assume that it's also compiled incorrectly because of the increased
optimization, but I don't know how to correct it. I'm also concerned
about the comment. Is it right?
Has anybody else built openjdk for SPARC with gcc? How did you fix
this bug?
Does building with lesser optimization level than the present one make
the problem go away? Look for 'gcc_OPT' in make-rules/shared-macros.mk
and use it in the component's Makefile.
Michal
_______________________________________________
oi-dev mailing list
oi-dev@openindiana.org
https://openindiana.org/mailman/listinfo/oi-dev