From b3f4609330128138f3246359bdb834ac7604e81d Mon Sep 17 00:00:00 2001 From: ghidra007 Date: Fri, 23 May 2025 19:10:25 +0000 Subject: [PATCH 1/2] GP-5718 fix for index issue --- .../Decompiler/src/decompile/cpp/subflow.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/subflow.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/subflow.cc index 42d185d7c8..c88d3bdf49 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/subflow.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/subflow.cc @@ -731,10 +731,15 @@ bool SubvariableFlow::traceBackward(ReplaceVarnode *rvn) addNewConstant(rop,0,(uintb)0); return true; } - if ((newmask<mask) - break; // subvariable is truncated by shift - rop = createOp(CPUI_COPY,1,rvn); - if (!createLink(rop,newmask,0,op->getIn(0))) return false; + if ((newmask<mask) { + rop = createOp(CPUI_COPY,1,rvn); + if (!createLink(rop,newmask,0,op->getIn(0))) return false; + return true; + } + if ((rvn->mask & 1)==0) return false; // Can't assume zeroes are shifted into least sig bits + rop = createOp(CPUI_INT_LEFT,2,rvn); + if (!createLink(rop,rvn->mask,0,op->getIn(0))) return false; + addConstant(rop,calc_mask(op->getIn(1)->getSize()),1,op->getIn(1)); // Preserve the shift amount return true; case CPUI_INT_RIGHT: if (!op->getIn(1)->isConstant()) break; // Dynamic shift From 3e117157787f79f842f72d82641426ab9d4b9a28 Mon Sep 17 00:00:00 2001 From: ghintern Date: Mon, 14 Jul 2025 18:38:17 +0000 Subject: [PATCH 2/2] GP-4989: Fix ARM AAPCS cspec, add soft float calling convention --- .../data/languages/compiler_spec.rxg | 5 + .../Processors/ARM/data/languages/ARM.cspec | 176 +++++++++++++++++- .../ARM/data/languages/ARM_win.cspec | 140 +++++++++++--- 3 files changed, 296 insertions(+), 25 deletions(-) diff --git a/Ghidra/Framework/SoftwareModeling/data/languages/compiler_spec.rxg b/Ghidra/Framework/SoftwareModeling/data/languages/compiler_spec.rxg index d9a1095a3d..b0edc05725 100644 --- a/Ghidra/Framework/SoftwareModeling/data/languages/compiler_spec.rxg +++ b/Ghidra/Framework/SoftwareModeling/data/languages/compiler_spec.rxg @@ -404,6 +404,11 @@ + + + + + diff --git a/Ghidra/Processors/ARM/data/languages/ARM.cspec b/Ghidra/Processors/ARM/data/languages/ARM.cspec index 2a8c24b9d1..5bdb50ff1a 100644 --- a/Ghidra/Processors/ARM/data/languages/ARM.cspec +++ b/Ghidra/Processors/ARM/data/languages/ARM.cspec @@ -58,6 +58,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -73,17 +97,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + @@ -103,9 +202,15 @@ + + + + + + @@ -117,6 +222,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ghidra/Processors/ARM/data/languages/ARM_win.cspec b/Ghidra/Processors/ARM/data/languages/ARM_win.cspec index f4e1dc2d1c..c46cc95584 100644 --- a/Ghidra/Processors/ARM/data/languages/ARM_win.cspec +++ b/Ghidra/Processors/ARM/data/languages/ARM_win.cspec @@ -37,7 +37,105 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68,26 +166,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +