diff options
Diffstat (limited to 'meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch')
-rw-r--r-- | meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch | 953 |
1 files changed, 953 insertions, 0 deletions
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch new file mode 100644 index 00000000..0c72e792 --- /dev/null +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch | |||
@@ -0,0 +1,953 @@ | |||
1 | From 992c41987cb6c89bb3f9cbc0f6a2b0aa3458e4d2 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nagaraju Mekala <nmekala@xilix.com> | ||
3 | Date: Thu, 31 Jan 2019 14:36:00 +0530 | ||
4 | Subject: [PATCH 41/52] Adding 64 bit MB support Added new architecture to | ||
5 | Microblaze 64-bit support to GDB Signed-off-by :Nagaraju Mekala | ||
6 | <nmekala@xilix.com> | ||
7 | |||
8 | Conflicts: | ||
9 | gdb/Makefile.in | ||
10 | --- | ||
11 | bfd/archures.c | 2 + | ||
12 | bfd/bfd-in2.h | 2 + | ||
13 | bfd/cpu-microblaze.c | 8 +- | ||
14 | gas/config/tc-microblaze.c | 13 ++ | ||
15 | gas/config/tc-microblaze.h | 4 + | ||
16 | gdb/features/Makefile | 3 + | ||
17 | gdb/features/microblaze-core.xml | 6 +- | ||
18 | gdb/features/microblaze-stack-protect.xml | 4 +- | ||
19 | gdb/features/microblaze-with-stack-protect.c | 8 +- | ||
20 | gdb/features/microblaze.c | 6 +- | ||
21 | gdb/features/microblaze64-core.xml | 69 ++++++ | ||
22 | gdb/features/microblaze64-stack-protect.xml | 12 + | ||
23 | .../microblaze64-with-stack-protect.c | 79 +++++++ | ||
24 | .../microblaze64-with-stack-protect.xml | 12 + | ||
25 | gdb/features/microblaze64.c | 77 +++++++ | ||
26 | gdb/features/microblaze64.xml | 11 + | ||
27 | gdb/microblaze-tdep.c | 207 ++++++++++++++++-- | ||
28 | gdb/microblaze-tdep.h | 8 +- | ||
29 | .../microblaze-with-stack-protect.dat | 4 +- | ||
30 | 19 files changed, 491 insertions(+), 44 deletions(-) | ||
31 | create mode 100644 gdb/features/microblaze64-core.xml | ||
32 | create mode 100644 gdb/features/microblaze64-stack-protect.xml | ||
33 | create mode 100644 gdb/features/microblaze64-with-stack-protect.c | ||
34 | create mode 100644 gdb/features/microblaze64-with-stack-protect.xml | ||
35 | create mode 100644 gdb/features/microblaze64.c | ||
36 | create mode 100644 gdb/features/microblaze64.xml | ||
37 | |||
38 | Index: gdb-9.2/bfd/archures.c | ||
39 | =================================================================== | ||
40 | --- gdb-9.2.orig/bfd/archures.c | ||
41 | +++ gdb-9.2/bfd/archures.c | ||
42 | @@ -513,6 +513,8 @@ DESCRIPTION | ||
43 | . bfd_arch_lm32, {* Lattice Mico32. *} | ||
44 | .#define bfd_mach_lm32 1 | ||
45 | . bfd_arch_microblaze,{* Xilinx MicroBlaze. *} | ||
46 | +.#define bfd_mach_microblaze 1 | ||
47 | +.#define bfd_mach_microblaze64 2 | ||
48 | . bfd_arch_tilepro, {* Tilera TILEPro. *} | ||
49 | . bfd_arch_tilegx, {* Tilera TILE-Gx. *} | ||
50 | .#define bfd_mach_tilepro 1 | ||
51 | Index: gdb-9.2/bfd/bfd-in2.h | ||
52 | =================================================================== | ||
53 | --- gdb-9.2.orig/bfd/bfd-in2.h | ||
54 | +++ gdb-9.2/bfd/bfd-in2.h | ||
55 | @@ -1896,6 +1896,8 @@ enum bfd_architecture | ||
56 | bfd_arch_lm32, /* Lattice Mico32. */ | ||
57 | #define bfd_mach_lm32 1 | ||
58 | bfd_arch_microblaze,/* Xilinx MicroBlaze. */ | ||
59 | +#define bfd_mach_microblaze 1 | ||
60 | +#define bfd_mach_microblaze64 2 | ||
61 | bfd_arch_tilepro, /* Tilera TILEPro. */ | ||
62 | bfd_arch_tilegx, /* Tilera TILE-Gx. */ | ||
63 | #define bfd_mach_tilepro 1 | ||
64 | Index: gdb-9.2/bfd/cpu-microblaze.c | ||
65 | =================================================================== | ||
66 | --- gdb-9.2.orig/bfd/cpu-microblaze.c | ||
67 | +++ gdb-9.2/bfd/cpu-microblaze.c | ||
68 | @@ -31,7 +31,7 @@ const bfd_arch_info_type bfd_microblaze_ | ||
69 | 64, /* 32 bits in an address. */ | ||
70 | 8, /* 8 bits in a byte. */ | ||
71 | bfd_arch_microblaze, /* Architecture. */ | ||
72 | - 0, /* Machine number - 0 for now. */ | ||
73 | + bfd_mach_microblaze64, /* 64 bit Machine */ | ||
74 | "microblaze", /* Architecture name. */ | ||
75 | "MicroBlaze", /* Printable name. */ | ||
76 | 3, /* Section align power. */ | ||
77 | @@ -46,7 +46,7 @@ const bfd_arch_info_type bfd_microblaze_ | ||
78 | 32, /* Bits in an address. */ | ||
79 | 8, /* Bits in a byte. */ | ||
80 | bfd_arch_microblaze, /* Architecture number. */ | ||
81 | - 0, /* Machine number - 0 for now. */ | ||
82 | + bfd_mach_microblaze, /* 32 bit Machine */ | ||
83 | "microblaze", /* Architecture name. */ | ||
84 | "MicroBlaze", /* Printable name. */ | ||
85 | 3, /* Section align power. */ | ||
86 | @@ -63,7 +63,7 @@ const bfd_arch_info_type bfd_microblaze_ | ||
87 | 32, /* 32 bits in an address. */ | ||
88 | 8, /* 8 bits in a byte. */ | ||
89 | bfd_arch_microblaze, /* Architecture. */ | ||
90 | - 0, /* Machine number - 0 for now. */ | ||
91 | + bfd_mach_microblaze, /* 32 bit Machine */ | ||
92 | "microblaze", /* Architecture name. */ | ||
93 | "MicroBlaze", /* Printable name. */ | ||
94 | 3, /* Section align power. */ | ||
95 | @@ -78,7 +78,7 @@ const bfd_arch_info_type bfd_microblaze_ | ||
96 | 64, /* 32 bits in an address. */ | ||
97 | 8, /* 8 bits in a byte. */ | ||
98 | bfd_arch_microblaze, /* Architecture. */ | ||
99 | - 0, /* Machine number - 0 for now. */ | ||
100 | + bfd_mach_microblaze64, /* 64 bit Machine */ | ||
101 | "microblaze", /* Architecture name. */ | ||
102 | "MicroBlaze", /* Printable name. */ | ||
103 | 3, /* Section align power. */ | ||
104 | Index: gdb-9.2/gdb/features/Makefile | ||
105 | =================================================================== | ||
106 | --- gdb-9.2.orig/gdb/features/Makefile | ||
107 | +++ gdb-9.2/gdb/features/Makefile | ||
108 | @@ -48,6 +48,7 @@ WHICH = arm/arm-with-iwmmxt arm/arm-with | ||
109 | arm/arm-with-neon \ | ||
110 | mips-linux mips-dsp-linux \ | ||
111 | microblaze-with-stack-protect \ | ||
112 | + microblaze64-with-stack-protect \ | ||
113 | mips64-linux mips64-dsp-linux \ | ||
114 | nios2-linux \ | ||
115 | rs6000/powerpc-32 \ | ||
116 | @@ -111,7 +112,9 @@ XMLTOC = \ | ||
117 | arc-v2.xml \ | ||
118 | arc-arcompact.xml \ | ||
119 | microblaze-with-stack-protect.xml \ | ||
120 | + microblaze64-with-stack-protect.xml \ | ||
121 | microblaze.xml \ | ||
122 | + microblaze64.xml \ | ||
123 | mips-dsp-linux.xml \ | ||
124 | mips-linux.xml \ | ||
125 | mips64-dsp-linux.xml \ | ||
126 | Index: gdb-9.2/gdb/features/microblaze-core.xml | ||
127 | =================================================================== | ||
128 | --- gdb-9.2.orig/gdb/features/microblaze-core.xml | ||
129 | +++ gdb-9.2/gdb/features/microblaze-core.xml | ||
130 | @@ -8,7 +8,7 @@ | ||
131 | <!DOCTYPE feature SYSTEM "gdb-target.dtd"> | ||
132 | <feature name="org.gnu.gdb.microblaze.core"> | ||
133 | <reg name="r0" bitsize="32" regnum="0"/> | ||
134 | - <reg name="r1" bitsize="32" type="data_ptr"/> | ||
135 | + <reg name="r1" bitsize="32"/> | ||
136 | <reg name="r2" bitsize="32"/> | ||
137 | <reg name="r3" bitsize="32"/> | ||
138 | <reg name="r4" bitsize="32"/> | ||
139 | @@ -39,7 +39,7 @@ | ||
140 | <reg name="r29" bitsize="32"/> | ||
141 | <reg name="r30" bitsize="32"/> | ||
142 | <reg name="r31" bitsize="32"/> | ||
143 | - <reg name="rpc" bitsize="32" type="code_ptr"/> | ||
144 | + <reg name="rpc" bitsize="32"/> | ||
145 | <reg name="rmsr" bitsize="32"/> | ||
146 | <reg name="rear" bitsize="32"/> | ||
147 | <reg name="resr" bitsize="32"/> | ||
148 | @@ -64,4 +64,6 @@ | ||
149 | <reg name="rtlbsx" bitsize="32"/> | ||
150 | <reg name="rtlblo" bitsize="32"/> | ||
151 | <reg name="rtlbhi" bitsize="32"/> | ||
152 | + <reg name="slr" bitsize="32"/> | ||
153 | + <reg name="shr" bitsize="32"/> | ||
154 | </feature> | ||
155 | Index: gdb-9.2/gdb/features/microblaze-stack-protect.xml | ||
156 | =================================================================== | ||
157 | --- gdb-9.2.orig/gdb/features/microblaze-stack-protect.xml | ||
158 | +++ gdb-9.2/gdb/features/microblaze-stack-protect.xml | ||
159 | @@ -7,6 +7,6 @@ | ||
160 | |||
161 | <!DOCTYPE feature SYSTEM "gdb-target.dtd"> | ||
162 | <feature name="org.gnu.gdb.microblaze.stack-protect"> | ||
163 | - <reg name="rslr" bitsize="32"/> | ||
164 | - <reg name="rshr" bitsize="32"/> | ||
165 | + <reg name="slr" bitsize="32"/> | ||
166 | + <reg name="shr" bitsize="32"/> | ||
167 | </feature> | ||
168 | Index: gdb-9.2/gdb/features/microblaze-with-stack-protect.c | ||
169 | =================================================================== | ||
170 | --- gdb-9.2.orig/gdb/features/microblaze-with-stack-protect.c | ||
171 | +++ gdb-9.2/gdb/features/microblaze-with-stack-protect.c | ||
172 | @@ -14,7 +14,7 @@ initialize_tdesc_microblaze_with_stack_p | ||
173 | |||
174 | feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core"); | ||
175 | tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); | ||
176 | - tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "data_ptr"); | ||
177 | + tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); | ||
178 | tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); | ||
179 | tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); | ||
180 | tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); | ||
181 | @@ -45,7 +45,7 @@ initialize_tdesc_microblaze_with_stack_p | ||
182 | tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "int"); | ||
183 | tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int"); | ||
184 | tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "int"); | ||
185 | - tdesc_create_reg (feature, "rpc", 32, 1, NULL, 32, "code_ptr"); | ||
186 | + tdesc_create_reg (feature, "rpc", 32, 1, NULL, 32, "int"); | ||
187 | tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); | ||
188 | tdesc_create_reg (feature, "rear", 34, 1, NULL, 32, "int"); | ||
189 | tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); | ||
190 | @@ -72,8 +72,8 @@ initialize_tdesc_microblaze_with_stack_p | ||
191 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
192 | |||
193 | feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.stack-protect"); | ||
194 | - tdesc_create_reg (feature, "rslr", 57, 1, NULL, 32, "int"); | ||
195 | - tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int"); | ||
196 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 32, "int"); | ||
197 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 32, "int"); | ||
198 | |||
199 | tdesc_microblaze_with_stack_protect = result; | ||
200 | } | ||
201 | Index: gdb-9.2/gdb/features/microblaze.c | ||
202 | =================================================================== | ||
203 | --- gdb-9.2.orig/gdb/features/microblaze.c | ||
204 | +++ gdb-9.2/gdb/features/microblaze.c | ||
205 | @@ -14,7 +14,7 @@ initialize_tdesc_microblaze (void) | ||
206 | |||
207 | feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core"); | ||
208 | tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); | ||
209 | - tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "data_ptr"); | ||
210 | + tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); | ||
211 | tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); | ||
212 | tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); | ||
213 | tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); | ||
214 | @@ -45,7 +45,7 @@ initialize_tdesc_microblaze (void) | ||
215 | tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "int"); | ||
216 | tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int"); | ||
217 | tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "int"); | ||
218 | - tdesc_create_reg (feature, "rpc", 32, 1, NULL, 32, "code_ptr"); | ||
219 | + tdesc_create_reg (feature, "rpc", 32, 1, NULL, 32, "int"); | ||
220 | tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); | ||
221 | tdesc_create_reg (feature, "rear", 34, 1, NULL, 32, "int"); | ||
222 | tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); | ||
223 | @@ -70,6 +70,8 @@ initialize_tdesc_microblaze (void) | ||
224 | tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); | ||
225 | tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); | ||
226 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
227 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | ||
228 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | ||
229 | |||
230 | tdesc_microblaze = result; | ||
231 | } | ||
232 | Index: gdb-9.2/gdb/features/microblaze64-core.xml | ||
233 | =================================================================== | ||
234 | --- /dev/null | ||
235 | +++ gdb-9.2/gdb/features/microblaze64-core.xml | ||
236 | @@ -0,0 +1,69 @@ | ||
237 | +<?xml version="1.0"?> | ||
238 | +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc. | ||
239 | + | ||
240 | + Copying and distribution of this file, with or without modification, | ||
241 | + are permitted in any medium without royalty provided the copyright | ||
242 | + notice and this notice are preserved. --> | ||
243 | + | ||
244 | +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> | ||
245 | +<feature name="org.gnu.gdb.microblaze64.core"> | ||
246 | + <reg name="r0" bitsize="64" regnum="0"/> | ||
247 | + <reg name="r1" bitsize="64"/> | ||
248 | + <reg name="r2" bitsize="64"/> | ||
249 | + <reg name="r3" bitsize="64"/> | ||
250 | + <reg name="r4" bitsize="64"/> | ||
251 | + <reg name="r5" bitsize="64"/> | ||
252 | + <reg name="r6" bitsize="64"/> | ||
253 | + <reg name="r7" bitsize="64"/> | ||
254 | + <reg name="r8" bitsize="64"/> | ||
255 | + <reg name="r9" bitsize="64"/> | ||
256 | + <reg name="r10" bitsize="64"/> | ||
257 | + <reg name="r11" bitsize="64"/> | ||
258 | + <reg name="r12" bitsize="64"/> | ||
259 | + <reg name="r13" bitsize="64"/> | ||
260 | + <reg name="r14" bitsize="64"/> | ||
261 | + <reg name="r15" bitsize="64"/> | ||
262 | + <reg name="r16" bitsize="64"/> | ||
263 | + <reg name="r17" bitsize="64"/> | ||
264 | + <reg name="r18" bitsize="64"/> | ||
265 | + <reg name="r19" bitsize="64"/> | ||
266 | + <reg name="r20" bitsize="64"/> | ||
267 | + <reg name="r21" bitsize="64"/> | ||
268 | + <reg name="r22" bitsize="64"/> | ||
269 | + <reg name="r23" bitsize="64"/> | ||
270 | + <reg name="r24" bitsize="64"/> | ||
271 | + <reg name="r25" bitsize="64"/> | ||
272 | + <reg name="r26" bitsize="64"/> | ||
273 | + <reg name="r27" bitsize="64"/> | ||
274 | + <reg name="r28" bitsize="64"/> | ||
275 | + <reg name="r29" bitsize="64"/> | ||
276 | + <reg name="r30" bitsize="64"/> | ||
277 | + <reg name="r31" bitsize="64"/> | ||
278 | + <reg name="rpc" bitsize="64"/> | ||
279 | + <reg name="rmsr" bitsize="32"/> | ||
280 | + <reg name="rear" bitsize="64"/> | ||
281 | + <reg name="resr" bitsize="32"/> | ||
282 | + <reg name="rfsr" bitsize="32"/> | ||
283 | + <reg name="rbtr" bitsize="64"/> | ||
284 | + <reg name="rpvr0" bitsize="32"/> | ||
285 | + <reg name="rpvr1" bitsize="32"/> | ||
286 | + <reg name="rpvr2" bitsize="32"/> | ||
287 | + <reg name="rpvr3" bitsize="32"/> | ||
288 | + <reg name="rpvr4" bitsize="32"/> | ||
289 | + <reg name="rpvr5" bitsize="32"/> | ||
290 | + <reg name="rpvr6" bitsize="32"/> | ||
291 | + <reg name="rpvr7" bitsize="32"/> | ||
292 | + <reg name="rpvr8" bitsize="64"/> | ||
293 | + <reg name="rpvr9" bitsize="64"/> | ||
294 | + <reg name="rpvr10" bitsize="32"/> | ||
295 | + <reg name="rpvr11" bitsize="32"/> | ||
296 | + <reg name="redr" bitsize="32"/> | ||
297 | + <reg name="rpid" bitsize="32"/> | ||
298 | + <reg name="rzpr" bitsize="32"/> | ||
299 | + <reg name="rtlbx" bitsize="32"/> | ||
300 | + <reg name="rtlbsx" bitsize="32"/> | ||
301 | + <reg name="rtlblo" bitsize="32"/> | ||
302 | + <reg name="rtlbhi" bitsize="32"/> | ||
303 | + <reg name="slr" bitsize="64"/> | ||
304 | + <reg name="shr" bitsize="64"/> | ||
305 | +</feature> | ||
306 | Index: gdb-9.2/gdb/features/microblaze64-stack-protect.xml | ||
307 | =================================================================== | ||
308 | --- /dev/null | ||
309 | +++ gdb-9.2/gdb/features/microblaze64-stack-protect.xml | ||
310 | @@ -0,0 +1,12 @@ | ||
311 | +<?xml version="1.0"?> | ||
312 | +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc. | ||
313 | + | ||
314 | + Copying and distribution of this file, with or without modification, | ||
315 | + are permitted in any medium without royalty provided the copyright | ||
316 | + notice and this notice are preserved. --> | ||
317 | + | ||
318 | +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> | ||
319 | +<feature name="org.gnu.gdb.microblaze64.stack-protect"> | ||
320 | + <reg name="slr" bitsize="64"/> | ||
321 | + <reg name="shr" bitsize="64"/> | ||
322 | +</feature> | ||
323 | Index: gdb-9.2/gdb/features/microblaze64-with-stack-protect.c | ||
324 | =================================================================== | ||
325 | --- /dev/null | ||
326 | +++ gdb-9.2/gdb/features/microblaze64-with-stack-protect.c | ||
327 | @@ -0,0 +1,79 @@ | ||
328 | +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: | ||
329 | + Original: microblaze-with-stack-protect.xml */ | ||
330 | + | ||
331 | +#include "defs.h" | ||
332 | +#include "osabi.h" | ||
333 | +#include "target-descriptions.h" | ||
334 | + | ||
335 | +struct target_desc *tdesc_microblaze64_with_stack_protect; | ||
336 | +static void | ||
337 | +initialize_tdesc_microblaze64_with_stack_protect (void) | ||
338 | +{ | ||
339 | + struct target_desc *result = allocate_target_description (); | ||
340 | + struct tdesc_feature *feature; | ||
341 | + | ||
342 | + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.core"); | ||
343 | + tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); | ||
344 | + tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); | ||
345 | + tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64"); | ||
346 | + tdesc_create_reg (feature, "r3", 3, 1, NULL, 64, "uint64"); | ||
347 | + tdesc_create_reg (feature, "r4", 4, 1, NULL, 64, "uint64"); | ||
348 | + tdesc_create_reg (feature, "r5", 5, 1, NULL, 64, "uint64"); | ||
349 | + tdesc_create_reg (feature, "r6", 6, 1, NULL, 64, "uint64"); | ||
350 | + tdesc_create_reg (feature, "r7", 7, 1, NULL, 64, "uint64"); | ||
351 | + tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "uint64"); | ||
352 | + tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "uint64"); | ||
353 | + tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "uint64"); | ||
354 | + tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "uint64"); | ||
355 | + tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "uint64"); | ||
356 | + tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "uint64"); | ||
357 | + tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "uint64"); | ||
358 | + tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "uint64"); | ||
359 | + tdesc_create_reg (feature, "r16", 16, 1, NULL, 64, "uint64"); | ||
360 | + tdesc_create_reg (feature, "r17", 17, 1, NULL, 64, "uint64"); | ||
361 | + tdesc_create_reg (feature, "r18", 18, 1, NULL, 64, "uint64"); | ||
362 | + tdesc_create_reg (feature, "r19", 19, 1, NULL, 64, "uint64"); | ||
363 | + tdesc_create_reg (feature, "r20", 20, 1, NULL, 64, "uint64"); | ||
364 | + tdesc_create_reg (feature, "r21", 21, 1, NULL, 64, "uint64"); | ||
365 | + tdesc_create_reg (feature, "r22", 22, 1, NULL, 64, "uint64"); | ||
366 | + tdesc_create_reg (feature, "r23", 23, 1, NULL, 64, "uint64"); | ||
367 | + tdesc_create_reg (feature, "r24", 24, 1, NULL, 64, "uint64"); | ||
368 | + tdesc_create_reg (feature, "r25", 25, 1, NULL, 64, "uint64"); | ||
369 | + tdesc_create_reg (feature, "r26", 26, 1, NULL, 64, "uint64"); | ||
370 | + tdesc_create_reg (feature, "r27", 27, 1, NULL, 64, "uint64"); | ||
371 | + tdesc_create_reg (feature, "r28", 28, 1, NULL, 64, "uint64"); | ||
372 | + tdesc_create_reg (feature, "r29", 29, 1, NULL, 64, "uint64"); | ||
373 | + tdesc_create_reg (feature, "r30", 30, 1, NULL, 64, "uint64"); | ||
374 | + tdesc_create_reg (feature, "r31", 31, 1, NULL, 64, "uint64"); | ||
375 | + tdesc_create_reg (feature, "rpc", 32, 1, NULL, 64, "uint64"); | ||
376 | + tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); | ||
377 | + tdesc_create_reg (feature, "rear", 34, 1, NULL, 64, "int"); | ||
378 | + tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); | ||
379 | + tdesc_create_reg (feature, "rfsr", 36, 1, NULL, 32, "int"); | ||
380 | + tdesc_create_reg (feature, "rbtr", 37, 1, NULL, 64, "uint64"); | ||
381 | + tdesc_create_reg (feature, "rpvr0", 38, 1, NULL, 32, "int"); | ||
382 | + tdesc_create_reg (feature, "rpvr1", 39, 1, NULL, 32, "int"); | ||
383 | + tdesc_create_reg (feature, "rpvr2", 40, 1, NULL, 32, "int"); | ||
384 | + tdesc_create_reg (feature, "rpvr3", 41, 1, NULL, 32, "int"); | ||
385 | + tdesc_create_reg (feature, "rpvr4", 42, 1, NULL, 32, "int"); | ||
386 | + tdesc_create_reg (feature, "rpvr5", 43, 1, NULL, 32, "int"); | ||
387 | + tdesc_create_reg (feature, "rpvr6", 44, 1, NULL, 32, "int"); | ||
388 | + tdesc_create_reg (feature, "rpvr7", 45, 1, NULL, 32, "int"); | ||
389 | + tdesc_create_reg (feature, "rpvr8", 46, 1, NULL, 64, "uint64"); | ||
390 | + tdesc_create_reg (feature, "rpvr9", 47, 1, NULL, 64, "uint64"); | ||
391 | + tdesc_create_reg (feature, "rpvr10", 48, 1, NULL, 32, "int"); | ||
392 | + tdesc_create_reg (feature, "rpvr11", 49, 1, NULL, 32, "int"); | ||
393 | + tdesc_create_reg (feature, "redr", 50, 1, NULL, 32, "int"); | ||
394 | + tdesc_create_reg (feature, "rpid", 51, 1, NULL, 32, "int"); | ||
395 | + tdesc_create_reg (feature, "rzpr", 52, 1, NULL, 32, "int"); | ||
396 | + tdesc_create_reg (feature, "rtlbx", 53, 1, NULL, 32, "int"); | ||
397 | + tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); | ||
398 | + tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); | ||
399 | + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
400 | + | ||
401 | + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.stack-protect"); | ||
402 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | ||
403 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | ||
404 | + | ||
405 | + tdesc_microblaze64_with_stack_protect = result; | ||
406 | +} | ||
407 | Index: gdb-9.2/gdb/features/microblaze64-with-stack-protect.xml | ||
408 | =================================================================== | ||
409 | --- /dev/null | ||
410 | +++ gdb-9.2/gdb/features/microblaze64-with-stack-protect.xml | ||
411 | @@ -0,0 +1,12 @@ | ||
412 | +<?xml version="1.0"?> | ||
413 | +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc. | ||
414 | + | ||
415 | + Copying and distribution of this file, with or without modification, | ||
416 | + are permitted in any medium without royalty provided the copyright | ||
417 | + notice and this notice are preserved. --> | ||
418 | + | ||
419 | +<!DOCTYPE target SYSTEM "gdb-target.dtd"> | ||
420 | +<target> | ||
421 | + <xi:include href="microblaze64-core.xml"/> | ||
422 | + <xi:include href="microblaze64-stack-protect.xml"/> | ||
423 | +</target> | ||
424 | Index: gdb-9.2/gdb/features/microblaze64.c | ||
425 | =================================================================== | ||
426 | --- /dev/null | ||
427 | +++ gdb-9.2/gdb/features/microblaze64.c | ||
428 | @@ -0,0 +1,77 @@ | ||
429 | +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: | ||
430 | + Original: microblaze.xml */ | ||
431 | + | ||
432 | +#include "defs.h" | ||
433 | +#include "osabi.h" | ||
434 | +#include "target-descriptions.h" | ||
435 | + | ||
436 | +struct target_desc *tdesc_microblaze64; | ||
437 | +static void | ||
438 | +initialize_tdesc_microblaze64 (void) | ||
439 | +{ | ||
440 | + struct target_desc *result = allocate_target_description (); | ||
441 | + struct tdesc_feature *feature; | ||
442 | + | ||
443 | + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.core"); | ||
444 | + tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64"); | ||
445 | + tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64"); | ||
446 | + tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64"); | ||
447 | + tdesc_create_reg (feature, "r3", 3, 1, NULL, 64, "uint64"); | ||
448 | + tdesc_create_reg (feature, "r4", 4, 1, NULL, 64, "uint64"); | ||
449 | + tdesc_create_reg (feature, "r5", 5, 1, NULL, 64, "uint64"); | ||
450 | + tdesc_create_reg (feature, "r6", 6, 1, NULL, 64, "uint64"); | ||
451 | + tdesc_create_reg (feature, "r7", 7, 1, NULL, 64, "uint64"); | ||
452 | + tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "uint64"); | ||
453 | + tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "uint64"); | ||
454 | + tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "uint64"); | ||
455 | + tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "uint64"); | ||
456 | + tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "uint64"); | ||
457 | + tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "uint64"); | ||
458 | + tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "uint64"); | ||
459 | + tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "uint64"); | ||
460 | + tdesc_create_reg (feature, "r16", 16, 1, NULL, 64, "uint64"); | ||
461 | + tdesc_create_reg (feature, "r17", 17, 1, NULL, 64, "uint64"); | ||
462 | + tdesc_create_reg (feature, "r18", 18, 1, NULL, 64, "uint64"); | ||
463 | + tdesc_create_reg (feature, "r19", 19, 1, NULL, 64, "uint64"); | ||
464 | + tdesc_create_reg (feature, "r20", 20, 1, NULL, 64, "uint64"); | ||
465 | + tdesc_create_reg (feature, "r21", 21, 1, NULL, 64, "uint64"); | ||
466 | + tdesc_create_reg (feature, "r22", 22, 1, NULL, 64, "uint64"); | ||
467 | + tdesc_create_reg (feature, "r23", 23, 1, NULL, 64, "uint64"); | ||
468 | + tdesc_create_reg (feature, "r24", 24, 1, NULL, 64, "uint64"); | ||
469 | + tdesc_create_reg (feature, "r25", 25, 1, NULL, 64, "uint64"); | ||
470 | + tdesc_create_reg (feature, "r26", 26, 1, NULL, 64, "uint64"); | ||
471 | + tdesc_create_reg (feature, "r27", 27, 1, NULL, 64, "uint64"); | ||
472 | + tdesc_create_reg (feature, "r28", 28, 1, NULL, 64, "uint64"); | ||
473 | + tdesc_create_reg (feature, "r29", 29, 1, NULL, 64, "uint64"); | ||
474 | + tdesc_create_reg (feature, "r30", 30, 1, NULL, 64, "uint64"); | ||
475 | + tdesc_create_reg (feature, "r31", 31, 1, NULL, 64, "uint64"); | ||
476 | + tdesc_create_reg (feature, "rpc", 32, 1, NULL, 64, "uint64"); | ||
477 | + tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); | ||
478 | + tdesc_create_reg (feature, "rear", 34, 1, NULL, 64, "uint64"); | ||
479 | + tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); | ||
480 | + tdesc_create_reg (feature, "rfsr", 36, 1, NULL, 32, "int"); | ||
481 | + tdesc_create_reg (feature, "rbtr", 37, 1, NULL, 64, "uint64"); | ||
482 | + tdesc_create_reg (feature, "rpvr0", 38, 1, NULL, 32, "int"); | ||
483 | + tdesc_create_reg (feature, "rpvr1", 39, 1, NULL, 32, "int"); | ||
484 | + tdesc_create_reg (feature, "rpvr2", 40, 1, NULL, 32, "int"); | ||
485 | + tdesc_create_reg (feature, "rpvr3", 41, 1, NULL, 32, "int"); | ||
486 | + tdesc_create_reg (feature, "rpvr4", 42, 1, NULL, 32, "int"); | ||
487 | + tdesc_create_reg (feature, "rpvr5", 43, 1, NULL, 32, "int"); | ||
488 | + tdesc_create_reg (feature, "rpvr6", 44, 1, NULL, 32, "int"); | ||
489 | + tdesc_create_reg (feature, "rpvr7", 45, 1, NULL, 32, "int"); | ||
490 | + tdesc_create_reg (feature, "rpvr8", 46, 1, NULL, 64, "uint64"); | ||
491 | + tdesc_create_reg (feature, "rpvr9", 47, 1, NULL, 64, "uint64"); | ||
492 | + tdesc_create_reg (feature, "rpvr10", 48, 1, NULL, 32, "int"); | ||
493 | + tdesc_create_reg (feature, "rpvr11", 49, 1, NULL, 32, "int"); | ||
494 | + tdesc_create_reg (feature, "redr", 50, 1, NULL, 32, "int"); | ||
495 | + tdesc_create_reg (feature, "rpid", 51, 1, NULL, 32, "int"); | ||
496 | + tdesc_create_reg (feature, "rzpr", 52, 1, NULL, 32, "int"); | ||
497 | + tdesc_create_reg (feature, "rtlbx", 53, 1, NULL, 32, "int"); | ||
498 | + tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); | ||
499 | + tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); | ||
500 | + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
501 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | ||
502 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | ||
503 | + | ||
504 | + tdesc_microblaze64 = result; | ||
505 | +} | ||
506 | Index: gdb-9.2/gdb/features/microblaze64.xml | ||
507 | =================================================================== | ||
508 | --- /dev/null | ||
509 | +++ gdb-9.2/gdb/features/microblaze64.xml | ||
510 | @@ -0,0 +1,11 @@ | ||
511 | +<?xml version="1.0"?> | ||
512 | +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc. | ||
513 | + | ||
514 | + Copying and distribution of this file, with or without modification, | ||
515 | + are permitted in any medium without royalty provided the copyright | ||
516 | + notice and this notice are preserved. --> | ||
517 | + | ||
518 | +<!DOCTYPE target SYSTEM "gdb-target.dtd"> | ||
519 | +<target> | ||
520 | + <xi:include href="microblaze64-core.xml"/> | ||
521 | +</target> | ||
522 | Index: gdb-9.2/gdb/microblaze-tdep.c | ||
523 | =================================================================== | ||
524 | --- gdb-9.2.orig/gdb/microblaze-tdep.c | ||
525 | +++ gdb-9.2/gdb/microblaze-tdep.c | ||
526 | @@ -40,7 +40,9 @@ | ||
527 | #include "remote.h" | ||
528 | |||
529 | #include "features/microblaze-with-stack-protect.c" | ||
530 | +#include "features/microblaze64-with-stack-protect.c" | ||
531 | #include "features/microblaze.c" | ||
532 | +#include "features/microblaze64.c" | ||
533 | |||
534 | /* Instruction macros used for analyzing the prologue. */ | ||
535 | /* This set of instruction macros need to be changed whenever the | ||
536 | @@ -75,12 +77,13 @@ static const char *microblaze_register_n | ||
537 | "rpvr0", "rpvr1", "rpvr2", "rpvr3", "rpvr4", "rpvr5", "rpvr6", | ||
538 | "rpvr7", "rpvr8", "rpvr9", "rpvr10", "rpvr11", | ||
539 | "redr", "rpid", "rzpr", "rtlbx", "rtlbsx", "rtlblo", "rtlbhi", | ||
540 | - "rslr", "rshr" | ||
541 | + "slr", "shr" | ||
542 | }; | ||
543 | |||
544 | #define MICROBLAZE_NUM_REGS ARRAY_SIZE (microblaze_register_names) | ||
545 | |||
546 | static unsigned int microblaze_debug_flag = 0; | ||
547 | +int reg_size = 4; | ||
548 | |||
549 | static void ATTRIBUTE_PRINTF (1, 2) | ||
550 | microblaze_debug (const char *fmt, ...) | ||
551 | @@ -145,6 +148,7 @@ microblaze_store_arguments (struct regca | ||
552 | error (_("store_arguments not implemented")); | ||
553 | return sp; | ||
554 | } | ||
555 | +#if 0 | ||
556 | static int | ||
557 | microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | ||
558 | struct bp_target_info *bp_tgt) | ||
559 | @@ -154,7 +158,7 @@ microblaze_linux_memory_remove_breakpoin | ||
560 | int val; | ||
561 | int bplen; | ||
562 | gdb_byte old_contents[BREAKPOINT_MAX]; | ||
563 | - struct cleanup *cleanup; | ||
564 | + //struct cleanup *cleanup; | ||
565 | |||
566 | /* Determine appropriate breakpoint contents and size for this address. */ | ||
567 | bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen); | ||
568 | @@ -162,7 +166,8 @@ microblaze_linux_memory_remove_breakpoin | ||
569 | error (_("Software breakpoints not implemented for this target.")); | ||
570 | |||
571 | /* Make sure we see the memory breakpoints. */ | ||
572 | - cleanup = make_show_memory_breakpoints_cleanup (1); | ||
573 | + scoped_restore | ||
574 | + cleanup = make_scoped_restore_show_memory_breakpoints (1); | ||
575 | val = target_read_memory (addr, old_contents, bplen); | ||
576 | |||
577 | /* If our breakpoint is no longer at the address, this means that the | ||
578 | @@ -178,6 +183,7 @@ microblaze_linux_memory_remove_breakpoin | ||
579 | return val; | ||
580 | } | ||
581 | |||
582 | +#endif | ||
583 | /* Allocate and initialize a frame cache. */ | ||
584 | |||
585 | static struct microblaze_frame_cache * | ||
586 | @@ -570,17 +576,16 @@ microblaze_extract_return_value (struct | ||
587 | gdb_byte *valbuf) | ||
588 | { | ||
589 | gdb_byte buf[8]; | ||
590 | - | ||
591 | /* Copy the return value (starting) in RETVAL_REGNUM to VALBUF. */ | ||
592 | switch (TYPE_LENGTH (type)) | ||
593 | { | ||
594 | case 1: /* return last byte in the register. */ | ||
595 | regcache->cooked_read (MICROBLAZE_RETVAL_REGNUM, buf); | ||
596 | - memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 1, 1); | ||
597 | + memcpy(valbuf, buf + reg_size - 1, 1); | ||
598 | return; | ||
599 | case 2: /* return last 2 bytes in register. */ | ||
600 | regcache->cooked_read (MICROBLAZE_RETVAL_REGNUM, buf); | ||
601 | - memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 2, 2); | ||
602 | + memcpy(valbuf, buf + reg_size - 2, 2); | ||
603 | return; | ||
604 | case 4: /* for sizes 4 or 8, copy the required length. */ | ||
605 | case 8: | ||
606 | @@ -647,7 +652,119 @@ microblaze_stabs_argument_has_addr (stru | ||
607 | return (TYPE_LENGTH (type) == 16); | ||
608 | } | ||
609 | |||
610 | - | ||
611 | +#if 0 | ||
612 | +static std::vector<CORE_ADDR> | ||
613 | +microblaze_software_single_step (struct regcache *regcache) | ||
614 | +{ | ||
615 | +// struct gdbarch *arch = get_frame_arch(frame); | ||
616 | + struct gdbarch *arch = get_regcache_arch (regcache); | ||
617 | + struct address_space *aspace = get_regcache_aspace (regcache); | ||
618 | +// struct address_space *aspace = get_frame_address_space (frame); | ||
619 | + struct gdbarch_tdep *tdep = gdbarch_tdep (arch); | ||
620 | + static char le_breakp[] = MICROBLAZE_BREAKPOINT_LE; | ||
621 | + static char be_breakp[] = MICROBLAZE_BREAKPOINT; | ||
622 | + enum bfd_endian byte_order = gdbarch_byte_order (arch); | ||
623 | + char *breakp = byte_order == BFD_ENDIAN_BIG ? be_breakp : le_breakp; | ||
624 | + std::vector<CORE_ADDR> ret = 0; | ||
625 | + | ||
626 | + /* Save the address and the values of the next_pc and the target */ | ||
627 | + static struct sstep_breaks | ||
628 | + { | ||
629 | + CORE_ADDR address; | ||
630 | + bfd_boolean valid; | ||
631 | + /* Shadow contents. */ | ||
632 | + char data[INST_WORD_SIZE]; | ||
633 | + } stepbreaks[2]; | ||
634 | + int ii; | ||
635 | + | ||
636 | + if (1) | ||
637 | + { | ||
638 | + CORE_ADDR pc; | ||
639 | + std::vector<CORE_ADDR> *next_pcs = NULL; | ||
640 | + long insn; | ||
641 | + enum microblaze_instr minstr; | ||
642 | + bfd_boolean isunsignednum; | ||
643 | + enum microblaze_instr_type insn_type; | ||
644 | + short delay_slots; | ||
645 | + int imm; | ||
646 | + bfd_boolean immfound = FALSE; | ||
647 | + | ||
648 | + /* Set a breakpoint at the next instruction */ | ||
649 | + /* If the current instruction is an imm, set it at the inst after */ | ||
650 | + /* If the instruction has a delay slot, skip the delay slot */ | ||
651 | + pc = regcache_read_pc (regcache); | ||
652 | + insn = microblaze_fetch_instruction (pc); | ||
653 | + minstr = get_insn_microblaze (insn, &isunsignednum, &insn_type, &delay_slots); | ||
654 | + if (insn_type == immediate_inst) | ||
655 | + { | ||
656 | + int rd, ra, rb; | ||
657 | + immfound = TRUE; | ||
658 | + minstr = microblaze_decode_insn (insn, &rd, &ra, &rb, &imm); | ||
659 | + pc = pc + INST_WORD_SIZE; | ||
660 | + insn = microblaze_fetch_instruction (pc); | ||
661 | + minstr = get_insn_microblaze (insn, &isunsignednum, &insn_type, &delay_slots); | ||
662 | + } | ||
663 | + stepbreaks[0].address = pc + (delay_slots * INST_WORD_SIZE) + INST_WORD_SIZE; | ||
664 | + if (insn_type != return_inst) { | ||
665 | + stepbreaks[0].valid = TRUE; | ||
666 | + } else { | ||
667 | + stepbreaks[0].valid = FALSE; | ||
668 | + } | ||
669 | + | ||
670 | + microblaze_debug ("single-step insn_type=%x insn=%x\n", insn_type, insn); | ||
671 | + /* Now check for branch or return instructions */ | ||
672 | + if (insn_type == branch_inst || insn_type == return_inst) { | ||
673 | + int limm; | ||
674 | + int lrd, lra, lrb; | ||
675 | + int ra, rb; | ||
676 | + bfd_boolean targetvalid; | ||
677 | + bfd_boolean unconditionalbranch; | ||
678 | + microblaze_decode_insn(insn, &lrd, &lra, &lrb, &limm); | ||
679 | + if (lra >= 0 && lra < MICROBLAZE_NUM_REGS) | ||
680 | + ra = regcache_raw_get_unsigned(regcache, lra); | ||
681 | + else | ||
682 | + ra = 0; | ||
683 | + if (lrb >= 0 && lrb < MICROBLAZE_NUM_REGS) | ||
684 | + rb = regcache_raw_get_unsigned(regcache, lrb); | ||
685 | + else | ||
686 | + rb = 0; | ||
687 | + stepbreaks[1].address = microblaze_get_target_address (insn, immfound, imm, pc, ra, rb, &targetvalid, &unconditionalbranch); | ||
688 | + microblaze_debug ("single-step uncondbr=%d targetvalid=%d target=%x\n", unconditionalbranch, targetvalid, stepbreaks[1].address); | ||
689 | + if (unconditionalbranch) | ||
690 | + stepbreaks[0].valid = FALSE; /* This is a unconditional branch: will not come to the next address */ | ||
691 | + if (targetvalid && (stepbreaks[0].valid == FALSE || | ||
692 | + (stepbreaks[0].address != stepbreaks[1].address)) | ||
693 | + && (stepbreaks[1].address != pc)) { | ||
694 | + stepbreaks[1].valid = TRUE; | ||
695 | + } else { | ||
696 | + stepbreaks[1].valid = FALSE; | ||
697 | + } | ||
698 | + } else { | ||
699 | + stepbreaks[1].valid = FALSE; | ||
700 | + } | ||
701 | + | ||
702 | + /* Insert the breakpoints */ | ||
703 | + for (ii = 0; ii < 2; ++ii) | ||
704 | + { | ||
705 | + | ||
706 | + /* ignore invalid breakpoint. */ | ||
707 | + if (stepbreaks[ii].valid) { | ||
708 | + VEC_safe_push (CORE_ADDR, next_pcs, stepbreaks[ii].address);; | ||
709 | +// insert_single_step_breakpoint (arch, aspace, stepbreaks[ii].address); | ||
710 | + ret = next_pcs; | ||
711 | + } | ||
712 | + } | ||
713 | + } | ||
714 | + return ret; | ||
715 | +} | ||
716 | +#endif | ||
717 | + | ||
718 | +static void | ||
719 | +microblaze_write_pc (struct regcache *regcache, CORE_ADDR pc) | ||
720 | +{ | ||
721 | + regcache_cooked_write_unsigned (regcache, MICROBLAZE_PC_REGNUM, pc); | ||
722 | +} | ||
723 | + | ||
724 | static int dwarf2_to_reg_map[78] = | ||
725 | { 0 /* r0 */, 1 /* r1 */, 2 /* r2 */, 3 /* r3 */, /* 0- 3 */ | ||
726 | 4 /* r4 */, 5 /* r5 */, 6 /* r6 */, 7 /* r7 */, /* 4- 7 */ | ||
727 | @@ -682,13 +799,14 @@ microblaze_dwarf2_reg_to_regnum (struct | ||
728 | static void | ||
729 | microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) | ||
730 | { | ||
731 | + | ||
732 | register_remote_g_packet_guess (gdbarch, | ||
733 | - 4 * MICROBLAZE_NUM_CORE_REGS, | ||
734 | - tdesc_microblaze); | ||
735 | + 4 * MICROBLAZE_NUM_REGS, | ||
736 | + tdesc_microblaze64); | ||
737 | |||
738 | register_remote_g_packet_guess (gdbarch, | ||
739 | 4 * MICROBLAZE_NUM_REGS, | ||
740 | - tdesc_microblaze_with_stack_protect); | ||
741 | + tdesc_microblaze64_with_stack_protect); | ||
742 | } | ||
743 | |||
744 | void | ||
745 | @@ -696,15 +814,15 @@ microblaze_supply_gregset (const struct | ||
746 | struct regcache *regcache, | ||
747 | int regnum, const void *gregs) | ||
748 | { | ||
749 | - unsigned int *regs = gregs; | ||
750 | + const gdb_byte *regs = (const gdb_byte *) gregs; | ||
751 | if (regnum >= 0) | ||
752 | - regcache_raw_supply (regcache, regnum, regs + regnum); | ||
753 | + regcache->raw_supply (regnum, regs + regnum); | ||
754 | |||
755 | if (regnum == -1) { | ||
756 | int i; | ||
757 | |||
758 | for (i = 0; i < 50; i++) { | ||
759 | - regcache_raw_supply (regcache, i, regs + i); | ||
760 | + regcache->raw_supply (regnum, regs + i); | ||
761 | } | ||
762 | } | ||
763 | } | ||
764 | @@ -755,6 +873,17 @@ microblaze_regset_from_core_section (str | ||
765 | } | ||
766 | |||
767 | |||
768 | +static void | ||
769 | +make_regs (struct gdbarch *arch) | ||
770 | +{ | ||
771 | + struct gdbarch_tdep *tdep = gdbarch_tdep (arch); | ||
772 | + int mach = gdbarch_bfd_arch_info (arch)->mach; | ||
773 | + | ||
774 | + if (mach == bfd_mach_microblaze64) | ||
775 | + { | ||
776 | + set_gdbarch_ptr_bit (arch, 64); | ||
777 | + } | ||
778 | +} | ||
779 | |||
780 | static struct gdbarch * | ||
781 | microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | ||
782 | @@ -769,8 +898,15 @@ microblaze_gdbarch_init (struct gdbarch_ | ||
783 | if (arches != NULL) | ||
784 | return arches->gdbarch; | ||
785 | if (tdesc == NULL) | ||
786 | - tdesc = tdesc_microblaze; | ||
787 | - | ||
788 | + { | ||
789 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) | ||
790 | + { | ||
791 | + tdesc = tdesc_microblaze64; | ||
792 | + reg_size = 8; | ||
793 | + } | ||
794 | + else | ||
795 | + tdesc = tdesc_microblaze; | ||
796 | + } | ||
797 | /* Check any target description for validity. */ | ||
798 | if (tdesc_has_registers (tdesc)) | ||
799 | { | ||
800 | @@ -778,27 +914,35 @@ microblaze_gdbarch_init (struct gdbarch_ | ||
801 | int valid_p; | ||
802 | int i; | ||
803 | |||
804 | - feature = tdesc_find_feature (tdesc, | ||
805 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) | ||
806 | + feature = tdesc_find_feature (tdesc, | ||
807 | + "org.gnu.gdb.microblaze64.core"); | ||
808 | + else | ||
809 | + feature = tdesc_find_feature (tdesc, | ||
810 | "org.gnu.gdb.microblaze.core"); | ||
811 | if (feature == NULL) | ||
812 | return NULL; | ||
813 | tdesc_data = tdesc_data_alloc (); | ||
814 | |||
815 | valid_p = 1; | ||
816 | - for (i = 0; i < MICROBLAZE_NUM_CORE_REGS; i++) | ||
817 | + for (i = 0; i < MICROBLAZE_NUM_REGS; i++) | ||
818 | valid_p &= tdesc_numbered_register (feature, tdesc_data, i, | ||
819 | microblaze_register_names[i]); | ||
820 | - feature = tdesc_find_feature (tdesc, | ||
821 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) | ||
822 | + feature = tdesc_find_feature (tdesc, | ||
823 | + "org.gnu.gdb.microblaze64.stack-protect"); | ||
824 | + else | ||
825 | + feature = tdesc_find_feature (tdesc, | ||
826 | "org.gnu.gdb.microblaze.stack-protect"); | ||
827 | if (feature != NULL) | ||
828 | { | ||
829 | valid_p = 1; | ||
830 | valid_p &= tdesc_numbered_register (feature, tdesc_data, | ||
831 | MICROBLAZE_SLR_REGNUM, | ||
832 | - "rslr"); | ||
833 | + "slr"); | ||
834 | valid_p &= tdesc_numbered_register (feature, tdesc_data, | ||
835 | MICROBLAZE_SHR_REGNUM, | ||
836 | - "rshr"); | ||
837 | + "shr"); | ||
838 | } | ||
839 | |||
840 | if (!valid_p) | ||
841 | @@ -806,6 +950,7 @@ microblaze_gdbarch_init (struct gdbarch_ | ||
842 | tdesc_data_cleanup (tdesc_data); | ||
843 | return NULL; | ||
844 | } | ||
845 | + | ||
846 | } | ||
847 | |||
848 | /* Allocate space for the new architecture. */ | ||
849 | @@ -825,7 +970,17 @@ microblaze_gdbarch_init (struct gdbarch_ | ||
850 | /* Register numbers of various important registers. */ | ||
851 | set_gdbarch_sp_regnum (gdbarch, MICROBLAZE_SP_REGNUM); | ||
852 | set_gdbarch_pc_regnum (gdbarch, MICROBLAZE_PC_REGNUM); | ||
853 | + | ||
854 | + /* Register set. | ||
855 | + make_regs (gdbarch); */ | ||
856 | + switch (info.bfd_arch_info->mach) | ||
857 | + { | ||
858 | + case bfd_mach_microblaze64: | ||
859 | + set_gdbarch_ptr_bit (gdbarch, 64); | ||
860 | + break; | ||
861 | + } | ||
862 | |||
863 | + | ||
864 | /* Map Dwarf2 registers to GDB registers. */ | ||
865 | set_gdbarch_dwarf2_reg_to_regnum (gdbarch, microblaze_dwarf2_reg_to_regnum); | ||
866 | |||
867 | @@ -845,13 +1000,15 @@ microblaze_gdbarch_init (struct gdbarch_ | ||
868 | microblaze_breakpoint::kind_from_pc); | ||
869 | set_gdbarch_sw_breakpoint_from_kind (gdbarch, | ||
870 | microblaze_breakpoint::bp_from_kind); | ||
871 | - set_gdbarch_memory_remove_breakpoint (gdbarch, microblaze_linux_memory_remove_breakpoint); | ||
872 | +// set_gdbarch_memory_remove_breakpoint (gdbarch, microblaze_linux_memory_remove_breakpoint); | ||
873 | + | ||
874 | +// set_gdbarch_software_single_step (gdbarch, microblaze_software_single_step); | ||
875 | |||
876 | set_gdbarch_frame_args_skip (gdbarch, 8); | ||
877 | |||
878 | set_gdbarch_unwind_pc (gdbarch, microblaze_unwind_pc); | ||
879 | |||
880 | - microblaze_register_g_packet_guesses (gdbarch); | ||
881 | + //microblaze_register_g_packet_guesses (gdbarch); | ||
882 | |||
883 | frame_base_set_default (gdbarch, µblaze_frame_base); | ||
884 | |||
885 | @@ -866,11 +1023,11 @@ microblaze_gdbarch_init (struct gdbarch_ | ||
886 | tdesc_use_registers (gdbarch, tdesc, tdesc_data); | ||
887 | //frame_base_append_sniffer (gdbarch, microblaze_frame_sniffer); | ||
888 | |||
889 | - /* If we have register sets, enable the generic core file support. */ | ||
890 | + /* If we have register sets, enable the generic core file support. | ||
891 | if (tdep->gregset) { | ||
892 | set_gdbarch_regset_from_core_section (gdbarch, | ||
893 | microblaze_regset_from_core_section); | ||
894 | - } | ||
895 | + }*/ | ||
896 | |||
897 | return gdbarch; | ||
898 | } | ||
899 | @@ -882,6 +1039,8 @@ _initialize_microblaze_tdep (void) | ||
900 | |||
901 | initialize_tdesc_microblaze_with_stack_protect (); | ||
902 | initialize_tdesc_microblaze (); | ||
903 | + initialize_tdesc_microblaze64_with_stack_protect (); | ||
904 | + initialize_tdesc_microblaze64 (); | ||
905 | /* Debug this files internals. */ | ||
906 | add_setshow_zuinteger_cmd ("microblaze", class_maintenance, | ||
907 | µblaze_debug_flag, _("\ | ||
908 | Index: gdb-9.2/gdb/microblaze-tdep.h | ||
909 | =================================================================== | ||
910 | --- gdb-9.2.orig/gdb/microblaze-tdep.h | ||
911 | +++ gdb-9.2/gdb/microblaze-tdep.h | ||
912 | @@ -27,7 +27,7 @@ struct microblaze_gregset | ||
913 | microblaze_gregset() {} | ||
914 | unsigned int gregs[32]; | ||
915 | unsigned int fpregs[32]; | ||
916 | - unsigned int pregs[16]; | ||
917 | + unsigned int pregs[18]; | ||
918 | }; | ||
919 | |||
920 | struct gdbarch_tdep | ||
921 | @@ -101,9 +101,9 @@ enum microblaze_regnum | ||
922 | MICROBLAZE_RTLBSX_REGNUM, | ||
923 | MICROBLAZE_RTLBLO_REGNUM, | ||
924 | MICROBLAZE_RTLBHI_REGNUM, | ||
925 | - MICROBLAZE_SLR_REGNUM, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_SLR_REGNUM, | ||
926 | + MICROBLAZE_SLR_REGNUM, | ||
927 | MICROBLAZE_SHR_REGNUM, | ||
928 | - MICROBLAZE_NUM_REGS | ||
929 | + MICROBLAZE_NUM_REGS, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_NUM_REGS | ||
930 | }; | ||
931 | |||
932 | struct microblaze_frame_cache | ||
933 | @@ -128,7 +128,7 @@ struct microblaze_frame_cache | ||
934 | struct trad_frame_saved_reg *saved_regs; | ||
935 | }; | ||
936 | /* All registers are 32 bits. */ | ||
937 | -#define MICROBLAZE_REGISTER_SIZE 4 | ||
938 | +//#define MICROBLAZE_REGISTER_SIZE 8 | ||
939 | |||
940 | /* MICROBLAZE_BREAKPOINT defines the breakpoint that should be used. | ||
941 | Only used for native debugging. */ | ||
942 | Index: gdb-9.2/gdb/regformats/microblaze-with-stack-protect.dat | ||
943 | =================================================================== | ||
944 | --- gdb-9.2.orig/gdb/regformats/microblaze-with-stack-protect.dat | ||
945 | +++ gdb-9.2/gdb/regformats/microblaze-with-stack-protect.dat | ||
946 | @@ -60,5 +60,5 @@ expedite:r1,rpc | ||
947 | 32:rtlbsx | ||
948 | 32:rtlblo | ||
949 | 32:rtlbhi | ||
950 | -32:rslr | ||
951 | -32:rshr | ||
952 | +32:slr | ||
953 | +32:shr | ||