rmsbolt

Homepage: http://gitlab.com/jgkamat/rmsbolt

Author: Jay Kamat

Updated:

Summary

A compiler output viewer

Commentary

RMSBolt is a package to provide assembly or bytecode output for a source
code input file.

It currently supports: C/C++, OCaml, Haskell, Python, Java, Go, PHP, D,
Pony, Zig, Swift, Emacs Lisp, and (limited) Common Lisp.

Adding support for more languages, if they have an easy manual compilation
path from source->assembly/bytecode with debug information, should be much
easier than in other alternatives.

It's able to do this by:
1. Compiling changes automatically, adding options which cause the compiler
to output assembly/bytecode with debug information (or by using objdump)
2. Parse assembly/bytecode to create a map from it to the original source
3. Strip out unneeded information from bytecode to only show useful code
4. Provide an interface for highlighting the matched assembly/bytecode line
to the source and vice versa

Tweakables:
RMSBolt is primarily configured with Emacs local variables. This lets you
change compiler and rmsbolt options simply by editing a local variable block.

Notable options:
`rmsbolt-command': determines the prefix of the compilation command to use.
`rmsbolt-default-directory': determines the default-drectory to compile from.
`rmsbolt-disassemble': disassemble from a compiled binary with objdump, if supported.
`rmsbolt-filter-*': Tweak filtering of binary output.
`rmsbolt-asm-format': Choose between intel att, and other syntax if supported.
`rmsbolt-demangle': Demangle the output, if supported.

For more advanced configuration (to the point where you can override almost
all of RMSbolt yourself), you can set `rmsbolt-language-descriptor' with a
replacement language spec.

Please see the readme at https://gitlab.com/jgkamat/rmsbolt for
more information!

Thanks:
Inspiration and some assembly parsing logic was adapted from Matt Godbolt's
compiler-explorer: https://github.com/mattgodbolt/compiler-explorer and
Jonas Konrad's javap: https://github.com/yawkat/javap.

Dependencies