Remove path name from test case
[binutils-gdb.git] / gdb / arc-tdep.c
1 /* Target dependent code for ARC architecture, for GDB.
2
3 Copyright 2005-2023 Free Software Foundation, Inc.
4 Contributed by Synopsys Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 /* GDB header files. */
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "elf-bfd.h"
25 #include "disasm.h"
26 #include "dwarf2/frame.h"
27 #include "frame-base.h"
28 #include "frame-unwind.h"
29 #include "gdbcore.h"
30 #include "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"
38
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"
44
45 /* Standard headers. */
46 #include <algorithm>
47 #include <sstream>
48
49 /* The frame unwind cache for ARC. */
50
51 struct arc_frame_cache
52 {
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;
57
58 /* Register that is a base for this frame - FP for normal frame, SP for
59 non-FP frames. */
60 int frame_base_reg;
61
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.
71
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. */
81
82 LONGEST frame_base_offset;
83
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;
88 };
89
90 /* Global debug flag. */
91
92 bool arc_debug;
93
94 /* List of "maintenance print arc" commands. */
95
96 static struct cmd_list_element *maintenance_print_arc_list = NULL;
97
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. */
100
101 struct arc_register_feature
102 {
103 /* Information for a single register. */
104 struct register_info
105 {
106 /* The GDB register number for this register. */
107 int regnum;
108
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;
112
113 /* When true, this register must be present in this feature set. */
114 bool required_p;
115 };
116
117 /* The name for this feature. This is the name used to find this feature
118 within the target description. */
119 const char *name;
120
121 /* List of all the registers that we expect to encounter in this register
122 set. */
123 std::vector<struct register_info> registers;
124 };
125
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";
138
139 /* ARCv1 (ARC600, ARC601, ARC700) general core registers feature set.
140 See also arc_update_acc_reg_names() for "accl/acch" names. */
141
142 static struct arc_register_feature arc_v1_core_reg_feature =
143 {
144 ARC_CORE_FEATURE_NAME,
145 {
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 }
210 }
211 };
212
213 /* ARCv2 (ARCHS) general core registers feature set. See also
214 arc_update_acc_reg_names() for "accl/acch" names. */
215
216 static struct arc_register_feature arc_v2_core_reg_feature =
217 {
218 ARC_CORE_FEATURE_NAME,
219 {
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 }
284 }
285 };
286
287 /* The common auxiliary registers feature set. The REGNUM field
288 must match the ARC_REGNUM enum in arc-tdep.h. */
289
290 static const struct arc_register_feature arc_common_aux_reg_feature =
291 {
292 ARC_AUX_FEATURE_NAME,
293 {
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 }
299 }
300 };
301
302 static char *arc_disassembler_options = NULL;
303
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. */
307
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. */
311
312 static ULONGEST
313 arc_insn_get_operand_value (const struct arc_instruction &insn,
314 unsigned int operand_num)
315 {
316 switch (insn.operands[operand_num].kind)
317 {
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 struct regcache *regcache = get_current_regcache ();
326 ULONGEST value;
327 regcache_cooked_read_unsigned (regcache,
328 insn.operands[operand_num].value,
329 &value);
330 return value;
331 }
332 }
333
334 /* Like arc_insn_get_operand_value, but returns a signed value. */
335
336 static LONGEST
337 arc_insn_get_operand_value_signed (const struct arc_instruction &insn,
338 unsigned int operand_num)
339 {
340 switch (insn.operands[operand_num].kind)
341 {
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 gdb_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 struct regcache *regcache = get_current_regcache ();
355 LONGEST value;
356 regcache_cooked_read_signed (regcache,
357 insn.operands[operand_num].value,
358 &value);
359 return value;
360 }
361 }
362
363 /* Get register with base address of memory operation. */
364
365 static int
366 arc_insn_get_memory_base_reg (const struct arc_instruction &insn)
367 {
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;
371
372 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
373
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;
380 }
381
382 /* Get offset of a memory operation INSN. */
383
384 static CORE_ADDR
385 arc_insn_get_memory_offset (const struct arc_instruction &insn)
386 {
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;
393
394 gdb_assert (insn.insn_class == LOAD || insn.insn_class == STORE);
395
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;
402
403 CORE_ADDR value = arc_insn_get_operand_value (insn, 2);
404 /* Handle scaling. */
405 if (insn.writeback_mode == ARC_WRITEBACK_AS)
406 {
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;
414 }
415 return value;
416 }
417
418 CORE_ADDR
419 arc_insn_get_branch_target (const struct arc_instruction &insn)
420 {
421 gdb_assert (insn.is_control_flow);
422
423 /* BI [c]: PC = nextPC + (c << 2). */
424 if (insn.insn_class == BI)
425 {
426 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
427 return arc_insn_get_linear_next_pc (insn) + (reg_value << 2);
428 }
429 /* BIH [c]: PC = nextPC + (c << 1). */
430 else if (insn.insn_class == BIH)
431 {
432 ULONGEST reg_value = arc_insn_get_operand_value (insn, 0);
433 return arc_insn_get_linear_next_pc (insn) + (reg_value << 1);
434 }
435 /* JLI and EI. */
436 /* JLI and EI depend on optional AUX registers. Not supported right now. */
437 else if (insn.insn_class == JLI)
438 {
439 gdb_printf (gdb_stderr,
440 "JLI_S instruction is not supported by the GDB.");
441 return 0;
442 }
443 else if (insn.insn_class == EI)
444 {
445 gdb_printf (gdb_stderr,
446 "EI_S instruction is not supported by the GDB.");
447 return 0;
448 }
449 /* LEAVE_S: PC = BLINK. */
450 else if (insn.insn_class == LEAVE)
451 {
452 struct regcache *regcache = get_current_regcache ();
453 ULONGEST value;
454 regcache_cooked_read_unsigned (regcache, ARC_BLINK_REGNUM, &value);
455 return value;
456 }
457 /* BBIT0/1, BRcc: PC = currentPC + operand. */
458 else if (insn.insn_class == BBIT0 || insn.insn_class == BBIT1
459 || insn.insn_class == BRCC)
460 {
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);
464
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);
468 }
469 /* B, Bcc, BL, BLcc, LP, LPcc: PC = currentPC + operand. */
470 else if (insn.insn_class == BRANCH || insn.insn_class == LOOP)
471 {
472 CORE_ADDR pcrel_addr = arc_insn_get_operand_value (insn, 0);
473
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);
477 }
478 /* J, Jcc, JL, JLcc: PC = operand. */
479 else if (insn.insn_class == JUMP)
480 {
481 /* All jumps are single-operand. */
482 return arc_insn_get_operand_value (insn, 0);
483 }
484
485 /* This is some new and unknown instruction. */
486 gdb_assert_not_reached ("Unknown branch instruction.");
487 }
488
489 /* Dump INSN into gdb_stdlog. */
490
491 static void
492 arc_insn_dump (const struct arc_instruction &insn)
493 {
494 struct gdbarch *gdbarch = current_inferior ()->arch ();
495
496 arc_print ("Dumping arc_instruction at %s\n",
497 paddress (gdbarch, insn.address));
498 arc_print ("\tlength = %u\n", insn.length);
499
500 if (!insn.valid)
501 {
502 arc_print ("\tThis is not a valid ARC instruction.\n");
503 return;
504 }
505
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);
511
512 CORE_ADDR next_pc = arc_insn_get_linear_next_pc (insn);
513 arc_print ("\tlinear_next_pc = %s\n", paddress (gdbarch, next_pc));
514
515 if (insn.is_control_flow)
516 {
517 CORE_ADDR t = arc_insn_get_branch_target (insn);
518 arc_print ("\tbranch_target = %s\n", paddress (gdbarch, t));
519 }
520
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);
524
525 if (insn.insn_class == STORE || insn.insn_class == LOAD
526 || insn.insn_class == PUSH || insn.insn_class == POP)
527 {
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)));
537 }
538
539 arc_print ("\toperands_count = %u\n", insn.operands_count);
540 for (unsigned int i = 0; i < insn.operands_count; ++i)
541 {
542 int is_reg = (insn.operands[i].kind == ARC_OPERAND_KIND_REG);
543
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");
557 }
558 }
559
560 CORE_ADDR
561 arc_insn_get_linear_next_pc (const struct arc_instruction &insn)
562 {
563 /* In ARC long immediate is always 4 bytes. */
564 return (insn.address + insn.length + (insn.limm_p ? 4 : 0));
565 }
566
567 /* Implement the "write_pc" gdbarch method.
568
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.
577
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.
585
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.
595
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. */
600
601 static void
602 arc_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
603 {
604 struct gdbarch *gdbarch = regcache->arch ();
605
606 arc_debug_printf ("Writing PC, new value=%s",
607 paddress (gdbarch, new_pc));
608
609 regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
610 new_pc);
611
612 ULONGEST status32;
613 regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
614 &status32);
615
616 if ((status32 & ARC_STATUS32_DE_MASK) != 0)
617 {
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));
622
623 /* Reset bit and write to the cache. */
624 status32 &= ~0x40;
625 regcache_cooked_write_unsigned (regcache, gdbarch_ps_regnum (gdbarch),
626 status32);
627 }
628 }
629
630 /* Implement the "virtual_frame_pointer" gdbarch method.
631
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.
637
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.
641
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.
646
647 TODO: Can we determine the frame size to get a correct offset?
648
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. */
652
653 static void
654 arc_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
655 int *reg_ptr, LONGEST *offset_ptr)
656 {
657 *reg_ptr = gdbarch_sp_regnum (gdbarch);
658 *offset_ptr = 0;
659 }
660
661 /* Implement the "push_dummy_call" gdbarch method.
662
663 Stack Frame Layout
664
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.
672
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.
675
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 ---> +-----------------------+ --+
698 | |
699 | unused |
700 | |
701 |
702 |
703 V
704 downwards
705
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.
711
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.
718
719 Any arguments are already in target byte order. We just need to store
720 them!
721
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. */
727
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)
734 {
735 arc_debug_printf ("nargs = %d", nargs);
736
737 int arg_reg = ARC_FIRST_ARG_REGNUM;
738
739 /* Push the return address. */
740 regcache_cooked_write_unsigned (regcache, ARC_BLINK_REGNUM, bp_addr);
741
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)
747 {
748 /* Pass the return address in the first argument register. */
749 regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
750
751 arc_debug_printf ("struct return address %s passed in R%d",
752 print_core_address (gdbarch, struct_addr), arg_reg);
753
754 arg_reg++;
755 }
756
757 if (nargs > 0)
758 {
759 unsigned int total_space = 0;
760
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++)
764 {
765 unsigned int len = args[i]->type ()->length ();
766 unsigned int space = align_up (len, 4);
767
768 total_space += space;
769
770 arc_debug_printf ("arg %d: %u bytes -> %u", i, len, space);
771 }
772
773 /* Allocate a buffer to hold a memory image of the arguments. */
774 gdb_byte *memory_image = XCNEWVEC (gdb_byte, total_space);
775
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++)
779 {
780 unsigned int len = args[i]->type ()->length ();
781 unsigned int space = align_up (len, 4);
782
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);
787
788 data += space;
789 }
790
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)
794 {
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);
797
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);
801
802 data += ARC_REGISTER_SIZE;
803 total_space -= ARC_REGISTER_SIZE;
804
805 /* All the data is now in registers. */
806 if (total_space == 0)
807 break;
808
809 arg_reg++;
810 }
811
812 /* If there is any data left, push it onto the stack (in a single write
813 operation). */
814 if (total_space > 0)
815 {
816 arc_debug_printf ("passing %d bytes on stack\n", total_space);
817
818 sp -= total_space;
819 write_memory (sp, data, (int) total_space);
820 }
821
822 xfree (memory_image);
823 }
824
825 /* Finally, update the SP register. */
826 regcache_cooked_write_unsigned (regcache, gdbarch_sp_regnum (gdbarch), sp);
827
828 return sp;
829 }
830
831 /* Implement the "push_dummy_code" gdbarch method.
832
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.
836
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.
840
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. */
846
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)
852 {
853 *real_pc = funaddr;
854 *bp_addr = entry_point_address ();
855 return sp;
856 }
857
858 /* Implement the "cannot_fetch_register" gdbarch method. */
859
860 static int
861 arc_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
862 {
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)
869 {
870 case ARC_RESERVED_REGNUM:
871 case ARC_LIMM_REGNUM:
872 return true;
873 default:
874 return false;
875 }
876 }
877
878 /* Implement the "cannot_store_register" gdbarch method. */
879
880 static int
881 arc_cannot_store_register (struct gdbarch *gdbarch, int regnum)
882 {
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)
886 {
887 case ARC_RESERVED_REGNUM:
888 case ARC_LIMM_REGNUM:
889 case ARC_PCL_REGNUM:
890 return true;
891 default:
892 return false;
893 }
894 }
895
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.
899
900 TODO: This implementation ignores the case of "complex double", where
901 according to ABI, value is returned in the R0-R3 registers.
902
903 TYPE is a returned value's type. VALBUF is a buffer for the returned
904 value. */
905
906 static void
907 arc_extract_return_value (struct gdbarch *gdbarch, struct type *type,
908 struct regcache *regcache, gdb_byte *valbuf)
909 {
910 unsigned int len = type->length ();
911
912 arc_debug_printf ("called");
913
914 if (len <= ARC_REGISTER_SIZE)
915 {
916 ULONGEST val;
917
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);
922
923 arc_debug_printf ("returning 0x%s", phex (val, ARC_REGISTER_SIZE));
924 }
925 else if (len <= ARC_REGISTER_SIZE * 2)
926 {
927 ULONGEST low, high;
928
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);
932
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);
938
939 arc_debug_printf ("returning 0x%s%s",
940 phex (high, ARC_REGISTER_SIZE),
941 phex (low, ARC_REGISTER_SIZE));
942 }
943 else
944 error (_("arc: extract_return_value: type length %u too large"), len);
945 }
946
947
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.
950
951 TODO: This implementation ignores the case of "complex double", where
952 according to ABI, value is returned in the R0-R3 registers.
953
954 TYPE is a returned value's type. VALBUF is a buffer with the value to
955 return. */
956
957 static void
958 arc_store_return_value (struct gdbarch *gdbarch, struct type *type,
959 struct regcache *regcache, const gdb_byte *valbuf)
960 {
961 unsigned int len = type->length ();
962
963 arc_debug_printf ("called");
964
965 if (len <= ARC_REGISTER_SIZE)
966 {
967 ULONGEST val;
968
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);
973
974 arc_debug_printf ("storing 0x%s", phex (val, ARC_REGISTER_SIZE));
975 }
976 else if (len <= ARC_REGISTER_SIZE * 2)
977 {
978 ULONGEST low, high;
979
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));
986
987 regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, low);
988 regcache_cooked_write_unsigned (regcache, ARC_R1_REGNUM, high);
989
990 arc_debug_printf ("storing 0x%s%s",
991 phex (high, ARC_REGISTER_SIZE),
992 phex (low, ARC_REGISTER_SIZE));
993 }
994 else
995 error (_("arc_store_return_value: type length too large."));
996 }
997
998 /* Implement the "get_longjmp_target" gdbarch method. */
999
1000 static int
1001 arc_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
1002 {
1003 arc_debug_printf ("called");
1004
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);
1010
1011 if (target_read_memory (jb_addr + pc_offset, buf, ARC_REGISTER_SIZE))
1012 return 0; /* Failed to read from memory. */
1013
1014 *pc = extract_unsigned_integer (buf, ARC_REGISTER_SIZE,
1015 gdbarch_byte_order (gdbarch));
1016 return 1;
1017 }
1018
1019 /* Implement the "return_value" gdbarch method. */
1020
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)
1025 {
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);
1034
1035 arc_debug_printf ("readbuf = %s, writebuf = %s",
1036 host_address_to_string (readbuf),
1037 host_address_to_string (writebuf));
1038
1039 if (writebuf != NULL)
1040 {
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);
1046 }
1047 else if (readbuf != NULL)
1048 {
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);
1054 }
1055
1056 return (is_struct_return
1057 ? RETURN_VALUE_STRUCT_CONVENTION
1058 : RETURN_VALUE_REGISTER_CONVENTION);
1059 }
1060
1061 /* Return the base address of the frame. For ARC, the base address is the
1062 frame pointer. */
1063
1064 static CORE_ADDR
1065 arc_frame_base_address (frame_info_ptr this_frame, void **prologue_cache)
1066 {
1067 return (CORE_ADDR) get_frame_register_unsigned (this_frame, ARC_FP_REGNUM);
1068 }
1069
1070 /* Helper function that returns valid pv_t for an instruction operand:
1071 either a register or a constant. */
1072
1073 static pv_t
1074 arc_pv_get_operand (pv_t *regs, const struct arc_instruction &insn, int operand)
1075 {
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));
1080 }
1081
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. */
1085
1086 static bool
1087 arc_is_in_prologue (struct gdbarch *gdbarch, const struct arc_instruction &insn,
1088 pv_t *regs, struct pv_area *stack)
1089 {
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;
1100
1101 /* Branch/jump or a predicated instruction. */
1102 if (insn.is_control_flow || insn.condition_code != ARC_CC_AL)
1103 return false;
1104
1105 /* Store of some register. May or may not update base address register. */
1106 if (insn.insn_class == STORE || insn.insn_class == PUSH)
1107 {
1108 /* There is definitely at least one operand - register/value being
1109 stored. */
1110 gdb_assert (insn.operands_count > 0);
1111
1112 /* Store at some constant address. */
1113 if (insn.operands_count > 1
1114 && insn.operands[1].kind != ARC_OPERAND_KIND_REG)
1115 return false;
1116
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
1124
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. */
1128
1129 /* Register with base memory address. */
1130 int base_reg = arc_insn_get_memory_base_reg (insn);
1131
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));
1140
1141 if (stack->store_would_trash (addr))
1142 return false;
1143
1144 if (insn.data_size_mode != ARC_SCALING_D)
1145 {
1146 /* Find the value being stored. */
1147 pv_t store_value = arc_pv_get_operand (regs, insn, 0);
1148
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;
1157
1158 stack->store (addr, size, store_value);
1159 }
1160 else
1161 {
1162 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1163 {
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);
1170 }
1171 else
1172 {
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);
1176 }
1177 }
1178
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));
1184
1185 return true;
1186 }
1187 else if (insn.insn_class == MOVE)
1188 {
1189 gdb_assert (insn.operands_count == 2);
1190
1191 /* Destination argument can be "0", so nothing will happen. */
1192 if (insn.operands[0].kind == ARC_OPERAND_KIND_REG)
1193 {
1194 int dst_regnum = insn.operands[0].value;
1195 regs[dst_regnum] = arc_pv_get_operand (regs, insn, 1);
1196 }
1197 return true;
1198 }
1199 else if (insn.insn_class == SUB)
1200 {
1201 gdb_assert (insn.operands_count == 3);
1202
1203 /* SUB 0,b,c. */
1204 if (insn.operands[0].kind != ARC_OPERAND_KIND_REG)
1205 return true;
1206
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;
1211 }
1212 else if (insn.insn_class == ENTER)
1213 {
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.
1217
1218 ENTER_S {R13-...,FP,BLINK} stores registers in following order:
1219
1220 new SP ->
1221 BLINK
1222 R13
1223 R14
1224 R15
1225 ...
1226 FP
1227 old SP ->
1228
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);
1239
1240 int regs_saved = arc_insn_get_operand_value (insn, 0);
1241
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;
1247
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;
1254
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);
1259
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;
1264
1265 /* Current store address. */
1266 pv_t addr = regs[ARC_SP_REGNUM];
1267
1268 if (is_fp_saved)
1269 {
1270 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1271 stack->store (addr, ARC_REGISTER_SIZE, regs[ARC_FP_REGNUM]);
1272 }
1273
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--)
1276 {
1277 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1278 stack->store (addr, ARC_REGISTER_SIZE, regs[i]);
1279 }
1280
1281 if (is_blink_saved)
1282 {
1283 addr = pv_add_constant (addr, -ARC_REGISTER_SIZE);
1284 stack->store (addr, ARC_REGISTER_SIZE,
1285 regs[ARC_BLINK_REGNUM]);
1286 }
1287
1288 gdb_assert (pv_is_identical (addr, new_sp));
1289
1290 regs[ARC_SP_REGNUM] = new_sp;
1291
1292 if (is_fp_saved)
1293 regs[ARC_FP_REGNUM] = regs[ARC_SP_REGNUM];
1294
1295 return true;
1296 }
1297
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. */
1306
1307 return false;
1308 }
1309
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.
1314
1315 If CACHE is not NULL, then it will be filled with information about saved
1316 registers.
1317
1318 There are several variations of prologue which GDB may encounter. "Full"
1319 prologue looks like this:
1320
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.
1328
1329 Depending on compiler options lots of things may change:
1330
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:
1337
1338
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]
1342
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.
1349
1350 ENTRYPOINT is a function entry point where prologue starts.
1351
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.
1357
1358 Returns address of the first instruction after the prologue. */
1359
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)
1363 {
1364 arc_debug_printf ("entrypoint=%s, limit_pc=%s",
1365 paddress (gdbarch, entrypoint),
1366 paddress (gdbarch, limit_pc));
1367
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));
1373
1374 CORE_ADDR current_prologue_end = entrypoint;
1375
1376 /* Look at each instruction in the prologue. */
1377 while (current_prologue_end < limit_pc)
1378 {
1379 struct arc_instruction insn;
1380
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);
1384
1385 if (arc_debug)
1386 arc_insn_dump (insn);
1387
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))
1391 {
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;
1396 }
1397
1398 current_prologue_end = arc_insn_get_linear_next_pc (insn);
1399 }
1400
1401 if (cache != NULL)
1402 {
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))
1405 {
1406 cache->frame_base_reg = ARC_FP_REGNUM;
1407 cache->frame_base_offset = -regs[ARC_FP_REGNUM].k;
1408 }
1409 else
1410 {
1411 cache->frame_base_reg = ARC_SP_REGNUM;
1412 cache->frame_base_offset = -regs[ARC_SP_REGNUM].k;
1413 }
1414
1415 /* Assign offset from old SP to all saved registers. */
1416 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1417 {
1418 CORE_ADDR offset;
1419 if (stack.find_reg (gdbarch, i, &offset))
1420 cache->saved_regs[i].set_addr (offset);
1421 }
1422 }
1423
1424 return current_prologue_end;
1425 }
1426
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. */
1441
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);
1445
1446 /* Implement the "skip_prologue" gdbarch method.
1447
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. */
1451
1452 static CORE_ADDR
1453 arc_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1454 {
1455 arc_debug_printf ("pc = %s", paddress (gdbarch, pc));
1456
1457 CORE_ADDR func_addr;
1458 const char *func_name;
1459
1460 /* See what the symbol table says. */
1461 if (find_pc_partial_function (pc, &func_name, &func_addr, NULL))
1462 {
1463 /* Found a function. */
1464 CORE_ADDR postprologue_pc
1465 = skip_prologue_using_sal (gdbarch, func_addr);
1466
1467 if (postprologue_pc != 0)
1468 return std::max (pc, postprologue_pc);
1469 }
1470
1471 /* No prologue info in symbol table, have to analyze prologue. */
1472
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);
1477
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;
1483
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);
1487 }
1488
1489 /* Implement the "print_insn" gdbarch method.
1490
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. */
1500
1501 int
1502 arc_delayed_print_insn (bfd_vma addr, struct disassemble_info *info)
1503 {
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.
1511
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.
1518
1519 disassembler_options was already set by non-target specific code with
1520 proper options obtained via gdbarch_disassembler_options ().
1521
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))
1525 {
1526 struct obj_section *s = find_pc_section (addr);
1527 if (s != NULL)
1528 info->section = s->the_bfd_section;
1529 }
1530
1531 return default_print_insn (addr, info);
1532 }
1533
1534 /* Baremetal breakpoint instructions.
1535
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.
1541
1542 Assuming the number 0x01020304, it will be presented this way:
1543
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
1548 */
1549
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 };
1554
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.
1566
1567 ARC 600 supports only 16-bit BRK_S.
1568
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. */
1573
1574 /* Implement the "breakpoint_kind_from_pc" gdbarch method. */
1575
1576 static int
1577 arc_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
1578 {
1579 size_t length_with_limm = gdb_insn_length (gdbarch, *pcptr);
1580
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);
1589 }
1590
1591 /* Implement the "sw_breakpoint_from_kind" gdbarch method. */
1592
1593 static const gdb_byte *
1594 arc_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
1595 {
1596 gdb_assert (kind == 2 || kind == 4);
1597 *size = kind;
1598
1599 if (kind == sizeof (arc_brk_le))
1600 {
1601 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1602 ? arc_brk_be
1603 : arc_brk_le);
1604 }
1605 else
1606 {
1607 return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1608 ? arc_brk_s_be
1609 : arc_brk_s_le);
1610 }
1611 }
1612
1613 /* Implement the "frame_align" gdbarch method. */
1614
1615 static CORE_ADDR
1616 arc_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1617 {
1618 return align_down (sp, 4);
1619 }
1620
1621 /* Dump the frame info. Used for internal debugging only. */
1622
1623 static void
1624 arc_print_frame_cache (struct gdbarch *gdbarch, const char *message,
1625 struct arc_frame_cache *cache, int addresses_known)
1626 {
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));
1632
1633 for (int i = 0; i <= ARC_BLINK_REGNUM; i++)
1634 {
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 ()));
1640 }
1641 }
1642
1643 /* Frame unwinder for normal frames. */
1644
1645 static struct arc_frame_cache *
1646 arc_make_frame_cache (frame_info_ptr this_frame)
1647 {
1648 arc_debug_printf ("called");
1649
1650 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1651
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))
1655 {
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;
1664
1665 prologue_end = std::min (prologue_end, prev_pc);
1666 }
1667 else
1668 {
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;
1678 }
1679
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);
1685
1686 arc_analyze_prologue (gdbarch, entrypoint, prologue_end, cache);
1687
1688 if (arc_debug)
1689 arc_print_frame_cache (gdbarch, "after prologue", cache, false);
1690
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;
1696
1697 for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
1698 {
1699 if (cache->saved_regs[i].is_addr ())
1700 cache->saved_regs[i].set_addr (cache->saved_regs[i].addr ()
1701 + cache->prev_sp);
1702 }
1703
1704 if (arc_debug)
1705 arc_print_frame_cache (gdbarch, "after previous SP found", cache, true);
1706
1707 return cache;
1708 }
1709
1710 /* Implement the "this_id" frame_unwind method. */
1711
1712 static void
1713 arc_frame_this_id (frame_info_ptr this_frame, void **this_cache,
1714 struct frame_id *this_id)
1715 {
1716 arc_debug_printf ("called");
1717
1718 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1719
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);
1723
1724 CORE_ADDR stack_addr = cache->prev_sp;
1725
1726 /* There are 4 possible situation which decide how frame_id->code_addr is
1727 evaluated:
1728
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.
1733
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 ().
1738
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.
1742
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.
1746 */
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));
1751
1752 *this_id = frame_id_build (stack_addr, code_addr);
1753 }
1754
1755 /* Implement the "prev_register" frame_unwind method. */
1756
1757 static struct value *
1758 arc_frame_prev_register (frame_info_ptr this_frame,
1759 void **this_cache, int regnum)
1760 {
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);
1764
1765 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1766
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;
1772
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.
1780
1781 Because value has been computed, "got_constant" should be used, so that
1782 returned value will be a "not_lval" - immutable. */
1783
1784 if (regnum == gdbarch_sp_regnum (gdbarch))
1785 return frame_unwind_got_constant (this_frame, regnum, cache->prev_sp);
1786
1787 return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
1788 }
1789
1790 /* Implement the "init_reg" dwarf2_frame method. */
1791
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)
1796 {
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;
1803 }
1804
1805 /* Signal trampoline frame unwinder. Allows frame unwinding to happen
1806 from within signal handlers. */
1807
1808 static struct arc_frame_cache *
1809 arc_make_sigtramp_frame_cache (frame_info_ptr this_frame)
1810 {
1811 arc_debug_printf ("called");
1812
1813 gdbarch *arch = get_frame_arch (this_frame);
1814 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
1815
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);
1819
1820 /* Get the stack pointer and use it as the frame base. */
1821 cache->prev_sp = arc_frame_base_address (this_frame, NULL);
1822
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;
1828
1829 /* Find the address of the sigcontext structure. */
1830 CORE_ADDR addr = tdep->sigcontext_addr (this_frame);
1831
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++)
1836 {
1837 if (tdep->sc_reg_offset[i] != ARC_OFFSET_NO_REGISTER)
1838 cache->saved_regs[i].set_addr (addr + tdep->sc_reg_offset[i]);
1839 }
1840
1841 return cache;
1842 }
1843
1844 /* Implement the "this_id" frame_unwind method for signal trampoline
1845 frames. */
1846
1847 static void
1848 arc_sigtramp_frame_this_id (frame_info_ptr this_frame,
1849 void **this_cache, struct frame_id *this_id)
1850 {
1851 arc_debug_printf ("called");
1852
1853 if (*this_cache == NULL)
1854 *this_cache = arc_make_sigtramp_frame_cache (this_frame);
1855
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);
1862 }
1863
1864 /* Get a register from a signal handler frame. */
1865
1866 static struct value *
1867 arc_sigtramp_frame_prev_register (frame_info_ptr this_frame,
1868 void **this_cache, int regnum)
1869 {
1870 arc_debug_printf ("regnum = %d", regnum);
1871
1872 /* Make sure we've initialized the cache. */
1873 if (*this_cache == NULL)
1874 *this_cache = arc_make_sigtramp_frame_cache (this_frame);
1875
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);
1878 }
1879
1880 /* Frame sniffer for signal handler frame. Only recognize a frame if we
1881 have a sigcontext_addr handler in the target dependency. */
1882
1883 static int
1884 arc_sigtramp_frame_sniffer (const struct frame_unwind *self,
1885 frame_info_ptr this_frame,
1886 void **this_cache)
1887 {
1888 arc_debug_printf ("called");
1889
1890 gdbarch *arch = get_frame_arch (this_frame);
1891 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (arch);
1892
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));
1897 }
1898
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. */
1902
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
1913 };
1914
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. */
1918
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
1929 };
1930
1931
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
1937 };
1938
1939 static enum arc_isa
1940 mach_type_to_arc_isa (const unsigned long mach)
1941 {
1942 switch (mach)
1943 {
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);
1952 }
1953 }
1954
1955 /* See arc-tdep.h. */
1956
1957 arc_arch_features
1958 arc_arch_features_create (const bfd *abfd, const unsigned long mach)
1959 {
1960 /* Use 4 as a fallback value. */
1961 int reg_size = 4;
1962
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)
1968 {
1969 unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
1970
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);
1977 }
1978
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);
1984
1985 return arc_arch_features (reg_size, isa);
1986 }
1987
1988 /* Look for obsolete core feature names in TDESC. */
1989
1990 static const struct tdesc_feature *
1991 find_obsolete_core_names (const struct target_desc *tdesc)
1992 {
1993 const struct tdesc_feature *feat = nullptr;
1994
1995 feat = tdesc_find_feature (tdesc, ARC_CORE_V1_OBSOLETE_FEATURE_NAME);
1996
1997 if (feat == nullptr)
1998 feat = tdesc_find_feature (tdesc, ARC_CORE_V2_OBSOLETE_FEATURE_NAME);
1999
2000 if (feat == nullptr)
2001 feat = tdesc_find_feature
2002 (tdesc, ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME);
2003
2004 return feat;
2005 }
2006
2007 /* Look for obsolete aux feature names in TDESC. */
2008
2009 static const struct tdesc_feature *
2010 find_obsolete_aux_names (const struct target_desc *tdesc)
2011 {
2012 return tdesc_find_feature (tdesc, ARC_AUX_OBSOLETE_FEATURE_NAME);
2013 }
2014
2015 /* Based on the MACH value, determines which core register features set
2016 must be used. */
2017
2018 static arc_register_feature *
2019 determine_core_reg_feature_set (const unsigned long mach)
2020 {
2021 switch (mach_type_to_arc_isa (mach))
2022 {
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.");
2030 }
2031 }
2032
2033 /* At the moment, there is only 1 auxiliary register features set.
2034 This is a place holder for future extendability. */
2035
2036 static const arc_register_feature *
2037 determine_aux_reg_feature_set ()
2038 {
2039 return &arc_common_aux_reg_feature;
2040 }
2041
2042 /* Update accumulator register names (ACCH/ACCL) for r58 and r59 in the
2043 register sets. The endianness determines the assignment:
2044
2045 ,------.------.
2046 | acch | accl |
2047 ,----|------+------|
2048 | LE | r59 | r58 |
2049 | BE | r58 | r59 |
2050 `----^------^------' */
2051
2052 static void
2053 arc_update_acc_reg_names (const int byte_order)
2054 {
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";
2059
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;
2065 }
2066
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. */
2071
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)
2076 {
2077 for (const auto &reg : reg_set->registers)
2078 {
2079 bool found = false;
2080
2081 for (const char *name : reg.names)
2082 {
2083 found
2084 = tdesc_numbered_register (feature, tdesc_data, reg.regnum, name);
2085
2086 if (found)
2087 break;
2088 }
2089
2090 if (!found && reg.required_p)
2091 {
2092 std::ostringstream reg_names;
2093 for (std::size_t i = 0; i < reg.names.size(); ++i)
2094 {
2095 if (i == 0)
2096 reg_names << "'" << reg.names[0] << "'";
2097 else
2098 reg_names << " or '" << reg.names[0] << "'";
2099 }
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;
2104 }
2105 }
2106
2107 return true;
2108 }
2109
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. */
2114
2115 static bool
2116 arc_check_for_hw_loops (const struct target_desc *tdesc,
2117 struct tdesc_arch_data *data)
2118 {
2119 const auto feature_aux = tdesc_find_feature (tdesc, ARC_AUX_FEATURE_NAME);
2120 const auto aux_regset = determine_aux_reg_feature_set ();
2121
2122 if (feature_aux == nullptr)
2123 return false;
2124
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];
2130
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);
2135
2136 return hw_loop_p;
2137 }
2138
2139 /* Initialize target description for the ARC.
2140
2141 Returns true if input TDESC was valid and in this case it will assign TDESC
2142 and TDESC_DATA output parameters. */
2143
2144 static bool
2145 arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
2146 tdesc_arch_data_up *tdesc_data)
2147 {
2148 const struct target_desc *tdesc_loc = info.target_desc;
2149 arc_debug_printf ("Target description initialization.");
2150
2151 /* If target doesn't provide a description, use the default ones. */
2152 if (!tdesc_has_registers (tdesc_loc))
2153 {
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);
2158 }
2159 gdb_assert (tdesc_loc != nullptr);
2160
2161 arc_debug_printf ("Have got a target description");
2162
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);
2167
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);
2173
2174 if (feature_core == nullptr)
2175 {
2176 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2177 "target description.\n"), ARC_CORE_FEATURE_NAME);
2178 return false;
2179 }
2180
2181 if (feature_aux == nullptr)
2182 {
2183 arc_print (_("Error: Cannot find required feature '%s' in supplied "
2184 "target description.\n"), ARC_AUX_FEATURE_NAME);
2185 return false;
2186 }
2187
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 ();
2192
2193 tdesc_arch_data_up tdesc_data_loc = tdesc_data_alloc ();
2194
2195 arc_update_acc_reg_names (info.byte_order);
2196
2197 bool valid_p = arc_check_tdesc_feature (tdesc_data_loc.get (),
2198 feature_core,
2199 arc_core_reg_feature);
2200
2201 valid_p &= arc_check_tdesc_feature (tdesc_data_loc.get (),
2202 feature_aux,
2203 arc_aux_reg_feature);
2204
2205 if (!valid_p)
2206 {
2207 arc_debug_printf ("Target description is not valid");
2208 return false;
2209 }
2210
2211 *tdesc = tdesc_loc;
2212 *tdesc_data = std::move (tdesc_data_loc);
2213
2214 return true;
2215 }
2216
2217 /* Implement the type_align gdbarch function. */
2218
2219 static ULONGEST
2220 arc_type_align (struct gdbarch *gdbarch, struct type *type)
2221 {
2222 switch (type->code ())
2223 {
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;
2242 }
2243 }
2244
2245 /* Implement the "init" gdbarch method. */
2246
2247 static struct gdbarch *
2248 arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2249 {
2250 const struct target_desc *tdesc;
2251 tdesc_arch_data_up tdesc_data;
2252
2253 arc_debug_printf ("Architecture initialization.");
2254
2255 if (!arc_tdesc_init (info, &tdesc, &tdesc_data))
2256 return nullptr;
2257
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 ());
2265
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);
2279
2280 set_gdbarch_write_pc (gdbarch, arc_write_pc);
2281
2282 set_gdbarch_virtual_frame_pointer (gdbarch, arc_virtual_frame_pointer);
2283
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. */
2293
2294 set_gdbarch_push_dummy_call (gdbarch, arc_push_dummy_call);
2295 set_gdbarch_push_dummy_code (gdbarch, arc_push_dummy_code);
2296
2297 set_gdbarch_cannot_fetch_register (gdbarch, arc_cannot_fetch_register);
2298 set_gdbarch_cannot_store_register (gdbarch, arc_cannot_store_register);
2299
2300 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2301
2302 set_gdbarch_return_value (gdbarch, arc_return_value);
2303
2304 set_gdbarch_skip_prologue (gdbarch, arc_skip_prologue);
2305 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2306
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);
2309
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);
2315
2316 set_gdbarch_frame_align (gdbarch, arc_frame_align);
2317
2318 set_gdbarch_print_insn (gdbarch, arc_delayed_print_insn);
2319
2320 set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
2321
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);
2331
2332 /* This doesn't include possible long-immediate value. */
2333 set_gdbarch_max_insn_length (gdbarch, 4);
2334
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);
2341
2342 /* Setup stuff specific to a particular environment (baremetal or Linux).
2343 It can override functions set earlier. */
2344 gdbarch_init_osabi (info, gdbarch);
2345
2346 if (tdep->jb_pc >= 0)
2347 set_gdbarch_get_longjmp_target (gdbarch, arc_get_longjmp_target);
2348
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)
2353 {
2354 const struct bfd_arch_info *tdesc_arch
2355 = tdesc_architecture (info.target_desc);
2356 if (tdesc_arch != NULL)
2357 {
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)
2377 {
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;
2398 }
2399 }
2400 }
2401
2402 set_gdbarch_disassembler_options (gdbarch, &arc_disassembler_options);
2403 set_gdbarch_valid_disassembler_options (gdbarch,
2404 disassembler_options_arc ());
2405
2406 tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
2407
2408 return gdbarch;
2409 }
2410
2411 /* Implement the "dump_tdep" gdbarch method. */
2412
2413 static void
2414 arc_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
2415 {
2416 arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
2417
2418 gdb_printf (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
2419
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);
2428 }
2429
2430 /* This command accepts single argument - address of instruction to
2431 disassemble. */
2432
2433 static void
2434 dump_arc_instruction_command (const char *args, int from_tty)
2435 {
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 ();
2442
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);
2448 }
2449
2450 void _initialize_arc_tdep ();
2451 void
2452 _initialize_arc_tdep ()
2453 {
2454 gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep);
2455
2456 /* Register ARC-specific commands with gdb. */
2457
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);
2464
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);
2469
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);
2477 }