mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
GP-4045 add locking to sleigh .sla and slaspec files
sla freshness checking and slaspec recompilation is now protected by a lock file used as a mutex. Added LanguageProvider.getLanguage(LanguageID, TaskMonitor monitor) to better expose TaskMonitor and allow for canceling lock file attempt.
This commit is contained in:
@@ -22,10 +22,10 @@ import docking.ActionContext;
|
||||
import docking.Tool;
|
||||
import docking.action.DockingActionIf;
|
||||
import docking.actions.PopupActionProvider;
|
||||
import generic.jar.ResourceFile;
|
||||
import ghidra.app.plugin.PluginCategoryNames;
|
||||
import ghidra.app.plugin.core.debug.DebuggerPluginPackage;
|
||||
import ghidra.app.plugin.core.debug.gui.listing.DebuggerListingActionContext;
|
||||
import ghidra.app.plugin.processors.sleigh.SleighLanguageDescription;
|
||||
import ghidra.app.services.DebuggerPlatformService;
|
||||
import ghidra.app.services.DebuggerTraceManagerService;
|
||||
import ghidra.framework.plugintool.*;
|
||||
@@ -202,27 +202,17 @@ public class DebuggerDisassemblerPlugin extends Plugin implements PopupActionPro
|
||||
protected Collection<LanguageID> getAlternativeLanguageIDs(Language language) {
|
||||
// One of the alternatives is the language's actual default
|
||||
LanguageDescription desc = language.getLanguageDescription();
|
||||
if (!(desc instanceof SleighLanguageDescription)) {
|
||||
if (!(desc instanceof SleighLanguageDescription sld)) {
|
||||
return List.of();
|
||||
}
|
||||
SleighLanguageDescription sld = (SleighLanguageDescription) desc;
|
||||
ResourceFile slaFile = sld.getSlaFile();
|
||||
|
||||
List<LanguageID> result = new ArrayList<>();
|
||||
LanguageService langServ = DefaultLanguageService.getLanguageService();
|
||||
for (LanguageDescription altDesc : langServ.getLanguageDescriptions(false)) {
|
||||
if (!(altDesc instanceof SleighLanguageDescription)) {
|
||||
continue;
|
||||
if (altDesc instanceof SleighLanguageDescription altSld &&
|
||||
sld.isSameSleighLanguageFile(altSld) && sld.getEndian() == altSld.getEndian()) {
|
||||
result.add(altSld.getLanguageID());
|
||||
}
|
||||
SleighLanguageDescription altSld = (SleighLanguageDescription) altDesc;
|
||||
if (!altSld.getSlaFile().equals(slaFile)) {
|
||||
continue;
|
||||
}
|
||||
if (altSld.getEndian() != sld.getEndian()) {
|
||||
// Memory endian, not necessarily instruction endian
|
||||
continue;
|
||||
}
|
||||
result.add(altSld.getLanguageID());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import db.DBRecord;
|
||||
import generic.jar.ResourceFile;
|
||||
import ghidra.app.plugin.processors.sleigh.SleighLanguageDescription;
|
||||
import ghidra.app.util.PseudoInstruction;
|
||||
import ghidra.framework.data.OpenMode;
|
||||
import ghidra.lifecycle.Internal;
|
||||
@@ -304,7 +305,7 @@ public class DBTraceGuestPlatform extends DBAnnotatedObject
|
||||
private static ResourceFile getSlaFile(Language language) {
|
||||
SleighLanguageDescription desc =
|
||||
(SleighLanguageDescription) language.getLanguageDescription();
|
||||
return desc.getSlaFile();
|
||||
return desc.getLanguageFile().getSlaFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user