Skip to content

AArch64 dsb instruction doesn't always parse #7996

Open
@Super-Pizza

Description

@Super-Pizza

Describe the bug
The dsb DataSynchronizationBarrier instruction doesn't properly parse most of the time, being parsed as unknown MSR calls.

To Reproduce
The following bytes fail to properly parse in LE: 9f 3f 03 d5 (dsb SY)

Expected behavior
...

Screenshots
Not really necessary

Attachments
...

Environment (please complete the following information):

  • OS: Linux
  • Java Version: 21
  • Ghidra Version: 11.0.3
  • Ghidra Origin: distro

Additional context

Fix:

diff --git a/Ghidra/Processors/AARCH64/data/languages/AARCH64base.sinc b/Ghidra/Processors/AARCH64/data/languages/AARCH64base.sinc
index 5370387..1219d65 100644
--- a/Ghidra/Processors/AARCH64/data/languages/AARCH64base.sinc 
+++ b/Ghidra/Processors/AARCH64/data/languages/AARCH64base.sinc 
@@ -2270,10 +2270,10 @@ is b_2431=0xd5 & b_2223=0 & l=0 & Op0=0 & Op1=3 & CRn=0x3 & CRm_dbarrier_op & CR
 # AUNIT --inst xd503309f/mask=xfffff0ff --status nodest
 
 :dsb CRm_dbarrier_op
-is b_2431=0xd5 & b_2223=0 & l=0 & Op0=0 & Op1=3 & CRn=0x3 & CRm_dbarrier_op & CRm_32 & CRm_10=2 & Op2=4 & Rt=0x1f
+is b_2431=0xd5 & b_2223=0 & l=0 & Op0=0 & Op1=3 & CRn=0x3 & CRm_dbarrier_op & CRm_32 & Op2=4 & Rt=0x1f
 {
        types:1 = 0x3; #MBReqTypes_All
-       domain:1 = CRm_32;
+       domain:1 = CRm_dbarrier_op;
        DataSynchronizationBarrier(domain, types);
 }

Should I make a PR?

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions