Fixes CDoc ordering the sidebar and main page types in alphabetical
order. Only the sidebar should be sorted and the main page should
be rendered the way its header file was parsed, top to bottom.
Signed-off-by: Ronald Caesar <github43132@proton.me>
While I do not like the Rust Language as a whole, their documentation
generator is the best I've ever seen. in any language. I want to
implement something like it for Ballistic.
Like I said in the README, I have absolutely zero motivation to create
a documentation generator so `cdoc.c` is made completely with AI. The
code is messy but the generated HTML files look beautiful.
Signed-off-by: Ronald Caesar <github43132@proton.me>
Instead of using strcmp() on each decoded intruction's mnemonic to
translate it, we embedd an IR opcode into the struct. This is a very
barebones implementation and does not cover the entire ARM instruction
set. ARM instructions that does not have an IR opcode equivalent will be
marked with `OPCODE_TRAP` and should be implemented in the future.
Signed-off-by: Ronald Caesar <github43132@proton.me>
A simple program that prints to stdout the top 20 most common
instructions in an ARM64 binary file.
Signed-off-by: Ronald Caesar <github43132@proton.me>
The decoder API is now suitable to be made public. decoder.h is the sole
entry point for the decoder and it has been moved to `include/`
Signed-off-by: Ronald Caesar <github43132@proton.me>
Assign indices in generate_a64_table.py at the very end, right before
generation. This is much safer than maintaining a running counter during
parsing.
Signed-off-by: Ronald Caesar <github43132@proton.me>
Switch to hashing bits [32:21] instead of bits [27:20] and [7:4]. This
massively reduces the average amount of instructions in a bucket.
Signed-off-by: Ronald Caesar <github43132@proton.me>
512 instructions are being declared in every bucket.
Size per bucket:
512 x 8 bytes (ptr) = 4096 bytes
Total Table Size:
4096 buckets x 4096 bytes ≈ 16.7 MB
This will destroy the CPU cache performance.
To fix this we generate small seperate arrays for each bucket that
actually has content and point to them.
Signed-off-by: Ronald Caesar <github43132@proton.me>
generate_a64_table.py only generated instruction variants. For
example, the instruction ADD has forms. The default form with bit 31
set to 0, and its variant with bit 31 set to 1. The script ignored the
default form and added the varient.
Signed-off-by: Ronald Caesar <github43132@proton.me>
This program takes a 32-bit hexidecimal representing an ARM instruction
and prints its corresponding mnemonic. This program will be used in
tandem with a python fuzzing script to verify the decoder table
generated by tools/generate_a64_table.py.
Signed-off-by: Ronald Caesar <github43132@proton.me>
- Added default values for input/output directories
- Improve error handling for missing cli arguments
Signed-off-by: Ronald Caesar <github43132@proton.me>
Adds a python script, tools/generate_a64_table.py, to parse ARM's
machine readable XML. The script generates a static C lookup table
containing instruction mnemonics, masks, and values.
Signed-off-by: Ronald Caesar <github43132@proton.me>