| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
We allocate space for a local variable, read() a character from stdin to
it, and write() it out to stdout.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
We read() a character from stdin and write() it out to stdout, saving it
to a global variable in between.
ELF binaries are inefficient; you can ask for a low alignment, but the
kernel may not be able to handle it. If you set up a high alignment then
you end up wasting an increasing amount of space in each segment
because of the constraint that the offset bear some relationship with
the loaded address.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Reorganize layers to introduce the translation workflow right at the start.
We also avoid duplicating parsing code. Programs are always parsed into
the `program` data structure.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Let's minimize the alignment requirements of each segment's offset.
It'll make binaries take less room later. Otherwise we may need to pad
lots of 0s for segments after the first.
Generated ELF binaries continue to work natively (except ex4, but that
was already not working).
|
| |
|
| |
|
|
|
|
| |
Start using data segments in scenarios.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Return to the usual whitespace-skipping istreams. No need to go beyond
word-based parsing.
This exercise reinforces the amount of duplication between
load_program() and transform_immediate().
|
| |
|
| |
|
|
|
|
| |
Fix CI.
|
|
|
|
| |
Fix a warning in CI.
|
|
|
|
|
|
| |
Minimize memory footprint while running subx ELF binaries. We don't use
memory before address 0x08048000, so we don't need to allocate space for
it.
|
|
|
|
| |
Fix CI.
|
|
|
|
|
|
|
|
| |
ex4 now writes to the (global) data segment, rather than trying to write
to the code segment.
We still need to specify the other segments in the generated ELF,
though.
|
|
|
|
|
|
|
|
| |
Drop a safety net; we now assume that Memory is large enough for any
addresses we may encounter.
Dropping all comparisons with Mem.size() now makes our Memory_offset
indirection airtight.
|
|
|
|
| |
Insert an indirection to avoid over-allocating memory for RAM.
|
|
|
|
| |
Encapsulate RAM management.
|
|
|
|
|
| |
Currently only runs in emulated mode. Likely a paging issue, writing
data to code page. I'm not checking the return value.
|
| |
|
|
|
|
| |
Result has to be small enough to fit in AL so exit() can return it.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Modify helpers to run either external examples in the subx/teensy/
directory, or my own examples in subx/ directory.
Now I have to say `run test5` instead of `run 5`, and so on.
|
|
|
|
| |
Fix a few more typos in example programs.
|
| |
|
|
|
|
|
|
|
|
| |
Simpler.
Now it's clear that what commit 4291 got wrong was an
alignment-violating address for both the entrypoint and the start of the
segment.
|
| |
|
|
|
|
|
|
| |
Second attempt at commit 4291. We'll now not copy the headers into
memory, but we'll still allocate space for them. Still some security
benefits, and I'm gaining confidence that I understand the ELF format.
|
| |
|