From ad345249d0fb5a4eacfb9e2a5a7180eb494be6e2 Mon Sep 17 00:00:00 2001 From: Richard L Ford Date: Sun, 17 Jul 2022 19:03:48 -0400 Subject: [PATCH] Add additional patch on capstone 4.0.2 for PPC Signed 16 bit immediates Capstone version 4.0.2 has a bug when disassembling a powerpc instruction with a signed 16-bit immediate. See https://github.com/capstone-engine/capstone/issues/1746 and https://github.com/capstone-engine/capstone/issues/1746#issuecomment-1186559582. This change adds to the capstone patch to fix this problem. --- deps/capstone/patch.cmake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/deps/capstone/patch.cmake b/deps/capstone/patch.cmake index 164133b080..7492a6f399 100644 --- a/deps/capstone/patch.cmake +++ b/deps/capstone/patch.cmake @@ -11,9 +11,16 @@ string(REPLACE "${content}" ) -if("${new_content}" STREQUAL "${content}") +string(REPLACE + "static void printS16ImmOperand(MCInst *MI, unsigned OpNo, SStream *O)\n{\n\tif (MCOperand_isImm(MCInst_getOperand(MI, OpNo))) {\n\t\tunsigned short Imm = (unsigned short)MCOperand_getImm(MCInst_getOperand(MI, OpNo));\n if (Imm > HEX_THRESHOLD)\n SStream_concat(O, \"0x%x\", Imm);\n else\n SStream_concat(O, \"%u\", Imm);\n" + "static void printS16ImmOperand(MCInst *MI, unsigned OpNo, SStream *O)\n{\n\tif (MCOperand_isImm(MCInst_getOperand(MI, OpNo))) {\n// RetDec fix\n\t\tshort Imm = (short)MCOperand_getImm(MCInst_getOperand(MI, OpNo));\n\t\tSStream_concat(O, \"%d\", Imm);\n" + new_content2 + "${new_content}" +) + +if("${new_content2}" STREQUAL "${content}") message(STATUS "-- Patching: ${full_path} skipped") else() message(STATUS "-- Patching: ${full_path} patched") - file(WRITE "${full_path}" "${new_content}") + file(WRITE "${full_path}" "${new_content2}") endif()