Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Relocation Error Codes #14893

Merged
merged 8 commits into from
Apr 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 33 additions & 36 deletions runtime/compiler/control/CompilationThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2143,31 +2143,19 @@ bool TR::CompilationInfo::shouldRetryCompilation(TR_MethodToBeCompiled *entry, T
TR_PersistentJittedBodyInfo *bodyInfo;
switch (entry->_compErrCode)
{
case compilationAotValidateFieldFailure:
case compilationAotStaticFieldReloFailure:
case compilationAotClassReloFailure:
case compilationAotThunkReloFailure:
case compilationAotHasInvokehandle:
case compilationAotHasInvokeVarHandle:
case compilationAotPatchedCPConstant:
case compilationAotHasInvokeSpecialInterface:
case compilationAotValidateMethodExitFailure:
case compilationAotValidateMethodEnterFailure:
case compilationAotClassChainPersistenceFailure:
case compilationAotValidateStringCompressionFailure:
case compilationSymbolValidationManagerFailure:
case compilationAOTNoSupportForAOTFailure:
case compilationAOTValidateTMFailure:
case compilationAOTRelocationRecordGenerationFailure:
case compilationAotValidateExceptionHookFailure:
case compilationAotBlockFrequencyReloFailure:
case compilationAotRecompQueuedFlagReloFailure:
case compilationAOTValidateOSRFailure:
case compilationRelocationFailure:
// switch to JIT for these cases (we don't want to relocate again)
entry->_doNotUseAotCodeFromSharedCache = true;
tryCompilingAgain = true;
break;
//case compilationAotRelocationFailure:
case compilationAotTrampolineReloFailure:
case compilationAotPicTrampolineReloFailure:
case compilationAotCacheFullReloFailure:
Expand Down Expand Up @@ -6667,6 +6655,7 @@ TR::CompilationInfoPerThreadBase::installAotCachedMethod(

TR_MethodMetaData *metaData;
int32_t returnCode = 0;
TR_RelocationErrorCode reloErrorCode = TR_RelocationErrorCode::relocationOK;

if (_compInfo.getPersistentInfo()->isRuntimeInstrumentationEnabled())
{
Expand All @@ -6685,11 +6674,12 @@ TR::CompilationInfoPerThreadBase::installAotCachedMethod(
compilee);
setMetadata(metaData);
returnCode = reloRuntime()->returnCode();
reloErrorCode = reloRuntime()->getReloErrorCode();

if (TR::Options::getVerboseOption(TR_VerboseCompilationDispatch))
TR_VerboseLog::writeLineLocked(TR_Vlog_DISPATCH,
"prepareRelocateAOTCodeAndData results: j9method=%p metaData=%p returnCode=%d method=%s",
method, metaData, returnCode, compiler->signature());
"prepareRelocateAOTCodeAndData results: j9method=%p metaData=%p returnCode=%d reloErrorCode=%s method=%s",
method, metaData, returnCode, reloRuntime()->getReloErrorCodeName(reloErrorCode), compiler->signature());

if (_compInfo.getPersistentInfo()->isRuntimeInstrumentationEnabled())
{
Expand Down Expand Up @@ -6781,18 +6771,14 @@ TR::CompilationInfoPerThreadBase::installAotCachedMethod(
// fact that AOT methods are loaded at a lower count than when they were compiled so the JVM is given less opportunity to resolve things.
// The new hint tells us that a previous relocation failed a validation so specify a higher scount for the next run to give it more chance
// to resolve things.
switch (returnCode)
if (reloRuntime()->isValidationError(reloErrorCode))
dsouzai marked this conversation as resolved.
Show resolved Hide resolved
{
case compilationAotValidateFieldFailure:
case compilationAotStaticFieldReloFailure:
case compilationAotClassReloFailure:
if ((options->getInitialBCount() != 0) &&
(options->getInitialCount() != 0))
{
TR_J9SharedCache *sc = (TR_J9SharedCache *) (compiler->fej9()->sharedCache());
sc->addHint(method, TR_HintFailedValidation);
}
break;
if ((options->getInitialBCount() != 0) &&
(options->getInitialCount() != 0))
{
TR_J9SharedCache *sc = (TR_J9SharedCache *) (compiler->fej9()->sharedCache());
sc->addHint(method, TR_HintFailedValidation);
}
}
}
}
Expand Down Expand Up @@ -10187,10 +10173,11 @@ TR::CompilationInfo::compilationEnd(J9VMThread * vmThread, TR::IlGeneratorMethod
if (TR::Options::isAnyVerboseOptionSet(TR_VerboseCompileEnd, TR_VerbosePerformance, TR_VerboseCompFailure))
{
TR_VerboseLog::writeLineLocked(TR_Vlog_FAILURE,
"Failure while relocating for %s, return code = %d [%s]\n",
"Failure while relocating for %s, return code = %d [%s], relo error code = %s\n",
comp->signature(),
returnCode,
(returnCode >= 0) && (returnCode < compilationMaxError) ? compilationErrorNames[returnCode] : "unknown error");
(returnCode >= 0) && (returnCode < compilationMaxError) ? compilationErrorNames[returnCode] : "unknown error",
comp->reloRuntime()->getReloErrorCodeName(comp->reloRuntime()->getReloErrorCode()));
}
}
}
Expand Down Expand Up @@ -11114,7 +11101,7 @@ TR::CompilationInfoPerThreadBase::processException(
}

if (shouldProcessExceptionCommonTasks)
processExceptionCommonTasks(vmThread, scratchSegmentProvider, compiler, exceptionName);
processExceptionCommonTasks(vmThread, scratchSegmentProvider, compiler, exceptionName, _methodBeingCompiled);

TR::IlGeneratorMethodDetails & details = _methodBeingCompiled->getMethodDetails();
J9Method *method = details.getMethod();
Expand All @@ -11126,7 +11113,8 @@ TR::CompilationInfoPerThreadBase::processExceptionCommonTasks(
J9VMThread *vmThread,
TR::SegmentAllocator const &scratchSegmentProvider,
TR::Compilation * compiler,
const char *exceptionName
const char *exceptionName,
TR_MethodToBeCompiled *entry
)
{
PORT_ACCESS_FROM_JITCONFIG(_jitConfig);
Expand All @@ -11136,11 +11124,13 @@ TR::CompilationInfoPerThreadBase::processExceptionCommonTasks(
uintptr_t translationTime = j9time_usec_clock() - getTimeWhenCompStarted(); //get the time it took to fail the compilation

char compilationTypeString[15] = { 0 };
bool isProfiledComp = compiler->isProfilingCompilation();
bool isAOTComp = compiler->compileRelocatableCode() || entry->isAotLoad();
TR::snprintfNoTrunc(compilationTypeString, sizeof(compilationTypeString), "%s%s",
compiler->fej9()->isAOT_DEPRECATED_DO_NOT_USE() ? "AOT " : "",
compiler->isProfilingCompilation() ? "profiled " : "");
isAOTComp ? "AOT " : "",
isProfiledComp ? "profiled " : "");

const char *hotnessString = compiler->getHotnessName(compiler->getMethodHotness());
const char *hotnessString = entry->isAotLoad() ? "load" : compiler->getHotnessName(compiler->getMethodHotness());

TR_VerboseLog::CriticalSection vlogLock;
if (_methodBeingCompiled->_compErrCode != compilationFailure)
Expand All @@ -11152,7 +11142,7 @@ TR::CompilationInfoPerThreadBase::processExceptionCommonTasks(
}
else
{
TR_VerboseLog::write(TR_Vlog_COMPFAIL, "(%s%s) %s Q_SZ=%d Q_SZI=%d QW=%d j9m=%p time=%dus %s memLimit=%zu KB",
TR_VerboseLog::write(TR_Vlog_COMPFAIL, "(%s%s) %s Q_SZ=%d Q_SZI=%d QW=%d j9m=%p time=%dus %s",
compilationTypeString,
hotnessString,
compiler->signature(),
Expand All @@ -11161,8 +11151,15 @@ TR::CompilationInfoPerThreadBase::processExceptionCommonTasks(
_compInfo.getQueueWeight(),
_methodBeingCompiled->getMethodDetails().getMethod(),
translationTime,
compilationErrorNames[_methodBeingCompiled->_compErrCode],
scratchSegmentProvider.allocationLimit() >> 10);
compilationErrorNames[_methodBeingCompiled->_compErrCode]);
if (entry->isAotLoad())
{
TR_RelocationRuntime *reloRuntime = compiler->reloRuntime();
if (reloRuntime)
TR_VerboseLog::write(" (%s)", reloRuntime->getReloErrorCodeName(reloRuntime->getReloErrorCode()));
}
TR_VerboseLog::write(" memLimit=%zu KB", scratchSegmentProvider.allocationLimit() >> 10);

if (TR::Options::getVerboseOption(TR_VerbosePerformance))
{
bool incomplete;
Expand Down
3 changes: 2 additions & 1 deletion runtime/compiler/control/CompilationThread.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,8 @@ class CompilationInfoPerThreadBase
J9VMThread *vmThread,
TR::SegmentAllocator const &scratchSegmentProvider,
TR::Compilation * compiler,
const char *exceptionName);
const char *exceptionName,
TR_MethodToBeCompiled *entry);

#if defined(TR_HOST_S390)
void outputVerboseMMapEntry(
Expand Down
123 changes: 55 additions & 68 deletions runtime/compiler/control/rossa.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,76 +156,63 @@ TR::Monitor *vpMonitor = 0;


char *compilationErrorNames[]={
"compilationOK", // 0
"compilationFailure", // 1
"compilationRestrictionILNodes", // 2
"compilationRestrictionRecDepth", // 3
"compilationRestrictedMethod", // 4
"compilationExcessiveComplexity", // 5
"compilationNotNeeded", // 6
"compilationSuspended", // 7
"compilationExcessiveSize", // 8
"compilationInterrupted", // 9
"compilationMetaDataFailure", //10
"compilationInProgress", //11
"compilationCHTableCommitFailure",//12
"compilationMaxCallerIndexExceeded",//13
"compilationKilledByClassReplacement",//14
"compilationHeapLimitExceeded", //15
"compilationNeededAtHigherLevel", //16
"compilationAotValidateFieldFailure", //17
"compilationAotStaticFieldReloFailure", //18
"compilationAotClassReloFailure", //19
"compilationAotThunkReloFailure", //20
"compilationAotTrampolineReloFailure", //21
"compilationAotPicTrampolineReloFailure", //22
"compilationAotCacheFullReloFailure", //23
"compilationAotUnknownReloTypeFailure", //24
"compilationCodeReservationFailure", //25
"compilationAotHasInvokehandle", //26
"compilationTrampolineFailure", //27
"compilationRecoverableTrampolineFailure", // 28
"compilationIlGenFailure", // 29
"compilationIllegalCodeCacheSwitch", // 30
"compilationNullSubstituteCodeCache", // 31
"compilationCodeMemoryExhausted", // 32
"compilationGCRPatchFailure", // 33
"compilationAotValidateMethodExitFailure", // 34
"compilationAotValidateMethodEnterFailure", // 35
"compilationAotArrayClassReloFailure", // 36
"compilationLambdaEnforceScorching", // 37
"compilationInternalPointerExceedLimit", // 38
"compilationAotRelocationInterrupted", // 39
"compilationAotClassChainPersistenceFailure", // 40
"compilationLowPhysicalMemory", // 41
"compilationDataCacheError", // 42
"compilationCodeCacheError", // 43
"compilationRecoverableCodeCacheError", // 44
"compilationAotHasInvokeVarHandle", //45
"compilationAotValidateStringCompressionFailure", // 46
"compilationFSDHasInvokeHandle", //47
"compilationVirtualAddressExhaustion", //48
"compilationEnforceProfiling", //49
"compilationSymbolValidationManagerFailure", //50
"compilationAOTNoSupportForAOTFailure", //51
"compilationAOTValidateTMFailure", //52
"compilationILGenUnsupportedValueTypeOperationFailure", //53
"compilationAOTRelocationRecordGenerationFailure", //54
"compilationAotPatchedCPConstant", //55
"compilationAotHasInvokeSpecialInterface", //56
"compilationAotValidateExceptionHookFailure", //57
"compilationAotBlockFrequencyReloFailure", //58
"compilationAotRecompQueuedFlagReloFailure", //59
"compilationAOTValidateOSRFailure", //60
"compilationOK", // 0
"compilationFailure", // 1
"compilationRestrictionILNodes", // 2
"compilationRestrictionRecDepth", // 3
"compilationRestrictedMethod", // 4
"compilationExcessiveComplexity", // 5
"compilationNotNeeded", // 6
"compilationSuspended", // 7
"compilationExcessiveSize", // 8
"compilationInterrupted", // 9
"compilationMetaDataFailure", // 10
"compilationInProgress", // 11
"compilationCHTableCommitFailure", // 12
"compilationMaxCallerIndexExceeded", // 13
"compilationKilledByClassReplacement", // 14
"compilationHeapLimitExceeded", // 15
"compilationNeededAtHigherLevel", // 16
"compilationAotTrampolineReloFailure", // 17
"compilationAotPicTrampolineReloFailure", // 18
"compilationAotCacheFullReloFailure", // 19
"compilationCodeReservationFailure", // 20
"compilationAotHasInvokehandle", // 21
"compilationTrampolineFailure", // 22
"compilationRecoverableTrampolineFailure", // 23
"compilationILGenFailure", // 24
"compilationIllegalCodeCacheSwitch", // 25
"compilationNullSubstituteCodeCache", // 26
"compilationCodeMemoryExhausted", // 27
"compilationGCRPatchFailure", // 28
"compilationLambdaEnforceScorching", // 29
"compilationInternalPointerExceedLimit", // 30
"compilationAotRelocationInterrupted", // 31
"compilationAotClassChainPersistenceFailure", // 32
"compilationLowPhysicalMemory", // 33
"compilationDataCacheError", // 34
"compilationCodeCacheError", // 35
"compilationRecoverableCodeCacheError", // 36
"compilationAotHasInvokeVarHandle", // 37
"compilationFSDHasInvokeHandle", // 38
"compilationVirtualAddressExhaustion", // 39
"compilationEnforceProfiling", // 40
"compilationSymbolValidationManagerFailure", // 41
"compilationAOTNoSupportForAOTFailure", // 42
"compilationILGenUnsupportedValueTypeOperationFailure", // 43
"compilationAOTRelocationRecordGenerationFailure", // 44
"compilationAotPatchedCPConstant", // 45
"compilationAotHasInvokeSpecialInterface", // 46
"compilationRelocationFailure", // 47
#if defined(J9VM_OPT_JITSERVER)
"compilationStreamFailure", // compilationFirstJITServerFailure = 61
"compilationStreamLostMessage", // 62
"compilationStreamMessageTypeMismatch", // 63
"compilationStreamVersionIncompatible", // 64
"compilationStreamInterrupted", // 65
"aotCacheDeserializationFailure", // 66
"compilationStreamFailure", // compilationFirstJITServerFailure = 48
"compilationStreamLostMessage", // compilationFirstJITServerFailure + 1 = 49
"compilationStreamMessageTypeMismatch", // compilationFirstJITServerFailure + 2 = 50
"compilationStreamVersionIncompatible", // compilationFirstJITServerFailure + 3 = 51
"compilationStreamInterrupted", // compilationFirstJITServerFailure + 4 = 52
"aotCacheDeserializationFailure", // compilationFirstJITServerFailure + 5 = 53
#endif /* defined(J9VM_OPT_JITSERVER) */
"compilationMaxError",
"compilationMaxError"
};

int32_t aggressiveOption = 0;
Expand Down
Loading