GDB (xrefs)
/tmp/gdb-8.1/gdb/msp430-tdep.c
Go to the documentation of this file.
1 /* Target-dependent code for the Texas Instruments MSP430 for GDB, the
2  GNU debugger.
3 
4  Copyright (C) 2012-2018 Free Software Foundation, Inc.
5 
6  Contributed by Red Hat, Inc.
7 
8  This file is part of GDB.
9 
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 3 of the License, or
13  (at your option) any later version.
14 
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 
23 #include "defs.h"
24 #include "arch-utils.h"
25 #include "prologue-value.h"
26 #include "target.h"
27 #include "regcache.h"
28 #include "dis-asm.h"
29 #include "gdbtypes.h"
30 #include "frame.h"
31 #include "frame-unwind.h"
32 #include "frame-base.h"
33 #include "value.h"
34 #include "gdbcore.h"
35 #include "dwarf2-frame.h"
36 #include "reggroups.h"
37 
38 #include "elf/msp430.h"
39 #include "opcode/msp430-decode.h"
40 #include "elf-bfd.h"
41 
42 /* Register Numbers. */
43 
44 enum
45 {
62 
64 
81 
84 };
85 
86 enum
87 {
88  /* TI MSP430 Architecture. */
90 
91  /* TI MSP430X Architecture. */
93 };
94 
95 enum
96 {
97  /* The small code model limits code addresses to 16 bits. */
99 
100  /* The large code model uses 20 bit addresses for function
101  pointers. These are stored in memory using four bytes (32 bits). */
103 };
104 
105 /* Architecture specific data. */
106 
107 struct gdbarch_tdep
108 {
109  /* The ELF header flags specify the multilib used. */
110  int elf_flags;
111 
112  /* One of MSP_ISA_MSP430 or MSP_ISA_MSP430X. */
113  int isa;
114 
115  /* One of MSP_SMALL_CODE_MODEL or MSP_LARGE_CODE_MODEL. If, at
116  some point, we support different data models too, we'll probably
117  structure things so that we can combine values using logical
118  "or". */
120 };
121 
122 /* This structure holds the results of a prologue analysis. */
123 
125 {
126  /* The offset from the frame base to the stack pointer --- always
127  zero or negative.
128 
129  Calling this a "size" is a bit misleading, but given that the
130  stack grows downwards, using offsets for everything keeps one
131  from going completely sign-crazy: you never change anything's
132  sign for an ADD instruction; always change the second operand's
133  sign for a SUB instruction; and everything takes care of
134  itself. */
136 
137  /* Non-zero if this function has initialized the frame pointer from
138  the stack pointer, zero otherwise. */
140 
141  /* If has_frame_ptr is non-zero, this is the offset from the frame
142  base to where the frame pointer points. This is always zero or
143  negative. */
145 
146  /* The address of the first instruction at which the frame has been
147  set up and the arguments are where the debug info says they are
148  --- as best as we can tell. */
150 
151  /* reg_offset[R] is the offset from the CFA at which register R is
152  saved, or 1 if register R has not been saved. (Real values are
153  always zero or negative.) */
155 };
156 
157 /* Implement the "register_type" gdbarch method. */
158 
159 static struct type *
160 msp430_register_type (struct gdbarch *gdbarch, int reg_nr)
161 {
162  if (reg_nr < MSP430_NUM_REGS)
164  else if (reg_nr == MSP430_PC_REGNUM)
166  else
168 }
169 
170 /* Implement another version of the "register_type" gdbarch method
171  for msp430x. */
172 
173 static struct type *
174 msp430x_register_type (struct gdbarch *gdbarch, int reg_nr)
175 {
176  if (reg_nr < MSP430_NUM_REGS)
178  else if (reg_nr == MSP430_PC_REGNUM)
180  else
182 }
183 
184 /* Implement the "register_name" gdbarch method. */
185 
186 static const char *
188 {
189  static const char *const reg_names[] = {
190  /* Raw registers. */
191  "", "", "", "", "", "", "", "",
192  "", "", "", "", "", "", "", "",
193  /* Pseudo registers. */
194  "pc", "sp", "sr", "cg", "r4", "r5", "r6", "r7",
195  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
196  };
197 
198  return reg_names[regnr];
199 }
200 
201 /* Implement the "register_reggroup_p" gdbarch method. */
202 
203 static int
205  struct reggroup *group)
206 {
207  if (group == all_reggroup)
208  return 1;
209 
210  /* All other registers are saved and restored. */
211  if (group == save_reggroup || group == restore_reggroup)
213 
214  return group == general_reggroup;
215 }
216 
217 /* Implement the "pseudo_register_read" gdbarch method. */
218 
219 static enum register_status
221  struct regcache *regcache,
222  int regnum, gdb_byte *buffer)
223 {
225  {
226  enum register_status status;
227  ULONGEST val;
228  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
229  int regsize = register_size (gdbarch, regnum);
230  int raw_regnum = regnum - MSP430_NUM_REGS;
231 
232  status = regcache_raw_read_unsigned (regcache, raw_regnum, &val);
233  if (status == REG_VALID)
234  store_unsigned_integer (buffer, regsize, byte_order, val);
235 
236  return status;
237  }
238  else
239  gdb_assert_not_reached ("invalid pseudo register number");
240 }
241 
242 /* Implement the "pseudo_register_write" gdbarch method. */
243 
244 static void
246  struct regcache *regcache,
247  int regnum, const gdb_byte *buffer)
248 {
250 
251  {
252  ULONGEST val;
253  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
254  int regsize = register_size (gdbarch, regnum);
255  int raw_regnum = regnum - MSP430_NUM_REGS;
256 
257  val = extract_unsigned_integer (buffer, regsize, byte_order);
258  regcache_raw_write_unsigned (regcache, raw_regnum, val);
259 
260  }
261  else
262  gdb_assert_not_reached ("invalid pseudo register number");
263 }
264 
265 /* Implement the `register_sim_regno' gdbarch method. */
266 
267 static int
269 {
271 
272  /* So long as regnum is in [0, RL78_NUM_REGS), it's valid. We
273  just want to override the default here which disallows register
274  numbers which have no names. */
275  return regnum;
276 }
277 
278 constexpr gdb_byte msp430_break_insn[] = { 0x43, 0x43 };
279 
280 typedef BP_MANIPULATION (msp430_break_insn) msp430_breakpoint;
281 
282 /* Define a "handle" struct for fetching the next opcode. */
283 
284 struct msp430_get_opcode_byte_handle
285 {
286  CORE_ADDR pc;
287 };
288 
289 /* Fetch a byte on behalf of the opcode decoder. HANDLE contains
290  the memory address of the next byte to fetch. If successful,
291  the address in the handle is updated and the byte fetched is
292  returned as the value of the function. If not successful, -1
293  is returned. */
294 
295 static int
297 {
298  struct msp430_get_opcode_byte_handle *opcdata
299  = (struct msp430_get_opcode_byte_handle *) handle;
300  int status;
301  gdb_byte byte;
302 
303  status = target_read_memory (opcdata->pc, &byte, 1);
304  if (status == 0)
305  {
306  opcdata->pc += 1;
307  return byte;
308  }
309  else
310  return -1;
311 }
312 
313 /* Function for finding saved registers in a 'struct pv_area'; this
314  function is passed to pv_area::scan.
315 
316  If VALUE is a saved register, ADDR says it was saved at a constant
317  offset from the frame base, and SIZE indicates that the whole
318  register was saved, record its offset. */
319 
320 static void
321 check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value)
322 {
323  struct msp430_prologue *result = (struct msp430_prologue *) result_untyped;
324 
325  if (value.kind == pvk_register
326  && value.k == 0
329  result->reg_offset[value.reg] = addr.k;
330 }
331 
332 /* Analyze a prologue starting at START_PC, going no further than
333  LIMIT_PC. Fill in RESULT as appropriate. */
334 
335 static void
337  CORE_ADDR limit_pc, struct msp430_prologue *result)
338 {
339  CORE_ADDR pc, next_pc;
340  int rn;
342  CORE_ADDR after_last_frame_setup_insn = start_pc;
343  int code_model = gdbarch_tdep (gdbarch)->code_model;
344  int sz;
345 
346  memset (result, 0, sizeof (*result));
347 
348  for (rn = 0; rn < MSP430_NUM_TOTAL_REGS; rn++)
349  {
350  reg[rn] = pv_register (rn, 0);
351  result->reg_offset[rn] = 1;
352  }
353 
355 
356  /* The call instruction has saved the return address on the stack. */
357  sz = code_model == MSP_LARGE_CODE_MODEL ? 4 : 2;
360 
361  pc = start_pc;
362  while (pc < limit_pc)
363  {
364  int bytes_read;
365  struct msp430_get_opcode_byte_handle opcode_handle;
366  MSP430_Opcode_Decoded opc;
367 
368  opcode_handle.pc = pc;
369  bytes_read = msp430_decode_opcode (pc, &opc, msp430_get_opcode_byte,
370  &opcode_handle);
371  next_pc = pc + bytes_read;
372 
373  if (opc.id == MSO_push && opc.op[0].type == MSP430_Operand_Register)
374  {
375  int rsrc = opc.op[0].reg;
376 
378  stack.store (reg[MSP430_SP_REGNUM], 2, reg[rsrc]);
379  after_last_frame_setup_insn = next_pc;
380  }
381  else if (opc.id == MSO_push /* PUSHM */
382  && opc.op[0].type == MSP430_Operand_None
383  && opc.op[1].type == MSP430_Operand_Register)
384  {
385  int rsrc = opc.op[1].reg;
386  int count = opc.repeats + 1;
387  int size = opc.size == 16 ? 2 : 4;
388 
389  while (count > 0)
390  {
393  stack.store (reg[MSP430_SP_REGNUM], size, reg[rsrc]);
394  rsrc--;
395  count--;
396  }
397  after_last_frame_setup_insn = next_pc;
398  }
399  else if (opc.id == MSO_sub
400  && opc.op[0].type == MSP430_Operand_Register
401  && opc.op[0].reg == MSR_SP
402  && opc.op[1].type == MSP430_Operand_Immediate)
403  {
404  int addend = opc.op[1].addend;
405 
407  -addend);
408  after_last_frame_setup_insn = next_pc;
409  }
410  else if (opc.id == MSO_mov
411  && opc.op[0].type == MSP430_Operand_Immediate
412  && 12 <= opc.op[0].reg && opc.op[0].reg <= 15)
413  after_last_frame_setup_insn = next_pc;
414  else
415  {
416  /* Terminate the prologue scan. */
417  break;
418  }
419 
420  pc = next_pc;
421  }
422 
423  /* Is the frame size (offset, really) a known constant? */
425  result->frame_size = reg[MSP430_SP_REGNUM].k;
426 
427  /* Record where all the registers were saved. */
428  stack.scan (check_for_saved, result);
429 
430  result->prologue_end = after_last_frame_setup_insn;
431 }
432 
433 /* Implement the "skip_prologue" gdbarch method. */
434 
435 static CORE_ADDR
437 {
438  const char *name;
439  CORE_ADDR func_addr, func_end;
440  struct msp430_prologue p;
441 
442  /* Try to find the extent of the function that contains PC. */
443  if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
444  return pc;
445 
446  msp430_analyze_prologue (gdbarch, pc, func_end, &p);
447  return p.prologue_end;
448 }
449 
450 /* Implement the "unwind_pc" gdbarch method. */
451 
452 static CORE_ADDR
453 msp430_unwind_pc (struct gdbarch *arch, struct frame_info *next_frame)
454 {
456 }
457 
458 /* Implement the "unwind_sp" gdbarch method. */
459 
460 static CORE_ADDR
461 msp430_unwind_sp (struct gdbarch *arch, struct frame_info *next_frame)
462 {
464 }
465 
466 /* Given a frame described by THIS_FRAME, decode the prologue of its
467  associated function if there is not cache entry as specified by
468  THIS_PROLOGUE_CACHE. Save the decoded prologue in the cache and
469  return that struct as the value of this function. */
470 
471 static struct msp430_prologue *
473  void **this_prologue_cache)
474 {
475  if (!*this_prologue_cache)
476  {
477  CORE_ADDR func_start, stop_addr;
478 
479  *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct msp430_prologue);
480 
481  func_start = get_frame_func (this_frame);
482  stop_addr = get_frame_pc (this_frame);
483 
484  /* If we couldn't find any function containing the PC, then
485  just initialize the prologue cache, but don't do anything. */
486  if (!func_start)
487  stop_addr = func_start;
488 
489  msp430_analyze_prologue (get_frame_arch (this_frame), func_start,
490  stop_addr,
491  (struct msp430_prologue *) *this_prologue_cache);
492  }
493 
494  return (struct msp430_prologue *) *this_prologue_cache;
495 }
496 
497 /* Given a frame and a prologue cache, return this frame's base. */
498 
499 static CORE_ADDR
500 msp430_frame_base (struct frame_info *this_frame, void **this_prologue_cache)
501 {
502  struct msp430_prologue *p
503  = msp430_analyze_frame_prologue (this_frame, this_prologue_cache);
505 
506  return sp - p->frame_size;
507 }
508 
509 /* Implement the "frame_this_id" method for unwinding frames. */
510 
511 static void
512 msp430_this_id (struct frame_info *this_frame,
513  void **this_prologue_cache, struct frame_id *this_id)
514 {
515  *this_id = frame_id_build (msp430_frame_base (this_frame,
516  this_prologue_cache),
517  get_frame_func (this_frame));
518 }
519 
520 /* Implement the "frame_prev_register" method for unwinding frames. */
521 
522 static struct value *
523 msp430_prev_register (struct frame_info *this_frame,
524  void **this_prologue_cache, int regnum)
525 {
526  struct msp430_prologue *p
527  = msp430_analyze_frame_prologue (this_frame, this_prologue_cache);
528  CORE_ADDR frame_base = msp430_frame_base (this_frame, this_prologue_cache);
529 
530  if (regnum == MSP430_SP_REGNUM)
531  return frame_unwind_got_constant (this_frame, regnum, frame_base);
532 
533  /* If prologue analysis says we saved this register somewhere,
534  return a description of the stack slot holding it. */
535  else if (p->reg_offset[regnum] != 1)
536  {
537  struct value *rv = frame_unwind_got_memory (this_frame, regnum,
538  frame_base +
539  p->reg_offset[regnum]);
540 
541  if (regnum == MSP430_PC_REGNUM)
542  {
543  ULONGEST pc = value_as_long (rv);
544 
545  return frame_unwind_got_constant (this_frame, regnum, pc);
546  }
547  return rv;
548  }
549 
550  /* Otherwise, presume we haven't changed the value of this
551  register, and get it from the next frame. */
552  else
553  return frame_unwind_got_register (this_frame, regnum, regnum);
554 }
555 
556 static const struct frame_unwind msp430_unwind = {
557  NORMAL_FRAME,
561  NULL,
563 };
564 
565 /* Implement the "dwarf2_reg_to_regnum" gdbarch method. */
566 
567 static int
569 {
570  if (reg >= 0 && reg < MSP430_NUM_REGS)
571  return reg + MSP430_NUM_REGS;
572  return -1;
573 }
574 
575 /* Implement the "return_value" gdbarch method. */
576 
577 static enum return_value_convention
579  struct value *function,
580  struct type *valtype,
581  struct regcache *regcache,
582  gdb_byte *readbuf, const gdb_byte *writebuf)
583 {
584  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
585  LONGEST valtype_len = TYPE_LENGTH (valtype);
586  int code_model = gdbarch_tdep (gdbarch)->code_model;
587 
588  if (TYPE_LENGTH (valtype) > 8
589  || TYPE_CODE (valtype) == TYPE_CODE_STRUCT
590  || TYPE_CODE (valtype) == TYPE_CODE_UNION)
592 
593  if (readbuf)
594  {
595  ULONGEST u;
596  int argreg = MSP430_R12_REGNUM;
597  int offset = 0;
598 
599  while (valtype_len > 0)
600  {
601  int size = 2;
602 
603  if (code_model == MSP_LARGE_CODE_MODEL
604  && TYPE_CODE (valtype) == TYPE_CODE_PTR)
605  {
606  size = 4;
607  }
608 
610  store_unsigned_integer (readbuf + offset, size, byte_order, u);
611  valtype_len -= size;
612  offset += size;
613  argreg++;
614  }
615  }
616 
617  if (writebuf)
618  {
619  ULONGEST u;
620  int argreg = MSP430_R12_REGNUM;
621  int offset = 0;
622 
623  while (valtype_len > 0)
624  {
625  int size = 2;
626 
627  if (code_model == MSP_LARGE_CODE_MODEL
628  && TYPE_CODE (valtype) == TYPE_CODE_PTR)
629  {
630  size = 4;
631  }
632 
633  u = extract_unsigned_integer (writebuf + offset, size, byte_order);
635  valtype_len -= size;
636  offset += size;
637  argreg++;
638  }
639  }
640 
642 }
643 
644 
645 /* Implement the "frame_align" gdbarch method. */
646 
647 static CORE_ADDR
649 {
650  return align_down (sp, 2);
651 }
652 
653 
654 /* Implement the "dummy_id" gdbarch method. */
655 
656 static struct frame_id
657 msp430_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
658 {
659  return
661  (this_frame, MSP430_SP_REGNUM),
662  get_frame_pc (this_frame));
663 }
664 
665 
666 /* Implement the "push_dummy_call" gdbarch method. */
667 
668 static CORE_ADDR
669 msp430_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
670  struct regcache *regcache, CORE_ADDR bp_addr,
671  int nargs, struct value **args, CORE_ADDR sp,
672  int struct_return, CORE_ADDR struct_addr)
673 {
674  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
675  int write_pass;
676  int sp_off = 0;
677  CORE_ADDR cfa;
678  int code_model = gdbarch_tdep (gdbarch)->code_model;
679 
680  struct type *func_type = value_type (function);
681 
682  /* Dereference function pointer types. */
683  while (TYPE_CODE (func_type) == TYPE_CODE_PTR)
685 
686  /* The end result had better be a function or a method. */
689 
690  /* We make two passes; the first does the stack allocation,
691  the second actually stores the arguments. */
692  for (write_pass = 0; write_pass <= 1; write_pass++)
693  {
694  int i;
695  int arg_reg = MSP430_R12_REGNUM;
696  int args_on_stack = 0;
697 
698  if (write_pass)
699  sp = align_down (sp - sp_off, 4);
700  sp_off = 0;
701 
702  if (struct_return)
703  {
704  if (write_pass)
705  regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
706  arg_reg++;
707  }
708 
709  /* Push the arguments. */
710  for (i = 0; i < nargs; i++)
711  {
712  struct value *arg = args[i];
713  const gdb_byte *arg_bits = value_contents_all (arg);
714  struct type *arg_type = check_typedef (value_type (arg));
715  ULONGEST arg_size = TYPE_LENGTH (arg_type);
716  int offset;
717  int current_arg_on_stack;
718 
719  current_arg_on_stack = 0;
720 
721  if (TYPE_CODE (arg_type) == TYPE_CODE_STRUCT
722  || TYPE_CODE (arg_type) == TYPE_CODE_UNION)
723  {
724  /* Aggregates of any size are passed by reference. */
725  gdb_byte struct_addr[4];
726 
727  store_unsigned_integer (struct_addr, 4, byte_order,
728  value_address (arg));
729  arg_bits = struct_addr;
730  arg_size = (code_model == MSP_LARGE_CODE_MODEL) ? 4 : 2;
731  }
732  else
733  {
734  /* Scalars bigger than 8 bytes such as complex doubles are passed
735  on the stack. */
736  if (arg_size > 8)
737  current_arg_on_stack = 1;
738  }
739 
740 
741  for (offset = 0; offset < arg_size; offset += 2)
742  {
743  /* The condition below prevents 8 byte scalars from being split
744  between registers and memory (stack). It also prevents other
745  splits once the stack has been written to. */
746  if (!current_arg_on_stack
747  && (arg_reg
748  + ((arg_size == 8 || args_on_stack)
749  ? ((arg_size - offset) / 2 - 1)
750  : 0) <= MSP430_R15_REGNUM))
751  {
752  int size = 2;
753 
754  if (code_model == MSP_LARGE_CODE_MODEL
755  && (TYPE_CODE (arg_type) == TYPE_CODE_PTR
756  || TYPE_IS_REFERENCE (arg_type)
757  || TYPE_CODE (arg_type) == TYPE_CODE_STRUCT
758  || TYPE_CODE (arg_type) == TYPE_CODE_UNION))
759  {
760  /* When using the large memory model, pointer,
761  reference, struct, and union arguments are
762  passed using the entire register. (As noted
763  earlier, aggregates are always passed by
764  reference.) */
765  if (offset != 0)
766  continue;
767  size = 4;
768  }
769 
770  if (write_pass)
773  (arg_bits + offset, size,
774  byte_order));
775 
776  arg_reg++;
777  }
778  else
779  {
780  if (write_pass)
781  write_memory (sp + sp_off, arg_bits + offset, 2);
782 
783  sp_off += 2;
784  args_on_stack = 1;
785  current_arg_on_stack = 1;
786  }
787  }
788  }
789  }
790 
791  /* Keep track of the stack address prior to pushing the return address.
792  This is the value that we'll return. */
793  cfa = sp;
794 
795  /* Push the return address. */
796  {
798  ? 2 : 4;
799  sp = sp - sz;
800  write_memory_unsigned_integer (sp, sz, byte_order, bp_addr);
801  }
802 
803  /* Update the stack pointer. */
805 
806  return cfa;
807 }
808 
809 /* In order to keep code size small, the compiler may create epilogue
810  code through which more than one function epilogue is routed. I.e.
811  the epilogue and return may just be a branch to some common piece of
812  code which is responsible for tearing down the frame and performing
813  the return. These epilog (label) names will have the common prefix
814  defined here. */
815 
816 static const char msp430_epilog_name_prefix[] = "__mspabi_func_epilog_";
817 
818 /* Implement the "in_return_stub" gdbarch method. */
819 
820 static int
822  const char *name)
823 {
824  return (name != NULL
826 }
827 
828 /* Implement the "skip_trampoline_code" gdbarch method. */
829 static CORE_ADDR
831 {
832  struct bound_minimal_symbol bms;
833  const char *stub_name;
834  struct gdbarch *gdbarch = get_frame_arch (frame);
835 
836  bms = lookup_minimal_symbol_by_pc (pc);
837  if (!bms.minsym)
838  return pc;
839 
840  stub_name = MSYMBOL_LINKAGE_NAME (bms.minsym);
841 
842  if (gdbarch_tdep (gdbarch)->code_model == MSP_SMALL_CODE_MODEL
843  && msp430_in_return_stub (gdbarch, pc, stub_name))
844  {
846 
847  return read_memory_integer
848  (sp + 2 * (stub_name[strlen (msp430_epilog_name_prefix)] - '0'),
850  }
851 
852  return pc;
853 }
854 
855 /* Allocate and initialize a gdbarch object. */
856 
857 static struct gdbarch *
858 msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
859 {
860  struct gdbarch *gdbarch;
861  struct gdbarch_tdep *tdep;
862  int elf_flags, isa, code_model;
863 
864  /* Extract the elf_flags if available. */
865  if (info.abfd != NULL
866  && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
867  elf_flags = elf_elfheader (info.abfd)->e_flags;
868  else
869  elf_flags = 0;
870 
871  if (info.abfd != NULL)
872  switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
873  OFBA_MSPABI_Tag_ISA))
874  {
875  case 1:
878  break;
879  case 2:
881  switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
882  OFBA_MSPABI_Tag_Code_Model))
883  {
884  case 1:
886  break;
887  case 2:
889  break;
890  default:
891  internal_error (__FILE__, __LINE__,
892  _("Unknown msp430x code memory model"));
893  break;
894  }
895  break;
896  case 0:
897  /* This can happen when loading a previously dumped data structure.
898  Use the ISA and code model from the current architecture, provided
899  it's compatible. */
900  {
901  struct gdbarch *ca = get_current_arch ();
902  if (ca && gdbarch_bfd_arch_info (ca)->arch == bfd_arch_msp430)
903  {
904  struct gdbarch_tdep *ca_tdep = gdbarch_tdep (ca);
905 
906  elf_flags = ca_tdep->elf_flags;
907  isa = ca_tdep->isa;
908  code_model = ca_tdep->code_model;
909  break;
910  }
911  /* Otherwise, fall through... */
912  }
913  default:
914  error (_("Unknown msp430 isa"));
915  break;
916  }
917  else
918  {
921  }
922 
923 
924  /* Try to find the architecture in the list of already defined
925  architectures. */
926  for (arches = gdbarch_list_lookup_by_info (arches, &info);
927  arches != NULL;
928  arches = gdbarch_list_lookup_by_info (arches->next, &info))
929  {
930  struct gdbarch_tdep *candidate_tdep = gdbarch_tdep (arches->gdbarch);
931 
932  if (candidate_tdep->elf_flags != elf_flags
933  || candidate_tdep->isa != isa
934  || candidate_tdep->code_model != code_model)
935  continue;
936 
937  return arches->gdbarch;
938  }
939 
940  /* None found, create a new architecture from the information
941  provided. */
942  tdep = XCNEW (struct gdbarch_tdep);
943  gdbarch = gdbarch_alloc (&info, tdep);
944  tdep->elf_flags = elf_flags;
945  tdep->isa = isa;
946  tdep->code_model = code_model;
947 
948  /* Registers. */
952  if (isa == MSP_ISA_MSP430)
954  else
963 
964  /* Data types. */
971  {
974  }
975  else /* MSP_LARGE_CODE_MODEL */
976  {
979  }
987 
988  /* Breakpoints. */
990  msp430_breakpoint::kind_from_pc);
992  msp430_breakpoint::bp_from_kind);
994 
995  /* Frames, prologues, etc. */
1003 
1004  /* Dummy frames, return values. */
1008 
1009  /* Trampolines. */
1012 
1013  /* Virtual tables. */
1015 
1016  return gdbarch;
1017 }
1018 
1019 /* Register the initialization routine. */
1020 
1021 void
1023 {
1024  register_gdbarch_init (bfd_arch_msp430, msp430_gdbarch_init);
1025 }
struct gdbarch * target_gdbarch(void)
Definition: gdbarch.c:5467
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
Definition: gdbarch.c:2050
static CORE_ADDR msp430_frame_base(struct frame_info *this_frame, void **this_prologue_cache)
Definition: msp430-tdep.c:500
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
static int msp430_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
Definition: msp430-tdep.c:204
static struct type * msp430x_register_type(struct gdbarch *gdbarch, int reg_nr)
Definition: msp430-tdep.c:174
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
void set_gdbarch_dwarf2_addr_size(struct gdbarch *gdbarch, int dwarf2_addr_size)
Definition: gdbarch.c:1877
CORE_ADDR get_frame_pc(struct frame_info *frame)
Definition: frame.c:2376
#define MSYMBOL_LINKAGE_NAME(symbol)
Definition: symtab.h:707
static struct value * msp430_prev_register(struct frame_info *this_frame, void **this_prologue_cache, int regnum)
Definition: msp430-tdep.c:523
bfd_vma CORE_ADDR
Definition: common-types.h:41
pv_t pv_add_constant(pv_t v, CORE_ADDR k)
const struct floatformat * floatformats_ieee_double[BFD_ENDIAN_UNKNOWN]
Definition: gdbtypes.c:76
constexpr gdb_byte msp430_break_insn[]
Definition: msp430-tdep.c:278
LONGEST value_as_long(struct value *val)
Definition: value.c:2749
struct value * frame_unwind_got_memory(struct frame_info *frame, int regnum, CORE_ADDR addr)
Definition: frame-unwind.c:233
void write_memory_unsigned_integer(CORE_ADDR addr, int len, enum bfd_endian byte_order, ULONGEST value)
Definition: corefile.c:417
static const struct frame_unwind msp430_unwind
Definition: msp430-tdep.c:556
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype skip_trampoline_code)
Definition: gdbarch.c:3316
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
typedef BP_MANIPULATION(msp430_break_insn)
Definition: msp430-tdep.c:280
int pv_is_register(pv_t a, int r)
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
struct type * builtin_uint16
Definition: gdbtypes.h:1537
void set_gdbarch_register_reggroup_p(struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype register_reggroup_p)
Definition: gdbarch.c:3599
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
Definition: gdbarch.c:5309
register_status
struct gdbarch_list * next
Definition: gdbarch.h:1623
struct reggroup *const restore_reggroup
Definition: reggroups.c:320
struct reggroup *const all_reggroup
Definition: reggroups.c:318
#define _(String)
Definition: gdb_locale.h:35
static int msp430_register_sim_regno(struct gdbarch *gdbarch, int regnum)
Definition: msp430-tdep.c:268
void set_gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype dwarf2_reg_to_regnum)
Definition: gdbarch.c:2275
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
#define FRAME_OBSTACK_ZALLOC(TYPE)
Definition: frame.h:678
struct value * frame_unwind_got_constant(struct frame_info *frame, int regnum, ULONGEST val)
Definition: frame-unwind.c:246
#define TYPE_IS_REFERENCE(t)
Definition: gdbtypes.h:332
void set_gdbarch_addr_bit(struct gdbarch *gdbarch, int addr_bit)
Definition: gdbarch.c:1859
const char *const name
Definition: aarch64-tdep.c:76
static const char msp430_epilog_name_prefix[]
Definition: msp430-tdep.c:816
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
static CORE_ADDR msp430_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: msp430-tdep.c:436
struct type * check_typedef(struct type *type)
Definition: gdbtypes.c:2421
LONGEST read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
Definition: corefile.c:316
static int msp430_in_return_stub(struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
Definition: msp430-tdep.c:821
struct reggroup *const general_reggroup
Definition: reggroups.c:314
struct value::@186::@187 reg
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
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
Definition: gdbarch.c:2156
static CORE_ADDR msp430_frame_align(struct gdbarch *gdbarch, CORE_ADDR sp)
Definition: msp430-tdep.c:648
bfd * abfd
Definition: gdbarch.h:1637
void set_gdbarch_decr_pc_after_break(struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break)
Definition: gdbarch.c:2980
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
Definition: gdbarch.c:2340
void set_gdbarch_in_solib_return_trampoline(struct gdbarch *gdbarch, gdbarch_in_solib_return_trampoline_ftype in_solib_return_trampoline)
Definition: gdbarch.c:3350
struct_return
Definition: arm-tdep.h:88
const gdb_byte * value_contents_all(struct value *value)
Definition: value.c:1265
#define gdb_assert_not_reached(message)
Definition: gdb_assert.h:55
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
void set_gdbarch_register_sim_regno(struct gdbarch *gdbarch, gdbarch_register_sim_regno_ftype register_sim_regno)
Definition: gdbarch.c:2514
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
static CORE_ADDR msp430_unwind_sp(struct gdbarch *arch, struct frame_info *next_frame)
Definition: msp430-tdep.c:461
struct type * builtin_uint32
Definition: gdbtypes.h:1539
struct gdbarch * get_current_arch(void)
Definition: arch-utils.c:798
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
Definition: frame-unwind.c:174
static void check_for_saved(void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value)
Definition: msp430-tdep.c:321
void store(pv_t addr, CORE_ADDR size, pv_t value)
void scan(void(*func)(void *closure, pv_t addr, CORE_ADDR size, pv_t value), void *closure)
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 int startswith(const char *string, const char *pattern)
Definition: common-utils.h:107
int gdbarch_addr_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1848
void set_gdbarch_unwind_sp(struct gdbarch *gdbarch, gdbarch_unwind_sp_ftype unwind_sp)
Definition: gdbarch.c:3103
void _initialize_msp430_tdep(void)
Definition: msp430-tdep.c:1022
int reg_offset[MSP430_NUM_TOTAL_REGS]
Definition: msp430-tdep.c:154
struct gdbarch * gdbarch
Definition: gdbarch.h:1622
static CORE_ADDR msp430_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: msp430-tdep.c:669
int regnum
Definition: aarch64-tdep.c:77
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
Definition: frame.c:1308
static enum return_value_convention msp430_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
Definition: msp430-tdep.c:578
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype breakpoint_kind_from_pc)
Definition: gdbarch.c:2871
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
Definition: gdbarch.c:1623
Definition: regdef.h:22
#define gdb_assert(expr)
Definition: gdb_assert.h:32
Definition: value.c:169
static CORE_ADDR msp430_unwind_pc(struct gdbarch *arch, struct frame_info *next_frame)
Definition: msp430-tdep.c:453
static void msp430_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buffer)
Definition: msp430-tdep.c:245
const struct floatformat * floatformats_ieee_single[BFD_ENDIAN_UNKNOWN]
Definition: gdbtypes.c:72
static int msp430_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, int reg)
Definition: msp430-tdep.c:568
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
void set_gdbarch_char_signed(struct gdbarch *gdbarch, int char_signed)
Definition: gdbarch.c:1895
#define TYPE_TARGET_TYPE(thistype)
Definition: gdbtypes.h:1226
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
Definition: minsyms.c:928
static const char * msp430_register_name(struct gdbarch *gdbarch, int regnr)
Definition: msp430-tdep.c:187
#define XCNEW(T)
Definition: poison.h:121
#define TYPE_CODE(thistype)
Definition: gdbtypes.h:1238
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
Definition: regcache.c:806
struct value * frame_unwind_got_register(struct frame_info *frame, int regnum, int new_regnum)
Definition: frame-unwind.c:223
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
Definition: target.c:1370
void set_gdbarch_int_bit(struct gdbarch *gdbarch, int int_bit)
Definition: gdbarch.c:1589
struct minimal_symbol * minsym
Definition: minsyms.h:34
int offset
Definition: agent.c:65
void regcache_raw_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
Definition: regcache.c:640
Definition: buffer.h:23
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
Definition: gdbarch.c:2067
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
static struct gdbarch * msp430_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
Definition: msp430-tdep.c:858
static void msp430_this_id(struct frame_info *this_frame, void **this_prologue_cache, struct frame_id *this_id)
Definition: msp430-tdep.c:512
CORE_ADDR prologue_end
Definition: msp430-tdep.c:149
void set_gdbarch_double_format(struct gdbarch *gdbarch, const struct floatformat **double_format)
Definition: gdbarch.c:1739
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
static enum register_status msp430_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, gdb_byte *buffer)
Definition: msp430-tdep.c:220
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 * msp430_register_type(struct gdbarch *gdbarch, int reg_nr)
Definition: msp430-tdep.c:160
struct reggroup *const save_reggroup
Definition: reggroups.c:319
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
Definition: gdbarch.c:1841
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
Definition: regcache.c:612
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
Definition: gdbarch.c:2381
static struct frame_id msp430_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
Definition: msp430-tdep.c:657
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
static int msp430_get_opcode_byte(void *handle)
Definition: msp430-tdep.c:296
static void msp430_analyze_prologue(struct gdbarch *gdbarch, CORE_ADDR start_pc, CORE_ADDR limit_pc, struct msp430_prologue *result)
Definition: msp430-tdep.c:336
CORE_ADDR value_address(const struct value *value)
Definition: value.c:1529
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
Definition: gdbarch.c:2173
static struct msp430_prologue * msp430_analyze_frame_prologue(struct frame_info *this_frame, void **this_prologue_cache)
Definition: msp430-tdep.c:472
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 CORE_ADDR msp430_skip_trampoline_code(struct frame_info *frame, CORE_ADDR pc)
Definition: msp430-tdep.c:830
void error(const char *fmt,...)
Definition: errors.c:38
pv_t pv_register(int reg, CORE_ADDR k)
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
long long LONGEST
Definition: common-types.h:52
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
Definition: defs.h:604
void set_gdbarch_vbit_in_delta(struct gdbarch *gdbarch, int vbit_in_delta)
Definition: gdbarch.c:3874