blob: d5282b252a506021a201f1b95788ec54ac96e9b0 [file]
/*
* Copyright 2010-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
#include "CompilerConstants.hpp"
#include "Common.h"
#include "SourceInfo.h"
using namespace kotlin;
using Kotlin_getSourceInfo_FunctionType = int(*)(void * /*addr*/, SourceInfo* /*result*/, int /*result_size*/);
/**
* There are two ways, how compiler can define variables for runtime usage. This one, and the other one with details in header file.
*
* This is one is variables defined by overrideRuntimeGlobals in IrToBitcode.kt. They are *not* eligible for runtime optimizations,
* but can be changed after compiling caches. So use this way for variables, which will be rarely accessed.
*/
RUNTIME_WEAK int32_t Kotlin_gcMutatorsCooperate = 0;
RUNTIME_WEAK uint32_t Kotlin_auxGCThreads = 0;
RUNTIME_WEAK uint32_t Kotlin_concurrentMarkMaxIterations = 100;
RUNTIME_WEAK int32_t Kotlin_suspendFunctionsFromAnyThreadFromObjC = 0;
RUNTIME_WEAK Kotlin_getSourceInfo_FunctionType Kotlin_getSourceInfo_Function = nullptr;
RUNTIME_WEAK int32_t Kotlin_CoreSymbolication_useOnlyKotlinImage = 0;
#ifdef KONAN_ANDROID
RUNTIME_WEAK int32_t Kotlin_printToAndroidLogcat = 1;
#endif
// Keep it 0 even when the compiler defaults to 1: if the overriding mechanism breaks, keeping it disabled is safer.
RUNTIME_WEAK int32_t Kotlin_appStateTracking = 0;
RUNTIME_WEAK int32_t Kotlin_objcDisposeOnMain = 0;
RUNTIME_WEAK int32_t Kotlin_objcDisposeWithRunLoop = 1;
RUNTIME_WEAK int32_t Kotlin_enableSafepointSignposts = 0;
RUNTIME_WEAK int32_t Kotlin_globalDataLazyInit = 1;
RUNTIME_WEAK int32_t Kotlin_swiftExport = 0;
RUNTIME_WEAK int32_t Kotlin_latin1Strings = 0;
RUNTIME_WEAK uint8_t Kotlin_mmapTag = 0;
RUNTIME_WEAK const char* Kotlin_minidumpLocation = nullptr;
RUNTIME_WEAK int32_t Kotlin_minidumpOnSIGTERM = 0;
ALWAYS_INLINE bool compiler::gcMutatorsCooperate() noexcept {
return Kotlin_gcMutatorsCooperate != 0;
}
ALWAYS_INLINE uint32_t compiler::auxGCThreads() noexcept {
return Kotlin_auxGCThreads;
}
ALWAYS_INLINE uint32_t compiler::concurrentMarkMaxIterations() noexcept {
return Kotlin_concurrentMarkMaxIterations;
}
ALWAYS_INLINE bool compiler::suspendFunctionsFromAnyThreadFromObjCEnabled() noexcept {
return Kotlin_suspendFunctionsFromAnyThreadFromObjC != 0;
}
ALWAYS_INLINE compiler::AppStateTracking compiler::appStateTracking() noexcept {
return static_cast<compiler::AppStateTracking>(Kotlin_appStateTracking);
}
#ifdef KONAN_ANDROID
ALWAYS_INLINE bool compiler::printToAndroidLogcat() noexcept {
return Kotlin_printToAndroidLogcat != 0;
}
#endif
ALWAYS_INLINE int compiler::getSourceInfo(void* addr, SourceInfo *result, int result_size) noexcept {
if (Kotlin_getSourceInfo_Function == nullptr) {
return 0;
} else {
return Kotlin_getSourceInfo_Function(addr, result, result_size);
}
}
ALWAYS_INLINE bool compiler::coreSymbolicationUseOnlyKotlinImage() noexcept {
return Kotlin_CoreSymbolication_useOnlyKotlinImage != 0;
}
ALWAYS_INLINE bool compiler::objcDisposeOnMain() noexcept {
return Kotlin_objcDisposeOnMain != 0;
}
ALWAYS_INLINE bool compiler::objcDisposeWithRunLoop() noexcept {
return Kotlin_objcDisposeWithRunLoop != 0;
}
ALWAYS_INLINE bool compiler::enableSafepointSignposts() noexcept {
return Kotlin_enableSafepointSignposts != 0;
}
ALWAYS_INLINE bool compiler::globalDataLazyInit() noexcept {
return Kotlin_globalDataLazyInit != 0;
}
ALWAYS_INLINE bool compiler::swiftExport() noexcept {
return Kotlin_swiftExport != 0;
}
ALWAYS_INLINE bool compiler::latin1Strings() noexcept {
return Kotlin_latin1Strings != 0;
}
ALWAYS_INLINE uint8_t compiler::mmapTag() noexcept {
return Kotlin_mmapTag;
}
ALWAYS_INLINE const char* compiler::minidumpLocation() noexcept {
return Kotlin_minidumpLocation;
}
ALWAYS_INLINE bool compiler::minidumpOnSIGTERM() noexcept {
return Kotlin_minidumpOnSIGTERM != 0;
}