diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java
index 539537dd56..d8bd082c89 100644
--- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java
+++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java
@@ -306,11 +306,7 @@ class PrototypeManager {
///////////////////////////////////////////////////////
private void populatePrototypes() {
- if (program.isLanguageUpgradePending()) {
- return; // do not load prototypes prior to language upgrade
- }
try {
-
RecordIterator iter = protoAdapter.getRecords();
while (iter.hasNext()) {
DBRecord record = iter.next();
diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapter.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapter.java
index 6a3fbf8e52..24944c33d9 100644
--- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapter.java
+++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapter.java
@@ -29,23 +29,21 @@ import ghidra.util.task.TaskMonitor;
abstract class MemoryMapDBAdapter {
- static final int CURRENT_VERSION = MemoryMapDBAdapterV3.V3_VERSION;
-
static Schema BLOCK_SCHEMA = MemoryMapDBAdapterV3.V3_BLOCK_SCHEMA;
static Schema SUB_BLOCK_SCHEMA = MemoryMapDBAdapterV3.V3_SUB_BLOCK_SCHEMA;
- public static final int NAME_COL = MemoryMapDBAdapterV3.V3_NAME_COL;
- public static final int COMMENTS_COL = MemoryMapDBAdapterV3.V3_COMMENTS_COL;
- public static final int SOURCE_COL = MemoryMapDBAdapterV3.V3_SOURCE_COL;
- public static final int PERMISSIONS_COL = MemoryMapDBAdapterV3.V3_PERMISSIONS_COL;
- public static final int START_ADDR_COL = MemoryMapDBAdapterV3.V3_START_ADDR_COL;
- public static final int LENGTH_COL = MemoryMapDBAdapterV3.V3_LENGTH_COL;
- public static final int SEGMENT_COL = MemoryMapDBAdapterV3.V3_SEGMENT_COL;
+ static final int NAME_COL = MemoryMapDBAdapterV3.V3_NAME_COL;
+ static final int COMMENTS_COL = MemoryMapDBAdapterV3.V3_COMMENTS_COL;
+ static final int SOURCE_COL = MemoryMapDBAdapterV3.V3_SOURCE_COL;
+ static final int PERMISSIONS_COL = MemoryMapDBAdapterV3.V3_PERMISSIONS_COL;
+ static final int START_ADDR_COL = MemoryMapDBAdapterV3.V3_START_ADDR_COL;
+ static final int LENGTH_COL = MemoryMapDBAdapterV3.V3_LENGTH_COL;
+ static final int SEGMENT_COL = MemoryMapDBAdapterV3.V3_SEGMENT_COL;
- public static final int SUB_PARENT_ID_COL = MemoryMapDBAdapterV3.V3_SUB_PARENT_ID_COL;
- public static final int SUB_TYPE_COL = MemoryMapDBAdapterV3.V3_SUB_TYPE_COL;
- public static final int SUB_LENGTH_COL = MemoryMapDBAdapterV3.V3_SUB_LENGTH_COL;
- public static final int SUB_START_OFFSET_COL = MemoryMapDBAdapterV3.V3_SUB_START_OFFSET_COL;
+ static final int SUB_PARENT_ID_COL = MemoryMapDBAdapterV3.V3_SUB_PARENT_ID_COL;
+ static final int SUB_TYPE_COL = MemoryMapDBAdapterV3.V3_SUB_TYPE_COL;
+ static final int SUB_LENGTH_COL = MemoryMapDBAdapterV3.V3_SUB_LENGTH_COL;
+ static final int SUB_START_OFFSET_COL = MemoryMapDBAdapterV3.V3_SUB_START_OFFSET_COL;
/**
* Subblock record int data1 usage:
@@ -57,7 +55,7 @@ abstract class MemoryMapDBAdapter {
*
{@link UninitializedSubMemoryBlock} - (not used) 0
*
*/
- public static final int SUB_INT_DATA1_COL = MemoryMapDBAdapterV3.V3_SUB_INT_DATA1_COL;
+ static final int SUB_INT_DATA1_COL = MemoryMapDBAdapterV3.V3_SUB_INT_DATA1_COL;
/**
* Subblock record long data2 usage:
@@ -69,13 +67,13 @@ abstract class MemoryMapDBAdapter {
* {@link UninitializedSubMemoryBlock} - (not used) 0
*
*/
- public static final int SUB_LONG_DATA2_COL = MemoryMapDBAdapterV3.V3_SUB_LONG_DATA2_COL;
+ static final int SUB_LONG_DATA2_COL = MemoryMapDBAdapterV3.V3_SUB_LONG_DATA2_COL;
- public static final byte SUB_TYPE_BIT_MAPPED = MemoryMapDBAdapterV3.V3_SUB_TYPE_BIT_MAPPED;
- public static final byte SUB_TYPE_BYTE_MAPPED = MemoryMapDBAdapterV3.V3_SUB_TYPE_BYTE_MAPPED;
- public static final byte SUB_TYPE_BUFFER = MemoryMapDBAdapterV3.V3_SUB_TYPE_BUFFER;
- public static final byte SUB_TYPE_UNITIALIZED = MemoryMapDBAdapterV3.V3_SUB_TYPE_UNITIALIZED;
- public static final byte SUB_TYPE_FILE_BYTES = MemoryMapDBAdapterV3.V3_SUB_TYPE_FILE_BYTES;
+ static final byte SUB_TYPE_BIT_MAPPED = MemoryMapDBAdapterV3.V3_SUB_TYPE_BIT_MAPPED;
+ static final byte SUB_TYPE_BYTE_MAPPED = MemoryMapDBAdapterV3.V3_SUB_TYPE_BYTE_MAPPED;
+ static final byte SUB_TYPE_BUFFER = MemoryMapDBAdapterV3.V3_SUB_TYPE_BUFFER;
+ static final byte SUB_TYPE_UNITIALIZED = MemoryMapDBAdapterV3.V3_SUB_TYPE_UNITIALIZED;
+ static final byte SUB_TYPE_FILE_BYTES = MemoryMapDBAdapterV3.V3_SUB_TYPE_FILE_BYTES;
static MemoryMapDBAdapter getAdapter(DBHandle handle, int openMode, MemoryMapDB memMap,
TaskMonitor monitor) throws VersionException, IOException {
diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java
index 6f6e48c5b3..fcb4fd7ef9 100644
--- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java
+++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java
@@ -35,22 +35,30 @@ class MemoryMapDBAdapterV0 extends MemoryMapDBAdapter {
private final static int VERSION = 0;
- protected final static int V0_NAME_COL = 0;
- protected final static int V0_BUFFER_ID_COL = 1;
- protected final static int V0_COMMENTS_COL = 2;
- protected final static int V0_DESCRIPTION_COL = 3;
- protected final static int V0_SOURCE_NAME_COL = 4;
- protected final static int V0_SOURCE_OFFSET_COL = 5;
- protected final static int V0_IS_READ_COL = 6;
- protected final static int V0_IS_WRITE_COL = 7;
- protected final static int V0_IS_EXECUTE_COL = 8;
- protected final static int V0_START_ADDR_COL = 9;
- protected final static int V0_LENGTH_COL = 10;
- protected final static int V0_TYPE_COL = 11;
- protected final static int V0_BASE_ADDR_COL = 12;
- protected final static int V0_SOURCE_BLOCK_ID_COL = 13;
- protected final static int V0_SEGMENT_COL = 14; // added in version 1
+ private final static int V0_NAME_COL = 0;
+ private final static int V0_BUFFER_ID_COL = 1;
+ private final static int V0_COMMENTS_COL = 2;
+ //private final static int V0_DESCRIPTION_COL = 3; // deprecated/ignored column
+ private final static int V0_SOURCE_NAME_COL = 4;
+ //private final static int V0_SOURCE_OFFSET_COL = 5; // deprecated/ignored column
+ private final static int V0_IS_READ_COL = 6;
+ private final static int V0_IS_WRITE_COL = 7;
+ private final static int V0_IS_EXECUTE_COL = 8;
+ private final static int V0_START_ADDR_COL = 9;
+ private final static int V0_LENGTH_COL = 10;
+ private final static int V0_TYPE_COL = 11;
+ private final static int V0_BASE_ADDR_COL = 12;
+ //private final static int V0_SOURCE_BLOCK_ID_COL = 13; // deprecated/ignored column
+ private final static int V0_SEGMENT_COL = 14; // added in version 1
+ // Enumerated block type values
+ private static final int INITIALIZED = 0;
+ private static final int UNINITIALIZED = 1;
+ private static final int BIT_MAPPED = 2;
+ private static final int BYTE_MAPPED = 4;
+
+// The following schema definition documents the schema used in version 0
+//
// private Schema SCHEMA = new Schema(0, "Key",
// new Class[] {StringField.class,
// IntField.class, StringField.class,
@@ -111,10 +119,10 @@ class MemoryMapDBAdapterV0 extends MemoryMapDBAdapter {
Address start = addrFactory.oldGetAddressFromLong(rec.getLongValue(V0_START_ADDR_COL));
long startAddr = addrMap.getKey(start, false);
long length = rec.getLongValue(V0_LENGTH_COL);
- long bufID = rec.getIntValue(V0_BUFFER_ID_COL);
+ int bufID = rec.getIntValue(V0_BUFFER_ID_COL);
int segment = 0;
if (expectedVersion == 1 && (start instanceof SegmentedAddress)) {
- segment = rec.getIntValue(V0_SEGMENT_COL);
+ segment = rec.getIntValue(V0_SEGMENT_COL); // introduced with V1
}
DBRecord blockRecord = BLOCK_SCHEMA.createRecord(key);
@@ -136,29 +144,29 @@ class MemoryMapDBAdapterV0 extends MemoryMapDBAdapter {
long overlayAddr = rec.getLongValue(V0_BASE_ADDR_COL);
overlayAddr = updateOverlayAddr(addrMap, addrFactory, overlayAddr, type);
- SubMemoryBlock subBlock = getSubBlock(memMap, bufID, subBlockRecord, type, overlayAddr);
+ SubMemoryBlock subBlock = getSubBlock(bufID, subBlockRecord, type, overlayAddr);
blocks.add(new MemoryBlockDB(this, blockRecord, Arrays.asList(subBlock)));
}
Collections.sort(blocks);
}
- private SubMemoryBlock getSubBlock(MemoryMapDB memMap, long bufID, DBRecord record, int type,
- long overlayAddr) throws IOException {
+ private SubMemoryBlock getSubBlock(int bufID, DBRecord record, int type, long overlayAddr)
+ throws IOException {
switch (type) {
- case MemoryMapDBAdapterV2.BIT_MAPPED:
+ case BIT_MAPPED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_BIT_MAPPED);
- record.setLongValue(MemoryMapDBAdapterV2.V2_OVERLAY_ADDR_COL, overlayAddr);
+ record.setLongValue(MemoryMapDBAdapter.SUB_LONG_DATA2_COL, overlayAddr);
return new BitMappedSubMemoryBlock(this, record);
- case MemoryMapDBAdapterV2.BYTE_MAPPED:
+ case BYTE_MAPPED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_BYTE_MAPPED);
- record.setLongValue(MemoryMapDBAdapterV2.V2_OVERLAY_ADDR_COL, overlayAddr);
+ record.setLongValue(MemoryMapDBAdapter.SUB_LONG_DATA2_COL, overlayAddr);
return new ByteMappedSubMemoryBlock(this, record);
- case MemoryMapDBAdapterV2.INITIALIZED:
+ case INITIALIZED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_BUFFER);
- record.setLongValue(SUB_LONG_DATA2_COL, bufID);
+ record.setIntValue(SUB_INT_DATA1_COL, bufID);
return new BufferSubMemoryBlock(this, record);
- case MemoryMapDBAdapterV2.UNINITIALIZED:
+ case UNINITIALIZED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_UNITIALIZED);
return new UninitializedSubMemoryBlock(this, record);
default:
@@ -168,7 +176,7 @@ class MemoryMapDBAdapterV0 extends MemoryMapDBAdapter {
private long updateOverlayAddr(AddressMap addrMap, AddressFactory addrFactory, long overlayAddr,
int type) {
- if (type == MemoryMapDBAdapterV2.BIT_MAPPED || type == MemoryMapDBAdapterV2.BYTE_MAPPED) {
+ if (type == BIT_MAPPED || type == BYTE_MAPPED) {
Address ov = addrFactory.oldGetAddressFromLong(overlayAddr);
overlayAddr = addrMap.getKey(ov, false);
}
@@ -239,7 +247,7 @@ class MemoryMapDBAdapterV0 extends MemoryMapDBAdapter {
@Override
MemoryMapDB getMemoryMap() {
- return null;
+ return memMap;
}
@Override
diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV1.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV1.java
index 97b2abba82..29e9bd54e9 100644
--- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV1.java
+++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV1.java
@@ -26,6 +26,8 @@ import ghidra.util.exception.VersionException;
class MemoryMapDBAdapterV1 extends MemoryMapDBAdapterV0 {
private final static int VERSION = 1;
+// The following schema definition documents the schema used in version 1
+//
// private Schema SCHEMA = new Schema(VERSION, "Key",
// new Class[] {StringField.class,
// IntField.class, StringField.class,
diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV2.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV2.java
index 45d54985bf..0a00e4912c 100644
--- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV2.java
+++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV2.java
@@ -30,30 +30,31 @@ import ghidra.util.exception.VersionException;
*/
class MemoryMapDBAdapterV2 extends MemoryMapDBAdapter {
private static final int V2_VERSION = 2;
- static final String V2_TABLE_NAME = "Memory Blocks";
+ private static final String V2_TABLE_NAME = "Memory Blocks";
- static final int V2_NAME_COL = 0;
- static final int V2_COMMENTS_COL = 1;
- static final int V2_SOURCE_COL = 2;
- static final int V2_PERMISSIONS_COL = 3;
- static final int V2_START_ADDR_COL = 4;
- static final int V2_BLOCK_TYPE_COL = 5;
- static final int V2_OVERLAY_ADDR_COL = 6;
- static final int V2_LENGTH_COL = 7;
- static final int V2_CHAIN_BUF_COL = 8;
- static final int V2_SEGMENT_COL = 9;
+ private static final int V2_NAME_COL = 0;
+ private static final int V2_COMMENTS_COL = 1;
+ private static final int V2_SOURCE_COL = 2;
+ private static final int V2_PERMISSIONS_COL = 3;
+ private static final int V2_START_ADDR_COL = 4;
+ private static final int V2_BLOCK_TYPE_COL = 5;
+ private static final int V2_OVERLAY_ADDR_COL = 6;
+ private static final int V2_LENGTH_COL = 7;
+ private static final int V2_CHAIN_BUF_COL = 8;
+ private static final int V2_SEGMENT_COL = 9;
- static final int INITIALIZED = 0;
- static final int UNINITIALIZED = 1;
- static final int BIT_MAPPED = 2;
- static final int BYTE_MAPPED = 4;
+ // Enumerated block type values
+ private static final int INITIALIZED = 0;
+ private static final int UNINITIALIZED = 1;
+ private static final int BIT_MAPPED = 2;
+ private static final int BYTE_MAPPED = 4;
private DBHandle handle;
private MemoryMapDB memMap;
private List blocks = new ArrayList<>();
-// The following schema definition documents the schema used in version 2No
+// The following schema definition documents the schema used in version 2
//
// static Schema BLOCK_SCHEMA = new Schema(CURRENT_VERSION, "Key",
// new Class[] { StringField.class, StringField.class, StringField.class, ByteField.class,
@@ -122,19 +123,19 @@ class MemoryMapDBAdapterV2 extends MemoryMapDBAdapter {
private SubMemoryBlock getSubBlock(int bufID, DBRecord record, int type, long overlayAddr)
throws IOException {
switch (type) {
- case MemoryMapDBAdapterV2.BIT_MAPPED:
+ case BIT_MAPPED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_BIT_MAPPED);
record.setLongValue(MemoryMapDBAdapter.SUB_LONG_DATA2_COL, overlayAddr);
return new BitMappedSubMemoryBlock(this, record);
- case MemoryMapDBAdapterV2.BYTE_MAPPED:
+ case BYTE_MAPPED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_BYTE_MAPPED);
record.setLongValue(MemoryMapDBAdapter.SUB_LONG_DATA2_COL, overlayAddr);
return new ByteMappedSubMemoryBlock(this, record);
- case MemoryMapDBAdapterV2.INITIALIZED:
+ case INITIALIZED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_BUFFER);
record.setIntValue(SUB_INT_DATA1_COL, bufID);
return new BufferSubMemoryBlock(this, record);
- case MemoryMapDBAdapterV2.UNINITIALIZED:
+ case UNINITIALIZED:
record.setByteValue(SUB_TYPE_COL, SUB_TYPE_UNITIALIZED);
return new UninitializedSubMemoryBlock(this, record);
default:
diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV3.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV3.java
index 3655865b5a..f6cb79360d 100644
--- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV3.java
+++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV3.java
@@ -32,30 +32,30 @@ import ghidra.util.exception.*;
* This version introduces the concept of sub memory blocks and FileBytes
*/
public class MemoryMapDBAdapterV3 extends MemoryMapDBAdapter {
- public static final int V3_VERSION = 3;
- public static final String TABLE_NAME = "Memory Blocks";
- public static final String SUB_BLOCK_TABLE_NAME = "Sub Memory Blocks";
+ private static final int V3_VERSION = 3;
+ private static final String TABLE_NAME = "Memory Blocks";
+ private static final String SUB_BLOCK_TABLE_NAME = "Sub Memory Blocks";
- public static final int V3_NAME_COL = 0;
- public static final int V3_COMMENTS_COL = 1;
- public static final int V3_SOURCE_COL = 2;
- public static final int V3_PERMISSIONS_COL = 3;
- public static final int V3_START_ADDR_COL = 4;
- public static final int V3_LENGTH_COL = 5;
- public static final int V3_SEGMENT_COL = 6;
+ static final int V3_NAME_COL = 0;
+ static final int V3_COMMENTS_COL = 1;
+ static final int V3_SOURCE_COL = 2;
+ static final int V3_PERMISSIONS_COL = 3;
+ static final int V3_START_ADDR_COL = 4;
+ static final int V3_LENGTH_COL = 5;
+ static final int V3_SEGMENT_COL = 6;
- public static final int V3_SUB_PARENT_ID_COL = 0;
- public static final int V3_SUB_TYPE_COL = 1;
- public static final int V3_SUB_LENGTH_COL = 2;
- public static final int V3_SUB_START_OFFSET_COL = 3;
- public static final int V3_SUB_INT_DATA1_COL = 4;
- public static final int V3_SUB_LONG_DATA2_COL = 5;
+ static final int V3_SUB_PARENT_ID_COL = 0;
+ static final int V3_SUB_TYPE_COL = 1;
+ static final int V3_SUB_LENGTH_COL = 2;
+ static final int V3_SUB_START_OFFSET_COL = 3;
+ static final int V3_SUB_INT_DATA1_COL = 4;
+ static final int V3_SUB_LONG_DATA2_COL = 5;
- public static final byte V3_SUB_TYPE_BIT_MAPPED = 0;
- public static final byte V3_SUB_TYPE_BYTE_MAPPED = 1;
- public static final byte V3_SUB_TYPE_BUFFER = 2;
- public static final byte V3_SUB_TYPE_UNITIALIZED = 3;
- public static final byte V3_SUB_TYPE_FILE_BYTES = 4;
+ static final byte V3_SUB_TYPE_BIT_MAPPED = 0;
+ static final byte V3_SUB_TYPE_BYTE_MAPPED = 1;
+ static final byte V3_SUB_TYPE_BUFFER = 2;
+ static final byte V3_SUB_TYPE_UNITIALIZED = 3;
+ static final byte V3_SUB_TYPE_FILE_BYTES = 4;
static Schema V3_BLOCK_SCHEMA = new Schema(V3_VERSION, "Key",
new Field[] { StringField.INSTANCE, StringField.INSTANCE, StringField.INSTANCE,
diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java
index 7a05e94784..55ae7fdc79 100644
--- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java
+++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java
@@ -1560,7 +1560,8 @@ public class SymbolManager implements SymbolTable, ManagerDB {
long parentId, SymbolType symType) {
// create a label history record
- if (symType == SymbolType.LABEL || symType == SymbolType.FUNCTION) {
+ if (!symbol.isDynamic() &&
+ (symType == SymbolType.LABEL || symType == SymbolType.FUNCTION)) {
createLabelHistoryRecord(addr, null, name, LabelHistory.REMOVE);
}