|
56 | 56 | #define EXCP_SEMIHOST 16 /* semihosting call */ |
57 | 57 | #define EXCP_NOCP 17 /* v7M NOCP UsageFault */ |
58 | 58 | #define EXCP_INVSTATE 18 /* v7M INVSTATE UsageFault */ |
| 59 | +#define EXCP_STKOF 19 /* v8M STKOF UsageFault */ |
59 | 60 | /* NB: add new EXCP_ defines to the array in arm_log_exception() too */ |
60 | 61 |
|
61 | 62 | #define ARMV7M_EXCP_RESET 1 |
@@ -910,12 +911,20 @@ int arm_cpu_write_elf32_note(WriteCoreDumpFunction f, CPUState *cs, |
910 | 911 | int aarch64_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg); |
911 | 912 | int aarch64_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); |
912 | 913 | void aarch64_sve_narrow_vq(CPUARMState *env, unsigned vq); |
| 914 | +void aarch64_sve_change_el(CPUARMState *env, int old_el, int new_el); |
| 915 | +#else |
| 916 | +static inline void aarch64_sve_narrow_vq(CPUARMState *env, unsigned vq) { } |
| 917 | +static inline void aarch64_sve_change_el(CPUARMState *env, int o, int n) { } |
913 | 918 | #endif |
914 | 919 |
|
915 | 920 | target_ulong do_arm_semihosting(CPUARMState *env); |
916 | 921 | void aarch64_sync_32_to_64(CPUARMState *env); |
917 | 922 | void aarch64_sync_64_to_32(CPUARMState *env); |
918 | 923 |
|
| 924 | +int fp_exception_el(CPUARMState *env, int cur_el); |
| 925 | +int sve_exception_el(CPUARMState *env, int cur_el); |
| 926 | +uint32_t sve_zcr_len_for_el(CPUARMState *env, int el); |
| 927 | + |
919 | 928 | static inline bool is_a64(CPUARMState *env) |
920 | 929 | { |
921 | 930 | return env->aarch64; |
@@ -1336,8 +1345,10 @@ FIELD(V7M_CCR, UNALIGN_TRP, 3, 1) |
1336 | 1345 | FIELD(V7M_CCR, DIV_0_TRP, 4, 1) |
1337 | 1346 | FIELD(V7M_CCR, BFHFNMIGN, 8, 1) |
1338 | 1347 | FIELD(V7M_CCR, STKALIGN, 9, 1) |
| 1348 | +FIELD(V7M_CCR, STKOFHFNMIGN, 10, 1) |
1339 | 1349 | FIELD(V7M_CCR, DC, 16, 1) |
1340 | 1350 | FIELD(V7M_CCR, IC, 17, 1) |
| 1351 | +FIELD(V7M_CCR, BP, 18, 1) |
1341 | 1352 |
|
1342 | 1353 | /* V7M SCR bits */ |
1343 | 1354 | FIELD(V7M_SCR, SLEEPONEXIT, 1, 1) |
@@ -1378,6 +1389,7 @@ FIELD(V7M_CFSR, UNDEFINSTR, 16 + 0, 1) |
1378 | 1389 | FIELD(V7M_CFSR, INVSTATE, 16 + 1, 1) |
1379 | 1390 | FIELD(V7M_CFSR, INVPC, 16 + 2, 1) |
1380 | 1391 | FIELD(V7M_CFSR, NOCP, 16 + 3, 1) |
| 1392 | +FIELD(V7M_CFSR, STKOF, 16 + 4, 1) |
1381 | 1393 | FIELD(V7M_CFSR, UNALIGNED, 16 + 8, 1) |
1382 | 1394 | FIELD(V7M_CFSR, DIVBYZERO, 16 + 9, 1) |
1383 | 1395 |
|
@@ -2842,6 +2854,9 @@ static inline bool arm_cpu_data_is_big_endian(CPUARMState *env) |
2842 | 2854 | /* For M profile only, Handler (ie not Thread) mode */ |
2843 | 2855 | #define ARM_TBFLAG_HANDLER_SHIFT 21 |
2844 | 2856 | #define ARM_TBFLAG_HANDLER_MASK (1 << ARM_TBFLAG_HANDLER_SHIFT) |
| 2857 | +/* For M profile only, whether we should generate stack-limit checks */ |
| 2858 | +#define ARM_TBFLAG_STACKCHECK_SHIFT 22 |
| 2859 | +#define ARM_TBFLAG_STACKCHECK_MASK (1 << ARM_TBFLAG_STACKCHECK_SHIFT) |
2845 | 2860 |
|
2846 | 2861 | /* Bit usage when in AArch64 state */ |
2847 | 2862 | #define ARM_TBFLAG_TBI0_SHIFT 0 /* TBI0 for EL0/1 or TBI for EL2/3 */ |
@@ -2884,6 +2899,8 @@ static inline bool arm_cpu_data_is_big_endian(CPUARMState *env) |
2884 | 2899 | (((F) & ARM_TBFLAG_BE_DATA_MASK) >> ARM_TBFLAG_BE_DATA_SHIFT) |
2885 | 2900 | #define ARM_TBFLAG_HANDLER(F) \ |
2886 | 2901 | (((F) & ARM_TBFLAG_HANDLER_MASK) >> ARM_TBFLAG_HANDLER_SHIFT) |
| 2902 | +#define ARM_TBFLAG_STACKCHECK(F) \ |
| 2903 | + (((F) & ARM_TBFLAG_STACKCHECK_MASK) >> ARM_TBFLAG_STACKCHECK_SHIFT) |
2887 | 2904 | #define ARM_TBFLAG_TBI0(F) \ |
2888 | 2905 | (((F) & ARM_TBFLAG_TBI0_MASK) >> ARM_TBFLAG_TBI0_SHIFT) |
2889 | 2906 | #define ARM_TBFLAG_TBI1(F) \ |
|
0 commit comments