diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/GccExceptionAnalyzer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/GccExceptionAnalyzer.java index 51658f0ce5..fabac226e0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/GccExceptionAnalyzer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/GccExceptionAnalyzer.java @@ -175,18 +175,15 @@ public class GccExceptionAnalyzer extends AbstractAnalyzer { List regions = ehframeSection.analyze(fdeTableCount); AddressSet ehProtected = new AddressSet(); - + monitor.initialize(getCallSiteRecordCount(regions), "Marking up Call Site records"); for (RegionDescriptor region : regions) { - - monitor.checkCancelled(); ehProtected.add(region.getRange()); LSDACallSiteTable callSiteTable = region.getCallSiteTable(); if (callSiteTable != null) { - // Process this table's call site records. for (LSDACallSiteRecord cs : callSiteTable.getCallSiteRecords()) { - monitor.checkCancelled(); + monitor.increment(); processCallSiteRecord(program, ehProtected, region, cs); } } @@ -199,6 +196,17 @@ public class GccExceptionAnalyzer extends AbstractAnalyzer { } } + private int getCallSiteRecordCount(List regions) { + int total = 0; + for (RegionDescriptor region : regions) { + LSDACallSiteTable callSiteTable = region.getCallSiteTable(); + if (callSiteTable != null) { + total += callSiteTable.getCallSiteRecords().size(); + } + } + return total; + } + private void processCallSiteRecord(Program program, AddressSet ehProtected, RegionDescriptor region, LSDACallSiteRecord cs) { AddressRange callSite = cs.getCallSite();