Commit Graph

180 Commits

Author SHA1 Message Date
Luke Street 4ea4ec86d0 Partially revert "Rework section alignment handling"
It turns out we can't actually
trust mwld to put our alignment
values in the PLF. Sad.
2024-06-10 00:37:17 -06:00
Luke Street 4dd2ebf85a Rename ObjSections::count -> len 2024-06-09 16:10:34 -06:00
Luke Street 46cf0be183 Add U8 (newer .arc) support
Supports the U8 .arc format, just
like the older RARC format.

`u8 list`, `u8 extract` and support
for U8 archive paths in config.yml
2024-06-03 20:34:35 -06:00
Luke Street 255123796e Instruction disassembly in `dol diff`
When a function diff is detected in
`dol diff`, objdiff-core is used to
print a detailed view highlighting
any differences.

Resolves #28
2024-06-03 20:31:06 -06:00
Luke Street d63111466b SN GCC DWARF improvements
Now emits all DWARF tags for
Spongebob Squarepants: Creature
from the Krusty Krab properly.

Resolves #46
2024-06-03 18:48:28 -06:00
Luke Street 61cd72cd11 Support address in config symbol references
Example: `symbol_name!.data:0x1234`
Allows disambiguating local symbols
with the same name.

Supported in `extract` and
`add_relocations` in config.yml

Resolves #58
2024-06-03 18:08:06 -06:00
Luke Street 4701de32f6 Check for existing function with `bl`
Ensures that the analyzer won't
create a function when the target
is already contained within a
function. Useful with manual asm
that would otherwise trip up the
analyzer.

Partial work for #56
2024-06-03 18:06:10 -06:00
Luke Street 6b60c13834 Change REL "invalid relocation" to warning
Also ensures that `block_relocations`
works to remove the warning

Resolves #53
2024-06-03 18:03:39 -06:00
Luke Street 53c6d74a6b Fix addic/addic. handling in relocation tracker
Resolves #57
2024-06-03 18:01:55 -06:00
Luke Street d9770c48b2 Version 0.8.3 2024-05-19 23:09:16 -06:00
Luke Street c3f3ea58e8 Support `block_relocations` and `add_relocations` in `config.yml`
This allows more granular control over generated relocations.

Also optimizes relocation address validity checks,
leading to ~20% faster relocation analysis.

Config example:
```
block_relocations:
# Block any relocation pointing to this address.
- target: .data:0x80130140
# Block any relocation originating from this address.
- source: .text:0x80047160
  # (optional) End address to make it a range.
  end: .text:0x800471A8

add_relocations:
# Inserts or overwrites a relocation.
# From: `subi r3, r3, 0x7657`
# To: `li r3, mesWInsert-0x1@sda21`
- source: .text:0x800473F4
  type: sda21
  target: mesWInsert
  addend: -1
```

Resolves #33
Resolves #52
2024-05-19 22:49:40 -06:00
Luke Street e1c80655b7 Fix lcf generation for empty RELs
Also, handle alignment of 0 in rel make
2024-05-19 22:28:14 -06:00
Luke Street bf0d1a823f Version 0.8.2: Fix asm output 2024-05-17 07:12:05 -06:00
Luke Street 0bcc539d36 Version 0.8.1: Fix .note.split generation 2024-05-16 18:31:27 -06:00
Luke Street cb1a765041 Version 0.8.0 2024-05-15 23:16:26 -06:00
cadmic 876b78bfa6
Reconstruct "erased" tags from DWARF debugging info (#51)
* Read erased tags

* cargo +nightly fmt

* .filter(...).next() -> find(...)

* Plumb both data and address endians through

* Rename has_erased_parent -> is_erased_root and comment
2024-05-15 23:06:30 -06:00
Luke Street d3c2e8192c ci: Bump cargo-zigbuild version 2024-05-01 09:37:09 -06:00
Luke Street 4dacf2f39a Add disc commands: info, extract, convert, verify
Utilizing https://github.com/encounter/nod-rs
2024-05-01 00:12:20 -06:00
Luke Street 9452ca8b8c Pass ppc750cl::Ins by value 2024-04-30 22:53:32 -06:00
Luke Street 963425793d Remove unused deps 2024-04-30 20:48:53 -06:00
Luke Street c45f37eb10 Update ppc750cl (10x faster!) & upgrade deps 2024-04-30 20:40:14 -06:00
Luke Street c1c4373e53 Prefer references to `_savegpr_14` over `__savegpr`
Same for `__restore_gpr`, `__save_fpr` and `__restore_fpr`.
A common issue that can be solved with a little bit
of special-casing.
2024-04-30 18:04:50 -06:00
Luke Street dc7e307c44 Rework section alignment handling
- Honor splits.txt alignment values when writing ldscript.lcf
- Add alignment values to ldscript_partial.lcf, remove hacky code from rel make
- Guess alignment values in DOL loader

Fixes #27
2024-04-30 18:04:17 -06:00
Luke Street dac2dcfc9e Explicitly check split end >= start
Fixes #48
2024-04-30 18:03:59 -06:00
Luke Street fdafe59e13 Adds `data:int` and `data:short` for asm output
Fixes #41
2024-04-30 18:03:45 -06:00
Luke Street bfa926ebbf Write object address and size in asm comments
Fixes #37
2024-04-30 18:03:31 -06:00
Luke Street 989293a477 Add Yay0/Yaz0 compression & decompression
Uses orthrus-ncompress

Fixes #6
2024-04-30 18:03:00 -06:00
Luke Street e46c6a72bc Split up README a bit 2024-04-22 23:17:09 -06:00
Luke Street a156c3697f Appease clippy 2024-04-03 00:18:16 -06:00
Luke Street 3497d38ea3 Version 0.7.6 2024-04-03 00:13:42 -06:00
Luke Street d0f39f1d82 Support global labels in REL creation (_savegpr, etc) 2024-04-03 00:13:15 -06:00
Luke Street ccfbfd1a5a Fix for jumptable naming in RELs 2024-04-03 00:12:46 -06:00
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