[oe] [meta-java][PATCH 2/2] openjdk-8: better interface invocations
Attie Grande
attie.grande at argentum-systems.co.uk
Mon Dec 17 14:07:36 UTC 2018
Hi Richard,
It looks like gmail has helpfully wrapped some of the lines...
Also, my patch was intended to go on top of the sumo branch - apologies.
It looks like you've bumped to 172b11 on master-next already.
I'll try this and report back - possibly in the new year...
Some crashes are available here:
- https://pastebin.com/raw/f1PB4uJm
- https://pastebin.com/raw/iXTz8v9z
Attie
On Mon, 17 Dec 2018 at 13:55, Richard Leitner
<richard.leitner at skidata.com> wrote:
>
> Hi,
> thanks for the patch. Nonetheless this patch doesn't apply neither to master nor to master-next.
> Please take a look at it. Thanks!
>
> regards;Richard.L
>
> On 30.11.18 14:10, Attie Grande wrote:
> > Fixes a SEGFAULT when OpenJDK 8 is build for an i.MX6 platform, possibly
> > others.
>
> Do you have any logs of these segfaults?
> I have no issues during my i.MX6 builds. What libc are you using?
>
> >
> > The original patch (below) has been modified to work with jdk8.
> >
> > Further information:
> > https://bugs.openjdk.java.net/browse/JDK-8194739
> > http://hg.openjdk.java.net/jdk/jdk10/rev/69d1a1590485
> >
> > Signed-off-by: Attie Grande <attie.grande at argentum-systems.co.uk>
> > ---
> > recipes-core/openjdk/openjdk-8-release-16xbyy.inc | 1 +
> > .../JDK-8194739-better-interface-invocations.patch | 62 ++++++++++++++++++++++
> > 2 files changed, 63 insertions(+)
> > create mode 100644
> > recipes-core/openjdk/patches-openjdk-8/JDK-8194739-better-interface-invocations.patch
> >
> > diff --git a/recipes-core/openjdk/openjdk-8-release-16xbyy.inc
> > b/recipes-core/openjdk/openjdk-8-release-16xbyy.inc
> > index 23c99fe..b7cdede 100644
> > --- a/recipes-core/openjdk/openjdk-8-release-16xbyy.inc
> > +++ b/recipes-core/openjdk/openjdk-8-release-16xbyy.inc
> > @@ -17,6 +17,7 @@ PATCHES_URI = "\
> > file://0009-jdk-disable-backtrace-musl-build-fix.patch \
> > file://0010-build-fix-build-on-as-needed-toolchains-generic.patch \
> > file://JDK-8202600-undefined-behaviour-in-os_linux_zero.cpp.patch \
> > + file://JDK-8194739-better-interface-invocations.patch \
> > "
> > # some patches extracted from
> > http://cr.openjdk.java.net/~rkennke/shark-build-hotspot/webrev.01/hotspot.patch
> > # reported via
> > http://mail.openjdk.java.net/pipermail/build-dev/2015-January/013972.html
> > diff --git a/recipes-core/openjdk/patches-openjdk-8/JDK-8194739-better-interface-invocations.patch
> > b/recipes-core/openjdk/patches-openjdk-8/JDK-8194739-better-interface-invocations.patch
> > new file mode 100644
> > index 0000000..a185dac
> > --- /dev/null
> > +++ b/recipes-core/openjdk/patches-openjdk-8/JDK-8194739-better-interface-invocations.patch
> > @@ -0,0 +1,62 @@
> > +--- a/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp Tue Dec 19
> > 17:31:53 2017 -0500
> > ++++ b/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp Mon Jan 22
> > 15:19:02 2018 +0000
> > +@@ -180,3 +180,9 @@
> > + return NULL;
> > + }
> > + }
> > ++
> > ++#ifndef PRODUCT
> > ++void MethodHandles::trace_method_handle(MacroAssembler* _masm, const
> > char* adaptername) {
> > ++ // This is just a stub.
> > ++}
> > ++#endif //PRODUCT
> > +--- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Tue
> > Dec 19 17:31:53 2017 -0500
> > ++++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Mon
> > Jan 22 15:19:02 2018 +0000
> > +@@ -2569,13 +2569,35 @@
> > +
> > + // this could definitely be cleaned up QQQ
> > + Method* callee;
> > +- Klass* iclass = cache->f1_as_klass();
> > +- // InstanceKlass* interface = (InstanceKlass*) iclass;
> > ++ Method *interface_method = cache->f2_as_interface_method();
> > ++ InstanceKlass* iclass = interface_method->method_holder();
> > ++
> > + // get receiver
> > + int parms = cache->parameter_size();
> > + oop rcvr = STACK_OBJECT(-parms);
> > + CHECK_NULL(rcvr);
> > + InstanceKlass* int2 = (InstanceKlass*) rcvr->klass();
> > ++
> > ++ // Receiver subtype check against resolved interface klass (REFC).
> > ++ {
> > ++ Klass* refc = cache->f1_as_klass();
> > ++ itableOffsetEntry* scan;
> > ++ for (scan = (itableOffsetEntry*) int2->start_of_itable();
> > ++ scan->interface_klass() != NULL;
> > ++ scan++) {
> > ++ if (scan->interface_klass() == refc) {
> > ++ break;
> > ++ }
> > ++ }
> > ++ // Check that the entry is non-null. A null entry means
> > ++ // that the receiver class doesn't implement the
> > ++ // interface, and wasn't the same as when the caller was
> > ++ // compiled.
> > ++ if (scan->interface_klass() == NULL) {
> > ++ VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(),
> > "", note_no_trap);
> > ++ }
> > ++ }
> > ++
> > + itableOffsetEntry* ki = (itableOffsetEntry*) int2->start_of_itable();
> > + int i;
> > + for ( i = 0 ; i < int2->itable_length() ; i++, ki++ ) {
> > +@@ -2587,7 +2608,8 @@
> > + if (i == int2->itable_length()) {
> > + VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(),
> > "", note_no_trap);
> > + }
> > +- int mindex = cache->f2_as_index();
> > ++ int mindex = interface_method->itable_index();
> > ++
> > + itableMethodEntry* im = ki->first_method_entry(rcvr->klass());
> > + callee = im[mindex].method();
> > + if (callee == NULL) {
> >
More information about the Openembedded-devel
mailing list