^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _ASM_X86_KGDB_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _ASM_X86_KGDB_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2001-2004 Amit S. Kale
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (C) 2008 Wind River Systems, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <asm/ptrace.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * BUFMAX defines the maximum number of characters in inbound/outbound
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * buffers at least NUMREGBYTES*2 are needed for register packets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * Longer buffer is needed to list all threads
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define BUFMAX 1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * Note that this register image is in a different order than
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * the register image that Linux produces at interrupt time.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * Linux's register image is defined by struct pt_regs in ptrace.h.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * Just why GDB uses a different order is a historical mystery.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #ifdef CONFIG_X86_32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) enum regnames {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) GDB_AX, /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) GDB_CX, /* 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) GDB_DX, /* 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) GDB_BX, /* 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) GDB_SP, /* 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) GDB_BP, /* 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) GDB_SI, /* 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) GDB_DI, /* 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) GDB_PC, /* 8 also known as eip */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) GDB_PS, /* 9 also known as eflags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) GDB_CS, /* 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) GDB_SS, /* 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) GDB_DS, /* 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) GDB_ES, /* 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) GDB_FS, /* 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) GDB_GS, /* 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define GDB_ORIG_AX 41
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define DBG_MAX_REG_NUM 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define NUMREGBYTES ((GDB_GS+1)*4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #else /* ! CONFIG_X86_32 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) enum regnames {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) GDB_AX, /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) GDB_BX, /* 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) GDB_CX, /* 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) GDB_DX, /* 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) GDB_SI, /* 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) GDB_DI, /* 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) GDB_BP, /* 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) GDB_SP, /* 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) GDB_R8, /* 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) GDB_R9, /* 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) GDB_R10, /* 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) GDB_R11, /* 11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) GDB_R12, /* 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) GDB_R13, /* 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) GDB_R14, /* 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) GDB_R15, /* 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) GDB_PC, /* 16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) GDB_PS, /* 17 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) GDB_CS, /* 18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) GDB_SS, /* 19 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) GDB_DS, /* 20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) GDB_ES, /* 21 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) GDB_FS, /* 22 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) GDB_GS, /* 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define GDB_ORIG_AX 57
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define DBG_MAX_REG_NUM 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /* 17 64 bit regs and 5 32 bit regs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define NUMREGBYTES ((17 * 8) + (5 * 4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #endif /* ! CONFIG_X86_32 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) static inline void arch_kgdb_breakpoint(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) asm(" int $3");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define BREAK_INSTR_SIZE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define CACHE_FLUSH_IS_SAFE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define GDB_ADJUSTS_BREAK_OFFSET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) extern int kgdb_ll_trap(int cmd, const char *str,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) struct pt_regs *regs, long err, int trap, int sig);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #endif /* _ASM_X86_KGDB_H */