diff -r 13588c901957 -r 9cf78a70fa4f src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/MetadataBuilder.java --- a/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/MetadataBuilder.java Thu Oct 17 20:27:44 2019 +0100 +++ b/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/MetadataBuilder.java Thu Oct 17 20:53:35 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,16 +25,20 @@ package jdk.tools.jaotc; +import static jdk.tools.jaotc.AOTCompiledClass.getType; +import static jdk.tools.jaotc.AOTCompiledClass.metadataName; + import java.util.ArrayList; import java.util.List; +import org.graalvm.compiler.code.CompilationResult; +import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider; +import org.graalvm.compiler.hotspot.HotSpotGraalServices; + import jdk.tools.jaotc.binformat.BinaryContainer; import jdk.tools.jaotc.binformat.ByteContainer; import jdk.tools.jaotc.binformat.GotSymbol; import jdk.tools.jaotc.utils.NativeOrderOutputStream; -import org.graalvm.compiler.code.CompilationResult; -import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider; - import jdk.vm.ci.code.StackSlot; import jdk.vm.ci.code.site.DataPatch; import jdk.vm.ci.code.site.Infopoint; @@ -42,9 +46,6 @@ import jdk.vm.ci.hotspot.HotSpotCompiledCode; import jdk.vm.ci.hotspot.HotSpotMetaData; -import static jdk.tools.jaotc.AOTCompiledClass.getType; -import static jdk.tools.jaotc.AOTCompiledClass.metadataName; - final class MetadataBuilder { private final DataBuilder dataBuilder; @@ -97,6 +98,7 @@ byte[] scopeDesc = metaData.scopesDescBytes(); byte[] relocationInfo = metaData.relocBytes(); byte[] oopMapInfo = metaData.oopMaps(); + byte[] implicitExceptionBytes = HotSpotGraalServices.getImplicitExceptionBytes(metaData); // create a global symbol at this position for this method NativeOrderOutputStream metadataStream = new NativeOrderOutputStream(); @@ -141,6 +143,10 @@ NativeOrderOutputStream.PatchableInt scopeOffset = metadataStream.patchableInt(); NativeOrderOutputStream.PatchableInt relocationOffset = metadataStream.patchableInt(); NativeOrderOutputStream.PatchableInt exceptionOffset = metadataStream.patchableInt(); + NativeOrderOutputStream.PatchableInt implictTableOffset = null; + if (implicitExceptionBytes != null) { + implictTableOffset = metadataStream.patchableInt(); + } NativeOrderOutputStream.PatchableInt oopMapOffset = metadataStream.patchableInt(); metadataStream.align(8); @@ -156,6 +162,11 @@ exceptionOffset.set(metadataStream.position()); metadataStream.put(metaData.exceptionBytes()).align(8); + if (implicitExceptionBytes != null) { + implictTableOffset.set(metadataStream.position()); + metadataStream.put(implicitExceptionBytes).align(8); + } + // oopmaps should be last oopMapOffset.set(metadataStream.position()); metadataStream.put(oopMapInfo).align(8);