From fbf8d071c72ae61a9d56d2c70e9e5b025e05d0ef Mon Sep 17 00:00:00 2001 From: DuckSoft Date: Tue, 12 May 2020 20:53:15 +0800 Subject: [PATCH] add trusted abi --- src/core/kernel/QvKernelABIChecker.cpp | 10 ++++++++++ src/core/kernel/QvKernelABIChecker.hpp | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/kernel/QvKernelABIChecker.cpp b/src/core/kernel/QvKernelABIChecker.cpp index d2c57b5f..a6749f80 100644 --- a/src/core/kernel/QvKernelABIChecker.cpp +++ b/src/core/kernel/QvKernelABIChecker.cpp @@ -6,6 +6,7 @@ namespace Qv2ray::core::kernel::abi { QvKernelABICompatibility checkCompatibility(QvKernelABIType hostType, QvKernelABIType targetType) { +#ifndef QV2RAY_TRUSTED_ABI switch (hostType) { case ABI_WIN32: @@ -15,12 +16,19 @@ namespace Qv2ray::core::kernel::abi case ABI_ELF_X86: return targetType == hostType ? ABI_PERFECT : ABI_NOPE; case ABI_ELF_X86_64: return targetType == hostType ? ABI_PERFECT : targetType == ABI_ELF_X86 ? ABI_MAYBE : ABI_NOPE; case ABI_ELF_OTHER: return targetType == hostType ? ABI_PERFECT : ABI_MAYBE; + case ABI_TRUSTED: return ABI_PERFECT; default: return ABI_MAYBE; } +#else + return ABI_PERFECT; +#endif } std::pair, std::optional> deduceKernelABI(const QString &pathCoreExecutable) { +#ifdef QV2RAY_TRUSTED_ABI + return QvKernelABIType::ABI_TRUSTED; +#else QFile file(pathCoreExecutable); if (!file.exists()) return { std::nullopt, QObject::tr("core executable file %1 does not exist").arg(pathCoreExecutable) }; @@ -55,6 +63,7 @@ namespace Qv2ray::core::kernel::abi return { QvKernelABIType::ABI_MACH_O, std::nullopt }; else return { std::nullopt, QObject::tr("cannot deduce the type of core executable file %1").arg(pathCoreExecutable) }; +#endif } QString abiToString(QvKernelABIType abi) @@ -68,6 +77,7 @@ namespace Qv2ray::core::kernel::abi case ABI_ELF_AARCH64: return QObject::tr("ELF arm64 executable"); case ABI_ELF_ARM: return QObject::tr("ELF arm executable"); case ABI_ELF_OTHER: return QObject::tr("other ELF executable"); + case ABI_TRUSTED: return QObject::tr("trusted abi"); default: return QObject::tr("unknown abi"); } } diff --git a/src/core/kernel/QvKernelABIChecker.hpp b/src/core/kernel/QvKernelABIChecker.hpp index d0346388..5e166f13 100644 --- a/src/core/kernel/QvKernelABIChecker.hpp +++ b/src/core/kernel/QvKernelABIChecker.hpp @@ -19,6 +19,7 @@ namespace Qv2ray::core::kernel ABI_ELF_AARCH64, ABI_ELF_ARM, ABI_ELF_OTHER, + ABI_TRUSTED, }; enum QvKernelABICompatibility @@ -42,7 +43,8 @@ namespace Qv2ray::core::kernel #elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_ARM_V7) QvKernelABIType::ABI_ELF_ARM; #else - #error "unknown architecture" + QvKernelABIType::ABI_TRUSTED; + #define QV2RAY_TRUSTED_ABI #endif std::pair, std::optional> deduceKernelABI(const QString &pathCoreExecutable);