Fix null pointer dereference in process_debug_info()
[binutils-gdb.git] / gdb / arc-tdep.c
blob5684f324233c196256a68e282b23be7304d706e7
1 /* Target dependent code for ARC architecture, for GDB.
3 Copyright 2005-2024 Free Software Foundation, Inc.
4 Contributed by Synopsys Inc.
6 This file is part of GDB.
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.
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.
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/>. */
21 /* GDB header files. */
22 #include "arch-utils.h"
23 #include "elf-bfd.h"
24 #include "disasm.h"
25 #include "dwarf2/frame.h"
26 #include "frame-base.h"
27 #include "frame-unwind.h"
28 #include "gdbcore.h"
29 #include "inferior.h"
30 #include "reggroups.h"
31 #include "gdbcmd.h"
32 #include "objfiles.h"
33 #include "osabi.h"
34 #include "prologue-value.h"
35 #include "target-descriptions.h"
36 #include "trad-frame.h"
38 /* ARC header files. */
39 #include "opcode/arc.h"
40 #include "opcodes/arc-dis.h"
41 #include "arc-tdep.h"
42 #include "arch/arc.h"
44 /* Standard headers. */
45 #include <algorithm>
46 #include <sstream>
48 /* The frame unwind cache for ARC. */
50 struct arc_frame_cache
52 /* The stack pointer at the time this frame was created; i.e. the caller's
53 stack pointer when this function was called. It is used to identify this
54 frame. */
55 CORE_ADDR prev_sp;
57 /* Register that is a base for this frame - FP for normal frame, SP for
58 non-FP frames. */
59 int frame_base_reg;
61 /* Offset from the previous SP to the current frame base. If GCC uses
62 `SUB SP,SP,offset` to allocate space for local variables, then it will be
63 done after setting up a frame pointer, but it still will be considered
64 part of prologue, therefore SP will be lesser than FP at the end of the
65 prologue analysis. In this case that would be an offset from old SP to a
66 new FP. But in case of non-FP frames, frame base is an SP and thus that
67 would be an offset from old SP to new SP. What is important is that this
68 is an offset from old SP to a known register, so it can be used to find
69 old SP.
71 Using FP is preferable, when possible, because SP can change in function
72 body after prologue due to alloca, variadic arguments or other shenanigans.
73 If that is the case in the caller frame, then PREV_SP will point to SP at
74 the moment of function call, but it will be different from SP value at the
75 end of the caller prologue. As a result it will not be possible to
76 reconstruct caller's frame and go past it in the backtrace. Those things
77 are unlikely to happen to FP - FP value at the moment of function call (as
78 stored on stack in callee prologue) is also an FP value at the end of the
79 caller's prologue. */
81 LONGEST frame_base_offset;
83 /* Store addresses for registers saved in prologue. During prologue analysis
84 GDB stores offsets relatively to "old SP", then after old SP is evaluated,
85 offsets are replaced with absolute addresses. */
86 trad_frame_saved_reg *saved_regs;
89 /* Global debug flag. */
91 bool arc_debug;
93 /* List of "maintenance print arc" commands. */
95 static struct cmd_list_element *maintenance_print_arc_list = NULL;
97 /* A set of registers that we expect to find in a tdesc_feature. These
98 are used in ARC_TDESC_INIT when processing the target description. */
100 struct arc_register_feature
102 /* Information for a single register. */
103 struct register_info
105 /* The GDB register number for this register. */
106 int regnum;
108 /* List of names for this register. The first name in this list is the
109 preferred name, the name GDB will use when describing this register. */
110 std::vector<const char *> names;
112 /* When true, this register must be present in this feature set. */
113 bool required_p;
116 /* The name for this feature. This is the name used to find this feature
117 within the target description. */
118 const char *name;
120 /* List of all the registers that we expect to encounter in this register
121 set. */
122 std::vector<struct register_info> registers;
125 /* Obsolete feature names for backward compatibility. */
126 static const char *ARC_CORE_V1_OBSOLETE_FEATURE_NAME
127 = "org.gnu.gdb.arc.core.arcompact";
128 static const char *ARC_CORE_V2_OBSOLETE_FEATURE_NAME
129 = "org.gnu.gdb.arc.core.v2";
130 static const char *ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME
131 = "org.gnu.gdb.arc.core-reduced.v2";
132 static const char *ARC_AUX_OBSOLETE_FEATURE_NAME
133 = "org.gnu.gdb.arc.aux-minimal";
134 /* Modern feature names. */
135 static const char *ARC_CORE_FEATURE_NAME = "org.gnu.gdb.arc.core";
136 static const char *ARC_AUX_FEATURE_NAME = "org.gnu.gdb.arc.aux";
138 /* ARCv1 (ARC600, ARC601, ARC700) general core registers feature set.
139 See also arc_update_acc_reg_names() for "accl/acch" names. */
141 static struct arc_register_feature arc_v1_core_reg_feature =
143 ARC_CORE_FEATURE_NAME,
145 { ARC_R0_REGNUM + 0, { "r0" }, true },
146 { ARC_R0_REGNUM + 1, { "r1" }, true },
147 { ARC_R0_REGNUM + 2, { "r2" }, true },
148 { ARC_R0_REGNUM + 3, { "r3" }, true },
149 { ARC_R0_REGNUM + 4, { "r4" }, false },
150 { ARC_R0_REGNUM + 5, { "r5" }, false },
151 { ARC_R0_REGNUM + 6, { "r6" }, false },
152 { ARC_R0_REGNUM + 7, { "r7" }, false },
153 { ARC_R0_REGNUM + 8, { "r8" }, false },
154 { ARC_R0_REGNUM + 9, { "r9" }, false },
155 { ARC_R0_REGNUM + 10, { "r10" }, true },
156 { ARC_R0_REGNUM + 11, { "r11" }, true },
157 { ARC_R0_REGNUM + 12, { "r12" }, true },
158 { ARC_R0_REGNUM + 13, { "r13" }, true },
159 { ARC_R0_REGNUM + 14, { "r14" }, true },
160 { ARC_R0_REGNUM + 15, { "r15" }, true },
161 { ARC_R0_REGNUM + 16, { "r16" }, false },
162 { ARC_R0_REGNUM + 17, { "r17" }, false },
163 { ARC_R0_REGNUM + 18, { "r18" }, false },
164 { ARC_R0_REGNUM + 19, { "r19" }, false },
165 { ARC_R0_REGNUM + 20, { "r20" }, false },
166 { ARC_R0_REGNUM + 21, { "r21" }, false },
167 { ARC_R0_REGNUM + 22, { "r22" }, false },
168 { ARC_R0_REGNUM + 23, { "r23" }, false },
169 { ARC_R0_REGNUM + 24, { "r24" }, false },
170 { ARC_R0_REGNUM + 25, { "r25" }, false },
171 { ARC_R0_REGNUM + 26, { "gp" }, true },
172 { ARC_R0_REGNUM + 27, { "fp" }, true },
173 { ARC_R0_REGNUM + 28, { "sp" }, true },
174 { ARC_R0_REGNUM + 29, { "ilink1" }, false },
175 { ARC_R0_REGNUM + 30, { "ilink2" }, false },
176 { ARC_R0_REGNUM + 31, { "blink" }, true },
177 { ARC_R0_REGNUM + 32, { "r32" }, false },
178 { ARC_R0_REGNUM + 33, { "r33" }, false },
179 { ARC_R0_REGNUM + 34, { "r34" }, false },
180 { ARC_R0_REGNUM + 35, { "r35" }, false },
181 { ARC_R0_REGNUM + 36, { "r36" }, false },
182 { ARC_R0_REGNUM + 37, { "r37" }, false },
183 { ARC_R0_REGNUM + 38, { "r38" }, false },
184 { ARC_R0_REGNUM + 39, { "r39" }, false },
185 { ARC_R0_REGNUM + 40, { "r40" }, false },
186 { ARC_R0_REGNUM + 41, { "r41" }, false },
187 { ARC_R0_REGNUM + 42, { "r42" }, false },
188 { ARC_R0_REGNUM + 43, { "r43" }, false },
189 { ARC_R0_REGNUM + 44, { "r44" }, false },
190 { ARC_R0_REGNUM + 45, { "r45" }, false },
191 { ARC_R0_REGNUM + 46, { "r46" }, false },
192 { ARC_R0_REGNUM + 47, { "r47" }, false },
193 { ARC_R0_REGNUM + 48, { "r48" }, false },
194 { ARC_R0_REGNUM + 49, { "r49" }, false },
195 { ARC_R0_REGNUM + 50, { "r50" }, false },
196 { ARC_R0_REGNUM + 51, { "r51" }, false },
197 { ARC_R0_REGNUM + 52, { "r52" }, false },
198 { ARC_R0_REGNUM + 53, { "r53" }, false },
199 { ARC_R0_REGNUM + 54, { "r54" }, false },
200 { ARC_R0_REGNUM + 55, { "r55" }, false },
201 { ARC_R0_REGNUM + 56, { "r56" }, false },
202 { ARC_R0_REGNUM + 57, { "r57" }, false },
203 { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
204 { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
205 { ARC_R0_REGNUM + 60, { "lp_count" }, false },
206 { ARC_R0_REGNUM + 61, { "reserved" }, false },
207 { ARC_R0_REGNUM + 62, { "limm" }, false },
208 { ARC_R0_REGNUM + 63, { "pcl" }, true }
212 /* ARCv2 (ARCHS) general core registers feature set. See also
213 arc_update_acc_reg_names() for "accl/acch" names. */
215 static struct arc_register_feature arc_v2_core_reg_feature =
217 ARC_CORE_FEATURE_NAME,
219 { ARC_R0_REGNUM + 0, { "r0" }, true },
220 { ARC_R0_REGNUM + 1, { "r1" }, true },
221 { ARC_R0_REGNUM + 2, { "r2" }, true },
222 { ARC_R0_REGNUM + 3, { "r3" }, true },
223 { ARC_R0_REGNUM + 4, { "r4" }, false },
224 { ARC_R0_REGNUM + 5, { "r5" }, false },
225 { ARC_R0_REGNUM + 6, { "r6" }, false },
226 { ARC_R0_REGNUM + 7, { "r7" }, false },
227 { ARC_R0_REGNUM + 8, { "r8" }, false },
228 { ARC_R0_REGNUM + 9, { "r9" }, false },
229 { ARC_R0_REGNUM + 10, { "r10" }, true },
230 { ARC_R0_REGNUM + 11, { "r11" }, true },
231 { ARC_R0_REGNUM + 12, { "r12" }, true },
232 { ARC_R0_REGNUM + 13, { "r13" }, true },
233 { ARC_R0_REGNUM + 14, { "r14" }, true },
234 { ARC_R0_REGNUM + 15, { "r15" }, true },
235 { ARC_R0_REGNUM + 16, { "r16" }, false },
236 { ARC_R0_REGNUM + 17, { "r17" }, false },
237 { ARC_R0_REGNUM + 18, { "r18" }, false },
238 { ARC_R0_REGNUM + 19, { "r19" }, false },
239 { ARC_R0_REGNUM + 20, { "r20" }, false },
240 { ARC_R0_REGNUM + 21, { "r21" }, false },
241 { ARC_R0_REGNUM + 22, { "r22" }, false },
242 { ARC_R0_REGNUM + 23, { "r23" }, false },
243 { ARC_R0_REGNUM + 24, { "r24" }, false },
244 { ARC_R0_REGNUM + 25, { "r25" }, false },
245 { ARC_R0_REGNUM + 26, { "gp" }, true },
246 { ARC_R0_REGNUM + 27, { "fp" }, true },
247 { ARC_R0_REGNUM + 28, { "sp" }, true },
248 { ARC_R0_REGNUM + 29, { "ilink" }, false },
249 { ARC_R0_REGNUM + 30, { "r30" }, true },
250 { ARC_R0_REGNUM + 31, { "blink" }, true },
251 { ARC_R0_REGNUM + 32, { "r32" }, false },
252 { ARC_R0_REGNUM + 33, { "r33" }, false },
253 { ARC_R0_REGNUM + 34, { "r34" }, false },
254 { ARC_R0_REGNUM + 35, { "r35" }, false },
255 { ARC_R0_REGNUM + 36, { "r36" }, false },
256 { ARC_R0_REGNUM + 37, { "r37" }, false },
257 { ARC_R0_REGNUM + 38, { "r38" }, false },
258 { ARC_R0_REGNUM + 39, { "r39" }, false },
259 { ARC_R0_REGNUM + 40, { "r40" }, false },
260 { ARC_R0_REGNUM + 41, { "r41" }, false },
261 { ARC_R0_REGNUM + 42, { "r42" }, false },
262 { ARC_R0_REGNUM + 43, { "r43" }, false },
263 { ARC_R0_REGNUM + 44, { "r44" }, false },
264 { ARC_R0_REGNUM + 45, { "r45" }, false },
265 { ARC_R0_REGNUM + 46, { "r46" }, false },
266 { ARC_R0_REGNUM + 47, { "r47" }, false },
267 { ARC_R0_REGNUM + 48, { "r48" }, false },
268 { ARC_R0_REGNUM + 49, { "r49" }, false },
269 { ARC_R0_REGNUM + 50, { "r50" }, false },
270 { ARC_R0_REGNUM + 51, { "r51" }, false },
271 { ARC_R0_REGNUM + 52, { "r52" }, false },
272 { ARC_R0_REGNUM + 53, { "r53" }, false },
273 { ARC_R0_REGNUM + 54, { "r54" }, false },
274 { ARC_R0_REGNUM + 55, { "r55" }, false },
275 { ARC_R0_REGNUM + 56, { "r56" }, false },
276 { ARC_R0_REGNUM + 57, { "r57" }, false },
277 { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
278 { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
279 { ARC_R0_REGNUM + 60, { "lp_count" }, false },
280 { ARC_R0_REGNUM + 61, { "reserved" }, false },
281 { ARC_R0_REGNUM + 62, { "limm" }, false },
282 { ARC_R0_REGNUM + 63, { "pcl" }, true }
286 /* The common auxiliary registers feature set. The REGNUM field
287 must match the ARC_REGNUM enum in arc-tdep.h. */
289 static const struct arc_register_feature arc_common_aux_reg_feature =
291 ARC_AUX_FEATURE_NAME,
293 { ARC_FIRST_AUX_REGNUM + 0, { "pc" }, true },
294 { ARC_FIRST_AUX_REGNUM + 1, { "status32" }, true },
295 { ARC_FIRST_AUX_REGNUM + 2, { "lp_start" }, false },
296 { ARC_FIRST_AUX_REGNUM + 3, { "lp_end" }, false },
297 { ARC_FIRST_AUX_REGNUM + 4, { "bta" }, false }
301 static std::string arc_disassembler_options;
303 /* Functions are sorted in the order as they are used in the
304 _initialize_arc_tdep (), which uses the same order as gdbarch.h. Static
305 functions are defined before the first invocation. */
307 /* Returns an unsigned value of OPERAND_NUM in instruction INSN.
308 For relative branch instructions returned value is an offset, not an actual
309 branch target. */
311 static ULONGEST
312 arc_insn_get_operand_value (const struct arc_instruction &insn,
313 unsigned int operand_num)
315 switch (insn.operands[operand_num].kind)
317 case ARC_OPERAND_KIND_LIMM:
318 gdb_assert (insn.limm_p);
319 return insn.limm_value;
320 case ARC_OPERAND_KIND_SHIMM:
321 return insn.operands[operand_num].value;
322 default:
323 /* Value in instruction is a register number. */
324 regcache *regcache = get_thread_regcache (inferior_thread ());
325 ULONGEST value;
326 regcache_cooked_read_unsigned (regcache,
327 insn.operands[operand_num].value,
328 &value);
329 return value;
333 /* Like arc_insn_get_operand_value, but returns a signed value. */
335 static LONGEST
336 arc_insn_get_operand_value_signed (const struct arc_instruction &insn,
337 unsigned int operand_num)
339 switch (insn.operands[operand_num].kind)
341 case ARC_OPERAND_KIND_LIMM:
342 gdb_assert (insn.limm_p);
343 /* Convert unsigned raw value to signed one. This assumes 2's
344 complement arithmetic, but so is the LONG_MIN value from generic
345 defs.h and that assumption is true for ARC. */
346 static_assert (sizeof (insn.limm_value) == sizeof (int));
347 return (((LONGEST) insn.limm_value) ^ INT_MIN) - INT_MIN;
348 case ARC_OPERAND_KIND_SHIMM:
349 /* Sign conversion has been done by binutils. */
350 return insn.operands[operand_num].value;
351 default:
352 /* Value in instruction is a register number. */
353 regcache *regcache = get_thread_regcache (inferior_thread ());
354 LONGEST value;
355 regcache_cooked_read_signed (regcache,
356 insn.operands[operand_num].value,
357 &value);
358 return value;
362 /* Get register with base address of memory operation. */
364 static int
365 arc_insn_get_memory_base_reg (const struct arc_instruction &insn)
367 /* POP_S and PUSH_S have SP as an implicit argument in a disassembler. */
368 if (insn.insn_class == PUSH || insn.insn_class == POP)
369 return ARC_SP_REGNUM;
371 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
373 /* Other instructions all have at least two operands: operand 0 is data,
374 operand 1 is address. Operand 2 is offset from address. However, see
375 comment to arc_instruction.operands - in some cases, third operand may be
376 missing, namely if it is 0. */
377 gdb_assert (insn.operands_count >= 2);
378 return insn.operands[1].value;
381 /* Get offset of a memory operation INSN. */
383 static CORE_ADDR
384 arc_insn_get_memory_offset (const struct arc_instruction &insn)
386 /* POP_S and PUSH_S have offset as an implicit argument in a
387 disassembler. */
388 if (insn.insn_class == POP)
389 return 4;
390 else if (insn.insn_class == PUSH)
391 return -4;
393 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
395 /* Other instructions all have at least two operands: operand 0 is data,
396 operand 1 is address. Operand 2 is offset from address. However, see
397 comment to arc_instruction.operands - in some cases, third operand may be
398 missing, namely if it is 0. */
399 if (insn.operands_count < 3)
400 return 0;
402 CORE_ADDR value = arc_insn_get_operand_value (insn, 2);
403 /* Handle scaling. */
404 if (insn.writeback_mode == ARC_WRITEBACK_AS)
406 /* Byte data size is not valid for AS. Halfword means shift by 1 bit.
407 Word and double word means shift by 2 bits. */
408 gdb_assert (insn.data_size_mode != ARC_SCALING_B);
409 if (insn.data_size_mode == ARC_SCALING_H)
410 value <<= 1;
411 else
412 value <<= 2;
414 return value;
417 CORE_ADDR
418 arc_insn_get_branch_target (const struct arc_instruction &insn)
420 gdb_assert (insn.is_control_flow);
422 /* BI [c]: PC = nextPC + (c << 2). */
423 if (insn.insn_class == BI)
425 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
426 return arc_insn_get_linear_next_pc (insn) + (reg_value << 2);
428 /* BIH [c]: PC = nextPC + (c << 1). */
429 else if (insn.insn_class == BIH)
431 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
432 return arc_insn_get_linear_next_pc (insn) + (reg_value << 1);
434 /* JLI and EI. */
435 /* JLI and EI depend on optional AUX registers. Not supported right now. */
436 else if (insn.insn_class == JLI)
438 gdb_printf (gdb_stderr,
439 "JLI_S instruction is not supported by the GDB.");
440 return 0;
442 else if (insn.insn_class == EI)
444 gdb_printf (gdb_stderr,
445 "EI_S instruction is not supported by the GDB.");
446 return 0;
448 /* LEAVE_S: PC = BLINK. */
449 else if (insn.insn_class == LEAVE)
451 regcache *regcache = get_thread_regcache (inferior_thread ());
452 ULONGEST value;
453 regcache_cooked_read_unsigned (regcache, ARC_BLINK_REGNUM, &value);
454 return value;
456 /* BBIT0/1, BRcc: PC = currentPC + operand. */
457 else if (insn.insn_class == BBIT0 || insn.insn_class == BBIT1
458 || insn.insn_class == BRCC)
460 /* Most instructions has branch target as their sole argument. However
461 conditional brcc/bbit has it as a third operand. */
462 CORE_ADDR pcrel_addr = arc_insn_get_operand_value (insn, 2);
464 /* Offset is relative to the 4-byte aligned address of the current
465 instruction, hence last two bits should be truncated. */
466 return pcrel_addr + align_down (insn.address, 4);
468 /* DBNZ is the only branch instruction that keeps a branch address in
469 the second operand. It must be intercepted and treated differently. */
470 else if (insn.insn_class == DBNZ)
472 CORE_ADDR pcrel_addr = arc_insn_get_operand_value_signed (insn, 1);
474 /* Offset is relative to the 4-byte aligned address of the current
475 instruction, hence last two bits should be truncated. */
476 return pcrel_addr + align_down (insn.address, 4);
478 /* B, Bcc, BL, BLcc, LP, LPcc: PC = currentPC + operand. */
479 else if (insn.insn_class == BRANCH || insn.insn_class == LOOP)
481 CORE_ADDR pcrel_addr = arc_insn_get_operand_value (insn, 0);
483 /* Offset is relative to the 4-byte aligned address of the current
484 instruction, hence last two bits should be truncated. */
485 return pcrel_addr + align_down (insn.address, 4);
487 /* J, Jcc, JL, JLcc: PC = operand. */
488 else if (insn.insn_class == JUMP)
490 /* All jumps are single-operand. */
491 return arc_insn_get_operand_value (insn, 0);
494 /* This is some new and unknown instruction. */
495 gdb_assert_not_reached ("Unknown branch instruction.");
498 /* Dump INSN into gdb_stdlog. */
500 static void
501 arc_insn_dump (const struct arc_instruction &insn)
503 struct gdbarch *gdbarch = current_inferior ()->arch ();
505 arc_print ("Dumping arc_instruction at %s\n",
506 paddress (gdbarch, insn.address));
507 arc_print ("\tlength = %u\n", insn.length);
509 if (!insn.valid)
511 arc_print ("\tThis is not a valid ARC instruction.\n");
512 return;
515 arc_print ("\tlength_with_limm = %u\n", insn.length + (insn.limm_p ? 4 : 0));
516 arc_print ("\tcc = 0x%x\n", insn.condition_code);
517 arc_print ("\tinsn_class = %u\n", insn.insn_class);
518 arc_print ("\tis_control_flow = %i\n", insn.is_control_flow);
519 arc_print ("\thas_delay_slot = %i\n", insn.has_delay_slot);
521 CORE_ADDR next_pc = arc_insn_get_linear_next_pc (insn);
522 arc_print ("\tlinear_next_pc = %s\n", paddress (gdbarch, next_pc));
524 if (insn.is_control_flow)
526 CORE_ADDR t = arc_insn_get_branch_target (insn);
527 arc_print ("\tbranch_target = %s\n", paddress (gdbarch, t));
530 arc_print ("\tlimm_p = %i\n", insn.limm_p);
531 if (insn.limm_p)
532 arc_print ("\tlimm_value = 0x%08x\n", insn.limm_value);
534 if (insn.insn_class == STORE || insn.insn_class == LOAD
535 || insn.insn_class == PUSH || insn.insn_class == POP)
537 arc_print ("\twriteback_mode = %u\n", insn.writeback_mode);
538 arc_print ("\tdata_size_mode = %u\n", insn.data_size_mode);
539 arc_print ("\tmemory_base_register = %s\n",
540 gdbarch_register_name (gdbarch,
541 arc_insn_get_memory_base_reg (insn)));
542 /* get_memory_offset returns an unsigned CORE_ADDR, but treat it as a
543 LONGEST for a nicer representation. */
544 arc_print ("\taddr_offset = %s\n",
545 plongest (arc_insn_get_memory_offset (insn)));
548 arc_print ("\toperands_count = %u\n", insn.operands_count);
549 for (unsigned int i = 0; i < insn.operands_count; ++i)
551 int is_reg = (insn.operands[i].kind == ARC_OPERAND_KIND_REG);
553 arc_print ("\toperand[%u] = {\n", i);
554 arc_print ("\t\tis_reg = %i\n", is_reg);
555 if (is_reg)
556 arc_print ("\t\tregister = %s\n",
557 gdbarch_register_name (gdbarch, insn.operands[i].value));
558 /* Don't know if this value is signed or not, so print both
559 representations. This tends to look quite ugly, especially for big
560 numbers. */
561 arc_print ("\t\tunsigned value = %s\n",
562 pulongest (arc_insn_get_operand_value (insn, i)));
563 arc_print ("\t\tsigned value = %s\n",
564 plongest (arc_insn_get_operand_value_signed (insn, i)));
565 arc_print ("\t}\n");
569 CORE_ADDR
570 arc_insn_get_linear_next_pc (const struct arc_instruction &insn)
572 /* In ARC long immediate is always 4 bytes. */
573 return (insn.address + insn.length + (insn.limm_p ? 4 : 0));
576 /* Implement the "write_pc" gdbarch method.
578 In ARC PC register is a normal register so in most cases setting PC value
579 is a straightforward process: debugger just writes PC value. However it
580 gets trickier in case when current instruction is an instruction in delay
581 slot. In this case CPU will execute instruction at current PC value, then
582 will set PC to the current value of BTA register; also current instruction
583 cannot be branch/jump and some of the other instruction types. Thus if
584 debugger would try to just change PC value in this case, this instruction
585 will get executed, but then core will "jump" to the original branch target.
587 Whether current instruction is a delay-slot instruction or not is indicated
588 by DE bit in STATUS32 register indicates if current instruction is a delay
589 slot instruction. This bit is writable by debug host, which allows debug
590 host to prevent core from jumping after the delay slot instruction. It
591 also works in another direction: setting this bit will make core to treat
592 any current instructions as a delay slot instruction and to set PC to the
593 current value of BTA register.
595 To workaround issues with changing PC register while in delay slot
596 instruction, debugger should check for the STATUS32.DE bit and reset it if
597 it is set. No other change is required in this function. Most common
598 case, where this function might be required is calling inferior functions
599 from debugger. Generic GDB logic handles this pretty well: current values
600 of registers are stored, value of PC is changed (that is the job of this
601 function), and after inferior function is executed, GDB restores all
602 registers, include BTA and STATUS32, which also means that core is returned
603 to its original state of being halted on delay slot instructions.
605 This method is useless for ARC 600, because it doesn't have externally
606 exposed BTA register. In the case of ARC 600 it is impossible to restore
607 core to its state in all occasions thus core should never be halted (from
608 the perspective of debugger host) in the delay slot. */
610 static void
611 arc_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
613 struct gdbarch *gdbarch = regcache->arch ();
615 arc_debug_printf ("Writing PC, new value=%s",
616 paddress (gdbarch, new_pc));
618 regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
619 new_pc);
621 ULONGEST status32;
622 regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
623 &status32);
625 if ((status32 & ARC_STATUS32_DE_MASK) != 0)
627 arc_debug_printf ("Changing PC while in delay slot. Will "
628 "reset STATUS32.DE bit to zero. Value of STATUS32 "
629 "register is 0x%s",
630 phex (status32, ARC_REGISTER_SIZE));
632 /* Reset bit and write to the cache. */
633 status32 &= ~0x40;
634 regcache_cooked_write_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
635 status32);
639 /* Implement the "virtual_frame_pointer" gdbarch method.
641 According to ABI the FP (r27) is used to point to the middle of the current
642 stack frame, just below the saved FP and before local variables, register
643 spill area and outgoing args. However for optimization levels above O2 and
644 in any case in leaf functions, the frame pointer is usually not set at all.
645 The exception being when handling nested functions.
647 We use this function to return a "virtual" frame pointer, marking the start
648 of the current stack frame as a register-offset pair. If the FP is not
649 being used, then it should return SP, with an offset of the frame size.
651 The current implementation doesn't actually know the frame size, nor
652 whether the FP is actually being used, so for now we just return SP and an
653 offset of zero. This is no worse than other architectures, but is needed
654 to avoid assertion failures.
656 TODO: Can we determine the frame size to get a correct offset?
658 PC is a program counter where we need the virtual FP. REG_PTR is the base
659 register used for the virtual FP. OFFSET_PTR is the offset used for the
660 virtual FP. */
662 static void
663 arc_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
664 int *reg_ptr, LONGEST *offset_ptr)
666 *reg_ptr = gdbarch_sp_regnum (gdbarch);
667 *offset_ptr = 0;
670 /* Implement the "push_dummy_call" gdbarch method.
672 Stack Frame Layout
674 This shows the layout of the stack frame for the general case of a
675 function call; a given function might not have a variable number of
676 arguments or local variables, or might not save any registers, so it would
677 not have the corresponding frame areas. Additionally, a leaf function
678 (i.e. one which calls no other functions) does not need to save the
679 contents of the BLINK register (which holds its return address), and a
680 function might not have a frame pointer.
682 The stack grows downward, so SP points below FP in memory; SP always
683 points to the last used word on the stack, not the first one.
685 | | |
686 | arg word N | | caller's
687 | : | | frame
688 | arg word 10 | |
689 | arg word 9 | |
690 old SP ---> +-----------------------+ --+
691 | | |
692 | callee-saved | |
693 | registers | |
694 | including fp, blink | |
695 | | | callee's
696 new FP ---> +-----------------------+ | frame
697 | | |
698 | local | |
699 | variables | |
700 | | |
701 | register | |
702 | spill area | |
703 | | |
704 | outgoing args | |
705 | | |
706 new SP ---> +-----------------------+ --+
708 | unused |
713 downwards
715 The list of arguments to be passed to a function is considered to be a
716 sequence of _N_ words (as though all the parameters were stored in order in
717 memory with each parameter occupying an integral number of words). Words
718 1..8 are passed in registers 0..7; if the function has more than 8 words of
719 arguments then words 9..@em N are passed on the stack in the caller's frame.
721 If the function has a variable number of arguments, e.g. it has a form such
722 as `function (p1, p2, ...);' and _P_ words are required to hold the values
723 of the named parameters (which are passed in registers 0..@em P -1), then
724 the remaining 8 - _P_ words passed in registers _P_..7 are spilled into the
725 top of the frame so that the anonymous parameter words occupy a continuous
726 region.
728 Any arguments are already in target byte order. We just need to store
729 them!
731 BP_ADDR is the return address where breakpoint must be placed. NARGS is
732 the number of arguments to the function. ARGS is the arguments values (in
733 target byte order). SP is the Current value of SP register. STRUCT_RETURN
734 is TRUE if structures are returned by the function. STRUCT_ADDR is the
735 hidden address for returning a struct. Returns SP of a new frame. */
737 static CORE_ADDR
738 arc_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
739 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
740 struct value **args, CORE_ADDR sp,
741 function_call_return_method return_method,
742 CORE_ADDR struct_addr)
744 arc_debug_printf ("nargs = %d", nargs);
746 int arg_reg = ARC_FIRST_ARG_REGNUM;
748 /* Push the return address. */
749 regcache_cooked_write_unsigned (regcache, ARC_BLINK_REGNUM, bp_addr);
751 /* Are we returning a value using a structure return instead of a normal
752 value return? If so, struct_addr is the address of the reserved space for
753 the return structure to be written on the stack, and that address is
754 passed to that function as a hidden first argument. */
755 if (return_method == return_method_struct)
757 /* Pass the return address in the first argument register. */
758 regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
760 arc_debug_printf ("struct return address %s passed in R%d",
761 print_core_address (gdbarch, struct_addr), arg_reg);
763 arg_reg++;
766 if (nargs > 0)
768 unsigned int total_space = 0;
770 /* How much space do the arguments occupy in total? Must round each
771 argument's size up to an integral number of words. */
772 for (int i = 0; i < nargs; i++)
774 unsigned int len = args[i]->type ()->length ();
775 unsigned int space = align_up (len, 4);
777 total_space += space;
779 arc_debug_printf ("arg %d: %u bytes -> %u", i, len, space);
782 /* Allocate a buffer to hold a memory image of the arguments. */
783 gdb_byte *memory_image = XCNEWVEC (gdb_byte, total_space);
785 /* Now copy all of the arguments into the buffer, correctly aligned. */
786 gdb_byte *data = memory_image;
787 for (int i = 0; i < nargs; i++)
789 unsigned int len = args[i]->type ()->length ();
790 unsigned int space = align_up (len, 4);
792 memcpy (data, args[i]->contents ().data (), (size_t) len);
793 arc_debug_printf ("copying arg %d, val 0x%08x, len %d to mem",
794 i, *((int *) args[i]->contents ().data ()),
795 len);
797 data += space;
800 /* Now load as much as possible of the memory image into registers. */
801 data = memory_image;
802 while (arg_reg <= ARC_LAST_ARG_REGNUM)
804 arc_debug_printf ("passing 0x%02x%02x%02x%02x in register R%d",
805 data[0], data[1], data[2], data[3], arg_reg);
807 /* Note we don't use write_unsigned here, since that would convert
808 the byte order, but we are already in the correct byte order. */
809 regcache->cooked_write (arg_reg, data);
811 data += ARC_REGISTER_SIZE;
812 total_space -= ARC_REGISTER_SIZE;
814 /* All the data is now in registers. */
815 if (total_space == 0)
816 break;
818 arg_reg++;
821 /* If there is any data left, push it onto the stack (in a single write
822 operation). */
823 if (total_space > 0)
825 arc_debug_printf ("passing %d bytes on stack\n", total_space);
827 sp -= total_space;
828 write_memory (sp, data, (int) total_space);
831 xfree (memory_image);
834 /* Finally, update the SP register. */
835 regcache_cooked_write_unsigned (regcache, gdbarch_sp_regnum (gdbarch), sp);
837 return sp;
840 /* Implement the "push_dummy_code" gdbarch method.
842 We don't actually push any code. We just identify where a breakpoint can
843 be inserted to which we are can return and the resume address where we
844 should be called.
846 ARC does not necessarily have an executable stack, so we can't put the
847 return breakpoint there. Instead we put it at the entry point of the
848 function. This means the SP is unchanged.
850 SP is a current stack pointer FUNADDR is an address of the function to be
851 called. ARGS is arguments to pass. NARGS is a number of args to pass.
852 VALUE_TYPE is a type of value returned. REAL_PC is a resume address when
853 the function is called. BP_ADDR is an address where breakpoint should be
854 set. Returns the updated stack pointer. */
856 static CORE_ADDR
857 arc_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
858 struct value **args, int nargs, struct type *value_type,
859 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
860 struct regcache *regcache)
862 *real_pc = funaddr;
863 *bp_addr = entry_point_address ();
864 return sp;
867 /* Implement the "cannot_fetch_register" gdbarch method. */
869 static int
870 arc_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
872 /* Assume that register is readable if it is unknown. LIMM and RESERVED are
873 not real registers, but specific register numbers. They are available as
874 regnums to align architectural register numbers with GDB internal regnums,
875 but they shouldn't appear in target descriptions generated by
876 GDB-servers. */
877 switch (regnum)
879 case ARC_RESERVED_REGNUM:
880 case ARC_LIMM_REGNUM:
881 return true;
882 default:
883 return false;
887 /* Implement the "cannot_store_register" gdbarch method. */
889 static int
890 arc_cannot_store_register (struct gdbarch *gdbarch, int regnum)
892 /* Assume that register is writable if it is unknown. See comment in
893 arc_cannot_fetch_register about LIMM and RESERVED. */
894 switch (regnum)
896 case ARC_RESERVED_REGNUM:
897 case ARC_LIMM_REGNUM:
898 case ARC_PCL_REGNUM:
899 return true;
900 default:
901 return false;
905 /* Get the return value of a function from the registers/memory used to
906 return it, according to the convention used by the ABI - 4-bytes values are
907 in the R0, while 8-byte values are in the R0-R1.
909 TODO: This implementation ignores the case of "complex double", where
910 according to ABI, value is returned in the R0-R3 registers.
912 TYPE is a returned value's type. VALBUF is a buffer for the returned
913 value. */
915 static void
916 arc_extract_return_value (struct gdbarch *gdbarch, struct type *type,
917 struct regcache *regcache, gdb_byte *valbuf)
919 unsigned int len = type->length ();
921 arc_debug_printf ("called");
923 if (len <= ARC_REGISTER_SIZE)
925 ULONGEST val;
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);
932 arc_debug_printf ("returning 0x%s", phex (val, ARC_REGISTER_SIZE));
934 else if (len <= ARC_REGISTER_SIZE * 2)
936 ULONGEST low, high;
938 /* Get the return value from two registers. */
939 regcache_cooked_read_unsigned (regcache, ARC_R0_REGNUM, &low);
940 regcache_cooked_read_unsigned (regcache, ARC_R1_REGNUM, &high);
942 store_unsigned_integer (valbuf, ARC_REGISTER_SIZE,
943 gdbarch_byte_order (gdbarch), low);
944 store_unsigned_integer (valbuf + ARC_REGISTER_SIZE,
945 (int) len - ARC_REGISTER_SIZE,
946 gdbarch_byte_order (gdbarch), high);
948 arc_debug_printf ("returning 0x%s%s",
949 phex (high, ARC_REGISTER_SIZE),
950 phex (low, ARC_REGISTER_SIZE));
952 else
953 error (_("arc: extract_return_value: type length %u too large"), len);
957 /* Store the return value of a function into the registers/memory used to
958 return it, according to the convention used by the ABI.
960 TODO: This implementation ignores the case of "complex double", where
961 according to ABI, value is returned in the R0-R3 registers.
963 TYPE is a returned value's type. VALBUF is a buffer with the value to
964 return. */
966 static void
967 arc_store_return_value (struct gdbarch *gdbarch, struct type *type,
968 struct regcache *regcache, const gdb_byte *valbuf)
970 unsigned int len = type->length ();
972 arc_debug_printf ("called");
974 if (len <= ARC_REGISTER_SIZE)
976 ULONGEST val;
978 /* Put the return value into one register. */
979 val = extract_unsigned_integer (valbuf, (int) len,
980 gdbarch_byte_order (gdbarch));
981 regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, val);
983 arc_debug_printf ("storing 0x%s", phex (val, ARC_REGISTER_SIZE));
985 else if (len <= ARC_REGISTER_SIZE * 2)
987 ULONGEST low, high;
989 /* Put the return value into two registers. */
990 low = extract_unsigned_integer (valbuf, ARC_REGISTER_SIZE,
991 gdbarch_byte_order (gdbarch));
992 high = extract_unsigned_integer (valbuf + ARC_REGISTER_SIZE,
993 (int) len - ARC_REGISTER_SIZE,
994 gdbarch_byte_order (gdbarch));
996 regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, low);
997 regcache_cooked_write_unsigned (regcache, ARC_R1_REGNUM, high);
999 arc_debug_printf ("storing 0x%s%s",
1000 phex (high, ARC_REGISTER_SIZE),
1001 phex (low, ARC_REGISTER_SIZE));
1003 else
1004 error (_("arc_store_return_value: type length too large."));
1007 /* Implement the "get_longjmp_target" gdbarch method. */
1009 static int
1010 arc_get_longjmp_target (const frame_info_ptr &frame, CORE_ADDR *pc)
1012 arc_debug_printf ("called");
1014 struct gdbarch *gdbarch = get_frame_arch (frame);
1015 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
1016 int pc_offset = tdep->jb_pc * ARC_REGISTER_SIZE;
1017 gdb_byte buf[ARC_REGISTER_SIZE];
1018 CORE_ADDR jb_addr = get_frame_register_unsigned (frame, ARC_FIRST_ARG_REGNUM);
1020 if (target_read_memory (jb_addr + pc_offset, buf, ARC_REGISTER_SIZE))
1021 return 0; /* Failed to read from memory. */
1023 *pc = extract_unsigned_integer (buf, ARC_REGISTER_SIZE,
1024 gdbarch_byte_order (gdbarch));
1025 return 1;
1028 /* Implement the "return_value" gdbarch method. */
1030 static enum return_value_convention
1031 arc_return_value (struct gdbarch *gdbarch, struct value *function,
1032 struct type *valtype, struct regcache *regcache,
1033 gdb_byte *readbuf, const gdb_byte *writebuf)
1035 /* If the return type is a struct, or a union, or would occupy more than two
1036 registers, the ABI uses the "struct return convention": the calling
1037 function passes a hidden first parameter to the callee (in R0). That
1038 parameter is the address at which the value being returned should be
1039 stored. Otherwise, the result is returned in registers. */
1040 int is_struct_return = (valtype->code () == TYPE_CODE_STRUCT
1041 || valtype->code () == TYPE_CODE_UNION
1042 || valtype->length () > 2 * ARC_REGISTER_SIZE);
1044 arc_debug_printf ("readbuf = %s, writebuf = %s",
1045 host_address_to_string (readbuf),
1046 host_address_to_string (writebuf));
1048 if (writebuf != NULL)
1050 /* Case 1. GDB should not ask us to set a struct return value: it
1051 should know the struct return location and write the value there
1052 itself. */
1053 gdb_assert (!is_struct_return);
1054 arc_store_return_value (gdbarch, valtype, regcache, writebuf);
1056 else if (readbuf != NULL)
1058 /* Case 2. GDB should not ask us to get a struct return value: it
1059 should know the struct return location and read the value from there
1060 itself. */
1061 gdb_assert (!is_struct_return);
1062 arc_extract_return_value (gdbarch, valtype, regcache, readbuf);
1065 return (is_struct_return
1066 ? RETURN_VALUE_STRUCT_CONVENTION
1067 : RETURN_VALUE_REGISTER_CONVENTION);
1070 /* Return the base address of the frame. For ARC, the base address is the
1071 frame pointer. */
1073 static CORE_ADDR
1074 arc_frame_base_address (const frame_info_ptr &this_frame, void **prologue_cache)
1076 return (CORE_ADDR) get_frame_register_unsigned (this_frame, ARC_FP_REGNUM);
1079 /* Helper function that returns valid pv_t for an instruction operand:
1080 either a register or a constant. */
1082 static pv_t
1083 arc_pv_get_operand (pv_t *regs, const struct arc_instruction &insn, int operand)
1085 if (insn.operands[operand].kind == ARC_OPERAND_KIND_REG)
1086 return regs[insn.operands[operand].value];
1087 else
1088 return pv_constant (arc_insn_get_operand_value (insn, operand));
1091 /* Determine whether the given disassembled instruction may be part of a
1092 function prologue. If it is, the information in the frame unwind cache will
1093 be updated. */
1095 static bool
1096 arc_is_in_prologue (struct gdbarch *gdbarch, const struct arc_instruction &insn,
1097 pv_t *regs, struct pv_area *stack)
1099 /* It might be that currently analyzed address doesn't contain an
1100 instruction, hence INSN is not valid. It likely means that address points
1101 to a data, non-initialized memory, or middle of a 32-bit instruction. In
1102 practice this may happen if GDB connects to a remote target that has
1103 non-zeroed memory. GDB would read PC value and would try to analyze
1104 prologue, but there is no guarantee that memory contents at the address
1105 specified in PC is address is a valid instruction. There is not much that
1106 that can be done about that. */
1107 if (!insn.valid)
1108 return false;
1110 /* Branch/jump or a predicated instruction. */
1111 if (insn.is_control_flow || insn.condition_code != ARC_CC_AL)
1112 return false;
1114 /* Store of some register. May or may not update base address register. */
1115 if (insn.insn_class == STORE || insn.insn_class == PUSH)
1117 /* There is definitely at least one operand - register/value being
1118 stored. */
1119 gdb_assert (insn.operands_count > 0);
1121 /* Store at some constant address. */
1122 if (insn.operands_count > 1
1123 && insn.operands[1].kind != ARC_OPERAND_KIND_REG)
1124 return false;
1126 /* Writeback modes:
1127 Mode Address used Writeback value
1128 --------------------------------------------------
1129 No reg + offset no
1130 A/AW reg + offset reg + offset
1131 AB reg reg + offset
1132 AS reg + (offset << scaling) no
1134 "PUSH reg" is an alias to "ST.AW reg, [SP, -4]" encoding. However
1135 16-bit PUSH_S is a distinct instruction encoding, where offset and
1136 base register are implied through opcode. */
1138 /* Register with base memory address. */
1139 int base_reg = arc_insn_get_memory_base_reg (insn);
1141 /* Address where to write. arc_insn_get_memory_offset returns scaled
1142 value for ARC_WRITEBACK_AS. */
1143 pv_t addr;
1144 if (insn.writeback_mode == ARC_WRITEBACK_AB)
1145 addr = regs[base_reg];
1146 else
1147 addr = pv_add_constant (regs[base_reg],
1148 arc_insn_get_memory_offset (insn));
1150 if (stack->store_would_trash (addr))
1151 return false;
1153 if (insn.data_size_mode != ARC_SCALING_D)
1155 /* Find the value being stored. */
1156 pv_t store_value = arc_pv_get_operand (regs, insn, 0);
1158 /* What is the size of a the stored value? */
1159 CORE_ADDR size;
1160 if (insn.data_size_mode == ARC_SCALING_B)
1161 size = 1;
1162 else if (insn.data_size_mode == ARC_SCALING_H)
1163 size = 2;
1164 else
1165 size = ARC_REGISTER_SIZE;
1167 stack->store (addr, size, store_value);
1169 else
1171 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1173 /* If this is a double store, than write N+1 register as well. */
1174 pv_t store_value1 = regs[insn.operands[0].value];
1175 pv_t store_value2 = regs[insn.operands[0].value + 1];
1176 stack->store (addr, ARC_REGISTER_SIZE, store_value1);
1177 stack->store (pv_add_constant (addr, ARC_REGISTER_SIZE),
1178 ARC_REGISTER_SIZE, store_value2);
1180 else
1182 pv_t store_value
1183 = pv_constant (arc_insn_get_operand_value (insn, 0));
1184 stack->store (addr, ARC_REGISTER_SIZE * 2, store_value);
1188 /* Is base register updated? */
1189 if (insn.writeback_mode == ARC_WRITEBACK_A
1190 || insn.writeback_mode == ARC_WRITEBACK_AB)
1191 regs[base_reg] = pv_add_constant (regs[base_reg],
1192 arc_insn_get_memory_offset (insn));
1194 return true;
1196 else if (insn.insn_class == MOVE)
1198 gdb_assert (insn.operands_count == 2);
1200 /* Destination argument can be "0", so nothing will happen. */
1201 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1203 int dst_regnum = insn.operands[0].value;
1204 regs[dst_regnum] = arc_pv_get_operand (regs, insn, 1);
1206 return true;
1208 else if (insn.insn_class == SUB)
1210 gdb_assert (insn.operands_count == 3);
1212 /* SUB 0,b,c. */
1213 if (insn.operands[0].kind != ARC_OPERAND_KIND_REG)
1214 return true;
1216 int dst_regnum = insn.operands[0].value;
1217 regs[dst_regnum] = pv_subtract (arc_pv_get_operand (regs, insn, 1),
1218 arc_pv_get_operand (regs, insn, 2));
1219 return true;
1221 else if (insn.insn_class == ENTER)
1223 /* ENTER_S is a prologue-in-instruction - it saves all callee-saved
1224 registers according to given arguments thus greatly reducing code
1225 size. Which registers will be actually saved depends on arguments.
1227 ENTER_S {R13-...,FP,BLINK} stores registers in following order:
1229 new SP ->
1230 BLINK
1236 old SP ->
1238 There are up to three arguments for this opcode, as presented by ARC
1239 disassembler:
1240 1) amount of general-purpose registers to be saved - this argument is
1241 always present even when it is 0;
1242 2) FP register number (27) if FP has to be stored, otherwise argument
1243 is not present;
1244 3) BLINK register number (31) if BLINK has to be stored, otherwise
1245 argument is not present. If both FP and BLINK are stored, then FP
1246 is present before BLINK in argument list. */
1247 gdb_assert (insn.operands_count > 0);
1249 int regs_saved = arc_insn_get_operand_value (insn, 0);
1251 bool is_fp_saved;
1252 if (insn.operands_count > 1)
1253 is_fp_saved = (insn.operands[1].value == ARC_FP_REGNUM);
1254 else
1255 is_fp_saved = false;
1257 bool is_blink_saved;
1258 if (insn.operands_count > 1)
1259 is_blink_saved = (insn.operands[insn.operands_count - 1].value
1260 == ARC_BLINK_REGNUM);
1261 else
1262 is_blink_saved = false;
1264 /* Amount of bytes to be allocated to store specified registers. */
1265 CORE_ADDR st_size = ((regs_saved + is_fp_saved + is_blink_saved)
1266 * ARC_REGISTER_SIZE);
1267 pv_t new_sp = pv_add_constant (regs[ARC_SP_REGNUM], -st_size);
1269 /* Assume that if the last register (closest to new SP) can be written,
1270 then it is possible to write all of them. */
1271 if (stack->store_would_trash (new_sp))
1272 return false;
1274 /* Current store address. */
1275 pv_t addr = regs[ARC_SP_REGNUM];
1277 if (is_fp_saved)
1279 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1280 stack->store (addr, ARC_REGISTER_SIZE, regs[ARC_FP_REGNUM]);
1283 /* Registers are stored in backward order: from GP (R26) to R13. */
1284 for (int i = ARC_R13_REGNUM + regs_saved - 1; i >= ARC_R13_REGNUM; i--)
1286 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1287 stack->store (addr, ARC_REGISTER_SIZE, regs[i]);
1290 if (is_blink_saved)
1292 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1293 stack->store (addr, ARC_REGISTER_SIZE,
1294 regs[ARC_BLINK_REGNUM]);
1297 gdb_assert (pv_is_identical (addr, new_sp));
1299 regs[ARC_SP_REGNUM] = new_sp;
1301 if (is_fp_saved)
1302 regs[ARC_FP_REGNUM] = regs[ARC_SP_REGNUM];
1304 return true;
1307 /* Some other architectures, like nds32 or arm, try to continue as far as
1308 possible when building a prologue cache (as opposed to when skipping
1309 prologue), so that cache will be as full as possible. However current
1310 code for ARC doesn't recognize some instructions that may modify SP, like
1311 ADD, AND, OR, etc, hence there is no way to guarantee that SP wasn't
1312 clobbered by the skipped instruction. Potential existence of extension
1313 instruction, which may do anything they want makes this even more complex,
1314 so it is just better to halt on a first unrecognized instruction. */
1316 return false;
1319 /* Analyze the prologue and update the corresponding frame cache for the frame
1320 unwinder for unwinding frames that doesn't have debug info. In such
1321 situation GDB attempts to parse instructions in the prologue to understand
1322 where each register is saved.
1324 If CACHE is not NULL, then it will be filled with information about saved
1325 registers.
1327 There are several variations of prologue which GDB may encounter. "Full"
1328 prologue looks like this:
1330 sub sp,sp,<imm> ; Space for variadic arguments.
1331 push blink ; Store return address.
1332 push r13 ; Store callee saved registers (up to R26/GP).
1333 push r14
1334 push fp ; Store frame pointer.
1335 mov fp,sp ; Update frame pointer.
1336 sub sp,sp,<imm> ; Create space for local vars on the stack.
1338 Depending on compiler options lots of things may change:
1340 1) BLINK is not saved in leaf functions.
1341 2) Frame pointer is not saved and updated if -fomit-frame-pointer is used.
1342 3) 16-bit versions of those instructions may be used.
1343 4) Instead of a sequence of several push'es, compiler may instead prefer to
1344 do one subtract on stack pointer and then store registers using normal
1345 store, that doesn't update SP. Like this:
1348 sub sp,sp,8 ; Create space for callee-saved registers.
1349 st r13,[sp,4] ; Store callee saved registers (up to R26/GP).
1350 st r14,[sp,0]
1352 5) ENTER_S instruction can encode most of prologue sequence in one
1353 instruction (except for those subtracts for variadic arguments and local
1354 variables).
1355 6) GCC may use "millicode" functions from libgcc to store callee-saved
1356 registers with minimal code-size requirements. This function currently
1357 doesn't support this.
1359 ENTRYPOINT is a function entry point where prologue starts.
1361 LIMIT_PC is a maximum possible end address of prologue (meaning address
1362 of first instruction after the prologue). It might also point to the middle
1363 of prologue if execution has been stopped by the breakpoint at this address
1364 - in this case debugger should analyze prologue only up to this address,
1365 because further instructions haven't been executed yet.
1367 Returns address of the first instruction after the prologue. */
1369 static CORE_ADDR
1370 arc_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR entrypoint,
1371 const CORE_ADDR limit_pc, struct arc_frame_cache *cache)
1373 arc_debug_printf ("entrypoint=%s, limit_pc=%s",
1374 paddress (gdbarch, entrypoint),
1375 paddress (gdbarch, limit_pc));
1377 /* Prologue values. Only core registers can be stored. */
1378 pv_t regs[ARC_LAST_CORE_REGNUM + 1];
1379 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1380 regs[i] = pv_register (i, 0);
1381 pv_area stack (ARC_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1383 CORE_ADDR current_prologue_end = entrypoint;
1385 /* Look at each instruction in the prologue. */
1386 while (current_prologue_end < limit_pc)
1388 struct arc_instruction insn;
1390 struct gdb_non_printing_memory_disassembler dis (gdbarch);
1391 arc_insn_decode (current_prologue_end, dis.disasm_info (),
1392 arc_delayed_print_insn, &insn);
1394 if (arc_debug)
1395 arc_insn_dump (insn);
1397 /* If this instruction is in the prologue, fields in the cache will be
1398 updated, and the saved registers mask may be updated. */
1399 if (!arc_is_in_prologue (gdbarch, insn, regs, &stack))
1401 /* Found an instruction that is not in the prologue. */
1402 arc_debug_printf ("End of prologue reached at address %s",
1403 paddress (gdbarch, insn.address));
1404 break;
1407 current_prologue_end = arc_insn_get_linear_next_pc (insn);
1410 if (cache != NULL)
1412 /* Figure out if it is a frame pointer or just a stack pointer. */
1413 if (pv_is_register (regs[ARC_FP_REGNUM], ARC_SP_REGNUM))
1415 cache->frame_base_reg = ARC_FP_REGNUM;
1416 cache->frame_base_offset = -regs[ARC_FP_REGNUM].k;
1418 else
1420 cache->frame_base_reg = ARC_SP_REGNUM;
1421 cache->frame_base_offset = -regs[ARC_SP_REGNUM].k;
1424 /* Assign offset from old SP to all saved registers. */
1425 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1427 CORE_ADDR offset;
1428 if (stack.find_reg (gdbarch, i, &offset))
1429 cache->saved_regs[i].set_addr (offset);
1433 return current_prologue_end;
1436 /* Estimated maximum prologue length in bytes. This should include:
1437 1) Store instruction for each callee-saved register (R25 - R13 + 1)
1438 2) Two instructions for FP
1439 3) One for BLINK
1440 4) Three substract instructions for SP (for variadic args, for
1441 callee saved regs and for local vars) and assuming that those SUB use
1442 long-immediate (hence double length).
1443 5) Stores of arguments registers are considered part of prologue too
1444 (R7 - R1 + 1).
1445 This is quite an extreme case, because even with -O0 GCC will collapse first
1446 two SUBs into one and long immediate values are quite unlikely to appear in
1447 this case, but still better to overshoot a bit - prologue analysis will
1448 anyway stop at the first instruction that doesn't fit prologue, so this
1449 limit will be rarely reached. */
1451 const static int MAX_PROLOGUE_LENGTH
1452 = 4 * (ARC_R25_REGNUM - ARC_R13_REGNUM + 1 + 2 + 1 + 6
1453 + ARC_LAST_ARG_REGNUM - ARC_FIRST_ARG_REGNUM + 1);
1455 /* Implement the "skip_prologue" gdbarch method.
1457 Skip the prologue for the function at PC. This is done by checking from
1458 the line information read from the DWARF, if possible; otherwise, we scan
1459 the function prologue to find its end. */
1461 static CORE_ADDR
1462 arc_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1464 arc_debug_printf ("pc = %s", paddress (gdbarch, pc));
1466 CORE_ADDR func_addr;
1467 const char *func_name;
1469 /* See what the symbol table says. */
1470 if (find_pc_partial_function (pc, &func_name, &func_addr, NULL))
1472 /* Found a function. */
1473 CORE_ADDR postprologue_pc
1474 = skip_prologue_using_sal (gdbarch, func_addr);
1476 if (postprologue_pc != 0)
1477 return std::max (pc, postprologue_pc);
1480 /* No prologue info in symbol table, have to analyze prologue. */
1482 /* Find an upper limit on the function prologue using the debug
1483 information. If there is no debug information about prologue end, then
1484 skip_prologue_using_sal will return 0. */
1485 CORE_ADDR limit_pc = skip_prologue_using_sal (gdbarch, pc);
1487 /* If there is no debug information at all, it is required to give some
1488 semi-arbitrary hard limit on amount of bytes to scan during prologue
1489 analysis. */
1490 if (limit_pc == 0)
1491 limit_pc = pc + MAX_PROLOGUE_LENGTH;
1493 /* Find the address of the first instruction after the prologue by scanning
1494 through it - no other information is needed, so pass NULL as a cache. */
1495 return arc_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1498 /* Implement the "print_insn" gdbarch method.
1500 arc_get_disassembler () may return different functions depending on bfd
1501 type, so it is not possible to pass print_insn directly to
1502 set_gdbarch_print_insn (). Instead this wrapper function is used. It also
1503 may be used by other functions to get disassemble_info for address. It is
1504 important to note, that those print_insn from opcodes always print
1505 instruction to the stream specified in the INFO. If this is not desired,
1506 then either `print_insn` function in INFO should be set to some function
1507 that will not print, or `stream` should be different from standard
1508 gdb_stdlog. */
1511 arc_delayed_print_insn (bfd_vma addr, struct disassemble_info *info)
1513 /* Standard BFD "machine number" field allows libopcodes disassembler to
1514 distinguish ARC 600, 700 and v2 cores, however v2 encompasses both ARC EM
1515 and HS, which have some difference between. There are two ways to specify
1516 what is the target core:
1517 1) via the disassemble_info->disassembler_options;
1518 2) otherwise libopcodes will use private (architecture-specific) ELF
1519 header.
1521 Using disassembler_options is preferable, because it comes directly from
1522 GDBserver which scanned an actual ARC core identification info. However,
1523 not all GDBservers report core architecture, so as a fallback GDB still
1524 should support analysis of ELF header. The libopcodes disassembly code
1525 uses the section to find the BFD and the BFD to find the ELF header,
1526 therefore this function should set disassemble_info->section properly.
1528 disassembler_options was already set by non-target specific code with
1529 proper options obtained via gdbarch_disassembler_options ().
1531 This function might be called multiple times in a sequence, reusing same
1532 disassemble_info. */
1533 if ((info->disassembler_options == NULL) && (info->section == NULL))
1535 struct obj_section *s = find_pc_section (addr);
1536 if (s != NULL)
1537 info->section = s->the_bfd_section;
1540 return default_print_insn (addr, info);
1543 /* Baremetal breakpoint instructions.
1545 ARC supports both big- and little-endian. However, instructions for
1546 little-endian processors are encoded in the middle-endian: half-words are
1547 in big-endian, while bytes inside the half-words are in little-endian; data
1548 is represented in the "normal" little-endian. Big-endian processors treat
1549 data and code identically.
1551 Assuming the number 0x01020304, it will be presented this way:
1553 Address : N N+1 N+2 N+3
1554 little-endian : 0x04 0x03 0x02 0x01
1555 big-endian : 0x01 0x02 0x03 0x04
1556 ARC middle-endian : 0x02 0x01 0x04 0x03
1559 static const gdb_byte arc_brk_s_be[] = { 0x7f, 0xff };
1560 static const gdb_byte arc_brk_s_le[] = { 0xff, 0x7f };
1561 static const gdb_byte arc_brk_be[] = { 0x25, 0x6f, 0x00, 0x3f };
1562 static const gdb_byte arc_brk_le[] = { 0x6f, 0x25, 0x3f, 0x00 };
1564 /* For ARC ELF, breakpoint uses the 16-bit BRK_S instruction, which is 0x7fff
1565 (little endian) or 0xff7f (big endian). We used to insert BRK_S even
1566 instead of 32-bit instructions, which works mostly ok, unless breakpoint is
1567 inserted into delay slot instruction. In this case if branch is taken
1568 BLINK value will be set to address of instruction after delay slot, however
1569 if we replaced 32-bit instruction in delay slot with 16-bit long BRK_S,
1570 then BLINK value will have an invalid value - it will point to the address
1571 after the BRK_S (which was there at the moment of branch execution) while
1572 it should point to the address after the 32-bit long instruction. To avoid
1573 such issues this function disassembles instruction at target location and
1574 evaluates it value.
1576 ARC 600 supports only 16-bit BRK_S.
1578 NB: Baremetal GDB uses BRK[_S], while user-space GDB uses TRAP_S. BRK[_S]
1579 is much better because it doesn't commit unlike TRAP_S, so it can be set in
1580 delay slots; however it cannot be used in user-mode, hence usage of TRAP_S
1581 in GDB for user-space. */
1583 /* Implement the "breakpoint_kind_from_pc" gdbarch method. */
1585 static int
1586 arc_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
1588 size_t length_with_limm = gdb_insn_length (gdbarch, *pcptr);
1590 /* Replace 16-bit instruction with BRK_S, replace 32-bit instructions with
1591 BRK. LIMM is part of instruction length, so it can be either 4 or 8
1592 bytes for 32-bit instructions. */
1593 if ((length_with_limm == 4 || length_with_limm == 8)
1594 && !arc_mach_is_arc600 (gdbarch))
1595 return sizeof (arc_brk_le);
1596 else
1597 return sizeof (arc_brk_s_le);
1600 /* Implement the "sw_breakpoint_from_kind" gdbarch method. */
1602 static const gdb_byte *
1603 arc_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
1605 gdb_assert (kind == 2 || kind == 4);
1606 *size = kind;
1608 if (kind == sizeof (arc_brk_le))
1610 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1611 ? arc_brk_be
1612 : arc_brk_le);
1614 else
1616 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1617 ? arc_brk_s_be
1618 : arc_brk_s_le);
1622 /* Implement the "frame_align" gdbarch method. */
1624 static CORE_ADDR
1625 arc_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1627 return align_down (sp, 4);
1630 /* Dump the frame info. Used for internal debugging only. */
1632 static void
1633 arc_print_frame_cache (struct gdbarch *gdbarch, const char *message,
1634 struct arc_frame_cache *cache, int addresses_known)
1636 arc_debug_printf ("frame_info %s", message);
1637 arc_debug_printf ("prev_sp = %s", paddress (gdbarch, cache->prev_sp));
1638 arc_debug_printf ("frame_base_reg = %i", cache->frame_base_reg);
1639 arc_debug_printf ("frame_base_offset = %s",
1640 plongest (cache->frame_base_offset));
1642 for (int i = 0; i <= ARC_BLINK_REGNUM; i++)
1644 if (cache->saved_regs[i].is_addr ())
1645 arc_debug_printf ("saved register %s at %s %s",
1646 gdbarch_register_name (gdbarch, i),
1647 (addresses_known) ? "address" : "offset",
1648 paddress (gdbarch, cache->saved_regs[i].addr ()));
1652 /* Frame unwinder for normal frames. */
1654 static struct arc_frame_cache *
1655 arc_make_frame_cache (const frame_info_ptr &this_frame)
1657 arc_debug_printf ("called");
1659 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1661 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1662 CORE_ADDR entrypoint, prologue_end;
1663 if (find_pc_partial_function (block_addr, NULL, &entrypoint, &prologue_end))
1665 struct symtab_and_line sal = find_pc_line (entrypoint, 0);
1666 CORE_ADDR prev_pc = get_frame_pc (this_frame);
1667 if (sal.line == 0)
1668 /* No line info so use current PC. */
1669 prologue_end = prev_pc;
1670 else if (sal.end < prologue_end)
1671 /* The next line begins after the function end. */
1672 prologue_end = sal.end;
1674 prologue_end = std::min (prologue_end, prev_pc);
1676 else
1678 /* If find_pc_partial_function returned nothing then there is no symbol
1679 information at all for this PC. Currently it is assumed in this case
1680 that current PC is entrypoint to function and try to construct the
1681 frame from that. This is, probably, suboptimal, for example ARM
1682 assumes in this case that program is inside the normal frame (with
1683 frame pointer). ARC, perhaps, should try to do the same. */
1684 entrypoint = get_frame_register_unsigned (this_frame,
1685 gdbarch_pc_regnum (gdbarch));
1686 prologue_end = entrypoint + MAX_PROLOGUE_LENGTH;
1689 /* Allocate new frame cache instance and space for saved register info.
1690 FRAME_OBSTACK_ZALLOC will initialize fields to zeroes. */
1691 struct arc_frame_cache *cache
1692 = FRAME_OBSTACK_ZALLOC (struct arc_frame_cache);
1693 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1695 arc_analyze_prologue (gdbarch, entrypoint, prologue_end, cache);
1697 if (arc_debug)
1698 arc_print_frame_cache (gdbarch, "after prologue", cache, false);
1700 CORE_ADDR unwound_fb = get_frame_register_unsigned (this_frame,
1701 cache->frame_base_reg);
1702 if (unwound_fb == 0)
1703 return cache;
1704 cache->prev_sp = unwound_fb + cache->frame_base_offset;
1706 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1708 if (cache->saved_regs[i].is_addr ())
1709 cache->saved_regs[i].set_addr (cache->saved_regs[i].addr ()
1710 + cache->prev_sp);
1713 if (arc_debug)
1714 arc_print_frame_cache (gdbarch, "after previous SP found", cache, true);
1716 return cache;
1719 /* Implement the "this_id" frame_unwind method. */
1721 static void
1722 arc_frame_this_id (const frame_info_ptr &this_frame, void **this_cache,
1723 struct frame_id *this_id)
1725 arc_debug_printf ("called");
1727 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1729 if (*this_cache == NULL)
1730 *this_cache = arc_make_frame_cache (this_frame);
1731 struct arc_frame_cache *cache = (struct arc_frame_cache *) (*this_cache);
1733 CORE_ADDR stack_addr = cache->prev_sp;
1735 /* There are 4 possible situation which decide how frame_id->code_addr is
1736 evaluated:
1738 1) Function is compiled with option -g. Then frame_id will be created
1739 in dwarf_* function and not in this function. NB: even if target
1740 binary is compiled with -g, some std functions like __start and _init
1741 are not, so they still will follow one of the following choices.
1743 2) Function is compiled without -g and binary hasn't been stripped in
1744 any way. In this case GDB still has enough information to evaluate
1745 frame code_addr properly. This case is covered by call to
1746 get_frame_func ().
1748 3) Binary has been striped with option -g (strip debug symbols). In
1749 this case there is still enough symbols for get_frame_func () to work
1750 properly, so this case is also covered by it.
1752 4) Binary has been striped with option -s (strip all symbols). In this
1753 case GDB cannot get function start address properly, so we return current
1754 PC value instead.
1756 CORE_ADDR code_addr = get_frame_func (this_frame);
1757 if (code_addr == 0)
1758 code_addr = get_frame_register_unsigned (this_frame,
1759 gdbarch_pc_regnum (gdbarch));
1761 *this_id = frame_id_build (stack_addr, code_addr);
1764 /* Implement the "prev_register" frame_unwind method. */
1766 static struct value *
1767 arc_frame_prev_register (const frame_info_ptr &this_frame,
1768 void **this_cache, int regnum)
1770 if (*this_cache == NULL)
1771 *this_cache = arc_make_frame_cache (this_frame);
1772 struct arc_frame_cache *cache = (struct arc_frame_cache *) (*this_cache);
1774 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1776 /* If we are asked to unwind the PC, then we need to return BLINK instead:
1777 the saved value of PC points into this frame's function's prologue, not
1778 the next frame's function's resume location. */
1779 if (regnum == gdbarch_pc_regnum (gdbarch))
1780 regnum = ARC_BLINK_REGNUM;
1782 /* SP is a special case - we should return prev_sp, because
1783 trad_frame_get_prev_register will return _current_ SP value.
1784 Alternatively we could have stored cache->prev_sp in the cache->saved
1785 regs, but here we follow the lead of AArch64, ARM and Xtensa and will
1786 leave that logic in this function, instead of prologue analyzers. That I
1787 think is a bit more clear as `saved_regs` should contain saved regs, not
1788 computable.
1790 Because value has been computed, "got_constant" should be used, so that
1791 returned value will be a "not_lval" - immutable. */
1793 if (regnum == gdbarch_sp_regnum (gdbarch))
1794 return frame_unwind_got_constant (this_frame, regnum, cache->prev_sp);
1796 return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
1799 /* Implement the "init_reg" dwarf2_frame method. */
1801 static void
1802 arc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1803 struct dwarf2_frame_state_reg *reg,
1804 const frame_info_ptr &info)
1806 if (regnum == gdbarch_pc_regnum (gdbarch))
1807 /* The return address column. */
1808 reg->how = DWARF2_FRAME_REG_RA;
1809 else if (regnum == gdbarch_sp_regnum (gdbarch))
1810 /* The call frame address. */
1811 reg->how = DWARF2_FRAME_REG_CFA;
1814 /* Signal trampoline frame unwinder. Allows frame unwinding to happen
1815 from within signal handlers. */
1817 static struct arc_frame_cache *
1818 arc_make_sigtramp_frame_cache (const frame_info_ptr &this_frame)
1820 arc_debug_printf ("called");
1822 gdbarch *arch = get_frame_arch (this_frame);
1823 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
1825 /* Allocate new frame cache instance and space for saved register info. */
1826 struct arc_frame_cache *cache = FRAME_OBSTACK_ZALLOC (struct arc_frame_cache);
1827 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1829 /* Get the stack pointer and use it as the frame base. */
1830 cache->prev_sp = arc_frame_base_address (this_frame, NULL);
1832 /* If the ARC-private target-dependent info doesn't have a table of
1833 offsets of saved register contents within an OS signal context
1834 structure, then there is nothing to analyze. */
1835 if (tdep->sc_reg_offset == NULL)
1836 return cache;
1838 /* Find the address of the sigcontext structure. */
1839 CORE_ADDR addr = tdep->sigcontext_addr (this_frame);
1841 /* For each register, if its contents have been saved within the
1842 sigcontext structure, determine the address of those contents. */
1843 gdb_assert (tdep->sc_num_regs <= (ARC_LAST_REGNUM + 1));
1844 for (int i = 0; i < tdep->sc_num_regs; i++)
1846 if (tdep->sc_reg_offset[i] != ARC_OFFSET_NO_REGISTER)
1847 cache->saved_regs[i].set_addr (addr + tdep->sc_reg_offset[i]);
1850 return cache;
1853 /* Implement the "this_id" frame_unwind method for signal trampoline
1854 frames. */
1856 static void
1857 arc_sigtramp_frame_this_id (const frame_info_ptr &this_frame,
1858 void **this_cache, struct frame_id *this_id)
1860 arc_debug_printf ("called");
1862 if (*this_cache == NULL)
1863 *this_cache = arc_make_sigtramp_frame_cache (this_frame);
1865 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1866 struct arc_frame_cache *cache = (struct arc_frame_cache *) *this_cache;
1867 CORE_ADDR stack_addr = cache->prev_sp;
1868 CORE_ADDR code_addr
1869 = get_frame_register_unsigned (this_frame, gdbarch_pc_regnum (gdbarch));
1870 *this_id = frame_id_build (stack_addr, code_addr);
1873 /* Get a register from a signal handler frame. */
1875 static struct value *
1876 arc_sigtramp_frame_prev_register (const frame_info_ptr &this_frame,
1877 void **this_cache, int regnum)
1879 arc_debug_printf ("regnum = %d", regnum);
1881 /* Make sure we've initialized the cache. */
1882 if (*this_cache == NULL)
1883 *this_cache = arc_make_sigtramp_frame_cache (this_frame);
1885 struct arc_frame_cache *cache = (struct arc_frame_cache *) *this_cache;
1886 return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
1889 /* Frame sniffer for signal handler frame. Only recognize a frame if we
1890 have a sigcontext_addr handler in the target dependency. */
1892 static int
1893 arc_sigtramp_frame_sniffer (const struct frame_unwind *self,
1894 const frame_info_ptr &this_frame,
1895 void **this_cache)
1897 arc_debug_printf ("called");
1899 gdbarch *arch = get_frame_arch (this_frame);
1900 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
1902 /* If we have a sigcontext_addr handler, then just return 1 (same as the
1903 "default_frame_sniffer ()"). */
1904 return (tdep->sigcontext_addr != NULL && tdep->is_sigtramp != NULL
1905 && tdep->is_sigtramp (this_frame));
1908 /* Structure defining the ARC ordinary frame unwind functions. Since we are
1909 the fallback unwinder, we use the default frame sniffer, which always
1910 accepts the frame. */
1912 static const struct frame_unwind arc_frame_unwind = {
1913 "arc prologue",
1914 NORMAL_FRAME,
1915 default_frame_unwind_stop_reason,
1916 arc_frame_this_id,
1917 arc_frame_prev_register,
1918 NULL,
1919 default_frame_sniffer,
1920 NULL,
1921 NULL
1924 /* Structure defining the ARC signal frame unwind functions. Custom
1925 sniffer is used, because this frame must be accepted only in the right
1926 context. */
1928 static const struct frame_unwind arc_sigtramp_frame_unwind = {
1929 "arc sigtramp",
1930 SIGTRAMP_FRAME,
1931 default_frame_unwind_stop_reason,
1932 arc_sigtramp_frame_this_id,
1933 arc_sigtramp_frame_prev_register,
1934 NULL,
1935 arc_sigtramp_frame_sniffer,
1936 NULL,
1937 NULL
1941 static const struct frame_base arc_normal_base = {
1942 &arc_frame_unwind,
1943 arc_frame_base_address,
1944 arc_frame_base_address,
1945 arc_frame_base_address
1948 static enum arc_isa
1949 mach_type_to_arc_isa (const unsigned long mach)
1951 switch (mach)
1953 case bfd_mach_arc_arc600:
1954 case bfd_mach_arc_arc601:
1955 case bfd_mach_arc_arc700:
1956 return ARC_ISA_ARCV1;
1957 case bfd_mach_arc_arcv2:
1958 return ARC_ISA_ARCV2;
1959 default:
1960 internal_error (_("unknown machine id %lu"), mach);
1964 /* See arc-tdep.h. */
1966 arc_arch_features
1967 arc_arch_features_create (const bfd *abfd, const unsigned long mach)
1969 /* Use 4 as a fallback value. */
1970 int reg_size = 4;
1972 /* Try to guess the features parameters by looking at the binary to be
1973 executed. If the user is providing a binary that does not match the
1974 target, then tough luck. This is the last effort to makes sense of
1975 what's going on. */
1976 if (abfd != nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1978 unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
1980 if (eclass == ELFCLASS32)
1981 reg_size = 4;
1982 else if (eclass == ELFCLASS64)
1983 reg_size = 8;
1984 else
1985 internal_error (_("unknown ELF header class %d"), eclass);
1988 /* MACH from a bfd_arch_info struct is used here. It should be a safe
1989 bet, as it looks like the struct is always initialized even when we
1990 don't pass any elf file to GDB at all (it uses default arch in that
1991 case). */
1992 arc_isa isa = mach_type_to_arc_isa (mach);
1994 return arc_arch_features (reg_size, isa);
1997 /* Look for obsolete core feature names in TDESC. */
1999 static const struct tdesc_feature *
2000 find_obsolete_core_names (const struct target_desc *tdesc)
2002 const struct tdesc_feature *feat = nullptr;
2004 feat = tdesc_find_feature (tdesc, ARC_CORE_V1_OBSOLETE_FEATURE_NAME);
2006 if (feat == nullptr)
2007 feat = tdesc_find_feature (tdesc, ARC_CORE_V2_OBSOLETE_FEATURE_NAME);
2009 if (feat == nullptr)
2010 feat = tdesc_find_feature
2011 (tdesc, ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME);
2013 return feat;
2016 /* Look for obsolete aux feature names in TDESC. */
2018 static const struct tdesc_feature *
2019 find_obsolete_aux_names (const struct target_desc *tdesc)
2021 return tdesc_find_feature (tdesc, ARC_AUX_OBSOLETE_FEATURE_NAME);
2024 /* Based on the MACH value, determines which core register features set
2025 must be used. */
2027 static arc_register_feature *
2028 determine_core_reg_feature_set (const unsigned long mach)
2030 switch (mach_type_to_arc_isa (mach))
2032 case ARC_ISA_ARCV1:
2033 return &arc_v1_core_reg_feature;
2034 case ARC_ISA_ARCV2:
2035 return &arc_v2_core_reg_feature;
2036 default:
2037 gdb_assert_not_reached
2038 ("Unknown machine type to determine the core feature set.");
2042 /* At the moment, there is only 1 auxiliary register features set.
2043 This is a place holder for future extendability. */
2045 static const arc_register_feature *
2046 determine_aux_reg_feature_set ()
2048 return &arc_common_aux_reg_feature;
2051 /* Update accumulator register names (ACCH/ACCL) for r58 and r59 in the
2052 register sets. The endianness determines the assignment:
2054 ,------.------.
2055 | acch | accl |
2056 ,----|------+------|
2057 | LE | r59 | r58 |
2058 | BE | r58 | r59 |
2059 `----^------^------' */
2061 static void
2062 arc_update_acc_reg_names (const int byte_order)
2064 const char *r58_alias
2065 = byte_order == BFD_ENDIAN_LITTLE ? "accl" : "acch";
2066 const char *r59_alias
2067 = byte_order == BFD_ENDIAN_LITTLE ? "acch" : "accl";
2069 /* Subscript 1 must be OK because those registers have 2 names. */
2070 arc_v1_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
2071 arc_v1_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
2072 arc_v2_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
2073 arc_v2_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
2076 /* Go through all the registers in REG_SET and check if they exist
2077 in FEATURE. The TDESC_DATA is updated with the register number
2078 in REG_SET if it is found in the feature. If a required register
2079 is not found, this function returns false. */
2081 static bool
2082 arc_check_tdesc_feature (struct tdesc_arch_data *tdesc_data,
2083 const struct tdesc_feature *feature,
2084 const struct arc_register_feature *reg_set)
2086 for (const auto &reg : reg_set->registers)
2088 bool found = false;
2090 for (const char *name : reg.names)
2092 found
2093 = tdesc_numbered_register (feature, tdesc_data, reg.regnum, name);
2095 if (found)
2096 break;
2099 if (!found && reg.required_p)
2101 std::ostringstream reg_names;
2102 for (std::size_t i = 0; i < reg.names.size(); ++i)
2104 if (i == 0)
2105 reg_names << "'" << reg.names[0] << "'";
2106 else
2107 reg_names << " or '" << reg.names[0] << "'";
2109 arc_print (_("Error: Cannot find required register(s) %s "
2110 "in feature '%s'.\n"), reg_names.str ().c_str (),
2111 feature->name.c_str ());
2112 return false;
2116 return true;
2119 /* Check for the existance of "lp_start" and "lp_end" in target description.
2120 If both are present, assume there is hardware loop support in the target.
2121 This can be improved by looking into "lpc_size" field of "isa_config"
2122 auxiliary register. */
2124 static bool
2125 arc_check_for_hw_loops (const struct target_desc *tdesc,
2126 struct tdesc_arch_data *data)
2128 const auto feature_aux = tdesc_find_feature (tdesc, ARC_AUX_FEATURE_NAME);
2129 const auto aux_regset = determine_aux_reg_feature_set ();
2131 if (feature_aux == nullptr)
2132 return false;
2134 bool hw_loop_p = false;
2135 const auto lp_start_name =
2136 aux_regset->registers[ARC_LP_START_REGNUM - ARC_FIRST_AUX_REGNUM].names[0];
2137 const auto lp_end_name =
2138 aux_regset->registers[ARC_LP_END_REGNUM - ARC_FIRST_AUX_REGNUM].names[0];
2140 hw_loop_p = tdesc_numbered_register (feature_aux, data,
2141 ARC_LP_START_REGNUM, lp_start_name);
2142 hw_loop_p &= tdesc_numbered_register (feature_aux, data,
2143 ARC_LP_END_REGNUM, lp_end_name);
2145 return hw_loop_p;
2148 /* Initialize target description for the ARC.
2150 Returns true if input TDESC was valid and in this case it will assign TDESC
2151 and TDESC_DATA output parameters. */
2153 static bool
2154 arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
2155 tdesc_arch_data_up *tdesc_data)
2157 const struct target_desc *tdesc_loc = info.target_desc;
2158 arc_debug_printf ("Target description initialization.");
2160 /* If target doesn't provide a description, use the default ones. */
2161 if (!tdesc_has_registers (tdesc_loc))
2163 arc_arch_features features
2164 = arc_arch_features_create (info.abfd,
2165 info.bfd_arch_info->mach);
2166 tdesc_loc = arc_lookup_target_description (features);
2168 gdb_assert (tdesc_loc != nullptr);
2170 arc_debug_printf ("Have got a target description");
2172 const struct tdesc_feature *feature_core
2173 = tdesc_find_feature (tdesc_loc, ARC_CORE_FEATURE_NAME);
2174 const struct tdesc_feature *feature_aux
2175 = tdesc_find_feature (tdesc_loc, ARC_AUX_FEATURE_NAME);
2177 /* Maybe there still is a chance to salvage the input. */
2178 if (feature_core == nullptr)
2179 feature_core = find_obsolete_core_names (tdesc_loc);
2180 if (feature_aux == nullptr)
2181 feature_aux = find_obsolete_aux_names (tdesc_loc);
2183 if (feature_core == nullptr)
2185 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2186 "target description.\n"), ARC_CORE_FEATURE_NAME);
2187 return false;
2190 if (feature_aux == nullptr)
2192 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2193 "target description.\n"), ARC_AUX_FEATURE_NAME);
2194 return false;
2197 const arc_register_feature *arc_core_reg_feature
2198 = determine_core_reg_feature_set (info.bfd_arch_info->mach);
2199 const arc_register_feature *arc_aux_reg_feature
2200 = determine_aux_reg_feature_set ();
2202 tdesc_arch_data_up tdesc_data_loc = tdesc_data_alloc ();
2204 arc_update_acc_reg_names (info.byte_order);
2206 bool valid_p = arc_check_tdesc_feature (tdesc_data_loc.get (),
2207 feature_core,
2208 arc_core_reg_feature);
2210 valid_p &= arc_check_tdesc_feature (tdesc_data_loc.get (),
2211 feature_aux,
2212 arc_aux_reg_feature);
2214 if (!valid_p)
2216 arc_debug_printf ("Target description is not valid");
2217 return false;
2220 *tdesc = tdesc_loc;
2221 *tdesc_data = std::move (tdesc_data_loc);
2223 return true;
2226 /* Implement the type_align gdbarch function. */
2228 static ULONGEST
2229 arc_type_align (struct gdbarch *gdbarch, struct type *type)
2231 switch (type->code ())
2233 case TYPE_CODE_PTR:
2234 case TYPE_CODE_FUNC:
2235 case TYPE_CODE_FLAGS:
2236 case TYPE_CODE_INT:
2237 case TYPE_CODE_RANGE:
2238 case TYPE_CODE_FLT:
2239 case TYPE_CODE_ENUM:
2240 case TYPE_CODE_REF:
2241 case TYPE_CODE_RVALUE_REF:
2242 case TYPE_CODE_CHAR:
2243 case TYPE_CODE_BOOL:
2244 case TYPE_CODE_DECFLOAT:
2245 case TYPE_CODE_METHODPTR:
2246 case TYPE_CODE_MEMBERPTR:
2247 type = check_typedef (type);
2248 return std::min<ULONGEST> (4, type->length ());
2249 default:
2250 return 0;
2254 /* Implement the "init" gdbarch method. */
2256 static struct gdbarch *
2257 arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2259 const struct target_desc *tdesc;
2260 tdesc_arch_data_up tdesc_data;
2262 arc_debug_printf ("Architecture initialization.");
2264 if (!arc_tdesc_init (info, &tdesc, &tdesc_data))
2265 return nullptr;
2267 /* Allocate the ARC-private target-dependent information structure, and the
2268 GDB target-independent information structure. */
2269 gdbarch *gdbarch
2270 = gdbarch_alloc (&info, gdbarch_tdep_up (new arc_gdbarch_tdep));
2271 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
2272 tdep->jb_pc = -1; /* No longjmp support by default. */
2273 tdep->has_hw_loops = arc_check_for_hw_loops (tdesc, tdesc_data.get ());
2275 /* Data types. */
2276 set_gdbarch_short_bit (gdbarch, 16);
2277 set_gdbarch_int_bit (gdbarch, 32);
2278 set_gdbarch_long_bit (gdbarch, 32);
2279 set_gdbarch_long_long_bit (gdbarch, 64);
2280 set_gdbarch_type_align (gdbarch, arc_type_align);
2281 set_gdbarch_float_bit (gdbarch, 32);
2282 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
2283 set_gdbarch_double_bit (gdbarch, 64);
2284 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
2285 set_gdbarch_ptr_bit (gdbarch, 32);
2286 set_gdbarch_addr_bit (gdbarch, 32);
2287 set_gdbarch_char_signed (gdbarch, 0);
2289 set_gdbarch_write_pc (gdbarch, arc_write_pc);
2291 set_gdbarch_virtual_frame_pointer (gdbarch, arc_virtual_frame_pointer);
2293 /* tdesc_use_registers expects gdbarch_num_regs to return number of registers
2294 parsed by gdbarch_init, and then it will add all of the remaining
2295 registers and will increase number of registers. */
2296 set_gdbarch_num_regs (gdbarch, ARC_LAST_REGNUM + 1);
2297 set_gdbarch_num_pseudo_regs (gdbarch, 0);
2298 set_gdbarch_sp_regnum (gdbarch, ARC_SP_REGNUM);
2299 set_gdbarch_pc_regnum (gdbarch, ARC_PC_REGNUM);
2300 set_gdbarch_ps_regnum (gdbarch, ARC_STATUS32_REGNUM);
2301 set_gdbarch_fp0_regnum (gdbarch, -1); /* No FPU registers. */
2303 set_gdbarch_push_dummy_call (gdbarch, arc_push_dummy_call);
2304 set_gdbarch_push_dummy_code (gdbarch, arc_push_dummy_code);
2306 set_gdbarch_cannot_fetch_register (gdbarch, arc_cannot_fetch_register);
2307 set_gdbarch_cannot_store_register (gdbarch, arc_cannot_store_register);
2309 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2311 set_gdbarch_return_value (gdbarch, arc_return_value);
2313 set_gdbarch_skip_prologue (gdbarch, arc_skip_prologue);
2314 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2316 set_gdbarch_breakpoint_kind_from_pc (gdbarch, arc_breakpoint_kind_from_pc);
2317 set_gdbarch_sw_breakpoint_from_kind (gdbarch, arc_sw_breakpoint_from_kind);
2319 /* On ARC 600 BRK_S instruction advances PC, unlike other ARC cores. */
2320 if (!arc_mach_is_arc600 (gdbarch))
2321 set_gdbarch_decr_pc_after_break (gdbarch, 0);
2322 else
2323 set_gdbarch_decr_pc_after_break (gdbarch, 2);
2325 set_gdbarch_frame_align (gdbarch, arc_frame_align);
2327 set_gdbarch_print_insn (gdbarch, arc_delayed_print_insn);
2329 set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
2331 /* "nonsteppable" watchpoint means that watchpoint triggers before
2332 instruction is committed, therefore it is required to remove watchpoint
2333 to step though instruction that triggers it. ARC watchpoints trigger
2334 only after instruction is committed, thus there is no need to remove
2335 them. In fact on ARC watchpoint for memory writes may trigger with more
2336 significant delay, like one or two instructions, depending on type of
2337 memory where write is performed (CCM or external) and next instruction
2338 after the memory write. */
2339 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 0);
2341 /* This doesn't include possible long-immediate value. */
2342 set_gdbarch_max_insn_length (gdbarch, 4);
2344 /* Frame unwinders and sniffers. */
2345 dwarf2_frame_set_init_reg (gdbarch, arc_dwarf2_frame_init_reg);
2346 dwarf2_append_unwinders (gdbarch);
2347 frame_unwind_append_unwinder (gdbarch, &arc_sigtramp_frame_unwind);
2348 frame_unwind_append_unwinder (gdbarch, &arc_frame_unwind);
2349 frame_base_set_default (gdbarch, &arc_normal_base);
2351 /* Setup stuff specific to a particular environment (baremetal or Linux).
2352 It can override functions set earlier. */
2353 gdbarch_init_osabi (info, gdbarch);
2355 if (tdep->jb_pc >= 0)
2356 set_gdbarch_get_longjmp_target (gdbarch, arc_get_longjmp_target);
2358 /* Disassembler options. Enforce CPU if it was specified in XML target
2359 description, otherwise use default method of determining CPU (ELF private
2360 header). */
2361 if (info.target_desc != NULL)
2363 const struct bfd_arch_info *tdesc_arch
2364 = tdesc_architecture (info.target_desc);
2365 if (tdesc_arch != NULL)
2367 /* FIXME: It is not really good to change disassembler options
2368 behind the scene, because that might override options
2369 specified by the user. However as of now ARC doesn't support
2370 `set disassembler-options' hence this code is the only place
2371 where options are changed. It also changes options for all
2372 existing gdbarches, which also can be problematic, if
2373 arc_gdbarch_init will start reusing existing gdbarch
2374 instances. */
2375 /* Target description specifies a BFD architecture, which is
2376 different from ARC cpu, as accepted by disassembler (and most
2377 other ARC tools), because cpu values are much more fine grained -
2378 there can be multiple cpu values per single BFD architecture. As
2379 a result this code should translate architecture to some cpu
2380 value. Since there is no info on exact cpu configuration, it is
2381 best to use the most feature-rich CPU, so that disassembler will
2382 recognize all instructions available to the specified
2383 architecture. */
2384 switch (tdesc_arch->mach)
2386 case bfd_mach_arc_arc601:
2387 arc_disassembler_options = "cpu=arc601";
2388 break;
2389 case bfd_mach_arc_arc600:
2390 arc_disassembler_options = "cpu=arc600";
2391 break;
2392 case bfd_mach_arc_arc700:
2393 arc_disassembler_options = "cpu=arc700";
2394 break;
2395 case bfd_mach_arc_arcv2:
2396 /* Machine arcv2 has three arches: ARCv2, EM and HS; where ARCv2
2397 is treated as EM. */
2398 if (arc_arch_is_hs (tdesc_arch))
2399 arc_disassembler_options = "cpu=hs38_linux";
2400 else
2401 arc_disassembler_options = "cpu=em4_fpuda";
2402 break;
2403 default:
2404 arc_disassembler_options = "";
2405 break;
2410 set_gdbarch_disassembler_options (gdbarch, &arc_disassembler_options);
2411 set_gdbarch_valid_disassembler_options (gdbarch,
2412 disassembler_options_arc ());
2414 tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
2416 return gdbarch;
2419 /* Implement the "dump_tdep" gdbarch method. */
2421 static void
2422 arc_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
2424 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
2426 gdb_printf (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
2428 gdb_printf (file, "arc_dump_tdep: is_sigtramp = <%s>\n",
2429 host_address_to_string (tdep->is_sigtramp));
2430 gdb_printf (file, "arc_dump_tdep: sigcontext_addr = <%s>\n",
2431 host_address_to_string (tdep->sigcontext_addr));
2432 gdb_printf (file, "arc_dump_tdep: sc_reg_offset = <%s>\n",
2433 host_address_to_string (tdep->sc_reg_offset));
2434 gdb_printf (file, "arc_dump_tdep: sc_num_regs = %d\n",
2435 tdep->sc_num_regs);
2438 /* This command accepts single argument - address of instruction to
2439 disassemble. */
2441 static void
2442 dump_arc_instruction_command (const char *args, int from_tty)
2444 struct value *val;
2445 if (args != NULL && strlen (args) > 0)
2446 val = parse_expression (args)->evaluate ();
2447 else
2448 val = access_value_history (0);
2449 val->record_latest ();
2451 CORE_ADDR address = value_as_address (val);
2452 struct arc_instruction insn;
2453 gdb_non_printing_memory_disassembler dis (current_inferior ()->arch ());
2454 arc_insn_decode (address, dis.disasm_info (), arc_delayed_print_insn, &insn);
2455 arc_insn_dump (insn);
2458 void _initialize_arc_tdep ();
2459 void
2460 _initialize_arc_tdep ()
2462 gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep);
2464 /* Register ARC-specific commands with gdb. */
2466 /* Add root prefix command for "maintenance print arc" commands. */
2467 add_basic_prefix_cmd ("arc", class_maintenance,
2468 _("ARC-specific maintenance commands for printing GDB "
2469 "internal state."),
2470 &maintenance_print_arc_list,
2471 0, &maintenanceprintlist);
2473 add_cmd ("arc-instruction", class_maintenance,
2474 dump_arc_instruction_command,
2475 _("Dump arc_instruction structure for specified address."),
2476 &maintenance_print_arc_list);
2478 /* Debug internals for ARC GDB. */
2479 add_setshow_boolean_cmd ("arc", class_maintenance,
2480 &arc_debug,
2481 _("Set ARC specific debugging."),
2482 _("Show ARC specific debugging."),
2483 _("When set, ARC specific debugging is enabled."),
2484 NULL, NULL, &setdebuglist, &showdebuglist);