annotate packages/hal/i386/arch/current/src/i386_stub.c @ 115:6ed91473a1cd ecos-sw-2000-08-21

Merge from eCos master repository on 2000-08-21-22:40:54-BST
author jlarmour
date Fri, 25 Aug 2000 17:32:38 +0000
parents da3908c9cd10
children ac086aa3217e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
1 /* i386_stub.c - helper functions for stub, generic to all i386 processors
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
2 *
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
3 * Copyright (c) 1998,1999 Cygnus Solutions
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
4 *
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
5 * The authors hereby grant permission to use, copy, modify, distribute,
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
6 * and license this software and its documentation for any purpose, provided
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
7 * that existing copyright notices are retained in all copies and that this
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
8 * notice is included verbatim in any distributions. No written agreement,
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
9 * license, or royalty fee is required for any of the authorized uses.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
10 * Modifications to this software may be copyrighted by their authors
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
11 * and need not follow the licensing terms described here, provided that
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
12 * the new terms are clearly indicated on the first page of each file where
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
13 * they apply.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
14 */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
15
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
16 /*
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
17 - pjo, 29 sep 1999
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
18 - Copied from the ARM configuration and merged with an older GDB i386-stub.c.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
19 */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
20
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
21 #include <stddef.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
22
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
23 #include <pkgconf/hal.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
24
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
25 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
26
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
27 #ifdef CYGPKG_HAL_I386_SIM
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
28 #error "GDB Stub support not implemented for i386 SIM"
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
29 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
30
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
31 #include <cyg/hal/hal_stub.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
32 #include <cyg/hal/hal_arch.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
33 #include <cyg/hal/hal_intr.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
34
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
35 #ifndef FALSE
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
36 #define FALSE 0
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
37 #define TRUE 1
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
38 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
39
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
40 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
41 #include <cyg/hal/dbg-threads-api.h> // dbg_currthread_id
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
42 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
43
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
44 /* Given a trap value TRAP, return the corresponding signal. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
45
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
46 int __computeSignal (unsigned int trap_number)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
47 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
48 switch (trap_number)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
49 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
50 case CYGNUM_HAL_VECTOR_DIV0:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
51 /* This isn't quite accurrate: this is integer division only. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
52 return SIGFPE ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
53
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
54 case CYGNUM_HAL_VECTOR_DEBUG:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
55 return SIGTRAP ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
56
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
57 case CYGNUM_HAL_VECTOR_NMI:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
58 return SIGINT ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
59
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
60 case CYGNUM_HAL_VECTOR_BREAKPOINT:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
61 return SIGTRAP ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
62
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
63 case CYGNUM_HAL_VECTOR_OVERFLOW:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
64 case CYGNUM_HAL_VECTOR_BOUND:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
65 return SIGSEGV ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
66
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
67 case CYGNUM_HAL_VECTOR_OPCODE:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
68 return SIGILL ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
69
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
70 case CYGNUM_HAL_VECTOR_NO_DEVICE:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
71 case CYGNUM_HAL_VECTOR_FPE:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
72 return SIGFPE ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
73
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
74 case CYGNUM_HAL_VECTOR_DOUBLE_FAULT:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
75 return SIGTRAP ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
76
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
77 case CYGNUM_HAL_VECTOR_INVALID_TSS:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
78 case CYGNUM_HAL_VECTOR_SEGV:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
79 case CYGNUM_HAL_VECTOR_STACK_FAULT:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
80 case CYGNUM_HAL_VECTOR_PROTECTION:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
81 case CYGNUM_HAL_VECTOR_PAGE:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
82 case CYGNUM_HAL_VECTOR_ALIGNMENT:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
83 return SIGSEGV ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
84
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
85 default:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
86 return SIGTRAP;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
87 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
88 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
89
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
90
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
91 /* Return the trap number corresponding to the last-taken trap. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
92
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
93 int __get_trap_number (void)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
94 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
95 extern int hal_pc_trap_number ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
96 // The vector is not not part of the GDB register set so get it
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
97 // directly from the save context.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
98 return hal_pc_trap_number ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
99 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
100
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
101 /* Set the currently-saved pc register value to PC. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
102
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
103 void set_pc (target_register_t pc)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
104 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
105 put_register (PC, pc);
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
106 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
107
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
108
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
109 /*----------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
110 * Single-step support
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
111 */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
112
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
113 /* Set things up so that the next user resume will execute one instruction.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
114 This may be done by setting breakpoints or setting a single step flag
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
115 in the saved user registers, for example. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
116
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
117
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
118 /* We just turn on the trap bit in the flags register for the particular
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
119 thread. When it resumes, we'll get another debugger trap.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
120 */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
121 void __single_step (void)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
122 { put_register(PS, get_register(PS) | PS_T) ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
123 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
124
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
125 /* Clear the single-step state. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
126
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
127 void __clear_single_step (void)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
128 { put_register(PS, get_register(PS) & ~PS_T) ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
129 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
130
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
131 void __install_breakpoints (void)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
132 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
133 // FIXME();
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
134 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
135
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
136 void __clear_breakpoints (void)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
137 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
138 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
139 extern cyg_uint32 hal_pc_break_pc ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
140 if (hal_pc_break_pc)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
141 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
142 cyg_hal_gdb_remove_break(hal_pc_break_pc) ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
143 #if 0
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
144 hal_pc_break_pc = 0 ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
145 // asm("movl %0, %%dr0" : /* No outputs */ : "m" (hal_pc_break_pc)) ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
146 asm("
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
147 movl %%dr7, %%eax
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
148 andl $0xFFFFFFFC, %%eax
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
149 movl %%eax, %%dr7"
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
150 : /* No outputs. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
151 : /* No inputs. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
152 : "eax");
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
153 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
154 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
155 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
156
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
157 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
158
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
159 /* If the breakpoint we hit is in the breakpoint() instruction, return a
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
160 non-zero value. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
161
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
162 int isBreakpointFunction ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
163
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
164 int
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
165 __is_breakpoint_function ()
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
166 {
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 72
diff changeset
167 isBreakpointFunction = (get_register (PC) == (target_register_t)&_breakinst);
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
168 return isBreakpointFunction ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
169 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
170
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
171
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
172 /* Skip the current instruction. Since this is only called by the
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
173 stub when the PC points to a breakpoint or trap instruction,
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
174 we can safely just skip 4. */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
175
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
176 void __skipinst (void)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
177 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
178 // FIXME() ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
179 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
180
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
181
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
182 #if 0
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
183 void hal_get_gdb_registers(target_register_t * d, HAL_SavedRegisters * s)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
184 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
185 d[ESP] = s->esp ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
186 d[ESP] = s->esp ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
187 d[EBP] = s->ebp ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
188 d[EBX] = s->ebx ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
189 d[ESI] = s->esi ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
190 d[EDI] = s->edi ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
191 d[PC] = s->eip ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
192 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
193
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
194
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
195 void hal_set_gdb_registers(HAL_SavedRegisters * d, target_register_t * s)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
196 {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
197 d->esp = s[ESP] ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
198 d->next_context = 0 ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
199 d->ebp = s[EBP] ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
200 d->ebx = s[EBX] ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
201 d->esi = s[ESI] ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
202 d->edi = s[EDI] ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
203 d->eip = s[PC] ;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
204 }
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
205 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
206
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
207
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
208 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS