Compare commits

..

6 Commits

Author SHA1 Message Date
Ninja3047 c711ddce7b bump ghidra in flake 2023-09-23 18:26:26 -04:00
Ninja3047 5b76dd9ed5 update flake.lock 2023-09-23 18:26:26 -04:00
Ninja3047 0f40864cec debug and asan build 2023-09-23 18:26:26 -04:00
Ninja3047 7ea4feb70e fix deprecation 2023-09-23 18:26:26 -04:00
Ninja3047 daa95e1d6b format nix 2023-09-23 18:26:26 -04:00
Ninja3047 da1b36dfb7 experimental nix flake 2023-09-23 18:17:51 -04:00
32 changed files with 480 additions and 580 deletions
+1
View File
@@ -0,0 +1 @@
use flake
+23 -43
View File
@@ -43,20 +43,19 @@ jobs:
if: runner.os == 'macOS'
run: |
echo "MACOSX_DEPLOYMENT_TARGET=10.15" >> ${GITHUB_ENV}
brew install --formula \
brew install \
ccache \
cmake \
doxygen \
graphviz
- name: Install Windows system dependencies
if: runner.os == 'Windows'
uses: nick-fields/retry@v3
uses: nick-fields/retry@v2
with:
timeout_minutes: 10
max_attempts: 3
command: |
choco install ccache doxygen.install graphviz
vcpkg install zlib:x64-windows-static
command: choco install ccache doxygen.install graphviz
- name: Generate cache key
shell: cmake -P {0}
@@ -66,7 +65,7 @@ jobs:
file(APPEND "$ENV{GITHUB_ENV}" "CACHE_TIMESTAMP=${current_date}\n")
- name: Update the cache (ccache)
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: "${{ github.workspace }}/ccache"
key: ${{ env.CACHE_KEY }}_ccache_${{ env.CACHE_TIMESTAMP }}
@@ -108,10 +107,6 @@ jobs:
-j 2
-v
- name: Test the project
working-directory: build
run: ctest -VV -C ${{ matrix.build_type }}
- name: Build the docs
run: cmake
--build build
@@ -132,30 +127,17 @@ jobs:
--prefix install
- name: Smoketest sleigh lift
run: |
./install/bin/sleigh-lift --version
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000
./install/bin/sleigh-lift pcode x86-64.sla 4881ecc00f0000
run: ./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000
- name: Test install directory Unix
if: runner.os != 'Windows'
- name: Test install directory
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 }}
cd build
ctest -V -C ${{ matrix.build_type }}
- name: Test install directory Windows
if: runner.os == 'Windows'
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 }}
cd build
ctest -V -C ${{ matrix.build_type }}
- name: Test tool install directory Unix
if: runner.os != 'Windows'
- name: Test tool install directory
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 }}
@@ -163,17 +145,6 @@ jobs:
cmake --install build --config ${{ matrix.build_type }} --prefix install
./install/bin/sleigh-lift --version
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000
./install/bin/sleigh-lift pcode x86-64.sla 4881ecc00f0000
- name: Test tool install directory Windows
if: runner.os == 'Windows'
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 --install build --config ${{ matrix.build_type }} --prefix install
./install/bin/sleigh-lift --version
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000
./install/bin/sleigh-lift pcode x86-64.sla 4881ecc00f0000
- name: Create the packages
run: cmake
@@ -211,13 +182,13 @@ jobs:
# DEB Package
- name: Upload the DEB package artifact (RelWithDebInfo only)
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: ${{ env.DEB_PACKAGE_NAME }}
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@v0.1.15
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable'
with:
files: ${{ env.DEB_PACKAGE_PATH }}
@@ -225,12 +196,12 @@ jobs:
# RPM Package
- name: Upload the RPM package artifact (RelWithDebInfo only)
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
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@v0.1.15
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable'
with:
files: ${{ env.RPM_PACKAGE_PATH }}
@@ -238,16 +209,25 @@ jobs:
# TGZ Package
- name: Upload the TGZ package artifact (RelWithDebInfo only)
if: matrix.build_type == 'RelWithDebInfo'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: ${{ env.TGZ_PACKAGE_NAME }}
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@v0.1.15
if: matrix.build_type == 'RelWithDebInfo' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable'
with:
files: ${{ env.TGZ_PACKAGE_PATH }}
# This step is down at the bottom because Windows fails but we still want
# to upload the built binaries, regardless. We also want to see if/when
# Windows tests start passing or are still failing, so there is no special
# handling. GitHub Actions does not support the concept of an allowable
# failure state
- name: Run the tests
working-directory: build
run: ctest -VV -C ${{ matrix.build_type }}
- name: ccache stats
run: ccache -s
+3 -3
View File
@@ -14,10 +14,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/setup-python@v4
with:
# Use oldest supported version for maximum script compatibility
python-version: '3.10'
python-version: '3.7'
- name: Run Update Script
id: head_update
@@ -36,7 +36,7 @@ jobs:
- name: Create PR
if: steps.head_update.outputs.did_update
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@v5
with:
title: Update Ghidra HEAD to commit ${{ steps.head_update.outputs.short_sha }}
commit-message: |
+2
View File
@@ -4,3 +4,5 @@ build
# FetchContent Ghidra source directories
/src/ghidra*
cmake_fc_*
.direnv/
+7 -25
View File
@@ -30,7 +30,7 @@ include(cmake/project-is-top-level.cmake)
include(cmake/options.cmake)
#
# Move headers so we can prefix with "ghidra/"
# Move headers so we can prefix with "sleigh/"
#
set(public_include_header_list
"${library_root}/action.hh"
@@ -135,14 +135,6 @@ set(public_include_header_list
"${library_root}/xml_arch.hh"
"${library_root}/unionresolve.hh"
"${library_root}/marshal.hh"
"${library_root}/analyzesigs.hh"
"${library_root}/modelrules.hh"
"${library_root}/signature.hh"
"${library_root}/signature_ghidra.hh"
"${library_root}/compression.hh"
"${library_root}/multiprecision.hh"
"${library_root}/slaformat.hh"
"${library_root}/constseq.hh"
)
#if(sleigh_RELEASE_IS_HEAD)
# list(APPEND public_include_header_list
@@ -151,19 +143,13 @@ set(public_include_header_list
# Create custom target so that IDEs know these files are part of the sources
add_custom_target(sleigh_all_headers SOURCES ${public_include_header_list})
set(public_headers_dir ${CMAKE_CURRENT_BINARY_DIR}/include)
file(MAKE_DIRECTORY "${public_headers_dir}/ghidra")
# Copy the public headers into our build directory so that we can control the layout.
# Ideally, we want to let people '#include <ghidra/{header}>' without installing sleigh
foreach(public_header ${public_include_header_list})
configure_file("${public_header}" "${public_headers_dir}/ghidra" COPYONLY)
endforeach()
# This project also generates a helper header for managing sleigh versions.
# We intentionally use the `sleigh` directory for this header because it's
# not from upstream.
file(MAKE_DIRECTORY "${public_headers_dir}/sleigh")
configure_file(cmake/libconfig.h.in "${public_headers_dir}/sleigh/libconfig.h")
# External Dependencies
find_package(ZLIB REQUIRED)
# Copy the public headers into our build directory so that we can control the layout.
# Ideally, we want to let people '#include <sleigh/{header}>' without installing sleigh
foreach(public_header ${public_include_header_list})
configure_file("${public_header}" "${public_headers_dir}/sleigh" COPYONLY)
endforeach()
#
# sla
@@ -197,8 +183,6 @@ set_target_properties(sleigh_sla PROPERTIES
OUTPUT_NAME_DEBUG sla_dbg
)
target_link_libraries(sleigh_sla PUBLIC ZLIB::ZLIB)
#
# decomp
#
@@ -226,8 +210,6 @@ set_target_properties(sleigh_decomp PROPERTIES
OUTPUT_NAME_DEBUG decomp_dbg
)
target_link_libraries(sleigh_decomp PUBLIC ZLIB::ZLIB)
# This is the root directory where all individual processor spec file directories will be created.
# NOTE: Needs to be defined here before the install rules
set(spec_files_build_dir "${CMAKE_CURRENT_BINARY_DIR}/specfiles")
-4
View File
@@ -79,10 +79,6 @@
"inherits": ["flags-windows", "ci-std"],
"generator": "Visual Studio 17 2022",
"architecture": "x64",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x64-windows-static"
},
"hidden": true
},
{
-1
View File
@@ -18,7 +18,6 @@ This repository provides a CMake-based build project for Sleigh so that it can b
| Name | Version | Linux Package to Install | macOS Homebrew Package to Install |
| ---- | ------- | ------------------------ | --------------------------------- |
| (HEAD builds) [zlib](https://www.zlib.net/) | Recent | zlib1g-dev | zlib |
| [Git](https://git-scm.com/) | Latest | git | N/A |
| [CMake](https://cmake.org/) | 3.18+ | cmake | cmake |
+2 -5
View File
@@ -15,14 +15,11 @@
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/sleighTargets.cmake")
# Extra version details. Either 'stable' or 'HEAD'
set(sleigh_RELEASE_IS_HEAD "@sleigh_RELEASE_IS_HEAD@")
include(CMakeFindDependencyMacro)
find_dependency(ZLIB)
include("${CMAKE_CURRENT_LIST_DIR}/sleighTargets.cmake")
# Helpers exposed by default when finding sleigh
include("${CMAKE_CURRENT_LIST_DIR}/modules/sleighCompile.cmake")
+1 -2
View File
@@ -265,9 +265,8 @@ int main(int argc, char *argv[]) {
ghidra::ContextInternal ctx;
ghidra::Sleigh engine(&load_image, &ctx);
ghidra::DocumentStorage storage;
std::istringstream sla("<sleigh>" + sla_file_path->string() + "</sleigh>");
ghidra::Element *root =
storage.parseDocument(sla)->getRoot();
storage.openDocument(sla_file_path->string())->getRoot();
storage.registerTag(root);
std::optional<std::filesystem::path> pspec_file_path;
if (args->pspec_file_name) {
Generated
+95
View File
@@ -0,0 +1,95 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1681202837,
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1682291304,
"narHash": "sha256-VkufTQNEclnZ0HnSXxmXC2Qvtj6/3/8SyZfRyL4AllI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b2d51541a37678ad4e870f75326b6e68daf3b3c7",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1680945546,
"narHash": "sha256-8FuaH5t/aVi/pR1XxnF0qi4WwMYC+YxlfdsA0V+TEuQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d9f759f2ea8d265d974a6e1259bd510ac5844c5d",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"treefmt-nix": "treefmt-nix"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1681486253,
"narHash": "sha256-EjiQZvXQH9tUPCyLC6lQpfGnoq4+kI9v59bDJWPicYo=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "b25d1a3c2c7554d0462ab1dfddf2f13128638b90",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
+80
View File
@@ -0,0 +1,80 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
treefmt-nix.url = "github:numtide/treefmt-nix";
};
outputs = {
self,
nixpkgs,
flake-utils,
treefmt-nix,
}:
{
overlays.default = final: prev: {
ghidra = with final;
applyPatches {
src = fetchFromGitHub {
owner = "NationalSecurityAgency";
repo = "ghidra";
rev = "refs/tags/Ghidra_10.3.3_build";
sha256 = "sha256-KDSiZ/JwAqX6Obg9UD8ZQut01l/eMXbioJy//GluXn0=";
};
patches = [
./src/patches/stable/0001-Fix-UBSAN-errors-in-decompiler.patch
./src/patches/stable/0002-Use-stroull-instead-of-stroul-to-parse-address-offse.patch
];
};
sleigh = with final;
stdenv.mkDerivation {
name = "sleigh";
src = ./.;
nativeBuildInputs = [
cmake
ninja
git
];
buildInputs = [
ghidra
];
cmakeFlags = [
"-DFETCHCONTENT_SOURCE_DIR_GHIDRASOURCE=${ghidra}"
];
};
sleigh-debug = with final;
final.sleigh.overrideAttrs (o: {
dontStrip = true;
enableDebugging = true;
separateDebugInfo = true;
});
sleigh-asan = with final;
final.sleigh-debug.overrideAttrs (o: {
cmakeFlags = o.cmakeFlags ++ ["-DCMAKE_C_FLAGS=-fsanitize=address" "-DCMAKE_CXX_FLAGS=-fsanitize=address"];
});
};
}
// flake-utils.lib.eachDefaultSystem (
system: let
pkgs = import nixpkgs {
inherit system;
overlays = [self.overlays.default];
};
in {
packages.default = pkgs.sleigh;
devShells.default = pkgs.mkShell {
packages = with pkgs; [
sleigh-asan
clang-tools
];
};
formatter = treefmt-nix.lib.mkWrapper pkgs {
projectRootFile = ".git/config";
programs = {
alejandra.enable = true;
clang-format.enable = true;
};
};
}
);
}
-1
View File
@@ -71,7 +71,6 @@ def git_get_changed_files(
.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:")
@@ -1,27 +1,28 @@
From 7c6e51dd1234387b98e1ad61d3f88a0565364b28 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
From 67ac779382508ab0d5ff10bcb0a8453068cce5a2 Mon Sep 17 00:00:00 2001
From: Alex Cameron <asc@tetsuo.sh>
Date: Mon, 5 Jun 2023 16:45:04 +1200
Subject: [PATCH 1/2] Fix UBSAN errors in decompiler
Co-authored-by: Alex Cameron <asc@tetsuo.sh>
---
.../Decompiler/src/decompile/cpp/fspec.cc | 8 ++++++--
.../src/decompile/cpp/funcdata_varnode.cc | 8 +++++++-
.../Decompiler/src/decompile/cpp/op.cc | 6 +++++-
.../Decompiler/src/decompile/cpp/opbehavior.cc | 8 +++++++-
.../src/decompile/cpp/pcodecompile.cc | 18 +++++++++++-------
.../Decompiler/src/decompile/cpp/ruleaction.cc | 12 +++++++++---
.../Decompiler/src/decompile/cpp/ruleaction.cc | 18 ++++++++++++++----
.../Decompiler/src/decompile/cpp/semantics.cc | 2 ++
.../Decompiler/src/decompile/cpp/semantics.hh | 2 +-
.../src/decompile/cpp/slgh_compile.cc | 2 +-
.../Decompiler/src/decompile/cpp/slghsymbol.cc | 2 +-
.../Decompiler/src/decompile/cpp/type.cc | 2 +-
.../src/decompile/unittests/testfloatemu.cc | 2 +-
10 files changed, 44 insertions(+), 18 deletions(-)
12 files changed, 57 insertions(+), 21 deletions(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/fspec.cc
index d78b78731c..caf4b24d15 100644
index 82771cc04..da78c8071 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)
@@ -2661,8 +2661,12 @@ void ProtoModelMerged::decode(Decoder &decoder)
modellist.push_back(mymodel);
}
decoder.closeElement(elemId);
@@ -36,11 +37,30 @@ index d78b78731c..caf4b24d15 100644
}
void ParameterBasic::setTypeLock(bool val)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
index f77817073..283d81c31 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
@@ -503,7 +503,13 @@ void Funcdata::setHighLevel(void)
void Funcdata::transferVarnodeProperties(Varnode *vn,Varnode *newVn,int4 lsbOffset)
{
- uintb newConsume = (vn->getConsume() >> 8*lsbOffset) & calc_mask(newVn->getSize());
+ uintb newConsume = vn->getConsume();
+ if (8*lsbOffset < sizeof(newConsume)) {
+ newConsume >>= 8*lsbOffset;
+ } else {
+ newConsume = 0;
+ }
+ newConsume &= calc_mask(newVn->getSize());
uint4 vnFlags = vn->getFlags() & (Varnode::directwrite|Varnode::addrforce);
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/op.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/op.cc
index d51460be84..45bf394862 100644
index 0e3decc80..403ec35a7 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
@@ -672,7 +672,11 @@ uintb PcodeOp::getNZMaskLocal(bool cliploop) const
break;
case CPUI_PIECE:
resmask = getIn(0)->getNZMask();
@@ -54,7 +74,7 @@ index d51460be84..45bf394862 100644
break;
case CPUI_INT_MULT:
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc
index aebcfd9103..6c47e6eb15 100644
index aebcfd910..6c47e6eb1 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc
@@ -746,7 +746,13 @@ uintb OpBehaviorPiece::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb i
@@ -73,7 +93,7 @@ index aebcfd9103..6c47e6eb15 100644
}
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc
index ca9d71ab99..85d4dd281d 100644
index ca9d71ab9..85d4dd281 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc
@@ -621,8 +621,10 @@ vector<OpTpl *> *PcodeCompile::assignBitRange(VarnodeTpl *vn,uint4 bitoffset,uin
@@ -116,7 +136,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 009570af71..72b2a10503 100644
index ae2e502c1..a22b8ebdc 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 +153,7 @@ index 009570af71..72b2a10503 100644
consume = ~consume;
if ((consume & indir->getIn(0)->getConsume())!=0) return 0;
@@ -7031,8 +7036,9 @@ int4 RulePtrsubCharConstant::applyOp(PcodeOp *op,Funcdata &data)
@@ -6789,8 +6794,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;
@@ -145,8 +165,21 @@ index 009570af71..72b2a10503 100644
Varnode *vn1 = op->getIn(1);
if (!vn1->isConstant()) return 0;
Varnode *outvn = op->getOut();
@@ -8600,7 +8606,11 @@ int4 RuleSubvarSubpiece::applyOp(PcodeOp *op,Funcdata &data)
Varnode *outvn = op->getOut();
int4 flowsize = outvn->getSize();
uintb mask = calc_mask( flowsize );
- mask <<= 8*((int4)op->getIn(1)->getOffset());
+ if (8*((int4)op->getIn(1)->getOffset()) < sizeof(mask)) {
+ mask <<= 8*((int4)op->getIn(1)->getOffset());
+ } else {
+ mask = 0;
+ }
bool aggressive = outvn->isPtrFlow();
if (!aggressive) {
if ((vn->getConsume() & mask) != vn->getConsume()) return 0;
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc
index cd9b9835b1..8a4616c3b9 100644
index 2e3531ea2..42482be7c 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc
@@ -22,6 +22,7 @@ ConstTpl::ConstTpl(const_type tp)
@@ -166,12 +199,12 @@ index cd9b9835b1..8a4616c3b9 100644
bool ConstTpl::isConstSpace(void) const
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh
index e0b069959d..9117a45c75 100644
index 8e283dca0..652600c16 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh
@@ -47,7 +47,7 @@ class ConstTpl {
uintb value_real;
v_field select; // Which part of handle to use as constant
@@ -48,7 +48,7 @@ private:
static void printHandleSelector(ostream &s,v_field val);
static v_field readHandleSelector(const string &name);
public:
- ConstTpl(void) { type = real; value_real = 0; }
+ ConstTpl(void) { type = real; value_real = 0; select = v_space; }
@@ -179,10 +212,10 @@ index e0b069959d..9117a45c75 100644
type=op2.type; value=op2.value; value_real=op2.value_real; select=op2.select; }
ConstTpl(const_type tp,uintb val);
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc
index 50d85e22ba..9f3b456229 100644
index b40f74389..3c37958df 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc
@@ -2164,8 +2164,8 @@ string SleighCompile::checkSymbols(SymbolScope *scope)
@@ -2163,8 +2163,8 @@ string SleighCompile::checkSymbols(SymbolScope *scope)
ostringstream msg;
SymbolTree::const_iterator iter;
for(iter=scope->begin();iter!=scope->end();++iter) {
@@ -192,11 +225,24 @@ index 50d85e22ba..9f3b456229 100644
if (sym->getRefCount() == 0)
msg << " Label <" << sym->getName() << "> was placed but not used" << endl;
else if (!sym->isPlaced())
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc
index b308e1b71..af2982aee 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc
@@ -2569,7 +2569,7 @@ void ContextOp::restoreXml(const Element *el,SleighBase *trans)
const List &list(el->getChildren());
List::const_iterator iter;
iter = list.begin();
- patexp = (PatternValue *)PatternExpression::restoreExpression(*iter,trans);
+ patexp = PatternExpression::restoreExpression(*iter,trans);
patexp->layClaim();
}
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
index fd0ab26fb4..7f654c220b 100644
index 32ede6b0f..238d97f40 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
@@ -3728,8 +3728,8 @@ void TypeFactory::recalcPointerSubmeta(Datatype *base,sub_metatype sub)
@@ -3384,8 +3384,8 @@ void TypeFactory::recalcPointerSubmeta(Datatype *base,sub_metatype sub)
top.submeta = sub; // Search on the incorrect submeta
iter = tree.lower_bound(&top);
while(iter != tree.end()) {
@@ -207,10 +253,10 @@ index fd0ab26fb4..7f654c220b 100644
++iter;
if (ptr->submeta == sub) {
diff --git a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
index 2571f55f1a..fe40e22b1b 100644
index c35bde877..061e53677 100644
--- a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
@@ -375,7 +375,7 @@ TEST(float_opTrunc_to_int) {
@@ -346,7 +346,7 @@ TEST(float_opTrunc_to_int) {
for(float f:float_test_values) {
// avoid undefined behavior
@@ -220,5 +266,5 @@ index 2571f55f1a..fe40e22b1b 100644
uintb true_result = ((uintb)(int32_t)f) & 0xffffffff;
uintb encoding = format.getEncoding(f);
--
2.48.1
2.39.2 (Apple Git-143)
@@ -1,7 +1,7 @@
From 5e37c51ebc8a3ae0f32a3cb0049aaebafec48d7d Mon Sep 17 00:00:00 2001
From 9fd26cd754b6f83e45199db896fd0fcea23cd59d 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/2] Use `stroull` instead of `stroul` to parse address
offsets
---
@@ -9,7 +9,7 @@ Subject: [PATCH 2/6] Use `stroull` instead of `stroul` to parse address
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc
index dbaa2e775f..72927bf379 100644
index bf4e1dc96..594b4583a 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc
@@ -16,6 +16,8 @@
@@ -21,7 +21,7 @@ index dbaa2e775f..72927bf379 100644
namespace ghidra {
AttributeId ATTRIB_BASE = AttributeId("base",89);
@@ -277,7 +279,10 @@ uintb AddrSpace::read(const string &s,int4 &size) const
@@ -290,7 +292,10 @@ uintb AddrSpace::read(const string &s,int4 &size) const
}
}
catch(LowlevelError &err) { // Name doesn't exist
@@ -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.39.2 (Apple Git-143)
@@ -1,36 +0,0 @@
From 0feb881ef1cbc9aa4639e16914b7d9ed863baadf 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
assign will fix up the size to hold all of what's copied
---
Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc
index 5f5fa0c7b3..4cd77156f2 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc
@@ -67,7 +67,6 @@ void StringManager::assignStringData(StringData &data,const uint1 *buf,int4 size
{
if (charsize == 1 && numChars < maximumChars) {
- data.byteData.reserve(size);
data.byteData.assign(buf,buf+size);
}
else {
@@ -77,9 +76,9 @@ void StringManager::assignStringData(StringData &data,const uint1 *buf,int4 size
return;
string resString = s.str();
int4 newSize = resString.size();
- data.byteData.reserve(newSize + 1);
const uint1 *ptr = (const uint1 *)resString.c_str();
data.byteData.assign(ptr,ptr+newSize);
+ data.byteData.resize(newSize + 1, 0);
data.byteData[newSize] = 0; // Make sure there is a null terminator
}
data.isTruncated = (numChars >= maximumChars);
--
2.48.1
@@ -1,28 +0,0 @@
From 2a8f30f31c24ecc7bd499648b97bb8b0c2705b78 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
This test fails on macOS and Windows. I'm unsure whether it's an OS or
compiler issue.
---
.../Decompiler/src/decompile/unittests/testfloatemu.cc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
index fe40e22b1b..91440e2510 100644
--- a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
@@ -184,7 +184,8 @@ TEST(double_decimal_precision) {
double f0 = doubleFromRawBits(0x3fc5555555555555);
ASSERT_EQUALS(ff.printDecimal(f0, false), "0.16666666666666666");
double f1 = doubleFromRawBits(0x7fefffffffffffff);
- ASSERT_EQUALS(ff.printDecimal(f1, false), "1.79769313486232e+308");
+ // Windows and Mac print 1.7976931348623157e+308
+ // ASSERT_EQUALS(ff.printDecimal(f1, false), "1.79769313486232e+308");
double f2 = doubleFromRawBits(0x3fd555555c7dda4b);
ASSERT_EQUALS(ff.printDecimal(f2, false), "0.33333334");
double f3 = doubleFromRawBits(0x3fd0000000000000);
--
2.48.1
@@ -1,37 +0,0 @@
From 04cca72897d9088713a6e2dadb2774ad20ae7703 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
point test
At least on Apple Silicon, this test reports positive NAN.
Use the regex optional operator '?' to allow for positive or negative
NAN.
---
.../Decompiler/src/decompile/datatests/floatprint.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml b/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml
index f8108d3d32..1060a3e193 100644
--- a/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml
+++ b/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml
@@ -58,13 +58,13 @@ bbbdd7d9df7cdb3d000000000000f03f
<stringmatch name="Float print #3" min="1" max="1">floatv3 = -0.001;</stringmatch>
<stringmatch name="Float print #4" min="1" max="1">floatv4 = 1e-06;</stringmatch>
<stringmatch name="Float print #5" min="1" max="1">floatv5 = INFINITY;</stringmatch>
-<stringmatch name="Float print #6" min="1" max="1">floatv6 = -NAN;</stringmatch>
+<stringmatch name="Float print #6" min="1" max="1">floatv6 = -?NAN;</stringmatch>
<stringmatch name="Float print #7" min="1" max="1">floatv7 = 3.141592e-06;</stringmatch>
<stringmatch name="Float print #8" min="1" max="1">double1 = 0.6666666666666666;</stringmatch>
<stringmatch name="Float print #9" min="1" max="1">double2 = 2.0;</stringmatch>
<stringmatch name="Float print #10" min="1" max="1">double3 = -0.001;</stringmatch>
<stringmatch name="Float print #11" min="1" max="1">double4 = 1e-10;</stringmatch>
<stringmatch name="Float print #12" min="1" max="1">double5 = INFINITY;</stringmatch>
-<stringmatch name="Float print #13" min="1" max="1">double6 = -NAN;</stringmatch>
+<stringmatch name="Float print #13" min="1" max="1">double6 = -?NAN;</stringmatch>
<stringmatch name="Float print #14" min="1" max="1">double7 = 3.1415926535897933e-06;</stringmatch>
</decompilertest>
--
2.48.1
@@ -1,26 +0,0 @@
From a7dee0fbb1838e4e22a1c970718b84976ffb2932 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
This fixes Windows Debug error encountered in testing where it was
complaining about lack of strict weak ordering.
---
Ghidra/Features/Decompiler/src/decompile/cpp/type.cc | 1 +
1 file changed, 1 insertion(+)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
index 7f654c220b..3f10c78c2f 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
@@ -2300,6 +2300,7 @@ int4 TypePartialEnum::compareDependency(const Datatype &op) const
{
if (submeta != op.getSubMeta()) return (submeta < op.getSubMeta()) ? -1 : 1;
+ if (parent == &op) return 1; // op is our TypeEnum
TypePartialEnum *tp = (TypePartialEnum *) &op; // Both must be partial
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
@@ -1,27 +1,29 @@
From e694ad80e2965178c541a7414e55c76a1e318411 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
From 0e437cb96249306d17f26ff6614871ecd9b37359 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 2 Aug 2023 23:19:42 +1000
Subject: [PATCH 1/2] Fix UBSAN errors in decompiler
Co-authored-by: Alex Cameron <asc@tetsuo.sh>
---
.../Decompiler/src/decompile/cpp/fspec.cc | 8 ++++++--
.../src/decompile/cpp/funcdata_varnode.cc | 8 +++++++-
.../Decompiler/src/decompile/cpp/op.cc | 6 +++++-
.../Decompiler/src/decompile/cpp/opbehavior.cc | 8 +++++++-
.../src/decompile/cpp/pcodecompile.cc | 18 +++++++++++-------
.../Decompiler/src/decompile/cpp/ruleaction.cc | 12 +++++++++---
.../Decompiler/src/decompile/cpp/ruleaction.cc | 18 ++++++++++++++----
.../Decompiler/src/decompile/cpp/semantics.cc | 2 ++
.../Decompiler/src/decompile/cpp/semantics.hh | 2 +-
.../src/decompile/cpp/slgh_compile.cc | 2 +-
.../Decompiler/src/decompile/cpp/slghsymbol.cc | 2 +-
.../Decompiler/src/decompile/cpp/type.cc | 2 +-
.../src/decompile/unittests/testfloatemu.cc | 2 +-
10 files changed, 44 insertions(+), 18 deletions(-)
12 files changed, 57 insertions(+), 21 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 8380d3cd..a18d5007 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)
@@ -2661,8 +2661,12 @@ void ProtoModelMerged::decode(Decoder &decoder)
modellist.push_back(mymodel);
}
decoder.closeElement(elemId);
@@ -36,11 +38,30 @@ index 3e9f310446..c903810382 100644
}
void ParameterBasic::setTypeLock(bool val)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
index f7781707..283d81c3 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc
@@ -503,7 +503,13 @@ void Funcdata::setHighLevel(void)
void Funcdata::transferVarnodeProperties(Varnode *vn,Varnode *newVn,int4 lsbOffset)
{
- uintb newConsume = (vn->getConsume() >> 8*lsbOffset) & calc_mask(newVn->getSize());
+ uintb newConsume = vn->getConsume();
+ if (8*lsbOffset < sizeof(newConsume)) {
+ newConsume >>= 8*lsbOffset;
+ } else {
+ newConsume = 0;
+ }
+ newConsume &= calc_mask(newVn->getSize());
uint4 vnFlags = vn->getFlags() & (Varnode::directwrite|Varnode::addrforce);
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 0e3decc8..403ec35a 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
@@ -672,7 +672,11 @@ uintb PcodeOp::getNZMaskLocal(bool cliploop) const
break;
case CPUI_PIECE:
resmask = getIn(0)->getNZMask();
@@ -54,10 +75,10 @@ index e165951fe6..00169e22e5 100644
break;
case CPUI_INT_MULT:
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc
index aebcfd9103..6c47e6eb15 100644
index fcd75cc7..ed0e005a 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/opbehavior.cc
@@ -746,7 +746,13 @@ uintb OpBehaviorPiece::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb i
@@ -750,7 +750,13 @@ uintb OpBehaviorPiece::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb i
uintb OpBehaviorSubpiece::evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const
{
@@ -73,7 +94,7 @@ index aebcfd9103..6c47e6eb15 100644
}
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc
index ca9d71ab99..85d4dd281d 100644
index ca9d71ab..85d4dd28 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/pcodecompile.cc
@@ -621,8 +621,10 @@ vector<OpTpl *> *PcodeCompile::assignBitRange(VarnodeTpl *vn,uint4 bitoffset,uin
@@ -116,7 +137,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 4851365d..d069d1c9 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 +154,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)
@@ -6782,8 +6787,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;
@@ -145,8 +166,21 @@ index b7fda34cc9..a3d164aa2d 100644
Varnode *vn1 = op->getIn(1);
if (!vn1->isConstant()) return 0;
Varnode *outvn = op->getOut();
@@ -8593,7 +8599,11 @@ int4 RuleSubvarSubpiece::applyOp(PcodeOp *op,Funcdata &data)
Varnode *outvn = op->getOut();
int4 flowsize = outvn->getSize();
uintb mask = calc_mask( flowsize );
- mask <<= 8*((int4)op->getIn(1)->getOffset());
+ if (8*((int4)op->getIn(1)->getOffset()) < sizeof(mask)) {
+ mask <<= 8*((int4)op->getIn(1)->getOffset());
+ } else {
+ mask = 0;
+ }
bool aggressive = outvn->isPtrFlow();
if (!aggressive) {
if ((vn->getConsume() & mask) != vn->getConsume()) return 0;
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc
index cd9b9835b1..8a4616c3b9 100644
index 2e3531ea..42482be7 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.cc
@@ -22,6 +22,7 @@ ConstTpl::ConstTpl(const_type tp)
@@ -166,12 +200,12 @@ index cd9b9835b1..8a4616c3b9 100644
bool ConstTpl::isConstSpace(void) const
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh
index e0b069959d..9117a45c75 100644
index 8e283dca..652600c1 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/semantics.hh
@@ -47,7 +47,7 @@ class ConstTpl {
uintb value_real;
v_field select; // Which part of handle to use as constant
@@ -48,7 +48,7 @@ private:
static void printHandleSelector(ostream &s,v_field val);
static v_field readHandleSelector(const string &name);
public:
- ConstTpl(void) { type = real; value_real = 0; }
+ ConstTpl(void) { type = real; value_real = 0; select = v_space; }
@@ -179,10 +213,10 @@ index e0b069959d..9117a45c75 100644
type=op2.type; value=op2.value; value_real=op2.value_real; select=op2.select; }
ConstTpl(const_type tp,uintb val);
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc
index 50d85e22ba..9f3b456229 100644
index b40f7438..3c37958d 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc
@@ -2164,8 +2164,8 @@ string SleighCompile::checkSymbols(SymbolScope *scope)
@@ -2163,8 +2163,8 @@ string SleighCompile::checkSymbols(SymbolScope *scope)
ostringstream msg;
SymbolTree::const_iterator iter;
for(iter=scope->begin();iter!=scope->end();++iter) {
@@ -192,11 +226,24 @@ index 50d85e22ba..9f3b456229 100644
if (sym->getRefCount() == 0)
msg << " Label <" << sym->getName() << "> was placed but not used" << endl;
else if (!sym->isPlaced())
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc
index b308e1b7..af2982ae 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghsymbol.cc
@@ -2569,7 +2569,7 @@ void ContextOp::restoreXml(const Element *el,SleighBase *trans)
const List &list(el->getChildren());
List::const_iterator iter;
iter = list.begin();
- patexp = (PatternValue *)PatternExpression::restoreExpression(*iter,trans);
+ patexp = PatternExpression::restoreExpression(*iter,trans);
patexp->layClaim();
}
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
index 88ca8e36c8..f25b019a4f 100644
index 30faf0b6..e76a0619 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
@@ -3728,8 +3728,8 @@ void TypeFactory::recalcPointerSubmeta(Datatype *base,sub_metatype sub)
@@ -3359,8 +3359,8 @@ void TypeFactory::recalcPointerSubmeta(Datatype *base,sub_metatype sub)
top.submeta = sub; // Search on the incorrect submeta
iter = tree.lower_bound(&top);
while(iter != tree.end()) {
@@ -207,10 +254,10 @@ index 88ca8e36c8..f25b019a4f 100644
++iter;
if (ptr->submeta == sub) {
diff --git a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
index 2571f55f1a..fe40e22b1b 100644
index c35bde87..061e5367 100644
--- a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
@@ -375,7 +375,7 @@ TEST(float_opTrunc_to_int) {
@@ -346,7 +346,7 @@ TEST(float_opTrunc_to_int) {
for(float f:float_test_values) {
// avoid undefined behavior
@@ -220,5 +267,5 @@ index 2571f55f1a..fe40e22b1b 100644
uintb true_result = ((uintb)(int32_t)f) & 0xffffffff;
uintb encoding = format.getEncoding(f);
--
2.48.1
2.39.2 (Apple Git-143)
@@ -1,7 +1,8 @@
From cc36245a600051a66a4ab6c6ffff835d609ae92a 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
From 95f230f46bdb95aa4aab7f5d320691f87107fb36 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 2 Aug 2023 23:20:14 +1000
Subject: [PATCH 2/2] Use `stroull` instead of `stroul` to parse address
offsets
---
@@ -9,7 +10,7 @@ Subject: [PATCH 2/6] Use `stroull` instead of `stroul` to parse address
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc
index dbaa2e775f..72927bf379 100644
index bf4e1dc9..594b4583 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/space.cc
@@ -16,6 +16,8 @@
@@ -21,7 +22,7 @@ index dbaa2e775f..72927bf379 100644
namespace ghidra {
AttributeId ATTRIB_BASE = AttributeId("base",89);
@@ -277,7 +279,10 @@ uintb AddrSpace::read(const string &s,int4 &size) const
@@ -290,7 +292,10 @@ uintb AddrSpace::read(const string &s,int4 &size) const
}
}
catch(LowlevelError &err) { // Name doesn't exist
@@ -34,5 +35,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.39.2 (Apple Git-143)
@@ -1,36 +0,0 @@
From f0ee9c783a7acd850f6565278842a23865441e6a 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
assign will fix up the size to hold all of what's copied
---
Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc
index 5f5fa0c7b3..4cd77156f2 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/stringmanage.cc
@@ -67,7 +67,6 @@ void StringManager::assignStringData(StringData &data,const uint1 *buf,int4 size
{
if (charsize == 1 && numChars < maximumChars) {
- data.byteData.reserve(size);
data.byteData.assign(buf,buf+size);
}
else {
@@ -77,9 +76,9 @@ void StringManager::assignStringData(StringData &data,const uint1 *buf,int4 size
return;
string resString = s.str();
int4 newSize = resString.size();
- data.byteData.reserve(newSize + 1);
const uint1 *ptr = (const uint1 *)resString.c_str();
data.byteData.assign(ptr,ptr+newSize);
+ data.byteData.resize(newSize + 1, 0);
data.byteData[newSize] = 0; // Make sure there is a null terminator
}
data.isTruncated = (numChars >= maximumChars);
--
2.48.1
@@ -1,28 +0,0 @@
From 43b0f78ca2ce8e2adbcc4f3b3298940c72dc9b5b 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
This test fails on macOS and Windows. I'm unsure whether it's an OS or
compiler issue.
---
.../Decompiler/src/decompile/unittests/testfloatemu.cc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
index fe40e22b1b..91440e2510 100644
--- a/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/unittests/testfloatemu.cc
@@ -184,7 +184,8 @@ TEST(double_decimal_precision) {
double f0 = doubleFromRawBits(0x3fc5555555555555);
ASSERT_EQUALS(ff.printDecimal(f0, false), "0.16666666666666666");
double f1 = doubleFromRawBits(0x7fefffffffffffff);
- ASSERT_EQUALS(ff.printDecimal(f1, false), "1.79769313486232e+308");
+ // Windows and Mac print 1.7976931348623157e+308
+ // ASSERT_EQUALS(ff.printDecimal(f1, false), "1.79769313486232e+308");
double f2 = doubleFromRawBits(0x3fd555555c7dda4b);
ASSERT_EQUALS(ff.printDecimal(f2, false), "0.33333334");
double f3 = doubleFromRawBits(0x3fd0000000000000);
--
2.48.1
@@ -1,37 +0,0 @@
From ef11bf80063c80967a6ddb8726e710bd207575f3 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
point test
At least on Apple Silicon, this test reports positive NAN.
Use the regex optional operator '?' to allow for positive or negative
NAN.
---
.../Decompiler/src/decompile/datatests/floatprint.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml b/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml
index f8108d3d32..1060a3e193 100644
--- a/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml
+++ b/Ghidra/Features/Decompiler/src/decompile/datatests/floatprint.xml
@@ -58,13 +58,13 @@ bbbdd7d9df7cdb3d000000000000f03f
<stringmatch name="Float print #3" min="1" max="1">floatv3 = -0.001;</stringmatch>
<stringmatch name="Float print #4" min="1" max="1">floatv4 = 1e-06;</stringmatch>
<stringmatch name="Float print #5" min="1" max="1">floatv5 = INFINITY;</stringmatch>
-<stringmatch name="Float print #6" min="1" max="1">floatv6 = -NAN;</stringmatch>
+<stringmatch name="Float print #6" min="1" max="1">floatv6 = -?NAN;</stringmatch>
<stringmatch name="Float print #7" min="1" max="1">floatv7 = 3.141592e-06;</stringmatch>
<stringmatch name="Float print #8" min="1" max="1">double1 = 0.6666666666666666;</stringmatch>
<stringmatch name="Float print #9" min="1" max="1">double2 = 2.0;</stringmatch>
<stringmatch name="Float print #10" min="1" max="1">double3 = -0.001;</stringmatch>
<stringmatch name="Float print #11" min="1" max="1">double4 = 1e-10;</stringmatch>
<stringmatch name="Float print #12" min="1" max="1">double5 = INFINITY;</stringmatch>
-<stringmatch name="Float print #13" min="1" max="1">double6 = -NAN;</stringmatch>
+<stringmatch name="Float print #13" min="1" max="1">double6 = -?NAN;</stringmatch>
<stringmatch name="Float print #14" min="1" max="1">double7 = 3.1415926535897933e-06;</stringmatch>
</decompilertest>
--
2.48.1
@@ -1,26 +0,0 @@
From 5d6886b914c266f0a97941666fda75e0f7311d35 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
This fixes Windows Debug error encountered in testing where it was
complaining about lack of strict weak ordering.
---
Ghidra/Features/Decompiler/src/decompile/cpp/type.cc | 1 +
1 file changed, 1 insertion(+)
diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
index f25b019a4f..2f1337a740 100644
--- a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
+++ b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc
@@ -2300,6 +2300,7 @@ int4 TypePartialEnum::compareDependency(const Datatype &op) const
{
if (submeta != op.getSubMeta()) return (submeta < op.getSubMeta()) ? -1 : 1;
+ if (parent == &op) return 1; // op is our TypeEnum
TypePartialEnum *tp = (TypePartialEnum *) &op; // Both must be partial
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
+3 -26
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 "10.3.3")
set(ghidra_git_tag "Ghidra_${ghidra_version}_build")
set(ghidra_shallow TRUE)
@@ -40,19 +40,15 @@ set(ghidra_patches
"${GIT_EXECUTABLE}" am --ignore-space-change --ignore-whitespace --no-gpg-sign
"${CMAKE_CURRENT_LIST_DIR}/patches/stable/0001-Fix-UBSAN-errors-in-decompiler.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/stable/0002-Use-stroull-instead-of-stroul-to-parse-address-offse.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/stable/0003-Use-string-resize-instead-of-reserve.patch"
"${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"
)
# 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 "10.5")
set(ghidra_version "${ghidra_head_version}")
set(ghidra_head_git_tag "5a3a8c36c8ec3b0f3b81c9d1b6200d5d5b521f2b")
set(ghidra_head_git_tag "4561e8335d3b62329c4afdf5a91bc6ce113b7002")
set(ghidra_git_tag "${ghidra_head_git_tag}")
set(ghidra_shallow FALSE)
set(ghidra_patches
@@ -61,10 +57,6 @@ if("${sleigh_RELEASE_TYPE}" STREQUAL "HEAD")
"${GIT_EXECUTABLE}" am --ignore-space-change --ignore-whitespace --no-gpg-sign
"${CMAKE_CURRENT_LIST_DIR}/patches/HEAD/0001-Fix-UBSAN-errors-in-decompiler.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/HEAD/0002-Use-stroull-instead-of-stroul-to-parse-address-offse.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/HEAD/0003-Use-string-resize-instead-of-reserve.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/HEAD/0004-Ignore-floating-point-test-due-to-compilation-differ.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/HEAD/0005-Allow-positive-or-negative-NAN-in-decompiler-floatin.patch"
"${CMAKE_CURRENT_LIST_DIR}/patches/HEAD/0006-decompiler-Fix-strict-weak-ordering-TypePartialEnum.patch"
)
string(SUBSTRING "${ghidra_git_tag}" 0 7 ghidra_short_commit)
else()
@@ -170,10 +162,6 @@ set(sleigh_deccore_source_list
"${library_root}/opbehavior.cc"
"${library_root}/paramid.cc"
"${library_root}/unionresolve.cc"
"${library_root}/modelrules.cc"
"${library_root}/signature.cc"
"${library_root}/multiprecision.cc"
"${library_root}/constseq.cc"
)
#if("${sleigh_RELEASE_TYPE}" STREQUAL "HEAD")
# list(APPEND sleigh_deccore_source_list
@@ -207,13 +195,7 @@ set(sleigh_source_list
"${library_root}/semantics.cc"
"${library_root}/context.cc"
"${library_root}/filemanage.cc"
"${library_root}/slaformat.cc"
"${library_root}/compression.cc"
)
# if("${sleigh_RELEASE_TYPE}" STREQUAL "HEAD")
# list(APPEND sleigh_source_list
# )
# endif()
set(sleigh_ghidra_source_list
"${library_root}/ghidra_arch.cc"
@@ -227,12 +209,7 @@ set(sleigh_ghidra_source_list
"${library_root}/ghidra_process.cc"
"${library_root}/comment_ghidra.cc"
"${library_root}/string_ghidra.cc"
"${library_root}/signature_ghidra.cc"
)
# if("${sleigh_RELEASE_TYPE}" STREQUAL "HEAD")
# list(APPEND sleigh_ghidra_source_list
# )
# endif()
set(sleigh_slacomp_source_list
"${library_root}/slgh_compile.cc"
-12
View File
@@ -28,8 +28,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM7_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8m_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8m_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr32a.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8e.slaspec"
@@ -59,12 +57,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS12/data/languages/HCS12.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS12/data/languages/HCS12X.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/JVM/data/languages/JVM.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch32_f32.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch32_f64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch64_f32.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch64_f64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M16C/data/languages/M16C_60.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M16C/data/languages/M16C_80.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M8C/data/languages/m8c.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MC6800/data/languages/6805.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MC6800/data/languages/6809.slaspec"
@@ -95,8 +87,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500mc_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500mc_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_le.slaspec"
@@ -132,8 +122,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/V850/data/languages/V850.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Xtensa/data/languages/xtensa_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Xtensa/data/languages/xtensa_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z180.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z80.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/eBPF/data/languages/eBPF_le.slaspec"
-12
View File
@@ -28,8 +28,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM7_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8m_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/ARM/data/languages/ARM8m_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr32a.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Atmel/data/languages/avr8e.slaspec"
@@ -59,12 +57,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS12/data/languages/HCS12.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/HCS12/data/languages/HCS12X.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/JVM/data/languages/JVM.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch32_f32.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch32_f64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch64_f32.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Loongarch/data/languages/loongarch64_f64.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M16C/data/languages/M16C_60.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M16C/data/languages/M16C_80.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/M8C/data/languages/m8c.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MC6800/data/languages/6805.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/MC6800/data/languages/6809.slaspec"
@@ -95,8 +87,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500mc_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_e500mc_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/PowerPC/data/languages/ppc_32_quicciii_le.slaspec"
@@ -132,8 +122,6 @@ set(spec_file_list
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Toy/data/languages/toy_wsz_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/V850/data/languages/V850.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Xtensa/data/languages/xtensa_be.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Xtensa/data/languages/xtensa_le.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z180.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/Z80/data/languages/z80.slaspec"
"${ghidrasource_SOURCE_DIR}/Ghidra/Processors/eBPF/data/languages/eBPF_le.slaspec"
+102 -113
View File
@@ -15,121 +15,110 @@
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
#include <ghidra/action.hh>
#include <ghidra/address.hh>
#include <ghidra/architecture.hh>
#include <ghidra/block.hh>
#include <ghidra/blockaction.hh>
#include <ghidra/callgraph.hh>
#include <ghidra/capability.hh>
#include <ghidra/cast.hh>
#include <ghidra/codedata.hh>
#include <ghidra/comment.hh>
#include <ghidra/comment_ghidra.hh>
#include <ghidra/condexe.hh>
#include <ghidra/context.hh>
#include <ghidra/coreaction.hh>
#include <ghidra/cover.hh>
#include <ghidra/cpool.hh>
#include <ghidra/cpool_ghidra.hh>
#include <ghidra/crc32.hh>
#include <ghidra/database.hh>
#include <ghidra/database_ghidra.hh>
#include <ghidra/doccore.hh>
#include <ghidra/docmain.hh>
#include <ghidra/double.hh>
#include <ghidra/dynamic.hh>
#include <ghidra/emulate.hh>
#include <ghidra/emulateutil.hh>
#include <ghidra/error.hh>
#include <ghidra/filemanage.hh>
#include <ghidra/float.hh>
#include <ghidra/flow.hh>
#include <ghidra/fspec.hh>
#include <ghidra/funcdata.hh>
#include <ghidra/ghidra_arch.hh>
#include <ghidra/ghidra_context.hh>
#include <ghidra/ghidra_process.hh>
#include <ghidra/ghidra_translate.hh>
#include <ghidra/globalcontext.hh>
#include <ghidra/grammar.hh>
#include <ghidra/graph.hh>
#include <ghidra/heritage.hh>
#include <ghidra/ifacedecomp.hh>
#include <ghidra/ifaceterm.hh>
#include <ghidra/inject_ghidra.hh>
#include <ghidra/inject_sleigh.hh>
#include <ghidra/interface.hh>
#include <ghidra/jumptable.hh>
#include <ghidra/libdecomp.hh>
#include <ghidra/loadimage.hh>
#include <ghidra/loadimage_ghidra.hh>
#include <ghidra/loadimage_xml.hh>
#include <ghidra/memstate.hh>
#include <ghidra/merge.hh>
#include <ghidra/op.hh>
#include <ghidra/opbehavior.hh>
#include <ghidra/opcodes.hh>
#include <ghidra/options.hh>
#include <ghidra/override.hh>
#include <ghidra/paramid.hh>
#include <ghidra/partmap.hh>
#include <ghidra/pcodecompile.hh>
#include <ghidra/pcodeinject.hh>
#include <ghidra/pcodeparse.hh>
#include <ghidra/pcoderaw.hh>
#include <ghidra/prefersplit.hh>
#include <ghidra/prettyprint.hh>
#include <ghidra/printc.hh>
#include <ghidra/printjava.hh>
#include <ghidra/printlanguage.hh>
#include <ghidra/rangemap.hh>
#include <ghidra/rangeutil.hh>
#include <ghidra/raw_arch.hh>
#include <ghidra/ruleaction.hh>
#include <ghidra/rulecompile.hh>
#include <ghidra/semantics.hh>
#include <ghidra/sleigh.hh>
#include <ghidra/sleigh_arch.hh>
#include <ghidra/sleighbase.hh>
#include <ghidra/slgh_compile.hh>
// This is required because slghparse.hh does not have a namespace block
#include <sleigh/action.hh>
#include <sleigh/address.hh>
#include <sleigh/architecture.hh>
#include <sleigh/block.hh>
#include <sleigh/blockaction.hh>
#include <sleigh/callgraph.hh>
#include <sleigh/capability.hh>
#include <sleigh/cast.hh>
#include <sleigh/codedata.hh>
#include <sleigh/comment.hh>
#include <sleigh/comment_ghidra.hh>
#include <sleigh/condexe.hh>
#include <sleigh/context.hh>
#include <sleigh/coreaction.hh>
#include <sleigh/cover.hh>
#include <sleigh/cpool.hh>
#include <sleigh/cpool_ghidra.hh>
#include <sleigh/crc32.hh>
#include <sleigh/database.hh>
#include <sleigh/database_ghidra.hh>
#include <sleigh/doccore.hh>
#include <sleigh/docmain.hh>
#include <sleigh/double.hh>
#include <sleigh/dynamic.hh>
#include <sleigh/emulate.hh>
#include <sleigh/emulateutil.hh>
#include <sleigh/error.hh>
#include <sleigh/filemanage.hh>
#include <sleigh/float.hh>
#include <sleigh/flow.hh>
#include <sleigh/fspec.hh>
#include <sleigh/funcdata.hh>
#include <sleigh/ghidra_arch.hh>
#include <sleigh/ghidra_context.hh>
#include <sleigh/ghidra_process.hh>
#include <sleigh/ghidra_translate.hh>
#include <sleigh/globalcontext.hh>
#include <sleigh/grammar.hh>
#include <sleigh/graph.hh>
#include <sleigh/heritage.hh>
#include <sleigh/ifacedecomp.hh>
#include <sleigh/ifaceterm.hh>
#include <sleigh/inject_ghidra.hh>
#include <sleigh/inject_sleigh.hh>
#include <sleigh/interface.hh>
#include <sleigh/jumptable.hh>
#include <sleigh/libdecomp.hh>
#include <sleigh/loadimage.hh>
#include <sleigh/loadimage_ghidra.hh>
#include <sleigh/loadimage_xml.hh>
#include <sleigh/memstate.hh>
#include <sleigh/merge.hh>
#include <sleigh/op.hh>
#include <sleigh/opbehavior.hh>
#include <sleigh/opcodes.hh>
#include <sleigh/options.hh>
#include <sleigh/override.hh>
#include <sleigh/paramid.hh>
#include <sleigh/partmap.hh>
#include <sleigh/pcodecompile.hh>
#include <sleigh/pcodeinject.hh>
#include <sleigh/pcodeparse.hh>
#include <sleigh/pcoderaw.hh>
#include <sleigh/prefersplit.hh>
#include <sleigh/prettyprint.hh>
#include <sleigh/printc.hh>
#include <sleigh/printjava.hh>
#include <sleigh/printlanguage.hh>
#include <sleigh/rangemap.hh>
#include <sleigh/rangeutil.hh>
#include <sleigh/raw_arch.hh>
#include <sleigh/ruleaction.hh>
#include <sleigh/rulecompile.hh>
#include <sleigh/semantics.hh>
#include <sleigh/sleigh.hh>
#include <sleigh/sleigh_arch.hh>
#include <sleigh/sleighbase.hh>
#include <sleigh/slgh_compile.hh>
namespace ghidra {
#include <ghidra/slghparse.hh>
#include <sleigh/slghparse.hh>
} // End namespace ghidra
#include <ghidra/slghpatexpress.hh>
#include <ghidra/slghpattern.hh>
#include <ghidra/slghsymbol.hh>
#include <ghidra/space.hh>
#include <ghidra/string_ghidra.hh>
#include <ghidra/stringmanage.hh>
#include <ghidra/subflow.hh>
#include <ghidra/testfunction.hh>
#include <ghidra/transform.hh>
#include <ghidra/translate.hh>
#include <ghidra/type.hh>
#include <ghidra/typegrp_ghidra.hh>
#include <ghidra/typeop.hh>
#include <ghidra/types.h>
#include <ghidra/unify.hh>
#include <ghidra/userop.hh>
#include <ghidra/variable.hh>
#include <ghidra/varmap.hh>
#include <ghidra/varnode.hh>
#include <ghidra/xml.hh>
#include <ghidra/xml_arch.hh>
#include <ghidra/unionresolve.hh>
#include <ghidra/marshal.hh>
#include <ghidra/analyzesigs.hh>
#include <ghidra/modelrules.hh>
#include <ghidra/signature.hh>
#include <ghidra/signature_ghidra.hh>
#include <ghidra/compression.hh>
#include <ghidra/multiprecision.hh>
#include <ghidra/slaformat.hh>
// #ifdef sleigh_RELEASE_IS_HEAD
// #endif
#include <sleigh/slghpatexpress.hh>
#include <sleigh/slghpattern.hh>
#include <sleigh/slghsymbol.hh>
#include <sleigh/space.hh>
#include <sleigh/string_ghidra.hh>
#include <sleigh/stringmanage.hh>
#include <sleigh/subflow.hh>
#include <sleigh/testfunction.hh>
#include <sleigh/transform.hh>
#include <sleigh/translate.hh>
#include <sleigh/type.hh>
#include <sleigh/typegrp_ghidra.hh>
#include <sleigh/typeop.hh>
#include <sleigh/types.h>
#include <sleigh/unify.hh>
#include <sleigh/userop.hh>
#include <sleigh/variable.hh>
#include <sleigh/varmap.hh>
#include <sleigh/varnode.hh>
#include <sleigh/xml.hh>
#include <sleigh/xml_arch.hh>
#include <sleigh/unionresolve.hh>
#include <sleigh/marshal.hh>
#ifndef _MSC_VER
#pragma GCC diagnostic pop
-3
View File
@@ -23,7 +23,6 @@ add_executable(sleigh_ghidra_test
"${library_root}/../unittests/testfuncproto.cc"
"${library_root}/../unittests/testtypes.cc"
"${library_root}/../unittests/testmarshal.cc"
"${library_root}/../unittests/testparamstore.cc"
)
# if(sleigh_RELEASE_IS_HEAD)
@@ -42,8 +41,6 @@ if(HAVE_TERMIOS_H)
endif()
sleigh_add_optional_defines(sleigh_ghidra_test PRIVATE)
target_link_libraries(sleigh_ghidra_test PRIVATE ZLIB::ZLIB)
add_test(
NAME sleigh_ghidra_unittest
COMMAND sleigh_ghidra_test -sleighpath "${PROJECT_BINARY_DIR}" unittests
-3
View File
@@ -50,9 +50,6 @@ set_target_properties(sleigh_decompiler PROPERTIES
OUTPUT_NAME_DEBUG decomp_dbg
)
find_package(ZLIB REQUIRED)
target_link_libraries(sleigh_decompiler PRIVATE ZLIB::ZLIB)
if(NOT CMAKE_SKIP_INSTALL_RULES)
include("GNUInstallDirs")
-3
View File
@@ -46,9 +46,6 @@ set_target_properties(sleigh_ghidra PROPERTIES
OUTPUT_NAME_DEBUG ghidra_dbg
)
find_package(ZLIB REQUIRED)
target_link_libraries(sleigh_ghidra PRIVATE ZLIB::ZLIB)
if(NOT CMAKE_SKIP_INSTALL_RULES)
include("GNUInstallDirs")
-3
View File
@@ -36,9 +36,6 @@ set_target_properties(sleigh_sleigh PROPERTIES
OUTPUT_NAME_DEBUG sleigh_dbg
)
find_package(ZLIB REQUIRED)
target_link_libraries(sleigh_sleigh PRIVATE ZLIB::ZLIB)
if(NOT CMAKE_SKIP_INSTALL_RULES)
include("GNUInstallDirs")