arc: Add ARCv2 XML target along with refactoring
[binutils-gdb.git] / gdb / arc-tdep.c
1 /* Target dependent code for ARC architecture, for GDB.
2
3 Copyright 2005-2020 Free Software Foundation, Inc.
4 Contributed by Synopsys Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 /* GDB header files. */
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "elf-bfd.h"
25 #include "disasm.h"
26 #include "dwarf2/frame.h"
27 #include "frame-base.h"
28 #include "frame-unwind.h"
29 #include "gdbcore.h"
30 #include "gdbcmd.h"
31 #include "objfiles.h"
32 #include "osabi.h"
33 #include "prologue-value.h"
34 #include "target-descriptions.h"
35 #include "trad-frame.h"
36
37 /* ARC header files. */
38 #include "opcode/arc.h"
39 #include "opcodes/arc-dis.h"
40 #include "arc-tdep.h"
41 #include "arch/arc.h"
42
43 /* Standard headers. */
44 #include <algorithm>
45 #include <sstream>
46
47 /* The frame unwind cache for ARC. */
48
49 struct arc_frame_cache
50 {
51 /* The stack pointer at the time this frame was created; i.e. the caller's
52 stack pointer when this function was called. It is used to identify this
53 frame. */
54 CORE_ADDR prev_sp;
55
56 /* Register that is a base for this frame - FP for normal frame, SP for
57 non-FP frames. */
58 int frame_base_reg;
59
60 /* Offset from the previous SP to the current frame base. If GCC uses
61 `SUB SP,SP,offset` to allocate space for local variables, then it will be
62 done after setting up a frame pointer, but it still will be considered
63 part of prologue, therefore SP will be lesser than FP at the end of the
64 prologue analysis. In this case that would be an offset from old SP to a
65 new FP. But in case of non-FP frames, frame base is an SP and thus that
66 would be an offset from old SP to new SP. What is important is that this
67 is an offset from old SP to a known register, so it can be used to find
68 old SP.
69
70 Using FP is preferable, when possible, because SP can change in function
71 body after prologue due to alloca, variadic arguments or other shenanigans.
72 If that is the case in the caller frame, then PREV_SP will point to SP at
73 the moment of function call, but it will be different from SP value at the
74 end of the caller prologue. As a result it will not be possible to
75 reconstruct caller's frame and go past it in the backtrace. Those things
76 are unlikely to happen to FP - FP value at the moment of function call (as
77 stored on stack in callee prologue) is also an FP value at the end of the
78 caller's prologue. */
79
80 LONGEST frame_base_offset;
81
82 /* Store addresses for registers saved in prologue. During prologue analysis
83 GDB stores offsets relatively to "old SP", then after old SP is evaluated,
84 offsets are replaced with absolute addresses. */
85 struct trad_frame_saved_reg *saved_regs;
86 };
87
88 /* Global debug flag. */
89
90 int arc_debug;
91
92 /* List of "maintenance print arc" commands. */
93
94 static struct cmd_list_element *maintenance_print_arc_list = NULL;
95
96 /* A set of registers that we expect to find in a tdesc_feature. These
97 are used in ARC_TDESC_INIT when processing the target description. */
98
99 struct arc_register_feature
100 {
101 /* Information for a single register. */
102 struct register_info
103 {
104 /* The GDB register number for this register. */
105 int regnum;
106
107 /* List of names for this register. The first name in this list is the
108 preferred name, the name GDB will use when describing this register. */
109 std::vector<const char *> names;
110
111 /* When true, this register must be present in this feature set. */
112 bool required_p;
113 };
114
115 /* The name for this feature. This is the name used to find this feature
116 within the target description. */
117 const char *name;
118
119 /* List of all the registers that we expect to encounter in this register
120 set. */
121 std::vector<struct register_info> registers;
122 };
123
124 /* Obsolete feature names for backward compatibility. */
125 static const char *ARC_CORE_V1_OBSOLETE_FEATURE_NAME
126 = "org.gnu.gdb.arc.core.arcompact";
127 static const char *ARC_CORE_V2_OBSOLETE_FEATURE_NAME
128 = "org.gnu.gdb.arc.core.v2";
129 static const char *ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME
130 = "org.gnu.gdb.arc.core-reduced.v2";
131 static const char *ARC_AUX_OBSOLETE_FEATURE_NAME
132 = "org.gnu.gdb.arc.aux-minimal";
133 /* Modern feature names. */
134 static const char *ARC_CORE_FEATURE_NAME = "org.gnu.gdb.arc.core";
135 static const char *ARC_AUX_FEATURE_NAME = "org.gnu.gdb.arc.aux";
136
137 /* ARCv1 (ARC600, ARC601, ARC700) general core registers feature set.
138 See also arc_update_acc_reg_names() for "accl/acch" names. */
139
140 static struct arc_register_feature arc_v1_core_reg_feature =
141 {
142 ARC_CORE_FEATURE_NAME,
143 {
144 { ARC_R0_REGNUM + 0, { "r0" }, true },
145 { ARC_R0_REGNUM + 1, { "r1" }, true },
146 { ARC_R0_REGNUM + 2, { "r2" }, true },
147 { ARC_R0_REGNUM + 3, { "r3" }, true },
148 { ARC_R0_REGNUM + 4, { "r4" }, false },
149 { ARC_R0_REGNUM + 5, { "r5" }, false },
150 { ARC_R0_REGNUM + 6, { "r6" }, false },
151 { ARC_R0_REGNUM + 7, { "r7" }, false },
152 { ARC_R0_REGNUM + 8, { "r8" }, false },
153 { ARC_R0_REGNUM + 9, { "r9" }, false },
154 { ARC_R0_REGNUM + 10, { "r10" }, true },
155 { ARC_R0_REGNUM + 11, { "r11" }, true },
156 { ARC_R0_REGNUM + 12, { "r12" }, true },
157 { ARC_R0_REGNUM + 13, { "r13" }, true },
158 { ARC_R0_REGNUM + 14, { "r14" }, true },
159 { ARC_R0_REGNUM + 15, { "r15" }, true },
160 { ARC_R0_REGNUM + 16, { "r16" }, false },
161 { ARC_R0_REGNUM + 17, { "r17" }, false },
162 { ARC_R0_REGNUM + 18, { "r18" }, false },
163 { ARC_R0_REGNUM + 19, { "r19" }, false },
164 { ARC_R0_REGNUM + 20, { "r20" }, false },
165 { ARC_R0_REGNUM + 21, { "r21" }, false },
166 { ARC_R0_REGNUM + 22, { "r22" }, false },
167 { ARC_R0_REGNUM + 23, { "r23" }, false },
168 { ARC_R0_REGNUM + 24, { "r24" }, false },
169 { ARC_R0_REGNUM + 25, { "r25" }, false },
170 { ARC_R0_REGNUM + 26, { "gp" }, true },
171 { ARC_R0_REGNUM + 27, { "fp" }, true },
172 { ARC_R0_REGNUM + 28, { "sp" }, true },
173 { ARC_R0_REGNUM + 29, { "ilink1" }, false },
174 { ARC_R0_REGNUM + 30, { "ilink2" }, false },
175 { ARC_R0_REGNUM + 31, { "blink" }, true },
176 { ARC_R0_REGNUM + 32, { "r32" }, false },
177 { ARC_R0_REGNUM + 33, { "r33" }, false },
178 { ARC_R0_REGNUM + 34, { "r34" }, false },
179 { ARC_R0_REGNUM + 35, { "r35" }, false },
180 { ARC_R0_REGNUM + 36, { "r36" }, false },
181 { ARC_R0_REGNUM + 37, { "r37" }, false },
182 { ARC_R0_REGNUM + 38, { "r38" }, false },
183 { ARC_R0_REGNUM + 39, { "r39" }, false },
184 { ARC_R0_REGNUM + 40, { "r40" }, false },
185 { ARC_R0_REGNUM + 41, { "r41" }, false },
186 { ARC_R0_REGNUM + 42, { "r42" }, false },
187 { ARC_R0_REGNUM + 43, { "r43" }, false },
188 { ARC_R0_REGNUM + 44, { "r44" }, false },
189 { ARC_R0_REGNUM + 45, { "r45" }, false },
190 { ARC_R0_REGNUM + 46, { "r46" }, false },
191 { ARC_R0_REGNUM + 47, { "r47" }, false },
192 { ARC_R0_REGNUM + 48, { "r48" }, false },
193 { ARC_R0_REGNUM + 49, { "r49" }, false },
194 { ARC_R0_REGNUM + 50, { "r50" }, false },
195 { ARC_R0_REGNUM + 51, { "r51" }, false },
196 { ARC_R0_REGNUM + 52, { "r52" }, false },
197 { ARC_R0_REGNUM + 53, { "r53" }, false },
198 { ARC_R0_REGNUM + 54, { "r54" }, false },
199 { ARC_R0_REGNUM + 55, { "r55" }, false },
200 { ARC_R0_REGNUM + 56, { "r56" }, false },
201 { ARC_R0_REGNUM + 57, { "r57" }, false },
202 { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
203 { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
204 { ARC_R0_REGNUM + 60, { "lp_count" }, false },
205 { ARC_R0_REGNUM + 61, { "reserved" }, false },
206 { ARC_R0_REGNUM + 62, { "limm" }, false },
207 { ARC_R0_REGNUM + 63, { "pcl" }, true }
208 }
209 };
210
211 /* ARCv2 (ARCHS) general core registers feature set. See also
212 arc_update_acc_reg_names() for "accl/acch" names. */
213
214 static struct arc_register_feature arc_v2_core_reg_feature =
215 {
216 ARC_CORE_FEATURE_NAME,
217 {
218 { ARC_R0_REGNUM + 0, { "r0" }, true },
219 { ARC_R0_REGNUM + 1, { "r1" }, true },
220 { ARC_R0_REGNUM + 2, { "r2" }, true },
221 { ARC_R0_REGNUM + 3, { "r3" }, true },
222 { ARC_R0_REGNUM + 4, { "r4" }, false },
223 { ARC_R0_REGNUM + 5, { "r5" }, false },
224 { ARC_R0_REGNUM + 6, { "r6" }, false },
225 { ARC_R0_REGNUM + 7, { "r7" }, false },
226 { ARC_R0_REGNUM + 8, { "r8" }, false },
227 { ARC_R0_REGNUM + 9, { "r9" }, false },
228 { ARC_R0_REGNUM + 10, { "r10" }, true },
229 { ARC_R0_REGNUM + 11, { "r11" }, true },
230 { ARC_R0_REGNUM + 12, { "r12" }, true },
231 { ARC_R0_REGNUM + 13, { "r13" }, true },
232 { ARC_R0_REGNUM + 14, { "r14" }, true },
233 { ARC_R0_REGNUM + 15, { "r15" }, true },
234 { ARC_R0_REGNUM + 16, { "r16" }, false },
235 { ARC_R0_REGNUM + 17, { "r17" }, false },
236 { ARC_R0_REGNUM + 18, { "r18" }, false },
237 { ARC_R0_REGNUM + 19, { "r19" }, false },
238 { ARC_R0_REGNUM + 20, { "r20" }, false },
239 { ARC_R0_REGNUM + 21, { "r21" }, false },
240 { ARC_R0_REGNUM + 22, { "r22" }, false },
241 { ARC_R0_REGNUM + 23, { "r23" }, false },
242 { ARC_R0_REGNUM + 24, { "r24" }, false },
243 { ARC_R0_REGNUM + 25, { "r25" }, false },
244 { ARC_R0_REGNUM + 26, { "gp" }, true },
245 { ARC_R0_REGNUM + 27, { "fp" }, true },
246 { ARC_R0_REGNUM + 28, { "sp" }, true },
247 { ARC_R0_REGNUM + 29, { "ilink" }, false },
248 { ARC_R0_REGNUM + 30, { "r30" }, true },
249 { ARC_R0_REGNUM + 31, { "blink" }, true },
250 { ARC_R0_REGNUM + 32, { "r32" }, false },
251 { ARC_R0_REGNUM + 33, { "r33" }, false },
252 { ARC_R0_REGNUM + 34, { "r34" }, false },
253 { ARC_R0_REGNUM + 35, { "r35" }, false },
254 { ARC_R0_REGNUM + 36, { "r36" }, false },
255 { ARC_R0_REGNUM + 37, { "r37" }, false },
256 { ARC_R0_REGNUM + 38, { "r38" }, false },
257 { ARC_R0_REGNUM + 39, { "r39" }, false },
258 { ARC_R0_REGNUM + 40, { "r40" }, false },
259 { ARC_R0_REGNUM + 41, { "r41" }, false },
260 { ARC_R0_REGNUM + 42, { "r42" }, false },
261 { ARC_R0_REGNUM + 43, { "r43" }, false },
262 { ARC_R0_REGNUM + 44, { "r44" }, false },
263 { ARC_R0_REGNUM + 45, { "r45" }, false },
264 { ARC_R0_REGNUM + 46, { "r46" }, false },
265 { ARC_R0_REGNUM + 47, { "r47" }, false },
266 { ARC_R0_REGNUM + 48, { "r48" }, false },
267 { ARC_R0_REGNUM + 49, { "r49" }, false },
268 { ARC_R0_REGNUM + 50, { "r50" }, false },
269 { ARC_R0_REGNUM + 51, { "r51" }, false },
270 { ARC_R0_REGNUM + 52, { "r52" }, false },
271 { ARC_R0_REGNUM + 53, { "r53" }, false },
272 { ARC_R0_REGNUM + 54, { "r54" }, false },
273 { ARC_R0_REGNUM + 55, { "r55" }, false },
274 { ARC_R0_REGNUM + 56, { "r56" }, false },
275 { ARC_R0_REGNUM + 57, { "r57" }, false },
276 { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
277 { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
278 { ARC_R0_REGNUM + 60, { "lp_count" }, false },
279 { ARC_R0_REGNUM + 61, { "reserved" }, false },
280 { ARC_R0_REGNUM + 62, { "limm" }, false },
281 { ARC_R0_REGNUM + 63, { "pcl" }, true }
282 }
283 };
284
285 /* The common auxiliary registers feature set. The REGNUM field
286 must match the ARC_REGNUM enum in arc-tdep.h. */
287
288 static const struct arc_register_feature arc_common_aux_reg_feature =
289 {
290 ARC_AUX_FEATURE_NAME,
291 {
292 { ARC_FIRST_AUX_REGNUM + 0, { "pc" }, true },
293 { ARC_FIRST_AUX_REGNUM + 1, { "status32" }, true },
294 { ARC_FIRST_AUX_REGNUM + 2, { "lp_start" }, false },
295 { ARC_FIRST_AUX_REGNUM + 3, { "lp_end" }, false },
296 { ARC_FIRST_AUX_REGNUM + 4, { "bta" }, false }
297 }
298 };
299
300 static char *arc_disassembler_options = NULL;
301
302 /* Functions are sorted in the order as they are used in the
303 _initialize_arc_tdep (), which uses the same order as gdbarch.h. Static
304 functions are defined before the first invocation. */
305
306 /* Returns an unsigned value of OPERAND_NUM in instruction INSN.
307 For relative branch instructions returned value is an offset, not an actual
308 branch target. */
309
310 static ULONGEST
311 arc_insn_get_operand_value (const struct arc_instruction &insn,
312 unsigned int operand_num)
313 {
314 switch (insn.operands[operand_num].kind)
315 {
316 case ARC_OPERAND_KIND_LIMM:
317 gdb_assert (insn.limm_p);
318 return insn.limm_value;
319 case ARC_OPERAND_KIND_SHIMM:
320 return insn.operands[operand_num].value;
321 default:
322 /* Value in instruction is a register number. */
323 struct regcache *regcache = get_current_regcache ();
324 ULONGEST value;
325 regcache_cooked_read_unsigned (regcache,
326 insn.operands[operand_num].value,
327 &value);
328 return value;
329 }
330 }
331
332 /* Like arc_insn_get_operand_value, but returns a signed value. */
333
334 static LONGEST
335 arc_insn_get_operand_value_signed (const struct arc_instruction &insn,
336 unsigned int operand_num)
337 {
338 switch (insn.operands[operand_num].kind)
339 {
340 case ARC_OPERAND_KIND_LIMM:
341 gdb_assert (insn.limm_p);
342 /* Convert unsigned raw value to signed one. This assumes 2's
343 complement arithmetic, but so is the LONG_MIN value from generic
344 defs.h and that assumption is true for ARC. */
345 gdb_static_assert (sizeof (insn.limm_value) == sizeof (int));
346 return (((LONGEST) insn.limm_value) ^ INT_MIN) - INT_MIN;
347 case ARC_OPERAND_KIND_SHIMM:
348 /* Sign conversion has been done by binutils. */
349 return insn.operands[operand_num].value;
350 default:
351 /* Value in instruction is a register number. */
352 struct regcache *regcache = get_current_regcache ();
353 LONGEST value;
354 regcache_cooked_read_signed (regcache,
355 insn.operands[operand_num].value,
356 &value);
357 return value;
358 }
359 }
360
361 /* Get register with base address of memory operation. */
362
363 static int
364 arc_insn_get_memory_base_reg (const struct arc_instruction &insn)
365 {
366 /* POP_S and PUSH_S have SP as an implicit argument in a disassembler. */
367 if (insn.insn_class == PUSH || insn.insn_class == POP)
368 return ARC_SP_REGNUM;
369
370 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
371
372 /* Other instructions all have at least two operands: operand 0 is data,
373 operand 1 is address. Operand 2 is offset from address. However, see
374 comment to arc_instruction.operands - in some cases, third operand may be
375 missing, namely if it is 0. */
376 gdb_assert (insn.operands_count >= 2);
377 return insn.operands[1].value;
378 }
379
380 /* Get offset of a memory operation INSN. */
381
382 static CORE_ADDR
383 arc_insn_get_memory_offset (const struct arc_instruction &insn)
384 {
385 /* POP_S and PUSH_S have offset as an implicit argument in a
386 disassembler. */
387 if (insn.insn_class == POP)
388 return 4;
389 else if (insn.insn_class == PUSH)
390 return -4;
391
392 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
393
394 /* Other instructions all have at least two operands: operand 0 is data,
395 operand 1 is address. Operand 2 is offset from address. However, see
396 comment to arc_instruction.operands - in some cases, third operand may be
397 missing, namely if it is 0. */
398 if (insn.operands_count < 3)
399 return 0;
400
401 CORE_ADDR value = arc_insn_get_operand_value (insn, 2);
402 /* Handle scaling. */
403 if (insn.writeback_mode == ARC_WRITEBACK_AS)
404 {
405 /* Byte data size is not valid for AS. Halfword means shift by 1 bit.
406 Word and double word means shift by 2 bits. */
407 gdb_assert (insn.data_size_mode != ARC_SCALING_B);
408 if (insn.data_size_mode == ARC_SCALING_H)
409 value <<= 1;
410 else
411 value <<= 2;
412 }
413 return value;
414 }
415
416 CORE_ADDR
417 arc_insn_get_branch_target (const struct arc_instruction &insn)
418 {
419 gdb_assert (insn.is_control_flow);
420
421 /* BI [c]: PC = nextPC + (c << 2). */
422 if (insn.insn_class == BI)
423 {
424 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
425 return arc_insn_get_linear_next_pc (insn) + (reg_value << 2);
426 }
427 /* BIH [c]: PC = nextPC + (c << 1). */
428 else if (insn.insn_class == BIH)
429 {
430 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
431 return arc_insn_get_linear_next_pc (insn) + (reg_value << 1);
432 }
433 /* JLI and EI. */
434 /* JLI and EI depend on optional AUX registers. Not supported right now. */
435 else if (insn.insn_class == JLI)
436 {
437 fprintf_unfiltered (gdb_stderr,
438 "JLI_S instruction is not supported by the GDB.");
439 return 0;
440 }
441 else if (insn.insn_class == EI)
442 {
443 fprintf_unfiltered (gdb_stderr,
444 "EI_S instruction is not supported by the GDB.");
445 return 0;
446 }
447 /* LEAVE_S: PC = BLINK. */
448 else if (insn.insn_class == LEAVE)
449 {
450 struct regcache *regcache = get_current_regcache ();
451 ULONGEST value;
452 regcache_cooked_read_unsigned (regcache, ARC_BLINK_REGNUM, &value);
453 return value;
454 }
455 /* BBIT0/1, BRcc: PC = currentPC + operand. */
456 else if (insn.insn_class == BBIT0 || insn.insn_class == BBIT1
457 || insn.insn_class == BRCC)
458 {
459 /* Most instructions has branch target as their sole argument. However
460 conditional brcc/bbit has it as a third operand. */
461 CORE_ADDR pcrel_addr = arc_insn_get_operand_value (insn, 2);
462
463 /* Offset is relative to the 4-byte aligned address of the current
464 instruction, hence last two bits should be truncated. */
465 return pcrel_addr + align_down (insn.address, 4);
466 }
467 /* B, Bcc, BL, BLcc, LP, LPcc: PC = currentPC + operand. */
468 else if (insn.insn_class == BRANCH || insn.insn_class == LOOP)
469 {
470 CORE_ADDR pcrel_addr = arc_insn_get_operand_value (insn, 0);
471
472 /* Offset is relative to the 4-byte aligned address of the current
473 instruction, hence last two bits should be truncated. */
474 return pcrel_addr + align_down (insn.address, 4);
475 }
476 /* J, Jcc, JL, JLcc: PC = operand. */
477 else if (insn.insn_class == JUMP)
478 {
479 /* All jumps are single-operand. */
480 return arc_insn_get_operand_value (insn, 0);
481 }
482
483 /* This is some new and unknown instruction. */
484 gdb_assert_not_reached ("Unknown branch instruction.");
485 }
486
487 /* Dump INSN into gdb_stdlog. */
488
489 static void
490 arc_insn_dump (const struct arc_instruction &insn)
491 {
492 struct gdbarch *gdbarch = target_gdbarch ();
493
494 arc_print ("Dumping arc_instruction at %s\n",
495 paddress (gdbarch, insn.address));
496 arc_print ("\tlength = %u\n", insn.length);
497
498 if (!insn.valid)
499 {
500 arc_print ("\tThis is not a valid ARC instruction.\n");
501 return;
502 }
503
504 arc_print ("\tlength_with_limm = %u\n", insn.length + (insn.limm_p ? 4 : 0));
505 arc_print ("\tcc = 0x%x\n", insn.condition_code);
506 arc_print ("\tinsn_class = %u\n", insn.insn_class);
507 arc_print ("\tis_control_flow = %i\n", insn.is_control_flow);
508 arc_print ("\thas_delay_slot = %i\n", insn.has_delay_slot);
509
510 CORE_ADDR next_pc = arc_insn_get_linear_next_pc (insn);
511 arc_print ("\tlinear_next_pc = %s\n", paddress (gdbarch, next_pc));
512
513 if (insn.is_control_flow)
514 {
515 CORE_ADDR t = arc_insn_get_branch_target (insn);
516 arc_print ("\tbranch_target = %s\n", paddress (gdbarch, t));
517 }
518
519 arc_print ("\tlimm_p = %i\n", insn.limm_p);
520 if (insn.limm_p)
521 arc_print ("\tlimm_value = 0x%08x\n", insn.limm_value);
522
523 if (insn.insn_class == STORE || insn.insn_class == LOAD
524 || insn.insn_class == PUSH || insn.insn_class == POP)
525 {
526 arc_print ("\twriteback_mode = %u\n", insn.writeback_mode);
527 arc_print ("\tdata_size_mode = %u\n", insn.data_size_mode);
528 arc_print ("\tmemory_base_register = %s\n",
529 gdbarch_register_name (gdbarch,
530 arc_insn_get_memory_base_reg (insn)));
531 /* get_memory_offset returns an unsigned CORE_ADDR, but treat it as a
532 LONGEST for a nicer representation. */
533 arc_print ("\taddr_offset = %s\n",
534 plongest (arc_insn_get_memory_offset (insn)));
535 }
536
537 arc_print ("\toperands_count = %u\n", insn.operands_count);
538 for (unsigned int i = 0; i < insn.operands_count; ++i)
539 {
540 int is_reg = (insn.operands[i].kind == ARC_OPERAND_KIND_REG);
541
542 arc_print ("\toperand[%u] = {\n", i);
543 arc_print ("\t\tis_reg = %i\n", is_reg);
544 if (is_reg)
545 arc_print ("\t\tregister = %s\n",
546 gdbarch_register_name (gdbarch, insn.operands[i].value));
547 /* Don't know if this value is signed or not, so print both
548 representations. This tends to look quite ugly, especially for big
549 numbers. */
550 arc_print ("\t\tunsigned value = %s\n",
551 pulongest (arc_insn_get_operand_value (insn, i)));
552 arc_print ("\t\tsigned value = %s\n",
553 plongest (arc_insn_get_operand_value_signed (insn, i)));
554 arc_print ("\t}\n");
555 }
556 }
557
558 CORE_ADDR
559 arc_insn_get_linear_next_pc (const struct arc_instruction &insn)
560 {
561 /* In ARC long immediate is always 4 bytes. */
562 return (insn.address + insn.length + (insn.limm_p ? 4 : 0));
563 }
564
565 /* Implement the "write_pc" gdbarch method.
566
567 In ARC PC register is a normal register so in most cases setting PC value
568 is a straightforward process: debugger just writes PC value. However it
569 gets trickier in case when current instruction is an instruction in delay
570 slot. In this case CPU will execute instruction at current PC value, then
571 will set PC to the current value of BTA register; also current instruction
572 cannot be branch/jump and some of the other instruction types. Thus if
573 debugger would try to just change PC value in this case, this instruction
574 will get executed, but then core will "jump" to the original branch target.
575
576 Whether current instruction is a delay-slot instruction or not is indicated
577 by DE bit in STATUS32 register indicates if current instruction is a delay
578 slot instruction. This bit is writable by debug host, which allows debug
579 host to prevent core from jumping after the delay slot instruction. It
580 also works in another direction: setting this bit will make core to treat
581 any current instructions as a delay slot instruction and to set PC to the
582 current value of BTA register.
583
584 To workaround issues with changing PC register while in delay slot
585 instruction, debugger should check for the STATUS32.DE bit and reset it if
586 it is set. No other change is required in this function. Most common
587 case, where this function might be required is calling inferior functions
588 from debugger. Generic GDB logic handles this pretty well: current values
589 of registers are stored, value of PC is changed (that is the job of this
590 function), and after inferior function is executed, GDB restores all
591 registers, include BTA and STATUS32, which also means that core is returned
592 to its original state of being halted on delay slot instructions.
593
594 This method is useless for ARC 600, because it doesn't have externally
595 exposed BTA register. In the case of ARC 600 it is impossible to restore
596 core to its state in all occasions thus core should never be halted (from
597 the perspective of debugger host) in the delay slot. */
598
599 static void
600 arc_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
601 {
602 struct gdbarch *gdbarch = regcache->arch ();
603
604 if (arc_debug)
605 debug_printf ("arc: Writing PC, new value=%s\n",
606 paddress (gdbarch, new_pc));
607
608 regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
609 new_pc);
610
611 ULONGEST status32;
612 regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
613 &status32);
614
615 /* Mask for DE bit is 0x40. */
616 if (status32 & 0x40)
617 {
618 if (arc_debug)
619 {
620 debug_printf ("arc: Changing PC while in delay slot. Will "
621 "reset STATUS32.DE bit to zero. Value of STATUS32 "
622 "register is 0x%s\n",
623 phex (status32, ARC_REGISTER_SIZE));
624 }
625
626 /* Reset bit and write to the cache. */
627 status32 &= ~0x40;
628 regcache_cooked_write_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
629 status32);
630 }
631 }
632
633 /* Implement the "virtual_frame_pointer" gdbarch method.
634
635 According to ABI the FP (r27) is used to point to the middle of the current
636 stack frame, just below the saved FP and before local variables, register
637 spill area and outgoing args. However for optimization levels above O2 and
638 in any case in leaf functions, the frame pointer is usually not set at all.
639 The exception being when handling nested functions.
640
641 We use this function to return a "virtual" frame pointer, marking the start
642 of the current stack frame as a register-offset pair. If the FP is not
643 being used, then it should return SP, with an offset of the frame size.
644
645 The current implementation doesn't actually know the frame size, nor
646 whether the FP is actually being used, so for now we just return SP and an
647 offset of zero. This is no worse than other architectures, but is needed
648 to avoid assertion failures.
649
650 TODO: Can we determine the frame size to get a correct offset?
651
652 PC is a program counter where we need the virtual FP. REG_PTR is the base
653 register used for the virtual FP. OFFSET_PTR is the offset used for the
654 virtual FP. */
655
656 static void
657 arc_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
658 int *reg_ptr, LONGEST *offset_ptr)
659 {
660 *reg_ptr = gdbarch_sp_regnum (gdbarch);
661 *offset_ptr = 0;
662 }
663
664 /* Implement the "push_dummy_call" gdbarch method.
665
666 Stack Frame Layout
667
668 This shows the layout of the stack frame for the general case of a
669 function call; a given function might not have a variable number of
670 arguments or local variables, or might not save any registers, so it would
671 not have the corresponding frame areas. Additionally, a leaf function
672 (i.e. one which calls no other functions) does not need to save the
673 contents of the BLINK register (which holds its return address), and a
674 function might not have a frame pointer.
675
676 The stack grows downward, so SP points below FP in memory; SP always
677 points to the last used word on the stack, not the first one.
678
679 | | |
680 | arg word N | | caller's
681 | : | | frame
682 | arg word 10 | |
683 | arg word 9 | |
684 old SP ---> +-----------------------+ --+
685 | | |
686 | callee-saved | |
687 | registers | |
688 | including fp, blink | |
689 | | | callee's
690 new FP ---> +-----------------------+ | frame
691 | | |
692 | local | |
693 | variables | |
694 | | |
695 | register | |
696 | spill area | |
697 | | |
698 | outgoing args | |
699 | | |
700 new SP ---> +-----------------------+ --+
701 | |
702 | unused |
703 | |
704 |
705 |
706 V
707 downwards
708
709 The list of arguments to be passed to a function is considered to be a
710 sequence of _N_ words (as though all the parameters were stored in order in
711 memory with each parameter occupying an integral number of words). Words
712 1..8 are passed in registers 0..7; if the function has more than 8 words of
713 arguments then words 9..@em N are passed on the stack in the caller's frame.
714
715 If the function has a variable number of arguments, e.g. it has a form such
716 as `function (p1, p2, ...);' and _P_ words are required to hold the values
717 of the named parameters (which are passed in registers 0..@em P -1), then
718 the remaining 8 - _P_ words passed in registers _P_..7 are spilled into the
719 top of the frame so that the anonymous parameter words occupy a continuous
720 region.
721
722 Any arguments are already in target byte order. We just need to store
723 them!
724
725 BP_ADDR is the return address where breakpoint must be placed. NARGS is
726 the number of arguments to the function. ARGS is the arguments values (in
727 target byte order). SP is the Current value of SP register. STRUCT_RETURN
728 is TRUE if structures are returned by the function. STRUCT_ADDR is the
729 hidden address for returning a struct. Returns SP of a new frame. */
730
731 static CORE_ADDR
732 arc_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
733 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
734 struct value **args, CORE_ADDR sp,
735 function_call_return_method return_method,
736 CORE_ADDR struct_addr)
737 {
738 if (arc_debug)
739 debug_printf ("arc: push_dummy_call (nargs = %d)\n", nargs);
740
741 int arg_reg = ARC_FIRST_ARG_REGNUM;
742
743 /* Push the return address. */
744 regcache_cooked_write_unsigned (regcache, ARC_BLINK_REGNUM, bp_addr);
745
746 /* Are we returning a value using a structure return instead of a normal
747 value return? If so, struct_addr is the address of the reserved space for
748 the return structure to be written on the stack, and that address is
749 passed to that function as a hidden first argument. */
750 if (return_method == return_method_struct)
751 {
752 /* Pass the return address in the first argument register. */
753 regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
754
755 if (arc_debug)
756 debug_printf ("arc: struct return address %s passed in R%d",
757 print_core_address (gdbarch, struct_addr), arg_reg);
758
759 arg_reg++;
760 }
761
762 if (nargs > 0)
763 {
764 unsigned int total_space = 0;
765
766 /* How much space do the arguments occupy in total? Must round each
767 argument's size up to an integral number of words. */
768 for (int i = 0; i < nargs; i++)
769 {
770 unsigned int len = TYPE_LENGTH (value_type (args[i]));
771 unsigned int space = align_up (len, 4);
772
773 total_space += space;
774
775 if (arc_debug)
776 debug_printf ("arc: arg %d: %u bytes -> %u\n", i, len, space);
777 }
778
779 /* Allocate a buffer to hold a memory image of the arguments. */
780 gdb_byte *memory_image = XCNEWVEC (gdb_byte, total_space);
781
782 /* Now copy all of the arguments into the buffer, correctly aligned. */
783 gdb_byte *data = memory_image;
784 for (int i = 0; i < nargs; i++)
785 {
786 unsigned int len = TYPE_LENGTH (value_type (args[i]));
787 unsigned int space = align_up (len, 4);
788
789 memcpy (data, value_contents (args[i]), (size_t) len);
790 if (arc_debug)
791 debug_printf ("arc: copying arg %d, val 0x%08x, len %d to mem\n",
792 i, *((int *) value_contents (args[i])), len);
793
794 data += space;
795 }
796
797 /* Now load as much as possible of the memory image into registers. */
798 data = memory_image;
799 while (arg_reg <= ARC_LAST_ARG_REGNUM)
800 {
801 if (arc_debug)
802 debug_printf ("arc: passing 0x%02x%02x%02x%02x in register R%d\n",
803 data[0], data[1], data[2], data[3], arg_reg);
804
805 /* Note we don't use write_unsigned here, since that would convert
806 the byte order, but we are already in the correct byte order. */
807 regcache->cooked_write (arg_reg, data);
808
809 data += ARC_REGISTER_SIZE;
810 total_space -= ARC_REGISTER_SIZE;
811
812 /* All the data is now in registers. */
813 if (total_space == 0)
814 break;
815
816 arg_reg++;
817 }
818
819 /* If there is any data left, push it onto the stack (in a single write
820 operation). */
821 if (total_space > 0)
822 {
823 if (arc_debug)
824 debug_printf ("arc: passing %d bytes on stack\n", total_space);
825
826 sp -= total_space;
827 write_memory (sp, data, (int) total_space);
828 }
829
830 xfree (memory_image);
831 }
832
833 /* Finally, update the SP register. */
834 regcache_cooked_write_unsigned (regcache, gdbarch_sp_regnum (gdbarch), sp);
835
836 return sp;
837 }
838
839 /* Implement the "push_dummy_code" gdbarch method.
840
841 We don't actually push any code. We just identify where a breakpoint can
842 be inserted to which we are can return and the resume address where we
843 should be called.
844
845 ARC does not necessarily have an executable stack, so we can't put the
846 return breakpoint there. Instead we put it at the entry point of the
847 function. This means the SP is unchanged.
848
849 SP is a current stack pointer FUNADDR is an address of the function to be
850 called. ARGS is arguments to pass. NARGS is a number of args to pass.
851 VALUE_TYPE is a type of value returned. REAL_PC is a resume address when
852 the function is called. BP_ADDR is an address where breakpoint should be
853 set. Returns the updated stack pointer. */
854
855 static CORE_ADDR
856 arc_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
857 struct value **args, int nargs, struct type *value_type,
858 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
859 struct regcache *regcache)
860 {
861 *real_pc = funaddr;
862 *bp_addr = entry_point_address ();
863 return sp;
864 }
865
866 /* Implement the "cannot_fetch_register" gdbarch method. */
867
868 static int
869 arc_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
870 {
871 /* Assume that register is readable if it is unknown. LIMM and RESERVED are
872 not real registers, but specific register numbers. They are available as
873 regnums to align architectural register numbers with GDB internal regnums,
874 but they shouldn't appear in target descriptions generated by
875 GDB-servers. */
876 switch (regnum)
877 {
878 case ARC_RESERVED_REGNUM:
879 case ARC_LIMM_REGNUM:
880 return true;
881 default:
882 return false;
883 }
884 }
885
886 /* Implement the "cannot_store_register" gdbarch method. */
887
888 static int
889 arc_cannot_store_register (struct gdbarch *gdbarch, int regnum)
890 {
891 /* Assume that register is writable if it is unknown. See comment in
892 arc_cannot_fetch_register about LIMM and RESERVED. */
893 switch (regnum)
894 {
895 case ARC_RESERVED_REGNUM:
896 case ARC_LIMM_REGNUM:
897 case ARC_PCL_REGNUM:
898 return true;
899 default:
900 return false;
901 }
902 }
903
904 /* Get the return value of a function from the registers/memory used to
905 return it, according to the convention used by the ABI - 4-bytes values are
906 in the R0, while 8-byte values are in the R0-R1.
907
908 TODO: This implementation ignores the case of "complex double", where
909 according to ABI, value is returned in the R0-R3 registers.
910
911 TYPE is a returned value's type. VALBUF is a buffer for the returned
912 value. */
913
914 static void
915 arc_extract_return_value (struct gdbarch *gdbarch, struct type *type,
916 struct regcache *regcache, gdb_byte *valbuf)
917 {
918 unsigned int len = TYPE_LENGTH (type);
919
920 if (arc_debug)
921 debug_printf ("arc: extract_return_value\n");
922
923 if (len <= ARC_REGISTER_SIZE)
924 {
925 ULONGEST val;
926
927 /* Get the return value from one register. */
928 regcache_cooked_read_unsigned (regcache, ARC_R0_REGNUM, &val);
929 store_unsigned_integer (valbuf, (int) len,
930 gdbarch_byte_order (gdbarch), val);
931
932 if (arc_debug)
933 debug_printf ("arc: returning 0x%s\n", phex (val, ARC_REGISTER_SIZE));
934 }
935 else if (len <= ARC_REGISTER_SIZE * 2)
936 {
937 ULONGEST low, high;
938
939 /* Get the return value from two registers. */
940 regcache_cooked_read_unsigned (regcache, ARC_R0_REGNUM, &low);
941 regcache_cooked_read_unsigned (regcache, ARC_R1_REGNUM, &high);
942
943 store_unsigned_integer (valbuf, ARC_REGISTER_SIZE,
944 gdbarch_byte_order (gdbarch), low);
945 store_unsigned_integer (valbuf + ARC_REGISTER_SIZE,
946 (int) len - ARC_REGISTER_SIZE,
947 gdbarch_byte_order (gdbarch), high);
948
949 if (arc_debug)
950 debug_printf ("arc: returning 0x%s%s\n",
951 phex (high, ARC_REGISTER_SIZE),
952 phex (low, ARC_REGISTER_SIZE));
953 }
954 else
955 error (_("arc: extract_return_value: type length %u too large"), len);
956 }
957
958
959 /* Store the return value of a function into the registers/memory used to
960 return it, according to the convention used by the ABI.
961
962 TODO: This implementation ignores the case of "complex double", where
963 according to ABI, value is returned in the R0-R3 registers.
964
965 TYPE is a returned value's type. VALBUF is a buffer with the value to
966 return. */
967
968 static void
969 arc_store_return_value (struct gdbarch *gdbarch, struct type *type,
970 struct regcache *regcache, const gdb_byte *valbuf)
971 {
972 unsigned int len = TYPE_LENGTH (type);
973
974 if (arc_debug)
975 debug_printf ("arc: store_return_value\n");
976
977 if (len <= ARC_REGISTER_SIZE)
978 {
979 ULONGEST val;
980
981 /* Put the return value into one register. */
982 val = extract_unsigned_integer (valbuf, (int) len,
983 gdbarch_byte_order (gdbarch));
984 regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, val);
985
986 if (arc_debug)
987 debug_printf ("arc: storing 0x%s\n", phex (val, ARC_REGISTER_SIZE));
988 }
989 else if (len <= ARC_REGISTER_SIZE * 2)
990 {
991 ULONGEST low, high;
992
993 /* Put the return value into two registers. */
994 low = extract_unsigned_integer (valbuf, ARC_REGISTER_SIZE,
995 gdbarch_byte_order (gdbarch));
996 high = extract_unsigned_integer (valbuf + ARC_REGISTER_SIZE,
997 (int) len - ARC_REGISTER_SIZE,
998 gdbarch_byte_order (gdbarch));
999
1000 regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, low);
1001 regcache_cooked_write_unsigned (regcache, ARC_R1_REGNUM, high);
1002
1003 if (arc_debug)
1004 debug_printf ("arc: storing 0x%s%s\n",
1005 phex (high, ARC_REGISTER_SIZE),
1006 phex (low, ARC_REGISTER_SIZE));
1007 }
1008 else
1009 error (_("arc_store_return_value: type length too large."));
1010 }
1011
1012 /* Implement the "get_longjmp_target" gdbarch method. */
1013
1014 static int
1015 arc_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
1016 {
1017 if (arc_debug)
1018 debug_printf ("arc: get_longjmp_target\n");
1019
1020 struct gdbarch *gdbarch = get_frame_arch (frame);
1021 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1022 int pc_offset = tdep->jb_pc * ARC_REGISTER_SIZE;
1023 gdb_byte buf[ARC_REGISTER_SIZE];
1024 CORE_ADDR jb_addr = get_frame_register_unsigned (frame, ARC_FIRST_ARG_REGNUM);
1025
1026 if (target_read_memory (jb_addr + pc_offset, buf, ARC_REGISTER_SIZE))
1027 return 0; /* Failed to read from memory. */
1028
1029 *pc = extract_unsigned_integer (buf, ARC_REGISTER_SIZE,
1030 gdbarch_byte_order (gdbarch));
1031 return 1;
1032 }
1033
1034 /* Implement the "return_value" gdbarch method. */
1035
1036 static enum return_value_convention
1037 arc_return_value (struct gdbarch *gdbarch, struct value *function,
1038 struct type *valtype, struct regcache *regcache,
1039 gdb_byte *readbuf, const gdb_byte *writebuf)
1040 {
1041 /* If the return type is a struct, or a union, or would occupy more than two
1042 registers, the ABI uses the "struct return convention": the calling
1043 function passes a hidden first parameter to the callee (in R0). That
1044 parameter is the address at which the value being returned should be
1045 stored. Otherwise, the result is returned in registers. */
1046 int is_struct_return = (valtype->code () == TYPE_CODE_STRUCT
1047 || valtype->code () == TYPE_CODE_UNION
1048 || TYPE_LENGTH (valtype) > 2 * ARC_REGISTER_SIZE);
1049
1050 if (arc_debug)
1051 debug_printf ("arc: return_value (readbuf = %s, writebuf = %s)\n",
1052 host_address_to_string (readbuf),
1053 host_address_to_string (writebuf));
1054
1055 if (writebuf != NULL)
1056 {
1057 /* Case 1. GDB should not ask us to set a struct return value: it
1058 should know the struct return location and write the value there
1059 itself. */
1060 gdb_assert (!is_struct_return);
1061 arc_store_return_value (gdbarch, valtype, regcache, writebuf);
1062 }
1063 else if (readbuf != NULL)
1064 {
1065 /* Case 2. GDB should not ask us to get a struct return value: it
1066 should know the struct return location and read the value from there
1067 itself. */
1068 gdb_assert (!is_struct_return);
1069 arc_extract_return_value (gdbarch, valtype, regcache, readbuf);
1070 }
1071
1072 return (is_struct_return
1073 ? RETURN_VALUE_STRUCT_CONVENTION
1074 : RETURN_VALUE_REGISTER_CONVENTION);
1075 }
1076
1077 /* Return the base address of the frame. For ARC, the base address is the
1078 frame pointer. */
1079
1080 static CORE_ADDR
1081 arc_frame_base_address (struct frame_info *this_frame, void **prologue_cache)
1082 {
1083 return (CORE_ADDR) get_frame_register_unsigned (this_frame, ARC_FP_REGNUM);
1084 }
1085
1086 /* Helper function that returns valid pv_t for an instruction operand:
1087 either a register or a constant. */
1088
1089 static pv_t
1090 arc_pv_get_operand (pv_t *regs, const struct arc_instruction &insn, int operand)
1091 {
1092 if (insn.operands[operand].kind == ARC_OPERAND_KIND_REG)
1093 return regs[insn.operands[operand].value];
1094 else
1095 return pv_constant (arc_insn_get_operand_value (insn, operand));
1096 }
1097
1098 /* Determine whether the given disassembled instruction may be part of a
1099 function prologue. If it is, the information in the frame unwind cache will
1100 be updated. */
1101
1102 static bool
1103 arc_is_in_prologue (struct gdbarch *gdbarch, const struct arc_instruction &insn,
1104 pv_t *regs, struct pv_area *stack)
1105 {
1106 /* It might be that currently analyzed address doesn't contain an
1107 instruction, hence INSN is not valid. It likely means that address points
1108 to a data, non-initialized memory, or middle of a 32-bit instruction. In
1109 practice this may happen if GDB connects to a remote target that has
1110 non-zeroed memory. GDB would read PC value and would try to analyze
1111 prologue, but there is no guarantee that memory contents at the address
1112 specified in PC is address is a valid instruction. There is not much that
1113 that can be done about that. */
1114 if (!insn.valid)
1115 return false;
1116
1117 /* Branch/jump or a predicated instruction. */
1118 if (insn.is_control_flow || insn.condition_code != ARC_CC_AL)
1119 return false;
1120
1121 /* Store of some register. May or may not update base address register. */
1122 if (insn.insn_class == STORE || insn.insn_class == PUSH)
1123 {
1124 /* There is definitely at least one operand - register/value being
1125 stored. */
1126 gdb_assert (insn.operands_count > 0);
1127
1128 /* Store at some constant address. */
1129 if (insn.operands_count > 1
1130 && insn.operands[1].kind != ARC_OPERAND_KIND_REG)
1131 return false;
1132
1133 /* Writeback modes:
1134 Mode Address used Writeback value
1135 --------------------------------------------------
1136 No reg + offset no
1137 A/AW reg + offset reg + offset
1138 AB reg reg + offset
1139 AS reg + (offset << scaling) no
1140
1141 "PUSH reg" is an alias to "ST.AW reg, [SP, -4]" encoding. However
1142 16-bit PUSH_S is a distinct instruction encoding, where offset and
1143 base register are implied through opcode. */
1144
1145 /* Register with base memory address. */
1146 int base_reg = arc_insn_get_memory_base_reg (insn);
1147
1148 /* Address where to write. arc_insn_get_memory_offset returns scaled
1149 value for ARC_WRITEBACK_AS. */
1150 pv_t addr;
1151 if (insn.writeback_mode == ARC_WRITEBACK_AB)
1152 addr = regs[base_reg];
1153 else
1154 addr = pv_add_constant (regs[base_reg],
1155 arc_insn_get_memory_offset (insn));
1156
1157 if (stack->store_would_trash (addr))
1158 return false;
1159
1160 if (insn.data_size_mode != ARC_SCALING_D)
1161 {
1162 /* Find the value being stored. */
1163 pv_t store_value = arc_pv_get_operand (regs, insn, 0);
1164
1165 /* What is the size of a the stored value? */
1166 CORE_ADDR size;
1167 if (insn.data_size_mode == ARC_SCALING_B)
1168 size = 1;
1169 else if (insn.data_size_mode == ARC_SCALING_H)
1170 size = 2;
1171 else
1172 size = ARC_REGISTER_SIZE;
1173
1174 stack->store (addr, size, store_value);
1175 }
1176 else
1177 {
1178 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1179 {
1180 /* If this is a double store, than write N+1 register as well. */
1181 pv_t store_value1 = regs[insn.operands[0].value];
1182 pv_t store_value2 = regs[insn.operands[0].value + 1];
1183 stack->store (addr, ARC_REGISTER_SIZE, store_value1);
1184 stack->store (pv_add_constant (addr, ARC_REGISTER_SIZE),
1185 ARC_REGISTER_SIZE, store_value2);
1186 }
1187 else
1188 {
1189 pv_t store_value
1190 = pv_constant (arc_insn_get_operand_value (insn, 0));
1191 stack->store (addr, ARC_REGISTER_SIZE * 2, store_value);
1192 }
1193 }
1194
1195 /* Is base register updated? */
1196 if (insn.writeback_mode == ARC_WRITEBACK_A
1197 || insn.writeback_mode == ARC_WRITEBACK_AB)
1198 regs[base_reg] = pv_add_constant (regs[base_reg],
1199 arc_insn_get_memory_offset (insn));
1200
1201 return true;
1202 }
1203 else if (insn.insn_class == MOVE)
1204 {
1205 gdb_assert (insn.operands_count == 2);
1206
1207 /* Destination argument can be "0", so nothing will happen. */
1208 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1209 {
1210 int dst_regnum = insn.operands[0].value;
1211 regs[dst_regnum] = arc_pv_get_operand (regs, insn, 1);
1212 }
1213 return true;
1214 }
1215 else if (insn.insn_class == SUB)
1216 {
1217 gdb_assert (insn.operands_count == 3);
1218
1219 /* SUB 0,b,c. */
1220 if (insn.operands[0].kind != ARC_OPERAND_KIND_REG)
1221 return true;
1222
1223 int dst_regnum = insn.operands[0].value;
1224 regs[dst_regnum] = pv_subtract (arc_pv_get_operand (regs, insn, 1),
1225 arc_pv_get_operand (regs, insn, 2));
1226 return true;
1227 }
1228 else if (insn.insn_class == ENTER)
1229 {
1230 /* ENTER_S is a prologue-in-instruction - it saves all callee-saved
1231 registers according to given arguments thus greatly reducing code
1232 size. Which registers will be actually saved depends on arguments.
1233
1234 ENTER_S {R13-...,FP,BLINK} stores registers in following order:
1235
1236 new SP ->
1237 BLINK
1238 R13
1239 R14
1240 R15
1241 ...
1242 FP
1243 old SP ->
1244
1245 There are up to three arguments for this opcode, as presented by ARC
1246 disassembler:
1247 1) amount of general-purpose registers to be saved - this argument is
1248 always present even when it is 0;
1249 2) FP register number (27) if FP has to be stored, otherwise argument
1250 is not present;
1251 3) BLINK register number (31) if BLINK has to be stored, otherwise
1252 argument is not present. If both FP and BLINK are stored, then FP
1253 is present before BLINK in argument list. */
1254 gdb_assert (insn.operands_count > 0);
1255
1256 int regs_saved = arc_insn_get_operand_value (insn, 0);
1257
1258 bool is_fp_saved;
1259 if (insn.operands_count > 1)
1260 is_fp_saved = (insn.operands[1].value == ARC_FP_REGNUM);
1261 else
1262 is_fp_saved = false;
1263
1264 bool is_blink_saved;
1265 if (insn.operands_count > 1)
1266 is_blink_saved = (insn.operands[insn.operands_count - 1].value
1267 == ARC_BLINK_REGNUM);
1268 else
1269 is_blink_saved = false;
1270
1271 /* Amount of bytes to be allocated to store specified registers. */
1272 CORE_ADDR st_size = ((regs_saved + is_fp_saved + is_blink_saved)
1273 * ARC_REGISTER_SIZE);
1274 pv_t new_sp = pv_add_constant (regs[ARC_SP_REGNUM], -st_size);
1275
1276 /* Assume that if the last register (closest to new SP) can be written,
1277 then it is possible to write all of them. */
1278 if (stack->store_would_trash (new_sp))
1279 return false;
1280
1281 /* Current store address. */
1282 pv_t addr = regs[ARC_SP_REGNUM];
1283
1284 if (is_fp_saved)
1285 {
1286 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1287 stack->store (addr, ARC_REGISTER_SIZE, regs[ARC_FP_REGNUM]);
1288 }
1289
1290 /* Registers are stored in backward order: from GP (R26) to R13. */
1291 for (int i = ARC_R13_REGNUM + regs_saved - 1; i >= ARC_R13_REGNUM; i--)
1292 {
1293 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1294 stack->store (addr, ARC_REGISTER_SIZE, regs[i]);
1295 }
1296
1297 if (is_blink_saved)
1298 {
1299 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1300 stack->store (addr, ARC_REGISTER_SIZE,
1301 regs[ARC_BLINK_REGNUM]);
1302 }
1303
1304 gdb_assert (pv_is_identical (addr, new_sp));
1305
1306 regs[ARC_SP_REGNUM] = new_sp;
1307
1308 if (is_fp_saved)
1309 regs[ARC_FP_REGNUM] = regs[ARC_SP_REGNUM];
1310
1311 return true;
1312 }
1313
1314 /* Some other architectures, like nds32 or arm, try to continue as far as
1315 possible when building a prologue cache (as opposed to when skipping
1316 prologue), so that cache will be as full as possible. However current
1317 code for ARC doesn't recognize some instructions that may modify SP, like
1318 ADD, AND, OR, etc, hence there is no way to guarantee that SP wasn't
1319 clobbered by the skipped instruction. Potential existence of extension
1320 instruction, which may do anything they want makes this even more complex,
1321 so it is just better to halt on a first unrecognized instruction. */
1322
1323 return false;
1324 }
1325
1326 /* Copy of gdb_buffered_insn_length_fprintf from disasm.c. */
1327
1328 static int ATTRIBUTE_PRINTF (2, 3)
1329 arc_fprintf_disasm (void *stream, const char *format, ...)
1330 {
1331 return 0;
1332 }
1333
1334 struct disassemble_info
1335 arc_disassemble_info (struct gdbarch *gdbarch)
1336 {
1337 struct disassemble_info di;
1338 init_disassemble_info (&di, &null_stream, arc_fprintf_disasm);
1339 di.arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1340 di.mach = gdbarch_bfd_arch_info (gdbarch)->mach;
1341 di.endian = gdbarch_byte_order (gdbarch);
1342 di.read_memory_func = [](bfd_vma memaddr, gdb_byte *myaddr,
1343 unsigned int len, struct disassemble_info *info)
1344 {
1345 return target_read_code (memaddr, myaddr, len);
1346 };
1347 return di;
1348 }
1349
1350 /* Analyze the prologue and update the corresponding frame cache for the frame
1351 unwinder for unwinding frames that doesn't have debug info. In such
1352 situation GDB attempts to parse instructions in the prologue to understand
1353 where each register is saved.
1354
1355 If CACHE is not NULL, then it will be filled with information about saved
1356 registers.
1357
1358 There are several variations of prologue which GDB may encounter. "Full"
1359 prologue looks like this:
1360
1361 sub sp,sp,<imm> ; Space for variadic arguments.
1362 push blink ; Store return address.
1363 push r13 ; Store callee saved registers (up to R26/GP).
1364 push r14
1365 push fp ; Store frame pointer.
1366 mov fp,sp ; Update frame pointer.
1367 sub sp,sp,<imm> ; Create space for local vars on the stack.
1368
1369 Depending on compiler options lots of things may change:
1370
1371 1) BLINK is not saved in leaf functions.
1372 2) Frame pointer is not saved and updated if -fomit-frame-pointer is used.
1373 3) 16-bit versions of those instructions may be used.
1374 4) Instead of a sequence of several push'es, compiler may instead prefer to
1375 do one subtract on stack pointer and then store registers using normal
1376 store, that doesn't update SP. Like this:
1377
1378
1379 sub sp,sp,8 ; Create space for callee-saved registers.
1380 st r13,[sp,4] ; Store callee saved registers (up to R26/GP).
1381 st r14,[sp,0]
1382
1383 5) ENTER_S instruction can encode most of prologue sequence in one
1384 instruction (except for those subtracts for variadic arguments and local
1385 variables).
1386 6) GCC may use "millicode" functions from libgcc to store callee-saved
1387 registers with minimal code-size requirements. This function currently
1388 doesn't support this.
1389
1390 ENTRYPOINT is a function entry point where prologue starts.
1391
1392 LIMIT_PC is a maximum possible end address of prologue (meaning address
1393 of first instruction after the prologue). It might also point to the middle
1394 of prologue if execution has been stopped by the breakpoint at this address
1395 - in this case debugger should analyze prologue only up to this address,
1396 because further instructions haven't been executed yet.
1397
1398 Returns address of the first instruction after the prologue. */
1399
1400 static CORE_ADDR
1401 arc_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR entrypoint,
1402 const CORE_ADDR limit_pc, struct arc_frame_cache *cache)
1403 {
1404 if (arc_debug)
1405 debug_printf ("arc: analyze_prologue (entrypoint=%s, limit_pc=%s)\n",
1406 paddress (gdbarch, entrypoint),
1407 paddress (gdbarch, limit_pc));
1408
1409 /* Prologue values. Only core registers can be stored. */
1410 pv_t regs[ARC_LAST_CORE_REGNUM + 1];
1411 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1412 regs[i] = pv_register (i, 0);
1413 pv_area stack (ARC_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1414
1415 CORE_ADDR current_prologue_end = entrypoint;
1416
1417 /* Look at each instruction in the prologue. */
1418 while (current_prologue_end < limit_pc)
1419 {
1420 struct arc_instruction insn;
1421 struct disassemble_info di = arc_disassemble_info (gdbarch);
1422 arc_insn_decode (current_prologue_end, &di, arc_delayed_print_insn,
1423 &insn);
1424
1425 if (arc_debug >= 2)
1426 arc_insn_dump (insn);
1427
1428 /* If this instruction is in the prologue, fields in the cache will be
1429 updated, and the saved registers mask may be updated. */
1430 if (!arc_is_in_prologue (gdbarch, insn, regs, &stack))
1431 {
1432 /* Found an instruction that is not in the prologue. */
1433 if (arc_debug)
1434 debug_printf ("arc: End of prologue reached at address %s\n",
1435 paddress (gdbarch, insn.address));
1436 break;
1437 }
1438
1439 current_prologue_end = arc_insn_get_linear_next_pc (insn);
1440 }
1441
1442 if (cache != NULL)
1443 {
1444 /* Figure out if it is a frame pointer or just a stack pointer. */
1445 if (pv_is_register (regs[ARC_FP_REGNUM], ARC_SP_REGNUM))
1446 {
1447 cache->frame_base_reg = ARC_FP_REGNUM;
1448 cache->frame_base_offset = -regs[ARC_FP_REGNUM].k;
1449 }
1450 else
1451 {
1452 cache->frame_base_reg = ARC_SP_REGNUM;
1453 cache->frame_base_offset = -regs[ARC_SP_REGNUM].k;
1454 }
1455
1456 /* Assign offset from old SP to all saved registers. */
1457 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1458 {
1459 CORE_ADDR offset;
1460 if (stack.find_reg (gdbarch, i, &offset))
1461 cache->saved_regs[i].addr = offset;
1462 }
1463 }
1464
1465 return current_prologue_end;
1466 }
1467
1468 /* Estimated maximum prologue length in bytes. This should include:
1469 1) Store instruction for each callee-saved register (R25 - R13 + 1)
1470 2) Two instructions for FP
1471 3) One for BLINK
1472 4) Three substract instructions for SP (for variadic args, for
1473 callee saved regs and for local vars) and assuming that those SUB use
1474 long-immediate (hence double length).
1475 5) Stores of arguments registers are considered part of prologue too
1476 (R7 - R1 + 1).
1477 This is quite an extreme case, because even with -O0 GCC will collapse first
1478 two SUBs into one and long immediate values are quite unlikely to appear in
1479 this case, but still better to overshoot a bit - prologue analysis will
1480 anyway stop at the first instruction that doesn't fit prologue, so this
1481 limit will be rarely reached. */
1482
1483 const static int MAX_PROLOGUE_LENGTH
1484 = 4 * (ARC_R25_REGNUM - ARC_R13_REGNUM + 1 + 2 + 1 + 6
1485 + ARC_LAST_ARG_REGNUM - ARC_FIRST_ARG_REGNUM + 1);
1486
1487 /* Implement the "skip_prologue" gdbarch method.
1488
1489 Skip the prologue for the function at PC. This is done by checking from
1490 the line information read from the DWARF, if possible; otherwise, we scan
1491 the function prologue to find its end. */
1492
1493 static CORE_ADDR
1494 arc_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1495 {
1496 if (arc_debug)
1497 debug_printf ("arc: skip_prologue\n");
1498
1499 CORE_ADDR func_addr;
1500 const char *func_name;
1501
1502 /* See what the symbol table says. */
1503 if (find_pc_partial_function (pc, &func_name, &func_addr, NULL))
1504 {
1505 /* Found a function. */
1506 CORE_ADDR postprologue_pc
1507 = skip_prologue_using_sal (gdbarch, func_addr);
1508
1509 if (postprologue_pc != 0)
1510 return std::max (pc, postprologue_pc);
1511 }
1512
1513 /* No prologue info in symbol table, have to analyze prologue. */
1514
1515 /* Find an upper limit on the function prologue using the debug
1516 information. If there is no debug information about prologue end, then
1517 skip_prologue_using_sal will return 0. */
1518 CORE_ADDR limit_pc = skip_prologue_using_sal (gdbarch, pc);
1519
1520 /* If there is no debug information at all, it is required to give some
1521 semi-arbitrary hard limit on amount of bytes to scan during prologue
1522 analysis. */
1523 if (limit_pc == 0)
1524 limit_pc = pc + MAX_PROLOGUE_LENGTH;
1525
1526 /* Find the address of the first instruction after the prologue by scanning
1527 through it - no other information is needed, so pass NULL as a cache. */
1528 return arc_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1529 }
1530
1531 /* Implement the "print_insn" gdbarch method.
1532
1533 arc_get_disassembler () may return different functions depending on bfd
1534 type, so it is not possible to pass print_insn directly to
1535 set_gdbarch_print_insn (). Instead this wrapper function is used. It also
1536 may be used by other functions to get disassemble_info for address. It is
1537 important to note, that those print_insn from opcodes always print
1538 instruction to the stream specified in the INFO. If this is not desired,
1539 then either `print_insn` function in INFO should be set to some function
1540 that will not print, or `stream` should be different from standard
1541 gdb_stdlog. */
1542
1543 int
1544 arc_delayed_print_insn (bfd_vma addr, struct disassemble_info *info)
1545 {
1546 /* Standard BFD "machine number" field allows libopcodes disassembler to
1547 distinguish ARC 600, 700 and v2 cores, however v2 encompasses both ARC EM
1548 and HS, which have some difference between. There are two ways to specify
1549 what is the target core:
1550 1) via the disassemble_info->disassembler_options;
1551 2) otherwise libopcodes will use private (architecture-specific) ELF
1552 header.
1553
1554 Using disassembler_options is preferable, because it comes directly from
1555 GDBserver which scanned an actual ARC core identification info. However,
1556 not all GDBservers report core architecture, so as a fallback GDB still
1557 should support analysis of ELF header. The libopcodes disassembly code
1558 uses the section to find the BFD and the BFD to find the ELF header,
1559 therefore this function should set disassemble_info->section properly.
1560
1561 disassembler_options was already set by non-target specific code with
1562 proper options obtained via gdbarch_disassembler_options ().
1563
1564 This function might be called multiple times in a sequence, reusing same
1565 disassemble_info. */
1566 if ((info->disassembler_options == NULL) && (info->section == NULL))
1567 {
1568 struct obj_section *s = find_pc_section (addr);
1569 if (s != NULL)
1570 info->section = s->the_bfd_section;
1571 }
1572
1573 return default_print_insn (addr, info);
1574 }
1575
1576 /* Baremetal breakpoint instructions.
1577
1578 ARC supports both big- and little-endian. However, instructions for
1579 little-endian processors are encoded in the middle-endian: half-words are
1580 in big-endian, while bytes inside the half-words are in little-endian; data
1581 is represented in the "normal" little-endian. Big-endian processors treat
1582 data and code identically.
1583
1584 Assuming the number 0x01020304, it will be presented this way:
1585
1586 Address : N N+1 N+2 N+3
1587 little-endian : 0x04 0x03 0x02 0x01
1588 big-endian : 0x01 0x02 0x03 0x04
1589 ARC middle-endian : 0x02 0x01 0x04 0x03
1590 */
1591
1592 static const gdb_byte arc_brk_s_be[] = { 0x7f, 0xff };
1593 static const gdb_byte arc_brk_s_le[] = { 0xff, 0x7f };
1594 static const gdb_byte arc_brk_be[] = { 0x25, 0x6f, 0x00, 0x3f };
1595 static const gdb_byte arc_brk_le[] = { 0x6f, 0x25, 0x3f, 0x00 };
1596
1597 /* For ARC ELF, breakpoint uses the 16-bit BRK_S instruction, which is 0x7fff
1598 (little endian) or 0xff7f (big endian). We used to insert BRK_S even
1599 instead of 32-bit instructions, which works mostly ok, unless breakpoint is
1600 inserted into delay slot instruction. In this case if branch is taken
1601 BLINK value will be set to address of instruction after delay slot, however
1602 if we replaced 32-bit instruction in delay slot with 16-bit long BRK_S,
1603 then BLINK value will have an invalid value - it will point to the address
1604 after the BRK_S (which was there at the moment of branch execution) while
1605 it should point to the address after the 32-bit long instruction. To avoid
1606 such issues this function disassembles instruction at target location and
1607 evaluates it value.
1608
1609 ARC 600 supports only 16-bit BRK_S.
1610
1611 NB: Baremetal GDB uses BRK[_S], while user-space GDB uses TRAP_S. BRK[_S]
1612 is much better because it doesn't commit unlike TRAP_S, so it can be set in
1613 delay slots; however it cannot be used in user-mode, hence usage of TRAP_S
1614 in GDB for user-space. */
1615
1616 /* Implement the "breakpoint_kind_from_pc" gdbarch method. */
1617
1618 static int
1619 arc_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
1620 {
1621 size_t length_with_limm = gdb_insn_length (gdbarch, *pcptr);
1622
1623 /* Replace 16-bit instruction with BRK_S, replace 32-bit instructions with
1624 BRK. LIMM is part of instruction length, so it can be either 4 or 8
1625 bytes for 32-bit instructions. */
1626 if ((length_with_limm == 4 || length_with_limm == 8)
1627 && !arc_mach_is_arc600 (gdbarch))
1628 return sizeof (arc_brk_le);
1629 else
1630 return sizeof (arc_brk_s_le);
1631 }
1632
1633 /* Implement the "sw_breakpoint_from_kind" gdbarch method. */
1634
1635 static const gdb_byte *
1636 arc_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
1637 {
1638 *size = kind;
1639
1640 if (kind == sizeof (arc_brk_le))
1641 {
1642 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1643 ? arc_brk_be
1644 : arc_brk_le);
1645 }
1646 else
1647 {
1648 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1649 ? arc_brk_s_be
1650 : arc_brk_s_le);
1651 }
1652 }
1653
1654 /* Implement the "frame_align" gdbarch method. */
1655
1656 static CORE_ADDR
1657 arc_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1658 {
1659 return align_down (sp, 4);
1660 }
1661
1662 /* Dump the frame info. Used for internal debugging only. */
1663
1664 static void
1665 arc_print_frame_cache (struct gdbarch *gdbarch, const char *message,
1666 struct arc_frame_cache *cache, int addresses_known)
1667 {
1668 debug_printf ("arc: frame_info %s\n", message);
1669 debug_printf ("arc: prev_sp = %s\n", paddress (gdbarch, cache->prev_sp));
1670 debug_printf ("arc: frame_base_reg = %i\n", cache->frame_base_reg);
1671 debug_printf ("arc: frame_base_offset = %s\n",
1672 plongest (cache->frame_base_offset));
1673
1674 for (int i = 0; i <= ARC_BLINK_REGNUM; i++)
1675 {
1676 if (trad_frame_addr_p (cache->saved_regs, i))
1677 debug_printf ("arc: saved register %s at %s %s\n",
1678 gdbarch_register_name (gdbarch, i),
1679 (addresses_known) ? "address" : "offset",
1680 paddress (gdbarch, cache->saved_regs[i].addr));
1681 }
1682 }
1683
1684 /* Frame unwinder for normal frames. */
1685
1686 static struct arc_frame_cache *
1687 arc_make_frame_cache (struct frame_info *this_frame)
1688 {
1689 if (arc_debug)
1690 debug_printf ("arc: frame_cache\n");
1691
1692 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1693
1694 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1695 CORE_ADDR entrypoint, prologue_end;
1696 if (find_pc_partial_function (block_addr, NULL, &entrypoint, &prologue_end))
1697 {
1698 struct symtab_and_line sal = find_pc_line (entrypoint, 0);
1699 CORE_ADDR prev_pc = get_frame_pc (this_frame);
1700 if (sal.line == 0)
1701 /* No line info so use current PC. */
1702 prologue_end = prev_pc;
1703 else if (sal.end < prologue_end)
1704 /* The next line begins after the function end. */
1705 prologue_end = sal.end;
1706
1707 prologue_end = std::min (prologue_end, prev_pc);
1708 }
1709 else
1710 {
1711 /* If find_pc_partial_function returned nothing then there is no symbol
1712 information at all for this PC. Currently it is assumed in this case
1713 that current PC is entrypoint to function and try to construct the
1714 frame from that. This is, probably, suboptimal, for example ARM
1715 assumes in this case that program is inside the normal frame (with
1716 frame pointer). ARC, perhaps, should try to do the same. */
1717 entrypoint = get_frame_register_unsigned (this_frame,
1718 gdbarch_pc_regnum (gdbarch));
1719 prologue_end = entrypoint + MAX_PROLOGUE_LENGTH;
1720 }
1721
1722 /* Allocate new frame cache instance and space for saved register info.
1723 FRAME_OBSTACK_ZALLOC will initialize fields to zeroes. */
1724 struct arc_frame_cache *cache
1725 = FRAME_OBSTACK_ZALLOC (struct arc_frame_cache);
1726 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1727
1728 arc_analyze_prologue (gdbarch, entrypoint, prologue_end, cache);
1729
1730 if (arc_debug)
1731 arc_print_frame_cache (gdbarch, "after prologue", cache, false);
1732
1733 CORE_ADDR unwound_fb = get_frame_register_unsigned (this_frame,
1734 cache->frame_base_reg);
1735 if (unwound_fb == 0)
1736 return cache;
1737 cache->prev_sp = unwound_fb + cache->frame_base_offset;
1738
1739 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1740 {
1741 if (trad_frame_addr_p (cache->saved_regs, i))
1742 cache->saved_regs[i].addr += cache->prev_sp;
1743 }
1744
1745 if (arc_debug)
1746 arc_print_frame_cache (gdbarch, "after previous SP found", cache, true);
1747
1748 return cache;
1749 }
1750
1751 /* Implement the "this_id" frame_unwind method. */
1752
1753 static void
1754 arc_frame_this_id (struct frame_info *this_frame, void **this_cache,
1755 struct frame_id *this_id)
1756 {
1757 if (arc_debug)
1758 debug_printf ("arc: frame_this_id\n");
1759
1760 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1761
1762 if (*this_cache == NULL)
1763 *this_cache = arc_make_frame_cache (this_frame);
1764 struct arc_frame_cache *cache = (struct arc_frame_cache *) (*this_cache);
1765
1766 CORE_ADDR stack_addr = cache->prev_sp;
1767
1768 /* There are 4 possible situation which decide how frame_id->code_addr is
1769 evaluated:
1770
1771 1) Function is compiled with option -g. Then frame_id will be created
1772 in dwarf_* function and not in this function. NB: even if target
1773 binary is compiled with -g, some std functions like __start and _init
1774 are not, so they still will follow one of the following choices.
1775
1776 2) Function is compiled without -g and binary hasn't been stripped in
1777 any way. In this case GDB still has enough information to evaluate
1778 frame code_addr properly. This case is covered by call to
1779 get_frame_func ().
1780
1781 3) Binary has been striped with option -g (strip debug symbols). In
1782 this case there is still enough symbols for get_frame_func () to work
1783 properly, so this case is also covered by it.
1784
1785 4) Binary has been striped with option -s (strip all symbols). In this
1786 case GDB cannot get function start address properly, so we return current
1787 PC value instead.
1788 */
1789 CORE_ADDR code_addr = get_frame_func (this_frame);
1790 if (code_addr == 0)
1791 code_addr = get_frame_register_unsigned (this_frame,
1792 gdbarch_pc_regnum (gdbarch));
1793
1794 *this_id = frame_id_build (stack_addr, code_addr);
1795 }
1796
1797 /* Implement the "prev_register" frame_unwind method. */
1798
1799 static struct value *
1800 arc_frame_prev_register (struct frame_info *this_frame,
1801 void **this_cache, int regnum)
1802 {
1803 if (*this_cache == NULL)
1804 *this_cache = arc_make_frame_cache (this_frame);
1805 struct arc_frame_cache *cache = (struct arc_frame_cache *) (*this_cache);
1806
1807 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1808
1809 /* If we are asked to unwind the PC, then we need to return BLINK instead:
1810 the saved value of PC points into this frame's function's prologue, not
1811 the next frame's function's resume location. */
1812 if (regnum == gdbarch_pc_regnum (gdbarch))
1813 regnum = ARC_BLINK_REGNUM;
1814
1815 /* SP is a special case - we should return prev_sp, because
1816 trad_frame_get_prev_register will return _current_ SP value.
1817 Alternatively we could have stored cache->prev_sp in the cache->saved
1818 regs, but here we follow the lead of AArch64, ARM and Xtensa and will
1819 leave that logic in this function, instead of prologue analyzers. That I
1820 think is a bit more clear as `saved_regs` should contain saved regs, not
1821 computable.
1822
1823 Because value has been computed, "got_constant" should be used, so that
1824 returned value will be a "not_lval" - immutable. */
1825
1826 if (regnum == gdbarch_sp_regnum (gdbarch))
1827 return frame_unwind_got_constant (this_frame, regnum, cache->prev_sp);
1828
1829 return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
1830 }
1831
1832 /* Implement the "init_reg" dwarf2_frame method. */
1833
1834 static void
1835 arc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1836 struct dwarf2_frame_state_reg *reg,
1837 struct frame_info *info)
1838 {
1839 if (regnum == gdbarch_pc_regnum (gdbarch))
1840 /* The return address column. */
1841 reg->how = DWARF2_FRAME_REG_RA;
1842 else if (regnum == gdbarch_sp_regnum (gdbarch))
1843 /* The call frame address. */
1844 reg->how = DWARF2_FRAME_REG_CFA;
1845 }
1846
1847 /* Structure defining the ARC ordinary frame unwind functions. Since we are
1848 the fallback unwinder, we use the default frame sniffer, which always
1849 accepts the frame. */
1850
1851 static const struct frame_unwind arc_frame_unwind = {
1852 NORMAL_FRAME,
1853 default_frame_unwind_stop_reason,
1854 arc_frame_this_id,
1855 arc_frame_prev_register,
1856 NULL,
1857 default_frame_sniffer,
1858 NULL,
1859 NULL
1860 };
1861
1862
1863 static const struct frame_base arc_normal_base = {
1864 &arc_frame_unwind,
1865 arc_frame_base_address,
1866 arc_frame_base_address,
1867 arc_frame_base_address
1868 };
1869
1870 static enum arc_isa
1871 mach_type_to_arc_isa (const unsigned long mach)
1872 {
1873 switch (mach)
1874 {
1875 case bfd_mach_arc_arc600:
1876 case bfd_mach_arc_arc601:
1877 case bfd_mach_arc_arc700:
1878 return ARC_ISA_ARCV1;
1879 case bfd_mach_arc_arcv2:
1880 return ARC_ISA_ARCV2;
1881 default:
1882 internal_error (__FILE__, __LINE__,
1883 _("unknown machine id %lu"), mach);
1884 }
1885 }
1886
1887 /* Common construction code for ARC_GDBARCH_FEATURES struct. If there
1888 is no ABFD, then a FEATURE with default values is returned. */
1889
1890 static arc_gdbarch_features
1891 arc_gdbarch_features_create (const bfd *abfd, const unsigned long mach)
1892 {
1893 /* Use 4 as a fallback value. */
1894 int reg_size = 4;
1895
1896 /* Try to guess the features parameters by looking at the binary to be
1897 executed. If the user is providing a binary that does not match the
1898 target, then tough luck. This is the last effort to makes sense of
1899 what's going on. */
1900 if (abfd != nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1901 {
1902 unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
1903
1904 if (eclass == ELFCLASS32)
1905 reg_size = 4;
1906 else if (eclass == ELFCLASS64)
1907 reg_size = 8;
1908 else
1909 internal_error (__FILE__, __LINE__,
1910 _("unknown ELF header class %d"), eclass);
1911 }
1912
1913 /* MACH from a bfd_arch_info struct is used here. It should be a safe
1914 bet, as it looks like the struct is always initialized even when we
1915 don't pass any elf file to GDB at all (it uses default arch in that
1916 case). */
1917 arc_isa isa = mach_type_to_arc_isa (mach);
1918
1919 return arc_gdbarch_features (reg_size, isa);
1920 }
1921
1922 /* Look for obsolete core feature names in TDESC. */
1923
1924 static const struct tdesc_feature *
1925 find_obsolete_core_names (const struct target_desc *tdesc)
1926 {
1927 const struct tdesc_feature *feat = nullptr;
1928
1929 feat = tdesc_find_feature (tdesc, ARC_CORE_V1_OBSOLETE_FEATURE_NAME);
1930
1931 if (feat == nullptr)
1932 feat = tdesc_find_feature (tdesc, ARC_CORE_V2_OBSOLETE_FEATURE_NAME);
1933
1934 if (feat == nullptr)
1935 feat = tdesc_find_feature
1936 (tdesc, ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME);
1937
1938 return feat;
1939 }
1940
1941 /* Look for obsolete aux feature names in TDESC. */
1942
1943 static const struct tdesc_feature *
1944 find_obsolete_aux_names (const struct target_desc *tdesc)
1945 {
1946 return tdesc_find_feature (tdesc, ARC_AUX_OBSOLETE_FEATURE_NAME);
1947 }
1948
1949 /* Based on the MACH value, determines which core register features set
1950 must be used. */
1951
1952 static arc_register_feature *
1953 determine_core_reg_feature_set (const unsigned long mach)
1954 {
1955 switch (mach_type_to_arc_isa (mach))
1956 {
1957 case ARC_ISA_ARCV1:
1958 return &arc_v1_core_reg_feature;
1959 case ARC_ISA_ARCV2:
1960 return &arc_v2_core_reg_feature;
1961 default:
1962 gdb_assert_not_reached
1963 ("Unknown machine type to determine the core feature set.");
1964 }
1965 }
1966
1967 /* At the moment, there is only 1 auxiliary register features set.
1968 This is a place holder for future extendability. */
1969
1970 static const arc_register_feature *
1971 determine_aux_reg_feature_set ()
1972 {
1973 return &arc_common_aux_reg_feature;
1974 }
1975
1976 /* Update accumulator register names (ACCH/ACCL) for r58 and r59 in the
1977 register sets. The endianness determines the assignment:
1978
1979 ,------.------.
1980 | acch | accl |
1981 ,----|------+------|
1982 | LE | r59 | r58 |
1983 | BE | r58 | r59 |
1984 `----^------^------' */
1985
1986 static void
1987 arc_update_acc_reg_names (const int byte_order)
1988 {
1989 const char *r58_alias
1990 = byte_order == BFD_ENDIAN_LITTLE ? "accl" : "acch";
1991 const char *r59_alias
1992 = byte_order == BFD_ENDIAN_LITTLE ? "acch" : "accl";
1993
1994 /* Subscript 1 must be OK because those registers have 2 names. */
1995 arc_v1_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
1996 arc_v1_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
1997 arc_v2_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
1998 arc_v2_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
1999 }
2000
2001 /* Go through all the registers in REG_SET and check if they exist
2002 in FEATURE. The TDESC_DATA is updated with the register number
2003 in REG_SET if it is found in the feature. If a required register
2004 is not found, this function returns false. */
2005
2006 static bool
2007 arc_check_tdesc_feature (struct tdesc_arch_data *tdesc_data,
2008 const struct tdesc_feature *feature,
2009 const struct arc_register_feature *reg_set)
2010 {
2011 for (const auto &reg : reg_set->registers)
2012 {
2013 bool found = false;
2014
2015 for (const char *name : reg.names)
2016 {
2017 found
2018 = tdesc_numbered_register (feature, tdesc_data, reg.regnum, name);
2019
2020 if (found)
2021 break;
2022 }
2023
2024 if (!found && reg.required_p)
2025 {
2026 std::ostringstream reg_names;
2027 for (std::size_t i = 0; i < reg.names.size(); ++i)
2028 {
2029 if (i == 0)
2030 reg_names << "'" << reg.names[0] << "'";
2031 else
2032 reg_names << " or '" << reg.names[0] << "'";
2033 }
2034 arc_print (_("Error: Cannot find required register(s) %s "
2035 "in feature '%s'.\n"), reg_names.str ().c_str (),
2036 feature->name.c_str ());
2037 return false;
2038 }
2039 }
2040
2041 return true;
2042 }
2043
2044 /* Initialize target description for the ARC.
2045
2046 Returns true if input TDESC was valid and in this case it will assign TDESC
2047 and TDESC_DATA output parameters. */
2048
2049 static bool
2050 arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
2051 struct tdesc_arch_data **tdesc_data)
2052 {
2053 const struct target_desc *tdesc_loc = info.target_desc;
2054 if (arc_debug)
2055 debug_printf ("arc: Target description initialization.\n");
2056
2057 /* If target doesn't provide a description, use the default ones. */
2058 if (!tdesc_has_registers (tdesc_loc))
2059 {
2060 arc_gdbarch_features features
2061 = arc_gdbarch_features_create (info.abfd,
2062 info.bfd_arch_info->mach);
2063 tdesc_loc = arc_lookup_target_description (features);
2064 }
2065 gdb_assert (tdesc_loc != nullptr);
2066
2067 if (arc_debug)
2068 debug_printf ("arc: Have got a target description\n");
2069
2070 const struct tdesc_feature *feature_core
2071 = tdesc_find_feature (tdesc_loc, ARC_CORE_FEATURE_NAME);
2072 const struct tdesc_feature *feature_aux
2073 = tdesc_find_feature (tdesc_loc, ARC_AUX_FEATURE_NAME);
2074
2075 /* Maybe there still is a chance to salvage the input. */
2076 if (feature_core == nullptr)
2077 feature_core = find_obsolete_core_names (tdesc_loc);
2078 if (feature_aux == nullptr)
2079 feature_aux = find_obsolete_aux_names (tdesc_loc);
2080
2081 if (feature_core == nullptr)
2082 {
2083 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2084 "target description.\n"), ARC_CORE_FEATURE_NAME);
2085 return false;
2086 }
2087
2088 if (feature_aux == nullptr)
2089 {
2090 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2091 "target description.\n"), ARC_AUX_FEATURE_NAME);
2092 return false;
2093 }
2094
2095 const arc_register_feature *arc_core_reg_feature
2096 = determine_core_reg_feature_set (info.bfd_arch_info->mach);
2097 const arc_register_feature *arc_aux_reg_feature
2098 = determine_aux_reg_feature_set ();
2099
2100 struct tdesc_arch_data *tdesc_data_loc = tdesc_data_alloc ();
2101
2102 arc_update_acc_reg_names (info.byte_order);
2103
2104 bool valid_p = arc_check_tdesc_feature (tdesc_data_loc,
2105 feature_core,
2106 arc_core_reg_feature);
2107
2108 valid_p &= arc_check_tdesc_feature (tdesc_data_loc,
2109 feature_aux,
2110 arc_aux_reg_feature);
2111
2112 if (!valid_p)
2113 {
2114 if (arc_debug)
2115 debug_printf ("arc: Target description is not valid\n");
2116 tdesc_data_cleanup (tdesc_data_loc);
2117 return false;
2118 }
2119
2120 *tdesc = tdesc_loc;
2121 *tdesc_data = tdesc_data_loc;
2122
2123 return true;
2124 }
2125
2126 /* Implement the type_align gdbarch function. */
2127
2128 static ULONGEST
2129 arc_type_align (struct gdbarch *gdbarch, struct type *type)
2130 {
2131 switch (type->code ())
2132 {
2133 case TYPE_CODE_PTR:
2134 case TYPE_CODE_FUNC:
2135 case TYPE_CODE_FLAGS:
2136 case TYPE_CODE_INT:
2137 case TYPE_CODE_RANGE:
2138 case TYPE_CODE_FLT:
2139 case TYPE_CODE_ENUM:
2140 case TYPE_CODE_REF:
2141 case TYPE_CODE_RVALUE_REF:
2142 case TYPE_CODE_CHAR:
2143 case TYPE_CODE_BOOL:
2144 case TYPE_CODE_DECFLOAT:
2145 case TYPE_CODE_METHODPTR:
2146 case TYPE_CODE_MEMBERPTR:
2147 type = check_typedef (type);
2148 return std::min<ULONGEST> (4, TYPE_LENGTH (type));
2149 default:
2150 return 0;
2151 }
2152 }
2153
2154 /* Implement the "init" gdbarch method. */
2155
2156 static struct gdbarch *
2157 arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2158 {
2159 const struct target_desc *tdesc;
2160 struct tdesc_arch_data *tdesc_data;
2161
2162 if (arc_debug)
2163 debug_printf ("arc: Architecture initialization.\n");
2164
2165 if (!arc_tdesc_init (info, &tdesc, &tdesc_data))
2166 return NULL;
2167
2168 /* Allocate the ARC-private target-dependent information structure, and the
2169 GDB target-independent information structure. */
2170 struct gdbarch_tdep *tdep = XCNEW (struct gdbarch_tdep);
2171 tdep->jb_pc = -1; /* No longjmp support by default. */
2172 struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
2173
2174 /* Data types. */
2175 set_gdbarch_short_bit (gdbarch, 16);
2176 set_gdbarch_int_bit (gdbarch, 32);
2177 set_gdbarch_long_bit (gdbarch, 32);
2178 set_gdbarch_long_long_bit (gdbarch, 64);
2179 set_gdbarch_type_align (gdbarch, arc_type_align);
2180 set_gdbarch_float_bit (gdbarch, 32);
2181 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
2182 set_gdbarch_double_bit (gdbarch, 64);
2183 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
2184 set_gdbarch_ptr_bit (gdbarch, 32);
2185 set_gdbarch_addr_bit (gdbarch, 32);
2186 set_gdbarch_char_signed (gdbarch, 0);
2187
2188 set_gdbarch_write_pc (gdbarch, arc_write_pc);
2189
2190 set_gdbarch_virtual_frame_pointer (gdbarch, arc_virtual_frame_pointer);
2191
2192 /* tdesc_use_registers expects gdbarch_num_regs to return number of registers
2193 parsed by gdbarch_init, and then it will add all of the remaining
2194 registers and will increase number of registers. */
2195 set_gdbarch_num_regs (gdbarch, ARC_LAST_REGNUM + 1);
2196 set_gdbarch_num_pseudo_regs (gdbarch, 0);
2197 set_gdbarch_sp_regnum (gdbarch, ARC_SP_REGNUM);
2198 set_gdbarch_pc_regnum (gdbarch, ARC_PC_REGNUM);
2199 set_gdbarch_ps_regnum (gdbarch, ARC_STATUS32_REGNUM);
2200 set_gdbarch_fp0_regnum (gdbarch, -1); /* No FPU registers. */
2201
2202 set_gdbarch_push_dummy_call (gdbarch, arc_push_dummy_call);
2203 set_gdbarch_push_dummy_code (gdbarch, arc_push_dummy_code);
2204
2205 set_gdbarch_cannot_fetch_register (gdbarch, arc_cannot_fetch_register);
2206 set_gdbarch_cannot_store_register (gdbarch, arc_cannot_store_register);
2207
2208 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2209
2210 set_gdbarch_return_value (gdbarch, arc_return_value);
2211
2212 set_gdbarch_skip_prologue (gdbarch, arc_skip_prologue);
2213 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2214
2215 set_gdbarch_breakpoint_kind_from_pc (gdbarch, arc_breakpoint_kind_from_pc);
2216 set_gdbarch_sw_breakpoint_from_kind (gdbarch, arc_sw_breakpoint_from_kind);
2217
2218 /* On ARC 600 BRK_S instruction advances PC, unlike other ARC cores. */
2219 if (!arc_mach_is_arc600 (gdbarch))
2220 set_gdbarch_decr_pc_after_break (gdbarch, 0);
2221 else
2222 set_gdbarch_decr_pc_after_break (gdbarch, 2);
2223
2224 set_gdbarch_frame_align (gdbarch, arc_frame_align);
2225
2226 set_gdbarch_print_insn (gdbarch, arc_delayed_print_insn);
2227
2228 set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
2229
2230 /* "nonsteppable" watchpoint means that watchpoint triggers before
2231 instruction is committed, therefore it is required to remove watchpoint
2232 to step though instruction that triggers it. ARC watchpoints trigger
2233 only after instruction is committed, thus there is no need to remove
2234 them. In fact on ARC watchpoint for memory writes may trigger with more
2235 significant delay, like one or two instructions, depending on type of
2236 memory where write is performed (CCM or external) and next instruction
2237 after the memory write. */
2238 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 0);
2239
2240 /* This doesn't include possible long-immediate value. */
2241 set_gdbarch_max_insn_length (gdbarch, 4);
2242
2243 /* Frame unwinders and sniffers. */
2244 dwarf2_frame_set_init_reg (gdbarch, arc_dwarf2_frame_init_reg);
2245 dwarf2_append_unwinders (gdbarch);
2246 frame_unwind_append_unwinder (gdbarch, &arc_frame_unwind);
2247 frame_base_set_default (gdbarch, &arc_normal_base);
2248
2249 /* Setup stuff specific to a particular environment (baremetal or Linux).
2250 It can override functions set earlier. */
2251 gdbarch_init_osabi (info, gdbarch);
2252
2253 if (tdep->jb_pc >= 0)
2254 set_gdbarch_get_longjmp_target (gdbarch, arc_get_longjmp_target);
2255
2256 /* Disassembler options. Enforce CPU if it was specified in XML target
2257 description, otherwise use default method of determining CPU (ELF private
2258 header). */
2259 if (info.target_desc != NULL)
2260 {
2261 const struct bfd_arch_info *tdesc_arch
2262 = tdesc_architecture (info.target_desc);
2263 if (tdesc_arch != NULL)
2264 {
2265 xfree (arc_disassembler_options);
2266 /* FIXME: It is not really good to change disassembler options
2267 behind the scene, because that might override options
2268 specified by the user. However as of now ARC doesn't support
2269 `set disassembler-options' hence this code is the only place
2270 where options are changed. It also changes options for all
2271 existing gdbarches, which also can be problematic, if
2272 arc_gdbarch_init will start reusing existing gdbarch
2273 instances. */
2274 /* Target description specifies a BFD architecture, which is
2275 different from ARC cpu, as accepted by disassembler (and most
2276 other ARC tools), because cpu values are much more fine grained -
2277 there can be multiple cpu values per single BFD architecture. As
2278 a result this code should translate architecture to some cpu
2279 value. Since there is no info on exact cpu configuration, it is
2280 best to use the most feature-rich CPU, so that disassembler will
2281 recognize all instructions available to the specified
2282 architecture. */
2283 switch (tdesc_arch->mach)
2284 {
2285 case bfd_mach_arc_arc601:
2286 arc_disassembler_options = xstrdup ("cpu=arc601");
2287 break;
2288 case bfd_mach_arc_arc600:
2289 arc_disassembler_options = xstrdup ("cpu=arc600");
2290 break;
2291 case bfd_mach_arc_arc700:
2292 arc_disassembler_options = xstrdup ("cpu=arc700");
2293 break;
2294 case bfd_mach_arc_arcv2:
2295 /* Machine arcv2 has three arches: ARCv2, EM and HS; where ARCv2
2296 is treated as EM. */
2297 if (arc_arch_is_hs (tdesc_arch))
2298 arc_disassembler_options = xstrdup ("cpu=hs38_linux");
2299 else
2300 arc_disassembler_options = xstrdup ("cpu=em4_fpuda");
2301 break;
2302 default:
2303 arc_disassembler_options = NULL;
2304 break;
2305 }
2306 set_gdbarch_disassembler_options (gdbarch,
2307 &arc_disassembler_options);
2308 }
2309 }
2310
2311 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
2312
2313 return gdbarch;
2314 }
2315
2316 /* Implement the "dump_tdep" gdbarch method. */
2317
2318 static void
2319 arc_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
2320 {
2321 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2322
2323 fprintf_unfiltered (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
2324 }
2325
2326 /* This command accepts single argument - address of instruction to
2327 disassemble. */
2328
2329 static void
2330 dump_arc_instruction_command (const char *args, int from_tty)
2331 {
2332 struct value *val;
2333 if (args != NULL && strlen (args) > 0)
2334 val = evaluate_expression (parse_expression (args).get ());
2335 else
2336 val = access_value_history (0);
2337 record_latest_value (val);
2338
2339 CORE_ADDR address = value_as_address (val);
2340 struct arc_instruction insn;
2341 struct disassemble_info di = arc_disassemble_info (target_gdbarch ());
2342 arc_insn_decode (address, &di, arc_delayed_print_insn, &insn);
2343 arc_insn_dump (insn);
2344 }
2345
2346 void _initialize_arc_tdep ();
2347 void
2348 _initialize_arc_tdep ()
2349 {
2350 gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep);
2351
2352 /* Register ARC-specific commands with gdb. */
2353
2354 /* Add root prefix command for "maintenance print arc" commands. */
2355 add_show_prefix_cmd ("arc", class_maintenance,
2356 _("ARC-specific maintenance commands for printing GDB "
2357 "internal state."),
2358 &maintenance_print_arc_list, "maintenance print arc ",
2359 0, &maintenanceprintlist);
2360
2361 add_cmd ("arc-instruction", class_maintenance,
2362 dump_arc_instruction_command,
2363 _("Dump arc_instruction structure for specified address."),
2364 &maintenance_print_arc_list);
2365
2366 /* Debug internals for ARC GDB. */
2367 add_setshow_zinteger_cmd ("arc", class_maintenance,
2368 &arc_debug,
2369 _("Set ARC specific debugging."),
2370 _("Show ARC specific debugging."),
2371 _("Non-zero enables ARC specific debugging."),
2372 NULL, NULL, &setdebuglist, &showdebuglist);
2373 }