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