GaloisInc / macaw

Open source binary analysis tools.
BSD 3-Clause "New" or "Revised" License
190 stars 19 forks source link

`macaw-aarch32`: Define shorthand for ARM registers #374

Open RyanGlScott opened 3 months ago

RyanGlScott commented 3 months ago

Currently, lots of places in macaw-aarch32 refer to ARM registers in an extremely verbose way:

$ git grep -n "knownGlobalRef" macaw-aarch32
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:102:      [| ARMGlobalBool (ASL.knownGlobalRef :: ASL.GlobalRef $(return (TH.LitT (TH.StrTyLit refName)))) |]
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:104:      [| ARMGlobalBV (ASL.knownGlobalRef :: ASL.GlobalRef $(return (TH.LitT (TH.StrTyLit refName)))) |]
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:111:arm_LR = ARMGlobalBV (ASL.knownGlobalRef @"_R14")
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:114:branchTaken = ARMGlobalBool (ASL.knownGlobalRef @"__BranchTaken")
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:155:      sp_reg = ARMGlobalBV (ASL.knownGlobalRef @"_R13")
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:156:      ip_reg = ARMGlobalBV (ASL.knownGlobalRef @"_PC")
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:188:  Set.fromList [ Some (ARMGlobalBV (ASL.knownGlobalRef @"_R8"))
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:189:               , Some (ARMGlobalBV (ASL.knownGlobalRef @"_R9"))
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:190:               , Some (ARMGlobalBV (ASL.knownGlobalRef @"_R10"))
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:191:               , Some (ARMGlobalBV (ASL.knownGlobalRef @"_R11"))
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:192:               , Some (ARMGlobalBV (ASL.knownGlobalRef @"_R12"))
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:193:               , Some (ARMGlobalBV (ASL.knownGlobalRef @"_R13"))
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:194:               , Some (ARMGlobalBV (ASL.knownGlobalRef @"_R14"))
macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs:195:               , Some (ARMGlobalBV (ASL.knownGlobalRef @"_PC"))
...

Having to type ARMGlobalBV (ASL.knownGlobalRef @...) every time is a real drag. It would be nicer if we could just type, for example, arm_R0 to refer to ARMGlobalBV (ASL.knownGlobalRef @"_R0") without needing any extra faff. Similarly for arm_R1, arm_R2, etc. To my knowledge, there is only one such definition in macaw-aarch32 at the moment:

https://github.com/GaloisInc/macaw/blob/1ab280b5f8bc4a74515548db38da9c63030c1d3b/macaw-aarch32/src/Data/Macaw/ARM/ARMReg.hs#L109-L111

We should add shorthand for the other ARM registers as well.