Commit Graph

74 Commits

Author SHA1 Message Date
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 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 58b6d7c7d5 Avoid duplicate unit names when auto-splitting
Fixes #20
2024-01-06 21:57:42 -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 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 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 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 38c692650f write_rel: Skip setting reloc/imp offset with empty relocations 2023-11-18 23:33:18 -05:00
Luke Street 5e13998e93 Major `dwarf dump` rework
- Supports games with C++ DWARF info
- Syntax highlighting when printing to console (disable with `--no-color`)
- Overall improvements to parsing and output
2023-11-18 13:56:58 -05:00
Luke Street 4935708b61 Fix REL v2 creation (and v1, hopefully)
- Adjusts `write_rel` to use the proper ordering for relocations and imports based on the REL version.
- Adds `-r`/`--relocations` switch to `rel info` that prints (very) verbose relocation information.
2023-11-09 01:16:37 -05:00
Luke Street ec4caf5000 Smarter configuration updates
- Avoid overwriting `symbols.txt` or `splits.txt` if the file was modified since it was read or if the file's contents didn't change.
- Remove `binrw` and `byteorder` dependencies, moving to `FromReader`/`ToWriter` traits.
- Migrate generic bounds to `where` clauses.
- Remove unused `build.rs` logic.
2023-11-07 23:21:59 -05:00
Luke Street 41a69441da Support section 241 (extabindex) in RSOs 2023-10-10 12:32:56 -04:00
Luke Street a164852a15 Write gap symbols as hidden 2023-10-07 14:50:01 -04:00
Luke Street dfb569b883 Add alf support (NVIDIA Shield TV binaries)
- Supports .alf files in all places .dol files are accepted.
- Adds `hash` and `dhash` to symbols config.
2023-10-07 02:03:09 -04:00
Luke Street 36bb5ddcc6 Zero out section data for relocations in relocatable ELFs
Fixes issues with Wii versions of mwld.
2023-10-01 12:50:21 -04:00
Luke Street c354c6da4b REL section alignment fixes
- Honor section alignment from splits.txt when writing RELs
- Better heuristic for determining REL section alignment on initial analysis
2023-09-26 13:06:57 -04:00
Luke Street 610a2e56b9 Add `ldscript_template` option to project config 2023-09-23 07:56:49 -04:00
Luke Street d4ef1ce16a Analyzer fixes galore
- Transparent NLZSS decompression (add `:nlzss` to path)
- Overhaul portions of the analyzer to support more games
- Reject some invalid data relocations automatically
- Jump table analysis fixes
2023-09-13 02:08:51 -04:00
Luke Street 18170a96a2 Don't use map in `dol diff` and `dol apply`; remove common BSS hack 2023-09-10 02:20:08 -04:00
Luke Street 788ffb9e17 Fix empty .lcf FORCEACTIVE with symbols_known 2023-09-09 19:24:13 -04:00
Luke Street e3857d3212 Improvements to REL & map support
- Fix symbols.txt align attribute
- Fully support nested RARC files & transparent Yaz0 decompression
- Guess symbol visibility for maps without link map
- Add module name config
- Add manual force_active config
- Quiet option for shasum
- `symbols_known` and `fill_gaps` config
- Allow disabling .comment generation per-unit (`comment:0`)
- Various minor fixes
- Add `rarc` and `yaz0` commands
2023-09-05 17:22:22 -04:00
Luke Street f9f7fb2e1e Working `rel make` & more
- Added `elf info`
- Improved `rel info`
- Colored output for `shasum`
- Fix section `rename` in RELs
- Added padding symbols to avoid linker issues
- Automatically set symbols to "active" in .comment output
2023-08-23 23:13:12 -04:00
Luke Street a2374e4fa0 Semi-working REL analysis & splitting 2023-08-23 23:13:12 -04:00
Luke Street 3f63f1ef47 A lot more section-address-aware refactoring 2023-08-23 23:13:12 -04:00
Luke Street 5843ee021e Begin REL analysis & rework lots of code to be section-address aware 2023-08-17 22:09:45 -04:00
Luke Street 933edcfb19 Clippy fixes 2023-08-15 22:47:35 -04:00
Luke Street 23a156a6d5 Add selfile option & load in `dol split` 2023-08-15 22:45:23 -04:00
Luke Street a394dfc88c Improved sanity checks in asm write_data 2023-08-15 22:44:06 -04:00
Luke Street d272b5dce8 Write common symbol align in asm 2023-08-15 09:36:45 -04:00
Luke Street 5272f90991 Read symbol alignment from .comment 2023-08-10 00:03:44 -04:00
Luke Street 265e26ee40 Guess section alignment & write __ArenaHi in .lcf 2023-08-10 00:03:14 -04:00
Luke Street 457ee10a42 Emit FORCEACTIVE in LCF & various fixes 2023-08-09 01:24:23 -04:00
Luke Street d9e1ae2777 MW 2.7 LD compatibility fixes & more
- More robust .comment section handling
- Auto-create .comment section for objects with common symbols (MW 2.7+ hack)
- Support loading REL modules in `dol split` (currently only for references)
- Add `dol diff` for quick diffing between linked ELF and expected symbols
- Add `dol apply` for applying linked ELF symbols to symbol config file
2023-08-08 23:34:00 -04:00