Merge remote-tracking branch 'origin/Ghidra_11.2'

This commit is contained in:
Ryan Kurtz 2024-09-13 11:58:48 -04:00
commit 2c0f43abf0
2 changed files with 11 additions and 16 deletions

View File

@ -33,7 +33,7 @@ ElementId ELEM_DESCRIPTION = ElementId("description",233);
ElementId ELEM_LANGUAGE = ElementId("language",234); ElementId ELEM_LANGUAGE = ElementId("language",234);
ElementId ELEM_LANGUAGE_DEFINITIONS = ElementId("language_definitions",235); ElementId ELEM_LANGUAGE_DEFINITIONS = ElementId("language_definitions",235);
map<int4,Sleigh *> SleighArchitecture::translators; map<int4,Sleigh> SleighArchitecture::translators;
vector<LanguageDescription> SleighArchitecture::description; vector<LanguageDescription> SleighArchitecture::description;
FileManage SleighArchitecture::specpaths; // Global specfile manager FileManage SleighArchitecture::specpaths; // Global specfile manager
@ -174,17 +174,16 @@ bool SleighArchitecture::isTranslateReused(void)
Translate *SleighArchitecture::buildTranslator(DocumentStorage &store) Translate *SleighArchitecture::buildTranslator(DocumentStorage &store)
{ // Build a sleigh translator { // Build a sleigh translator
map<int4,Sleigh *>::const_iterator iter; map<int4,Sleigh>::iterator iter;
Sleigh *sleigh;
iter = translators.find(languageindex); iter = translators.find(languageindex);
if (iter != translators.end()) { if (iter != translators.end()) {
sleigh = (*iter).second; iter->second.reset(loader, context);
sleigh->reset(loader,context); return &iter->second;
return sleigh;
} }
sleigh = new Sleigh(loader,context); pair<map<int4,Sleigh>::iterator,bool> res;
translators[languageindex] = sleigh; res = translators.emplace(piecewise_construct,forward_as_tuple(languageindex),forward_as_tuple(loader,context));
return sleigh; return &(*res.first).second;
} }
PcodeInjectLibrary *SleighArchitecture::buildPcodeInjectLibrary(void) PcodeInjectLibrary *SleighArchitecture::buildPcodeInjectLibrary(void)
@ -627,10 +626,6 @@ const vector<LanguageDescription> &SleighArchitecture::getDescriptions(void)
void SleighArchitecture::shutdown(void) void SleighArchitecture::shutdown(void)
{ {
if (translators.empty()) return; // Already cleared
for(map<int4,Sleigh *>::const_iterator iter=translators.begin();iter!=translators.end();++iter)
delete (*iter).second;
translators.clear();
// description.clear(); // static vector is destroyed by the normal exit handler // description.clear(); // static vector is destroyed by the normal exit handler
} }

View File

@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -106,7 +106,7 @@ public:
/// Generally a \e language \e id (i.e. x86:LE:64:default) is provided, then this /// Generally a \e language \e id (i.e. x86:LE:64:default) is provided, then this
/// object is able to automatically load in configuration and construct the Translate object. /// object is able to automatically load in configuration and construct the Translate object.
class SleighArchitecture : public Architecture { class SleighArchitecture : public Architecture {
static map<int4,Sleigh *> translators; ///< Map from language index to instantiated translators static map<int4,Sleigh> translators; ///< Map from language index to instantiated translators
static vector<LanguageDescription> description; ///< List of languages we know about static vector<LanguageDescription> description; ///< List of languages we know about
int4 languageindex; ///< Index (within LanguageDescription array) of the active language int4 languageindex; ///< Index (within LanguageDescription array) of the active language
string filename; ///< Name of active load-image file string filename; ///< Name of active load-image file