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