[K/N] Move calls checker into separate module ^KT-62091

This commit is contained in:
Alexander Shabalin
2024-01-03 14:02:36 +01:00
committed by Space Team
parent 8cd87059c8
commit 3f2584bb02
15 changed files with 112 additions and 64 deletions
+60 -43
View File
@@ -42,6 +42,7 @@ val targetList: List<String> by project
bitcode {
allTargets {
module("main") {
headersDirs.from("src/externalCallsChecker/common/cpp")
sourceSets {
main {
// TODO: Split out out `base` module and merge it together with `main` into `runtime.bc`
@@ -133,21 +134,21 @@ bitcode {
}
module("compiler_interface") {
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
}
module("launcher") {
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
}
module("debug") {
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
@@ -155,7 +156,7 @@ bitcode {
module("common_alloc") {
srcRoot.set(layout.projectDirectory.dir("src/alloc/common"))
headersDirs.from(files("src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
@@ -163,7 +164,7 @@ bitcode {
module("std_alloc") {
srcRoot.set(layout.projectDirectory.dir("src/alloc/std"))
headersDirs.from(files("src/alloc/common/cpp", "src/alloc/legacy/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/alloc/legacy/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
@@ -171,7 +172,7 @@ bitcode {
module("custom_alloc") {
srcRoot.set(layout.projectDirectory.dir("src/alloc/custom"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
test {}
@@ -183,7 +184,7 @@ bitcode {
module("mimalloc_alloc") {
srcRoot.set(layout.projectDirectory.dir("src/alloc/mimalloc"))
headersDirs.from(files("src/mimalloc/c/include", "src/alloc/common/cpp", "src/alloc/legacy/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/mimalloc/c/include", "src/alloc/common/cpp", "src/alloc/legacy/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
@@ -193,7 +194,7 @@ bitcode {
module("legacy_alloc") {
srcRoot.set(layout.projectDirectory.dir("src/alloc/legacy"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
test {}
@@ -203,7 +204,7 @@ bitcode {
module("exceptionsSupport") {
srcRoot.set(layout.projectDirectory.dir("src/exceptions_support"))
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
@@ -211,7 +212,7 @@ bitcode {
module("source_info_core_symbolication") {
srcRoot.set(layout.projectDirectory.dir("src/source_info/core_symbolication"))
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
@@ -221,7 +222,7 @@ bitcode {
module("source_info_libbacktrace") {
srcRoot.set(layout.projectDirectory.dir("src/source_info/libbacktrace"))
headersDirs.from(files("src/main/cpp", "src/libbacktrace/c/include"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp", "src/libbacktrace/c/include"))
sourceSets {
main {}
}
@@ -230,14 +231,14 @@ bitcode {
}
module("objc") {
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
}
module("test_support") {
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
testFixtures {
inputFiles.include("**/*.cpp", "**/*.mm")
@@ -246,7 +247,7 @@ bitcode {
}
module("mm") {
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
testFixtures {}
@@ -256,7 +257,7 @@ bitcode {
module("common_gc") {
srcRoot.set(layout.projectDirectory.dir("src/gc/common"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
test {}
@@ -265,7 +266,7 @@ bitcode {
module("noop_gc") {
srcRoot.set(layout.projectDirectory.dir("src/gc/noop"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
sourceSets {
main {}
}
@@ -273,7 +274,7 @@ bitcode {
module("noop_gc_custom") {
srcRoot.set(layout.projectDirectory.dir("src/gc/noop"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
sourceSets {
main {}
}
@@ -283,7 +284,7 @@ bitcode {
module("same_thread_ms_gc") {
srcRoot.set(layout.projectDirectory.dir("src/gc/stms"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
sourceSets {
main {}
test {}
@@ -292,7 +293,7 @@ bitcode {
module("same_thread_ms_gc_custom") {
srcRoot.set(layout.projectDirectory.dir("src/gc/stms"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
sourceSets {
main {}
test {}
@@ -303,7 +304,7 @@ bitcode {
module("pmcs_gc") {
srcRoot.set(layout.projectDirectory.dir("src/gc/pmcs"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
sourceSets {
main {}
test {}
@@ -312,7 +313,7 @@ bitcode {
module("pmcs_gc_custom") {
srcRoot.set(layout.projectDirectory.dir("src/gc/pmcs"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
sourceSets {
main {}
test {}
@@ -323,7 +324,7 @@ bitcode {
module("concurrent_ms_gc") {
srcRoot.set(layout.projectDirectory.dir("src/gc/cms"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/legacy/cpp"))
sourceSets {
main {}
test {}
@@ -332,7 +333,7 @@ bitcode {
module("concurrent_ms_gc_custom") {
srcRoot.set(layout.projectDirectory.dir("src/gc/cms"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp", "src/alloc/custom/cpp"))
sourceSets {
main {}
test {}
@@ -343,7 +344,7 @@ bitcode {
module("common_gcScheduler") {
srcRoot.set(layout.projectDirectory.dir("src/gcScheduler/common"))
headersDirs.from(files("src/alloc/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
test {}
@@ -352,7 +353,7 @@ bitcode {
module("manual_gcScheduler") {
srcRoot.set(layout.projectDirectory.dir("src/gcScheduler/manual"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
}
@@ -360,7 +361,7 @@ bitcode {
module("adaptive_gcScheduler") {
srcRoot.set(layout.projectDirectory.dir("src/gcScheduler/adaptive"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
test {}
@@ -369,15 +370,31 @@ bitcode {
module("aggressive_gcScheduler") {
srcRoot.set(layout.projectDirectory.dir("src/gcScheduler/aggressive"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/main/cpp"))
headersDirs.from(files("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
test {}
}
}
module("impl_externalCallsChecker") {
srcRoot.set(layout.projectDirectory.dir("src/externalCallsChecker/impl"))
headersDirs.from("src/alloc/common/cpp", "src/gcScheduler/common/cpp", "src/gc/common/cpp", "src/mm/cpp", "src/externalCallsChecker/common/cpp", "src/main/cpp")
sourceSets {
main {}
}
}
module("noop_externalCallsChecker") {
srcRoot.set(layout.projectDirectory.dir("src/externalCallsChecker/noop"))
headersDirs.from("src/externalCallsChecker/common/cpp", "src/main/cpp")
sourceSets {
main {}
}
}
module("xctest_launcher") {
headersDirs.from(files("src/main/cpp"))
headersDirs.from(files("src/externalCallsChecker/common/cpp", "src/main/cpp"))
sourceSets {
main {}
@@ -387,69 +404,69 @@ bitcode {
testsGroup("custom_alloc_runtime_tests") {
testedModules.addAll("custom_alloc")
testSupportModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "concurrent_ms_gc_custom", "objc")
testSupportModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "concurrent_ms_gc_custom", "objc")
}
testsGroup("experimentalMM_stms_mimalloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "same_thread_ms_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "same_thread_ms_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_stms_std_alloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "same_thread_ms_gc", "std_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "same_thread_ms_gc", "std_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_stms_custom_alloc_runtime_tests") {
testedModules.addAll("mm", "same_thread_ms_gc_custom")
testSupportModules.addAll("main", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
testSupportModules.addAll("main", "noop_externalCallsChecker", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
}
testsGroup("experimentalMM_pmcs_mimalloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "pmcs_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "pmcs_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_pmcs_std_alloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "pmcs_gc", "std_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "pmcs_gc", "std_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_pmcs_custom_alloc_runtime_tests") {
testedModules.addAll("mm", "pmcs_gc_custom")
testSupportModules.addAll("main", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
testSupportModules.addAll("main", "noop_externalCallsChecker", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
}
testsGroup("experimentalMM_cms_mimalloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "concurrent_ms_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "concurrent_ms_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_cms_std_alloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "concurrent_ms_gc", "std_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "concurrent_ms_gc", "std_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_cms_custom_alloc_runtime_tests") {
testedModules.addAll("mm", "concurrent_ms_gc_custom")
testSupportModules.addAll("main", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
testSupportModules.addAll("main", "noop_externalCallsChecker", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
}
testsGroup("experimentalMM_noop_mimalloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "noop_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "noop_gc", "mimalloc", "mimalloc_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_noop_std_alloc_runtime_tests") {
testedModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "noop_gc", "std_alloc", "legacy_alloc", "objc")
testedModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "noop_gc", "std_alloc", "legacy_alloc", "objc")
}
testsGroup("experimentalMM_noop_custom_alloc_runtime_tests") {
testedModules.addAll("mm", "noop_gc_custom")
testSupportModules.addAll("main", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
testSupportModules.addAll("main", "noop_externalCallsChecker", "common_alloc", "common_gc", "common_gcScheduler", "manual_gcScheduler", "custom_alloc", "objc")
}
testsGroup("aggressive_gcScheduler_runtime_tests") {
testedModules.addAll("aggressive_gcScheduler")
testSupportModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "noop_gc", "std_alloc", "legacy_alloc", "objc")
testSupportModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "noop_gc", "std_alloc", "legacy_alloc", "objc")
}
testsGroup("adaptive_gcScheduler_runtime_tests") {
testedModules.addAll("adaptive_gcScheduler")
testSupportModules.addAll("main", "mm", "common_alloc", "common_gc", "common_gcScheduler", "noop_gc", "std_alloc", "legacy_alloc", "objc")
testSupportModules.addAll("main", "noop_externalCallsChecker", "mm", "common_alloc", "common_gc", "common_gcScheduler", "noop_gc", "std_alloc", "legacy_alloc", "objc")
}
}
}
@@ -8,6 +8,8 @@
#include "Common.h"
#include "Utils.hpp"
#define NO_EXTERNAL_CALLS_CHECK __attribute__((annotate("no_external_calls_check")))
namespace kotlin {
// Ignore thread state checker for the scope.
@@ -19,4 +21,4 @@ public:
ALWAYS_INLINE ~CallsCheckerIgnoreGuard();
};
}
} // namespace kotlin
@@ -20,7 +20,7 @@
using namespace kotlin;
// this values will be substituted by compiler
extern "C" const void **Kotlin_callsCheckerKnownFunctions = nullptr;
extern "C" const void** Kotlin_callsCheckerKnownFunctions = nullptr;
extern "C" int Kotlin_callsCheckerKnownFunctionsCount = 0;
extern "C" const char* Kotlin_callsCheckerGoodFunctionNames[] = {
@@ -290,13 +290,13 @@ public:
for (int i = 0; i < Kotlin_callsCheckerKnownFunctionsCount; i++) {
known_functions_.insert(Kotlin_callsCheckerKnownFunctions[i]);
}
std::copy(std::begin(Kotlin_callsCheckerGoodFunctionNames), std::end(Kotlin_callsCheckerGoodFunctionNames), std::begin(good_names_copy_));
std::copy(
std::begin(Kotlin_callsCheckerGoodFunctionNames), std::end(Kotlin_callsCheckerGoodFunctionNames),
std::begin(good_names_copy_));
std::sort(std::begin(good_names_copy_), std::end(good_names_copy_));
}
bool isKnown(const void* fun) const noexcept {
return known_functions_.find(fun) != known_functions_.end();
}
bool isKnown(const void* fun) const noexcept { return known_functions_.find(fun) != known_functions_.end(); }
bool isSafeByName(std::string_view name) const noexcept {
auto it = std::lower_bound(std::begin(good_names_copy_), std::end(good_names_copy_), name);
@@ -307,10 +307,10 @@ public:
return name.substr(0, banned.size() - 1) == banned.substr(0, banned.size() - 1);
};
if (it != std::end(good_names_copy_) && check(*it)) {
return true;
return true;
}
if (it != std::begin(good_names_copy_) && check(*std::prev(it))) {
return true;
return true;
}
return false;
}
@@ -324,13 +324,12 @@ private:
[[clang::no_destroy]] const KnownFunctionChecker checker;
constexpr int MSG_SEND_TO_NULL = -1;
constexpr int CALLED_LLVM_BUILTIN = -2;
thread_local size_t ignoreGuardsCount = 0;
}
} // namespace
/**
* This function calls is inserted to llvm bitcode automatically, so it can be called almost anywhre.
@@ -342,7 +341,8 @@ thread_local size_t ignoreGuardsCount = 0;
* should not be accessed. So before guard checking we need to check is thread destructor is running,
* which requires special handling of recursive calls from this check.
*/
extern "C" RUNTIME_NOTHROW RUNTIME_NODEBUG void Kotlin_mm_checkStateAtExternalFunctionCall(const char* caller, const char *callee, const void *calleePtr) noexcept {
extern "C" RUNTIME_NOTHROW RUNTIME_NODEBUG void Kotlin_mm_checkStateAtExternalFunctionCall(
const char* caller, const char* callee, const void* calleePtr) noexcept {
if (reinterpret_cast<int64_t>(calleePtr) == MSG_SEND_TO_NULL) return; // objc_sendMsg called on nil, it does nothing, so it's ok
if (ignoreGuardsCount != 0) return;
if (konan::isOnThreadExitNotSetOrAlreadyStarted()) return;
@@ -375,5 +375,9 @@ extern "C" RUNTIME_NOTHROW RUNTIME_NODEBUG void Kotlin_mm_checkStateAtExternalFu
RuntimeFail("Expected kNative thread state at call of function %s by function %s", callee, caller);
}
CallsCheckerIgnoreGuard::CallsCheckerIgnoreGuard() noexcept { ++ignoreGuardsCount; }
CallsCheckerIgnoreGuard::~CallsCheckerIgnoreGuard() { --ignoreGuardsCount; }
CallsCheckerIgnoreGuard::CallsCheckerIgnoreGuard() noexcept {
++ignoreGuardsCount;
}
CallsCheckerIgnoreGuard::~CallsCheckerIgnoreGuard() {
--ignoreGuardsCount;
}
@@ -0,0 +1,11 @@
/*
* Copyright 2010-2024 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 "CallsChecker.hpp"
using namespace kotlin;
CallsCheckerIgnoreGuard::CallsCheckerIgnoreGuard() noexcept = default;
CallsCheckerIgnoreGuard::~CallsCheckerIgnoreGuard() = default;
@@ -36,8 +36,6 @@
#endif
#define NO_INLINE __attribute__((noinline))
#define NO_EXTERNAL_CALLS_CHECK __attribute__((annotate("no_external_calls_check")))
#define OPTNONE __attribute__((optnone))
#define THREAD_LOCAL_VARIABLE __thread
@@ -21,6 +21,7 @@
#include <cinttypes>
#include <thread>
#include "CallsChecker.hpp"
#include "KAssert.h"
#include "Memory.h"
#include "Utils.hpp"
@@ -25,6 +25,7 @@
#import <Foundation/NSDictionary.h>
#import <Foundation/NSSet.h>
#import "CallsChecker.hpp"
#import "Exceptions.h"
#import "ObjCExport.h"
#import "ObjCExportCollections.h"
@@ -30,6 +30,7 @@
#include <chrono>
#include "CallsChecker.hpp"
#include "Common.h"
#include "CompilerConstants.hpp"
#include "Porting.h"