GDB (xrefs)
/tmp/gdb-8.1/gdb/mt-tdep.c
Go to the documentation of this file.
1 /* Target-dependent code for Morpho mt processor, for GDB.
2 
3  Copyright (C) 2005-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
7  This program is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 /* Contributed by Michael Snyder, msnyder@redhat.com. */
21 
22 #include "defs.h"
23 #include "frame.h"
24 #include "frame-unwind.h"
25 #include "frame-base.h"
26 #include "symtab.h"
27 #include "dis-asm.h"
28 #include "arch-utils.h"
29 #include "gdbtypes.h"
30 #include "regcache.h"
31 #include "reggroups.h"
32 #include "gdbcore.h"
33 #include "trad-frame.h"
34 #include "inferior.h"
35 #include "dwarf2-frame.h"
36 #include "infcall.h"
37 #include "language.h"
38 #include "valprint.h"
39 #include "common/byte-vector.h"
40 
42 {
44 };
45 
47 {
48  MT_R0_REGNUM, /* 32 bit regs. */
71 
72  /* Interrupt Enable pseudo-register, exported by SID. */
74  /* End of CPU regs. */
75 
77 
78  /* Co-processor registers. */
79  MT_COPRO_REGNUM = MT_NUM_CPU_REGS, /* 16 bit regs. */
96  MT_BYPA_REGNUM, /* 32 bit regs. */
100  MT_CONTEXT_REGNUM, /* 38 bits (treat as array of
101  six bytes). */
102  MT_MAC_REGNUM, /* 32 bits. */
103  MT_Z1_REGNUM, /* 16 bits. */
104  MT_Z2_REGNUM, /* 16 bits. */
105  MT_ICHANNEL_REGNUM, /* 32 bits. */
106  MT_ISCRAMB_REGNUM, /* 32 bits. */
107  MT_QSCRAMB_REGNUM, /* 32 bits. */
108  MT_OUT_REGNUM, /* 16 bits. */
109  MT_EXMAC_REGNUM, /* 32 bits (8 used). */
110  MT_QCHANNEL_REGNUM, /* 32 bits. */
111  MT_ZI2_REGNUM, /* 16 bits. */
112  MT_ZQ2_REGNUM, /* 16 bits. */
113  MT_CHANNEL2_REGNUM, /* 32 bits. */
114  MT_ISCRAMB2_REGNUM, /* 32 bits. */
115  MT_QSCRAMB2_REGNUM, /* 32 bits. */
116  MT_QCHANNEL2_REGNUM, /* 32 bits. */
117 
118  /* Number of real registers. */
120 
121  /* Pseudo-registers. */
125 
128  /* The number of pseudo-registers for each coprocessor. These
129  include the real coprocessor registers, the pseudo-registe for
130  the coprocessor number, and the pseudo-register for the MAC. */
132  /* The register number of the MAC, relative to a given coprocessor. */
134 
135  /* Two pseudo-regs ('coprocessor' and 'mac'). */
139 };
140 
141 /* The tdep structure. */
142 struct gdbarch_tdep
143 {
144  /* ISA-specific types. */
145  struct type *copro_type;
146 };
147 
148 
149 /* Return name of register number specified by REGNUM. */
150 
151 static const char *
153 {
154  static const char *const register_names[] = {
155  /* CPU regs. */
156  "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
157  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
158  "pc", "IE",
159  /* Co-processor regs. */
160  "", /* copro register. */
161  "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",
162  "cr8", "cr9", "cr10", "cr11", "cr12", "cr13", "cr14", "cr15",
163  "bypa", "bypb", "bypc", "flag", "context", "" /* mac. */ , "z1", "z2",
164  "Ichannel", "Iscramb", "Qscramb", "out", "" /* ex-mac. */ , "Qchannel",
165  "zi2", "zq2", "Ichannel2", "Iscramb2", "Qscramb2", "Qchannel2",
166  /* Pseudo-registers. */
167  "coprocessor", "MAC"
168  };
169  static const char *array_names[MT_COPRO_PSEUDOREG_REGS
172 
173  if (regnum < 0)
174  return "";
175  if (regnum < ARRAY_SIZE (register_names))
176  return register_names[regnum];
177  if (array_names[regnum - MT_COPRO_PSEUDOREG_ARRAY])
178  return array_names[regnum - MT_COPRO_PSEUDOREG_ARRAY];
179 
180  {
181  char *name;
182  const char *stub;
183  unsigned dim_1;
184  unsigned dim_2;
185  unsigned index;
186 
192 
193  if (index == MT_COPRO_PSEUDOREG_MAC_REGNUM)
194  stub = register_names[MT_MAC_PSEUDOREG_REGNUM];
195  else if (index >= MT_NUM_REGS - MT_CPR0_REGNUM)
196  stub = "";
197  else
198  stub = register_names[index + MT_CPR0_REGNUM];
199  if (!*stub)
200  {
201  array_names[regnum] = stub;
202  return stub;
203  }
204  name = (char *) xmalloc (30);
205  sprintf (name, "copro_%d_%d_%s", dim_1, dim_2, stub);
206  array_names[regnum] = name;
207  return name;
208  }
209 }
210 
211 /* Return the type of a coprocessor register. */
212 
213 static struct type *
215 {
216  switch (regnum)
217  {
219  case MT_ICHANNEL_REGNUM:
220  case MT_QCHANNEL_REGNUM:
221  case MT_ISCRAMB_REGNUM:
222  case MT_QSCRAMB_REGNUM:
223  return builtin_type (arch)->builtin_int32;
224  case MT_BYPA_REGNUM:
225  case MT_BYPB_REGNUM:
226  case MT_BYPC_REGNUM:
227  case MT_Z1_REGNUM:
228  case MT_Z2_REGNUM:
229  case MT_OUT_REGNUM:
230  case MT_ZI2_REGNUM:
231  case MT_ZQ2_REGNUM:
232  return builtin_type (arch)->builtin_int16;
233  case MT_EXMAC_REGNUM:
234  case MT_MAC_REGNUM:
235  return builtin_type (arch)->builtin_uint32;
236  case MT_CONTEXT_REGNUM:
237  return builtin_type (arch)->builtin_long_long;
238  case MT_FLAG_REGNUM:
239  return builtin_type (arch)->builtin_unsigned_char;
240  default:
242  return builtin_type (arch)->builtin_int16;
244  {
245  if (gdbarch_bfd_arch_info (arch)->mach == bfd_mach_mrisc2
246  || gdbarch_bfd_arch_info (arch)->mach == bfd_mach_ms2)
247  return builtin_type (arch)->builtin_uint64;
248  else
249  return builtin_type (arch)->builtin_uint32;
250  }
251  else
252  return builtin_type (arch)->builtin_uint32;
253  }
254 }
255 
256 /* Given ARCH and a register number specified by REGNUM, return the
257  type of that register. */
258 
259 static struct type *
260 mt_register_type (struct gdbarch *arch, int regnum)
261 {
262  struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
263 
265  {
266  switch (regnum)
267  {
268  case MT_PC_REGNUM:
269  case MT_RA_REGNUM:
270  case MT_IRA_REGNUM:
271  return builtin_type (arch)->builtin_func_ptr;
272  case MT_SP_REGNUM:
273  case MT_FP_REGNUM:
274  return builtin_type (arch)->builtin_data_ptr;
275  case MT_COPRO_REGNUM:
277  if (tdep->copro_type == NULL)
278  {
279  struct type *elt = builtin_type (arch)->builtin_int16;
280  tdep->copro_type = lookup_array_range_type (elt, 0, 1);
281  }
282  return tdep->copro_type;
284  return mt_copro_register_type (arch,
287  default:
289  return builtin_type (arch)->builtin_int32;
290  else if (regnum < MT_COPRO_PSEUDOREG_ARRAY)
291  return mt_copro_register_type (arch, regnum);
292  else
293  {
297  return mt_copro_register_type (arch, regnum);
298  }
299  }
300  }
301  internal_error (__FILE__, __LINE__,
302  _("mt_register_type: illegal register number %d"), regnum);
303 }
304 
305 /* Return true if register REGNUM is a member of the register group
306  specified by GROUP. */
307 
308 static int
310  struct reggroup *group)
311 {
312  /* Groups of registers that can be displayed via "info reg". */
313  if (group == all_reggroup)
314  return (regnum >= 0
316  && mt_register_name (gdbarch, regnum)[0] != '\0');
317 
318  if (group == general_reggroup)
319  return (regnum >= MT_R0_REGNUM && regnum <= MT_R15_REGNUM);
320 
321  if (group == float_reggroup)
322  return 0; /* No float regs. */
323 
324  if (group == vector_reggroup)
325  return 0; /* No vector regs. */
326 
327  /* For any that are not handled above. */
328  return default_register_reggroup_p (gdbarch, regnum, group);
329 }
330 
331 /* Return the return value convention used for a given type TYPE.
332  Optionally, fetch or set the return value via READBUF or
333  WRITEBUF respectively using REGCACHE for the register
334  values. */
335 
336 static enum return_value_convention
337 mt_return_value (struct gdbarch *gdbarch, struct value *function,
338  struct type *type, struct regcache *regcache,
339  gdb_byte *readbuf, const gdb_byte *writebuf)
340 {
341  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
342 
343  if (TYPE_LENGTH (type) > 4)
344  {
345  /* Return values > 4 bytes are returned in memory,
346  pointed to by R11. */
347  if (readbuf)
348  {
349  ULONGEST addr;
350 
352  read_memory (addr, readbuf, TYPE_LENGTH (type));
353  }
354 
355  if (writebuf)
356  {
357  ULONGEST addr;
358 
360  write_memory (addr, writebuf, TYPE_LENGTH (type));
361  }
362 
364  }
365  else
366  {
367  if (readbuf)
368  {
369  ULONGEST temp;
370 
371  /* Return values of <= 4 bytes are returned in R11. */
374  byte_order, temp);
375  }
376 
377  if (writebuf)
378  {
379  if (TYPE_LENGTH (type) < 4)
380  {
381  gdb_byte buf[4];
382  /* Add leading zeros to the value. */
383  memset (buf, 0, sizeof (buf));
384  memcpy (buf + sizeof (buf) - TYPE_LENGTH (type),
385  writebuf, TYPE_LENGTH (type));
387  }
388  else /* (TYPE_LENGTH (type) == 4 */
390  }
391 
393  }
394 }
395 
396 /* If the input address, PC, is in a function prologue, return the
397  address of the end of the prologue, otherwise return the input
398  address.
399 
400  Note: PC is likely to be the function start, since this function
401  is mainly used for advancing a breakpoint to the first line, or
402  stepping to the first line when we have stepped into a function
403  call. */
404 
405 static CORE_ADDR
407 {
408  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
409  CORE_ADDR func_addr = 0, func_end = 0;
410  const char *func_name;
411  unsigned long instr;
412 
413  if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
414  {
415  struct symtab_and_line sal;
416  struct symbol *sym;
417 
418  /* Found a function. */
419  sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL).symbol;
420  if (sym && SYMBOL_LANGUAGE (sym) != language_asm)
421  {
422  /* Don't use this trick for assembly source files. */
423  sal = find_pc_line (func_addr, 0);
424 
425  if (sal.end && sal.end < func_end)
426  {
427  /* Found a line number, use it as end of prologue. */
428  return sal.end;
429  }
430  }
431  }
432 
433  /* No function symbol, or no line symbol. Use prologue scanning method. */
434  for (;; pc += 4)
435  {
436  instr = read_memory_unsigned_integer (pc, 4, byte_order);
437  if (instr == 0x12000000) /* nop */
438  continue;
439  if (instr == 0x12ddc000) /* copy sp into fp */
440  continue;
441  instr >>= 16;
442  if (instr == 0x05dd) /* subi sp, sp, imm */
443  continue;
444  if (instr >= 0x43c0 && instr <= 0x43df) /* push */
445  continue;
446  /* Not an obvious prologue instruction. */
447  break;
448  }
449 
450  return pc;
451 }
452 
453 /* Implement the breakpoint_kind_from_pc gdbarch method. */
454 
455 static int
457 {
458  return 4;
459 }
460 
461 /* Implement the sw_breakpoint_from_kind gdbarch method. */
462 
463 static const gdb_byte *
465 {
466  /* The breakpoint instruction must be the same size as the smallest
467  instruction in the instruction set.
468 
469  The BP for ms1 is defined as 0x68000000 (BREAK).
470  The BP for ms2 is defined as 0x69000000 (illegal). */
471  static gdb_byte ms1_breakpoint[] = { 0x68, 0, 0, 0 };
472  static gdb_byte ms2_breakpoint[] = { 0x69, 0, 0, 0 };
473 
474  *size = kind;
475 
476  if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_ms2)
477  return ms2_breakpoint;
478 
479  return ms1_breakpoint;
480 }
481 
482 /* Select the correct coprocessor register bank. Return the pseudo
483  regnum we really want to read. */
484 
485 static int
487  struct regcache *regcache, int regno)
488 {
489  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
490  unsigned index, base;
491  gdb_byte copro[4];
492 
493  /* Get the copro pseudo regnum. */
495  base = ((extract_signed_integer (&copro[0], 2, byte_order)
497  + extract_signed_integer (&copro[2], 2, byte_order));
498 
499  regno -= MT_COPRO_PSEUDOREG_ARRAY;
500  index = regno % MT_COPRO_PSEUDOREG_REGS;
501  regno /= MT_COPRO_PSEUDOREG_REGS;
502  if (base != regno)
503  {
504  /* Select the correct coprocessor register bank. Invalidate the
505  coprocessor register cache. */
506  unsigned ix;
507 
508  store_signed_integer (&copro[0], 2, byte_order,
509  regno / MT_COPRO_PSEUDOREG_DIM_2);
510  store_signed_integer (&copro[2], 2, byte_order,
511  regno % MT_COPRO_PSEUDOREG_DIM_2);
513 
514  /* We must flush the cache, as it is now invalid. */
515  for (ix = MT_NUM_CPU_REGS; ix != MT_NUM_REGS; ix++)
517  }
518 
519  return index;
520 }
521 
522 /* Fetch the pseudo registers:
523 
524  There are two regular pseudo-registers:
525  1) The 'coprocessor' pseudo-register (which mirrors the
526  "real" coprocessor register sent by the target), and
527  2) The 'MAC' pseudo-register (which represents the union
528  of the original 32 bit target MAC register and the new
529  8-bit extended-MAC register).
530 
531  Additionally there is an array of coprocessor registers which track
532  the coprocessor registers for each coprocessor. */
533 
534 static enum register_status
536  struct regcache *regcache, int regno, gdb_byte *buf)
537 {
538  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
539 
540  switch (regno)
541  {
542  case MT_COPRO_REGNUM:
545  case MT_MAC_REGNUM:
547  if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_mrisc2
548  || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_ms2)
549  {
550  enum register_status status;
551  ULONGEST oldmac = 0, ext_mac = 0;
552  ULONGEST newmac;
553 
555  if (status != REG_VALID)
556  return status;
557 
559  if (status != REG_VALID)
560  return status;
561 
562  newmac =
563  (oldmac & 0xffffffff) | ((long long) (ext_mac & 0xff) << 32);
564  store_signed_integer (buf, 8, byte_order, newmac);
565 
566  return REG_VALID;
567  }
568  else
570  break;
571  default:
572  {
573  unsigned index = mt_select_coprocessor (gdbarch, regcache, regno);
574 
575  if (index == MT_COPRO_PSEUDOREG_MAC_REGNUM)
578  else if (index < MT_NUM_REGS - MT_CPR0_REGNUM)
579  return regcache_raw_read (regcache, index + MT_CPR0_REGNUM, buf);
580  else
581  /* ??? */
582  return REG_VALID;
583  }
584  break;
585  }
586 }
587 
588 /* Write the pseudo registers:
589 
590  Mt pseudo-registers are stored directly to the target. The
591  'coprocessor' register is special, because when it is modified, all
592  the other coprocessor regs must be flushed from the reg cache. */
593 
594 static void
596  struct regcache *regcache,
597  int regno, const gdb_byte *buf)
598 {
599  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
600  int i;
601 
602  switch (regno)
603  {
604  case MT_COPRO_REGNUM:
607  for (i = MT_NUM_CPU_REGS; i < MT_NUM_REGS; i++)
609  break;
610  case MT_MAC_REGNUM:
612  if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_mrisc2
613  || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_ms2)
614  {
615  /* The 8-byte MAC pseudo-register must be broken down into two
616  32-byte registers. */
617  unsigned int oldmac, ext_mac;
618  ULONGEST newmac;
619 
620  newmac = extract_unsigned_integer (buf, 8, byte_order);
621  oldmac = newmac & 0xffffffff;
622  ext_mac = (newmac >> 32) & 0xff;
625  }
626  else
628  break;
629  default:
630  {
631  unsigned index = mt_select_coprocessor (gdbarch, regcache, regno);
632 
633  if (index == MT_COPRO_PSEUDOREG_MAC_REGNUM)
636  else if (index < MT_NUM_REGS - MT_CPR0_REGNUM)
638  }
639  break;
640  }
641 }
642 
643 static CORE_ADDR
645 {
646  /* Register size is 4 bytes. */
647  return align_down (sp, 4);
648 }
649 
650 /* Implements the "info registers" command. When ``all'' is non-zero,
651  the coprocessor registers will be printed in addition to the rest
652  of the registers. */
653 
654 static void
656  struct ui_file *file,
657  struct frame_info *frame, int regnum, int all)
658 {
659  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
660 
661  if (regnum == -1)
662  {
663  int lim;
664 
665  lim = all ? MT_NUM_REGS : MT_NUM_CPU_REGS;
666 
667  for (regnum = 0; regnum < lim; regnum++)
668  {
669  /* Don't display the Qchannel register since it will be displayed
670  along with Ichannel. (See below.) */
671  if (regnum == MT_QCHANNEL_REGNUM)
672  continue;
673 
674  mt_registers_info (gdbarch, file, frame, regnum, all);
675 
676  /* Display the Qchannel register immediately after Ichannel. */
677  if (regnum == MT_ICHANNEL_REGNUM)
679  }
680  }
681  else
682  {
683  if (regnum == MT_EXMAC_REGNUM)
684  return;
685  else if (regnum == MT_CONTEXT_REGNUM)
686  {
687  /* Special output handling for 38-bit context register. */
688  unsigned char *buff;
689  unsigned int i, regsize;
690 
691  regsize = register_size (gdbarch, regnum);
692 
693  buff = (unsigned char *) alloca (regsize);
694 
695  deprecated_frame_register_read (frame, regnum, buff);
696 
698  (gdbarch, regnum), file);
700  (gdbarch, regnum)),
701  file);
702  fputs_filtered ("0x", file);
703 
704  for (i = 0; i < regsize; i++)
705  fprintf_filtered (file, "%02x", (unsigned int)
706  extract_unsigned_integer (buff + i, 1, byte_order));
707  fputs_filtered ("\t", file);
708  print_longest (file, 'd', 0,
709  extract_unsigned_integer (buff, regsize, byte_order));
710  fputs_filtered ("\n", file);
711  }
712  else if (regnum == MT_COPRO_REGNUM
714  {
715  /* Special output handling for the 'coprocessor' register. */
716  struct value_print_options opts;
717  struct value *val;
718 
720  /* And print. */
723  file);
725  (gdbarch, regnum)),
726  file);
728  opts.deref_ref = 1;
730  0, 0, file, 0, val,
731  &opts, current_language);
732  fputs_filtered ("\n", file);
733  }
735  {
736  ULONGEST oldmac, ext_mac, newmac;
737  gdb_byte buf[3 * sizeof (LONGEST)];
738 
739  /* Get the two "real" mac registers. */
741  oldmac = extract_unsigned_integer
742  (buf, register_size (gdbarch, MT_MAC_REGNUM), byte_order);
743  if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_mrisc2
744  || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_ms2)
745  {
747  ext_mac = extract_unsigned_integer
748  (buf, register_size (gdbarch, MT_EXMAC_REGNUM), byte_order);
749  }
750  else
751  ext_mac = 0;
752 
753  /* Add them together. */
754  newmac = (oldmac & 0xffffffff) + ((ext_mac & 0xff) << 32);
755 
756  /* And print. */
759  file);
761  (gdbarch, regnum)),
762  file);
763  fputs_filtered ("0x", file);
764  print_longest (file, 'x', 0, newmac);
765  fputs_filtered ("\t", file);
766  print_longest (file, 'u', 0, newmac);
767  fputs_filtered ("\n", file);
768  }
769  else
771  }
772 }
773 
774 /* Set up the callee's arguments for an inferior function call. The
775  arguments are pushed on the stack or are placed in registers as
776  appropriate. It also sets up the return address (which points to
777  the call dummy breakpoint).
778 
779  Returns the updated (and aligned) stack pointer. */
780 
781 static CORE_ADDR
782 mt_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
783  struct regcache *regcache, CORE_ADDR bp_addr,
784  int nargs, struct value **args, CORE_ADDR sp,
785  int struct_return, CORE_ADDR struct_addr)
786 {
787 #define wordsize 4
788  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
790  int argreg = MT_1ST_ARGREG;
791  int split_param_len = 0;
792  int stack_dest = sp;
793  int slacklen;
794  int typelen;
795  int i, j;
796 
797  /* First handle however many args we can fit into MT_1ST_ARGREG thru
798  MT_LAST_ARGREG. */
799  for (i = 0; i < nargs && argreg <= MT_LAST_ARGREG; i++)
800  {
801  const gdb_byte *val;
802  typelen = TYPE_LENGTH (value_type (args[i]));
803  switch (typelen)
804  {
805  case 1:
806  case 2:
807  case 3:
808  case 4:
811  (value_contents (args[i]),
812  wordsize, byte_order));
813  break;
814  case 8:
815  case 12:
816  case 16:
817  val = value_contents (args[i]);
818  while (typelen > 0)
819  {
820  if (argreg <= MT_LAST_ARGREG)
821  {
822  /* This word of the argument is passed in a register. */
825  (val, wordsize, byte_order));
826  typelen -= wordsize;
827  val += wordsize;
828  }
829  else
830  {
831  /* Remainder of this arg must be passed on the stack
832  (deferred to do later). */
833  split_param_len = typelen;
834  memcpy (buf, val, typelen);
835  break; /* No more args can be handled in regs. */
836  }
837  }
838  break;
839  default:
840  /* By reverse engineering of gcc output, args bigger than
841  16 bytes go on the stack, and their address is passed
842  in the argreg. */
843  stack_dest -= typelen;
844  write_memory (stack_dest, value_contents (args[i]), typelen);
845  regcache_cooked_write_unsigned (regcache, argreg++, stack_dest);
846  break;
847  }
848  }
849 
850  /* Next, the rest of the arguments go onto the stack, in reverse order. */
851  for (j = nargs - 1; j >= i; j--)
852  {
853  const gdb_byte *contents = value_contents (args[j]);
854 
855  /* Right-justify the value in an aligned-length buffer. */
856  typelen = TYPE_LENGTH (value_type (args[j]));
857  slacklen = (wordsize - (typelen % wordsize)) % wordsize;
858  gdb::byte_vector val (typelen + slacklen);
859  memcpy (val.data (), contents, typelen);
860  memset (val.data () + typelen, 0, slacklen);
861  /* Now write this data to the stack. */
862  stack_dest -= typelen + slacklen;
863  write_memory (stack_dest, val.data (), typelen + slacklen);
864  }
865 
866  /* Finally, if a param needs to be split between registers and stack,
867  write the second half to the stack now. */
868  if (split_param_len != 0)
869  {
870  stack_dest -= split_param_len;
871  write_memory (stack_dest, buf, split_param_len);
872  }
873 
874  /* Set up return address (provided to us as bp_addr). */
876 
877  /* Store struct return address, if given. */
878  if (struct_return && struct_addr != 0)
880 
881  /* Set aside 16 bytes for the callee to save regs 1-4. */
882  stack_dest -= 16;
883 
884  /* Update the stack pointer. */
886 
887  /* And that should do it. Return the new stack pointer. */
888  return stack_dest;
889 }
890 
891 
892 /* The 'unwind_cache' data structure. */
893 
895 {
896  /* The previous frame's inner most stack address.
897  Used as this frame ID's stack_addr. */
902 
903  /* Table indicating the location of each and every register. */
905 };
906 
907 /* Initialize an unwind_cache. Build up the saved_regs table etc. for
908  the frame. */
909 
910 static struct mt_unwind_cache *
911 mt_frame_unwind_cache (struct frame_info *this_frame,
912  void **this_prologue_cache)
913 {
914  struct gdbarch *gdbarch;
915  struct mt_unwind_cache *info;
916  CORE_ADDR next_addr, start_addr, end_addr, prologue_end_addr;
917  unsigned long instr, upper_half, delayed_store = 0;
918  int regnum, offset;
919  ULONGEST sp, fp;
920 
921  if ((*this_prologue_cache))
922  return (struct mt_unwind_cache *) (*this_prologue_cache);
923 
924  gdbarch = get_frame_arch (this_frame);
925  info = FRAME_OBSTACK_ZALLOC (struct mt_unwind_cache);
926  (*this_prologue_cache) = info;
927 
928  info->prev_sp = 0;
929  info->framesize = 0;
930  info->frame_base = 0;
931  info->frameless_p = 1;
932  info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
933 
934  /* Grab the frame-relative values of SP and FP, needed below.
935  The frame_saved_register function will find them on the
936  stack or in the registers as appropriate. */
937  sp = get_frame_register_unsigned (this_frame, MT_SP_REGNUM);
938  fp = get_frame_register_unsigned (this_frame, MT_FP_REGNUM);
939 
940  start_addr = get_frame_func (this_frame);
941 
942  /* Return early if GDB couldn't find the function. */
943  if (start_addr == 0)
944  return info;
945 
946  end_addr = get_frame_pc (this_frame);
947  prologue_end_addr = skip_prologue_using_sal (gdbarch, start_addr);
948  if (end_addr == 0)
949  for (next_addr = start_addr; next_addr < end_addr; next_addr += 4)
950  {
951  instr = get_frame_memory_unsigned (this_frame, next_addr, 4);
952  if (delayed_store) /* Previous instr was a push. */
953  {
954  upper_half = delayed_store >> 16;
955  regnum = upper_half & 0xf;
956  offset = delayed_store & 0xffff;
957  switch (upper_half & 0xfff0)
958  {
959  case 0x43c0: /* push using frame pointer. */
960  info->saved_regs[regnum].addr = offset;
961  break;
962  case 0x43d0: /* push using stack pointer. */
963  info->saved_regs[regnum].addr = offset;
964  break;
965  default: /* lint */
966  break;
967  }
968  delayed_store = 0;
969  }
970 
971  switch (instr)
972  {
973  case 0x12000000: /* NO-OP */
974  continue;
975  case 0x12ddc000: /* copy sp into fp */
976  info->frameless_p = 0; /* Record that the frame
977  pointer is in use. */
978  continue;
979  default:
980  upper_half = instr >> 16;
981  if (upper_half == 0x05dd || /* subi sp, sp, imm */
982  upper_half == 0x07dd) /* subui sp, sp, imm */
983  {
984  /* Record the frame size. */
985  info->framesize = instr & 0xffff;
986  continue;
987  }
988  if ((upper_half & 0xfff0) == 0x43c0 || /* frame push */
989  (upper_half & 0xfff0) == 0x43d0) /* stack push */
990  {
991  /* Save this instruction, but don't record the
992  pushed register as 'saved' until we see the
993  next instruction. That's because of deferred stores
994  on this target -- GDB won't be able to read the register
995  from the stack until one instruction later. */
996  delayed_store = instr;
997  continue;
998  }
999  /* Not a prologue instruction. Is this the end of the prologue?
1000  This is the most difficult decision; when to stop scanning.
1001 
1002  If we have no line symbol, then the best thing we can do
1003  is to stop scanning when we encounter an instruction that
1004  is not likely to be a part of the prologue.
1005 
1006  But if we do have a line symbol, then we should
1007  keep scanning until we reach it (or we reach end_addr). */
1008 
1009  if (prologue_end_addr && (prologue_end_addr > (next_addr + 4)))
1010  continue; /* Keep scanning, recording saved_regs etc. */
1011  else
1012  break; /* Quit scanning: breakpoint can be set here. */
1013  }
1014  }
1015 
1016  /* Special handling for the "saved" address of the SP:
1017  The SP is of course never saved on the stack at all, so
1018  by convention what we put here is simply the previous
1019  _value_ of the SP (as opposed to an address where the
1020  previous value would have been pushed). This will also
1021  give us the frame base address. */
1022 
1023  if (info->frameless_p)
1024  {
1025  info->frame_base = sp + info->framesize;
1026  info->prev_sp = sp + info->framesize;
1027  }
1028  else
1029  {
1030  info->frame_base = fp + info->framesize;
1031  info->prev_sp = fp + info->framesize;
1032  }
1033  /* Save prev_sp in saved_regs as a value, not as an address. */
1035 
1036  /* Now convert frame offsets to actual addresses (not offsets). */
1037  for (regnum = 0; regnum < MT_NUM_REGS; regnum++)
1038  if (trad_frame_addr_p (info->saved_regs, regnum))
1039  info->saved_regs[regnum].addr += info->frame_base - info->framesize;
1040 
1041  /* The call instruction moves the caller's PC in the callee's RA reg.
1042  Since this is an unwind, do the reverse. Copy the location of RA
1043  into PC (the address / regnum) so that a request for PC will be
1044  converted into a request for the RA. */
1046 
1047  return info;
1048 }
1049 
1050 static CORE_ADDR
1051 mt_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1052 {
1053  ULONGEST pc;
1054 
1055  pc = frame_unwind_register_unsigned (next_frame, MT_PC_REGNUM);
1056  return pc;
1057 }
1058 
1059 static CORE_ADDR
1060 mt_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
1061 {
1062  ULONGEST sp;
1063 
1064  sp = frame_unwind_register_unsigned (next_frame, MT_SP_REGNUM);
1065  return sp;
1066 }
1067 
1068 /* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
1069  frame. The frame ID's base needs to match the TOS value saved by
1070  save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint. */
1071 
1072 static struct frame_id
1073 mt_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1074 {
1076  return frame_id_build (sp, get_frame_pc (this_frame));
1077 }
1078 
1079 /* Given a GDB frame, determine the address of the calling function's
1080  frame. This will be used to create a new GDB frame struct. */
1081 
1082 static void
1083 mt_frame_this_id (struct frame_info *this_frame,
1084  void **this_prologue_cache, struct frame_id *this_id)
1085 {
1086  struct mt_unwind_cache *info =
1087  mt_frame_unwind_cache (this_frame, this_prologue_cache);
1088 
1089  if (!(info == NULL || info->prev_sp == 0))
1090  (*this_id) = frame_id_build (info->prev_sp, get_frame_func (this_frame));
1091 
1092  return;
1093 }
1094 
1095 static struct value *
1097  void **this_prologue_cache, int regnum)
1098 {
1099  struct mt_unwind_cache *info =
1100  mt_frame_unwind_cache (this_frame, this_prologue_cache);
1101 
1102  return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
1103 }
1104 
1105 static CORE_ADDR
1106 mt_frame_base_address (struct frame_info *this_frame,
1107  void **this_prologue_cache)
1108 {
1109  struct mt_unwind_cache *info =
1110  mt_frame_unwind_cache (this_frame, this_prologue_cache);
1111 
1112  return info->frame_base;
1113 }
1114 
1115 /* This is a shared interface: the 'frame_unwind' object is what's
1116  returned by the 'sniffer' function, and in turn specifies how to
1117  get a frame's ID and prev_regs.
1118 
1119  This exports the 'prev_register' and 'this_id' methods. */
1120 
1121 static const struct frame_unwind mt_frame_unwind = {
1122  NORMAL_FRAME,
1126  NULL,
1128 };
1129 
1130 /* Another shared interface: the 'frame_base' object specifies how to
1131  unwind a frame and secure the base addresses for frame objects
1132  (locals, args). */
1133 
1134 static struct frame_base mt_frame_base = {
1135  &mt_frame_unwind,
1139 };
1140 
1141 static struct gdbarch *
1142 mt_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1143 {
1144  struct gdbarch *gdbarch;
1145  struct gdbarch_tdep *tdep;
1146 
1147  /* Find a candidate among the list of pre-declared architectures. */
1148  arches = gdbarch_list_lookup_by_info (arches, &info);
1149  if (arches != NULL)
1150  return arches->gdbarch;
1151 
1152  /* None found, create a new architecture from the information
1153  provided. */
1154  tdep = XCNEW (struct gdbarch_tdep);
1155  gdbarch = gdbarch_alloc (&info, tdep);
1156 
1160 
1176 
1179 
1181 
1183 
1185 
1186  /* Target builtin data types. */
1195 
1196  /* Register the DWARF 2 sniffer first, and then the traditional prologue
1197  based sniffer. */
1201 
1202  /* Register the 'unwind_pc' method. */
1205 
1206  /* Methods for saving / extracting a dummy frame's ID.
1207  The ID's stack address must match the SP value returned by
1208  PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
1210 
1211  return gdbarch;
1212 }
1213 
1214 void
1216 {
1217  register_gdbarch_init (bfd_arch_mt, mt_gdbarch_init);
1218 }
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
Definition: gdbarch.c:2050
void set_gdbarch_double_bit(struct gdbarch *gdbarch, int double_bit)
Definition: gdbarch.c:1723
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype frame_align)
Definition: gdbarch.c:3151
void set_gdbarch_float_format(struct gdbarch *gdbarch, const struct floatformat **float_format)
Definition: gdbarch.c:1706
void _initialize_mt_tdep(void)
Definition: mt-tdep.c:1215
struct type * lookup_array_range_type(struct type *element_type, LONGEST low_bound, LONGEST high_bound)
Definition: gdbtypes.c:1232
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
Definition: frame.c:624
struct type * builtin_func_ptr
Definition: gdbtypes.h:1565
void set_gdbarch_float_bit(struct gdbarch *gdbarch, int float_bit)
Definition: gdbarch.c:1690
CORE_ADDR get_frame_pc(struct frame_info *frame)
Definition: frame.c:2376
bfd_vma CORE_ADDR
Definition: common-types.h:41
struct value * trad_frame_get_prev_register(struct frame_info *this_frame, struct trad_frame_saved_reg this_saved_regs[], int regnum)
Definition: trad-frame.c:142
const struct floatformat * floatformats_ieee_double[BFD_ENDIAN_UNKNOWN]
Definition: gdbtypes.c:76
int trad_frame_addr_p(struct trad_frame_saved_reg this_saved_regs[], int regnum)
Definition: trad-frame.c:84
CORE_ADDR end
Definition: symtab.h:1760
void trad_frame_set_value(struct trad_frame_saved_reg this_saved_regs[], int regnum, LONGEST val)
Definition: trad-frame.c:99
void default_print_registers_info(struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int print_all)
Definition: infcmd.c:2365
static struct mt_unwind_cache * mt_frame_unwind_cache(struct frame_info *this_frame, void **this_prologue_cache)
Definition: mt-tdep.c:911
ULONGEST align_down(ULONGEST v, int n)
Definition: utils.c:3005
ULONGEST frame_unwind_register_unsigned(struct frame_info *frame, int regnum)
Definition: frame.c:1279
void set_gdbarch_short_bit(struct gdbarch *gdbarch, int short_bit)
Definition: gdbarch.c:1572
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
Definition: gdbtypes.c:5217
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
Definition: errors.c:50
return_value_convention
Definition: defs.h:247
void set_gdbarch_register_reggroup_p(struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype register_reggroup_p)
Definition: gdbarch.c:3599
static const struct frame_unwind mt_frame_unwind
Definition: mt-tdep.c:1121
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
Definition: gdbarch.c:5309
register_status
CORE_ADDR skip_prologue_using_sal(struct gdbarch *gdbarch, CORE_ADDR func_addr)
Definition: symtab.c:3854
void get_no_prettyformat_print_options(struct value_print_options *opts)
Definition: valprint.c:128
struct block_symbol lookup_symbol(const char *name, const struct block *block, domain_enum domain, struct field_of_this_result *is_a_field_of_this)
Definition: symtab.c:1893
struct reggroup *const all_reggroup
Definition: reggroups.c:318
#define _(String)
Definition: gdb_locale.h:35
ULONGEST get_frame_memory_unsigned(struct frame_info *this_frame, CORE_ADDR addr, int len)
Definition: frame.c:2671
struct type * copro_type
Definition: mt-tdep.c:145
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
Definition: gdbarch.c:1491
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
Definition: frame-unwind.c:79
struct frame_info::@60 this_id
void set_gdbarch_print_registers_info(struct gdbarch *gdbarch, gdbarch_print_registers_info_ftype print_registers_info)
Definition: gdbarch.c:2456
struct type * builtin_int32
Definition: gdbtypes.h:1538
#define FRAME_OBSTACK_ZALLOC(TYPE)
Definition: frame.h:678
static struct frame_base mt_frame_base
Definition: mt-tdep.c:1134
static const gdb_byte * mt_sw_breakpoint_from_kind(struct gdbarch *gdbarch, int kind, int *size)
Definition: mt-tdep.c:464
static CORE_ADDR mt_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
Definition: mt-tdep.c:1051
static struct value * mt_frame_prev_register(struct frame_info *this_frame, void **this_prologue_cache, int regnum)
Definition: mt-tdep.c:1096
struct reggroup *const float_reggroup
Definition: reggroups.c:315
gdb_byte * contents
Definition: value.c:320
void frame_base_set_default(struct gdbarch *gdbarch, const struct frame_base *default_base)
Definition: frame-base.c:95
const char *const name
Definition: aarch64-tdep.c:76
struct value * get_frame_register_value(struct frame_info *frame, int regnum)
Definition: frame.c:1238
void set_gdbarch_pseudo_register_write(struct gdbarch *gdbarch, gdbarch_pseudo_register_write_ftype pseudo_register_write)
Definition: gdbarch.c:2032
void set_gdbarch_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype register_type)
Definition: gdbarch.c:2316
struct trad_frame_saved_reg * saved_regs
Definition: mt-tdep.c:904
const gdb_byte * value_contents(struct value *value)
Definition: value.c:1407
struct reggroup *const general_reggroup
Definition: reggroups.c:314
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
Definition: symtab.c:3288
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
Definition: defs.h:577
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
Definition: regcache.c:777
static enum register_status mt_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int regno, gdb_byte *buf)
Definition: mt-tdep.c:535
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
Definition: gdbarch.c:2156
static struct type * mt_register_type(struct gdbarch *arch, int regnum)
Definition: mt-tdep.c:260
void set_gdbarch_decr_pc_after_break(struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break)
Definition: gdbarch.c:2980
struct type * register_type(struct gdbarch *gdbarch, int regnum)
Definition: regcache.c:152
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
Definition: gdbarch.c:2340
static struct gdbarch * mt_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
Definition: mt-tdep.c:1142
struct_return
Definition: arm-tdep.h:88
void fputs_filtered(const char *linebuffer, struct ui_file *stream)
Definition: utils.c:1811
static void mt_frame_this_id(struct frame_info *this_frame, void **this_prologue_cache, struct frame_id *this_id)
Definition: mt-tdep.c:1083
struct type * builtin_int16
Definition: gdbtypes.h:1536
static int mt_breakpoint_kind_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr)
Definition: mt-tdep.c:456
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
Definition: gdbtypes.h:749
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
Definition: blockframe.c:320
void set_gdbarch_unwind_pc(struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype unwind_pc)
Definition: gdbarch.c:3079
struct type * builtin_uint32
Definition: gdbtypes.h:1539
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
Definition: frame-unwind.c:174
static CORE_ADDR mt_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
Definition: mt-tdep.c:782
const char * gdbarch_register_name(struct gdbarch *gdbarch, int regnr)
Definition: gdbarch.c:2282
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
Definition: gnu-nat.c:1822
static CORE_ADDR mt_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: mt-tdep.c:406
void set_gdbarch_unwind_sp(struct gdbarch *gdbarch, gdbarch_unwind_sp_ftype unwind_sp)
Definition: gdbarch.c:3103
struct type * builtin_unsigned_char
Definition: gdbtypes.h:1506
struct gdbarch * gdbarch
Definition: gdbarch.h:1622
int regnum
Definition: aarch64-tdep.c:77
mt_gdb_regnums
Definition: mt-tdep.c:46
void read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
Definition: corefile.c:258
struct reggroup *const vector_reggroup
Definition: reggroups.c:317
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
Definition: frame.c:1308
void * xmalloc(YYSIZE_T)
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype breakpoint_kind_from_pc)
Definition: gdbarch.c:2871
struct trad_frame_saved_reg * trad_frame_alloc_saved_regs(struct gdbarch *gdbarch)
Definition: trad-frame.c:47
void set_gdbarch_frame_args_skip(struct gdbarch *gdbarch, CORE_ADDR frame_args_skip)
Definition: gdbarch.c:3055
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
Definition: gdbarch.c:1623
struct symbol * symbol
Definition: symtab.h:1136
static CORE_ADDR mt_frame_base_address(struct frame_info *this_frame, void **this_prologue_cache)
Definition: mt-tdep.c:1106
CORE_ADDR frame_base
Definition: mt-tdep.c:899
Definition: value.c:169
const struct floatformat * floatformats_ieee_single[BFD_ENDIAN_UNKNOWN]
Definition: gdbtypes.c:72
void regcache_invalidate(struct regcache *regcache, int regnum)
Definition: regcache.c:378
static int mt_select_coprocessor(struct gdbarch *gdbarch, struct regcache *regcache, int regno)
Definition: mt-tdep.c:486
void print_spaces_filtered(int n, struct ui_file *stream)
Definition: utils.c:2121
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
Definition: arch-utils.c:117
bfd_byte gdb_byte
Definition: common-types.h:38
void set_gdbarch_pseudo_register_read(struct gdbarch *gdbarch, gdbarch_pseudo_register_read_ftype pseudo_register_read)
Definition: gdbarch.c:1984
static const char * mt_register_name(struct gdbarch *gdbarch, int regnum)
Definition: mt-tdep.c:152
const struct language_defn * current_language
Definition: language.c:81
void print_longest(struct ui_file *stream, int format, int use_c_format, LONGEST val_long)
Definition: valprint.c:1303
int deprecated_frame_register_read(struct frame_info *frame, int regnum, gdb_byte *myaddr)
Definition: frame.c:1372
static void mt_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int regno, const gdb_byte *buf)
Definition: mt-tdep.c:595
static int mt_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
Definition: mt-tdep.c:309
#define XCNEW(T)
Definition: poison.h:121
static void mt_registers_info(struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int all)
Definition: mt-tdep.c:655
enum register_status regcache_raw_read(struct regcache *regcache, int regnum, gdb_byte *buf)
Definition: regcache.c:565
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
Definition: regcache.c:806
struct type * builtin_data_ptr
Definition: gdbtypes.h:1554
void set_gdbarch_int_bit(struct gdbarch *gdbarch, int int_bit)
Definition: gdbarch.c:1589
static struct frame_id mt_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
Definition: mt-tdep.c:1073
int offset
Definition: agent.c:65
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
Definition: gdbarch.c:2067
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
#define SYMBOL_LANGUAGE(symbol)
Definition: symtab.h:469
static CORE_ADDR mt_unwind_sp(struct gdbarch *gdbarch, struct frame_info *next_frame)
Definition: mt-tdep.c:1060
static LONGEST extract_signed_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
Definition: defs.h:570
static CORE_ADDR mt_frame_align(struct gdbarch *gdbarch, CORE_ADDR sp)
Definition: mt-tdep.c:644
static enum return_value_convention mt_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
Definition: mt-tdep.c:337
void set_gdbarch_double_format(struct gdbarch *gdbarch, const struct floatformat **double_format)
Definition: gdbarch.c:1739
gdb::def_vector< gdb_byte > byte_vector
Definition: byte-vector.h:58
void val_print(struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, struct value *val, const struct value_print_options *options, const struct language_defn *language)
Definition: valprint.c:1015
CORE_ADDR prev_sp
Definition: mt-tdep.c:898
unsigned long long ULONGEST
Definition: common-types.h:53
enum unwind_stop_reason default_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
Definition: frame-unwind.c:184
struct type * builtin_long_long
Definition: gdbtypes.h:1517
int register_size(struct gdbarch *gdbarch, int regnum)
Definition: regcache.c:164
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
Definition: gdbarch.c:1756
struct type * value_type(const struct value *value)
Definition: value.c:1095
void set_gdbarch_long_bit(struct gdbarch *gdbarch, int long_bit)
Definition: gdbarch.c:1606
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
Definition: gdbarch.c:2738
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
Definition: gdbarch.c:1500
void set_gdbarch_long_double_format(struct gdbarch *gdbarch, const struct floatformat **long_double_format)
Definition: gdbarch.c:1772
static struct type * mt_copro_register_type(struct gdbarch *arch, int regnum)
Definition: mt-tdep.c:214
int default_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
Definition: reggroups.c:192
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
Definition: gdbarch.c:1841
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
Definition: gdbarch.c:2381
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
Definition: corefile.c:326
struct type * builtin_uint64
Definition: gdbtypes.h:1541
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype sw_breakpoint_from_kind)
Definition: gdbarch.c:2888
void register_gdbarch_init(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init)
Definition: gdbarch.c:5299
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
Definition: corefile.c:394
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype skip_prologue)
Definition: gdbarch.c:2772
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
Definition: gdbarch.c:2173
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype register_name)
Definition: gdbarch.c:2292
CORE_ADDR get_frame_func(struct frame_info *this_frame)
Definition: frame.c:1001
static void store_signed_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, LONGEST val)
Definition: defs.h:597
size_t size
Definition: go32-nat.c:242
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, struct gdbarch_tdep *tdep)
Definition: gdbarch.c:361
void set_gdbarch_inner_than(struct gdbarch *gdbarch, gdbarch_inner_than_ftype inner_than)
Definition: gdbarch.c:2837
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
Definition: frame.c:2691
mt_arch_constants
Definition: mt-tdep.c:41
long long LONGEST
Definition: common-types.h:52
#define wordsize
void regcache_cooked_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
Definition: regcache.c:873
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
Definition: defs.h:604
void regcache_raw_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
Definition: regcache.c:831