src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/JavaCallSiteRelocationSymbol.java
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File
*** old/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/JavaCallSiteRelocationSymbol.java	Tue Aug 22 11:46:52 2017
--- new/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/JavaCallSiteRelocationSymbol.java	Tue Aug 22 11:46:52 2017

*** 1,7 **** --- 1,7 ---- /* ! * Copyright (c) 2016, 2017, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 23,33 **** --- 23,33 ---- package jdk.tools.jaotc; import jdk.tools.jaotc.binformat.BinaryContainer; import jdk.tools.jaotc.binformat.Symbol; - import jdk.tools.jaotc.CompiledMethodInfo.StubInformation; import jdk.vm.ci.code.site.Call; import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; /**
*** 38,48 **** --- 38,48 ---- private static final byte[] zeroSlot = new byte[8]; // -1 represents Universe::non_oop_word() value private static final byte[] minusOneSlot = {-1, -1, -1, -1, -1, -1, -1, -1}; - public JavaCallSiteRelocationSymbol(CompiledMethodInfo mi, Call call, CallSiteRelocationInfo callSiteRelocation, BinaryContainer binaryContainer) { super(createPltEntrySymbol(binaryContainer, mi, call, callSiteRelocation)); StubInformation stub = getStub(mi, call); addRelocations(mi, stub, binaryContainer, call, callSiteRelocation); }
*** 59,77 **** --- 59,77 ---- return createCodeContainerSymbol(binaryContainer, symbolName, stub.getOffset()); } private static StubInformation getStub(CompiledMethodInfo mi, Call call) { HotSpotResolvedJavaMethod callTarget = (HotSpotResolvedJavaMethod) call.target; ! String callTargetSymbol = MiscUtils.uniqueMethodName(callTarget) + ".at." + call.pcOffset; ! String callTargetSymbol = JavaMethodInfo.uniqueMethodName(callTarget) + ".at." + call.pcOffset; return mi.getStubFor(callTargetSymbol); } /** * Add all the required relocations. */ private static void addRelocations(CompiledMethodInfo mi, StubInformation stub, BinaryContainer binaryContainer, Call call, CallSiteRelocationInfo callSiteRelocation) { ! final boolean isVirtualCall = MiscUtils.isVirtualCall(mi, call); ! final boolean isVirtualCall = CallInfo.isVirtualCall(mi, call); final int gotStartOffset = binaryContainer.appendExtLinkageGotBytes(zeroSlot, 0, zeroSlot.length); if (isVirtualCall) { // Nothing. } else {
*** 80,90 **** --- 80,90 ---- } // Add relocation to GOT cell for call resolution jump. // This GOT cell will be initialized during JVM startup with address // of JVM runtime call resolution function. - String gotSymbolName = "got." + getResolveSymbolName(binaryContainer, mi, call); Symbol gotSymbol = binaryContainer.getGotSymbol(gotSymbolName); addExternalPltToGotRelocation(binaryContainer, gotSymbol, stub.getResolveJumpOffset()); // Add relocation to resolve call jump instruction address for GOT cell. // This GOT cell will be initialized with address of resolution jump instruction and
*** 119,138 **** --- 119,138 ---- } /** * Returns the name of the resolve method for this particular call. */ - private static String getResolveSymbolName(BinaryContainer binaryContainer, CompiledMethodInfo mi, Call call) { String resolveSymbolName; ! if (MiscUtils.isStaticCall(call)) { ! resolveSymbolName = binaryContainer.getResolveStaticEntrySymbolName(); ! } else if (MiscUtils.isSpecialCall(call)) { ! resolveSymbolName = binaryContainer.getResolveOptVirtualEntrySymbolName(); ! } else if (MiscUtils.isOptVirtualCall(mi, call)) { ! resolveSymbolName = binaryContainer.getResolveOptVirtualEntrySymbolName(); ! } else if (MiscUtils.isVirtualCall(mi, call)) { ! resolveSymbolName = binaryContainer.getResolveVirtualEntrySymbolName(); ! if (CallInfo.isStaticCall(call)) { ! resolveSymbolName = BinaryContainer.getResolveStaticEntrySymbolName(); ! } else if (CallInfo.isSpecialCall(call)) { ! resolveSymbolName = BinaryContainer.getResolveOptVirtualEntrySymbolName(); ! } else if (CallInfo.isOptVirtualCall(mi, call)) { ! resolveSymbolName = BinaryContainer.getResolveOptVirtualEntrySymbolName(); ! } else if (CallInfo.isVirtualCall(mi, call)) { ! resolveSymbolName = BinaryContainer.getResolveVirtualEntrySymbolName(); } else { throw new InternalError("Unknown call type in " + mi.asTag() + " @ " + call.pcOffset + " for call" + call.target); } return resolveSymbolName; }

src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/JavaCallSiteRelocationSymbol.java
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File