about summary refs log tree commit diff stats
path: root/src/miasm/arch/aarch64/regs.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/miasm/arch/aarch64/regs.py')
-rw-r--r--src/miasm/arch/aarch64/regs.py251
1 files changed, 251 insertions, 0 deletions
diff --git a/src/miasm/arch/aarch64/regs.py b/src/miasm/arch/aarch64/regs.py
new file mode 100644
index 00000000..9dee726b
--- /dev/null
+++ b/src/miasm/arch/aarch64/regs.py
@@ -0,0 +1,251 @@
+#-*- coding:utf-8 -*-
+
+from builtins import range
+from miasm.expression.expression import ExprId
+from miasm.core.cpu import gen_reg, gen_regs, reg_info
+
+exception_flags = ExprId('exception_flags', 32)
+interrupt_num = ExprId('interrupt_num', 32)
+
+
+gpregs32_str = ["W%d" % i for i in range(0x1f)] + ["WSP"]
+gpregs32_expr, gpregs32_init, gpregs32_info = gen_regs(
+    gpregs32_str, globals(), 32)
+
+gpregs64_str = ["X%d" % i for i in range(0x1E)] + ["LR", "SP"]
+gpregs64_expr, gpregs64_init, gpregs64_info = gen_regs(
+    gpregs64_str, globals(), 64)
+
+
+gpregsz32_str = ["W%d" % i for i in range(0x1f)] + ["WZR"]
+gpregsz32_expr, gpregsz32_init, gpregsz32_info = gen_regs(
+    gpregsz32_str, globals(), 32)
+
+gpregsz64_str = ["X%d" % i for i in range(0x1e)] + ["LR", "XZR"]
+gpregsz64_expr, gpregsz64_init, gpregsz64_info = gen_regs(
+    gpregsz64_str, globals(), 64)
+
+gpregs32_nosp, _, gpregs32_nosp_info = gen_regs(gpregs32_str[:-1], globals(), 32)
+gpregs64_nosp, _, gpregs64_nosp_info = gen_regs(gpregs64_str[:-1], globals(), 64)
+
+
+cr_str = ["c%d" % i for i in range(0x10)]
+cr_expr, cr_init, cr_info = gen_regs(cr_str, globals(), 32)
+
+
+simd08_str = ["B%d" % i for i in range(0x20)]
+simd08_expr, simd08_init, simd08_info = gen_regs(simd08_str, globals(), 8)
+
+simd16_str = ["H%d" % i for i in range(0x20)]
+simd16_expr, simd16_init, simd16_info = gen_regs(simd16_str, globals(), 16)
+
+simd32_str = ["S%d" % i for i in range(0x20)]
+simd32_expr, simd32_init, simd32_info = gen_regs(simd32_str, globals(), 32)
+
+simd64_str = ["D%d" % i for i in range(0x20)]
+simd64_expr, simd64_init, simd64_info = gen_regs(simd64_str, globals(), 64)
+
+simd128_str = ["Q%d" % i for i in range(0x20)]
+simd128_expr, simd128_init, simd128_info = gen_regs(
+    simd128_str, globals(), 128)
+
+sysregs_str = ['ACTLR_EL1', 'ACTLR_EL2', 'ACTLR_EL3', 'AFSR0_EL1',
+    'AFSR0_EL2', 'AFSR0_EL3', 'AFSR1_EL1', 'AFSR1_EL2', 'AFSR1_EL3',
+    'AIDR_EL1', 'AMAIR_EL1', 'AMAIR_EL2', 'AMAIR_EL3', 'AMCFGR_EL0',
+    'AMCG1IDR_EL0', 'AMCGCR_EL0', 'AMCNTENCLR0_EL0', 'AMCNTENCLR1_EL0',
+    'AMCNTENSET0_EL0', 'AMCNTENSET1_EL0', 'AMCR_EL0'] + \
+    ['AMEVCNTR%d%d_EL0' % (i, j)     for i in range(2) for j in range(16)] + \
+    ['AMEVCNTVOFF%d%d_EL2' % (i, j)  for i in range(2) for j in range(16)] + \
+    ['AMEVTYPER%d%d_EL0' % (i, j)    for i in range(2) for j in range(16)] + \
+    ['AMUSERENR_EL0', 'APDAKeyHi_EL1', 'APDAKeyLo_EL1', 'APDBKeyHi_EL1',
+    'APDBKeyLo_EL1', 'APGAKeyHi_EL1', 'APGAKeyLo_EL1', 'APIAKeyHi_EL1',
+    'APIAKeyLo_EL1', 'APIBKeyHi_EL1', 'APIBKeyLo_EL1', 'CCSIDR2_EL1',
+    'CCSIDR_EL1', 'CLIDR_EL1', 'CNTFRQ_EL0', 'CNTHCTL_EL2',
+    'CNTHPS_CTL_EL2', 'CNTHPS_CVAL_EL2', 'CNTHPS_TVAL_EL2', 'CNTHP_CTL_EL2',
+    'CNTHP_CVAL_EL2', 'CNTHP_TVAL_EL2', 'CNTHVS_CTL_EL2', 'CNTHVS_CVAL_EL2',
+    'CNTHVS_TVAL_EL2', 'CNTHV_CTL_EL2', 'CNTHV_CVAL_EL2', 'CNTHV_TVAL_EL2',
+    'CNTKCTL_EL1', 'CNTPCTSS_EL0', 'CNTPCT_EL0', 'CNTPOFF_EL2',
+    'CNTPS_CTL_EL1', 'CNTPS_CVAL_EL1', 'CNTPS_TVAL_EL1', 'CNTP_CTL_EL0',
+    'CNTP_CVAL_EL0', 'CNTP_TVAL_EL0', 'CNTVCTSS_EL0', 'CNTVCT_EL0',
+    'CNTVOFF_EL2', 'CNTV_CTL_EL0', 'CNTV_CVAL_EL0', 'CNTV_TVAL_EL0',
+    'CONTEXTIDR_EL1', 'CONTEXTIDR_EL2', 'CPACR_EL1', 'CPTR_EL2',
+    'CPTR_EL3', 'CSSELR_EL1', 'CTR_EL0', 'DACR32_EL2', 'DBGAUTHSTATUS_EL1'] + \
+    ['DBGBCR%d_EL1' % i for i in range(16)] + \
+    ['DBGBVR%d_EL1' % i for i in range(16)] + \
+    ['DBGCLAIMCLR_EL1', 'DBGCLAIMSET_EL1', 'DBGDTRRX_EL0', 'DBGDTRTX_EL0',
+    'DBGDTR_EL0', 'DBGPRCR_EL1', 'DBGVCR32_EL2'] + \
+    ['DBGWCR%d_EL1' % i for i in range(16)] + \
+    ['DBGWVR%d_EL1' % i for i in range(16)] + \
+    ['DCZID_EL0', 'DISR_EL1', 'ELR_EL1', 'ERRIDR_EL1',
+    'ERRSELR_EL1','ERXADDR_EL1', 'ERXCTLR_EL1', 'ERXFR_EL1',
+    'ERXMISC0_EL1', 'ERXMISC1_EL1', 'ERXMISC2_EL1', 'ERXMISC3_EL1',
+    'ERXPFGCDN_EL1', 'ERXPFGCTL_EL1', 'ERXPFGF_EL1', 'ERXSTATUS_EL1',
+    'ESR_EL1', 'ESR_EL2', 'ESR_EL3', 'FAR_EL1',
+    'FAR_EL2', 'FAR_EL3', 'FPEXC32_EL2', 'HACR_EL2',
+    'HAFGRTR_EL2', 'HCR_EL2', 'HDFGRTR_EL2', 'HDFGWTR_EL2',
+    'HFGITR_EL2', 'HFGRTR_EL2', 'HFGWTR_EL2', 'HPFAR_EL2',
+    'HSTR_EL2', 'ICC_AP0R0_EL1', 'ICC_AP0R1_EL1', 'ICC_AP0R2_EL1', 
+    'ICC_AP0R3_EL1', 'ICC_AP1R0_EL1', 'ICC_AP1R1_EL1', 'ICC_AP1R2_EL1',
+    'ICC_AP1R3_EL1', 'ICC_ASGI1R_EL1', 'ICC_BPR0_EL1', 'ICC_BPR1_EL1',
+    'ICC_CTLR_EL1', 'ICC_CTLR_EL3', 'ICC_DIR_EL1', 'ICC_EOIR0_EL1',
+    'ICC_EOIR1_EL1', 'ICC_HPPIR0_EL1', 'ICC_HPPIR1_EL1', 'ICC_IAR0_EL1',
+    'ICC_IAR1_EL1', 'ICC_IGRPEN0_EL1', 'ICC_IGRPEN1_EL1', 'ICC_IGRPEN1_EL3',
+    'ICC_PMR_EL1', 'ICC_RPR_EL1', 'ICC_SGI0R_EL1', 'ICC_SGI1R_EL1',
+    'ICC_SRE_EL1', 'ICC_SRE_EL2', 'ICC_SRE_EL3', 'ICH_AP0R0_EL2',
+    'ICH_AP0R1_EL2', 'ICH_AP0R2_EL2', 'ICH_AP0R3_EL2', 'ICH_AP1R0_EL2',
+    'ICH_AP1R1_EL2', 'ICH_AP1R2_EL2', 'ICH_AP1R3_EL2', 'ICH_EISR_EL2',
+    'ICH_ELRSR_EL2', 'ICH_HCR_EL2'] + \
+    ['ICH_LR%d_EL2' % i for i in range(16)] + \
+    ['ICH_MISR_EL2', 'ICH_VMCR_EL2', 'ICH_VTR_EL2', 'ID_AA64AFR0_EL1',
+    'ID_AA64AFR1_EL1', 'ID_AA64DFR0_EL1', 'ID_AA64DFR1_EL1', 'ID_AA64ISAR0_EL1',
+    'ID_AA64ISAR1_EL1', 'ID_AA64MMFR0_EL1','ID_AA64MMFR1_EL1', 'ID_AA64MMFR2_EL1',
+    'ID_AA64PFR0_EL1', 'ID_AA64PFR1_EL1', 'ID_AA64ZFR0_EL1', 'ID_AFR0_EL1',
+    'ID_DFR0_EL1', 'ID_ISAR0_EL1', 'ID_ISAR1_EL1', 'ID_ISAR2_EL1',
+    'ID_ISAR3_EL1', 'ID_ISAR4_EL1', 'ID_ISAR5_EL1', 'ID_MMFR0_EL1',
+    'ID_MMFR1_EL1', 'ID_MMFR2_EL1', 'ID_MMFR3_EL1', 'ID_MMFR4_EL1',
+    'ID_MMFR5_EL1', 'ID_PFR0_EL1', 'ID_PFR1_EL1', 'ID_PFR2_EL1',
+    'IFSR32_EL2', 'ISR_EL1', 'LORC_EL1', 'LOREA_EL1',
+    'LORID_EL1', 'LORN_EL1', 'LORSA_EL1', 'MAIR_EL1',
+    'MAIR_EL2', 'MAIR_EL3', 'MDCCINT_EL1', 'MDCCSR_EL0',
+    'MDCR_EL2', 'MDCR_EL3', 'MDRAR_EL1', 'MDSCR_EL1',
+    'MIDR_EL1', 'MPIDR_EL1', 'MVFR0_EL1', 'MVFR1_EL1',
+    'MVFR2_EL1', 'OSDLR_EL1', 'OSDTRRX_EL1', 'OSDTRTX_EL1',
+    'OSECCR_EL1', 'OSLAR_EL1', 'OSLSR_EL1', 'PAR_EL1',
+    'PMBIDR_EL1', 'PMBLIMITR_EL1', 'PMBPTR_EL1', 'PMBSR_EL1',
+    'PMCCFILTR_EL0', 'PMCCNTR_EL0', 'PMCEID0_EL0', 'PMCEID1_EL0',
+    'PMCNTENCLR_EL0', 'PMCNTENSET_EL0', 'PMCR_EL0'] + \
+    ['PMEVCNTR%d_EL0' % i for i in range(32)] + \
+    ['PMEVTYPER%d_EL0' % i for i in range(32)] + \
+    ['PMINTENCLR_EL1', 'PMINTENSET_EL1', 'PMMIR_EL1', 'PMOVSCLR_EL0',
+    'PMOVSSET_EL0', 'PMSCR_EL1', 'PMSCR_EL2', 'PMSELR_EL0',
+    'PMSEVFR_EL1', 'PMSFCR_EL1', 'PMSICR_EL1', 'PMSIDR_EL1',
+    'PMSIRR_EL1', 'PMSLATFR_EL1', 'PMSWINC_EL0', 'PMUSERENR_EL0',
+    'PMXEVCNTR_EL0', 'PMXEVTYPER_EL0', 'REVIDR_EL1', 'RMR_EL1',
+    'RMR_EL2', 'RMR_EL3', 'RVBAR_EL1', 'RVBAR_EL2',
+    'RVBAR_EL3', 'SCRLR_EL1', 'SCR_EL3', 'SCTLR_EL1',
+    'SCTLR_EL2', 'SCTLR_EL3', 'SDER32_EL2', 'SDER32_EL3',
+    'SPSR_EL1', 'TCR_EL1', 'TCR_EL2', 'TCR_EL3',
+    'TPIDRRO_EL0', 'TPIDR_EL0', 'TPIDR_EL1', 'TPIDR_EL2',
+    'TPIDR_EL3', 'TRFCR_EL1', 'TRFCR_EL2', 'TTBR0_EL1',
+    'TTBR0_EL2', 'TTBR0_EL3', 'TTBR1_EL1', 'VBAR_EL1',
+    'VBAR_EL2', 'VBAR_EL3', 'VDISR_EL2', 'VMPIDR_EL2',
+    'VNCR_EL2', 'VPIDR_EL2', 'VSESR_EL2', 'VSTCR_EL2',
+    'VSTTBR_EL2', 'VTCR_EL2', 'VTTBR_EL2', 'ZCR_EL1',
+    'ZCR_EL2', 'ZCR_EL3', 'ELR_EL2', 'ELR_EL3', 
+    'FPCR', 'FPSR', 'SP_EL0', 'SP_EL1', 
+    'SP_EL2', 'SPSR_abt', 'SPSR_EL2',
+    'SPSR_EL3', 'SPSR_fiq', 'SPSR_irq', 'SPSR_und',
+    'DLR_EL0', 'DSPSR_EL0']
+sysregs_expr, sysregs_init, sysregs_info = gen_regs(sysregs_str, globals(), 64)
+
+PC, _ = gen_reg("PC", 64)
+WZR, _ = gen_reg("WZR", 32)
+XZR, _ = gen_reg("XZR", 64)
+
+PC_init = ExprId("PC_init", 64)
+WZR_init = ExprId("WZR_init", 32)
+XZR_init = ExprId("XZR_init", 64)
+
+reg_zf = 'zf'
+reg_nf = 'nf'
+reg_of = 'of'
+reg_cf = 'cf'
+
+reg_df = 'df'
+reg_af = 'af'
+reg_iff = 'if'
+reg_ff = 'ff'
+
+reg_cur_el = 'cur_el'
+reg_dit = 'dit'
+reg_pan = 'pan'
+reg_spsel = 'spsel'
+reg_ssbs = 'ssbs'
+reg_tco = 'tco'
+reg_uao = 'uao'
+
+zf = ExprId(reg_zf, size=1)
+nf = ExprId(reg_nf, size=1)
+of = ExprId(reg_of, size=1)
+cf = ExprId(reg_cf, size=1)
+
+df = ExprId(reg_df, size=1)
+af = ExprId(reg_af, size=1)
+iff = ExprId(reg_iff, size=1)
+ff = ExprId(reg_ff, size=1)
+
+cur_el = ExprId(reg_cur_el, size=2)
+dit = ExprId(reg_dit, size=1)
+pan = ExprId(reg_pan, size=1)
+spsel = ExprId(reg_spsel, size=1)
+ssbs = ExprId(reg_ssbs, size=1)
+tco = ExprId(reg_tco, size=1)
+uao = ExprId(reg_uao, size=1)
+
+
+zf_init = ExprId("zf_init", size=1)
+nf_init = ExprId("nf_init", size=1)
+of_init = ExprId("of_init", size=1)
+cf_init = ExprId("cf_init", size=1)
+df_init = ExprId("df_init", size=1)
+af_init = ExprId("af_init", size=1)
+iff_init = ExprId("if_init", size=1)
+ff_init = ExprId("ff_init", size=1)
+cur_el_init = ExprId("cur_el_init", size=2)
+dit_init = ExprId("dit_init", size=1)
+pan_init = ExprId("pan_init", size=1)
+spsel_init = ExprId("spsel_init", size=1)
+ssbs_init = ExprId("ssbs_init", size=1)
+tco_init = ExprId("tco_init", size=1)
+uao_init = ExprId("uao_init", size=1)
+
+
+all_regs_ids = [
+    B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15, B16,
+    B17, B18, B19, B20, B21, B22, B23, B24, B25, B26, B27, B28, B29, B30, B31,
+
+    H0, H1, H2, H3, H4, H5, H6, H7, H8, H9, H10, H11, H12, H13, H14, H15, H16,
+    H17, H18, H19, H20, H21, H22, H23, H24, H25, H26, H27, H28, H29, H30, H31,
+
+    S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16,
+    S17, S18, S19, S20, S21, S22, S23, S24, S25, S26, S27, S28, S29, S30, S31,
+
+    D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16,
+    D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30, D31,
+
+    Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16,
+    Q17, Q18, Q19, Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q30, Q31,
+
+    W0, W1, W2, W3, W4, W5, W6, W7, W8, W9, W10, W11, W12, W13, W14, W15, W16,
+    W17, W18, W19, W20, W21, W22, W23, W24, W25, W26, W27, W28, W29, W30, WSP,
+
+    X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16,
+    X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, LR, SP,
+
+    exception_flags,
+    interrupt_num,
+    PC,
+    WZR,
+    XZR,
+    zf, nf, of, cf,
+    df, af, iff, ff,
+    cur_el, dit, pan, spsel, ssbs, tco, uao,
+] + sysregs_expr 
+
+
+all_regs_ids_no_alias = all_regs_ids
+
+attrib_to_regs = {
+    'l': all_regs_ids_no_alias,
+    'b': all_regs_ids_no_alias,
+}
+
+all_regs_ids_byname = dict([(x.name, x) for x in all_regs_ids])
+
+all_regs_ids_init = [ExprId("%s_init" % x.name, x.size) for x in all_regs_ids]
+
+regs_init = {}
+for i, r in enumerate(all_regs_ids):
+    regs_init[r] = all_regs_ids_init[i]
+
+regs_flt_expr = []