From d88c7bfa4a0cb08266b08ac6e18bf382eb923a83 Mon Sep 17 00:00:00 2001 From: Mark Street Date: Sat, 10 Aug 2024 21:28:59 +0100 Subject: [PATCH 1/4] Fix $gp calculation when addiu value is negative --- src/splat/util/psx/psxexeinfo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/splat/util/psx/psxexeinfo.py b/src/splat/util/psx/psxexeinfo.py index 39812f3b..67fbb49f 100755 --- a/src/splat/util/psx/psxexeinfo.py +++ b/src/splat/util/psx/psxexeinfo.py @@ -138,7 +138,8 @@ def try_get_gp(rom_bytes, start_offset, max_instructions=50) -> int: if insn.getOpcodeName() == "lui" and insn.rt.name == "gp": gp = insn.getImmediate() << 16 elif insn.getOpcodeName() == "addiu" and insn.rt.name == "gp": - gp += insn.getImmediate() + (imm,) = struct.unpack(">h", struct.pack(">H",insn.getImmediate())) + gp += imm break return gp From 195616de5d410069f9e6eb94f3fa8bdf60af1abe Mon Sep 17 00:00:00 2001 From: Mark Street Date: Sat, 10 Aug 2024 21:29:46 +0100 Subject: [PATCH 2/4] black --- src/splat/util/psx/psxexeinfo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/splat/util/psx/psxexeinfo.py b/src/splat/util/psx/psxexeinfo.py index 67fbb49f..588b2b10 100755 --- a/src/splat/util/psx/psxexeinfo.py +++ b/src/splat/util/psx/psxexeinfo.py @@ -138,7 +138,7 @@ def try_get_gp(rom_bytes, start_offset, max_instructions=50) -> int: if insn.getOpcodeName() == "lui" and insn.rt.name == "gp": gp = insn.getImmediate() << 16 elif insn.getOpcodeName() == "addiu" and insn.rt.name == "gp": - (imm,) = struct.unpack(">h", struct.pack(">H",insn.getImmediate())) + (imm,) = struct.unpack(">h", struct.pack(">H", insn.getImmediate())) gp += imm break return gp From 88b3cc83fb8c5512dd9f9ae238d1d1ed6d2f4789 Mon Sep 17 00:00:00 2001 From: Mark Street Date: Sat, 10 Aug 2024 22:17:38 +0100 Subject: [PATCH 3/4] Use getProcessedImmediate --- src/splat/util/psx/psxexeinfo.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/splat/util/psx/psxexeinfo.py b/src/splat/util/psx/psxexeinfo.py index 588b2b10..f426ea65 100755 --- a/src/splat/util/psx/psxexeinfo.py +++ b/src/splat/util/psx/psxexeinfo.py @@ -136,10 +136,9 @@ def try_get_gp(rom_bytes, start_offset, max_instructions=50) -> int: break insn = rabbitizer.Instruction(word) if insn.getOpcodeName() == "lui" and insn.rt.name == "gp": - gp = insn.getImmediate() << 16 + gp = insn.getProcessedImmediate() << 16 elif insn.getOpcodeName() == "addiu" and insn.rt.name == "gp": - (imm,) = struct.unpack(">h", struct.pack(">H", insn.getImmediate())) - gp += imm + gp += insn.getProcessedImmediate() break return gp From 39c189a511bdd9c6fd57662cd86e0d7fda9f6b44 Mon Sep 17 00:00:00 2001 From: Mark Street Date: Sat, 10 Aug 2024 22:20:31 +0100 Subject: [PATCH 4/4] Bump version to 0.25.3 --- CHANGELOG.md | 4 ++++ README.md | 2 +- pyproject.toml | 2 +- src/splat/__init__.py | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 149aee8a..9d4eff1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # splat Release Notes +### 0.25.3 + +* Fix incorrect calculation for `$gp` value in create_config.py for PSX when immediate value is negative. + ### 0.25.2 * Two new yaml options: `use_gp_rel_macro_nonmatching` and `use_gp_rel_macro` diff --git a/README.md b/README.md index f22f9469..7f08be53 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ The brackets corresponds to the optional dependencies to install while installin If you use a `requirements.txt` file in your repository, then you can add this library with the following line: ```txt -splat64[mips]>=0.25.2,<1.0.0 +splat64[mips]>=0.25.3,<1.0.0 ``` ### Optional dependencies diff --git a/pyproject.toml b/pyproject.toml index 055dea28..42c66889 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "splat64" # Should be synced with src/splat/__init__.py -version = "0.25.2" +version = "0.25.3" description = "A binary splitting tool to assist with decompilation and modding projects" readme = "README.md" license = {file = "LICENSE"} diff --git a/src/splat/__init__.py b/src/splat/__init__.py index 4ac87435..b1d3ae88 100644 --- a/src/splat/__init__.py +++ b/src/splat/__init__.py @@ -3,7 +3,7 @@ __package_name__ = __name__ # Should be synced with pyproject.toml -__version__ = "0.25.2" +__version__ = "0.25.3" __author__ = "ethteck" from . import util as util