diff options
author | Kartik Agaram <vc@akkartik.com> | 2019-07-18 22:57:48 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2019-07-18 23:24:49 -0700 |
commit | 8da4c8c3006c7d60d92a951a2a096449dc398e68 (patch) | |
tree | 27a77c1659f6ea05c3d88fd06c24fc9ad0fd4780 /subx/apps | |
parent | 5030d67c85f63fc09ee506a90394c50f2db4f3be (diff) | |
download | mu-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-x | subx/apps/survey | bin | 41174 -> 41196 bytes | |||
-rw-r--r-- | subx/apps/survey.subx | 10 |
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: |