about summary refs log tree commit diff stats
path: root/subx/apps/pack
Commit message (Collapse)AuthorAgeFilesLines
...
| * 5151 - use mmap everywhere we need a heapKartik Agaram2019-05-101-0/+0
| | | | | | | | | | All tests passing now. Things are very explicit; before a program can `allocate` memory, it has to first obtain a segment from the OS using `new-segment`.
| * 5145Kartik Agaram2019-05-041-0/+0
| |
| * 5135Kartik Agaram2019-05-041-0/+0
| |
* | new primitives: append-byte, append-byte-hexKartik Agaram2019-05-021-0/+0
| | | | | | | | | | | | | | These are variants of write-byte-buffered and print-byte-buffered respectively that operate on in-memory `stream`s rather than `buffered-file`s. They don't operate on files, so we'll avoid using the prefix 'write-'.
* | standardize function namesKartik Agaram2019-05-021-0/+0
|/ | | | | Operations on buffered-file now always include the word 'buffered'. More verbose, but hopefully this highlights holes in the library.
* 5118 - convert int to stringKartik Agaram2019-04-231-0/+0
|
* 5105Kartik Agaram2019-04-161-0/+0
| | | | | Pull in a _different_ function than `next-word` (commit 5092) into a shared file between phases. Let's see how this goes.
* 5092Kartik Agaram2019-04-151-0/+0
| | | | | | | Realization: 'next-word' can't be reused in converting string literals, because it has to understand string literals. Let's just keep each phase self-contained.
* 5090Kartik Agaram2019-04-131-0/+0
| | | | | | | Start using the new newline escape in string literals everywhere. I could use it more aggressively, but it makes tests harder to read. So only one line of text per string for now.
* 5074Kartik Agaram2019-04-101-0/+0
| | | | | | | | | | | | | Fail early when writing to a fake file runs out of space. Makes debugging tests easier. Reads from files, on the other hand, are only buffering to a temporary stream, so it makes sense to silently stop when they run out of space. In the process I uncovered a testing bug in pack.subx: I was missing a trailing space in the expected result, but the test still passed because the space was getting truncated. Being principled about aborting on overflow by default will help avoid such issues.
* 5060Kartik Agaram2019-04-061-0/+0
|
* 5059Kartik Agaram2019-04-051-0/+0
|
* 5058Kartik Agaram2019-04-051-0/+0
|
* 5056Kartik Agaram2019-04-051-0/+0
|
* 5054Kartik Agaram2019-04-031-0/+0
|
* 5053Kartik Agaram2019-04-031-0/+0
| | | | | | write-stream-buffered isn't a clean abstraction. Ignoring the 'read' index of a stream is a hack. It's just saving us the trouble of a rewind-stream. So make it a helper of pack.subx rather than part of the standard library.
* 5052Kartik Agaram2019-04-021-0/+0
|
* 5051 - done compiling SIB operandsKartik Agaram2019-04-021-0/+0
| | | | Done with pack.subx?!
* 5050 - compile ModR/M operandsKartik Agaram2019-04-021-0/+0
|
* 5046Kartik Agaram2019-04-011-0/+0
|
* 5044Kartik Agaram2019-04-011-0/+0
|
* 5042Kartik Agaram2019-03-311-0/+0
|
* 5041 - compile displacement operandsKartik Agaram2019-03-311-0/+0
|
* 5040 - compile immediate operandsKartik Agaram2019-03-301-0/+0
|
* 5039 - compile opcodesKartik Agaram2019-03-301-0/+0
|
* 5038Kartik Agaram2019-03-291-0/+0
|
* 5036Kartik Agaram2019-03-291-0/+0
|
* 5034Kartik Agaram2019-03-291-0/+0
|
* 5027Kartik Agaram2019-03-271-0/+0
| | | | | | | | | Testing conversion of multiple lines in a data segment. Bugs fixed: 1. Stack issues in next-token helpers. 2. Needed to teach next-token to avoid newlines. 3. rewind-stream(line) before passing it to convert-code or convert-instruction.
* 5023Kartik Agaram2019-03-261-0/+0
| | | | | | | | | | | | | | | | Several bugs found after performing multiple loops through convert-data. This has been a general pattern: given how unsafe the x86 'language' is, the regular amount of testing with a single input doesn't really give sufficient confidence. Ever-present is the possibility that I forgot to pop something from the stack, either a spilled register or a local. Calling functions multiple times seems to help detect such bugs. So far I've been doing this extra level of testing implicitly when I build the next higher abstraction. But with `convert-data` the buck stopped, and much painful debugging ensued. One thing that would help is if `write` on streams didn't remain silent on overflow. But we actually need that sometimes, when streams are used as buffers.
* 5021 - done packing data segment?Kartik Agaram2019-03-231-0/+0
|
* 5020Kartik Agaram2019-03-231-0/+0
|
* 5019Kartik Agaram2019-03-231-0/+0
|
* 5018Kartik Agaram2019-03-231-0/+0
|
* 5017Kartik Agaram2019-03-221-0/+0
|
* 5014Kartik Agaram2019-03-211-0/+0
|
* 5013Kartik Agaram2019-03-201-0/+0
|
* 5012Kartik Agaram2019-03-201-0/+0
| | | | Add a bounds-check to `next-word`.
* 4999Kartik Agaram2019-03-101-0/+0
| | | | | | | | Fix CI. pack.subx was passing in emulation but not natively. Commit 4954 on Feb 10 was a real dud. First I find I forgot to reclaim space for locals (commit 4996). Now I find I haven't been tracking registers properly either.
* 4996 - back on pack.subxKartik Agaram2019-03-081-0/+0
| | | | | | | | | Yet another redrawing of responsibilities between convert and its helpers. In the process I discovered a bug in `write-stream-buffered` which ended up taking me through a detour to extract `browse_trace` into its own tool. It turns out just having long buffers is enough to need browse_trace. Simple operations like clearing a stream swamp a flat view of the trace.
* 4988Kartik Agaram2019-02-251-0/+0
|
* 4983Kartik Agaram2019-02-221-0/+0
| | | | | | | Standardize name for 'end of file' sentinel. `eof` seems like an ordinary variable, and `EOF` looks too much like a register (particularly in code like `if (EAX == EOF)`), so we'll go with `Eof`. Consistent capitalization for globals, and constants are globals too.
* 4981 - no, go back to 3 phasesKartik Agaram2019-02-181-0/+0
| | | | | | | | | | | | | Considering how much trouble a merge phase would be (commit 4978), it seems simpler to just add the extra syntax for controlling the entry point of the generated ELF binary. But I wouldn't have noticed this if I hadn't taken the time to write out the commit messages of 4976 and 4978. Even if we happened to already have linked list primitives built, this may still be a good idea considering that I'm saving quite a lot of code in duplicated entrypoints.
* 4968Kartik Agaram2019-02-141-0/+0
|
* 4965Kartik Agaram2019-02-141-0/+0
|
* 4961Kartik Agaram2019-02-141-0/+0
|
* 4960Kartik Agaram2019-02-131-0/+0
| | | | | I think I don't need to special-case packing for different segments. That should massively cut down on the number of tests.
* 4956Kartik Agaram2019-02-111-0/+0
|
* 4955Kartik Agaram2019-02-101-0/+0
| | | | Starting to build up Phase 2 (apps/pack) out of recently designed primitives.
* 4954Kartik Agaram2019-02-101-0/+0
|