about summary refs log tree commit diff stats
path: root/subx/apps/survey.subx
Commit message (Collapse)AuthorAgeFilesLines
* 5404 - subx/examples/ex1 now translatingKartik Agaram2019-07-151-10/+44
| | | | | | | | | | | | | | | | | | | The result isn't an identical binary to before, and it segfaults when run. But it's bugfix seven. A couple of places where we make .subx files a little more strict: a) All .subx files must define a data segment. Even if they have no data. b) All .subx files must define an `Entry` label for the binary to start at. Earlier we used to default to the start of the code label. That's not too hard to add; we'd just need to: i) rename `get` to `get-or-abort` ii) clone a third variant of `get-or-insert` called `get` that returns null if the key is not found. iii) use `get` rather than `get-or-abort` when looking up the `Entry` label.
* .Kartik Agaram2019-07-131-1/+0
|
* .Kartik Agaram2019-07-131-132/+132
| | | | Clean up.
* survey.subx now passing all testsKartik Agaram2019-07-131-8/+34
|
* `test-convert-computes-addresses` bugfix sixKartik Agaram2019-07-131-72/+135
| | | | | | | | | | | | | | | map of how far we've gotten by now (functions with '*' independently tested): ✓ compute-offsets* ✓ compute-addresses* ✓ emit-output ✓ emit-headers ✓ emit-elf-header ✓ emit-hex-array* ✓ first emit-elf-program-header-entry ✓ emit-hex-array* ? second emit-elf-program-header-entry emit-hex-array* emit-segments*
* fixed fifth bug, hit sixthKartik Agaram2019-07-131-5/+6
|
* .Kartik Agaram2019-07-131-170/+0
| | | | Clean up.
* fixed fourth bug, hit fifthKartik Agaram2019-07-131-50/+289
|
* fixed third bug, hit fourthKartik Agaram2019-07-131-1/+1
|
* .Kartik Agaram2019-07-131-189/+0
| | | | Clean up.
* fixed second bug, hit thirdKartik Agaram2019-07-131-2/+289
|
* .Kartik Agaram2019-07-131-2/+2
|
* fixed one bug, hit anotherKartik Agaram2019-07-121-58/+87
| | | | | | | | | | I carefully logged the segment a label is declared in but forgot to actually save it in the table. This has been a theoretic concern for some time, but I've never seen it actually happen until now. SubX is just too low level. Now I get past the first two phases but code generation fails to find the 'Entry' label.
* .Kartik Agaram2019-07-121-2/+55
| | | | | | | | Snapshot at a random moment, showing a new debugging trick: hacking on the C++ level to dump memory contents on specific labels. For some reason label 'x' doesn't have a segment assigned by the time we get to compute-addresses.
* compute-offsets test now passingKartik Agaram2019-07-121-49/+97
| | | | The final integration test-convert-computes-addresses is still failing.
* the pseudocode is pretty long, so add an outlineKartik Agaram2019-07-121-2/+11
|
* rearrange compute-offsets casesKartik Agaram2019-07-121-73/+74
| | | | | Now they're in the order you expect to see them at runtime: first you see a segment header, then you see labels.
* .Kartik Agaram2019-07-121-26/+26
| | | | move trace dump to before checks
* .Kartik Agaram2019-07-111-1/+0
|
* one failure remaining in test-compute-offsetsKartik Agaram2019-07-111-123/+291
| | | | | | | | | 'curr-segment-name' is now a string, and it's stored in a register rather than a global. Paradoxically, this leaks *less* than before. Before, every call to `get-or-insert-slice` leaked memory. Now we leak one string for every new segment. Which is trivial.
* .Kartik Agaram2019-07-111-12/+12
|
* .Kartik Agaram2019-07-111-7/+5
| | | | | Pseudocode is a little more truthful now about what variables are on the stack.
* the problem: curr-segment-name is staleKartik Agaram2019-07-111-3/+126
| | | | | | | It's a slice into the 'line' stream. But we want to preserve the current segment name across lines. Let's leak some memory.
* .Kartik Agaram2019-07-111-14/+14
| | | | Make the trace a little more consistent.
* label offset computation still has a bugKartik Agaram2019-07-111-6/+7
| | | | | | I changed the test a little to make it obvious. Basically there's no way we can compute the segment offset correctly without knowing the segment name in the previous assertion.
* revert compute-offsets to segment-relative offsetsKartik Agaram2019-07-111-7/+7
| | | | | | | | The pseudocode was a mess here :/ I was saving the segment-offset but tracing the file-offset. Segments need file offsets (to tweak their starting address). Labels need segment offsets (to add to segment starting address).
* .Kartik Agaram2019-07-111-2/+3
|
* move discard instruction to correct spotnc2019-07-111-2/+2
|
* updated test so 'x' is relative to file-offset not segment offsetnc2019-07-111-3/+3
|
* made test 2 passnc2019-07-111-9/+11
|
* .Kartik Agaram2019-07-101-3/+7
|
* .Kartik Agaram2019-07-101-2/+2
| | | | I think we're calling the wrong variant here.
* start distinguishing table lookups from insertsKartik Agaram2019-07-101-12/+12
|
* .Kartik Agaram2019-07-101-1/+1
| | | | Fix infinite loop in the 2 remaining failing tests; now it's a segfault.
* .Kartik Agaram2019-07-101-8/+5
|
* mostly done with emit-outputKartik Agaram2019-07-091-6/+131
| | | | | Some nooks and crannies will need light final debugging with xxd, but emit-hex-output covers most of the logic.
* done with emit-segmentsKartik Agaram2019-07-091-33/+532
| | | | Only failures now are the first two tests in survey.subx.
* .Kartik Agaram2019-07-091-26/+26
|
* .Kartik Agaram2019-07-091-0/+1
|
* .Kartik Agaram2019-07-091-2/+2
|
* .Kartik Agaram2019-07-091-1/+1
|
* clean up after a few callsKartik Agaram2019-07-091-4/+9
|
* preserve truthiness of non-booleansKartik Agaram2019-07-091-16/+12
| | | | | Everywhere we check if something is true, we check it by comparing against 0, not 1.
* this looks like a bugKartik Agaram2019-07-091-1/+1
| | | | | But of course the test is still infinite-looping so we can't be sure. I'm still just reading the code.
* .Kartik Agaram2019-07-091-15/+4
|
* .Kartik Agaram2019-07-091-19/+17
|
* move 'segment-start' to a global variable as wellKartik Agaram2019-07-091-12/+10
| | | | | It's ugly to have function locals in global variables, but we'll figure out later how to deal with it.
* .Kartik Agaram2019-07-091-8/+0
|
* there's a variant of compute-width for slicesKartik Agaram2019-07-091-9/+5
| | | | | Looks like the original compute-width is now dead. But still seems useful to have around.
* there's a variant of get-or-insert for slicesKartik Agaram2019-07-091-27/+16
| | | | | | The compute-offsets test now goes into an infinite loop :( But I figure all these changes are useful anyway, we should just debug the error separately.