Commit Graph

198 Commits

Author SHA1 Message Date
Luke Street e9a9ed0453 Fixes for switch analysis
- When finalizing a block, restart analysis at
  the first block
- Check for default case in jump table entries
2024-04-03 00:11:58 -06:00
Luke Street 9249fa67b8 ci: Update actions versions 2024-03-13 18:31:42 -06:00
Luke Street 7fd039722d Format & use syntect regex-fancy
The onig crate no longer builds
in CI with cargo-zigbuild.
2024-03-13 18:30:15 -06:00
Luke Street d727110262 Update all dependencies & support new demangle flag
- Support `--mw-extensions` flag for demangle
- Fix relocation handling for object crate upgrade
2024-03-13 18:23:09 -06:00
Luke Street b829e15438 Rework .splitmeta, now .note.split
Uses actual ELF .note format, which is
more standard and handled better by mwld.
2024-03-04 18:12:20 -07:00
Luke Street 96b13be11d Allow overriding jump table size analysis
When the analyzer detects a jump table,
it will now check for an existing object
symbol at that address, using that size
if present.
2024-03-04 18:11:31 -07:00
Luke Street 4f8a9e6fab Write .splitmeta section in split objects
This enables showing the original address of
symbols in objdiff, as well as `elf disasm`
on split objects retaining the original
addresses.
2024-02-28 22:27:38 -07:00
Robin Avery a2cae4f82a
Check if git tag matches Cargo version when releasing (#44)
* Check if git tag matches Cargo version when releasing

* Specify `bash` explicitly
2024-02-28 21:15:04 -07:00
Luke Street a41745fb97 Version 0.7.4 2024-02-28 19:39:13 -07:00
Robin Avery a94edb573f
Emit an error code when `dol diff` does not match (#43)
* Emit an error code when `dol diff` does not match

* `exit(1)` instead of `bail`
2024-02-28 19:18:58 -07:00
Chippy 807dc6a440
Rename and output GCC extensions (#40)
Outputs GCC Source Info extensions
Add asm language to support DWARF emitted by MWCC MIPS assembler
Update MwOverlayBranch handling
2024-02-20 20:56:49 -07:00
1superchip 2784859c4f
Handle more CompileUnit attributes in DWARF (#38)
* Handle more DWARF CompileUnit attributes

Handle comp_dir and add two unknown attributes

* Remove comment about unknown attributes
2024-02-19 16:13:35 -07:00
Luke Street 9a6cb70ff8 Add `ar extract` command 2024-02-09 15:00:09 -07:00
Luke Street 4a84975648 dol apply: Don't apply gap symbols
Also don't overwrite "unknown" scope
with global.

Fixes #30
2024-01-24 23:23:05 -07:00
Luke Street 26cc6a13b4 shasum: Support `-o` in hash mode
Fixes #32
2024-01-24 23:21:55 -07:00
Luke Street f71931838c Sanitize '$' in split filenames
Fixes #29
2024-01-24 23:08:45 -07:00
Luke Street 7b7c8ce251 Add `noexport` attr to symbols.txt
Rename `auto_force_active` to `export_all`.
This is a better solution to code_merging, as
individual functions can be marked `noexport`.
2024-01-14 13:58:18 -07:00
Luke Street 1614997108 ci: Fix linux-i686 artifact name (previously linux-x86) 2024-01-13 22:02:52 -07:00
Luke Street 968f50ebed Add `auto_force_active` option (disable to support `-code_merging`)
Fixes #13
2024-01-13 21:54:10 -07:00
Benjamin Moir 5a3256b2b6
Infer anonymous unions from type layout (#26)
* Infer anonymous unions from type layout

* Add comments to signify inferred types

* Improve union detection

* Fix some output weirdness

* Handle some more anonymous union edge cases

* Change union offset validation

* Skip anonymous unions with less than 2 members.
2024-01-13 21:42:39 -07:00
Benjamin Moir 9f8c55efe9
Support anonymous type names as seen in PS2 DWARF (#25) 2024-01-07 08:36:34 -07:00
Benjamin Moir 6b59c677d4
Add support for MwOverlayBranch (#24)
* Add support for MwOverlayBranch

* Make clippy happy

* cargo fmt
2024-01-07 08:02:01 -07:00
Luke Street 59fe8069f8 Analyzer fix for fallthrough switch cases
Fixes #23
2024-01-06 22:57:41 -07:00
Luke Street ee3b297f76 Add bug report issue form 2024-01-06 22:34:00 -07:00
Luke Street 58b6d7c7d5 Avoid duplicate unit names when auto-splitting
Fixes #20
2024-01-06 21:57:42 -07:00
Luke Street 85e044463e Support matching multiple symbols with signatures
Half of #20
2024-01-06 18:31:33 -07:00
Luke Street 458d0599f5 dwarf dump: Emit address range for compile units and functions 2024-01-06 17:51:09 -07:00
Luke Street d9612cc9b7 Analyzer improvements for ProDG (WIP)
Fixes #19
2024-01-06 16:05:04 -07:00
Luke Street c44846d73f Allow absolute relocations to linker generated symbols
Fixes #15
2024-01-06 11:47:17 -07:00
Luke Street 8e7de9588f cargo fmt 2024-01-06 10:29:51 -07:00
Luke Street 3bcfaef4fe Zero out relocations before disassembling
Fixes an issue where an addi with relocation
can be disassembled as subi
2024-01-06 10:28:01 -07:00
Benjamin Moir dd23fef4f7
Support some more MetroWerkz DWARF extensions (#22)
* Support FT_MW_int128

* Support OP_MW_FPREG

* Support AT_MW_mangled on local variables

* cargo fmt

---------

Co-authored-by: Luke Street <luke@street.dev>
2024-01-02 10:33:07 -07:00
Luke Street fdf421a5d8 Update dependencies (advisory fix) 2023-12-20 20:43:39 -07:00
Luke Street d470f7aec6 Version 0.6.5 2023-12-20 20:30:48 -07:00
Luke Street 227153193e Sanitize auto-function-split names
Fixes #16
2023-12-20 20:28:30 -07:00
Luke Street 2681e51443 Don't double remove obj path extension
Don't remember why I had it like this

Fixes #17
2023-12-20 20:22:00 -07:00
Luke Street 6f2bb62082 Downgrade vis_flags/active_flags error to warn
Fixes #18
2023-12-20 19:11:23 -07:00
Sewer d43b95a0e4
Added: Support for Little Endian DWARF, Inline Arrays & Additional MetroWerks Extensions (#14)
* Added: Minimal Required Changes to Dump Sonic Heroes (PS2)

* Added: Switch for Little Endian DWARF Dump

* Added: Support for Array Ordering

* Added: Big/Little Endian Variants of u32_from_bytes

* Changed: Detect bitness from .elf header.

* Changed: Use Proper MetroWerks Names

* Changed: Use Endianness from File API

* Refactor DWARF endian handling & some fixes

* Undo accidental formatting changes

---------

Co-authored-by: Luke Street <luke@street.dev>
2023-12-11 13:07:29 -05:00
Luke Street 0cfc5df20b Overhauled common BSS support & more
- With a map, attempts to detect and handle common BSS automatically
- With a map, attempts to detect and correct inflated common BSS bug (< GC 2.7 linker)
- Support for "stripped" symbols, sometimes required to match inflated common BSS sizes
- Warns on duplicated TUs in a map (other than common BSS)
- Automatically adds `comment:0` to `.s` TUs from a map (avoids linker crash)
2023-11-29 18:31:35 -05:00
Luke Street 5c22c8850e Support `.BINARY` section
Resolves #12
2023-11-29 18:14:48 -05:00
Luke Street 4cb6f4f85d dwarf dump: Better support for GCC/ProDG & various fixes
- Displays subroutine "static" and "inline" if present
- Displays subroutine labels, blocks and inlines if present
- Displays struct member visibility if present
- Skips tags that can't be processed rather than bailing
2023-11-27 16:35:12 -05:00
Luke Street 5128ff67b2 bin2c: Honor symbol alignment 2023-11-26 01:12:34 -05:00
Luke Street dd60128ba0 Extract embedded assets to binary and C header
Adds an "extract" list to project configuration:
```
extract:
- symbol: SomeData
  binary: Lib/SomeData.bin
  header: Lib/SomeData.inc
```
This example extracts the data of symbol
`SomeData` to `out_dir/bin/Lib/SomeData.bin`,
and a C array representation to
`out_dir/include/Lib/SomeData.inc`.

Resolves #11
2023-11-26 00:35:05 -05:00
Luke Street 038354a37e Version 0.6.1 2023-11-22 13:01:42 -05:00
Luke Street e3d6ef8492 dwarf dump: Fix padding handling within tag children
Fixes #9
2023-11-22 12:59:03 -05:00
Luke Street c8a2d4896a dwarf dump: Fix reversed struct/class in def
Fixes #10
2023-11-22 12:21:24 -05:00
Luke Street 854ed74605 CI: Fix release job 2023-11-18 23:50:01 -05:00
Luke Street 7168d2632f Version 0.6.0 2023-11-18 23:38:43 -05:00
Luke Street ebff47924f Add `links` field to config for overriding REL linkage
By default, every REL is linked with every other REL. Some games, like Mario Party, link RELs individually, so the module IDs are not unique. To support this, the `links` field can be used to override which _other_ modules are included in a module's analysis.
2023-11-18 23:37:50 -05:00
Luke Street 28af4872ab rel make: Add `--quiet`/`-q`, `--names`/`-n` args
`-n` is a somewhat ugly hack to only select certain modules from `config.yml`, for games with overlapping module IDs
2023-11-18 23:34:44 -05:00