summaryrefslogtreecommitdiff
path: root/include/debug/gdb_server.h
blob: 955ada778e23eb1f386e23f53a1f476a5a94888d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * Copyright (c) 2015 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef __MISC_DEBUG_GDB_SERVER__H_
#define __MISC_DEBUG_GDB_SERVER__H_

#ifdef __cplusplus
extern "C" {
#endif

/* define */

#define GDB_STOP_CHAR   0x3	/* GDB RSP default value */

#define NOT_DEBUGGING   0
#define DEBUGGING       1
#define STOP_RUNNING    2
#define SINGLE_STEP     3

#ifndef _ASMLANGUAGE

enum gdb_error_code {
	GDB_ERROR_BP_LIST_FULL = 1,	/* Reach max number of Hard&Soft BPs */
	GDB_ERROR_INVALID_BP,		/* No such BP in breakpoints list */
	GDB_ERROR_HW_BP_INVALID_TYPE,	/* Unsupported type/len combination */
	GDB_ERROR_HW_BP_DBG_REGS_FULL,	/* Debug register set full */
	GDB_ERROR_HW_BP_NOT_SUP,	/* hardware breakpoint not supported */
	GDB_ERROR_INVALID_MEM		/* trying to access invalid memory */
};

enum gdb_bp_type {
	GDB_SOFT_BP,             /* software breakpoint */
	GDB_HW_INST_BP,          /* hardware instruction breakpoint */
	GDB_HW_DATA_WRITE_BP,    /* write watchpoint */
	GDB_HW_DATA_READ_BP,     /* read watchpoint */
	GDB_HW_DATA_ACCESS_BP,   /* access watchpoint */
	GDB_UNKNOWN_BP_TYPE = -1 /* unknown breakpoint type */
};

enum gdb_exc_mode {
	GDB_EXC_TRACE,	/* trace exception */
	GDB_EXC_BP,	/* breakpoint exception */
	GDB_EXC_OTHER,	/* other exceptions */
};

enum gdb_signal {
	GDB_SIG_NULL = -1,
	GDB_SIG_INT = 2,
	GDB_SIG_TRAP = 5,
	GDB_SIG_FPE = 8,
	GDB_SIG_SIGSEGV = 11,
	GDB_SIG_STOP = 17
};

extern volatile int gdb_debug_status;

extern void gdb_system_stop_here(void *regs);
extern void gdb_handler(enum gdb_exc_mode mode, void *esf, int signal);

#endif /* _ASMLANGUAGE */

#ifdef __cplusplus
}
#endif
#endif /* __MISC_DEBUG_GDB_SERVER__H_*/