diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java index 54115d3abf..de68519eb7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java @@ -225,14 +225,13 @@ public class MemoryBlockUtils { block = program.getMemory().createInitializedBlock(name, start, fileBytes, offset, length, isOverlay); } - catch (MemoryConflictException e) { - block = program.getMemory().createInitializedBlock(name, start, fileBytes, offset, - length, true); + catch (MemoryConflictException | DuplicateNameException e) { + block = createBlockNoDuplicateName(program, name, start, fileBytes, offset, length); log.appendMsg("Conflict attempting to create memory block: " + name + " at address " + start.toString() + " Created block in new overlay instead"); } } - catch (LockException | DuplicateNameException | MemoryConflictException e) { + catch (LockException | MemoryConflictException e) { throw new RuntimeException(e); } @@ -241,6 +240,22 @@ public class MemoryBlockUtils { return block; } + private static MemoryBlock createBlockNoDuplicateName(Program program, String blockName, + Address start, FileBytes fileBytes, long offset, long length) + throws LockException, MemoryConflictException, AddressOverflowException { + int count = 1; + String name = blockName; + while (true) { + try { + return program.getMemory().createInitializedBlock(name, start, fileBytes, offset, + length, true); + } + catch (DuplicateNameException e) { + name = blockName + "_" + count++; + } + } + } + /** * Creates a new initialized block in memory using the bytes from the given input stream. * If there is a conflict when creating this block (some other block occupies at least some diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java index 69cc915f9a..4dbf12095e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java @@ -139,7 +139,7 @@ public abstract class AbstractLibrarySupportLoader extends AbstractProgramLoader } @Override - public String validateOptions(ByteProvider provider, LoadSpec loadSpec, List