^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #ifndef __ASM_KGDB_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #define __ASM_KGDB_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifdef __KERNEL__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define GDB_SIZEOF_REG sizeof(unsigned long)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define DBG_MAX_REG_NUM (36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define NUMREGBYTES ((DBG_MAX_REG_NUM) * GDB_SIZEOF_REG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define CACHE_FLUSH_IS_SAFE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define BUFMAX 2048
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #ifdef CONFIG_RISCV_ISA_C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define BREAK_INSTR_SIZE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define BREAK_INSTR_SIZE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #ifndef __ASSEMBLY__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) extern unsigned long kgdb_compiled_break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) static inline void arch_kgdb_breakpoint(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) asm(".global kgdb_compiled_break\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) ".option norvc\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) "kgdb_compiled_break: ebreak\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) ".option rvc\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #endif /* !__ASSEMBLY__ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define DBG_REG_ZERO "zero"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define DBG_REG_RA "ra"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define DBG_REG_SP "sp"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define DBG_REG_GP "gp"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define DBG_REG_TP "tp"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define DBG_REG_T0 "t0"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define DBG_REG_T1 "t1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define DBG_REG_T2 "t2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define DBG_REG_FP "fp"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define DBG_REG_S1 "s1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define DBG_REG_A0 "a0"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define DBG_REG_A1 "a1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define DBG_REG_A2 "a2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define DBG_REG_A3 "a3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define DBG_REG_A4 "a4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define DBG_REG_A5 "a5"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define DBG_REG_A6 "a6"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define DBG_REG_A7 "a7"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define DBG_REG_S2 "s2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define DBG_REG_S3 "s3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define DBG_REG_S4 "s4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define DBG_REG_S5 "s5"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define DBG_REG_S6 "s6"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define DBG_REG_S7 "s7"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define DBG_REG_S8 "s8"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define DBG_REG_S9 "s9"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define DBG_REG_S10 "s10"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define DBG_REG_S11 "s11"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define DBG_REG_T3 "t3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define DBG_REG_T4 "t4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define DBG_REG_T5 "t5"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define DBG_REG_T6 "t6"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define DBG_REG_EPC "pc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define DBG_REG_STATUS "sstatus"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define DBG_REG_BADADDR "stval"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define DBG_REG_CAUSE "scause"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define DBG_REG_ZERO_OFF 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define DBG_REG_RA_OFF 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define DBG_REG_SP_OFF 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define DBG_REG_GP_OFF 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define DBG_REG_TP_OFF 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define DBG_REG_T0_OFF 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define DBG_REG_T1_OFF 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define DBG_REG_T2_OFF 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define DBG_REG_FP_OFF 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define DBG_REG_S1_OFF 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define DBG_REG_A0_OFF 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define DBG_REG_A1_OFF 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define DBG_REG_A2_OFF 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define DBG_REG_A3_OFF 13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define DBG_REG_A4_OFF 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define DBG_REG_A5_OFF 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define DBG_REG_A6_OFF 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define DBG_REG_A7_OFF 17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define DBG_REG_S2_OFF 18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define DBG_REG_S3_OFF 19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define DBG_REG_S4_OFF 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define DBG_REG_S5_OFF 21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define DBG_REG_S6_OFF 22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define DBG_REG_S7_OFF 23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define DBG_REG_S8_OFF 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define DBG_REG_S9_OFF 25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define DBG_REG_S10_OFF 26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define DBG_REG_S11_OFF 27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define DBG_REG_T3_OFF 28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define DBG_REG_T4_OFF 29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define DBG_REG_T5_OFF 30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define DBG_REG_T6_OFF 31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define DBG_REG_EPC_OFF 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define DBG_REG_STATUS_OFF 33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define DBG_REG_BADADDR_OFF 34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define DBG_REG_CAUSE_OFF 35
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) extern const char riscv_gdb_stub_feature[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define kgdb_arch_gdb_stub_feature riscv_gdb_stub_feature
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #endif