annotate packages/hal/common/current/src/bplist-dynamic.c @ 115:6ed91473a1cd ecos-sw-2000-08-21

Merge from eCos master repository on 2000-08-21-22:40:54-BST
author jlarmour
date Fri, 25 Aug 2000 17:32:38 +0000
parents 5ad2b71d525e
children 0ae0bc38e387
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 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
9 //####COPYRIGHTBEGIN####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
10 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
11 // -------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
12 // The contents of this file are subject to the Red Hat eCos Public License
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
13 // Version 1.1 (the "License"); you may not use this file except in
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
14 // compliance with the License. You may obtain a copy of the License at
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
15 // http://www.redhat.com/
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
16 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
17 // Software distributed under the License is distributed on an "AS IS"
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
18 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
19 // License for the specific language governing rights and limitations under
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
20 // the License.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
21 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
22 // The Original Code is eCos - Embedded Configurable Operating System,
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
23 // released September 30, 1998.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
24 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
25 // The Initial Developer of the Original Code is Red Hat.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
26 // Portions created by Red Hat are
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
27 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
28 // All Rights Reserved.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
29 // -------------------------------------------
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
30 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
31 //####COPYRIGHTEND####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
32 //==========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
33 //#####DESCRIPTIONBEGIN####
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
34 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
35 // Author(s):
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
36 // Contributors: dmoseley
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
37 // Date: 2000-07-11
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
38 // Purpose: Dynamic breakpoint list.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
39 // Description:
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 //
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
42 //####DESCRIPTIONEND####
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 //=========================================================================
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
45
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
46 #include <pkgconf/system.h>
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
47 #include CYGBLD_HAL_PLATFORM_H
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
48
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
49 #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
50
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
51 #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
52 #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
53 #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
54 #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
55
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
56 /*
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
57 * 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
58 * 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
59 * 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
60 * 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
61 * 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
62 */
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
63
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
64 struct breakpoint_list {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
65 target_register_t addr;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
66 char old_contents [HAL_BREAKINST_SIZE];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
67 struct breakpoint_list *next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
68 char in_memory;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
69 } *breakpoint_list = NULL;
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 static HAL_BREAKINST_TYPE break_inst = HAL_BREAKINST;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
72 static void *_break_inst = &break_inst;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
73
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
74 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
75 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
76 static int curr_bp_num = 0;
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 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
79 __set_breakpoint (target_register_t addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
80 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
81 struct breakpoint_list **addent = &breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
82 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
83 struct breakpoint_list *newent;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
84
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
85 while (l != NULL && l->addr < addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
86 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
87 addent = &l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
88 l = l->next;
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
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
91 if (l != NULL && l->addr == addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
92 return 2;
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 if (free_bp_list != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
95 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
96 newent = free_bp_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
97 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
98 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
99 else
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 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
102 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
103 newent = &bp_list[curr_bp_num++];
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
104 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
105 else
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 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
108 }
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
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
111 newent->addr = addr;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
112 newent->in_memory = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
113 newent->next = l;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
114 *addent = newent;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
115 return 0;
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
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
118 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
119 __remove_breakpoint (target_register_t addr)
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 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
122 struct breakpoint_list *prev = NULL;
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 while (l != NULL && l->addr < addr)
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 prev = l;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
127 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
128 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
129
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
130 if ((l == NULL) || (l->addr != addr))
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
131 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
132
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
133 if (l->in_memory)
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 __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
136 (void*)l->addr,
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
137 sizeof (l->old_contents));
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
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
140 if (prev == NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
141 breakpoint_list = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
142 else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
143 prev->next = l->next;
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 l->next = free_bp_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
146 free_bp_list = l;
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 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
149 }
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 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
152 __install_breakpoint_list (void)
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 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
155
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
156 while (l != NULL)
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 (! l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
159 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
160 int len = sizeof (l->old_contents);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
161 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
162 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
163 if (__write_mem_safe (_break_inst, (void*)l->addr, len) == len)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
164 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
165 l->in_memory = 1;
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 }
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 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
170 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
171 }
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
172 HAL_ICACHE_SYNC();
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
173 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
174
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
175 void
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
176 __clear_breakpoint_list (void)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
177 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
178 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
179
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
180 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
181 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
182 if (l->in_memory)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
183 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
184 int len = sizeof (l->old_contents);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
185 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
186 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
187 l->in_memory = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
188 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
189 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
190 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
191 }
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
192 HAL_ICACHE_INVALIDATE_ALL();
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
193 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
194
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
195 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
196 __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
197 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
198 struct breakpoint_list *l = breakpoint_list;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
199
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
200 while (l != NULL)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
201 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
202 print_func(l->addr);
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
203 l = l->next;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
204 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
205
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
206 return 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
207 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
208
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
209 #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
210
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
211 #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
212
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
213 #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
214 // 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
215 // 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
216 // 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
217 // 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
218 // don't matter.
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
219 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
220 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 114
diff changeset
221
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
222 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
223 __set_breakpoint (target_register_t addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
224 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
225 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
226 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
227
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
228 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
229 __remove_breakpoint (target_register_t addr)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
230 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
231 return 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
232 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
233
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
234 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
235 __install_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
236 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
237 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
238
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
239 void
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
240 __clear_breakpoint_list (void)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
241 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
242 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
243
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
244 int
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
245 __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
246 {
114
5ad2b71d525e Quick fix
jlarmour
parents: 112
diff changeset
247 return 0;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
248 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
diff changeset
249 #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
250