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