pokestadium/tools/asm-differ
2024-08-09 21:42:52 +01:00
..
.github/workflows test 2024-08-09 21:42:52 +01:00
.gitignore test 2024-08-09 21:42:52 +01:00
.gitrepo test 2024-08-09 21:42:52 +01:00
.pre-commit-config.yaml test 2024-08-09 21:42:52 +01:00
diff_settings.py test 2024-08-09 21:42:52 +01:00
diff-stylesheet.css test 2024-08-09 21:42:52 +01:00
diff.py test 2024-08-09 21:42:52 +01:00
LICENSE test 2024-08-09 21:42:52 +01:00
mypy.ini test 2024-08-09 21:42:52 +01:00
poetry.lock test 2024-08-09 21:42:52 +01:00
pyproject.toml test 2024-08-09 21:42:52 +01:00
README.md test 2024-08-09 21:42:52 +01:00
screenshot.png test 2024-08-09 21:42:52 +01:00
test.py test 2024-08-09 21:42:52 +01:00

asm-differ

Nice differ for assembly code. Currently supports MIPS, PPC, AArch64, ARM32, and SH2; should be easy to hack to support other instruction sets.

Dependencies

  • Python >= 3.6
  • python3 -m pip install --user colorama watchdog levenshtein cxxfilt (also dataclasses if on 3.6)

Usage

Create a file diff_settings.py in some directory (see the one in this repo for an example). Then from that directory, run

/path/to/diff.py [flags] (function|rom addr)

Recommended flags are -mwo (automatically run make on source file changes, and include symbols in diff). See --help for more details.

Tab completion

argcomplete can be optionally installed (with python3 -m pip install argcomplete) to enable tab completion in a bash shell, completing options and symbol names using the linker map. It also requires a bit more setup:

If invoking the script exactly as ./diff.py, the following should be added to the .bashrc according to argcomplete's instructions:

eval "$(register-python-argcomplete ./diff.py)"

If that doesn't work, run register-python-argcomplete ./diff.py in your terminal and copy the output to .bashrc.

If setup correctly (don't forget to restart the shell), complete | grep ./diff.py should output:

complete -o bashdefault -o default -o nospace -F _python_argcomplete ./diff.py

Note for developers or for general troubleshooting: run export _ARC_DEBUG= to enable debug output during tab-completion, it may show otherwise silenced errors. Use unset _ARC_DEBUG or restart the terminal to disable.

Contributing

Contributions are very welcome! Some notes on workflow:

black is used for code formatting. You can either run black diff.py manually, or set up a pre-commit hook:

pip install pre-commit black
pre-commit install

Type annotations are used for all Python code. mypy should pass without any errors.

PRs that skip the above are still welcome, however.

The targeted Python version is 3.6. There are currently no tests.