diff options
Diffstat (limited to 'src/plugins/projectexplorer/abi.cpp')
-rw-r--r-- | src/plugins/projectexplorer/abi.cpp | 122 |
1 files changed, 119 insertions, 3 deletions
diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp index fec9f69fd9..8cc8bcb289 100644 --- a/src/plugins/projectexplorer/abi.cpp +++ b/src/plugins/projectexplorer/abi.cpp @@ -27,13 +27,12 @@ #include <utils/algorithm.h> #include <utils/fileutils.h> - #include <utils/qtcassert.h> #include <QDebug> #include <QtEndian> #include <QFile> -#include <QRegExp> +#include <QRegularExpression> #include <QString> #include <QStringList> #include <QSysInfo> @@ -159,6 +158,8 @@ static Abi::Architecture architectureFromQt() return Abi::PowerPCArchitecture; if (arch.startsWith("sh")) // Not in Qt documentation! return Abi::ShArchitecture; + if (arch.startsWith("avr32")) // Not in Qt documentation! + return Abi::Avr32Architecture; if (arch.startsWith("avr")) // Not in Qt documentation! return Abi::AvrArchitecture; if (arch.startsWith("asmjs")) @@ -454,7 +455,7 @@ Abi Abi::abiFromTargetTriplet(const QString &triple) if (machine.isEmpty()) return Abi(); - const QVector<QStringRef> parts = machine.splitRef(QRegExp("[ /-]")); + const QVector<QStringRef> parts = machine.splitRef(QRegularExpression("[ /-]")); Architecture arch = UnknownArchitecture; OS os = UnknownOS; @@ -491,6 +492,19 @@ Abi Abi::abiFromTargetTriplet(const QString &triple) flavor = GenericFlavor; format = ElfFormat; width = 16; + } else if (p == "avr32") { + arch = Avr32Architecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = 32; + } else if (p == "cr16") { + arch = CR16Architecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + // Note that GCC macro returns 32-bit value for this architecture. + width = 32; } else if (p == "msp430") { arch = Msp430Architecture; os = BareMetalOS; @@ -503,6 +517,48 @@ Abi Abi::abiFromTargetTriplet(const QString &triple) flavor = GenericFlavor; format = ElfFormat; width = 16; + } else if (p == "rx") { + arch = RxArchitecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = 32; + } else if (p == "sh") { + arch = ShArchitecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = 32; + } else if (p == "v850") { + arch = V850Architecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = 32; + } else if (p == "m68k") { + arch = M68KArchitecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = 16; + } else if (p == "m32c") { + arch = M32CArchitecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = 16; + } else if (p == "m32r") { + arch = M32RArchitecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = 32; + } else if (p.startsWith("riscv")) { + arch = RiscVArchitecture; + os = BareMetalOS; + flavor = GenericFlavor; + format = ElfFormat; + width = p.contains("64") ? 64 : 32; } else if (p.startsWith("mips")) { arch = MipsArchitecture; width = p.contains("64") ? 64 : 32; @@ -699,12 +755,16 @@ QString Abi::toString(const Architecture &a) return QLatin1String("arm"); case AvrArchitecture: return QLatin1String("avr"); + case Avr32Architecture: + return QLatin1String("avr32"); case XtensaArchitecture: return QLatin1String("xtensa"); case X86Architecture: return QLatin1String("x86"); case Mcs51Architecture: return QLatin1String("mcs51"); + case Mcs251Architecture: + return QLatin1String("mcs251"); case MipsArchitecture: return QLatin1String("mips"); case PowerPCArchitecture: @@ -721,6 +781,30 @@ QString Abi::toString(const Architecture &a) return QLatin1String("msp430"); case Rl78Architecture: return QLatin1String("rl78"); + case C166Architecture: + return QLatin1String("c166"); + case V850Architecture: + return QLatin1String("v850"); + case Rh850Architecture: + return QLatin1String("rh850"); + case RxArchitecture: + return QLatin1String("rx"); + case K78Architecture: + return QLatin1String("78k"); + case M68KArchitecture: + return QLatin1String("m68k"); + case M32CArchitecture: + return QLatin1String("m32c"); + case M16CArchitecture: + return QLatin1String("m16c"); + case M32RArchitecture: + return QLatin1String("m32r"); + case R32CArchitecture: + return QLatin1String("r32c"); + case CR16Architecture: + return QLatin1String("cr16"); + case RiscVArchitecture: + return QLatin1String("riscv"); case UnknownArchitecture: Q_FALLTHROUGH(); default: @@ -845,10 +929,14 @@ Abi::Architecture Abi::architectureFromString(const QStringRef &a) return ArmArchitecture; if (a == "avr") return AvrArchitecture; + if (a == "avr32") + return Avr32Architecture; if (a == "x86") return X86Architecture; if (a == "mcs51") return Mcs51Architecture; + if (a == "mcs251") + return Mcs251Architecture; if (a == "mips") return MipsArchitecture; if (a == "ppc") @@ -863,6 +951,30 @@ Abi::Architecture Abi::architectureFromString(const QStringRef &a) return Msp430Architecture; if (a == "rl78") return Rl78Architecture; + if (a == "c166") + return C166Architecture; + if (a == "v850") + return V850Architecture; + if (a == "rh850") + return Rh850Architecture; + if (a == "rx") + return RxArchitecture; + if (a == "78k") + return K78Architecture; + if (a == "m68k") + return M68KArchitecture; + if (a == "m32c") + return M32CArchitecture; + if (a == "m16c") + return M16CArchitecture; + if (a == "m32r") + return M32RArchitecture; + if (a == "r32c") + return R32CArchitecture; + if (a == "cr16") + return CR16Architecture; + if (a == "riscv") + return RiscVArchitecture; else if (a == "xtensa") return XtensaArchitecture; if (a == "asmjs") @@ -1410,6 +1522,10 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data() << int(Abi::BareMetalOS) << int(Abi::GenericFlavor) << int(Abi::ElfFormat) << 16; + QTest::newRow("avr32") << int(Abi::Avr32Architecture) + << int(Abi::BareMetalOS) << int(Abi::GenericFlavor) + << int(Abi::ElfFormat) << 32; + QTest::newRow("asmjs-unknown-emscripten") << int(Abi::AsmJsArchitecture) << int(Abi::UnknownOS) << int(Abi::UnknownFlavor) << int(Abi::EmscriptenFormat) << 32; |