annotate packages/hal/common/current/src/bplist-dynamic.c @ 2863:7d8c61e6225c default tip

* Added execute permissions to files missed in conversion from CVS
author alexs
date Thu, 26 Mar 2009 20:39:18 +0000
parents 74dbf4c3f2e1
children
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 //==========================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
9 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
10 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
11 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
12 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
13 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
14 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
15 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
16 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
17 // version.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
18 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
19 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
20 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
21 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
22 // for more details.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
23 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
24 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
25 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
26 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
27 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
28 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
29 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
30 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
31 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
32 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
33 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
34 // General Public License v2.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
35 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
36 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
37 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
38 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 317
diff changeset
39 // ####ECOSGPLCOPYRIGHTEND####
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
40 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
41 //#####DESCRIPTIONBEGIN####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
42 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
43 // Author(s):
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
44 // Contributors: dmoseley
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
45 // Date: 2000-07-11
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
46 // Purpose: Dynamic breakpoint list.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
47 // Description:
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
48 //
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 //####DESCRIPTIONEND####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
51 //
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
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
54 #include <pkgconf/system.h>
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 115
diff changeset
55 #include <pkgconf/hal.h>
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
56
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
57 #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
58
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
59 #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
60 #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
61 #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
62 #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
63
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
64 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
65 #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
66 #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
67 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 151
diff changeset
68
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
69 /*
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
70 * 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
71 * 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
72 * 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
73 * 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
74 * 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
75 */
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 struct breakpoint_list {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
78 target_register_t addr;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
79 char old_contents [HAL_BREAKINST_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
80 struct breakpoint_list *next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
81 char in_memory;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
82 char length;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
83 } *breakpoint_list = NULL;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
84
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
85 #ifndef HAL_BREAKINST_ADDR
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
86 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
87 #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
88 #endif
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
89
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
90 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
91 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
92 static int curr_bp_num = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
93
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
94 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
95 __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
96 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
97 struct breakpoint_list **addent = &breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
98 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
99 struct breakpoint_list *newent;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
100
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
101 while (l != NULL && l->addr < addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
102 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
103 addent = &l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
104 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
105 }
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 if (l != NULL && l->addr == addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
108 return 2;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
109
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
110 if (free_bp_list != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
111 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
112 newent = free_bp_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
113 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
114 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
115 else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
116 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
117 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
118 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
119 newent = &bp_list[curr_bp_num++];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
120 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
121 else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
122 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
123 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
124 }
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 newent->addr = addr;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
128 newent->in_memory = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
129 newent->next = l;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
130 newent->length = len;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
131 *addent = newent;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
132
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
133 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
134 }
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 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
137 __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
138 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
139 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
140 struct breakpoint_list *prev = NULL;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
141
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
142 while (l != NULL && l->addr < addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
143 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
144 prev = l;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
145 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
146 }
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 if ((l == NULL) || (l->addr != addr))
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
149 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
150
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
151 if (l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
152 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
153 __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
154 (void*)l->addr,
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
155 sizeof (l->old_contents));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
156 }
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 if (prev == NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
159 breakpoint_list = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
160 else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
161 prev->next = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
162
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
163 l->next = free_bp_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
164 free_bp_list = l;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
165
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
166 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
167 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
168
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
169 #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
170 #ifndef HAL_STUB_HW_BREAKPOINT
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
171 #error "Must define HAL_STUB_HW_BREAKPOINT"
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
172 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
173 struct hw_breakpoint_list {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
174 target_register_t addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
175 target_register_t len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
176 char used;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
177 char installed;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
178 };
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
179 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
180
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
181 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
182 __set_hw_breakpoint (target_register_t addr, target_register_t len)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
183 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
184 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
185
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
186 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
187 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
188 if (hw_bp_list[i].used == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
189 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
190 hw_bp_list[i].addr = addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
191 hw_bp_list[i].len = len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
192 hw_bp_list[i].used = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
193 hw_bp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
194 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
195 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
196 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
197 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
198 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
199
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
200 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
201 __remove_hw_breakpoint (target_register_t addr, target_register_t len)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
202 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
203 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
204
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
205 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
206 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
207 if (hw_bp_list[i].used && hw_bp_list[i].addr == addr
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
208 && hw_bp_list[i].len == len)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
209 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
210 if (hw_bp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
211 HAL_STUB_HW_BREAKPOINT(0, (void *)addr, (int)len);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
212 hw_bp_list[i].used = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
213 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
214 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
215 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
216 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
217 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
218
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
219 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
220 __install_hw_breakpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
221 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
222 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
223
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
224 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
225 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
226 if (hw_bp_list[i].used && hw_bp_list[i].installed == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
227 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
228 HAL_STUB_HW_BREAKPOINT(1, (void *)hw_bp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
229 (int)hw_bp_list[i].len);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
230 hw_bp_list[i].installed = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
231 }
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 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
236 __clear_hw_breakpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
237 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
238 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
239
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
240 for (i = 0; i < HAL_STUB_HW_BREAKPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
241 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
242 if (hw_bp_list[i].used && hw_bp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
243 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
244 HAL_STUB_HW_BREAKPOINT(0, (void *)hw_bp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
245 (int)hw_bp_list[i].len);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
246 hw_bp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
247 }
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 #endif // HAL_STUB_HW_BREAKPOINT_LIST_SIZE
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
251
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
252 #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
253 #ifndef HAL_STUB_HW_WATCHPOINT
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
254 #error "Must define HAL_STUB_HW_WATCHPOINT"
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
255 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
256 struct hw_watchpoint_list {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
257 target_register_t addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
258 target_register_t len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
259 int ztype;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
260 char used;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
261 char installed;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
262 };
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
263 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
264
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
265 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
266 __set_hw_watchpoint (target_register_t addr, target_register_t len, int ztype)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
267 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
268 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
269
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
270 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
271 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
272 if (hw_wp_list[i].used == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
273 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
274 hw_wp_list[i].addr = addr;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
275 hw_wp_list[i].len = len;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
276 hw_wp_list[i].ztype = ztype;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
277 hw_wp_list[i].used = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
278 hw_wp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
279 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
280 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
281 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
282 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
283 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
284
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
285 int
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
286 __remove_hw_watchpoint (target_register_t addr, target_register_t len, int ztype)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
287 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
288 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
289
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
290 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
291 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
292 if (hw_wp_list[i].used && hw_wp_list[i].addr == addr
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
293 && hw_wp_list[i].len == len && hw_wp_list[i].ztype == ztype )
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
294 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
295 if (hw_wp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
296 HAL_STUB_HW_WATCHPOINT(0, (void *)addr, (int)len, ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
297 hw_wp_list[i].used = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
298 return 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
299 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
300 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
301 return -1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
302 }
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
303
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
304 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
305 __install_hw_watchpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
306 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
307 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
308
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
309 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
310 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
311 if (hw_wp_list[i].used && hw_wp_list[i].installed == 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
312 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
313 HAL_STUB_HW_WATCHPOINT(1, (void *)hw_wp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
314 (int)hw_wp_list[i].len, hw_wp_list[i].ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
315 hw_wp_list[i].installed = 1;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
316 }
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 static void
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
321 __clear_hw_watchpoint_list (void)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
322 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
323 int i;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
324
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
325 for (i = 0; i < HAL_STUB_HW_WATCHPOINT_LIST_SIZE; i++)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
326 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
327 if (hw_wp_list[i].used && hw_wp_list[i].installed)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
328 {
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
329 HAL_STUB_HW_WATCHPOINT(0, (void *)hw_wp_list[i].addr,
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
330 (int)hw_wp_list[i].len, hw_wp_list[i].ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
331 hw_wp_list[i].installed = 0;
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
332 }
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 #endif // HAL_STUB_HW_WATCHPOINT_LIST_SIZE
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
336
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
337
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
338
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
339 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
340 __install_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
341 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
342 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
343
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
344 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
345 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
346 if (! l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
347 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
348 int len = sizeof (l->old_contents);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
349 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
350 {
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
351 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
352 (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
353 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
354 l->in_memory = 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
355 }
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 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
359 }
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
360 #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
361 __install_hw_breakpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
362 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
363 #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
364 __install_hw_watchpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
365 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
366 HAL_ICACHE_SYNC();
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
367 }
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 void
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
370 __clear_breakpoint_list (void)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
371 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
372 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
373
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
374 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
375 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
376 if (l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
377 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
378 int len = sizeof (l->old_contents);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
379 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
380 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
381 l->in_memory = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
382 }
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 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
385 }
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
386 #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
387 __clear_hw_breakpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
388 #endif
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
389 #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
390 __clear_hw_watchpoint_list();
4882695334f2 HW watch/breakpoint support change
msalter
parents: 210
diff changeset
391 #endif
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
392 HAL_ICACHE_INVALIDATE_ALL();
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
393 }
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 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
396 __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
397 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
398 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
399
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
400 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
401 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
402 print_func(l->addr);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
403 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
404 }
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 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
407 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
408 #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
409
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
410 #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
411
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
412 #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
413 // 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
414 // 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
415 // 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
416 // 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
417 // don't matter.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
418 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
419 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
420
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
421 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
422 __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
423 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
424 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
425 }
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 int
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 132
diff changeset
428 __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
429 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
430 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
431 }
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 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
434 __install_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
435 {
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 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
439 __clear_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
440 {
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 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
444 __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
445 {
114
5ad2b71d525e Quick fix
jlarmour
parents: 112
diff changeset
446 return 0;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
447 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
448 #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
449