From fd1ac8a1cf3c05ccdbf8762e22e9b7f01bd2abd4 Mon Sep 17 00:00:00 2001 From: Brandon Miller Date: Wed, 2 Apr 2025 11:24:06 -0400 Subject: Fix user platform override between armv7 and thumb Only override the default platform based on the entry point architecture in cases where the user didn't explicitly set loader.platform --- view/elf/elfview.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'view/elf/elfview.cpp') diff --git a/view/elf/elfview.cpp b/view/elf/elfview.cpp index c87c9e05..6d19bc5f 100644 --- a/view/elf/elfview.cpp +++ b/view/elf/elfview.cpp @@ -469,6 +469,7 @@ bool ElfView::Init() m_extractMangledTypes = viewSettings->Get("analysis.extractTypesFromMangledNames", this); m_simplifyTemplates = viewSettings->Get("analysis.types.templateSimplifier", this); + bool platformSetByUser = false; Ref settings = GetLoadSettings(GetTypeName()); if (settings) { @@ -477,11 +478,13 @@ bool ElfView::Init() if (settings->Contains("loader.platform")) { - Ref platformOverride = Platform::GetByName(settings->Get("loader.platform", this)); + BNSettingsScope scope = SettingsAutoScope; + Ref platformOverride = Platform::GetByName(settings->Get("loader.platform", this, &scope)); if (platformOverride) { m_plat = platformOverride; m_arch = m_plat->GetArchitecture(); + platformSetByUser = (scope == SettingsResourceScope); } } } @@ -752,8 +755,9 @@ bool ElfView::Init() GetParentView()->SetDefaultArchitecture(entryPointArch); Ref platform = m_plat ? m_plat : g_elfViewType->GetPlatform(m_ident.os, m_arch); - if (platform && (entryPointArch != m_arch)) + if (platform && (entryPointArch != m_arch) && !platformSetByUser) platform = platform->GetRelatedPlatform(entryPointArch); + if (!platform) platform = entryPointArch->GetStandalonePlatform(); -- cgit v1.3.1