Compare commits

..

32 Commits

Author SHA1 Message Date
Eric Kilmer eadedecf28 Ghidra 11.4 (#345)
* Backport patch to fix datatests/restruct.xml test
2025-07-18 12:37:14 -04:00
auto-updater[bot] 7807d6619a Update Ghidra HEAD to commit 8c48d9f11 (#343)
Bump Ghidra HEAD commit 8c48d9f11

Changed files:

```
M	Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc
M	Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc
M	Ghidra/Processors/PA-RISC/build.gradle
M	Ghidra/Processors/RISCV/data/languages/riscv.rv32b.sinc
M	Ghidra/Processors/x86/data/languages/avx.sinc
M	Ghidra/Processors/x86/data/languages/avx512.sinc
M	Ghidra/Processors/x86/data/languages/ia.sinc
M	Ghidra/Processors/x86/data/languages/x86.ldefs
```

Commit details:

```
[Commit 1/6]
Hash: 3d54c90cd604f43bf3029f27f714c37b3b3cd806
Date: 2025-05-30 20:47:03 -0400
Message: Fix RISC-V minu and max instructions' definitions (Closes #8215)

Files changed:
  M	Ghidra/Processors/RISCV/data/languages/riscv.rv32b.sinc

[Commit 2/6]
Hash: fe4244cbc952932b0923a34318021794ea2de805
Date: 2025-06-11 07:56:09 -0400
Message: GP-5622: Implemented pcode for several AARCH64 Neon instructions

Files changed:
  M	Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc
  M	Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc

[Commit 3/6]
Hash: b0750c2783b7ecadcd2d4dd62434a2bf09c0e7b3
Date: 2025-06-10 09:21:39 -0400
Message: GP-5725: Corrected operands for several AVX512 instructions

Files changed:
  M	Ghidra/Processors/x86/data/languages/avx.sinc
  M	Ghidra/Processors/x86/data/languages/avx512.sinc
  M	Ghidra/Processors/x86/data/languages/ia.sinc
  M	Ghidra/Processors/x86/data/languages/x86.ldefs

[Commit 4/6]
Hash: 92f25888950324a9d6e3ddcdd36299e5bd5d1fa9
Date: 2025-06-09 15:17:05 -0400
Message: GP-0 Corrected build.gradle for PA-RISC to allow pcode test execution

Files changed:
  M	Ghidra/Processors/PA-RISC/build.gradle

[Commit 5/6]
Hash: 17d8fdfcfa2251d9e1aa386c87ae5a34b04e797e
Date: 2025-06-09 18:48:09 -0400
Message: GP-0 corrected PA-RISC sleigh compile option

Files changed:
  M	Ghidra/Processors/PA-RISC/build.gradle

[Commit 6/6]
Hash: 2acf28604682cc72a5adb111f7acad44130f71f9
Date: 2025-06-09 15:17:05 -0400
Message: GP-0 Corrected build.gradle for PA-RISC to allow pcode test execution

Files changed:
  M	Ghidra/Processors/PA-RISC/build.gradle
```
2025-06-23 16:03:39 -04:00
dependabot[bot] 443cfcfdc7 build(deps): bump softprops/action-gh-release from 2.2.2 to 2.3.2 (#341)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.2 to 2.3.2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.2.2...v2.3.2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-11 09:16:46 -04:00
auto-updater[bot] d888cdd5ea Update Ghidra HEAD to commit 5b0cac73c (#339)
Bump Ghidra HEAD commit 5b0cac73c

Changed files:

```
M	Ghidra/Processors/Z80/data/languages/z80.slaspec
```

Commit details:

```
[Commit 1/1]
Hash: eb6fbb17ef9059b76d41942aa8268453d9ef4773
Date: 2025-05-13 14:24:39 +0000
Message: GP-5659: Fixed z80 sub instruction semantics

Files changed:
  M	Ghidra/Processors/Z80/data/languages/z80.slaspec
```
2025-06-09 11:23:28 -04:00
auto-updater[bot] 7a92039e1a Update Ghidra HEAD to commit 65b290624 (#338)
Bump Ghidra HEAD commit 65b290624

Changed files:

```
M	Ghidra/Processors/x86/data/languages/old/x86RealV1.lang
M	Ghidra/Processors/x86/data/languages/old/x86RealV2.lang
M	Ghidra/Processors/x86/data/languages/old/x86RealV3.lang
M	Ghidra/Processors/x86/data/languages/old/x86_ProtV2.lang
M	Ghidra/Processors/x86/data/languages/old/x86_ProtV3.lang
M	Ghidra/Processors/x86/data/languages/old/x86smmV1.lang
M	Ghidra/Processors/x86/data/languages/old/x86smmV2.lang
M	Ghidra/Processors/x86/data/languages/old/x86smmV3.lang
```

Commit details:

```
[Commit 1/1]
Hash: 271ec694ad598cf6569c8d273cc0424c49b2571e
Date: 2025-05-19 16:01:16 -0400
Message: GP-5704 Corrected language upgrade issue affecting x86-16 Protected and SMM mode variants.

Files changed:
  M	Ghidra/Processors/x86/data/languages/old/x86RealV1.lang
  M	Ghidra/Processors/x86/data/languages/old/x86RealV2.lang
  M	Ghidra/Processors/x86/data/languages/old/x86RealV3.lang
  M	Ghidra/Processors/x86/data/languages/old/x86_ProtV2.lang
  M	Ghidra/Processors/x86/data/languages/old/x86_ProtV3.lang
  M	Ghidra/Processors/x86/data/languages/old/x86smmV1.lang
  M	Ghidra/Processors/x86/data/languages/old/x86smmV2.lang
  M	Ghidra/Processors/x86/data/languages/old/x86smmV3.lang
```
2025-05-28 14:58:06 -04:00
auto-updater[bot] 4af948df00 Update Ghidra HEAD to commit fd2dde260 (#337)
Changed files:

```
M	Ghidra/Features/Decompiler/src/decompile/cpp/op.cc
M	Ghidra/Processors/x86/data/languages/ia.sinc
```

Commit details:

```
[Commit 1/3]
Hash: d6815ae407a9662a0fc8332a619eeabec07b7f18
Date: 2025-05-15 16:52:12 +0000
Message: GP-5665: Additional cvt reg32 dest fixes

Files changed:
  M	Ghidra/Processors/x86/data/languages/ia.sinc

[Commit 2/3]
Hash: 27a019d9f83b71b061ae93edaf933cc1ee429b36
Date: 2025-05-14 20:24:04 +0000
Message: GP-5676 fixed issue involving ops with one input in BooleanMatch::evalute

Files changed:
  M	Ghidra/Features/Decompiler/src/decompile/cpp/op.cc

[Commit 3/3]
Hash: 6ab48b885b304d1d22d434e4d0af8c3725aa2f03
Date: 2025-05-14 19:19:32 +0900
Message: x86: Fix missing zero-extension in CVTTSD2SI

Files changed:
  M	Ghidra/Processors/x86/data/languages/ia.sinc
```
2025-05-19 16:03:54 -04:00
auto-updater[bot] 95b848e8ed Update Ghidra HEAD to commit c58647b7d (#336)
Bump Ghidra HEAD commit c58647b7d

Changed files:

```
M	Ghidra/Processors/AARCH64/data/languages/AARCH64.cspec
M	Ghidra/Processors/AARCH64/data/languages/AARCH64_win.cspec
M	Ghidra/Processors/AARCH64/data/languages/AARCH64base.sinc
M	Ghidra/Processors/ARM/certification.manifest
M	Ghidra/Processors/ARM/data/languages/ARM.ldefs
M	Ghidra/Processors/ARM/data/languages/ARM.sinc
M	Ghidra/Processors/ARM/data/languages/ARMTHUMBinstructions.sinc
A	Ghidra/Processors/ARM/data/languages/ARM_apcs.cspec
M	Ghidra/Processors/ARM/data/languages/ARMneon.sinc
M	Ghidra/Processors/x86/data/languages/ia.sinc
M	Ghidra/Processors/x86/data/languages/x86.ldefs
```

Commit details:

```
[Commit 1/10]
Hash: 28ca53cb343e655aa4515ee041dbd93004833d44
Date: 2025-05-07 17:41:41 +0000
Message: GP-4923: cspec, ldefs, opinion file support for ARM apcs abi

Files changed:
  M	Ghidra/Processors/ARM/certification.manifest
  M	Ghidra/Processors/ARM/data/languages/ARM.ldefs
  A	Ghidra/Processors/ARM/data/languages/ARM_apcs.cspec

[Commit 2/10]
Hash: b0b1db632c40a90694c0a77bfcded58a6f141847
Date: 2025-05-07 17:40:54 +0000
Message: GP-5192: Fix aarch64 cspec to match aapcs calling convention

Files changed:
  M	Ghidra/Processors/AARCH64/data/languages/AARCH64.cspec
  M	Ghidra/Processors/AARCH64/data/languages/AARCH64_win.cspec

[Commit 3/10]
Hash: a9e193d811dd27ddb9d6fc8e5368ea66388f57a5
Date: 2025-05-07 13:51:22 +0000
Message: GP-5638 update language verions

Files changed:
  M	Ghidra/Processors/x86/data/languages/x86.ldefs

[Commit 4/10]
Hash: ce839ce9fcabd67308d5c669eaf8f0700c686fa0
Date: 2024-05-30 17:41:37 +0930
Message: x86: PUSH FS/GS long mode improvements.

Files changed:
  M	Ghidra/Processors/x86/data/languages/ia.sinc

[Commit 5/10]
Hash: a917cc0345df88aa01efdecba97324f82a7d1f11
Date: 2025-04-11 14:56:38 +0000
Message: GP-5587: Corrected parsing of AARCH64 dsb instruction

Files changed:
  M	Ghidra/Processors/AARCH64/data/languages/AARCH64base.sinc

[Commit 6/10]
Hash: 7413204896f07a68f3c7c68cd4568801dafbd4ae
Date: 2025-03-10 16:16:04 +0000
Message: GP-5469: Added additional arm VMRS/VMSR instruction variants

Files changed:
  M	Ghidra/Processors/ARM/data/languages/ARM.sinc
  M	Ghidra/Processors/ARM/data/languages/ARMneon.sinc

[Commit 7/10]
Hash: e6b326700c140ca0279c9fd31a59374941dfd721
Date: 2025-01-16 20:13:39 +0000
Message: GP-4731: Fixed decode for mrs

Files changed:
  M	Ghidra/Processors/ARM/data/languages/ARMTHUMBinstructions.sinc

[Commit 8/10]
Hash: 0c43ccb360fdb3815ab6c549107e2de65a7866b8
Date: 2024-12-08 18:52:24 +0000
Message: wrap stack limit instruction decoders in ifdef block

Files changed:
  M	Ghidra/Processors/ARM/data/languages/ARMTHUMBinstructions.sinc

[Commit 9/10]
Hash: bb39e4398be04f4f1762e68983cc972f1b9605a7
Date: 2024-12-08 18:49:34 +0000
Message: define stack limit registers for armv8-m

Files changed:
  M	Ghidra/Processors/ARM/data/languages/ARM.sinc

[Commit 10/10]
Hash: 220763c40f947e170d4892692539e7214fef081f
Date: 2023-04-24 12:25:49 +0200
Message: instruction decoding for armv8 stack pointer limit registers

Files changed:
  M	Ghidra/Processors/ARM/data/languages/ARMTHUMBinstructions.sinc
```
2025-05-12 08:58:38 -04:00
auto-updater[bot] 8e27d6ef0a Update Ghidra HEAD to commit 5e825ebb5 (#335)
Bump Ghidra HEAD commit 5e825ebb5

Changed files:

```
M	Ghidra/Processors/x86/data/languages/avx512.sinc
M	Ghidra/Processors/x86/data/languages/ia.sinc
```

Commit details:

```
[Commit 1/1]
Hash: 4f1933c1a38c559631dcc89d4ae46a7b97c6d55c
Date: 2025-04-24 12:57:38 -0400
Message: GP-5537: Added additional AVX512 instructions

Files changed:
  M	Ghidra/Processors/x86/data/languages/avx512.sinc
  M	Ghidra/Processors/x86/data/languages/ia.sinc
```
2025-05-05 09:07:18 -04:00
auto-updater[bot] 9cc6adc272 Update Ghidra HEAD to commit 4a46edc9f (#334)
Bump Ghidra HEAD commit 4a46edc9f

Changed files:

```
M	Ghidra/Features/Decompiler/src/decompile/cpp/action.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/address.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/architecture.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/block.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/blockaction.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/constseq.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/database.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/database.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/fspec.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/heritage.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/merge.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/prettyprint.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/printc.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/rangeutil.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.hh
M	Ghidra/Features/Decompiler/src/decompile/cpp/subflow.cc
M	Ghidra/Features/Decompiler/src/decompile/cpp/type.hh
M	Ghidra/Processors/SuperH4/data/languages/SuperH4.sinc
```

Commit details:

```
[Commit 1/3]
Hash: 6730154316df215c1c4125039c083e5d02d475b8
Date: 2025-04-21 07:54:19 -0400
Message: GP-0: Certify

Files changed:
  M	Ghidra/Features/Decompiler/src/decompile/cpp/action.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/address.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/blockaction.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/database.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/database.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/prettyprint.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/rangeutil.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.hh

[Commit 2/3]
Hash: 830306162955c3bffaffa5d0c65d85f0dc49cc99
Date: 2025-04-19 18:06:41 +0200
Message: Many typo's These were found using the command below searching for duplicated words, and manually going through the results to remove the false positives and reword the true positives. Sometimes I removed the doubled word and sometimes I replaced the duplicated word.
Details:
The grep command:
grep -nIEr '\b([a-zA-Z]+)[[:space:]*]+\1\b' ./Ghidra

Files changed:
  M	Ghidra/Features/Decompiler/src/decompile/cpp/action.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/address.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/architecture.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/block.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/blockaction.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/constseq.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/database.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/database.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/heritage.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/merge.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/prettyprint.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/printc.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/rangeutil.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.hh
  M	Ghidra/Features/Decompiler/src/decompile/cpp/subflow.cc
  M	Ghidra/Features/Decompiler/src/decompile/cpp/type.hh
  M	Ghidra/Processors/SuperH4/data/languages/SuperH4.sinc

[Commit 3/3]
Hash: b7e91e80a2cc8e54bf54f28a8551bd8378b30d90
Date: 2025-04-19 17:20:51 +0200
Message: Fix various "function" typos

Files changed:
  M	Ghidra/Features/Decompiler/src/decompile/cpp/fspec.hh
```
2025-04-28 09:09:27 -04:00
Eric Kilmer b763518f2f Refactor update ghidra script (#333)
Can now compare arbitrary commits/tags in Ghidra to collect all changes
between versions. This could be used to backfill or create a page with
all commit information between official version releases or keep running
tabs on changes introduced in HEAD.

Was testing out Cursor and LLM abilities to code this. Seemed to work
decently well!
2025-04-24 14:11:00 -04:00
Eric Kilmer a0a8aa27c0 Minor text output formatting changes, docs, mypy 2025-04-24 14:04:24 -04:00
Eric Kilmer 3efc7415f8 Reduce code duplication
Used Cursor v0.46.11 with claude-3.7-sonnet-thinking Agent mode with context
files:
- scripts/update_ghidra_head.py

and the following prompt (in the same chat as the parent commit):

---------------------

Please reduce code duplication when appropriate
2025-04-24 14:04:24 -04:00
Eric Kilmer 45dc2a0dbb Python Ghidra update script can compare arbitrary commits
Used Cursor v0.46.11 with claude-3.7-sonnet-thinking Agent mode with context
files:
- scripts/update_ghidra_head.py

and the following prompt:

---------------------

Please add an option to allow the user to specify begin and end commits, such
that the script does not read from or update the CMake file and requires
specifying an existing Ghidra git repository. For instance, it would look
something like the following, where `Ghidra_11.3_build` and `Ghidra_11.3.1_build`
are starting and ending commit, respectively.

```
python3 ./scripts/update_ghidra_head.py --ghidra-repo ./src/ghidra-HEAD Ghidra_11.3_build Ghidra_11.3.1_build
```

I also want it to support where only a starting commit is provided, and it shows
the commits from start to the current commit specified by `--ghidra-repo` path.
This also shouldn't update anything

```
python3 ./scripts/update_ghidra_head.py --ghidra-repo ./src/ghidra-HEAD Ghidra_11.3_build
```
2025-04-24 14:04:24 -04:00
Eric Kilmer b9eef57dee Refactor Python Ghidra update script for organization and clarity
Used Cursor v0.46.11 with claude-3.7-sonnet-thinking Agent mode with context
files:
- scripts/update_ghidra_head.py
- .github/workflows/main.yml

and the following prompt:

---------------------

Please refine the Python script to be more succinct, easier to understand, and
extendable. Use professional Python 3 constructs, syntax, and design. Do not
overcomplicate it. This script is standalone and won't be integrated into a
larger project.
2025-04-24 14:04:14 -04:00
Eric Kilmer f9c852bc57 Ghidra 11.3.2 (#332) 2025-04-22 15:32:07 -04:00
dependabot[bot] 3e96d296e0 build(deps): bump softprops/action-gh-release from 2.2.1 to 2.2.2 (#331)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.2.1...v2.2.2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-22 14:47:17 -04:00
auto-updater[bot] 9d4d450551 Update Ghidra HEAD to commit 13834faba (#330)
Bump Ghidra HEAD commit 13834faba

Changed files:

```
M	Ghidra/Processors/ARM/data/languages/ARM.cspec
M	Ghidra/Processors/ARM/data/languages/ARM.sinc
M	Ghidra/Processors/ARM/data/languages/ARM_v45.cspec
M	Ghidra/Processors/ARM/data/languages/ARM_win.cspec
M	Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc
M	Ghidra/Processors/MC6800/data/languages/6x09.sinc
M	Ghidra/Processors/MIPS/data/languages/mips16.sinc
M	Ghidra/Processors/x86/data/languages/ia.sinc
M	Ghidra/Processors/x86/data/languages/lockable.sinc
M	Ghidra/Processors/x86/data/languages/x86.ldefs
```

Commit details:

```
[Commit 1/5]
Hash: 41305fb45e91070800d2f0f58f49b2ba3010218a
Date: 2025-04-10 14:46:25 -0400
Message: GP-5011: Fixed x86 stack push/pop sizing issues

Files changed:
  M	Ghidra/Processors/x86/data/languages/ia.sinc

[Commit 2/5]
Hash: 30008b6715aeadc478c5861846d502804aa74003
Date: 2025-04-09 10:04:02 -0400
Message: GP-5030 improved x87 operand display

Files changed:
  M	Ghidra/Processors/x86/data/languages/ia.sinc
  M	Ghidra/Processors/x86/data/languages/lockable.sinc
  M	Ghidra/Processors/x86/data/languages/x86.ldefs

[Commit 3/5]
Hash: b702aa0a6f43eacf066ca194b8bce1794378ce53
Date: 2025-04-04 16:18:36 +0000
Message: GP-5301: Fix ARM/THUMB ISA mode switching for indirect branches in JIT.

Files changed:
  M	Ghidra/Processors/ARM/data/languages/ARM.cspec
  M	Ghidra/Processors/ARM/data/languages/ARM.sinc
  M	Ghidra/Processors/ARM/data/languages/ARM_v45.cspec
  M	Ghidra/Processors/ARM/data/languages/ARM_win.cspec
  M	Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc

[Commit 4/5]
Hash: 96c1ec0970ec1799d11661acde976bd1c7cbdb8a
Date: 2024-11-15 16:14:12 +0000
Message: GP-5131: Fixed MIPS16e instruction delayslot relative addressing

Files changed:
  M	Ghidra/Processors/MIPS/data/languages/mips16.sinc

[Commit 5/5]
Hash: 387c283e8953d28f8f44e8776734c405793e1d1f
Date: 2024-03-14 07:33:47 +0200
Message: Github issue #5767 - 6x09.sinc: Fix COM instruction
Details:
The complement macro was erroneously always complementing A register
instead of the macro parameter op. This caused errors with the COMB
and COM OP1 instructions.

Closes #5767.

Files changed:
  M	Ghidra/Processors/MC6800/data/languages/6x09.sinc
```
2025-04-16 10:25:22 -04:00
Eric Kilmer 184fabc5aa Add missing "Commit details" listing to automated PR commit body 2025-03-24 09:44:30 -04:00
auto-updater[bot] 4cedffc104 Update Ghidra HEAD to commit 69a66e0ee (#329)
Changed files:

```
M	Ghidra/Processors/x86/data/languages/ia.sinc
```

Commit details:

```
[Commit 1/1]
Hash: 48ae03833ea2bb9a9a29d2d11704486cb596e2bf
Date: 2025-01-23 14:58:46 +0000
Message: GP-5299: Fixed pop instruction macros

Files changed:
  M	Ghidra/Processors/x86/data/languages/ia.sinc
```
2025-03-24 07:14:04 -04:00
auto-updater[bot] 873108dd0e Update Ghidra HEAD to commit 24ca217a5 (#328)
Changed files:

```
M	Ghidra/Processors/AARCH64/data/languages/AARCH64_golang.cspec
M	Ghidra/Processors/AARCH64/data/languages/AARCH64_golang.register.info
M	Ghidra/Processors/x86/data/languages/x86-32-golang.cspec
M	Ghidra/Processors/x86/data/languages/x86-32-golang.register.info
M	Ghidra/Processors/x86/data/languages/x86-64-golang.cspec
M	Ghidra/Processors/x86/data/languages/x86-64-golang.register.info
```

Commit details:

```
[Commit 1/1]
Hash: 36c6c8ef77c20b7d1b29ae2b4cee501c2d01fbd2
Date: 2024-11-12 10:36:35 -0500
Message: GP-2432 golang api snapshot, generics, closures, gcwritebarrier
Details:
Apply golang runtime function signatures from info stored in json api
snapshot files.

The api snapshot files are created by a custom go helper program that
uses the go compiler parser to parse the go toolchain source tree and
writes the discovered function and type info into a json file.

The go-api-parser helper program is based off of work contributed by
github user monoidic via issue #6367.

Updates generic functions to take a generic dictionary RTTI
parameter (mostly to allow correct assignment of other parameters).

Updates closure functions to take a closure context parameter.  Closure
contexts are passed via a register that is not involved in normal
parameter passing.

Tweaks the signature of gcWriteBarrier functions so that they don't mess
up decompilation of functions that use them.

Files changed:
  M	Ghidra/Processors/AARCH64/data/languages/AARCH64_golang.cspec
  M	Ghidra/Processors/AARCH64/data/languages/AARCH64_golang.register.info
  M	Ghidra/Processors/x86/data/languages/x86-32-golang.cspec
  M	Ghidra/Processors/x86/data/languages/x86-32-golang.register.info
  M	Ghidra/Processors/x86/data/languages/x86-64-golang.cspec
  M	Ghidra/Processors/x86/data/languages/x86-64-golang.register.info
```
2025-03-19 05:36:01 -04:00
auto-updater[bot] 4ddd7f2f89 Update Ghidra HEAD to commit 2896551d6 (#324)
Changed files:

```
M       Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc
M       Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc
M       Ghidra/Processors/ARM/data/languages/ARMv8.sinc
M       Ghidra/Processors/PIC/data/languages/pic16.ldefs
M       Ghidra/Processors/PowerPC/data/patterns/PPC_BE_patterns.xml
M       Ghidra/Processors/PowerPC/data/patterns/PPC_LE_patterns.xml
```

Commit details:

```
[Commit 1/4]
Hash: 1bcc69aecee7ccb6957e5eebdafeea59244e16fb
Date: 2025-03-04 09:20:45 -0500
Message: GP-5402 aarch64 floating point comparisons and NAN

Files changed:
  M     Ghidra/Processors/AARCH64/data/languages/AARCH64instructions.sinc
  M     Ghidra/Processors/AARCH64/data/languages/AARCH64neon.sinc

[Commit 2/4]
Hash: 208f6f3ed1bcfde9fe66f0481b96e99d858dad76
Date: 2025-03-03 22:37:45 +0000
Message: GP-5411 Added plt thunk patterns, pre-fill of edit thunk GUI, loosened thunk address calculation for more complicated thunks

Files changed:
  M     Ghidra/Processors/PowerPC/data/patterns/PPC_BE_patterns.xml
  M     Ghidra/Processors/PowerPC/data/patterns/PPC_LE_patterns.xml

[Commit 3/4]
Hash: 26acd697ac0d0ff10c374f7c2537f9aa7096d24a
Date: 2024-05-16 15:06:26 +0930
Message: AArch32: fixed vselgt
Details:
* added 'and N == V' check missed in the vselcond "gt"

Files changed:
  M     Ghidra/Processors/ARM/data/languages/ARMv8.sinc

[Commit 4/4]
Hash: a38d30f2333190ae582f0a0a3669470d09693cb3
Date: 2024-02-07 21:19:25 +0100
Message: processors:pic: Fix PIC16F description

Files changed:
  M     Ghidra/Processors/PIC/data/languages/pic16.ldefs
```
2025-03-12 21:18:23 +00:00
auto-updater[bot] 00f42b7ef7 Update Ghidra HEAD to commit 58e19e947 (#323)
Changed files:

```
M       Ghidra/Processors/x86/data/languages/ia.sinc
M       Ghidra/Processors/x86/data/languages/x86.ldefs
```

Commit details:

```
[Commit 1/3]
Hash: 74066cdf78e7bc3f6b03a127a1ee647a8e36c357
Date: 2025-02-26 20:29:50 +0000
Message: GP-5424 updated x86 version numbers

Files changed:
  M     Ghidra/Processors/x86/data/languages/x86.ldefs

[Commit 2/3]
Hash: 6e8ef8deb1e98f1cabbf6cfca6a029dc30014e4d
Date: 2024-05-29 17:33:03 +0930
Message: x86: PUSHF/POPF address size fixes (64-bit mode)

Files changed:
  M     Ghidra/Processors/x86/data/languages/ia.sinc

[Commit 3/3]
Hash: f8b0d83b1605efbe1add57dbd001d3fe1cf49897
Date: 2025-02-25 12:19:27 -0500
Message: GP-5191 x86 fpu ip updates

Files changed:
  M     Ghidra/Processors/x86/data/languages/ia.sinc
```
2025-03-12 21:07:25 +00:00
Eric Kilmer 31868c9d70 Use 4 parallelism in CI
GitHub Actions runners have 4 vCPUs available
2025-03-12 16:51:19 -04:00
Eric Kilmer a96b7fdcc6 Actually fix Window ccache support in CI
Add CMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded to CI line
- Needs to be before the first project call

Set required CMake Policy for MSVC ccache debug type
2025-03-12 16:51:19 -04:00
Eric Kilmer 78ed150957 Ghidra 11.3.1 2025-03-12 15:25:56 -04:00
Eric Kilmer bc2f60c4b8 Only ignore test results on HEAD 2025-03-12 15:25:55 -04:00
auto-updater[bot] 85a209708f Update Ghidra HEAD to commit aaf910bd8 (#322)
Changed files:

```
M       Ghidra/Processors/ARM/data/languages/ARMTHUMBinstructions.sinc
M       Ghidra/Processors/ARM/data/languages/ARMneon.sinc
```

Commit details:

```
[Commit 1/2]
Hash: a2af457dea62bb31a176f5874f4918c63b8e59a6
Date: 2025-02-18 13:47:09 +0000
Message: GP-5386: Added missing ARM thumb strt instruction

Files changed:
  M     Ghidra/Processors/ARM/data/languages/ARMTHUMBinstructions.sinc

[Commit 2/2]
Hash: 065ef72288885ab10895b9a77056ef7bcec0b5bc
Date: 2024-05-20 11:22:54 +0930
Message: AArch32: fixed vdup
Details:
* 8byte vector duplication to 16byte performed bitwise AND (destructive) instead of OR of the 8byte shifted results, causing all 16byte vector duplications to be 0
* non-thumb constraints were used in a thumb instruction, added thumb specific constraints and separated them using TMode ctx field

Files changed:
  M     Ghidra/Processors/ARM/data/languages/ARMneon.sinc
```
2025-03-12 19:06:17 +00:00
auto-updater[bot] 6f193278c1 Update Ghidra HEAD to commit 2eff37f65 (#321)
Bump Ghidra HEAD commit 2eff37f65

Changed files:

```
M       Ghidra/Processors/AARCH64/data/languages/AARCH64ldst.sinc
```

Commit details:

```
[Commit 1/1]
Hash: 8473b248a17d3252babf49b7a809e97fd2a2c7a9
Date: 2024-04-30 15:43:55 +0930
Message: AA64: fix ld<n>r registers

Files changed:
  M     Ghidra/Processors/AARCH64/data/languages/AARCH64ldst.sinc
```
2025-03-12 18:39:41 +00:00
Eric Kilmer df49d10291 Ignore failing tests for now. Issue is reported to upstream 2025-03-12 13:54:55 -04:00
pgoodman d2f443e358 Bump Ghidra HEAD commit 684ed5ec6
**NOTE:** Upstream has failing tests. Reported here, within a PR to make
understanding test failures easier:
    https://github.com/NationalSecurityAgency/ghidra/pull/7883

Issue is caused by commit 69dd166c3ae0780c753999476f1fc7ea706ec876

Changed files:

```
M       Ghidra/Processors/ARM/data/languages/ARMneon.sinc
M       Ghidra/Processors/x86/data/languages/x86-64-gcc.cspec
M       Ghidra/Processors/x86/data/languages/x86-64-win.cspec
M       Ghidra/Processors/x86/data/languages/x86gcc.cspec
```

Commit details:

```
[Commit 1/2]
Hash: 115353d34c1d2162dcf8756adfd2af9fea3e1eae
Date: 2025-02-03 12:41:21 -0500
Message: GP-5268: Implemented ARM NEON vld4 instruction

Files changed:
  M     Ghidra/Processors/ARM/data/languages/ARMneon.sinc

[Commit 2/2]
Hash: 69dd166c3ae0780c753999476f1fc7ea706ec876
Date: 2025-02-04 21:37:27 +0000
Message: GP-5183 Fixes to x86 and x64 cspecs

Files changed:
  M     Ghidra/Processors/x86/data/languages/x86-64-gcc.cspec
  M     Ghidra/Processors/x86/data/languages/x86-64-win.cspec
  M     Ghidra/Processors/x86/data/languages/x86gcc.cspec
```
2025-03-12 13:54:09 -04:00
Eric Kilmer b871c4a6b8 Fix bug with Python Ghidra update scripts
It wasn't splitting the commits correctly and added text to the commit
body when there wasn't one

Also put the commit body starting on a new line
2025-03-12 13:11:21 -04:00
Eric Kilmer 58f4812a02 Improve Ghidra update process with commit details and dry run mode (#325)
Add detailed commit information to the Ghidra HEAD update process:
- Display information about each commit affecting sleigh files
- Include these commit details in GitHub Action PR descriptions
- Add --dry-run flag to preview changes without modifying files
- Improve output formatting and error handling

Also reformat the Python script with ruff
2025-03-12 14:41:09 +00:00
13 changed files with 563 additions and 258 deletions
+15 -12
View File
@@ -56,6 +56,7 @@ jobs:
max_attempts: 3
command: |
choco install ccache doxygen.install graphviz
Add-Content -Path $env:GITHUB_ENV -Value "CCACHE_EXE=$(Resolve-Path C:\ProgramData\chocolatey\lib\ccache\tools\*\ccache.exe)"
vcpkg install zlib:x64-windows-static
- name: Generate cache key
@@ -100,17 +101,19 @@ jobs:
run: cmake "--preset=ci-$("${{ matrix.os }}".split("-")[0])"
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-Dsleigh_RELEASE_TYPE=${{ matrix.release }}
"-DCMAKE_PROJECT_INCLUDE:FILEPATH=${{ github.workspace }}/cmake/ccache-msvc.cmake"
-DCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded
- name: Build the project
run: cmake
--build build
--config ${{ matrix.build_type }}
-j 2
-j 4
-v
- name: Test the project
working-directory: build
run: ctest -VV -C ${{ matrix.build_type }}
run: ctest -VV -C ${{ matrix.build_type }} ${{ matrix.release == 'HEAD' && '|| true' || '' }}
- name: Build the docs
run: cmake
@@ -122,7 +125,7 @@ jobs:
- name: Run the example
run: cmake
--build build
-j 2
-j 4
--config ${{ matrix.build_type }}
--target sleigh_example_runner
@@ -142,7 +145,7 @@ jobs:
working-directory: tests/find_package
run: |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
cmake --build build -j 2 --config ${{ matrix.build_type }}
cmake --build build -j 4 --config ${{ matrix.build_type }}
cd build
ctest -V -C ${{ matrix.build_type }}
- name: Test install directory Windows
@@ -150,7 +153,7 @@ jobs:
working-directory: tests/find_package
run: |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} "-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows-static
cmake --build build -j 2 --config ${{ matrix.build_type }}
cmake --build build -j 4 --config ${{ matrix.build_type }}
cd build
ctest -V -C ${{ matrix.build_type }}
@@ -159,7 +162,7 @@ jobs:
working-directory: extra-tools/sleigh-lift
run: |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
cmake --build build -j 2 --config ${{ matrix.build_type }}
cmake --build build -j 4 --config ${{ matrix.build_type }}
cmake --install build --config ${{ matrix.build_type }} --prefix install
./install/bin/sleigh-lift --version
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000
@@ -169,7 +172,7 @@ jobs:
working-directory: extra-tools/sleigh-lift
run: |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} "-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows-static
cmake --build build -j 2 --config ${{ matrix.build_type }}
cmake --build build -j 4 --config ${{ matrix.build_type }}
cmake --install build --config ${{ matrix.build_type }} --prefix install
./install/bin/sleigh-lift --version
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000
@@ -178,7 +181,7 @@ jobs:
- name: Create the packages
run: cmake
--build build
-j 2
-j 4
--config ${{ matrix.build_type }}
--target package
@@ -188,7 +191,7 @@ jobs:
sudo dpkg -i build/*.deb
cmake -S tests/find_package -B find_package_build -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
cmake --build find_package_build -j 2 --config ${{ matrix.build_type }} --verbose
cmake --build find_package_build -j 4 --config ${{ matrix.build_type }} --verbose
- name: Locate the packages (RelWithDebInfo only)
if: matrix.build_type == 'RelWithDebInfo'
@@ -217,7 +220,7 @@ jobs:
path: ${{ env.DEB_PACKAGE_PATH }}
- name: Release DEB package artifact (RelWithDebInfo only)
uses: softprops/action-gh-release@v2.2.1
uses: softprops/action-gh-release@v2.3.2
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable'
with:
files: ${{ env.DEB_PACKAGE_PATH }}
@@ -230,7 +233,7 @@ jobs:
name: ${{ env.RPM_PACKAGE_NAME }}
path: ${{ env.RPM_PACKAGE_PATH }}
- name: Release RPM package artifact (RelWithDebInfo only)
uses: softprops/action-gh-release@v2.2.1
uses: softprops/action-gh-release@v2.3.2
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable'
with:
files: ${{ env.RPM_PACKAGE_PATH }}
@@ -244,7 +247,7 @@ jobs:
path: ${{ env.TGZ_PACKAGE_PATH }}
- name: Release TGZ package artifact (RelWithDebInfo only)
uses: softprops/action-gh-release@v2.2.1
uses: softprops/action-gh-release@v2.3.2
if: matrix.build_type == 'RelWithDebInfo' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable'
with:
files: ${{ env.TGZ_PACKAGE_PATH }}
+8
View File
@@ -45,10 +45,18 @@ jobs:
Changed files:
${{ steps.head_update.outputs.changed_files }}
Commit details:
${{ steps.head_update.outputs.commit_details }}
body: |
Changed files:
${{ steps.head_update.outputs.changed_files }}
Commit details:
${{ steps.head_update.outputs.commit_details }}
branch: cron/update-ghidra-${{ steps.head_update.outputs.short_sha }}
delete-branch: true
token: ${{ steps.generate-token.outputs.token }}
+3
View File
@@ -8,6 +8,9 @@
cmake_minimum_required(VERSION 3.18)
# For MSVC ccache to use /Z7 with CMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded
cmake_policy(SET CMP0141 NEW)
include(cmake/prelude.cmake)
# Sets "library_root" variable for decompiler cpp root directory
+34
View File
@@ -0,0 +1,34 @@
# This module configures ccache to work with MSVC
# Based on: https://github.com/ccache/ccache/wiki/MS-Visual-Studio
# Only do this for Windows MSVC builds
if(NOT WIN32 OR NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
return()
endif()
# Assume the parent environment has this set
# Chocolatey creates a shim which doesn't work when renamed
set(CCACHE_EXE "$ENV{CCACHE_EXE}")
if(NOT CCACHE_EXE)
message(STATUS "ccache not found - MSVC ccache support disabled")
return()
endif()
message(STATUS "Found ccache - ${CCACHE_EXE}")
message(STATUS "Configuring ccache for MSVC")
file(COPY_FILE
"${CCACHE_EXE}" "${CMAKE_BINARY_DIR}/cl.exe"
ONLY_IF_DIFFERENT)
# By default Visual Studio generators will use /Zi which is not compatible
# with ccache, so tell Visual Studio to use /Z7 instead.
message(STATUS "Setting MSVC debug information format to 'Embedded'")
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo>:Embedded>")
set(CMAKE_VS_GLOBALS
"CLToolExe=cl.exe"
"CLToolPath=${CMAKE_BINARY_DIR}"
"UseMultiToolTask=true"
"DebugInformationFormat=OldStyle"
)
+453 -220
View File
@@ -1,281 +1,514 @@
#!/usr/bin/env python3
"""Script to update CMake files for latest Ghidra Sleigh changes"""
import argparse
import os
import re
import shutil
import subprocess
import sys
import tempfile
from pathlib import Path
from typing import AnyStr, Union, List
from typing import List, Dict, Optional, Any, Tuple
# Constants
PROJECT_ROOT = Path(__file__).parent.parent.resolve()
HEAD_SPEC_FILE = PROJECT_ROOT / "src" / "spec_files_HEAD.cmake"
assert HEAD_SPEC_FILE.exists()
SETUP_GHIDRA_FILE = PROJECT_ROOT / "src" / "setup-ghidra-source.cmake"
assert SETUP_GHIDRA_FILE.exists()
# Paths in Ghidra repo that affect this repo. Used with git diff
SLEIGH_PATHS: List[str] = [
# Source code and tests
"Ghidra/Features/Decompiler/src/decompile",
# Sleigh files
"Ghidra/Processors",
# Paths in Ghidra repo that affect this repo
SLEIGH_PATHS = [
"Ghidra/Features/Decompiler/src/decompile", # Source code and tests
"Ghidra/Processors", # Sleigh files
]
GIT_EXE = shutil.which("git")
assert GIT_EXE is not None
# Regex patterns
HEAD_COMMIT_PATTERN = r"set\(ghidra_head_git_tag \"([0-9A-Fa-f]+)\"\)"
VERSION_PATTERN = r"set\(ghidra_head_version \"([0-9]+(\.[0-9]+)*)\"\)"
APP_VERSION_PATTERN = r"application.version=([0-9]+(\.[0-9]+)*)"
def msg(s: str) -> None:
print(f"[!] {s}")
class GitHelper:
"""Helper class for Git operations"""
def __init__(self) -> None:
self.git_exe = shutil.which("git")
if self.git_exe is None:
raise RuntimeError("Git executable not found in PATH")
PathString = Union[AnyStr, Path]
def run(
self, args: List[str], cwd: Path, capture_output: bool = False
) -> subprocess.CompletedProcess:
"""Run a git command with the given arguments"""
assert self.git_exe is not None
cmd = [self.git_exe] + args
return subprocess.run(
cmd,
cwd=cwd,
stdout=subprocess.PIPE if capture_output else sys.stdout,
stderr=subprocess.PIPE if capture_output else sys.stderr,
check=True,
text=True if capture_output else False,
)
def clone(self, repo_url: str, target_dir: Path) -> None:
"""Clone a git repository"""
print(f"Cloning {repo_url} to {target_dir}...")
self.run(["clone", repo_url, str(target_dir)], cwd=PROJECT_ROOT)
def clone_ghidra_git(clone_dir: PathString) -> None:
"""Clone the Ghidra git dir at specified directory"""
assert GIT_EXE is not None
subprocess.run(
[
GIT_EXE,
"clone",
"https://github.com/NationalSecurityAgency/ghidra",
clone_dir,
],
stdout=sys.stdout,
stderr=sys.stderr,
check=True,
)
def get_head_commit(self, repo_dir: Path) -> str:
"""Get the HEAD commit SHA of the repository"""
result = self.run(["rev-parse", "HEAD"], cwd=repo_dir, capture_output=True)
return result.stdout.strip()
def check_commit_exists(self, repo_dir: Path, commit: str) -> bool:
"""Check if a commit exists in the repository"""
try:
self.run(["cat-file", "-e", commit], repo_dir, capture_output=True)
return True
except subprocess.CalledProcessError:
return False
def git_get_changed_files(
repo: Path, old_commit: str, new_commit: str, paths: List[str], ci: bool
) -> List[str]:
"""Get list of changed files from old_commit to new_commit at the specified paths"""
assert GIT_EXE is not None
changed_files = (
subprocess.run(
def get_commit_info(
self, repo_dir: Path, old_commit: str, new_commit: str, paths: List[str]
) -> List[Dict[str, Any]]:
"""Get detailed information about commits affecting specified paths"""
result = self.run(
[
"log",
"--pretty=format:%H%n%ad%n%s%n%b%n====",
"--date=iso",
f"{old_commit}..{new_commit}",
"--",
*paths,
],
cwd=repo_dir,
capture_output=True,
)
log_output = result.stdout.strip()
commits = []
if log_output:
commit_sections = log_output.split("\n====")
for section in commit_sections:
if not section.strip():
continue
lines = section.strip().split("\n")
commit_hash = lines[0]
commit_date = lines[1]
commit_msg = lines[2]
body = "\n".join(lines[3:]) if len(lines) > 3 else ""
# Get files modified in this commit
files_result = self.run(
[
"diff-tree",
"--no-commit-id",
"--name-status",
"-r",
commit_hash,
"--",
*paths,
],
cwd=repo_dir,
capture_output=True,
)
commit_files = files_result.stdout.strip().splitlines()
# Filter out Java files
commit_files = [f for f in commit_files if not f.endswith(".java")]
if commit_files:
commits.append(
{
"hash": commit_hash,
"date": commit_date,
"message": commit_msg,
"body": body,
"files": commit_files,
}
)
return commits
def get_changed_files(
self, repo_dir: Path, old_commit: str, new_commit: str, paths: List[str]
) -> List[str]:
"""Get list of files changed between commits"""
result = self.run(
[
GIT_EXE,
"diff",
"--name-status",
f"{old_commit}...{new_commit}",
"--",
*paths,
],
cwd=repo,
cwd=repo_dir,
capture_output=True,
check=True,
)
.stdout.decode()
.strip()
.splitlines()
)
changed_files = list(filter(lambda p: not p.endswith(".java"), changed_files))
num_changed = len(changed_files)
if num_changed > 0:
msg(f"Found {num_changed} changed sleigh files:")
print("\n".join(changed_files))
if ci:
with open(os.environ["GITHUB_OUTPUT"], "a") as gh_out:
gh_out.write("changed_files<<EOF\n")
gh_out.write("```\n")
gh_out.write("\n".join(changed_files))
gh_out.write("\n```\n")
gh_out.write("EOF\n")
return changed_files
changed_files = result.stdout.strip().splitlines()
# Filter out Java files
changed_files = [f for f in changed_files if not f.endswith(".java")]
return changed_files
def is_sleigh_updated(
ghidra_repo: Path, old_commit: str, new_commit: str, ci: bool
) -> bool:
"""Check if files we're interested in have been touched at all"""
changed_files = git_get_changed_files(
ghidra_repo, old_commit, new_commit, SLEIGH_PATHS, ci
)
return len(changed_files) > 0
class GhidraUpdater:
"""Handles updating Ghidra-related CMake files"""
def __init__(self, ci_mode: bool = False, dry_run: bool = False) -> None:
self.git = GitHelper()
self.ci_mode = ci_mode
self.dry_run = dry_run
def update_head_commit(
setup_file: Path, ghidra_repo_dir: PathString, latest_commit: str, ci: bool
) -> bool:
"""Edit the Ghidra script to point to the latest commit"""
head_commit_line = r"set\(ghidra_head_git_tag \"([0-9A-Fa-f]+)\"\)"
updated = False
# Validate required paths
if not HEAD_SPEC_FILE.exists():
raise FileNotFoundError(f"HEAD spec file not found: {HEAD_SPEC_FILE}")
if not SETUP_GHIDRA_FILE.exists():
raise FileNotFoundError(f"Setup Ghidra file not found: {SETUP_GHIDRA_FILE}")
fd, abspath = tempfile.mkstemp()
with open(fd, "w") as w:
with setup_file.open("r") as r:
for line in r:
match = re.search(head_commit_line, line)
if match is not None:
# Set up GitHub Actions outputs if in CI mode
if self.ci_mode and "GITHUB_OUTPUT" not in os.environ:
raise RuntimeError("CI mode requires GITHUB_OUTPUT environment variable")
def clone_ghidra_if_needed(
self, repo_dir: Optional[Path] = None
) -> Tuple[Path, Optional[tempfile.TemporaryDirectory]]:
"""Clone Ghidra repo if a directory is not provided"""
temp_dir = None
if repo_dir is None:
temp_dir = tempfile.TemporaryDirectory()
repo_dir = Path(temp_dir.name) / "ghidra"
self.git.clone("https://github.com/NationalSecurityAgency/ghidra", repo_dir)
return repo_dir, temp_dir
def log_github_output(self, key: str, value: str) -> None:
"""Log output for GitHub Actions"""
if self.ci_mode:
with open(os.environ["GITHUB_OUTPUT"], "a") as f:
f.write(f"{key}={value}\n")
def log_github_multiline_output(self, key: str, value: str) -> None:
"""Log multiline output for GitHub Actions"""
if self.ci_mode:
with open(os.environ["GITHUB_OUTPUT"], "a") as f:
f.write(f"{key}<<EOF\n")
f.write(value)
f.write("\nEOF\n")
def display_changes(
self, repo_dir: Path, start_commit: str, end_commit: str
) -> Tuple[List[str], List[Dict[str, Any]]]:
"""Display changes between two commits and return the changed files and commit info"""
# Get changed files
changed_files = self.git.get_changed_files(
repo_dir, start_commit, end_commit, SLEIGH_PATHS
)
if not changed_files:
print("No sleigh files were modified between these commits")
return [], []
# Output changes for logging
num_changed = len(changed_files)
print(f"Found {num_changed} changed sleigh files:")
for file in changed_files:
print(f" {file}")
# Get detailed commit info for logging
commit_info = self.git.get_commit_info(
repo_dir, start_commit, end_commit, SLEIGH_PATHS
)
if commit_info:
print(f"\nCommits affecting sleigh files ({len(commit_info)}):\n")
for i, commit in enumerate(commit_info, 1):
print(f"[Commit {i}/{len(commit_info)}]")
print(f"Hash: {commit['hash']}")
print(f"Date: {commit['date']}")
print(f"Message: {commit['message']}")
if commit["body"]:
print(f"Details:\n{commit['body']}")
print("\nFiles changed:")
for file in commit["files"]:
print(f" {file}")
print("")
# Log outputs for GitHub Actions
if self.ci_mode:
self.log_github_output("short_sha", end_commit[:9])
self.log_github_output("did_update", "true")
# Log changed files
changed_files_str = "```\n" + "\n".join(changed_files) + "\n```"
self.log_github_multiline_output("changed_files", changed_files_str)
# Log commit details
if commit_info:
details = ["```"]
for i, commit in enumerate(commit_info, 1):
details.append(f"[Commit {i}/{len(commit_info)}]")
details.append(f"Hash: {commit['hash']}")
details.append(f"Date: {commit['date']}")
details.append(f"Message: {commit['message']}")
if commit["body"]:
details.append(f"Details:\n{commit['body']}")
details.append("\nFiles changed:")
for file in commit["files"]:
details.append(f" {file}")
details.append("")
# Replace trailing newline for last entry
details[-1] = "```"
self.log_github_multiline_output("commit_details", "\n".join(details))
return changed_files, commit_info
def update_head_commit(
self, repo_dir: Path, setup_file: Path
) -> Tuple[bool, str, str]:
"""Update the HEAD commit in the setup file if needed"""
# Get latest commit hash
latest_commit = self.git.get_head_commit(repo_dir)
current_commit = None
# Find current commit hash in setup file
with setup_file.open("r") as f:
for line in f:
match = re.search(HEAD_COMMIT_PATTERN, line)
if match:
current_commit = match.group(1)
if current_commit != latest_commit:
msg(f"Found new commit: {latest_commit}")
if is_sleigh_updated(
ghidra_repo_dir, current_commit, latest_commit, ci
):
line = re.sub(
head_commit_line,
f'set(ghidra_head_git_tag "{latest_commit}")',
line,
)
updated = True
else:
msg("No sleigh files updated")
w.write(line)
break
# Make the swap with the new content
shutil.copymode(setup_file, abspath)
os.remove(setup_file)
shutil.move(abspath, setup_file)
return updated
if current_commit is None:
raise ValueError("Could not find current commit in setup file")
# Check if update is needed
if current_commit == latest_commit:
print(f"Already at the latest commit: {latest_commit}")
return False, current_commit, latest_commit
def update_head_version_file(setup_file: Path, ghidra_root_dir: PathString) -> None:
"""Edit the Ghidra script to point to the latest version"""
cmake_head_version_line = (
r"set\(ghidra_head_version \"([0-9]+(\.[0-9]+)?(\.[0-9]+)?)\"\)"
)
print(f"Found new commit: {latest_commit}")
with (ghidra_root_dir / "Ghidra" / "application.properties").open("r") as f:
content = f.read()
match = re.search(
r"application.version=([0-9]+(\.[0-9]+)?(\.[0-9]+)?)", content
# Check if sleigh files were updated and display changes
changed_files, commit_info = self.display_changes(
repo_dir, current_commit, latest_commit
)
assert match is not None
source_version = match.group(1)
with setup_file.open("r") as f:
content = f.read()
match = re.search(cmake_head_version_line, content)
assert match is not None
cmake_version = match.group(1)
if not changed_files:
return False, current_commit, latest_commit
if cmake_version == source_version:
msg(f"No new version bump")
return
# Update the setup file if not in dry run mode
if not self.dry_run:
self._replace_in_file(
setup_file,
HEAD_COMMIT_PATTERN,
f'set(ghidra_head_git_tag "{latest_commit}")',
)
msg(f"Found new version: {source_version}")
fd, abspath = tempfile.mkstemp()
with open(fd, "w") as w:
with setup_file.open("r") as r:
for line in r:
match = re.search(cmake_head_version_line, line)
if match is not None:
line = re.sub(
cmake_head_version_line,
f'set(ghidra_head_version "{source_version}")',
line,
)
w.write(line)
return True, current_commit, latest_commit
# Make the swap with the new content
shutil.copymode(setup_file, abspath)
os.remove(setup_file)
shutil.move(abspath, setup_file)
def update_version(self, repo_dir: Path, setup_file: Path) -> None:
"""Update the Ghidra version in the setup file if needed"""
# Get source version from application.properties
app_properties_file = repo_dir / "Ghidra" / "application.properties"
with app_properties_file.open("r") as f:
content = f.read()
match = re.search(APP_VERSION_PATTERN, content)
if not match:
raise ValueError("Could not find version in application.properties")
source_version = match.group(1)
# Get current version from setup file
with setup_file.open("r") as f:
content = f.read()
match = re.search(VERSION_PATTERN, content)
if not match:
raise ValueError("Could not find version in setup file")
cmake_version = match.group(1)
# Check if update is needed
if cmake_version == source_version:
print("No new version bump")
return
print(f"Found new version: {source_version}")
# Update the setup file if not in dry run mode
if not self.dry_run:
self._replace_in_file(
setup_file,
VERSION_PATTERN,
f'set(ghidra_head_version "{source_version}")',
)
def update_spec_files(self, repo_dir: Path, spec_file: Path) -> None:
"""Update the list of spec files in the CMake file"""
# Find all .slaspec files
spec_files = []
processors_dir = repo_dir / "Ghidra" / "Processors"
for path in processors_dir.glob("**/*.slaspec"):
spec_files.append(path.relative_to(repo_dir))
spec_files.sort()
print(f"Found {len(spec_files)} slaspec files")
# Write the updated spec file list
if not self.dry_run and spec_files:
with spec_file.open("w") as f:
f.write("set(spec_file_list\n")
for spec in spec_files:
f.write(f' "${{ghidrasource_SOURCE_DIR}}/{spec}"\n')
f.write(")\n")
def _replace_in_file(self, file_path: Path, pattern: str, replacement: str) -> None:
"""Replace text in a file matching the pattern with the replacement"""
temp_file = tempfile.NamedTemporaryFile(mode="w", delete=False)
with file_path.open("r") as src, open(temp_file.name, "w") as dst:
for line in src:
dst.write(re.sub(pattern, replacement, line))
# Replace the original file with the modified one
shutil.copymode(file_path, temp_file.name)
os.remove(file_path)
shutil.move(temp_file.name, file_path)
def update(self, repo_dir: Optional[Path] = None) -> bool:
"""Main update method to orchestrate the update process"""
# Clone repo if not provided
repo_dir, temp_dir = self.clone_ghidra_if_needed(repo_dir)
try:
# Update the HEAD commit
did_update, _, _ = self.update_head_commit(repo_dir, SETUP_GHIDRA_FILE)
# If commit was updated, also update version and spec files
if did_update:
self.update_version(repo_dir, SETUP_GHIDRA_FILE)
self.update_spec_files(repo_dir, HEAD_SPEC_FILE)
return did_update
finally:
# Clean up temp directory if created
if temp_dir:
temp_dir.cleanup()
def compare_commits(
self, repo_dir: Path, start_commit: str, end_commit: Optional[str] = None
) -> None:
"""Compare changes between two commits without updating any files"""
# If end_commit is not provided, use HEAD
if end_commit is None:
end_commit = self.git.get_head_commit(repo_dir)
print(f"Using HEAD as end commit: {end_commit}")
print(f"Comparing commits {start_commit} to {end_commit}")
# Check if the commits exist
for commit in [start_commit, end_commit]:
if not self.git.check_commit_exists(repo_dir, commit):
raise ValueError(f"Commit {commit} does not exist in the repository")
# Display changes
self.display_changes(repo_dir, start_commit, end_commit)
def update_spec_files(ghidra_repo_dir: PathString, cmake_file: PathString):
"""Based on the files in the Ghidra repo, write an updated list of spec files."""
spec_files = []
for dirpath, _, fnames in os.walk(ghidra_repo_dir / "Ghidra" / "Processors"):
for file in fnames:
if file.endswith(".slaspec"):
spec_files.append((Path(dirpath) / file).relative_to(ghidra_repo_dir))
assert len(spec_files) > 0
spec_files.sort()
msg(f"Found {len(spec_files)} slaspec files")
with open(cmake_file, "w") as f:
f.write("set(spec_file_list\n")
for spec in spec_files:
f.write(f' "${{ghidrasource_SOURCE_DIR}}/{spec}"\n')
f.write(")\n")
def get_latest_commit(ghidra_repo_dir: PathString) -> str:
"""Get the commit SHA that the repo is currently at"""
assert GIT_EXE is not None
return (
subprocess.run(
[GIT_EXE, "rev-parse", "HEAD"],
cwd=ghidra_repo_dir,
capture_output=True,
check=True,
)
.stdout.decode()
.strip()
)
def update_head(
setup_file: Path, spec_file: Path, ghidra_repo_dir: PathString, ci: bool
) -> bool:
"""Update to latest head and make changes to the CMake files"""
tmpdirname = None
if ghidra_repo_dir is None:
tmpdirname = tempfile.TemporaryDirectory()
ghidra_repo_dir = Path(tmpdirname.name) / "ghidra"
clone_ghidra_git(ghidra_repo_dir)
latest_commit = get_latest_commit(ghidra_repo_dir)
did_update_commit = update_head_commit(
setup_file, ghidra_repo_dir, latest_commit, ci
)
if did_update_commit:
if ci:
with open(os.environ["GITHUB_OUTPUT"], "a") as gh_out:
gh_out.write(f"short_sha={latest_commit[:9]}\n")
gh_out.write("did_update=true\n")
update_spec_files(ghidra_repo_dir, spec_file)
update_head_version_file(setup_file, ghidra_repo_dir)
else:
msg(f"Already at the latest commit: {latest_commit}")
if tmpdirname is not None:
tmpdirname.cleanup()
if did_update_commit:
return True
else:
return False
if __name__ == "__main__":
import argparse, os
def dir_path(string):
if string is None:
return string
string = Path(string).expanduser().resolve()
if string.is_dir():
return string
else:
raise NotADirectoryError(string)
def parse_args() -> argparse.Namespace:
"""Parse command line arguments"""
parser = argparse.ArgumentParser(
description="Update CMake files to latest Ghidra commit."
description="Find and collect changes between two Ghidra commits. Update CMake files to latest Ghidra commit if specified."
)
parser.add_argument(
"--ghidra-repo",
type=dir_path,
type=str,
help="Use a specific Ghidra repo directory instead of downloading it from the internet",
)
parser.add_argument(
"--ci",
action="store_true",
help="Output GitHub Actions commands for recording information in CI",
help="Output GitHub Actions commands for recording information in CI. Requires GITHUB_OUTPUT environment variable.",
)
parser.add_argument(
"--dry-run",
action="store_true",
help="Show what would be changed without actually modifying any files",
)
parser.add_argument(
"start_commit",
nargs="?",
type=str,
help="Starting commit for comparison. When specified, no CMake files will be updated.",
)
parser.add_argument(
"end_commit",
nargs="?",
type=str,
help="Ending commit for comparison. If not specified, uses current HEAD of the repo. Requires start_commit.",
)
args = parser.parse_args()
if args.ci:
assert (
"GITHUB_OUTPUT" in os.environ
), "CI needs `GITHUB_OUTPUT` environment variable set to a file location"
# Convert ghidra-repo path if provided
if args.ghidra_repo:
repo_path = Path(args.ghidra_repo).expanduser().resolve()
if not repo_path.is_dir():
parser.error(f"Ghidra repo directory does not exist: {repo_path}")
args.ghidra_repo = repo_path
if not update_head(SETUP_GHIDRA_FILE, HEAD_SPEC_FILE, args.ghidra_repo, args.ci):
msg("No update required")
else:
msg("Update required!")
# Validate commit arguments
if args.end_commit and not args.start_commit:
parser.error("Cannot specify end_commit without start_commit")
# If commits are specified, a Ghidra repo is required
if args.start_commit and not args.ghidra_repo:
parser.error("--ghidra-repo is required when specifying commits")
return args
def main() -> None:
"""Main entry point"""
args = parse_args()
try:
updater = GhidraUpdater(ci_mode=args.ci, dry_run=args.dry_run)
# If start_commit is specified, run in comparison mode
if args.start_commit:
updater.compare_commits(
args.ghidra_repo, args.start_commit, args.end_commit
)
else:
# Normal update mode
did_update = updater.update(args.ghidra_repo)
if not did_update:
print("No update required")
elif args.dry_run:
print("Update would be required!")
else:
print("Update required!")
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
@@ -1,7 +1,7 @@
From e694ad80e2965178c541a7414e55c76a1e318411 Mon Sep 17 00:00:00 2001
From 54276cc9def6836b02a3f77471b84a7a096eb8ec Mon Sep 17 00:00:00 2001
From: Eric Kilmer <eric.d.kilmer@gmail.com>
Date: Mon, 12 Aug 2024 12:02:35 -0400
Subject: [PATCH 1/6] Fix UBSAN errors in decompiler
Subject: [PATCH 1/7] Fix UBSAN errors in decompiler
Co-authored-by: Alex Cameron <asc@tetsuo.sh>
---
@@ -18,10 +18,10 @@ Co-authored-by: Alex Cameron <asc@tetsuo.sh>
10 files changed, 44 insertions(+), 18 deletions(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc
index 3e9f310446..c903810382 100644
index cafce3f7ba..b696fe6879 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc
@@ -2868,8 +2868,12 @@ void ProtoModelMerged::decode(Decoder &decoder)
@@ -2893,8 +2893,12 @@ void ProtoModelMerged::decode(Decoder &decoder)
modellist.push_back(mymodel);
}
decoder.closeElement(elemId);
@@ -37,7 +37,7 @@ index 3e9f310446..c903810382 100644
void ParameterBasic::setTypeLock(bool val)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/op.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/op.cc
index e165951fe6..00169e22e5 100644
index a62ee56fc3..66bcd48db0 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/op.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/op.cc
@@ -666,7 +666,11 @@ uintb PcodeOp::getNZMaskLocal(bool cliploop) const
@@ -116,7 +116,7 @@ index ca9d71ab99..85d4dd281d 100644
return res;
}
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc
index b7fda34cc9..a3d164aa2d 100644
index 2b4a9474e5..aa86e740b2 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc
@@ -976,7 +976,12 @@ int4 RulePullsubIndirect::applyOp(PcodeOp *op,Funcdata &data)
@@ -133,7 +133,7 @@ index b7fda34cc9..a3d164aa2d 100644
consume = ~consume;
if ((consume & indir->getIn(0)->getConsume())!=0) return 0;
@@ -7288,8 +7293,9 @@ int4 RulePtrsubCharConstant::applyOp(PcodeOp *op,Funcdata &data)
@@ -7298,8 +7303,9 @@ int4 RulePtrsubCharConstant::applyOp(PcodeOp *op,Funcdata &data)
Varnode *sb = op->getIn(0);
Datatype *sbType = sb->getTypeReadFacing(op);
if (sbType->getMetatype() != TYPE_PTR) return 0;
@@ -220,5 +220,5 @@ index 2571f55f1a..fe40e22b1b 100644
uintb true_result = ((uintb)(int32_t)f) & 0xffffffff;
uintb encoding = format.getEncoding(f);
--
2.48.1
2.50.1
@@ -1,7 +1,7 @@
From cc36245a600051a66a4ab6c6ffff835d609ae92a Mon Sep 17 00:00:00 2001
From 69272257372c594e866b34150c436962be1fa3a4 Mon Sep 17 00:00:00 2001
From: Alex Cameron <asc@tetsuo.sh>
Date: Wed, 3 Aug 2022 20:01:18 +1000
Subject: [PATCH 2/6] Use `stroull` instead of `stroul` to parse address
Subject: [PATCH 2/7] Use `stroull` instead of `stroul` to parse address
offsets
---
@@ -34,5 +34,5 @@ index dbaa2e775f..72927bf379 100644
enddata = (const char *) tmpdata;
if (enddata - s.c_str() == s.size()) { // If no size or offset override
--
2.48.1
2.50.1
@@ -1,7 +1,7 @@
From f0ee9c783a7acd850f6565278842a23865441e6a Mon Sep 17 00:00:00 2001
From afef7a58fc2eb987fea303fc06c6d290fe3aa8a5 Mon Sep 17 00:00:00 2001
From: Eric Kilmer <eric.d.kilmer@gmail.com>
Date: Tue, 29 Oct 2024 15:30:57 -0400
Subject: [PATCH 3/6] Use string resize instead of reserve
Subject: [PATCH 3/7] Use string resize instead of reserve
assign will fix up the size to hold all of what's copied
---
@@ -32,5 +32,5 @@ index 5f5fa0c7b3..4cd77156f2 100644
}
data.isTruncated = (numChars >= maximumChars);
--
2.48.1
2.50.1
@@ -1,7 +1,7 @@
From 43b0f78ca2ce8e2adbcc4f3b3298940c72dc9b5b Mon Sep 17 00:00:00 2001
From 84384e8d472511bb20cf3ebfa67415dc6293cb80 Mon Sep 17 00:00:00 2001
From: Eric Kilmer <eric.d.kilmer@gmail.com>
Date: Tue, 29 Oct 2024 17:51:09 -0400
Subject: [PATCH 4/6] Ignore floating point test due to compilation differences
Subject: [PATCH 4/7] Ignore floating point test due to compilation differences
This test fails on macOS and Windows. I'm unsure whether it's an OS or
compiler issue.
@@ -24,5 +24,5 @@ index fe40e22b1b..91440e2510 100644
ASSERT_EQUALS(ff.printDecimal(f2, false), "0.33333334");
double f3 = doubleFromRawBits(0x3fd0000000000000);
--
2.48.1
2.50.1
@@ -1,7 +1,7 @@
From ef11bf80063c80967a6ddb8726e710bd207575f3 Mon Sep 17 00:00:00 2001
From c5524b18432739e441c4347f2d836d56faa74c77 Mon Sep 17 00:00:00 2001
From: Eric Kilmer <eric.d.kilmer@gmail.com>
Date: Wed, 30 Oct 2024 14:26:57 -0400
Subject: [PATCH 5/6] Allow positive or negative NAN in decompiler floating
Subject: [PATCH 5/7] Allow positive or negative NAN in decompiler floating
point test
At least on Apple Silicon, this test reports positive NAN.
@@ -33,5 +33,5 @@ index f8108d3d32..1060a3e193 100644
<stringmatch name="Float print #14" min="1" max="1">double7 = 3.1415926535897933e-06;</stringmatch>
</decompilertest>
--
2.48.1
2.50.1
@@ -1,7 +1,7 @@
From 5d6886b914c266f0a97941666fda75e0f7311d35 Mon Sep 17 00:00:00 2001
From 3330b9d1de3370d933bf7c3063fd4ca3744d1630 Mon Sep 17 00:00:00 2001
From: Eric Kilmer <eric.d.kilmer@gmail.com>
Date: Sat, 8 Feb 2025 17:59:57 -0500
Subject: [PATCH 6/6] decompiler: Fix strict weak ordering TypePartialEnum
Subject: [PATCH 6/7] decompiler: Fix strict weak ordering TypePartialEnum
This fixes Windows Debug error encountered in testing where it was
complaining about lack of strict weak ordering.
@@ -22,5 +22,5 @@ index f25b019a4f..2f1337a740 100644
if (parent != tp->parent) return (parent < tp->parent) ? -1 : 1; // Compare absolute pointers
if (offset != tp->offset) return (offset < tp->offset) ? -1 : 1;
--
2.48.1
2.50.1
@@ -0,0 +1,23 @@
From 4750c32e2390bdabdf77fca54b4c4f6a06585b02 Mon Sep 17 00:00:00 2001
From: Eric Kilmer <eric.d.kilmer@gmail.com>
Date: Fri, 18 Jul 2025 12:01:13 -0400
Subject: [PATCH 7/7] Backport fix for datatests/retstruct.xml tests
---
.../Features/Decompiler/src/decompile/datatests/retstruct.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/datatests/retstruct.xml b/Ghidra/Features/Decompiler/src/decompile/datatests/retstruct.xml
index 4cc656af77..bbccfe65ee 100644
--- a/Ghidra/Features/Decompiler/src/decompile/datatests/retstruct.xml
+++ b/Ghidra/Features/Decompiler/src/decompile/datatests/retstruct.xml
@@ -1,5 +1,5 @@
<decompilertest>
-<binaryimage arch="x86:LE:32:default:gcc">
+<binaryimage arch="x86:LE:32:default:win">
<!--
Example function returning a structure stored across multiple registers
-->
--
2.50.1
+4 -3
View File
@@ -22,7 +22,7 @@ set_property(CACHE sleigh_RELEASE_TYPE PROPERTY STRINGS "stable" "HEAD")
find_package(Git REQUIRED)
# Ghidra pinned stable version commit
set(ghidra_version "11.3")
set(ghidra_version "11.4")
set(ghidra_git_tag "Ghidra_${ghidra_version}_build")
set(ghidra_shallow TRUE)
@@ -44,15 +44,16 @@ set(ghidra_patches
"${CMAKE_CURRENT_LIST_DIR}/patches/stable/0004-Ignore-floating-point-test-due-to-compilation-differ.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/stable/0005-Allow-positive-or-negative-NAN-in-decompiler-floatin.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/stable/0006-decompiler-Fix-strict-weak-ordering-TypePartialEnum.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/stable/0007-Backport-fix-for-datatests-retstruct.xml-tests.patch"
)
# Ghidra pinned commits used for pinning last known working HEAD commit
if("${sleigh_RELEASE_TYPE}" STREQUAL "HEAD")
# TODO: Try to remember to look at Ghidra/application.properties
# TODO: CMake only likes numeric characters in the version string....
set(ghidra_head_version "11.4")
set(ghidra_head_version "11.5")
set(ghidra_version "${ghidra_head_version}")
set(ghidra_head_git_tag "5a3a8c36c8ec3b0f3b81c9d1b6200d5d5b521f2b")
set(ghidra_head_git_tag "8c48d9f1168275a039d7803267399bf418d827dd")
set(ghidra_git_tag "${ghidra_head_git_tag}")
set(ghidra_shallow FALSE)
set(ghidra_patches