Automatic date update in version.in
[binutils-gdb.git] / gdb / arc-tdep.c
blob44e26ae2c1dfef69972626c0fb3073636d3a2b32
1 /* Target dependent code for ARC architecture, for GDB.
3 Copyright 2005-2023 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 "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 "inferior.h"
31 #include "reggroups.h"
32 #include "gdbcmd.h"
33 #include "objfiles.h"
34 #include "osabi.h"
35 #include "prologue-value.h"
36 #include "target-descriptions.h"
37 #include "trad-frame.h"
39 /* ARC header files. */
40 #include "opcode/arc.h"
41 #include "opcodes/arc-dis.h"
42 #include "arc-tdep.h"
43 #include "arch/arc.h"
45 /* Standard headers. */
46 #include <algorithm>
47 #include <sstream>
49 /* The frame unwind cache for ARC. */
51 struct arc_frame_cache
53 /* The stack pointer at the time this frame was created; i.e. the caller's
54 stack pointer when this function was called. It is used to identify this
55 frame. */
56 CORE_ADDR prev_sp;
58 /* Register that is a base for this frame - FP for normal frame, SP for
59 non-FP frames. */
60 int frame_base_reg;
62 /* Offset from the previous SP to the current frame base. If GCC uses
63 `SUB SP,SP,offset` to allocate space for local variables, then it will be
64 done after setting up a frame pointer, but it still will be considered
65 part of prologue, therefore SP will be lesser than FP at the end of the
66 prologue analysis. In this case that would be an offset from old SP to a
67 new FP. But in case of non-FP frames, frame base is an SP and thus that
68 would be an offset from old SP to new SP. What is important is that this
69 is an offset from old SP to a known register, so it can be used to find
70 old SP.
72 Using FP is preferable, when possible, because SP can change in function
73 body after prologue due to alloca, variadic arguments or other shenanigans.
74 If that is the case in the caller frame, then PREV_SP will point to SP at
75 the moment of function call, but it will be different from SP value at the
76 end of the caller prologue. As a result it will not be possible to
77 reconstruct caller's frame and go past it in the backtrace. Those things
78 are unlikely to happen to FP - FP value at the moment of function call (as
79 stored on stack in callee prologue) is also an FP value at the end of the
80 caller's prologue. */
82 LONGEST frame_base_offset;
84 /* Store addresses for registers saved in prologue. During prologue analysis
85 GDB stores offsets relatively to "old SP", then after old SP is evaluated,
86 offsets are replaced with absolute addresses. */
87 trad_frame_saved_reg *saved_regs;
90 /* Global debug flag. */
92 bool arc_debug;
94 /* List of "maintenance print arc" commands. */
96 static struct cmd_list_element *maintenance_print_arc_list = NULL;
98 /* A set of registers that we expect to find in a tdesc_feature. These
99 are used in ARC_TDESC_INIT when processing the target description. */
101 struct arc_register_feature
103 /* Information for a single register. */
104 struct register_info
106 /* The GDB register number for this register. */
107 int regnum;
109 /* List of names for this register. The first name in this list is the
110 preferred name, the name GDB will use when describing this register. */
111 std::vector<const char *> names;
113 /* When true, this register must be present in this feature set. */
114 bool required_p;
117 /* The name for this feature. This is the name used to find this feature
118 within the target description. */
119 const char *name;
121 /* List of all the registers that we expect to encounter in this register
122 set. */
123 std::vector<struct register_info> registers;
126 /* Obsolete feature names for backward compatibility. */
127 static const char *ARC_CORE_V1_OBSOLETE_FEATURE_NAME
128 = "org.gnu.gdb.arc.core.arcompact";
129 static const char *ARC_CORE_V2_OBSOLETE_FEATURE_NAME
130 = "org.gnu.gdb.arc.core.v2";
131 static const char *ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME
132 = "org.gnu.gdb.arc.core-reduced.v2";
133 static const char *ARC_AUX_OBSOLETE_FEATURE_NAME
134 = "org.gnu.gdb.arc.aux-minimal";
135 /* Modern feature names. */
136 static const char *ARC_CORE_FEATURE_NAME = "org.gnu.gdb.arc.core";
137 static const char *ARC_AUX_FEATURE_NAME = "org.gnu.gdb.arc.aux";
139 /* ARCv1 (ARC600, ARC601, ARC700) general core registers feature set.
140 See also arc_update_acc_reg_names() for "accl/acch" names. */
142 static struct arc_register_feature arc_v1_core_reg_feature =
144 ARC_CORE_FEATURE_NAME,
146 { ARC_R0_REGNUM + 0, { "r0" }, true },
147 { ARC_R0_REGNUM + 1, { "r1" }, true },
148 { ARC_R0_REGNUM + 2, { "r2" }, true },
149 { ARC_R0_REGNUM + 3, { "r3" }, true },
150 { ARC_R0_REGNUM + 4, { "r4" }, false },
151 { ARC_R0_REGNUM + 5, { "r5" }, false },
152 { ARC_R0_REGNUM + 6, { "r6" }, false },
153 { ARC_R0_REGNUM + 7, { "r7" }, false },
154 { ARC_R0_REGNUM + 8, { "r8" }, false },
155 { ARC_R0_REGNUM + 9, { "r9" }, false },
156 { ARC_R0_REGNUM + 10, { "r10" }, true },
157 { ARC_R0_REGNUM + 11, { "r11" }, true },
158 { ARC_R0_REGNUM + 12, { "r12" }, true },
159 { ARC_R0_REGNUM + 13, { "r13" }, true },
160 { ARC_R0_REGNUM + 14, { "r14" }, true },
161 { ARC_R0_REGNUM + 15, { "r15" }, true },
162 { ARC_R0_REGNUM + 16, { "r16" }, false },
163 { ARC_R0_REGNUM + 17, { "r17" }, false },
164 { ARC_R0_REGNUM + 18, { "r18" }, false },
165 { ARC_R0_REGNUM + 19, { "r19" }, false },
166 { ARC_R0_REGNUM + 20, { "r20" }, false },
167 { ARC_R0_REGNUM + 21, { "r21" }, false },
168 { ARC_R0_REGNUM + 22, { "r22" }, false },
169 { ARC_R0_REGNUM + 23, { "r23" }, false },
170 { ARC_R0_REGNUM + 24, { "r24" }, false },
171 { ARC_R0_REGNUM + 25, { "r25" }, false },
172 { ARC_R0_REGNUM + 26, { "gp" }, true },
173 { ARC_R0_REGNUM + 27, { "fp" }, true },
174 { ARC_R0_REGNUM + 28, { "sp" }, true },
175 { ARC_R0_REGNUM + 29, { "ilink1" }, false },
176 { ARC_R0_REGNUM + 30, { "ilink2" }, false },
177 { ARC_R0_REGNUM + 31, { "blink" }, true },
178 { ARC_R0_REGNUM + 32, { "r32" }, false },
179 { ARC_R0_REGNUM + 33, { "r33" }, false },
180 { ARC_R0_REGNUM + 34, { "r34" }, false },
181 { ARC_R0_REGNUM + 35, { "r35" }, false },
182 { ARC_R0_REGNUM + 36, { "r36" }, false },
183 { ARC_R0_REGNUM + 37, { "r37" }, false },
184 { ARC_R0_REGNUM + 38, { "r38" }, false },
185 { ARC_R0_REGNUM + 39, { "r39" }, false },
186 { ARC_R0_REGNUM + 40, { "r40" }, false },
187 { ARC_R0_REGNUM + 41, { "r41" }, false },
188 { ARC_R0_REGNUM + 42, { "r42" }, false },
189 { ARC_R0_REGNUM + 43, { "r43" }, false },
190 { ARC_R0_REGNUM + 44, { "r44" }, false },
191 { ARC_R0_REGNUM + 45, { "r45" }, false },
192 { ARC_R0_REGNUM + 46, { "r46" }, false },
193 { ARC_R0_REGNUM + 47, { "r47" }, false },
194 { ARC_R0_REGNUM + 48, { "r48" }, false },
195 { ARC_R0_REGNUM + 49, { "r49" }, false },
196 { ARC_R0_REGNUM + 50, { "r50" }, false },
197 { ARC_R0_REGNUM + 51, { "r51" }, false },
198 { ARC_R0_REGNUM + 52, { "r52" }, false },
199 { ARC_R0_REGNUM + 53, { "r53" }, false },
200 { ARC_R0_REGNUM + 54, { "r54" }, false },
201 { ARC_R0_REGNUM + 55, { "r55" }, false },
202 { ARC_R0_REGNUM + 56, { "r56" }, false },
203 { ARC_R0_REGNUM + 57, { "r57" }, false },
204 { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
205 { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
206 { ARC_R0_REGNUM + 60, { "lp_count" }, false },
207 { ARC_R0_REGNUM + 61, { "reserved" }, false },
208 { ARC_R0_REGNUM + 62, { "limm" }, false },
209 { ARC_R0_REGNUM + 63, { "pcl" }, true }
213 /* ARCv2 (ARCHS) general core registers feature set. See also
214 arc_update_acc_reg_names() for "accl/acch" names. */
216 static struct arc_register_feature arc_v2_core_reg_feature =
218 ARC_CORE_FEATURE_NAME,
220 { ARC_R0_REGNUM + 0, { "r0" }, true },
221 { ARC_R0_REGNUM + 1, { "r1" }, true },
222 { ARC_R0_REGNUM + 2, { "r2" }, true },
223 { ARC_R0_REGNUM + 3, { "r3" }, true },
224 { ARC_R0_REGNUM + 4, { "r4" }, false },
225 { ARC_R0_REGNUM + 5, { "r5" }, false },
226 { ARC_R0_REGNUM + 6, { "r6" }, false },
227 { ARC_R0_REGNUM + 7, { "r7" }, false },
228 { ARC_R0_REGNUM + 8, { "r8" }, false },
229 { ARC_R0_REGNUM + 9, { "r9" }, false },
230 { ARC_R0_REGNUM + 10, { "r10" }, true },
231 { ARC_R0_REGNUM + 11, { "r11" }, true },
232 { ARC_R0_REGNUM + 12, { "r12" }, true },
233 { ARC_R0_REGNUM + 13, { "r13" }, true },
234 { ARC_R0_REGNUM + 14, { "r14" }, true },
235 { ARC_R0_REGNUM + 15, { "r15" }, true },
236 { ARC_R0_REGNUM + 16, { "r16" }, false },
237 { ARC_R0_REGNUM + 17, { "r17" }, false },
238 { ARC_R0_REGNUM + 18, { "r18" }, false },
239 { ARC_R0_REGNUM + 19, { "r19" }, false },
240 { ARC_R0_REGNUM + 20, { "r20" }, false },
241 { ARC_R0_REGNUM + 21, { "r21" }, false },
242 { ARC_R0_REGNUM + 22, { "r22" }, false },
243 { ARC_R0_REGNUM + 23, { "r23" }, false },
244 { ARC_R0_REGNUM + 24, { "r24" }, false },
245 { ARC_R0_REGNUM + 25, { "r25" }, false },
246 { ARC_R0_REGNUM + 26, { "gp" }, true },
247 { ARC_R0_REGNUM + 27, { "fp" }, true },
248 { ARC_R0_REGNUM + 28, { "sp" }, true },
249 { ARC_R0_REGNUM + 29, { "ilink" }, false },
250 { ARC_R0_REGNUM + 30, { "r30" }, true },
251 { ARC_R0_REGNUM + 31, { "blink" }, true },
252 { ARC_R0_REGNUM + 32, { "r32" }, false },
253 { ARC_R0_REGNUM + 33, { "r33" }, false },
254 { ARC_R0_REGNUM + 34, { "r34" }, false },
255 { ARC_R0_REGNUM + 35, { "r35" }, false },
256 { ARC_R0_REGNUM + 36, { "r36" }, false },
257 { ARC_R0_REGNUM + 37, { "r37" }, false },
258 { ARC_R0_REGNUM + 38, { "r38" }, false },
259 { ARC_R0_REGNUM + 39, { "r39" }, false },
260 { ARC_R0_REGNUM + 40, { "r40" }, false },
261 { ARC_R0_REGNUM + 41, { "r41" }, false },
262 { ARC_R0_REGNUM + 42, { "r42" }, false },
263 { ARC_R0_REGNUM + 43, { "r43" }, false },
264 { ARC_R0_REGNUM + 44, { "r44" }, false },
265 { ARC_R0_REGNUM + 45, { "r45" }, false },
266 { ARC_R0_REGNUM + 46, { "r46" }, false },
267 { ARC_R0_REGNUM + 47, { "r47" }, false },
268 { ARC_R0_REGNUM + 48, { "r48" }, false },
269 { ARC_R0_REGNUM + 49, { "r49" }, false },
270 { ARC_R0_REGNUM + 50, { "r50" }, false },
271 { ARC_R0_REGNUM + 51, { "r51" }, false },
272 { ARC_R0_REGNUM + 52, { "r52" }, false },
273 { ARC_R0_REGNUM + 53, { "r53" }, false },
274 { ARC_R0_REGNUM + 54, { "r54" }, false },
275 { ARC_R0_REGNUM + 55, { "r55" }, false },
276 { ARC_R0_REGNUM + 56, { "r56" }, false },
277 { ARC_R0_REGNUM + 57, { "r57" }, false },
278 { ARC_R0_REGNUM + 58, { "r58", "accl" }, false },
279 { ARC_R0_REGNUM + 59, { "r59", "acch" }, false },
280 { ARC_R0_REGNUM + 60, { "lp_count" }, false },
281 { ARC_R0_REGNUM + 61, { "reserved" }, false },
282 { ARC_R0_REGNUM + 62, { "limm" }, false },
283 { ARC_R0_REGNUM + 63, { "pcl" }, true }
287 /* The common auxiliary registers feature set. The REGNUM field
288 must match the ARC_REGNUM enum in arc-tdep.h. */
290 static const struct arc_register_feature arc_common_aux_reg_feature =
292 ARC_AUX_FEATURE_NAME,
294 { ARC_FIRST_AUX_REGNUM + 0, { "pc" }, true },
295 { ARC_FIRST_AUX_REGNUM + 1, { "status32" }, true },
296 { ARC_FIRST_AUX_REGNUM + 2, { "lp_start" }, false },
297 { ARC_FIRST_AUX_REGNUM + 3, { "lp_end" }, false },
298 { ARC_FIRST_AUX_REGNUM + 4, { "bta" }, false }
302 static char *arc_disassembler_options = NULL;
304 /* Functions are sorted in the order as they are used in the
305 _initialize_arc_tdep (), which uses the same order as gdbarch.h. Static
306 functions are defined before the first invocation. */
308 /* Returns an unsigned value of OPERAND_NUM in instruction INSN.
309 For relative branch instructions returned value is an offset, not an actual
310 branch target. */
312 static ULONGEST
313 arc_insn_get_operand_value (const struct arc_instruction &insn,
314 unsigned int operand_num)
316 switch (insn.operands[operand_num].kind)
318 case ARC_OPERAND_KIND_LIMM:
319 gdb_assert (insn.limm_p);
320 return insn.limm_value;
321 case ARC_OPERAND_KIND_SHIMM:
322 return insn.operands[operand_num].value;
323 default:
324 /* Value in instruction is a register number. */
325 regcache *regcache = get_thread_regcache (inferior_thread ());
326 ULONGEST value;
327 regcache_cooked_read_unsigned (regcache,
328 insn.operands[operand_num].value,
329 &value);
330 return value;
334 /* Like arc_insn_get_operand_value, but returns a signed value. */
336 static LONGEST
337 arc_insn_get_operand_value_signed (const struct arc_instruction &insn,
338 unsigned int operand_num)
340 switch (insn.operands[operand_num].kind)
342 case ARC_OPERAND_KIND_LIMM:
343 gdb_assert (insn.limm_p);
344 /* Convert unsigned raw value to signed one. This assumes 2's
345 complement arithmetic, but so is the LONG_MIN value from generic
346 defs.h and that assumption is true for ARC. */
347 static_assert (sizeof (insn.limm_value) == sizeof (int));
348 return (((LONGEST) insn.limm_value) ^ INT_MIN) - INT_MIN;
349 case ARC_OPERAND_KIND_SHIMM:
350 /* Sign conversion has been done by binutils. */
351 return insn.operands[operand_num].value;
352 default:
353 /* Value in instruction is a register number. */
354 regcache *regcache = get_thread_regcache (inferior_thread ());
355 LONGEST value;
356 regcache_cooked_read_signed (regcache,
357 insn.operands[operand_num].value,
358 &value);
359 return value;
363 /* Get register with base address of memory operation. */
365 static int
366 arc_insn_get_memory_base_reg (const struct arc_instruction &insn)
368 /* POP_S and PUSH_S have SP as an implicit argument in a disassembler. */
369 if (insn.insn_class == PUSH || insn.insn_class == POP)
370 return ARC_SP_REGNUM;
372 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
374 /* Other instructions all have at least two operands: operand 0 is data,
375 operand 1 is address. Operand 2 is offset from address. However, see
376 comment to arc_instruction.operands - in some cases, third operand may be
377 missing, namely if it is 0. */
378 gdb_assert (insn.operands_count >= 2);
379 return insn.operands[1].value;
382 /* Get offset of a memory operation INSN. */
384 static CORE_ADDR
385 arc_insn_get_memory_offset (const struct arc_instruction &insn)
387 /* POP_S and PUSH_S have offset as an implicit argument in a
388 disassembler. */
389 if (insn.insn_class == POP)
390 return 4;
391 else if (insn.insn_class == PUSH)
392 return -4;
394 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
396 /* Other instructions all have at least two operands: operand 0 is data,
397 operand 1 is address. Operand 2 is offset from address. However, see
398 comment to arc_instruction.operands - in some cases, third operand may be
399 missing, namely if it is 0. */
400 if (insn.operands_count < 3)
401 return 0;
403 CORE_ADDR value = arc_insn_get_operand_value (insn, 2);
404 /* Handle scaling. */
405 if (insn.writeback_mode == ARC_WRITEBACK_AS)
407 /* Byte data size is not valid for AS. Halfword means shift by 1 bit.
408 Word and double word means shift by 2 bits. */
409 gdb_assert (insn.data_size_mode != ARC_SCALING_B);
410 if (insn.data_size_mode == ARC_SCALING_H)
411 value <<= 1;
412 else
413 value <<= 2;
415 return value;
418 CORE_ADDR
419 arc_insn_get_branch_target (const struct arc_instruction &insn)
421 gdb_assert (insn.is_control_flow);
423 /* BI [c]: PC = nextPC + (c << 2). */
424 if (insn.insn_class == BI)
426 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
427 return arc_insn_get_linear_next_pc (insn) + (reg_value << 2);
429 /* BIH [c]: PC = nextPC + (c << 1). */
430 else if (insn.insn_class == BIH)
432 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
433 return arc_insn_get_linear_next_pc (insn) + (reg_value << 1);
435 /* JLI and EI. */
436 /* JLI and EI depend on optional AUX registers. Not supported right now. */
437 else if (insn.insn_class == JLI)
439 gdb_printf (gdb_stderr,
440 "JLI_S instruction is not supported by the GDB.");
441 return 0;
443 else if (insn.insn_class == EI)
445 gdb_printf (gdb_stderr,
446 "EI_S instruction is not supported by the GDB.");
447 return 0;
449 /* LEAVE_S: PC = BLINK. */
450 else if (insn.insn_class == LEAVE)
452 regcache *regcache = get_thread_regcache (inferior_thread ());
453 ULONGEST value;
454 regcache_cooked_read_unsigned (regcache, ARC_BLINK_REGNUM, &value);
455 return value;
457 /* BBIT0/1, BRcc: PC = currentPC + operand. */
458 else if (insn.insn_class == BBIT0 || insn.insn_class == BBIT1
459 || insn.insn_class == BRCC)
461 /* Most instructions has branch target as their sole argument. However
462 conditional brcc/bbit has it as a third operand. */
463 CORE_ADDR pcrel_addr = arc_insn_get_operand_value (insn, 2);
465 /* Offset is relative to the 4-byte aligned address of the current
466 instruction, hence last two bits should be truncated. */
467 return pcrel_addr + align_down (insn.address, 4);
469 /* B, Bcc, BL, BLcc, LP, LPcc: PC = currentPC + operand. */
470 else if (insn.insn_class == BRANCH || insn.insn_class == LOOP)
472 CORE_ADDR pcrel_addr = arc_insn_get_operand_value (insn, 0);
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 /* J, Jcc, JL, JLcc: PC = operand. */
479 else if (insn.insn_class == JUMP)
481 /* All jumps are single-operand. */
482 return arc_insn_get_operand_value (insn, 0);
485 /* This is some new and unknown instruction. */
486 gdb_assert_not_reached ("Unknown branch instruction.");
489 /* Dump INSN into gdb_stdlog. */
491 static void
492 arc_insn_dump (const struct arc_instruction &insn)
494 struct gdbarch *gdbarch = current_inferior ()->arch ();
496 arc_print ("Dumping arc_instruction at %s\n",
497 paddress (gdbarch, insn.address));
498 arc_print ("\tlength = %u\n", insn.length);
500 if (!insn.valid)
502 arc_print ("\tThis is not a valid ARC instruction.\n");
503 return;
506 arc_print ("\tlength_with_limm = %u\n", insn.length + (insn.limm_p ? 4 : 0));
507 arc_print ("\tcc = 0x%x\n", insn.condition_code);
508 arc_print ("\tinsn_class = %u\n", insn.insn_class);
509 arc_print ("\tis_control_flow = %i\n", insn.is_control_flow);
510 arc_print ("\thas_delay_slot = %i\n", insn.has_delay_slot);
512 CORE_ADDR next_pc = arc_insn_get_linear_next_pc (insn);
513 arc_print ("\tlinear_next_pc = %s\n", paddress (gdbarch, next_pc));
515 if (insn.is_control_flow)
517 CORE_ADDR t = arc_insn_get_branch_target (insn);
518 arc_print ("\tbranch_target = %s\n", paddress (gdbarch, t));
521 arc_print ("\tlimm_p = %i\n", insn.limm_p);
522 if (insn.limm_p)
523 arc_print ("\tlimm_value = 0x%08x\n", insn.limm_value);
525 if (insn.insn_class == STORE || insn.insn_class == LOAD
526 || insn.insn_class == PUSH || insn.insn_class == POP)
528 arc_print ("\twriteback_mode = %u\n", insn.writeback_mode);
529 arc_print ("\tdata_size_mode = %u\n", insn.data_size_mode);
530 arc_print ("\tmemory_base_register = %s\n",
531 gdbarch_register_name (gdbarch,
532 arc_insn_get_memory_base_reg (insn)));
533 /* get_memory_offset returns an unsigned CORE_ADDR, but treat it as a
534 LONGEST for a nicer representation. */
535 arc_print ("\taddr_offset = %s\n",
536 plongest (arc_insn_get_memory_offset (insn)));
539 arc_print ("\toperands_count = %u\n", insn.operands_count);
540 for (unsigned int i = 0; i < insn.operands_count; ++i)
542 int is_reg = (insn.operands[i].kind == ARC_OPERAND_KIND_REG);
544 arc_print ("\toperand[%u] = {\n", i);
545 arc_print ("\t\tis_reg = %i\n", is_reg);
546 if (is_reg)
547 arc_print ("\t\tregister = %s\n",
548 gdbarch_register_name (gdbarch, insn.operands[i].value));
549 /* Don't know if this value is signed or not, so print both
550 representations. This tends to look quite ugly, especially for big
551 numbers. */
552 arc_print ("\t\tunsigned value = %s\n",
553 pulongest (arc_insn_get_operand_value (insn, i)));
554 arc_print ("\t\tsigned value = %s\n",
555 plongest (arc_insn_get_operand_value_signed (insn, i)));
556 arc_print ("\t}\n");
560 CORE_ADDR
561 arc_insn_get_linear_next_pc (const struct arc_instruction &insn)
563 /* In ARC long immediate is always 4 bytes. */
564 return (insn.address + insn.length + (insn.limm_p ? 4 : 0));
567 /* Implement the "write_pc" gdbarch method.
569 In ARC PC register is a normal register so in most cases setting PC value
570 is a straightforward process: debugger just writes PC value. However it
571 gets trickier in case when current instruction is an instruction in delay
572 slot. In this case CPU will execute instruction at current PC value, then
573 will set PC to the current value of BTA register; also current instruction
574 cannot be branch/jump and some of the other instruction types. Thus if
575 debugger would try to just change PC value in this case, this instruction
576 will get executed, but then core will "jump" to the original branch target.
578 Whether current instruction is a delay-slot instruction or not is indicated
579 by DE bit in STATUS32 register indicates if current instruction is a delay
580 slot instruction. This bit is writable by debug host, which allows debug
581 host to prevent core from jumping after the delay slot instruction. It
582 also works in another direction: setting this bit will make core to treat
583 any current instructions as a delay slot instruction and to set PC to the
584 current value of BTA register.
586 To workaround issues with changing PC register while in delay slot
587 instruction, debugger should check for the STATUS32.DE bit and reset it if
588 it is set. No other change is required in this function. Most common
589 case, where this function might be required is calling inferior functions
590 from debugger. Generic GDB logic handles this pretty well: current values
591 of registers are stored, value of PC is changed (that is the job of this
592 function), and after inferior function is executed, GDB restores all
593 registers, include BTA and STATUS32, which also means that core is returned
594 to its original state of being halted on delay slot instructions.
596 This method is useless for ARC 600, because it doesn't have externally
597 exposed BTA register. In the case of ARC 600 it is impossible to restore
598 core to its state in all occasions thus core should never be halted (from
599 the perspective of debugger host) in the delay slot. */
601 static void
602 arc_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
604 struct gdbarch *gdbarch = regcache->arch ();
606 arc_debug_printf ("Writing PC, new value=%s",
607 paddress (gdbarch, new_pc));
609 regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
610 new_pc);
612 ULONGEST status32;
613 regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
614 &status32);
616 if ((status32 & ARC_STATUS32_DE_MASK) != 0)
618 arc_debug_printf ("Changing PC while in delay slot. Will "
619 "reset STATUS32.DE bit to zero. Value of STATUS32 "
620 "register is 0x%s",
621 phex (status32, ARC_REGISTER_SIZE));
623 /* Reset bit and write to the cache. */
624 status32 &= ~0x40;
625 regcache_cooked_write_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
626 status32);
630 /* Implement the "virtual_frame_pointer" gdbarch method.
632 According to ABI the FP (r27) is used to point to the middle of the current
633 stack frame, just below the saved FP and before local variables, register
634 spill area and outgoing args. However for optimization levels above O2 and
635 in any case in leaf functions, the frame pointer is usually not set at all.
636 The exception being when handling nested functions.
638 We use this function to return a "virtual" frame pointer, marking the start
639 of the current stack frame as a register-offset pair. If the FP is not
640 being used, then it should return SP, with an offset of the frame size.
642 The current implementation doesn't actually know the frame size, nor
643 whether the FP is actually being used, so for now we just return SP and an
644 offset of zero. This is no worse than other architectures, but is needed
645 to avoid assertion failures.
647 TODO: Can we determine the frame size to get a correct offset?
649 PC is a program counter where we need the virtual FP. REG_PTR is the base
650 register used for the virtual FP. OFFSET_PTR is the offset used for the
651 virtual FP. */
653 static void
654 arc_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
655 int *reg_ptr, LONGEST *offset_ptr)
657 *reg_ptr = gdbarch_sp_regnum (gdbarch);
658 *offset_ptr = 0;
661 /* Implement the "push_dummy_call" gdbarch method.
663 Stack Frame Layout
665 This shows the layout of the stack frame for the general case of a
666 function call; a given function might not have a variable number of
667 arguments or local variables, or might not save any registers, so it would
668 not have the corresponding frame areas. Additionally, a leaf function
669 (i.e. one which calls no other functions) does not need to save the
670 contents of the BLINK register (which holds its return address), and a
671 function might not have a frame pointer.
673 The stack grows downward, so SP points below FP in memory; SP always
674 points to the last used word on the stack, not the first one.
676 | | |
677 | arg word N | | caller's
678 | : | | frame
679 | arg word 10 | |
680 | arg word 9 | |
681 old SP ---> +-----------------------+ --+
682 | | |
683 | callee-saved | |
684 | registers | |
685 | including fp, blink | |
686 | | | callee's
687 new FP ---> +-----------------------+ | frame
688 | | |
689 | local | |
690 | variables | |
691 | | |
692 | register | |
693 | spill area | |
694 | | |
695 | outgoing args | |
696 | | |
697 new SP ---> +-----------------------+ --+
699 | unused |
704 downwards
706 The list of arguments to be passed to a function is considered to be a
707 sequence of _N_ words (as though all the parameters were stored in order in
708 memory with each parameter occupying an integral number of words). Words
709 1..8 are passed in registers 0..7; if the function has more than 8 words of
710 arguments then words 9..@em N are passed on the stack in the caller's frame.
712 If the function has a variable number of arguments, e.g. it has a form such
713 as `function (p1, p2, ...);' and _P_ words are required to hold the values
714 of the named parameters (which are passed in registers 0..@em P -1), then
715 the remaining 8 - _P_ words passed in registers _P_..7 are spilled into the
716 top of the frame so that the anonymous parameter words occupy a continuous
717 region.
719 Any arguments are already in target byte order. We just need to store
720 them!
722 BP_ADDR is the return address where breakpoint must be placed. NARGS is
723 the number of arguments to the function. ARGS is the arguments values (in
724 target byte order). SP is the Current value of SP register. STRUCT_RETURN
725 is TRUE if structures are returned by the function. STRUCT_ADDR is the
726 hidden address for returning a struct. Returns SP of a new frame. */
728 static CORE_ADDR
729 arc_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
730 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
731 struct value **args, CORE_ADDR sp,
732 function_call_return_method return_method,
733 CORE_ADDR struct_addr)
735 arc_debug_printf ("nargs = %d", nargs);
737 int arg_reg = ARC_FIRST_ARG_REGNUM;
739 /* Push the return address. */
740 regcache_cooked_write_unsigned (regcache, ARC_BLINK_REGNUM, bp_addr);
742 /* Are we returning a value using a structure return instead of a normal
743 value return? If so, struct_addr is the address of the reserved space for
744 the return structure to be written on the stack, and that address is
745 passed to that function as a hidden first argument. */
746 if (return_method == return_method_struct)
748 /* Pass the return address in the first argument register. */
749 regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
751 arc_debug_printf ("struct return address %s passed in R%d",
752 print_core_address (gdbarch, struct_addr), arg_reg);
754 arg_reg++;
757 if (nargs > 0)
759 unsigned int total_space = 0;
761 /* How much space do the arguments occupy in total? Must round each
762 argument's size up to an integral number of words. */
763 for (int i = 0; i < nargs; i++)
765 unsigned int len = args[i]->type ()->length ();
766 unsigned int space = align_up (len, 4);
768 total_space += space;
770 arc_debug_printf ("arg %d: %u bytes -> %u", i, len, space);
773 /* Allocate a buffer to hold a memory image of the arguments. */
774 gdb_byte *memory_image = XCNEWVEC (gdb_byte, total_space);
776 /* Now copy all of the arguments into the buffer, correctly aligned. */
777 gdb_byte *data = memory_image;
778 for (int i = 0; i < nargs; i++)
780 unsigned int len = args[i]->type ()->length ();
781 unsigned int space = align_up (len, 4);
783 memcpy (data, args[i]->contents ().data (), (size_t) len);
784 arc_debug_printf ("copying arg %d, val 0x%08x, len %d to mem",
785 i, *((int *) args[i]->contents ().data ()),
786 len);
788 data += space;
791 /* Now load as much as possible of the memory image into registers. */
792 data = memory_image;
793 while (arg_reg <= ARC_LAST_ARG_REGNUM)
795 arc_debug_printf ("passing 0x%02x%02x%02x%02x in register R%d",
796 data[0], data[1], data[2], data[3], arg_reg);
798 /* Note we don't use write_unsigned here, since that would convert
799 the byte order, but we are already in the correct byte order. */
800 regcache->cooked_write (arg_reg, data);
802 data += ARC_REGISTER_SIZE;
803 total_space -= ARC_REGISTER_SIZE;
805 /* All the data is now in registers. */
806 if (total_space == 0)
807 break;
809 arg_reg++;
812 /* If there is any data left, push it onto the stack (in a single write
813 operation). */
814 if (total_space > 0)
816 arc_debug_printf ("passing %d bytes on stack\n", total_space);
818 sp -= total_space;
819 write_memory (sp, data, (int) total_space);
822 xfree (memory_image);
825 /* Finally, update the SP register. */
826 regcache_cooked_write_unsigned (regcache, gdbarch_sp_regnum (gdbarch), sp);
828 return sp;
831 /* Implement the "push_dummy_code" gdbarch method.
833 We don't actually push any code. We just identify where a breakpoint can
834 be inserted to which we are can return and the resume address where we
835 should be called.
837 ARC does not necessarily have an executable stack, so we can't put the
838 return breakpoint there. Instead we put it at the entry point of the
839 function. This means the SP is unchanged.
841 SP is a current stack pointer FUNADDR is an address of the function to be
842 called. ARGS is arguments to pass. NARGS is a number of args to pass.
843 VALUE_TYPE is a type of value returned. REAL_PC is a resume address when
844 the function is called. BP_ADDR is an address where breakpoint should be
845 set. Returns the updated stack pointer. */
847 static CORE_ADDR
848 arc_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
849 struct value **args, int nargs, struct type *value_type,
850 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
851 struct regcache *regcache)
853 *real_pc = funaddr;
854 *bp_addr = entry_point_address ();
855 return sp;
858 /* Implement the "cannot_fetch_register" gdbarch method. */
860 static int
861 arc_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
863 /* Assume that register is readable if it is unknown. LIMM and RESERVED are
864 not real registers, but specific register numbers. They are available as
865 regnums to align architectural register numbers with GDB internal regnums,
866 but they shouldn't appear in target descriptions generated by
867 GDB-servers. */
868 switch (regnum)
870 case ARC_RESERVED_REGNUM:
871 case ARC_LIMM_REGNUM:
872 return true;
873 default:
874 return false;
878 /* Implement the "cannot_store_register" gdbarch method. */
880 static int
881 arc_cannot_store_register (struct gdbarch *gdbarch, int regnum)
883 /* Assume that register is writable if it is unknown. See comment in
884 arc_cannot_fetch_register about LIMM and RESERVED. */
885 switch (regnum)
887 case ARC_RESERVED_REGNUM:
888 case ARC_LIMM_REGNUM:
889 case ARC_PCL_REGNUM:
890 return true;
891 default:
892 return false;
896 /* Get the return value of a function from the registers/memory used to
897 return it, according to the convention used by the ABI - 4-bytes values are
898 in the R0, while 8-byte values are in the R0-R1.
900 TODO: This implementation ignores the case of "complex double", where
901 according to ABI, value is returned in the R0-R3 registers.
903 TYPE is a returned value's type. VALBUF is a buffer for the returned
904 value. */
906 static void
907 arc_extract_return_value (struct gdbarch *gdbarch, struct type *type,
908 struct regcache *regcache, gdb_byte *valbuf)
910 unsigned int len = type->length ();
912 arc_debug_printf ("called");
914 if (len <= ARC_REGISTER_SIZE)
916 ULONGEST val;
918 /* Get the return value from one register. */
919 regcache_cooked_read_unsigned (regcache, ARC_R0_REGNUM, &val);
920 store_unsigned_integer (valbuf, (int) len,
921 gdbarch_byte_order (gdbarch), val);
923 arc_debug_printf ("returning 0x%s", phex (val, ARC_REGISTER_SIZE));
925 else if (len <= ARC_REGISTER_SIZE * 2)
927 ULONGEST low, high;
929 /* Get the return value from two registers. */
930 regcache_cooked_read_unsigned (regcache, ARC_R0_REGNUM, &low);
931 regcache_cooked_read_unsigned (regcache, ARC_R1_REGNUM, &high);
933 store_unsigned_integer (valbuf, ARC_REGISTER_SIZE,
934 gdbarch_byte_order (gdbarch), low);
935 store_unsigned_integer (valbuf + ARC_REGISTER_SIZE,
936 (int) len - ARC_REGISTER_SIZE,
937 gdbarch_byte_order (gdbarch), high);
939 arc_debug_printf ("returning 0x%s%s",
940 phex (high, ARC_REGISTER_SIZE),
941 phex (low, ARC_REGISTER_SIZE));
943 else
944 error (_("arc: extract_return_value: type length %u too large"), len);
948 /* Store the return value of a function into the registers/memory used to
949 return it, according to the convention used by the ABI.
951 TODO: This implementation ignores the case of "complex double", where
952 according to ABI, value is returned in the R0-R3 registers.
954 TYPE is a returned value's type. VALBUF is a buffer with the value to
955 return. */
957 static void
958 arc_store_return_value (struct gdbarch *gdbarch, struct type *type,
959 struct regcache *regcache, const gdb_byte *valbuf)
961 unsigned int len = type->length ();
963 arc_debug_printf ("called");
965 if (len <= ARC_REGISTER_SIZE)
967 ULONGEST val;
969 /* Put the return value into one register. */
970 val = extract_unsigned_integer (valbuf, (int) len,
971 gdbarch_byte_order (gdbarch));
972 regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, val);
974 arc_debug_printf ("storing 0x%s", phex (val, ARC_REGISTER_SIZE));
976 else if (len <= ARC_REGISTER_SIZE * 2)
978 ULONGEST low, high;
980 /* Put the return value into two registers. */
981 low = extract_unsigned_integer (valbuf, ARC_REGISTER_SIZE,
982 gdbarch_byte_order (gdbarch));
983 high = extract_unsigned_integer (valbuf + ARC_REGISTER_SIZE,
984 (int) len - ARC_REGISTER_SIZE,
985 gdbarch_byte_order (gdbarch));
987 regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, low);
988 regcache_cooked_write_unsigned (regcache, ARC_R1_REGNUM, high);
990 arc_debug_printf ("storing 0x%s%s",
991 phex (high, ARC_REGISTER_SIZE),
992 phex (low, ARC_REGISTER_SIZE));
994 else
995 error (_("arc_store_return_value: type length too large."));
998 /* Implement the "get_longjmp_target" gdbarch method. */
1000 static int
1001 arc_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
1003 arc_debug_printf ("called");
1005 struct gdbarch *gdbarch = get_frame_arch (frame);
1006 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
1007 int pc_offset = tdep->jb_pc * ARC_REGISTER_SIZE;
1008 gdb_byte buf[ARC_REGISTER_SIZE];
1009 CORE_ADDR jb_addr = get_frame_register_unsigned (frame, ARC_FIRST_ARG_REGNUM);
1011 if (target_read_memory (jb_addr + pc_offset, buf, ARC_REGISTER_SIZE))
1012 return 0; /* Failed to read from memory. */
1014 *pc = extract_unsigned_integer (buf, ARC_REGISTER_SIZE,
1015 gdbarch_byte_order (gdbarch));
1016 return 1;
1019 /* Implement the "return_value" gdbarch method. */
1021 static enum return_value_convention
1022 arc_return_value (struct gdbarch *gdbarch, struct value *function,
1023 struct type *valtype, struct regcache *regcache,
1024 gdb_byte *readbuf, const gdb_byte *writebuf)
1026 /* If the return type is a struct, or a union, or would occupy more than two
1027 registers, the ABI uses the "struct return convention": the calling
1028 function passes a hidden first parameter to the callee (in R0). That
1029 parameter is the address at which the value being returned should be
1030 stored. Otherwise, the result is returned in registers. */
1031 int is_struct_return = (valtype->code () == TYPE_CODE_STRUCT
1032 || valtype->code () == TYPE_CODE_UNION
1033 || valtype->length () > 2 * ARC_REGISTER_SIZE);
1035 arc_debug_printf ("readbuf = %s, writebuf = %s",
1036 host_address_to_string (readbuf),
1037 host_address_to_string (writebuf));
1039 if (writebuf != NULL)
1041 /* Case 1. GDB should not ask us to set a struct return value: it
1042 should know the struct return location and write the value there
1043 itself. */
1044 gdb_assert (!is_struct_return);
1045 arc_store_return_value (gdbarch, valtype, regcache, writebuf);
1047 else if (readbuf != NULL)
1049 /* Case 2. GDB should not ask us to get a struct return value: it
1050 should know the struct return location and read the value from there
1051 itself. */
1052 gdb_assert (!is_struct_return);
1053 arc_extract_return_value (gdbarch, valtype, regcache, readbuf);
1056 return (is_struct_return
1057 ? RETURN_VALUE_STRUCT_CONVENTION
1058 : RETURN_VALUE_REGISTER_CONVENTION);
1061 /* Return the base address of the frame. For ARC, the base address is the
1062 frame pointer. */
1064 static CORE_ADDR
1065 arc_frame_base_address (frame_info_ptr this_frame, void **prologue_cache)
1067 return (CORE_ADDR) get_frame_register_unsigned (this_frame, ARC_FP_REGNUM);
1070 /* Helper function that returns valid pv_t for an instruction operand:
1071 either a register or a constant. */
1073 static pv_t
1074 arc_pv_get_operand (pv_t *regs, const struct arc_instruction &insn, int operand)
1076 if (insn.operands[operand].kind == ARC_OPERAND_KIND_REG)
1077 return regs[insn.operands[operand].value];
1078 else
1079 return pv_constant (arc_insn_get_operand_value (insn, operand));
1082 /* Determine whether the given disassembled instruction may be part of a
1083 function prologue. If it is, the information in the frame unwind cache will
1084 be updated. */
1086 static bool
1087 arc_is_in_prologue (struct gdbarch *gdbarch, const struct arc_instruction &insn,
1088 pv_t *regs, struct pv_area *stack)
1090 /* It might be that currently analyzed address doesn't contain an
1091 instruction, hence INSN is not valid. It likely means that address points
1092 to a data, non-initialized memory, or middle of a 32-bit instruction. In
1093 practice this may happen if GDB connects to a remote target that has
1094 non-zeroed memory. GDB would read PC value and would try to analyze
1095 prologue, but there is no guarantee that memory contents at the address
1096 specified in PC is address is a valid instruction. There is not much that
1097 that can be done about that. */
1098 if (!insn.valid)
1099 return false;
1101 /* Branch/jump or a predicated instruction. */
1102 if (insn.is_control_flow || insn.condition_code != ARC_CC_AL)
1103 return false;
1105 /* Store of some register. May or may not update base address register. */
1106 if (insn.insn_class == STORE || insn.insn_class == PUSH)
1108 /* There is definitely at least one operand - register/value being
1109 stored. */
1110 gdb_assert (insn.operands_count > 0);
1112 /* Store at some constant address. */
1113 if (insn.operands_count > 1
1114 && insn.operands[1].kind != ARC_OPERAND_KIND_REG)
1115 return false;
1117 /* Writeback modes:
1118 Mode Address used Writeback value
1119 --------------------------------------------------
1120 No reg + offset no
1121 A/AW reg + offset reg + offset
1122 AB reg reg + offset
1123 AS reg + (offset << scaling) no
1125 "PUSH reg" is an alias to "ST.AW reg, [SP, -4]" encoding. However
1126 16-bit PUSH_S is a distinct instruction encoding, where offset and
1127 base register are implied through opcode. */
1129 /* Register with base memory address. */
1130 int base_reg = arc_insn_get_memory_base_reg (insn);
1132 /* Address where to write. arc_insn_get_memory_offset returns scaled
1133 value for ARC_WRITEBACK_AS. */
1134 pv_t addr;
1135 if (insn.writeback_mode == ARC_WRITEBACK_AB)
1136 addr = regs[base_reg];
1137 else
1138 addr = pv_add_constant (regs[base_reg],
1139 arc_insn_get_memory_offset (insn));
1141 if (stack->store_would_trash (addr))
1142 return false;
1144 if (insn.data_size_mode != ARC_SCALING_D)
1146 /* Find the value being stored. */
1147 pv_t store_value = arc_pv_get_operand (regs, insn, 0);
1149 /* What is the size of a the stored value? */
1150 CORE_ADDR size;
1151 if (insn.data_size_mode == ARC_SCALING_B)
1152 size = 1;
1153 else if (insn.data_size_mode == ARC_SCALING_H)
1154 size = 2;
1155 else
1156 size = ARC_REGISTER_SIZE;
1158 stack->store (addr, size, store_value);
1160 else
1162 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1164 /* If this is a double store, than write N+1 register as well. */
1165 pv_t store_value1 = regs[insn.operands[0].value];
1166 pv_t store_value2 = regs[insn.operands[0].value + 1];
1167 stack->store (addr, ARC_REGISTER_SIZE, store_value1);
1168 stack->store (pv_add_constant (addr, ARC_REGISTER_SIZE),
1169 ARC_REGISTER_SIZE, store_value2);
1171 else
1173 pv_t store_value
1174 = pv_constant (arc_insn_get_operand_value (insn, 0));
1175 stack->store (addr, ARC_REGISTER_SIZE * 2, store_value);
1179 /* Is base register updated? */
1180 if (insn.writeback_mode == ARC_WRITEBACK_A
1181 || insn.writeback_mode == ARC_WRITEBACK_AB)
1182 regs[base_reg] = pv_add_constant (regs[base_reg],
1183 arc_insn_get_memory_offset (insn));
1185 return true;
1187 else if (insn.insn_class == MOVE)
1189 gdb_assert (insn.operands_count == 2);
1191 /* Destination argument can be "0", so nothing will happen. */
1192 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1194 int dst_regnum = insn.operands[0].value;
1195 regs[dst_regnum] = arc_pv_get_operand (regs, insn, 1);
1197 return true;
1199 else if (insn.insn_class == SUB)
1201 gdb_assert (insn.operands_count == 3);
1203 /* SUB 0,b,c. */
1204 if (insn.operands[0].kind != ARC_OPERAND_KIND_REG)
1205 return true;
1207 int dst_regnum = insn.operands[0].value;
1208 regs[dst_regnum] = pv_subtract (arc_pv_get_operand (regs, insn, 1),
1209 arc_pv_get_operand (regs, insn, 2));
1210 return true;
1212 else if (insn.insn_class == ENTER)
1214 /* ENTER_S is a prologue-in-instruction - it saves all callee-saved
1215 registers according to given arguments thus greatly reducing code
1216 size. Which registers will be actually saved depends on arguments.
1218 ENTER_S {R13-...,FP,BLINK} stores registers in following order:
1220 new SP ->
1221 BLINK
1227 old SP ->
1229 There are up to three arguments for this opcode, as presented by ARC
1230 disassembler:
1231 1) amount of general-purpose registers to be saved - this argument is
1232 always present even when it is 0;
1233 2) FP register number (27) if FP has to be stored, otherwise argument
1234 is not present;
1235 3) BLINK register number (31) if BLINK has to be stored, otherwise
1236 argument is not present. If both FP and BLINK are stored, then FP
1237 is present before BLINK in argument list. */
1238 gdb_assert (insn.operands_count > 0);
1240 int regs_saved = arc_insn_get_operand_value (insn, 0);
1242 bool is_fp_saved;
1243 if (insn.operands_count > 1)
1244 is_fp_saved = (insn.operands[1].value == ARC_FP_REGNUM);
1245 else
1246 is_fp_saved = false;
1248 bool is_blink_saved;
1249 if (insn.operands_count > 1)
1250 is_blink_saved = (insn.operands[insn.operands_count - 1].value
1251 == ARC_BLINK_REGNUM);
1252 else
1253 is_blink_saved = false;
1255 /* Amount of bytes to be allocated to store specified registers. */
1256 CORE_ADDR st_size = ((regs_saved + is_fp_saved + is_blink_saved)
1257 * ARC_REGISTER_SIZE);
1258 pv_t new_sp = pv_add_constant (regs[ARC_SP_REGNUM], -st_size);
1260 /* Assume that if the last register (closest to new SP) can be written,
1261 then it is possible to write all of them. */
1262 if (stack->store_would_trash (new_sp))
1263 return false;
1265 /* Current store address. */
1266 pv_t addr = regs[ARC_SP_REGNUM];
1268 if (is_fp_saved)
1270 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1271 stack->store (addr, ARC_REGISTER_SIZE, regs[ARC_FP_REGNUM]);
1274 /* Registers are stored in backward order: from GP (R26) to R13. */
1275 for (int i = ARC_R13_REGNUM + regs_saved - 1; i >= ARC_R13_REGNUM; i--)
1277 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1278 stack->store (addr, ARC_REGISTER_SIZE, regs[i]);
1281 if (is_blink_saved)
1283 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1284 stack->store (addr, ARC_REGISTER_SIZE,
1285 regs[ARC_BLINK_REGNUM]);
1288 gdb_assert (pv_is_identical (addr, new_sp));
1290 regs[ARC_SP_REGNUM] = new_sp;
1292 if (is_fp_saved)
1293 regs[ARC_FP_REGNUM] = regs[ARC_SP_REGNUM];
1295 return true;
1298 /* Some other architectures, like nds32 or arm, try to continue as far as
1299 possible when building a prologue cache (as opposed to when skipping
1300 prologue), so that cache will be as full as possible. However current
1301 code for ARC doesn't recognize some instructions that may modify SP, like
1302 ADD, AND, OR, etc, hence there is no way to guarantee that SP wasn't
1303 clobbered by the skipped instruction. Potential existence of extension
1304 instruction, which may do anything they want makes this even more complex,
1305 so it is just better to halt on a first unrecognized instruction. */
1307 return false;
1310 /* Analyze the prologue and update the corresponding frame cache for the frame
1311 unwinder for unwinding frames that doesn't have debug info. In such
1312 situation GDB attempts to parse instructions in the prologue to understand
1313 where each register is saved.
1315 If CACHE is not NULL, then it will be filled with information about saved
1316 registers.
1318 There are several variations of prologue which GDB may encounter. "Full"
1319 prologue looks like this:
1321 sub sp,sp,<imm> ; Space for variadic arguments.
1322 push blink ; Store return address.
1323 push r13 ; Store callee saved registers (up to R26/GP).
1324 push r14
1325 push fp ; Store frame pointer.
1326 mov fp,sp ; Update frame pointer.
1327 sub sp,sp,<imm> ; Create space for local vars on the stack.
1329 Depending on compiler options lots of things may change:
1331 1) BLINK is not saved in leaf functions.
1332 2) Frame pointer is not saved and updated if -fomit-frame-pointer is used.
1333 3) 16-bit versions of those instructions may be used.
1334 4) Instead of a sequence of several push'es, compiler may instead prefer to
1335 do one subtract on stack pointer and then store registers using normal
1336 store, that doesn't update SP. Like this:
1339 sub sp,sp,8 ; Create space for callee-saved registers.
1340 st r13,[sp,4] ; Store callee saved registers (up to R26/GP).
1341 st r14,[sp,0]
1343 5) ENTER_S instruction can encode most of prologue sequence in one
1344 instruction (except for those subtracts for variadic arguments and local
1345 variables).
1346 6) GCC may use "millicode" functions from libgcc to store callee-saved
1347 registers with minimal code-size requirements. This function currently
1348 doesn't support this.
1350 ENTRYPOINT is a function entry point where prologue starts.
1352 LIMIT_PC is a maximum possible end address of prologue (meaning address
1353 of first instruction after the prologue). It might also point to the middle
1354 of prologue if execution has been stopped by the breakpoint at this address
1355 - in this case debugger should analyze prologue only up to this address,
1356 because further instructions haven't been executed yet.
1358 Returns address of the first instruction after the prologue. */
1360 static CORE_ADDR
1361 arc_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR entrypoint,
1362 const CORE_ADDR limit_pc, struct arc_frame_cache *cache)
1364 arc_debug_printf ("entrypoint=%s, limit_pc=%s",
1365 paddress (gdbarch, entrypoint),
1366 paddress (gdbarch, limit_pc));
1368 /* Prologue values. Only core registers can be stored. */
1369 pv_t regs[ARC_LAST_CORE_REGNUM + 1];
1370 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1371 regs[i] = pv_register (i, 0);
1372 pv_area stack (ARC_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1374 CORE_ADDR current_prologue_end = entrypoint;
1376 /* Look at each instruction in the prologue. */
1377 while (current_prologue_end < limit_pc)
1379 struct arc_instruction insn;
1381 struct gdb_non_printing_memory_disassembler dis (gdbarch);
1382 arc_insn_decode (current_prologue_end, dis.disasm_info (),
1383 arc_delayed_print_insn, &insn);
1385 if (arc_debug)
1386 arc_insn_dump (insn);
1388 /* If this instruction is in the prologue, fields in the cache will be
1389 updated, and the saved registers mask may be updated. */
1390 if (!arc_is_in_prologue (gdbarch, insn, regs, &stack))
1392 /* Found an instruction that is not in the prologue. */
1393 arc_debug_printf ("End of prologue reached at address %s",
1394 paddress (gdbarch, insn.address));
1395 break;
1398 current_prologue_end = arc_insn_get_linear_next_pc (insn);
1401 if (cache != NULL)
1403 /* Figure out if it is a frame pointer or just a stack pointer. */
1404 if (pv_is_register (regs[ARC_FP_REGNUM], ARC_SP_REGNUM))
1406 cache->frame_base_reg = ARC_FP_REGNUM;
1407 cache->frame_base_offset = -regs[ARC_FP_REGNUM].k;
1409 else
1411 cache->frame_base_reg = ARC_SP_REGNUM;
1412 cache->frame_base_offset = -regs[ARC_SP_REGNUM].k;
1415 /* Assign offset from old SP to all saved registers. */
1416 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1418 CORE_ADDR offset;
1419 if (stack.find_reg (gdbarch, i, &offset))
1420 cache->saved_regs[i].set_addr (offset);
1424 return current_prologue_end;
1427 /* Estimated maximum prologue length in bytes. This should include:
1428 1) Store instruction for each callee-saved register (R25 - R13 + 1)
1429 2) Two instructions for FP
1430 3) One for BLINK
1431 4) Three substract instructions for SP (for variadic args, for
1432 callee saved regs and for local vars) and assuming that those SUB use
1433 long-immediate (hence double length).
1434 5) Stores of arguments registers are considered part of prologue too
1435 (R7 - R1 + 1).
1436 This is quite an extreme case, because even with -O0 GCC will collapse first
1437 two SUBs into one and long immediate values are quite unlikely to appear in
1438 this case, but still better to overshoot a bit - prologue analysis will
1439 anyway stop at the first instruction that doesn't fit prologue, so this
1440 limit will be rarely reached. */
1442 const static int MAX_PROLOGUE_LENGTH
1443 = 4 * (ARC_R25_REGNUM - ARC_R13_REGNUM + 1 + 2 + 1 + 6
1444 + ARC_LAST_ARG_REGNUM - ARC_FIRST_ARG_REGNUM + 1);
1446 /* Implement the "skip_prologue" gdbarch method.
1448 Skip the prologue for the function at PC. This is done by checking from
1449 the line information read from the DWARF, if possible; otherwise, we scan
1450 the function prologue to find its end. */
1452 static CORE_ADDR
1453 arc_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1455 arc_debug_printf ("pc = %s", paddress (gdbarch, pc));
1457 CORE_ADDR func_addr;
1458 const char *func_name;
1460 /* See what the symbol table says. */
1461 if (find_pc_partial_function (pc, &func_name, &func_addr, NULL))
1463 /* Found a function. */
1464 CORE_ADDR postprologue_pc
1465 = skip_prologue_using_sal (gdbarch, func_addr);
1467 if (postprologue_pc != 0)
1468 return std::max (pc, postprologue_pc);
1471 /* No prologue info in symbol table, have to analyze prologue. */
1473 /* Find an upper limit on the function prologue using the debug
1474 information. If there is no debug information about prologue end, then
1475 skip_prologue_using_sal will return 0. */
1476 CORE_ADDR limit_pc = skip_prologue_using_sal (gdbarch, pc);
1478 /* If there is no debug information at all, it is required to give some
1479 semi-arbitrary hard limit on amount of bytes to scan during prologue
1480 analysis. */
1481 if (limit_pc == 0)
1482 limit_pc = pc + MAX_PROLOGUE_LENGTH;
1484 /* Find the address of the first instruction after the prologue by scanning
1485 through it - no other information is needed, so pass NULL as a cache. */
1486 return arc_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1489 /* Implement the "print_insn" gdbarch method.
1491 arc_get_disassembler () may return different functions depending on bfd
1492 type, so it is not possible to pass print_insn directly to
1493 set_gdbarch_print_insn (). Instead this wrapper function is used. It also
1494 may be used by other functions to get disassemble_info for address. It is
1495 important to note, that those print_insn from opcodes always print
1496 instruction to the stream specified in the INFO. If this is not desired,
1497 then either `print_insn` function in INFO should be set to some function
1498 that will not print, or `stream` should be different from standard
1499 gdb_stdlog. */
1502 arc_delayed_print_insn (bfd_vma addr, struct disassemble_info *info)
1504 /* Standard BFD "machine number" field allows libopcodes disassembler to
1505 distinguish ARC 600, 700 and v2 cores, however v2 encompasses both ARC EM
1506 and HS, which have some difference between. There are two ways to specify
1507 what is the target core:
1508 1) via the disassemble_info->disassembler_options;
1509 2) otherwise libopcodes will use private (architecture-specific) ELF
1510 header.
1512 Using disassembler_options is preferable, because it comes directly from
1513 GDBserver which scanned an actual ARC core identification info. However,
1514 not all GDBservers report core architecture, so as a fallback GDB still
1515 should support analysis of ELF header. The libopcodes disassembly code
1516 uses the section to find the BFD and the BFD to find the ELF header,
1517 therefore this function should set disassemble_info->section properly.
1519 disassembler_options was already set by non-target specific code with
1520 proper options obtained via gdbarch_disassembler_options ().
1522 This function might be called multiple times in a sequence, reusing same
1523 disassemble_info. */
1524 if ((info->disassembler_options == NULL) && (info->section == NULL))
1526 struct obj_section *s = find_pc_section (addr);
1527 if (s != NULL)
1528 info->section = s->the_bfd_section;
1531 return default_print_insn (addr, info);
1534 /* Baremetal breakpoint instructions.
1536 ARC supports both big- and little-endian. However, instructions for
1537 little-endian processors are encoded in the middle-endian: half-words are
1538 in big-endian, while bytes inside the half-words are in little-endian; data
1539 is represented in the "normal" little-endian. Big-endian processors treat
1540 data and code identically.
1542 Assuming the number 0x01020304, it will be presented this way:
1544 Address : N N+1 N+2 N+3
1545 little-endian : 0x04 0x03 0x02 0x01
1546 big-endian : 0x01 0x02 0x03 0x04
1547 ARC middle-endian : 0x02 0x01 0x04 0x03
1550 static const gdb_byte arc_brk_s_be[] = { 0x7f, 0xff };
1551 static const gdb_byte arc_brk_s_le[] = { 0xff, 0x7f };
1552 static const gdb_byte arc_brk_be[] = { 0x25, 0x6f, 0x00, 0x3f };
1553 static const gdb_byte arc_brk_le[] = { 0x6f, 0x25, 0x3f, 0x00 };
1555 /* For ARC ELF, breakpoint uses the 16-bit BRK_S instruction, which is 0x7fff
1556 (little endian) or 0xff7f (big endian). We used to insert BRK_S even
1557 instead of 32-bit instructions, which works mostly ok, unless breakpoint is
1558 inserted into delay slot instruction. In this case if branch is taken
1559 BLINK value will be set to address of instruction after delay slot, however
1560 if we replaced 32-bit instruction in delay slot with 16-bit long BRK_S,
1561 then BLINK value will have an invalid value - it will point to the address
1562 after the BRK_S (which was there at the moment of branch execution) while
1563 it should point to the address after the 32-bit long instruction. To avoid
1564 such issues this function disassembles instruction at target location and
1565 evaluates it value.
1567 ARC 600 supports only 16-bit BRK_S.
1569 NB: Baremetal GDB uses BRK[_S], while user-space GDB uses TRAP_S. BRK[_S]
1570 is much better because it doesn't commit unlike TRAP_S, so it can be set in
1571 delay slots; however it cannot be used in user-mode, hence usage of TRAP_S
1572 in GDB for user-space. */
1574 /* Implement the "breakpoint_kind_from_pc" gdbarch method. */
1576 static int
1577 arc_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
1579 size_t length_with_limm = gdb_insn_length (gdbarch, *pcptr);
1581 /* Replace 16-bit instruction with BRK_S, replace 32-bit instructions with
1582 BRK. LIMM is part of instruction length, so it can be either 4 or 8
1583 bytes for 32-bit instructions. */
1584 if ((length_with_limm == 4 || length_with_limm == 8)
1585 && !arc_mach_is_arc600 (gdbarch))
1586 return sizeof (arc_brk_le);
1587 else
1588 return sizeof (arc_brk_s_le);
1591 /* Implement the "sw_breakpoint_from_kind" gdbarch method. */
1593 static const gdb_byte *
1594 arc_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
1596 gdb_assert (kind == 2 || kind == 4);
1597 *size = kind;
1599 if (kind == sizeof (arc_brk_le))
1601 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1602 ? arc_brk_be
1603 : arc_brk_le);
1605 else
1607 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1608 ? arc_brk_s_be
1609 : arc_brk_s_le);
1613 /* Implement the "frame_align" gdbarch method. */
1615 static CORE_ADDR
1616 arc_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1618 return align_down (sp, 4);
1621 /* Dump the frame info. Used for internal debugging only. */
1623 static void
1624 arc_print_frame_cache (struct gdbarch *gdbarch, const char *message,
1625 struct arc_frame_cache *cache, int addresses_known)
1627 arc_debug_printf ("frame_info %s", message);
1628 arc_debug_printf ("prev_sp = %s", paddress (gdbarch, cache->prev_sp));
1629 arc_debug_printf ("frame_base_reg = %i", cache->frame_base_reg);
1630 arc_debug_printf ("frame_base_offset = %s",
1631 plongest (cache->frame_base_offset));
1633 for (int i = 0; i <= ARC_BLINK_REGNUM; i++)
1635 if (cache->saved_regs[i].is_addr ())
1636 arc_debug_printf ("saved register %s at %s %s",
1637 gdbarch_register_name (gdbarch, i),
1638 (addresses_known) ? "address" : "offset",
1639 paddress (gdbarch, cache->saved_regs[i].addr ()));
1643 /* Frame unwinder for normal frames. */
1645 static struct arc_frame_cache *
1646 arc_make_frame_cache (frame_info_ptr this_frame)
1648 arc_debug_printf ("called");
1650 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1652 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1653 CORE_ADDR entrypoint, prologue_end;
1654 if (find_pc_partial_function (block_addr, NULL, &entrypoint, &prologue_end))
1656 struct symtab_and_line sal = find_pc_line (entrypoint, 0);
1657 CORE_ADDR prev_pc = get_frame_pc (this_frame);
1658 if (sal.line == 0)
1659 /* No line info so use current PC. */
1660 prologue_end = prev_pc;
1661 else if (sal.end < prologue_end)
1662 /* The next line begins after the function end. */
1663 prologue_end = sal.end;
1665 prologue_end = std::min (prologue_end, prev_pc);
1667 else
1669 /* If find_pc_partial_function returned nothing then there is no symbol
1670 information at all for this PC. Currently it is assumed in this case
1671 that current PC is entrypoint to function and try to construct the
1672 frame from that. This is, probably, suboptimal, for example ARM
1673 assumes in this case that program is inside the normal frame (with
1674 frame pointer). ARC, perhaps, should try to do the same. */
1675 entrypoint = get_frame_register_unsigned (this_frame,
1676 gdbarch_pc_regnum (gdbarch));
1677 prologue_end = entrypoint + MAX_PROLOGUE_LENGTH;
1680 /* Allocate new frame cache instance and space for saved register info.
1681 FRAME_OBSTACK_ZALLOC will initialize fields to zeroes. */
1682 struct arc_frame_cache *cache
1683 = FRAME_OBSTACK_ZALLOC (struct arc_frame_cache);
1684 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1686 arc_analyze_prologue (gdbarch, entrypoint, prologue_end, cache);
1688 if (arc_debug)
1689 arc_print_frame_cache (gdbarch, "after prologue", cache, false);
1691 CORE_ADDR unwound_fb = get_frame_register_unsigned (this_frame,
1692 cache->frame_base_reg);
1693 if (unwound_fb == 0)
1694 return cache;
1695 cache->prev_sp = unwound_fb + cache->frame_base_offset;
1697 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1699 if (cache->saved_regs[i].is_addr ())
1700 cache->saved_regs[i].set_addr (cache->saved_regs[i].addr ()
1701 + cache->prev_sp);
1704 if (arc_debug)
1705 arc_print_frame_cache (gdbarch, "after previous SP found", cache, true);
1707 return cache;
1710 /* Implement the "this_id" frame_unwind method. */
1712 static void
1713 arc_frame_this_id (frame_info_ptr this_frame, void **this_cache,
1714 struct frame_id *this_id)
1716 arc_debug_printf ("called");
1718 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1720 if (*this_cache == NULL)
1721 *this_cache = arc_make_frame_cache (this_frame);
1722 struct arc_frame_cache *cache = (struct arc_frame_cache *) (*this_cache);
1724 CORE_ADDR stack_addr = cache->prev_sp;
1726 /* There are 4 possible situation which decide how frame_id->code_addr is
1727 evaluated:
1729 1) Function is compiled with option -g. Then frame_id will be created
1730 in dwarf_* function and not in this function. NB: even if target
1731 binary is compiled with -g, some std functions like __start and _init
1732 are not, so they still will follow one of the following choices.
1734 2) Function is compiled without -g and binary hasn't been stripped in
1735 any way. In this case GDB still has enough information to evaluate
1736 frame code_addr properly. This case is covered by call to
1737 get_frame_func ().
1739 3) Binary has been striped with option -g (strip debug symbols). In
1740 this case there is still enough symbols for get_frame_func () to work
1741 properly, so this case is also covered by it.
1743 4) Binary has been striped with option -s (strip all symbols). In this
1744 case GDB cannot get function start address properly, so we return current
1745 PC value instead.
1747 CORE_ADDR code_addr = get_frame_func (this_frame);
1748 if (code_addr == 0)
1749 code_addr = get_frame_register_unsigned (this_frame,
1750 gdbarch_pc_regnum (gdbarch));
1752 *this_id = frame_id_build (stack_addr, code_addr);
1755 /* Implement the "prev_register" frame_unwind method. */
1757 static struct value *
1758 arc_frame_prev_register (frame_info_ptr this_frame,
1759 void **this_cache, int regnum)
1761 if (*this_cache == NULL)
1762 *this_cache = arc_make_frame_cache (this_frame);
1763 struct arc_frame_cache *cache = (struct arc_frame_cache *) (*this_cache);
1765 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1767 /* If we are asked to unwind the PC, then we need to return BLINK instead:
1768 the saved value of PC points into this frame's function's prologue, not
1769 the next frame's function's resume location. */
1770 if (regnum == gdbarch_pc_regnum (gdbarch))
1771 regnum = ARC_BLINK_REGNUM;
1773 /* SP is a special case - we should return prev_sp, because
1774 trad_frame_get_prev_register will return _current_ SP value.
1775 Alternatively we could have stored cache->prev_sp in the cache->saved
1776 regs, but here we follow the lead of AArch64, ARM and Xtensa and will
1777 leave that logic in this function, instead of prologue analyzers. That I
1778 think is a bit more clear as `saved_regs` should contain saved regs, not
1779 computable.
1781 Because value has been computed, "got_constant" should be used, so that
1782 returned value will be a "not_lval" - immutable. */
1784 if (regnum == gdbarch_sp_regnum (gdbarch))
1785 return frame_unwind_got_constant (this_frame, regnum, cache->prev_sp);
1787 return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
1790 /* Implement the "init_reg" dwarf2_frame method. */
1792 static void
1793 arc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1794 struct dwarf2_frame_state_reg *reg,
1795 frame_info_ptr info)
1797 if (regnum == gdbarch_pc_regnum (gdbarch))
1798 /* The return address column. */
1799 reg->how = DWARF2_FRAME_REG_RA;
1800 else if (regnum == gdbarch_sp_regnum (gdbarch))
1801 /* The call frame address. */
1802 reg->how = DWARF2_FRAME_REG_CFA;
1805 /* Signal trampoline frame unwinder. Allows frame unwinding to happen
1806 from within signal handlers. */
1808 static struct arc_frame_cache *
1809 arc_make_sigtramp_frame_cache (frame_info_ptr this_frame)
1811 arc_debug_printf ("called");
1813 gdbarch *arch = get_frame_arch (this_frame);
1814 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
1816 /* Allocate new frame cache instance and space for saved register info. */
1817 struct arc_frame_cache *cache = FRAME_OBSTACK_ZALLOC (struct arc_frame_cache);
1818 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1820 /* Get the stack pointer and use it as the frame base. */
1821 cache->prev_sp = arc_frame_base_address (this_frame, NULL);
1823 /* If the ARC-private target-dependent info doesn't have a table of
1824 offsets of saved register contents within an OS signal context
1825 structure, then there is nothing to analyze. */
1826 if (tdep->sc_reg_offset == NULL)
1827 return cache;
1829 /* Find the address of the sigcontext structure. */
1830 CORE_ADDR addr = tdep->sigcontext_addr (this_frame);
1832 /* For each register, if its contents have been saved within the
1833 sigcontext structure, determine the address of those contents. */
1834 gdb_assert (tdep->sc_num_regs <= (ARC_LAST_REGNUM + 1));
1835 for (int i = 0; i < tdep->sc_num_regs; i++)
1837 if (tdep->sc_reg_offset[i] != ARC_OFFSET_NO_REGISTER)
1838 cache->saved_regs[i].set_addr (addr + tdep->sc_reg_offset[i]);
1841 return cache;
1844 /* Implement the "this_id" frame_unwind method for signal trampoline
1845 frames. */
1847 static void
1848 arc_sigtramp_frame_this_id (frame_info_ptr this_frame,
1849 void **this_cache, struct frame_id *this_id)
1851 arc_debug_printf ("called");
1853 if (*this_cache == NULL)
1854 *this_cache = arc_make_sigtramp_frame_cache (this_frame);
1856 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1857 struct arc_frame_cache *cache = (struct arc_frame_cache *) *this_cache;
1858 CORE_ADDR stack_addr = cache->prev_sp;
1859 CORE_ADDR code_addr
1860 = get_frame_register_unsigned (this_frame, gdbarch_pc_regnum (gdbarch));
1861 *this_id = frame_id_build (stack_addr, code_addr);
1864 /* Get a register from a signal handler frame. */
1866 static struct value *
1867 arc_sigtramp_frame_prev_register (frame_info_ptr this_frame,
1868 void **this_cache, int regnum)
1870 arc_debug_printf ("regnum = %d", regnum);
1872 /* Make sure we've initialized the cache. */
1873 if (*this_cache == NULL)
1874 *this_cache = arc_make_sigtramp_frame_cache (this_frame);
1876 struct arc_frame_cache *cache = (struct arc_frame_cache *) *this_cache;
1877 return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
1880 /* Frame sniffer for signal handler frame. Only recognize a frame if we
1881 have a sigcontext_addr handler in the target dependency. */
1883 static int
1884 arc_sigtramp_frame_sniffer (const struct frame_unwind *self,
1885 frame_info_ptr this_frame,
1886 void **this_cache)
1888 arc_debug_printf ("called");
1890 gdbarch *arch = get_frame_arch (this_frame);
1891 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
1893 /* If we have a sigcontext_addr handler, then just return 1 (same as the
1894 "default_frame_sniffer ()"). */
1895 return (tdep->sigcontext_addr != NULL && tdep->is_sigtramp != NULL
1896 && tdep->is_sigtramp (this_frame));
1899 /* Structure defining the ARC ordinary frame unwind functions. Since we are
1900 the fallback unwinder, we use the default frame sniffer, which always
1901 accepts the frame. */
1903 static const struct frame_unwind arc_frame_unwind = {
1904 "arc prologue",
1905 NORMAL_FRAME,
1906 default_frame_unwind_stop_reason,
1907 arc_frame_this_id,
1908 arc_frame_prev_register,
1909 NULL,
1910 default_frame_sniffer,
1911 NULL,
1912 NULL
1915 /* Structure defining the ARC signal frame unwind functions. Custom
1916 sniffer is used, because this frame must be accepted only in the right
1917 context. */
1919 static const struct frame_unwind arc_sigtramp_frame_unwind = {
1920 "arc sigtramp",
1921 SIGTRAMP_FRAME,
1922 default_frame_unwind_stop_reason,
1923 arc_sigtramp_frame_this_id,
1924 arc_sigtramp_frame_prev_register,
1925 NULL,
1926 arc_sigtramp_frame_sniffer,
1927 NULL,
1928 NULL
1932 static const struct frame_base arc_normal_base = {
1933 &arc_frame_unwind,
1934 arc_frame_base_address,
1935 arc_frame_base_address,
1936 arc_frame_base_address
1939 static enum arc_isa
1940 mach_type_to_arc_isa (const unsigned long mach)
1942 switch (mach)
1944 case bfd_mach_arc_arc600:
1945 case bfd_mach_arc_arc601:
1946 case bfd_mach_arc_arc700:
1947 return ARC_ISA_ARCV1;
1948 case bfd_mach_arc_arcv2:
1949 return ARC_ISA_ARCV2;
1950 default:
1951 internal_error (_("unknown machine id %lu"), mach);
1955 /* See arc-tdep.h. */
1957 arc_arch_features
1958 arc_arch_features_create (const bfd *abfd, const unsigned long mach)
1960 /* Use 4 as a fallback value. */
1961 int reg_size = 4;
1963 /* Try to guess the features parameters by looking at the binary to be
1964 executed. If the user is providing a binary that does not match the
1965 target, then tough luck. This is the last effort to makes sense of
1966 what's going on. */
1967 if (abfd != nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1969 unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
1971 if (eclass == ELFCLASS32)
1972 reg_size = 4;
1973 else if (eclass == ELFCLASS64)
1974 reg_size = 8;
1975 else
1976 internal_error (_("unknown ELF header class %d"), eclass);
1979 /* MACH from a bfd_arch_info struct is used here. It should be a safe
1980 bet, as it looks like the struct is always initialized even when we
1981 don't pass any elf file to GDB at all (it uses default arch in that
1982 case). */
1983 arc_isa isa = mach_type_to_arc_isa (mach);
1985 return arc_arch_features (reg_size, isa);
1988 /* Look for obsolete core feature names in TDESC. */
1990 static const struct tdesc_feature *
1991 find_obsolete_core_names (const struct target_desc *tdesc)
1993 const struct tdesc_feature *feat = nullptr;
1995 feat = tdesc_find_feature (tdesc, ARC_CORE_V1_OBSOLETE_FEATURE_NAME);
1997 if (feat == nullptr)
1998 feat = tdesc_find_feature (tdesc, ARC_CORE_V2_OBSOLETE_FEATURE_NAME);
2000 if (feat == nullptr)
2001 feat = tdesc_find_feature
2002 (tdesc, ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME);
2004 return feat;
2007 /* Look for obsolete aux feature names in TDESC. */
2009 static const struct tdesc_feature *
2010 find_obsolete_aux_names (const struct target_desc *tdesc)
2012 return tdesc_find_feature (tdesc, ARC_AUX_OBSOLETE_FEATURE_NAME);
2015 /* Based on the MACH value, determines which core register features set
2016 must be used. */
2018 static arc_register_feature *
2019 determine_core_reg_feature_set (const unsigned long mach)
2021 switch (mach_type_to_arc_isa (mach))
2023 case ARC_ISA_ARCV1:
2024 return &arc_v1_core_reg_feature;
2025 case ARC_ISA_ARCV2:
2026 return &arc_v2_core_reg_feature;
2027 default:
2028 gdb_assert_not_reached
2029 ("Unknown machine type to determine the core feature set.");
2033 /* At the moment, there is only 1 auxiliary register features set.
2034 This is a place holder for future extendability. */
2036 static const arc_register_feature *
2037 determine_aux_reg_feature_set ()
2039 return &arc_common_aux_reg_feature;
2042 /* Update accumulator register names (ACCH/ACCL) for r58 and r59 in the
2043 register sets. The endianness determines the assignment:
2045 ,------.------.
2046 | acch | accl |
2047 ,----|------+------|
2048 | LE | r59 | r58 |
2049 | BE | r58 | r59 |
2050 `----^------^------' */
2052 static void
2053 arc_update_acc_reg_names (const int byte_order)
2055 const char *r58_alias
2056 = byte_order == BFD_ENDIAN_LITTLE ? "accl" : "acch";
2057 const char *r59_alias
2058 = byte_order == BFD_ENDIAN_LITTLE ? "acch" : "accl";
2060 /* Subscript 1 must be OK because those registers have 2 names. */
2061 arc_v1_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
2062 arc_v1_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
2063 arc_v2_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias;
2064 arc_v2_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias;
2067 /* Go through all the registers in REG_SET and check if they exist
2068 in FEATURE. The TDESC_DATA is updated with the register number
2069 in REG_SET if it is found in the feature. If a required register
2070 is not found, this function returns false. */
2072 static bool
2073 arc_check_tdesc_feature (struct tdesc_arch_data *tdesc_data,
2074 const struct tdesc_feature *feature,
2075 const struct arc_register_feature *reg_set)
2077 for (const auto &reg : reg_set->registers)
2079 bool found = false;
2081 for (const char *name : reg.names)
2083 found
2084 = tdesc_numbered_register (feature, tdesc_data, reg.regnum, name);
2086 if (found)
2087 break;
2090 if (!found && reg.required_p)
2092 std::ostringstream reg_names;
2093 for (std::size_t i = 0; i < reg.names.size(); ++i)
2095 if (i == 0)
2096 reg_names << "'" << reg.names[0] << "'";
2097 else
2098 reg_names << " or '" << reg.names[0] << "'";
2100 arc_print (_("Error: Cannot find required register(s) %s "
2101 "in feature '%s'.\n"), reg_names.str ().c_str (),
2102 feature->name.c_str ());
2103 return false;
2107 return true;
2110 /* Check for the existance of "lp_start" and "lp_end" in target description.
2111 If both are present, assume there is hardware loop support in the target.
2112 This can be improved by looking into "lpc_size" field of "isa_config"
2113 auxiliary register. */
2115 static bool
2116 arc_check_for_hw_loops (const struct target_desc *tdesc,
2117 struct tdesc_arch_data *data)
2119 const auto feature_aux = tdesc_find_feature (tdesc, ARC_AUX_FEATURE_NAME);
2120 const auto aux_regset = determine_aux_reg_feature_set ();
2122 if (feature_aux == nullptr)
2123 return false;
2125 bool hw_loop_p = false;
2126 const auto lp_start_name =
2127 aux_regset->registers[ARC_LP_START_REGNUM - ARC_FIRST_AUX_REGNUM].names[0];
2128 const auto lp_end_name =
2129 aux_regset->registers[ARC_LP_END_REGNUM - ARC_FIRST_AUX_REGNUM].names[0];
2131 hw_loop_p = tdesc_numbered_register (feature_aux, data,
2132 ARC_LP_START_REGNUM, lp_start_name);
2133 hw_loop_p &= tdesc_numbered_register (feature_aux, data,
2134 ARC_LP_END_REGNUM, lp_end_name);
2136 return hw_loop_p;
2139 /* Initialize target description for the ARC.
2141 Returns true if input TDESC was valid and in this case it will assign TDESC
2142 and TDESC_DATA output parameters. */
2144 static bool
2145 arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
2146 tdesc_arch_data_up *tdesc_data)
2148 const struct target_desc *tdesc_loc = info.target_desc;
2149 arc_debug_printf ("Target description initialization.");
2151 /* If target doesn't provide a description, use the default ones. */
2152 if (!tdesc_has_registers (tdesc_loc))
2154 arc_arch_features features
2155 = arc_arch_features_create (info.abfd,
2156 info.bfd_arch_info->mach);
2157 tdesc_loc = arc_lookup_target_description (features);
2159 gdb_assert (tdesc_loc != nullptr);
2161 arc_debug_printf ("Have got a target description");
2163 const struct tdesc_feature *feature_core
2164 = tdesc_find_feature (tdesc_loc, ARC_CORE_FEATURE_NAME);
2165 const struct tdesc_feature *feature_aux
2166 = tdesc_find_feature (tdesc_loc, ARC_AUX_FEATURE_NAME);
2168 /* Maybe there still is a chance to salvage the input. */
2169 if (feature_core == nullptr)
2170 feature_core = find_obsolete_core_names (tdesc_loc);
2171 if (feature_aux == nullptr)
2172 feature_aux = find_obsolete_aux_names (tdesc_loc);
2174 if (feature_core == nullptr)
2176 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2177 "target description.\n"), ARC_CORE_FEATURE_NAME);
2178 return false;
2181 if (feature_aux == nullptr)
2183 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2184 "target description.\n"), ARC_AUX_FEATURE_NAME);
2185 return false;
2188 const arc_register_feature *arc_core_reg_feature
2189 = determine_core_reg_feature_set (info.bfd_arch_info->mach);
2190 const arc_register_feature *arc_aux_reg_feature
2191 = determine_aux_reg_feature_set ();
2193 tdesc_arch_data_up tdesc_data_loc = tdesc_data_alloc ();
2195 arc_update_acc_reg_names (info.byte_order);
2197 bool valid_p = arc_check_tdesc_feature (tdesc_data_loc.get (),
2198 feature_core,
2199 arc_core_reg_feature);
2201 valid_p &= arc_check_tdesc_feature (tdesc_data_loc.get (),
2202 feature_aux,
2203 arc_aux_reg_feature);
2205 if (!valid_p)
2207 arc_debug_printf ("Target description is not valid");
2208 return false;
2211 *tdesc = tdesc_loc;
2212 *tdesc_data = std::move (tdesc_data_loc);
2214 return true;
2217 /* Implement the type_align gdbarch function. */
2219 static ULONGEST
2220 arc_type_align (struct gdbarch *gdbarch, struct type *type)
2222 switch (type->code ())
2224 case TYPE_CODE_PTR:
2225 case TYPE_CODE_FUNC:
2226 case TYPE_CODE_FLAGS:
2227 case TYPE_CODE_INT:
2228 case TYPE_CODE_RANGE:
2229 case TYPE_CODE_FLT:
2230 case TYPE_CODE_ENUM:
2231 case TYPE_CODE_REF:
2232 case TYPE_CODE_RVALUE_REF:
2233 case TYPE_CODE_CHAR:
2234 case TYPE_CODE_BOOL:
2235 case TYPE_CODE_DECFLOAT:
2236 case TYPE_CODE_METHODPTR:
2237 case TYPE_CODE_MEMBERPTR:
2238 type = check_typedef (type);
2239 return std::min<ULONGEST> (4, type->length ());
2240 default:
2241 return 0;
2245 /* Implement the "init" gdbarch method. */
2247 static struct gdbarch *
2248 arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2250 const struct target_desc *tdesc;
2251 tdesc_arch_data_up tdesc_data;
2253 arc_debug_printf ("Architecture initialization.");
2255 if (!arc_tdesc_init (info, &tdesc, &tdesc_data))
2256 return nullptr;
2258 /* Allocate the ARC-private target-dependent information structure, and the
2259 GDB target-independent information structure. */
2260 gdbarch *gdbarch
2261 = gdbarch_alloc (&info, gdbarch_tdep_up (new arc_gdbarch_tdep));
2262 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
2263 tdep->jb_pc = -1; /* No longjmp support by default. */
2264 tdep->has_hw_loops = arc_check_for_hw_loops (tdesc, tdesc_data.get ());
2266 /* Data types. */
2267 set_gdbarch_short_bit (gdbarch, 16);
2268 set_gdbarch_int_bit (gdbarch, 32);
2269 set_gdbarch_long_bit (gdbarch, 32);
2270 set_gdbarch_long_long_bit (gdbarch, 64);
2271 set_gdbarch_type_align (gdbarch, arc_type_align);
2272 set_gdbarch_float_bit (gdbarch, 32);
2273 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
2274 set_gdbarch_double_bit (gdbarch, 64);
2275 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
2276 set_gdbarch_ptr_bit (gdbarch, 32);
2277 set_gdbarch_addr_bit (gdbarch, 32);
2278 set_gdbarch_char_signed (gdbarch, 0);
2280 set_gdbarch_write_pc (gdbarch, arc_write_pc);
2282 set_gdbarch_virtual_frame_pointer (gdbarch, arc_virtual_frame_pointer);
2284 /* tdesc_use_registers expects gdbarch_num_regs to return number of registers
2285 parsed by gdbarch_init, and then it will add all of the remaining
2286 registers and will increase number of registers. */
2287 set_gdbarch_num_regs (gdbarch, ARC_LAST_REGNUM + 1);
2288 set_gdbarch_num_pseudo_regs (gdbarch, 0);
2289 set_gdbarch_sp_regnum (gdbarch, ARC_SP_REGNUM);
2290 set_gdbarch_pc_regnum (gdbarch, ARC_PC_REGNUM);
2291 set_gdbarch_ps_regnum (gdbarch, ARC_STATUS32_REGNUM);
2292 set_gdbarch_fp0_regnum (gdbarch, -1); /* No FPU registers. */
2294 set_gdbarch_push_dummy_call (gdbarch, arc_push_dummy_call);
2295 set_gdbarch_push_dummy_code (gdbarch, arc_push_dummy_code);
2297 set_gdbarch_cannot_fetch_register (gdbarch, arc_cannot_fetch_register);
2298 set_gdbarch_cannot_store_register (gdbarch, arc_cannot_store_register);
2300 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2302 set_gdbarch_return_value (gdbarch, arc_return_value);
2304 set_gdbarch_skip_prologue (gdbarch, arc_skip_prologue);
2305 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2307 set_gdbarch_breakpoint_kind_from_pc (gdbarch, arc_breakpoint_kind_from_pc);
2308 set_gdbarch_sw_breakpoint_from_kind (gdbarch, arc_sw_breakpoint_from_kind);
2310 /* On ARC 600 BRK_S instruction advances PC, unlike other ARC cores. */
2311 if (!arc_mach_is_arc600 (gdbarch))
2312 set_gdbarch_decr_pc_after_break (gdbarch, 0);
2313 else
2314 set_gdbarch_decr_pc_after_break (gdbarch, 2);
2316 set_gdbarch_frame_align (gdbarch, arc_frame_align);
2318 set_gdbarch_print_insn (gdbarch, arc_delayed_print_insn);
2320 set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
2322 /* "nonsteppable" watchpoint means that watchpoint triggers before
2323 instruction is committed, therefore it is required to remove watchpoint
2324 to step though instruction that triggers it. ARC watchpoints trigger
2325 only after instruction is committed, thus there is no need to remove
2326 them. In fact on ARC watchpoint for memory writes may trigger with more
2327 significant delay, like one or two instructions, depending on type of
2328 memory where write is performed (CCM or external) and next instruction
2329 after the memory write. */
2330 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 0);
2332 /* This doesn't include possible long-immediate value. */
2333 set_gdbarch_max_insn_length (gdbarch, 4);
2335 /* Frame unwinders and sniffers. */
2336 dwarf2_frame_set_init_reg (gdbarch, arc_dwarf2_frame_init_reg);
2337 dwarf2_append_unwinders (gdbarch);
2338 frame_unwind_append_unwinder (gdbarch, &arc_sigtramp_frame_unwind);
2339 frame_unwind_append_unwinder (gdbarch, &arc_frame_unwind);
2340 frame_base_set_default (gdbarch, &arc_normal_base);
2342 /* Setup stuff specific to a particular environment (baremetal or Linux).
2343 It can override functions set earlier. */
2344 gdbarch_init_osabi (info, gdbarch);
2346 if (tdep->jb_pc >= 0)
2347 set_gdbarch_get_longjmp_target (gdbarch, arc_get_longjmp_target);
2349 /* Disassembler options. Enforce CPU if it was specified in XML target
2350 description, otherwise use default method of determining CPU (ELF private
2351 header). */
2352 if (info.target_desc != NULL)
2354 const struct bfd_arch_info *tdesc_arch
2355 = tdesc_architecture (info.target_desc);
2356 if (tdesc_arch != NULL)
2358 xfree (arc_disassembler_options);
2359 /* FIXME: It is not really good to change disassembler options
2360 behind the scene, because that might override options
2361 specified by the user. However as of now ARC doesn't support
2362 `set disassembler-options' hence this code is the only place
2363 where options are changed. It also changes options for all
2364 existing gdbarches, which also can be problematic, if
2365 arc_gdbarch_init will start reusing existing gdbarch
2366 instances. */
2367 /* Target description specifies a BFD architecture, which is
2368 different from ARC cpu, as accepted by disassembler (and most
2369 other ARC tools), because cpu values are much more fine grained -
2370 there can be multiple cpu values per single BFD architecture. As
2371 a result this code should translate architecture to some cpu
2372 value. Since there is no info on exact cpu configuration, it is
2373 best to use the most feature-rich CPU, so that disassembler will
2374 recognize all instructions available to the specified
2375 architecture. */
2376 switch (tdesc_arch->mach)
2378 case bfd_mach_arc_arc601:
2379 arc_disassembler_options = xstrdup ("cpu=arc601");
2380 break;
2381 case bfd_mach_arc_arc600:
2382 arc_disassembler_options = xstrdup ("cpu=arc600");
2383 break;
2384 case bfd_mach_arc_arc700:
2385 arc_disassembler_options = xstrdup ("cpu=arc700");
2386 break;
2387 case bfd_mach_arc_arcv2:
2388 /* Machine arcv2 has three arches: ARCv2, EM and HS; where ARCv2
2389 is treated as EM. */
2390 if (arc_arch_is_hs (tdesc_arch))
2391 arc_disassembler_options = xstrdup ("cpu=hs38_linux");
2392 else
2393 arc_disassembler_options = xstrdup ("cpu=em4_fpuda");
2394 break;
2395 default:
2396 arc_disassembler_options = NULL;
2397 break;
2402 set_gdbarch_disassembler_options (gdbarch, &arc_disassembler_options);
2403 set_gdbarch_valid_disassembler_options (gdbarch,
2404 disassembler_options_arc ());
2406 tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
2408 return gdbarch;
2411 /* Implement the "dump_tdep" gdbarch method. */
2413 static void
2414 arc_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
2416 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
2418 gdb_printf (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
2420 gdb_printf (file, "arc_dump_tdep: is_sigtramp = <%s>\n",
2421 host_address_to_string (tdep->is_sigtramp));
2422 gdb_printf (file, "arc_dump_tdep: sigcontext_addr = <%s>\n",
2423 host_address_to_string (tdep->sigcontext_addr));
2424 gdb_printf (file, "arc_dump_tdep: sc_reg_offset = <%s>\n",
2425 host_address_to_string (tdep->sc_reg_offset));
2426 gdb_printf (file, "arc_dump_tdep: sc_num_regs = %d\n",
2427 tdep->sc_num_regs);
2430 /* This command accepts single argument - address of instruction to
2431 disassemble. */
2433 static void
2434 dump_arc_instruction_command (const char *args, int from_tty)
2436 struct value *val;
2437 if (args != NULL && strlen (args) > 0)
2438 val = parse_expression (args)->evaluate ();
2439 else
2440 val = access_value_history (0);
2441 val->record_latest ();
2443 CORE_ADDR address = value_as_address (val);
2444 struct arc_instruction insn;
2445 gdb_non_printing_memory_disassembler dis (current_inferior ()->arch ());
2446 arc_insn_decode (address, dis.disasm_info (), arc_delayed_print_insn, &insn);
2447 arc_insn_dump (insn);
2450 void _initialize_arc_tdep ();
2451 void
2452 _initialize_arc_tdep ()
2454 gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep);
2456 /* Register ARC-specific commands with gdb. */
2458 /* Add root prefix command for "maintenance print arc" commands. */
2459 add_basic_prefix_cmd ("arc", class_maintenance,
2460 _("ARC-specific maintenance commands for printing GDB "
2461 "internal state."),
2462 &maintenance_print_arc_list,
2463 0, &maintenanceprintlist);
2465 add_cmd ("arc-instruction", class_maintenance,
2466 dump_arc_instruction_command,
2467 _("Dump arc_instruction structure for specified address."),
2468 &maintenance_print_arc_list);
2470 /* Debug internals for ARC GDB. */
2471 add_setshow_boolean_cmd ("arc", class_maintenance,
2472 &arc_debug,
2473 _("Set ARC specific debugging."),
2474 _("Show ARC specific debugging."),
2475 _("When set, ARC specific debugging is enabled."),
2476 NULL, NULL, &setdebuglist, &showdebuglist);