annotate packages/hal/common/current/src/bplist-dynamic.c @ 317:4882695334f2

HW watch/breakpoint support change
author msalter
date Thu, 29 Aug 2002 16:15:32 +0000
parents d2c90368aeef
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
1 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
2 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
3 // bplist-dynamic.c
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
4 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
5 // Dynamic breakpoint list.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
6 // Currently only statically allocated. (ie NO_MALLOC is assumed)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
7 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
8 //==========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
9 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
10 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
11 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
12 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
13 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
14 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
15 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
16 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
17 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
21 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
22 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
23 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
24 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
26 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
27 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
28 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
29 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
30 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
31 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
32 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
33 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
34 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
35 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
36 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
38 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
39 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
40 //####ECOSGPLCOPYRIGHTEND####
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
41 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
42 //#####DESCRIPTIONBEGIN####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
43 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
44 // Author(s):
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
45 // Contributors: dmoseley
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
46 // Date: 2000-07-11
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
47 // Purpose: Dynamic breakpoint list.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
48 // Description:
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
49 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
50 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
51 //####DESCRIPTIONEND####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
52 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
53 //=========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
54
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
55 #include <pkgconf/system.h>
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 115
diff changeset
56 #include <pkgconf/hal.h>
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
57
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
58 #if defined(CYGNUM_HAL_BREAKPOINT_LIST_SIZE) && (CYGNUM_HAL_BREAKPOINT_LIST_SIZE > 0) && defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
59
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
60 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
61 #include <cyg/hal/hal_stub.h>
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
62 #include <cyg/hal/hal_arch.h>
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
63 #include <cyg/hal/hal_cache.h>
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
64
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
65 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
66 #define __read_mem_safe __read_progmem_safe
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
67 #define __write_mem_safe __write_progmem_safe
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
68 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
69
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
70 /*
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
71 * A simple target breakpoint list without using malloc.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
72 * To use this package, you must define HAL_BREAKINST_SIZE to be the size
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
73 * in bytes of a trap instruction (max if there's more than one),
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
74 * HAL_BREAKINST to the opcode value of the instruction, and
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
75 * HAL_BREAKINST_TYPE to be the type necessary to hold the opcode value.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
76 */
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
77
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
78 struct breakpoint_list {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
79 target_register_t addr;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
80 char old_contents [HAL_BREAKINST_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
81 struct breakpoint_list *next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
82 char in_memory;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
83 char length;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
84 } *breakpoint_list = NULL;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
85
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
86 #ifndef HAL_BREAKINST_ADDR
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
87 static HAL_BREAKINST_TYPE break_inst = HAL_BREAKINST;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
88 #define HAL_BREAKINST_ADDR(x) ((void*)&break_inst)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
89 #endif
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
90
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
91 static struct breakpoint_list bp_list [CYGNUM_HAL_BREAKPOINT_LIST_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
92 static struct breakpoint_list *free_bp_list = NULL;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
93 static int curr_bp_num = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
94
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
95 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
96 __set_breakpoint (target_register_t addr, target_register_t len)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
97 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
98 struct breakpoint_list **addent = &breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
99 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
100 struct breakpoint_list *newent;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
101
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
102 while (l != NULL && l->addr < addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
103 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
104 addent = &l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
105 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
106 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
107
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
108 if (l != NULL && l->addr == addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
109 return 2;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
110
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
111 if (free_bp_list != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
112 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
113 newent = free_bp_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
114 free_bp_list = free_bp_list->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
115 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
116 else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
117 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
118 if (curr_bp_num < CYGNUM_HAL_BREAKPOINT_LIST_SIZE)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
119 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
120 newent = &bp_list[curr_bp_num++];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
121 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
122 else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
123 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
124 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
125 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
126 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
127
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
128 newent->addr = addr;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
129 newent->in_memory = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
130 newent->next = l;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
131 newent->length = len;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
132 *addent = newent;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
133
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
134 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
135 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
136
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
137 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
138 __remove_breakpoint (target_register_t addr, target_register_t len)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
139 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
140 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
141 struct breakpoint_list *prev = NULL;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
142
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
143 while (l != NULL && l->addr < addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
144 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
145 prev = l;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
146 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
147 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
148
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
149 if ((l == NULL) || (l->addr != addr))
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
150 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
151
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
152 if (l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
153 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
154 __write_mem_safe (&l->old_contents[0],
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
155 (void*)l->addr,
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
156 sizeof (l->old_contents));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
157 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
158
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
159 if (prev == NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
160 breakpoint_list = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
161 else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
162 prev->next = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
163
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
164 l->next = free_bp_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
165 free_bp_list = l;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
166
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
167 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
168 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
169
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
170 #if defined(HAL_STUB_HW_BREAKPOINT_LIST_SIZE) && (HAL_STUB_HW_BREAKPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
171 #ifndef HAL_STUB_HW_BREAKPOINT
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
172 #error "Must define HAL_STUB_HW_BREAKPOINT"
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
173 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
174 struct hw_breakpoint_list {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
175 target_register_t addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
176 target_register_t len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
177 char used;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
178 char installed;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
179 };
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
180 static struct hw_breakpoint_list hw_bp_list [HAL_STUB_HW_BREAKPOINT_LIST_SIZE];
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
181
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
182 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
183 __set_hw_breakpoint (target_register_t addr, target_register_t len)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
184 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
185 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
186
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
187 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
188 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
189 if (hw_bp_list[i].used == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
190 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
191 hw_bp_list[i].addr = addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
192 hw_bp_list[i].len = len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
193 hw_bp_list[i].used = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
194 hw_bp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
195 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
196 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
197 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
198 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
199 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
200
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
201 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
202 __remove_hw_breakpoint (target_register_t addr, target_register_t len)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
203 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
204 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
205
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
206 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
207 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
208 if (hw_bp_list[i].used && hw_bp_list[i].addr == addr
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
209 && hw_bp_list[i].len == len)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
210 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
211 if (hw_bp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
212 HAL_STUB_HW_BREAKPOINT(0, (void *)addr, (int)len);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
213 hw_bp_list[i].used = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
214 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
215 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
216 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
217 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
218 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
219
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
220 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
221 __install_hw_breakpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
222 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
223 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
224
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
225 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
226 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
227 if (hw_bp_list[i].used && hw_bp_list[i].installed == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
228 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
229 HAL_STUB_HW_BREAKPOINT(1, (void *)hw_bp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
230 (int)hw_bp_list[i].len);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
231 hw_bp_list[i].installed = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
232 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
233 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
234 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
235
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
236 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
237 __clear_hw_breakpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
238 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
239 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
240
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
241 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
242 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
243 if (hw_bp_list[i].used && hw_bp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
244 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
245 HAL_STUB_HW_BREAKPOINT(0, (void *)hw_bp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
246 (int)hw_bp_list[i].len);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
247 hw_bp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
248 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
249 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
250 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
251 #endif // HAL_STUB_HW_BREAKPOINT_LIST_SIZE
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
252
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
253 #if defined(HAL_STUB_HW_WATCHPOINT_LIST_SIZE) && (HAL_STUB_HW_WATCHPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
254 #ifndef HAL_STUB_HW_WATCHPOINT
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
255 #error "Must define HAL_STUB_HW_WATCHPOINT"
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
256 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
257 struct hw_watchpoint_list {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
258 target_register_t addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
259 target_register_t len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
260 int ztype;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
261 char used;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
262 char installed;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
263 };
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
264 static struct hw_watchpoint_list hw_wp_list [HAL_STUB_HW_WATCHPOINT_LIST_SIZE];
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
265
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
266 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
267 __set_hw_watchpoint (target_register_t addr, target_register_t len, int ztype)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
268 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
269 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
270
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
271 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
272 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
273 if (hw_wp_list[i].used == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
274 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
275 hw_wp_list[i].addr = addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
276 hw_wp_list[i].len = len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
277 hw_wp_list[i].ztype = ztype;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
278 hw_wp_list[i].used = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
279 hw_wp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
280 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
281 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
282 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
283 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
284 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
285
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
286 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
287 __remove_hw_watchpoint (target_register_t addr, target_register_t len, int ztype)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
288 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
289 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
290
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
291 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
292 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
293 if (hw_wp_list[i].used && hw_wp_list[i].addr == addr
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
294 && hw_wp_list[i].len == len && hw_wp_list[i].ztype == ztype )
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
295 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
296 if (hw_wp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
297 HAL_STUB_HW_WATCHPOINT(0, (void *)addr, (int)len, ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
298 hw_wp_list[i].used = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
299 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
300 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
301 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
302 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
303 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
304
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
305 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
306 __install_hw_watchpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
307 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
308 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
309
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
310 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
311 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
312 if (hw_wp_list[i].used && hw_wp_list[i].installed == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
313 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
314 HAL_STUB_HW_WATCHPOINT(1, (void *)hw_wp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
315 (int)hw_wp_list[i].len, hw_wp_list[i].ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
316 hw_wp_list[i].installed = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
317 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
318 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
319 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
320
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
321 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
322 __clear_hw_watchpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
323 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
324 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
325
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
326 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
327 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
328 if (hw_wp_list[i].used && hw_wp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
329 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
330 HAL_STUB_HW_WATCHPOINT(0, (void *)hw_wp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
331 (int)hw_wp_list[i].len, hw_wp_list[i].ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
332 hw_wp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
333 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
334 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
335 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
336 #endif // HAL_STUB_HW_WATCHPOINT_LIST_SIZE
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
337
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
338
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
339
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
340 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
341 __install_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
342 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
343 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
344
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
345 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
346 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
347 if (! l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
348 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
349 int len = sizeof (l->old_contents);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
350 if (__read_mem_safe (&l->old_contents[0], (void*)l->addr, len) == len)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
351 {
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
352 if (__write_mem_safe (HAL_BREAKINST_ADDR(l->length),
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
353 (void*)l->addr, l->length) == l->length)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
354 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
355 l->in_memory = 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
356 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
357 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
358 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
359 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
360 }
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
361 #if defined(HAL_STUB_HW_BREAKPOINT_LIST_SIZE) && (HAL_STUB_HW_BREAKPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
362 __install_hw_breakpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
363 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
364 #if defined(HAL_STUB_HW_WATCHPOINT_LIST_SIZE) && (HAL_STUB_HW_WATCHPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
365 __install_hw_watchpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
366 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
367 HAL_ICACHE_SYNC();
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
368 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
369
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
370 void
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
371 __clear_breakpoint_list (void)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
372 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
373 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
374
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
375 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
376 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
377 if (l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
378 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
379 int len = sizeof (l->old_contents);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
380 if (__write_mem_safe (&l->old_contents[0], (void*)l->addr, len) == len)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
381 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
382 l->in_memory = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
383 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
384 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
385 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
386 }
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
387 #if defined(HAL_STUB_HW_BREAKPOINT_LIST_SIZE) && (HAL_STUB_HW_BREAKPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
388 __clear_hw_breakpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
389 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
390 #if defined(HAL_STUB_HW_WATCHPOINT_LIST_SIZE) && (HAL_STUB_HW_WATCHPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
391 __clear_hw_watchpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
392 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
393 HAL_ICACHE_INVALIDATE_ALL();
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
394 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
395
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
396 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
397 __display_breakpoint_list (void (*print_func)(target_register_t))
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
398 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
399 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
400
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
401 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
402 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
403 print_func(l->addr);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
404 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
405 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
406
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
407 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
408 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
409 #else // (CYGNUM_HAL_BREAKPOINT_LIST_SIZE == 0) or UNDEFINED
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
410
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
411 #include <cyg/hal/hal_stub.h> // Our header
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
412
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
413 #ifndef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
414 // We don't know that type target_register_t is yet.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
415 // Let's just pick a type so we can compile. Since
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
416 // these versions of the functions don't actually do
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
417 // anything with the parameters, the actualy types
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
418 // don't matter.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
419 typedef unsigned long target_register_t;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
420 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
421
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
422 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
423 __set_breakpoint (target_register_t addr, target_register_t len)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
424 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
425 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
426 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
427
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
428 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
429 __remove_breakpoint (target_register_t addr, target_register_t len)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
430 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
431 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
432 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
433
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
434 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
435 __install_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
436 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
437 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
438
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
439 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
440 __clear_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
441 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
442 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
443
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
444 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
445 __display_breakpoint_list (void (*print_func)(target_register_t))
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
446 {
114
5ad2b71d525e Quick fix
jlarmour
parents: 112
diff changeset
447 return 0;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
448 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
449 #endif // (CYGNUM_HAL_BREAKPOINT_LIST_SIZE > 0)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
450