From 004712026b0fdcdfcb67dff8a1f7d70dc979c9ff Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Thu, 17 Apr 2025 18:18:53 +0000 Subject: [PATCH] GP-5523: Allow tool-wide configuration of radix for displaying trace times. --- .../api/tracemgr/DebuggerCoordinates.java | 5 +- .../service/tracermi/TraceRmiHandler.java | 5 +- .../DebuggerTimePlugin.html | 9 ++ .../memview/DebuggerMemviewTraceListener.java | 39 +++++--- .../core/debug/gui/memview/MemoryBox.java | 28 +++++- .../debug/gui/memview/MemviewMapModel.java | 78 ++++++++------- .../core/debug/gui/memview/MemviewPanel.java | 11 ++- .../debug/gui/memview/MemviewProvider.java | 46 +++++---- .../core/debug/gui/memview/MemviewTable.java | 4 + .../gui/model/AbstractQueryTableModel.java | 10 ++ .../columns/TracePathLastLifespanColumn.java | 33 +++++-- .../model/columns/TraceValueLifeColumn.java | 24 +++-- .../pcode/DebuggerPcodeStepperProvider.java | 55 ++++++++++- .../gui/time/DebuggerSnapshotTablePanel.java | 65 ++++++++++-- .../debug/gui/time/DebuggerTimeProvider.java | 98 ++++++++++++++++++- .../gui/time/DebuggerTimeSelectionDialog.java | 18 ++-- .../core/debug/gui/time/SnapshotRow.java | 17 ++-- .../TimeTypeOverviewColorService.java | 11 ++- .../gui/trace/DebuggerTraceTabPanel.java | 6 +- .../trace/database/time/DBTraceSnapshot.java | 5 +- .../database/time/DBTraceTimeManager.java | 34 +++++++ .../java/ghidra/trace/model/Lifespan.java | 4 +- .../trace/model/time/TraceTimeManager.java | 25 +++++ .../model/time/schedule/AbstractStep.java | 17 +++- .../trace/model/time/schedule/PatchStep.java | 17 ++-- .../trace/model/time/schedule/Sequence.java | 26 ++--- .../trace/model/time/schedule/SkipStep.java | 9 +- .../trace/model/time/schedule/Step.java | 17 ++-- .../trace/model/time/schedule/TickStep.java | 9 +- .../model/time/schedule/TraceSchedule.java | 95 +++++++++++++++--- .../time/schedule/TraceScheduleTest.java | 17 +++- .../src/main/java/generic/End.java | 51 +++++----- .../java/ghidra/util/database/FieldSpan.java | 11 ++- .../java/ghidra/util/database/KeySpan.java | 8 +- .../table/DemoSpanCellRendererTest.java | 8 +- .../widgets/table/GTableCellRenderer.java | 8 +- .../Emulation/src/main/java/generic/Span.java | 66 ++++++++++--- .../src/main/java/generic/ULongSpan.java | 8 +- 38 files changed, 751 insertions(+), 246 deletions(-) diff --git a/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java b/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java index fb71267384..0224f2de34 100644 --- a/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java +++ b/Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java @@ -39,6 +39,7 @@ import ghidra.trace.model.thread.TraceObjectThread; import ghidra.trace.model.thread.TraceThread; import ghidra.trace.model.time.TraceSnapshot; import ghidra.trace.model.time.schedule.TraceSchedule; +import ghidra.trace.model.time.schedule.TraceSchedule.TimeRadix; import ghidra.util.Msg; import ghidra.util.NotOwnerException; @@ -712,7 +713,7 @@ public class DebuggerCoordinates { coordState.putLong(KEY_THREAD_KEY, thread.getKey()); } if (time != null) { - coordState.putString(KEY_TIME, time.toString()); + coordState.putString(KEY_TIME, time.toString(TimeRadix.DEC)); } if (frame != null) { coordState.putInt(KEY_FRAME, frame); @@ -785,7 +786,7 @@ public class DebuggerCoordinates { String timeSpec = coordState.getString(KEY_TIME, null); TraceSchedule time; try { - time = TraceSchedule.parse(timeSpec); + time = TraceSchedule.parse(timeSpec, TimeRadix.DEC); } catch (Exception e) { Msg.error(DebuggerCoordinates.class, diff --git a/Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiHandler.java b/Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiHandler.java index 3b91dc265f..6783a81851 100644 --- a/Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiHandler.java +++ b/Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiHandler.java @@ -63,6 +63,7 @@ import ghidra.trace.model.target.schema.TraceObjectSchema.SchemaName; import ghidra.trace.model.target.schema.XmlSchemaContext; import ghidra.trace.model.time.TraceSnapshot; import ghidra.trace.model.time.schedule.TraceSchedule; +import ghidra.trace.model.time.schedule.TraceSchedule.TimeRadix; import ghidra.util.*; import ghidra.util.exception.CancelledException; import ghidra.util.exception.DuplicateFileException; @@ -1166,8 +1167,8 @@ public class TraceRmiHandler extends AbstractTraceRmiConnection { TraceSnapshot snapshot = switch (req.getTimeCase()) { case TIME_NOT_SET -> throw new TraceRmiError("snap or time required"); case SNAP -> open.createSnapshot(req.getSnap().getSnap()); - case SCHEDULE -> open - .createSnapshot(TraceSchedule.parse(req.getSchedule().getSchedule())); + case SCHEDULE -> open.createSnapshot( + TraceSchedule.parse(req.getSchedule().getSchedule(), TimeRadix.DEC)); }; snapshot.setDescription(req.getDescription()); if (!"".equals(req.getDatetime())) { diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html index c8e7812b6c..a8f8beeaaa 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html @@ -101,5 +101,14 @@ emulated state into the trace's scratch space, which comprises all negative snaps. Some time-travel capable back ends may also write into scratch space. When this toggle is enabled, those scratch snapshots are hidden.
+ +These actions are available when a trace is active. It sets the display radix for snapshot + keys and time schedules throughout the tool. This is useful to match the display of + time coordinates with a back end that supports time travel. Notably, WinDbg TTD uses upper-case + hexadecimal for its event sequence numbers. Normally, the back end would set the UI's radix + automatically, but in case it does not, or if you'd like to override the radix, these actions + are available.