VirtualBox

Changeset 106679 in vbox


Ignore:
Timestamp:
Oct 25, 2024 8:55:05 AM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165549
Message:

Disasembler: Decode unprivileged load/store instructions, bugref:10394

Location:
trunk/src/VBox/Disassembler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/DisasmTables-armv8-a64.cpp

    r106659 r106679  
    10421042    DIS_ARMV8_OP(0x78000400, "strh",            OP_ARMV8_A64_STRH,      DISOPTYPE_HARMLESS),
    10431043    DIS_ARMV8_OP(0x78400400, "ldrh",            OP_ARMV8_A64_LDRH,      DISOPTYPE_HARMLESS),
    1044  DIS_ARMV8_OP_EX(0x78800400, "ldrsh",           OP_ARMV8_A64_LDURSH,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
    1045  DIS_ARMV8_OP_EX(0x78c00400, "ldrsh",           OP_ARMV8_A64_LDURSH,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
     1044 DIS_ARMV8_OP_EX(0x78800400, "ldrsh",           OP_ARMV8_A64_LDRSH,     DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1045 DIS_ARMV8_OP_EX(0x78c00400, "ldrsh",           OP_ARMV8_A64_LDRSH,     DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
    10461046    DIS_ARMV8_OP(0xb8000400, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS),
    10471047    DIS_ARMV8_OP(0xb8400400, "ldr",             OP_ARMV8_A64_LDR,       DISOPTYPE_HARMLESS),
    1048  DIS_ARMV8_OP_EX(0xb8800400, "ldrsw",           OP_ARMV8_A64_LDURSW,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1048 DIS_ARMV8_OP_EX(0xb8800400, "ldrsw",           OP_ARMV8_A64_LDRSW,     DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
    10491049    INVALID_OPCODE,
    10501050    DIS_ARMV8_OP(0xf8000400, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS),
     
    10741074
    10751075/*
     1076 * STTRB/LDTRB/LDTRSB/STTRH/LDTRH/LDTRSH/LDTRSH/STTR/LDTR/LDTRSW/STTR/LDTR
     1077 *
     1078 * Note: The size,opc bitfields are concatenated to form an index.
     1079 */
     1080DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegUnpriv)
     1081    DIS_ARMV8_INSN_DECODE(kDisParmParseSize,               30,  2, DIS_ARMV8_INSN_PARAM_UNSET),
     1082    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr,               0,  5, 0 /*idxParam*/),
     1083    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,           5,  5, 1 /*idxParam*/),
     1084    DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOffUnscaled, 12,  9, 1 /*idxParam*/),
     1085DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegUnpriv)
     1086    DIS_ARMV8_OP(0x38000800, "sttrb",           OP_ARMV8_A64_STTRB,     DISOPTYPE_HARMLESS),
     1087    DIS_ARMV8_OP(0x38400800, "ldtrb",           OP_ARMV8_A64_LDTRB,     DISOPTYPE_HARMLESS),
     1088 DIS_ARMV8_OP_EX(0x38800800, "ldtrsb",          OP_ARMV8_A64_LDTRSB,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1089 DIS_ARMV8_OP_EX(0x38c00800, "ldtrsb",          OP_ARMV8_A64_LDTRSB,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
     1090    DIS_ARMV8_OP(0x78000800, "sttrh",           OP_ARMV8_A64_STTRH,     DISOPTYPE_HARMLESS),
     1091    DIS_ARMV8_OP(0x78400800, "ldtrh",           OP_ARMV8_A64_LDTRH,     DISOPTYPE_HARMLESS),
     1092 DIS_ARMV8_OP_EX(0x78800800, "ldtrsh",          OP_ARMV8_A64_LDTRSH,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1093 DIS_ARMV8_OP_EX(0x78c00800, "ldtrsh",          OP_ARMV8_A64_LDTRSH,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
     1094    DIS_ARMV8_OP(0xb8000800, "sttr",            OP_ARMV8_A64_STTR,      DISOPTYPE_HARMLESS),
     1095    DIS_ARMV8_OP(0xb8400800, "ldtr",            OP_ARMV8_A64_LDTR,      DISOPTYPE_HARMLESS),
     1096 DIS_ARMV8_OP_EX(0xb8800800, "ldtrsw",          OP_ARMV8_A64_LDTRSW,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1097    INVALID_OPCODE,
     1098    DIS_ARMV8_OP(0xf8000800, "sttr",            OP_ARMV8_A64_STTR,      DISOPTYPE_HARMLESS),
     1099    DIS_ARMV8_OP(0xf8400800, "ldtr",            OP_ARMV8_A64_LDTR,      DISOPTYPE_HARMLESS),
     1100    INVALID_OPCODE,
     1101    INVALID_OPCODE,
     1102DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegUnpriv, 0xffe00c00 /*fFixedInsn*/,
     1103                                       kDisArmV8OpcDecodeCollate,
     1104                                       RT_BIT_32(22) | RT_BIT_32(23) | RT_BIT_32(30) | RT_BIT_32(31), 22);
     1105
     1106
     1107/*
    10761108 * C4.1.94 - Loads and Stores - Load/Store register variants
    10771109 *
     
    10881120    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegUnscaledImm),
    10891121    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPostIndex),
    1090     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,         /** @todo */
     1122    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegUnpriv),       /* No vector variants. */
    10911123    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPreIndex),
    10921124DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegOp2_11_0, RT_BIT_32(10) | RT_BIT_32(11), 10);
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106668 r106679  
    787787        ldursw x0, [sp, #255]
    788788
     789
     790        ldtrb w0, [x28]
     791        ldtrb w0, [x28, #-256]
     792        ldtrb w0, [x28, #255]
     793
     794        ldtrb w0, [sp]
     795        ldtrb w0, [sp, #-256]
     796        ldtrb w0, [sp, #255]
     797
     798        ldtrsb w0, [x28]
     799        ldtrsb w0, [x28, #-256]
     800        ldtrsb w0, [x28, #255]
     801
     802        ldtrsb w0, [sp]
     803        ldtrsb w0, [sp, #-256]
     804        ldtrsb w0, [sp, #255]
     805
     806        ldtrsb x0, [x28]
     807        ldtrsb x0, [x28, #-256]
     808        ldtrsb x0, [x28, #255]
     809
     810        ldtrsb x0, [sp]
     811        ldtrsb x0, [sp, #-256]
     812        ldtrsb x0, [sp, #255]
     813
     814        ldtrh w0, [x28]
     815        ldtrh w0, [x28, #-256]
     816        ldtrh w0, [x28, #255]
     817
     818        ldtrh w0, [sp]
     819        ldtrh w0, [sp, #-256]
     820        ldtrh w0, [sp, #255]
     821
     822        ldtrsh w0, [x28]
     823        ldtrsh w0, [x28, #-256]
     824        ldtrsh w0, [x28, #255]
     825
     826        ldtrsh w0, [sp]
     827        ldtrsh w0, [sp, #-256]
     828        ldtrsh w0, [sp, #255]
     829
     830        ldtrsh x0, [x28]
     831        ldtrsh x0, [x28, #-256]
     832        ldtrsh x0, [x28, #255]
     833
     834        ldtrsh x0, [sp]
     835        ldtrsh x0, [sp, #-256]
     836        ldtrsh x0, [sp, #255]
     837
     838        ldtr x0, [x28]
     839        ldtr x0, [x28, #-256]
     840        ldtr x0, [x28, #255]
     841
     842        ldtr x0, [sp]
     843        ldtr x0, [sp, #-256]
     844        ldtr x0, [sp, #255]
     845
     846        ldtr w0, [x28]
     847        ldtr w0, [x28, #-256]
     848        ldtr w0, [x28, #255]
     849
     850        ldtr w0, [sp]
     851        ldtr w0, [sp, #-256]
     852        ldtr w0, [sp, #255]
     853
     854        ldtrsw x0, [x28]
     855        ldtrsw x0, [x28, #-256]
     856        ldtrsw x0, [x28, #255]
     857
     858        ldtrsw x0, [sp]
     859        ldtrsw x0, [sp, #-256]
     860        ldtrsw x0, [sp, #255]
     861
     862
    789863        ldp w0, w1, [x28]
    790864        ldp w0, w1, [x28, #4]
     
    10721146        stur w0, [sp, #-256]
    10731147        stur w0, [sp, #255]
     1148
     1149
     1150        sttrb w0, [x28]
     1151        sttrb w0, [x28, #-256]
     1152        sttrb w0, [x28, #255]
     1153
     1154        sttrb w0, [sp]
     1155        sttrb w0, [sp, #-256]
     1156        sttrb w0, [sp, #255]
     1157
     1158        sttrh w0, [x28]
     1159        sttrh w0, [x28, #-256]
     1160        sttrh w0, [x28, #255]
     1161
     1162        sttrh w0, [sp]
     1163        sttrh w0, [sp, #-256]
     1164        sttrh w0, [sp, #255]
     1165
     1166        sttr x0, [x28]
     1167        sttr x0, [x28, #-256]
     1168        sttr x0, [x28, #255]
     1169
     1170        sttr x0, [sp]
     1171        sttr x0, [sp, #-256]
     1172        sttr x0, [sp, #255]
     1173
     1174        sttr w0, [x28]
     1175        sttr w0, [x28, #-256]
     1176        sttr w0, [x28, #255]
     1177
     1178        sttr w0, [sp]
     1179        sttr w0, [sp, #-256]
     1180        sttr w0, [sp, #255]
     1181
    10741182
    10751183        stp w0, w1, [x28]
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette