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.
This commit is contained in:
parent
5030d67c85
commit
8da4c8c300
BIN
subx/apps/survey
BIN
subx/apps/survey
Binary file not shown.
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue