From 290e039e8b2b553fddfa3d9fc7d390541c0893c9 Mon Sep 17 00:00:00 2001
From: Dan <46821332+nsadeveloper789@users.noreply.github.com>
Date: Fri, 20 Aug 2021 14:36:39 -0400
Subject: [PATCH 1/3] GP-1226: Attempting to make missing prototypes in trace
less disruptive
---
.../ghidra/trace/database/listing/DBTraceInstruction.java | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstruction.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstruction.java
index f7e1db5dfd..6812ecf3a5 100644
--- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstruction.java
+++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstruction.java
@@ -40,6 +40,7 @@ import ghidra.trace.model.listing.TraceInstruction;
import ghidra.trace.model.symbol.TraceReference;
import ghidra.trace.util.*;
import ghidra.util.LockHold;
+import ghidra.util.Msg;
import ghidra.util.database.DBCachedObjectStore;
import ghidra.util.database.DBObjectColumn;
import ghidra.util.database.annot.*;
@@ -139,8 +140,10 @@ public class DBTraceInstruction extends AbstractDBTraceCodeUnit> FLOWOVERRIDE_SHIFT];
From 0e93b3a865beb0d4f77bcb190ec27a244a673f73 Mon Sep 17 00:00:00 2001
From: Dan <46821332+nsadeveloper789@users.noreply.github.com>
Date: Fri, 20 Aug 2021 16:01:55 -0400
Subject: [PATCH 2/3] GP-1215: Added events for datatype settings changes in
DBTrace
---
.../database/listing/DBTraceDataAdapter.java | 171 +++++++++++-------
.../database/program/DBTraceProgramView.java | 15 +-
.../main/java/ghidra/trace/model/Trace.java | 2 +
3 files changed, 126 insertions(+), 62 deletions(-)
diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceDataAdapter.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceDataAdapter.java
index e1d5f36262..8cb156ba89 100644
--- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceDataAdapter.java
+++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceDataAdapter.java
@@ -24,6 +24,7 @@ import ghidra.program.model.symbol.RefType;
import ghidra.program.model.symbol.SourceType;
import ghidra.trace.database.data.DBTraceDataSettingsOperations;
import ghidra.trace.database.symbol.DBTraceReference;
+import ghidra.trace.model.Trace.TraceCodeChangeType;
import ghidra.trace.model.listing.TraceData;
import ghidra.trace.model.symbol.TraceReference;
import ghidra.trace.util.*;
@@ -38,150 +39,198 @@ public interface DBTraceDataAdapter extends DBTraceCodeUnitAdapter, DataAdapterM
@Override
default TraceReference[] getValueReferences() {
- return (TraceReference[]) DataAdapterMinimal.super.getValueReferences();
+ try (LockHold hold = getTrace().lockRead()) {
+ return (TraceReference[]) DataAdapterMinimal.super.getValueReferences();
+ }
}
@Override
default void addValueReference(Address refAddr, RefType type) {
- getTrace().getReferenceManager()
- .addMemoryReference(getLifespan(), getAddress(), refAddr,
- type, SourceType.USER_DEFINED, DATA_OP_INDEX);
+ try (LockHold hold = getTrace().lockWrite()) {
+ getTrace().getReferenceManager()
+ .addMemoryReference(getLifespan(), getAddress(), refAddr,
+ type, SourceType.USER_DEFINED, DATA_OP_INDEX);
+ }
}
@Override
default void removeValueReference(Address refAddr) {
- DBTraceReference ref = getTrace().getReferenceManager()
- .getReference(getStartSnap(),
- getAddress(), refAddr, DATA_OP_INDEX);
- if (ref == null) {
- return;
+ try (LockHold hold = getTrace().lockWrite()) {
+ DBTraceReference ref = getTrace().getReferenceManager()
+ .getReference(getStartSnap(),
+ getAddress(), refAddr, DATA_OP_INDEX);
+ if (ref == null) {
+ return;
+ }
+ ref.delete();
}
- ref.delete();
}
DBTraceDataSettingsOperations getSettingsSpace(boolean createIfAbsent);
@Override
default void setLong(String name, long value) {
- getSettingsSpace(true).setLong(getLifespan(), getAddress(), name, value);
+ try (LockHold hold = getTrace().lockWrite()) {
+ getSettingsSpace(true).setLong(getLifespan(), getAddress(), name, value);
+ }
+ getTrace().setChanged(new TraceChangeRecord<>(
+ TraceCodeChangeType.DATA_TYPE_SETTINGS_CHANGED, getTraceSpace(), this.getBounds(), null,
+ null));
}
@Override
default Long getLong(String name) {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space != null) {
- Long value = space.getLong(getStartSnap(), getAddress(), name);
- if (value != null) {
- return value;
+ try (LockHold hold = getTrace().lockRead()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space != null) {
+ Long value = space.getLong(getStartSnap(), getAddress(), name);
+ if (value != null) {
+ return value;
+ }
}
+ Settings defaultSettings = getDefaultSettings();
+ return defaultSettings == null ? null : defaultSettings.getLong(name);
}
- Settings defaultSettings = getDefaultSettings();
- return defaultSettings == null ? null : defaultSettings.getLong(name);
}
@Override
default void setString(String name, String value) {
- getSettingsSpace(true).setString(getLifespan(), getAddress(), name, value);
+ try (LockHold hold = getTrace().lockWrite()) {
+ getSettingsSpace(true).setString(getLifespan(), getAddress(), name, value);
+ }
+ getTrace().setChanged(new TraceChangeRecord<>(
+ TraceCodeChangeType.DATA_TYPE_SETTINGS_CHANGED, getTraceSpace(), this.getBounds(), null,
+ null));
}
@Override
default String getString(String name) {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space != null) {
- String value = space.getString(getStartSnap(), getAddress(), name);
- if (value != null) {
- return value;
+ try (LockHold hold = getTrace().lockRead()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space != null) {
+ String value = space.getString(getStartSnap(), getAddress(), name);
+ if (value != null) {
+ return value;
+ }
}
+ Settings defaultSettings = getDefaultSettings();
+ return defaultSettings == null ? null : defaultSettings.getString(name);
}
- Settings defaultSettings = getDefaultSettings();
- return defaultSettings == null ? null : defaultSettings.getString(name);
}
@Override
default void setByteArray(String name, byte[] value) {
- getSettingsSpace(true).setBytes(getLifespan(), getAddress(), name, value);
+ try (LockHold hold = getTrace().lockWrite()) {
+ getSettingsSpace(true).setBytes(getLifespan(), getAddress(), name, value);
+ }
+ getTrace().setChanged(new TraceChangeRecord<>(
+ TraceCodeChangeType.DATA_TYPE_SETTINGS_CHANGED, getTraceSpace(), this.getBounds(), null,
+ null));
}
@Override
default byte[] getByteArray(String name) {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space != null) {
- byte[] value = space.getBytes(getStartSnap(), getAddress(), name);
- if (value != null) {
- return value;
+ try (LockHold hold = getTrace().lockRead()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space != null) {
+ byte[] value = space.getBytes(getStartSnap(), getAddress(), name);
+ if (value != null) {
+ return value;
+ }
}
+ Settings defaultSettings = getDefaultSettings();
+ return defaultSettings == null ? null : defaultSettings.getByteArray(name);
}
- Settings defaultSettings = getDefaultSettings();
- return defaultSettings == null ? null : defaultSettings.getByteArray(name);
}
@Override
default void setValue(String name, Object value) {
- getSettingsSpace(true).setValue(getLifespan(), getAddress(), name, value);
+ try (LockHold hold = getTrace().lockWrite()) {
+ getSettingsSpace(true).setValue(getLifespan(), getAddress(), name, value);
+ }
+ getTrace().setChanged(new TraceChangeRecord<>(
+ TraceCodeChangeType.DATA_TYPE_SETTINGS_CHANGED, getTraceSpace(), this.getBounds(), null,
+ null));
}
@Override
default Object getValue(String name) {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space != null) {
- Object value = space.getValue(getStartSnap(), getAddress(), name);
- if (value != null) {
- return value;
+ try (LockHold hold = getTrace().lockRead()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space != null) {
+ Object value = space.getValue(getStartSnap(), getAddress(), name);
+ if (value != null) {
+ return value;
+ }
}
+ Settings defaultSettings = getDefaultSettings();
+ return defaultSettings == null ? null : defaultSettings.getValue(name);
}
- Settings defaultSettings = getDefaultSettings();
- return defaultSettings == null ? null : defaultSettings.getValue(name);
}
@Override
default void clearSetting(String name) {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space == null) {
- return;
+ try (LockHold hold = getTrace().lockWrite()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space == null) {
+ return;
+ }
+ space.clear(getLifespan(), getAddress(), name);
}
- space.clear(getLifespan(), getAddress(), name);
+ getTrace().setChanged(new TraceChangeRecord<>(
+ TraceCodeChangeType.DATA_TYPE_SETTINGS_CHANGED, getTraceSpace(), this.getBounds(), null,
+ null));
}
@Override
default void clearAllSettings() {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space == null) {
- return;
+ try (LockHold hold = getTrace().lockWrite()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space == null) {
+ return;
+ }
+ space.clear(getLifespan(), getAddress(), null);
}
- space.clear(getLifespan(), getAddress(), null);
+ getTrace().setChanged(new TraceChangeRecord<>(
+ TraceCodeChangeType.DATA_TYPE_SETTINGS_CHANGED, getTraceSpace(), this.getBounds(), null,
+ null));
}
@Override
default String[] getNames() {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space == null) {
- return EMPTY_STRING_ARRAY;
+ try (LockHold hold = getTrace().lockRead()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space == null) {
+ return EMPTY_STRING_ARRAY;
+ }
+ Collection names = space.getSettingNames(getLifespan(), getAddress());
+ return names.toArray(new String[names.size()]);
}
- Collection names = space.getSettingNames(getLifespan(), getAddress());
- return names.toArray(new String[names.size()]);
}
@Override
default boolean isEmpty() {
- DBTraceDataSettingsOperations space = getSettingsSpace(false);
- if (space == null) {
- return true;
+ try (LockHold hold = getTrace().lockRead()) {
+ DBTraceDataSettingsOperations space = getSettingsSpace(false);
+ if (space == null) {
+ return true;
+ }
+ return space.isEmpty(getLifespan(), getAddress());
}
- return space.isEmpty(getLifespan(), getAddress());
}
@Override
default T getSettingsDefinition(
Class settingsDefinitionClass) {
- try (LockHold hold = LockHold.lock(getTrace().getReadWriteLock().readLock())) {
+ try (LockHold hold = getTrace().lockRead()) {
return DataAdapterFromSettings.super.getSettingsDefinition(settingsDefinitionClass);
}
}
@Override
default boolean hasMutability(int mutabilityType) {
- try (LockHold hold = LockHold.lock(getTrace().getReadWriteLock().readLock())) {
+ try (LockHold hold = getTrace().lockRead()) {
return DataAdapterFromSettings.super.hasMutability(mutabilityType);
}
}
diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java
index 86bea1494a..d9077ccc6f 100644
--- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java
+++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java
@@ -109,6 +109,8 @@ public class DBTraceProgramView implements TraceProgramView {
listenFor(TraceCodeChangeType.REMOVED, this::codeRemoved);
listenFor(TraceCodeChangeType.FRAGMENT_CHANGED, this::codeFragmentChanged);
listenFor(TraceCodeChangeType.DATA_TYPE_REPLACED, this::codeDataTypeReplaced);
+ listenFor(TraceCodeChangeType.DATA_TYPE_SETTINGS_CHANGED,
+ this::codeDataTypeSettingsChanged);
listenFor(TraceCommentChangeType.EOL_CHANGED, this::commentEolChanged);
listenFor(TraceCommentChangeType.PLATE_CHANGED, this::commentPlateChanged);
@@ -330,10 +332,21 @@ public class DBTraceProgramView implements TraceProgramView {
if (queues == null) {
return;
}
- queues.fireEvent(new ProgramChangeRecord(ChangeManager.DOCR_CODE_REPLACED,
+ queues.fireEvent(new ProgramChangeRecord(ChangeManager.DOCR_DATA_TYPE_REPLACED,
range.getX1(), range.getX2(), null, null, null));
}
+ private void codeDataTypeSettingsChanged(TraceAddressSpace space,
+ TraceAddressSnapRange range) {
+ DomainObjectEventQueues queues = isVisible(space, range);
+ if (queues == null) {
+ return;
+ }
+ // Yes, x1 twice
+ queues.fireEvent(new ProgramChangeRecord(ChangeManager.DOCR_DATA_TYPE_SETTING_CHANGED,
+ range.getX1(), range.getX1(), null, null, null));
+ }
+
private void commentChanged(int docrType, TraceAddressSpace space,
TraceAddressSnapRange range,
String oldValue, String newValue) {
diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/Trace.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/Trace.java
index 1f0dc98802..3b524d2931 100644
--- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/Trace.java
+++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/Trace.java
@@ -106,6 +106,8 @@ public interface Trace extends DataTypeManagerDomainObject {
// Long is data type ID
public static final TraceCodeChangeType DATA_TYPE_REPLACED =
new TraceCodeChangeType<>();
+ public static final TraceCodeChangeType DATA_TYPE_SETTINGS_CHANGED =
+ new TraceCodeChangeType<>();
}
public static final class TraceCommentChangeType
From 4bfb1d53ddfe6f9a327591f8562ad1b3c4d3b5e3 Mon Sep 17 00:00:00 2001
From: Ryan Kurtz
Date: Tue, 24 Aug 2021 11:33:38 -0400
Subject: [PATCH 3/3] GP-1242: Updating JDK download links
---
DevGuide.md | 6 +++---
GhidraDocs/InstallationGuide.html | 4 ++--
README.md | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/DevGuide.md b/DevGuide.md
index addc98bdcd..f90038fe90 100644
--- a/DevGuide.md
+++ b/DevGuide.md
@@ -30,11 +30,11 @@ This guide includes instructions for obtaining many of these at the relevant ste
You may not need all of these, depending on which portions you are building or developing.
#### At minimum you will need all of the following
* Java JDK 11 (64-bit) - Free long term support (LTS) versions of JDK 11 are provided by:
- - AdoptOpenJDK
- - https://adoptopenjdk.net/releases.html?variant=openjdk11&jvmVariant=hotspot
+ - Adoptium Temurin
+ - https://adoptium.net/releases.html?variant=openjdk11&jvmVariant=hotspot
- Amazon Corretto
- https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
-* Gradle 6.0 or later - We use version 6.9, and tested with up to 7.0.1.
+* Gradle 6 or 7
- https://gradle.org/releases/
* A C/C++ compiler - We use GCC on Linux, Xcode (Clang) on macOS, and Visual Studio (2017 or later) on Windows.
- https://gcc.gnu.org/
diff --git a/GhidraDocs/InstallationGuide.html b/GhidraDocs/InstallationGuide.html
index 84dfd1fb84..7ea20a8da2 100644
--- a/GhidraDocs/InstallationGuide.html
+++ b/GhidraDocs/InstallationGuide.html
@@ -86,8 +86,8 @@ Ghidra team if you have a specific need.
Free long term support (LTS) versions of JDK 11 are provided by: