| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
| |
Now all known discrepancies between C++ and SubX translators are fixed.
If a SubX program builds with C++, it should also build fine with just
SubX.
(If it doesn't build with C++, all bets are off. The self-hosted SubX
translator has negligible error-detection or handling.)
|
| |
|
|
|
|
| |
Fix CI. Also kill compiler version mismatch bugs once and for all.
|
|
|
|
|
| |
This makes the C++ translator more consistent with the self-hosted
translator.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
This makes the C++ translator more consistent with the self-hosted
translator.
We go through some contortions to continue supporting unit tests without
'Entry' labels. But we still want to throw good errors when translating
.subx files at the commandline.
|
|
|
|
|
| |
Purge all traces of the old assumption that segment 0 is code and
segment 1 is data.
|
| |
|
| |
|
| |
|
|
|
|
| |
Fix CI by disabling non-native runs that run out of memory.
|
| |
|
|
|
|
| |
Include phases of self-hosted SubX translator in CI.
|
|
|
|
| |
Include simple apps in CI.
|
| |
|
| |
|
|
|
|
|
| |
All extant SubX programs generate identical binaries using either the
C++ or the self-hosted SubX translators.
|
|
|
|
|
|
|
|
|
|
|
| |
A little more resizing of buffers. apps/hex.subx is now building an
identical binary.
I'm now aborting on allocation failures. That requires disabling
a couple of tests. (I'm not quite confident enough of this decision to
delete them outright.) I want to treat all segfaults as bugs, and
machine code is no place to add boilerplate checks for return values of
standard library functions.
|
| |
|
|
|
|
|
|
| |
Ensure we don't create overly long lines. Now this works:
$ ./diff_ntranslate 0*.subx apps/subx-common.subx
|
| |
|
|
|
|
| |
Fix CI.
|
|
|
|
|
| |
Clean up. All apps now translating correctly except for the phases of
the self-hosted translator. Next step: SubX-in-SubX in SubX-in-SubX.
|
|
|
|
| |
Bugfix fifteen -- on the C++ side.
|
|
|
|
| |
All that debugging and it turns out the bug is on the C++ side!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Snapshot while debugging survey.subx by print.
I can see the error in 1 minute with this command:
subx run apps/survey < a.pack
(where a.pack is obtained from `ntranslate 049*.subx 05[0-8]*.subx`)
By contrast, using the trace requires 4.5 minutes:
subx --trace run apps/survey < a.pack
It generates a trace of 4.4GB with almost 83M lines.
The trace takes 2 minutes to load.. oops, I forgot to load labels with
`--debug`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Even though the standard library is building and passing tests, the
binaries it generates aren't exactly bit for bit identical with the
originals. Comparing using `diff_ntranslate`, it looks like the data
segment starting address isn't computed right in survey.subx
(`compute-addresses`) when I start translating layer 058. Deleting some
tests brings the code segment to a p_offset where bits 8-11 (the lowest
4 bits excluding the lowermost byte) are cleared and everything works.
However, if bits 8-11 are set, then they don't make it to p_vaddr and
p_paddr.
Tried reproducing with a unit test, but the unit test passes fine.
|
|
|
|
| |
A couple of scripts that help debug discrepancies in the self-hosted translator.
|
|
|
|
| |
Stop rebuilding example programs just because subx_bin got recreated.
|
|
|
|
| |
Make the output of the `pack` phase a little easier to read.
|
|
|
|
| |
Fix a timeout in CI.
|
|
|
|
| |
Really fix CI.
|
|
|
|
| |
Fix CI.
|
| |
|
|
|
|
|
|
|
| |
Translates 5k lines of input in 26 seconds.
I'm not sure why I need to grow the label table. It was already 512 entries
long, and I'm only using 373 so far.
|
|
|
|
|
|
|
|
|
| |
We can now translate layers 49-72 using the self-hosted translator.
The translator has now demonstrated translation over 4k lines. Most verbose
phase output is 325KB, even if the final binary is 15KB.
Emulation is too slow now, so I'm back to debug by print on a Linux machine.
|
|
|
|
|
| |
Now our debug cycle passes through `translate` or `ntranslate`. Make
sure we rebuild phases whenever we need to.
|
|
|
|
| |
Fix CI.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We can now translate layers 49-56 using the self-hosted translator
(`translate` and `ntranslate`).
As a follow-up to commit 5404, the self-hosted translator is a little
more strict than the C++ translator in 3 places:
a) All .subx files must define a data segment.
b) All .subx files must define an `Entry` label.
c) All numbers must be in *lowercase* hex.
In all cases, where programs work with the C++ translator but violate
the self-hosted translator's assumptions, we must make sure we raise
errors rather than silently emit bad code.
|
|
|
|
| |
Break a dependency from `print-int32` to `from-hex-char`.
|
| |
|
|
|
|
|
| |
We can now translate layers 49-55 using translate and ntranslate. Next
step is to support '\n' in dquotes.subx.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Currently failing at layer 54:
```
$ time ./translate 049memory_layout.subx 05[0-4]*.subx; ./subx run a.elf test
leaky-get-or-insert-slice: too many segments
```
Emulation is also damn slow. But running in native mode is fast.
|
|
|
|
|
| |
We now have a new pass called 'tests' which code-generates a new
function called 'run-tests', just like the C++ layer `tests.cc`.
|