summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Taylor <alex@vector35.com>2026-01-15 23:11:10 -0500
committerAlexander Taylor <alex@vector35.com>2026-01-16 16:33:32 -0500
commit38a8d2f54dbb18fc44ac72afbb4ec2d9ba14872c (patch)
tree402f8709102e8252120c9925ac4444287aed2329
parentdd31558a0a1600342da23e2d0745be01ad19202b (diff)
Added Ultimate edition NDS32 architecture support.
-rw-r--r--docs/guide/settings.md1
-rw-r--r--platform/linux/platform_linux.cpp35
2 files changed, 36 insertions, 0 deletions
diff --git a/docs/guide/settings.md b/docs/guide/settings.md
index e2714232..7cc42bb5 100644
--- a/docs/guide/settings.md
+++ b/docs/guide/settings.md
@@ -257,6 +257,7 @@ The setting will appear under the Quick Settings section in the Function Setting
|corePlugins.architectures|AArch64 Architecture|Enable the built-in AArch64 architecture module.|`boolean`|`True`|[`SettingsUserScope`]|<a id='corePlugins.architectures.aarch64'>corePlugins.architectures.aarch64</a>|
|corePlugins.architectures|ARMv7 Architecture|Enable the built-in ARMv7 architecture module.|`boolean`|`True`|[`SettingsUserScope`]|<a id='corePlugins.architectures.armv7'>corePlugins.architectures.armv7</a>|
|corePlugins.architectures|C-SKY / M-Core Architectures|Enable the built-in C-SKY / M-CORE architecture modules. (Ultimate Only)|`boolean`|`True`|[`SettingsUserScope`]|<a id='corePlugins.architectures.csky'>corePlugins.architectures.csky</a>|
+|corePlugins.architectures|NDS32 Architecture|Enable the built-in Andes NDS32 architecture module. (Ultimate Only)|`boolean`|`True`|[`SettingsUserScope`]|<a id='corePlugins.architectures.nds32'>corePlugins.architectures.nds32</a>|
|corePlugins.architectures|Hexagon Architecture|Enable the built-in Hexagon architecture module. (Ultimate Only)|`boolean`|`True`|[`SettingsUserScope`]|<a id='corePlugins.architectures.hexagon'>corePlugins.architectures.hexagon</a>|
|corePlugins.architectures|MIPS Architecture|Enable the built-in MIPS architecture module.|`boolean`|`True`|[`SettingsUserScope`]|<a id='corePlugins.architectures.mips'>corePlugins.architectures.mips</a>|
|corePlugins.architectures|MSP430 Architecture|Enable the built-in MSP430 architecture module.|`boolean`|`True`|[`SettingsUserScope`]|<a id='corePlugins.architectures.msp430'>corePlugins.architectures.msp430</a>|
diff --git a/platform/linux/platform_linux.cpp b/platform/linux/platform_linux.cpp
index 51434323..9614547a 100644
--- a/platform/linux/platform_linux.cpp
+++ b/platform/linux/platform_linux.cpp
@@ -316,6 +316,28 @@ public:
SetSystemCallConvention(cc);
}
};
+
+class LinuxNds32Platform : public Platform
+{
+public:
+ LinuxNds32Platform(Architecture* arch, const std::string& name) : Platform(arch, name)
+ {
+ Ref<CallingConvention> cc;
+
+ cc = arch->GetCallingConventionByName("default");
+ if (cc)
+ {
+ RegisterDefaultCallingConvention(cc);
+ RegisterCdeclCallingConvention(cc);
+ RegisterFastcallCallingConvention(cc);
+ RegisterStdcallCallingConvention(cc);
+ }
+
+ cc = arch->GetCallingConventionByName("syscall");
+ if (cc)
+ SetSystemCallConvention(cc);
+ }
+};
#endif
@@ -334,6 +356,7 @@ extern "C"
AddOptionalPluginDependency("arch_riscv");
#ifdef ULTIMATE_EDITION
AddOptionalPluginDependency("arch_csky");
+ AddOptionalPluginDependency("arch_nds32");
#endif
AddOptionalPluginDependency("view_elf");
}
@@ -572,6 +595,18 @@ extern "C"
BinaryViewType::RegisterPlatform("ELF", 0, platform);
BinaryViewType::RegisterPlatform("ELF", 3, platform);
}
+
+ Ref<Architecture> nds32 = Architecture::GetByName("nds32");
+ if (nds32)
+ {
+ Ref<Platform> platform;
+
+ platform = new LinuxNds32Platform(nds32, "linux-nds32");
+ Platform::Register("linux", platform);
+ // Linux binaries sometimes have an OS identifier of zero, even though 3 is the correct one
+ BinaryViewType::RegisterPlatform("ELF", 0, platform);
+ BinaryViewType::RegisterPlatform("ELF", 3, platform);
+ }
#endif
return true;