diff options
| author | Alexander Taylor <alex@vector35.com> | 2026-01-15 23:11:10 -0500 |
|---|---|---|
| committer | Alexander Taylor <alex@vector35.com> | 2026-01-16 16:33:32 -0500 |
| commit | 38a8d2f54dbb18fc44ac72afbb4ec2d9ba14872c (patch) | |
| tree | 402f8709102e8252120c9925ac4444287aed2329 | |
| parent | dd31558a0a1600342da23e2d0745be01ad19202b (diff) | |
Added Ultimate edition NDS32 architecture support.
| -rw-r--r-- | docs/guide/settings.md | 1 | ||||
| -rw-r--r-- | platform/linux/platform_linux.cpp | 35 |
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; |
