about summary refs log tree commit diff stats
path: root/subx/apps
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2019-07-18 22:57:48 -0700
committerKartik Agaram <vc@akkartik.com>2019-07-18 23:24:49 -0700
commit8da4c8c3006c7d60d92a951a2a096449dc398e68 (patch)
tree27a77c1659f6ea05c3d88fd06c24fc9ad0fd4780 /subx/apps
parent5030d67c85f63fc09ee506a90394c50f2db4f3be (diff)
downloadmu-8da4c8c3006c7d60d92a951a2a096449dc398e68.tar.gz
5416
Figured out what's going in with bug fourteen: displacement operands
aren't always used relative to the PC. Does this mean I need to track
instruction boundaries past pack? :'(

No, I just need different logic for labels in code vs data segments.

This was an interesting bug for reminding me of the difference between
the emulator-level trace and the application-level trace. The former has
1.5 million lines, while the latter has a dozen. Luckily, just dumping
the latter immediately made obvious what the issue was.

Though this experience does suggest some further ideas for debugging
tools:

  slice trace by line and phase
    slice trace by start and end label

  debug UI for SubX translator
    2D layout: rows = lines of code;  columns = translator phases
    each 'cell' in this layout contains a list of log lines
    shows what came in, what was emitted
    easily collapse any cell

These are domain-specific tools. Special-cased to the SubX translator
phases.
Diffstat (limited to 'subx/apps')
-rwxr-xr-xsubx/apps/surveybin41174 -> 41196 bytes
-rw-r--r--subx/apps/survey.subx10
2 files changed, 9 insertions, 1 deletions
diff --git a/subx/apps/survey b/subx/apps/survey
index 61e2f974..92da0e6b 100755
--- a/subx/apps/survey
+++ b/subx/apps/survey
Binary files differdiff --git a/subx/apps/survey.subx b/subx/apps/survey.subx
index d868132a..0f5428bb 100644
--- a/subx/apps/survey.subx
+++ b/subx/apps/survey.subx
@@ -79,7 +79,7 @@ Entry:
     eb/jump  $main:end/disp8
 $run-main:
     # - otherwise convert stdin
-    # return convert(Stdin, Stdout)
+    # convert(Stdin, Stdout)
     # . . push args
     68/push  Stdout/imm32
     68/push  Stdin/imm32
@@ -87,6 +87,14 @@ $run-main:
     e8/call  convert/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
+    # . write-stream(2/stderr, Trace-stream)
+    # . . push args
+    ff          6/subop/push        0/mod/indirect  5/rm32/.disp32            .             .           .           Trace-stream/disp32               # push *Trace-stream
+    68/push  2/imm32/stderr
+    # . . call
+    e8/call  write-stream/disp32
+    # . . discard args
+    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
     # . syscall(exit, 0)
     bb/copy-to-EBX  0/imm32
 $main:end: