diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFMacroEnumCreator.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFMacroEnumCreator.java index 57f6d41a52..87f6b3f8e1 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFMacroEnumCreator.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFMacroEnumCreator.java @@ -69,15 +69,20 @@ public class DWARFMacroEnumCreator { monitor.increment(); monitor.setMessage("DWARF: Processing Macros for " + cu.getName()); Map macrosToValues = new HashMap<>(); + Set visitedHeaders = new HashSet<>(); createEnums(cu.getMacros(), macrosToValues, catPath, includeCommandLineDefines, - monitor); + monitor, visitedHeaders); } } private void createEnums(DWARFMacroHeader macroHeader, Map macrosToValues, CategoryPath catPath, - boolean includeCommandLineDefines, TaskMonitor monitor) + boolean includeCommandLineDefines, TaskMonitor monitor, + Set visitedHeaders) throws IOException, CancelledException { + if (!visitedHeaders.add(macroHeader.getEntriesStartOffset())) { + return; + } DataTypeManager dtManager = dprog.getGhidraProgram().getDataTypeManager(); DWARFImportSummary importSummary = dprog.getImportSummary(); for (DWARFMacroInfoEntry macroEntry : macroHeader.getEntries()) { @@ -119,7 +124,7 @@ public class DWARFMacroEnumCreator { break; case DWARFMacroImport importMacro: createEnums(importMacro.getImportedMacroHeader(), macrosToValues, - catPath, includeCommandLineDefines, monitor); + catPath, includeCommandLineDefines, monitor, visitedHeaders); break; default: break;