From 865b156b08c42e03edc5e50a41d7ba41108b3870 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 12 Nov 2020 01:21:03 +0100 Subject: [PATCH 1/3] Fixed ARM coproc regs for CRn == c1 --- .../ARM/data/languages/ARMinstructions.sinc | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc b/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc index a755d7895b..86b48c779e 100644 --- a/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc +++ b/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc @@ -676,8 +676,9 @@ define pcodeop coproc_moveto_Cache_Type; define pcodeop coproc_moveto_TCM_Status; define pcodeop coproc_moveto_TLB_Type; define pcodeop coproc_moveto_Control; -define pcodeop coproc_moveto_Auxilary_Control; +define pcodeop coproc_moveto_Auxiliary_Control; define pcodeop coproc_moveto_Coprocessor_Access_Control; +define pcodeop coproc_moveto_Secure_Configuration; define pcodeop coproc_moveto_Translation_table_base_0; define pcodeop coproc_moveto_Translation_table_base_1; define pcodeop coproc_moveto_Translation_table_control; @@ -726,8 +727,9 @@ define pcodeop coproc_movefrom_Cache_Type; define pcodeop coproc_movefrom_TCM_Status; define pcodeop coproc_movefrom_TLB_Type; define pcodeop coproc_movefrom_Control; -define pcodeop coproc_movefrom_Auxilary_Control; +define pcodeop coproc_movefrom_Auxiliary_Control; define pcodeop coproc_movefrom_Coprocessor_Access_Control; +define pcodeop coproc_movefrom_Secure_Configuration; define pcodeop coproc_movefrom_Translation_table_base_0; define pcodeop coproc_movefrom_Translation_table_base_1; define pcodeop coproc_movefrom_Translation_table_control; @@ -2941,16 +2943,16 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate :mcr^COND mcrOperands is - $(AMODE) & CRm=1 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=1 & c2020=0 & opc1=0 & c2427=14 & COND & + $(AMODE) & CRm=0 & c0404=1 & opc2=1 & cpn=15 & Rd & CRn=1 & c2020=0 & opc1=0 & c2427=14 & COND & mcrOperands { build COND; - coproc_moveto_Auxilary_Control(Rd); + coproc_moveto_Auxiliary_Control(Rd); } :mcr^COND mcrOperands is - $(AMODE) & CRm=2 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=1 & c2020=0 & opc1=0 & c2427=14 & COND & + $(AMODE) & CRm=0 & c0404=1 & opc2=2 & cpn=15 & Rd & CRn=1 & c2020=0 & opc1=0 & c2427=14 & COND & mcrOperands { build COND; @@ -2958,6 +2960,15 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate } +:mcr^COND mcrOperands is + $(AMODE) & CRm=1 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=1 & c2020=0 & opc1=0 & c2427=14 & COND & + mcrOperands +{ + build COND; + coproc_moveto_Secure_Configuration(Rd); +} + + :mcr^COND mcrOperands is $(AMODE) & CRm=0 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=2 & c2020=0 & opc1=0 & c2427=14 & COND & mcrOperands @@ -3590,17 +3601,17 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate :mrc^COND mcrOperands is - $(AMODE) & CRm=1 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=1 & c2020=1 & opc1=0 & c2427=14 & COND & + $(AMODE) & CRm=0 & c0404=1 & opc2=1 & cpn=15 & Rd & CRn=1 & c2020=1 & opc1=0 & c2427=14 & COND & mcrOperands { build COND; - Rd = coproc_movefrom_Auxilary_Control(); + Rd = coproc_movefrom_Auxiliary_Control(); } :mrc^COND mcrOperands is - $(AMODE) & CRm=2 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=1 & c2020=1 & opc1=0 & c2427=14 & COND & + $(AMODE) & CRm=0 & c0404=1 & opc2=2 & cpn=15 & Rd & CRn=1 & c2020=1 & opc1=0 & c2427=14 & COND & mcrOperands { build COND; @@ -3609,6 +3620,16 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate +:mrc^COND mcrOperands is + $(AMODE) & CRm=1 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=1 & c2020=1 & opc1=0 & c2427=14 & COND & + mcrOperands +{ + build COND; + Rd = coproc_movefrom_Secure_Configuration(); +} + + + :mrc^COND mcrOperands is $(AMODE) & CRm=0 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=2 & c2020=1 & opc1=0 & c2427=14 & COND & mcrOperands From 823887cf89786eb19caadfe49ca546fda3073d63 Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 12 Nov 2020 01:21:30 +0100 Subject: [PATCH 2/3] Added missing CRn == c1, op1 == 0 coproc registers --- .../ARM/data/languages/ARMinstructions.sinc | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc b/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc index 86b48c779e..2a4651d775 100644 --- a/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc +++ b/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc @@ -679,6 +679,8 @@ define pcodeop coproc_moveto_Control; define pcodeop coproc_moveto_Auxiliary_Control; define pcodeop coproc_moveto_Coprocessor_Access_Control; define pcodeop coproc_moveto_Secure_Configuration; +define pcodeop coproc_moveto_Secure_Debug_Enable; +define pcodeop coproc_moveto_Non-Secure_Access_Control; define pcodeop coproc_moveto_Translation_table_base_0; define pcodeop coproc_moveto_Translation_table_base_1; define pcodeop coproc_moveto_Translation_table_control; @@ -730,6 +732,8 @@ define pcodeop coproc_movefrom_Control; define pcodeop coproc_movefrom_Auxiliary_Control; define pcodeop coproc_movefrom_Coprocessor_Access_Control; define pcodeop coproc_movefrom_Secure_Configuration; +define pcodeop coproc_movefrom_Secure_Debug_Enable; +define pcodeop coproc_movefrom_Non-Secure_Access_Control; define pcodeop coproc_movefrom_Translation_table_base_0; define pcodeop coproc_movefrom_Translation_table_base_1; define pcodeop coproc_movefrom_Translation_table_control; @@ -2969,6 +2973,24 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate } +:mcr^COND mcrOperands is + $(AMODE) & CRm=1 & c0404=1 & opc2=1 & cpn=15 & Rd & CRn=1 & c2020=0 & opc1=0 & c2427=14 & COND & + mcrOperands +{ + build COND; + coproc_moveto_Secure_Debug_Enable(Rd); +} + + +:mcr^COND mcrOperands is + $(AMODE) & CRm=1 & c0404=1 & opc2=2 & cpn=15 & Rd & CRn=1 & c2020=0 & opc1=0 & c2427=14 & COND & + mcrOperands +{ + build COND; + coproc_moveto_Non-Secure_Access_Control(Rd); +} + + :mcr^COND mcrOperands is $(AMODE) & CRm=0 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=2 & c2020=0 & opc1=0 & c2427=14 & COND & mcrOperands @@ -3630,6 +3652,26 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate +:mrc^COND mcrOperands is + $(AMODE) & CRm=1 & c0404=1 & opc2=1 & cpn=15 & Rd & CRn=1 & c2020=1 & opc1=0 & c2427=14 & COND & + mcrOperands +{ + build COND; + Rd = coproc_movefrom_Secure_Debug_Enable(); +} + + + +:mrc^COND mcrOperands is + $(AMODE) & CRm=1 & c0404=1 & opc2=2 & cpn=15 & Rd & CRn=1 & c2020=1 & opc1=0 & c2427=14 & COND & + mcrOperands +{ + build COND; + Rd = coproc_movefrom_Non-Secure_Access_Control(); +} + + + :mrc^COND mcrOperands is $(AMODE) & CRm=0 & c0404=1 & opc2=0 & cpn=15 & Rd & CRn=2 & c2020=1 & opc1=0 & c2427=14 & COND & mcrOperands From 6b145561d147e583648067247da9a6ced191423b Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Thu, 12 Nov 2020 01:46:25 +0100 Subject: [PATCH 3/3] Changed Non-Secure to NonSecure, because the dash breaks the build --- Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc b/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc index 2a4651d775..3810576019 100644 --- a/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc +++ b/Ghidra/Processors/ARM/data/languages/ARMinstructions.sinc @@ -680,7 +680,7 @@ define pcodeop coproc_moveto_Auxiliary_Control; define pcodeop coproc_moveto_Coprocessor_Access_Control; define pcodeop coproc_moveto_Secure_Configuration; define pcodeop coproc_moveto_Secure_Debug_Enable; -define pcodeop coproc_moveto_Non-Secure_Access_Control; +define pcodeop coproc_moveto_NonSecure_Access_Control; define pcodeop coproc_moveto_Translation_table_base_0; define pcodeop coproc_moveto_Translation_table_base_1; define pcodeop coproc_moveto_Translation_table_control; @@ -733,7 +733,7 @@ define pcodeop coproc_movefrom_Auxiliary_Control; define pcodeop coproc_movefrom_Coprocessor_Access_Control; define pcodeop coproc_movefrom_Secure_Configuration; define pcodeop coproc_movefrom_Secure_Debug_Enable; -define pcodeop coproc_movefrom_Non-Secure_Access_Control; +define pcodeop coproc_movefrom_NonSecure_Access_Control; define pcodeop coproc_movefrom_Translation_table_base_0; define pcodeop coproc_movefrom_Translation_table_base_1; define pcodeop coproc_movefrom_Translation_table_control; @@ -2987,7 +2987,7 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate mcrOperands { build COND; - coproc_moveto_Non-Secure_Access_Control(Rd); + coproc_moveto_NonSecure_Access_Control(Rd); } @@ -3667,7 +3667,7 @@ ArmPCRelImmed12: reloff is U23=0 & immed & rotate mcrOperands { build COND; - Rd = coproc_movefrom_Non-Secure_Access_Control(); + Rd = coproc_movefrom_NonSecure_Access_Control(); }