aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/abi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/abi.cpp')
-rw-r--r--src/plugins/projectexplorer/abi.cpp122
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;