From 8da4c8c3006c7d60d92a951a2a096449dc398e68 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Thu, 18 Jul 2019 22:57:48 -0700 Subject: [PATCH] 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. --- subx/apps/survey | Bin 41174 -> 41196 bytes subx/apps/survey.subx | 10 +++++++++- subx/examples/ex6.subx | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/subx/apps/survey b/subx/apps/survey index 61e2f9747daf00f8d84e72e5fc6b2b806a104c37..92da0e6be37ad073169cd9a13b648f9f0c088057 100755 GIT binary patch literal 41196 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 OSj*|hY1xyDFaHOUn>!u= diff --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: diff --git a/subx/examples/ex6.subx b/subx/examples/ex6.subx index a90f11df..d690d378 100644 --- a/subx/examples/ex6.subx +++ b/subx/examples/ex6.subx @@ -17,6 +17,7 @@ Entry: # . initialize X (location to write result to) b9/copy-to-ECX X/imm32 # . initialize Size +# HERE 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 2/r32/EDX Size/disp32 . # copy *Size to EDX # . syscall b8/copy-to-EAX 4/imm32/write