We look for constants in call instruction parameters, but this only
works for jsr because the register argument in [jmp @rn] is not known to
be a constant yet (some static analysis required).
This finally makes it possible to disassemble any interval without
worrying about potential errors. That's some progress.
By the way, now we can fully disassemble fx@3.10. Takes about 6 seconds
for the analysis passes, and ~9 seconds for printing on my machine.
New features:
* The syscall pass now resolves syscalls for the input target, provided
that an OS is mapped on the ROM region.
* Formalized the variations of print's arguments as a sequence (tree, to
be precise) of /promotions/.
* Added a short notion of Symbol and SymbolTable, and a loader for them.
Data files of type "symbol" are read as such and provide name to
syscalls or arbitrary addresses.
Code changes:
* The disassembly operation of the command-line interface is now finally
in its own file with more room.
* Encoded the tree structure of promotions as a sequence of (mainly
tail-calling) inter-calling methods in the print pass.
-> The cfg pass loads the function into memory, annotates leaders and
jumps, and resolves delay slots.
-> The pcrel pass currently computes locations for pc-relative moves and
jumps, but does not yet compute the pc-relative moved data.
-> The print pass displays the results of analysis with various layout
and formatting options.
* Separate OS and Target conceptually; now an OS is created on an
existing target which must have ROM bound.
* Add a configuration file with a data library and description files
which are automatically loaded at startup.
* As a first application, implement target descriptions. It is now
possible (given the proper library) to type [fxos info fx@3.10] to get
information on the fx OS version 3.10.
* Set up the pass infrastructure and the first few easy passes. This
is still a Work In Progress and not yet called from the command-line.
* Improve the copy/move behavior of classes (C++ concerns).
* Add instruction metadata, which will make it easier to write actual
useful analysis passes.
Contains basic stuff to start working:
* Loading files and assembly instruction descriptions
* Create a 64k-entry assembly decoding table
* Standard memory regions and information
* Create targets where files can be mapped at any addresses
* Load OSes and detect a few basic things