xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/msp430-tdep.c (revision 8b657b0747480f8989760d71343d6dd33f8d4cf9)
1 /* Target-dependent code for the Texas Instruments MSP430 for GDB, the
2    GNU debugger.
3 
4    Copyright (C) 2012-2023 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 #include "gdbarch.h"
38 
39 #include "elf/msp430.h"
40 #include "opcode/msp430-decode.h"
41 #include "elf-bfd.h"
42 
43 /* Register Numbers.  */
44 
45 enum
46 {
47   MSP430_PC_RAW_REGNUM,
48   MSP430_SP_RAW_REGNUM,
49   MSP430_SR_RAW_REGNUM,
50   MSP430_CG_RAW_REGNUM,
51   MSP430_R4_RAW_REGNUM,
52   MSP430_R5_RAW_REGNUM,
53   MSP430_R6_RAW_REGNUM,
54   MSP430_R7_RAW_REGNUM,
55   MSP430_R8_RAW_REGNUM,
56   MSP430_R9_RAW_REGNUM,
57   MSP430_R10_RAW_REGNUM,
58   MSP430_R11_RAW_REGNUM,
59   MSP430_R12_RAW_REGNUM,
60   MSP430_R13_RAW_REGNUM,
61   MSP430_R14_RAW_REGNUM,
62   MSP430_R15_RAW_REGNUM,
63 
64   MSP430_NUM_REGS,
65 
66   MSP430_PC_REGNUM = MSP430_NUM_REGS,
67   MSP430_SP_REGNUM,
68   MSP430_SR_REGNUM,
69   MSP430_CG_REGNUM,
70   MSP430_R4_REGNUM,
71   MSP430_R5_REGNUM,
72   MSP430_R6_REGNUM,
73   MSP430_R7_REGNUM,
74   MSP430_R8_REGNUM,
75   MSP430_R9_REGNUM,
76   MSP430_R10_REGNUM,
77   MSP430_R11_REGNUM,
78   MSP430_R12_REGNUM,
79   MSP430_R13_REGNUM,
80   MSP430_R14_REGNUM,
81   MSP430_R15_REGNUM,
82 
83   MSP430_NUM_TOTAL_REGS,
84   MSP430_NUM_PSEUDO_REGS = MSP430_NUM_TOTAL_REGS - MSP430_NUM_REGS
85 };
86 
87 enum
88 {
89   /* TI MSP430 Architecture.  */
90   MSP_ISA_MSP430,
91 
92   /* TI MSP430X Architecture.  */
93   MSP_ISA_MSP430X
94 };
95 
96 enum
97 {
98   /* The small code model limits code addresses to 16 bits.  */
99   MSP_SMALL_CODE_MODEL,
100 
101   /* The large code model uses 20 bit addresses for function
102      pointers.  These are stored in memory using four bytes (32 bits).  */
103   MSP_LARGE_CODE_MODEL
104 };
105 
106 /* Architecture specific data.  */
107 
108 struct msp430_gdbarch_tdep : gdbarch_tdep_base
109 {
110   /* The ELF header flags specify the multilib used.  */
111   int elf_flags = 0;
112 
113   /* One of MSP_ISA_MSP430 or MSP_ISA_MSP430X.  */
114   int isa = 0;
115 
116   /* One of MSP_SMALL_CODE_MODEL or MSP_LARGE_CODE_MODEL.  If, at
117      some point, we support different data models too, we'll probably
118      structure things so that we can combine values using logical
119      "or".  */
120   int code_model = 0;
121 };
122 
123 /* This structure holds the results of a prologue analysis.  */
124 
125 struct msp430_prologue
126 {
127   /* The offset from the frame base to the stack pointer --- always
128      zero or negative.
129 
130      Calling this a "size" is a bit misleading, but given that the
131      stack grows downwards, using offsets for everything keeps one
132      from going completely sign-crazy: you never change anything's
133      sign for an ADD instruction; always change the second operand's
134      sign for a SUB instruction; and everything takes care of
135      itself.  */
136   int frame_size;
137 
138   /* Non-zero if this function has initialized the frame pointer from
139      the stack pointer, zero otherwise.  */
140   int has_frame_ptr;
141 
142   /* If has_frame_ptr is non-zero, this is the offset from the frame
143      base to where the frame pointer points.  This is always zero or
144      negative.  */
145   int frame_ptr_offset;
146 
147   /* The address of the first instruction at which the frame has been
148      set up and the arguments are where the debug info says they are
149      --- as best as we can tell.  */
150   CORE_ADDR prologue_end;
151 
152   /* reg_offset[R] is the offset from the CFA at which register R is
153      saved, or 1 if register R has not been saved.  (Real values are
154      always zero or negative.)  */
155   int reg_offset[MSP430_NUM_TOTAL_REGS];
156 };
157 
158 /* Implement the "register_type" gdbarch method.  */
159 
160 static struct type *
161 msp430_register_type (struct gdbarch *gdbarch, int reg_nr)
162 {
163   if (reg_nr < MSP430_NUM_REGS)
164     return builtin_type (gdbarch)->builtin_uint32;
165   else if (reg_nr == MSP430_PC_REGNUM)
166     return builtin_type (gdbarch)->builtin_func_ptr;
167   else
168     return builtin_type (gdbarch)->builtin_uint16;
169 }
170 
171 /* Implement another version of the "register_type" gdbarch method
172    for msp430x.  */
173 
174 static struct type *
175 msp430x_register_type (struct gdbarch *gdbarch, int reg_nr)
176 {
177   if (reg_nr < MSP430_NUM_REGS)
178     return builtin_type (gdbarch)->builtin_uint32;
179   else if (reg_nr == MSP430_PC_REGNUM)
180     return builtin_type (gdbarch)->builtin_func_ptr;
181   else
182     return builtin_type (gdbarch)->builtin_uint32;
183 }
184 
185 /* Implement the "register_name" gdbarch method.  */
186 
187 static const char *
188 msp430_register_name (struct gdbarch *gdbarch, int regnr)
189 {
190   static const char *const reg_names[] = {
191     /* Raw registers.  */
192     "", "", "", "", "", "", "", "",
193     "", "", "", "", "", "", "", "",
194     /* Pseudo registers.  */
195     "pc", "sp", "sr", "cg", "r4", "r5", "r6", "r7",
196     "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
197   };
198 
199   gdb_static_assert (ARRAY_SIZE (reg_names) == (MSP430_NUM_REGS
200 						+ MSP430_NUM_PSEUDO_REGS));
201   return reg_names[regnr];
202 }
203 
204 /* Implement the "register_reggroup_p" gdbarch method.  */
205 
206 static int
207 msp430_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
208 			    const struct reggroup *group)
209 {
210   if (group == all_reggroup)
211     return 1;
212 
213   /* All other registers are saved and restored.  */
214   if (group == save_reggroup || group == restore_reggroup)
215     return (MSP430_NUM_REGS <= regnum && regnum < MSP430_NUM_TOTAL_REGS);
216 
217   return group == general_reggroup;
218 }
219 
220 /* Implement the "pseudo_register_read" gdbarch method.  */
221 
222 static enum register_status
223 msp430_pseudo_register_read (struct gdbarch *gdbarch,
224 			     readable_regcache *regcache,
225 			     int regnum, gdb_byte *buffer)
226 {
227   if (MSP430_NUM_REGS <= regnum && regnum < MSP430_NUM_TOTAL_REGS)
228     {
229       enum register_status status;
230       ULONGEST val;
231       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
232       int regsize = register_size (gdbarch, regnum);
233       int raw_regnum = regnum - MSP430_NUM_REGS;
234 
235       status = regcache->raw_read (raw_regnum, &val);
236       if (status == REG_VALID)
237 	store_unsigned_integer (buffer, regsize, byte_order, val);
238 
239       return status;
240     }
241   else
242     gdb_assert_not_reached ("invalid pseudo register number");
243 }
244 
245 /* Implement the "pseudo_register_write" gdbarch method.  */
246 
247 static void
248 msp430_pseudo_register_write (struct gdbarch *gdbarch,
249 			      struct regcache *regcache,
250 			      int regnum, const gdb_byte *buffer)
251 {
252   if (MSP430_NUM_REGS <= regnum && regnum < MSP430_NUM_TOTAL_REGS)
253 
254     {
255       ULONGEST val;
256       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
257       int regsize = register_size (gdbarch, regnum);
258       int raw_regnum = regnum - MSP430_NUM_REGS;
259 
260       val = extract_unsigned_integer (buffer, regsize, byte_order);
261       regcache_raw_write_unsigned (regcache, raw_regnum, val);
262 
263     }
264   else
265     gdb_assert_not_reached ("invalid pseudo register number");
266 }
267 
268 /* Implement the `register_sim_regno' gdbarch method.  */
269 
270 static int
271 msp430_register_sim_regno (struct gdbarch *gdbarch, int regnum)
272 {
273   gdb_assert (regnum < MSP430_NUM_REGS);
274 
275   /* So long as regnum is in [0, RL78_NUM_REGS), it's valid.  We
276      just want to override the default here which disallows register
277      numbers which have no names.  */
278   return regnum;
279 }
280 
281 constexpr gdb_byte msp430_break_insn[] = { 0x43, 0x43 };
282 
283 typedef BP_MANIPULATION (msp430_break_insn) msp430_breakpoint;
284 
285 /* Define a "handle" struct for fetching the next opcode.  */
286 
287 struct msp430_get_opcode_byte_handle
288 {
289   CORE_ADDR pc;
290 };
291 
292 /* Fetch a byte on behalf of the opcode decoder.  HANDLE contains
293    the memory address of the next byte to fetch.  If successful,
294    the address in the handle is updated and the byte fetched is
295    returned as the value of the function.  If not successful, -1
296    is returned.  */
297 
298 static int
299 msp430_get_opcode_byte (void *handle)
300 {
301   struct msp430_get_opcode_byte_handle *opcdata
302     = (struct msp430_get_opcode_byte_handle *) handle;
303   int status;
304   gdb_byte byte;
305 
306   status = target_read_memory (opcdata->pc, &byte, 1);
307   if (status == 0)
308     {
309       opcdata->pc += 1;
310       return byte;
311     }
312   else
313     return -1;
314 }
315 
316 /* Function for finding saved registers in a 'struct pv_area'; this
317    function is passed to pv_area::scan.
318 
319    If VALUE is a saved register, ADDR says it was saved at a constant
320    offset from the frame base, and SIZE indicates that the whole
321    register was saved, record its offset.  */
322 
323 static void
324 check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value)
325 {
326   struct msp430_prologue *result = (struct msp430_prologue *) result_untyped;
327 
328   if (value.kind == pvk_register
329       && value.k == 0
330       && pv_is_register (addr, MSP430_SP_REGNUM)
331       && size == register_size (target_gdbarch (), value.reg))
332     result->reg_offset[value.reg] = addr.k;
333 }
334 
335 /* Analyze a prologue starting at START_PC, going no further than
336    LIMIT_PC.  Fill in RESULT as appropriate.  */
337 
338 static void
339 msp430_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc,
340 			 CORE_ADDR limit_pc, struct msp430_prologue *result)
341 {
342   CORE_ADDR pc, next_pc;
343   int rn;
344   pv_t reg[MSP430_NUM_TOTAL_REGS];
345   CORE_ADDR after_last_frame_setup_insn = start_pc;
346   msp430_gdbarch_tdep *tdep = gdbarch_tdep<msp430_gdbarch_tdep> (gdbarch);
347   int code_model = tdep->code_model;
348   int sz;
349 
350   memset (result, 0, sizeof (*result));
351 
352   for (rn = 0; rn < MSP430_NUM_TOTAL_REGS; rn++)
353     {
354       reg[rn] = pv_register (rn, 0);
355       result->reg_offset[rn] = 1;
356     }
357 
358   pv_area stack (MSP430_SP_REGNUM, gdbarch_addr_bit (gdbarch));
359 
360   /* The call instruction has saved the return address on the stack.  */
361   sz = code_model == MSP_LARGE_CODE_MODEL ? 4 : 2;
362   reg[MSP430_SP_REGNUM] = pv_add_constant (reg[MSP430_SP_REGNUM], -sz);
363   stack.store (reg[MSP430_SP_REGNUM], sz, reg[MSP430_PC_REGNUM]);
364 
365   pc = start_pc;
366   while (pc < limit_pc)
367     {
368       int bytes_read;
369       struct msp430_get_opcode_byte_handle opcode_handle;
370       MSP430_Opcode_Decoded opc;
371 
372       opcode_handle.pc = pc;
373       bytes_read = msp430_decode_opcode (pc, &opc, msp430_get_opcode_byte,
374 					 &opcode_handle);
375       next_pc = pc + bytes_read;
376 
377       if (opc.id == MSO_push && opc.op[0].type == MSP430_Operand_Register)
378 	{
379 	  int rsrc = opc.op[0].reg;
380 
381 	  reg[MSP430_SP_REGNUM] = pv_add_constant (reg[MSP430_SP_REGNUM], -2);
382 	  stack.store (reg[MSP430_SP_REGNUM], 2, reg[rsrc]);
383 	  after_last_frame_setup_insn = next_pc;
384 	}
385       else if (opc.id == MSO_push	/* PUSHM  */
386 	       && opc.op[0].type == MSP430_Operand_None
387 	       && opc.op[1].type == MSP430_Operand_Register)
388 	{
389 	  int rsrc = opc.op[1].reg;
390 	  int count = opc.repeats + 1;
391 	  int size = opc.size == 16 ? 2 : 4;
392 
393 	  while (count > 0)
394 	    {
395 	      reg[MSP430_SP_REGNUM]
396 		= pv_add_constant (reg[MSP430_SP_REGNUM], -size);
397 	      stack.store (reg[MSP430_SP_REGNUM], size, reg[rsrc]);
398 	      rsrc--;
399 	      count--;
400 	    }
401 	  after_last_frame_setup_insn = next_pc;
402 	}
403       else if (opc.id == MSO_sub
404 	       && opc.op[0].type == MSP430_Operand_Register
405 	       && opc.op[0].reg == MSR_SP
406 	       && opc.op[1].type == MSP430_Operand_Immediate)
407 	{
408 	  int addend = opc.op[1].addend;
409 
410 	  reg[MSP430_SP_REGNUM] = pv_add_constant (reg[MSP430_SP_REGNUM],
411 						   -addend);
412 	  after_last_frame_setup_insn = next_pc;
413 	}
414       else if (opc.id == MSO_mov
415 	       && opc.op[0].type == MSP430_Operand_Immediate
416 	       && 12 <= opc.op[0].reg && opc.op[0].reg <= 15)
417 	after_last_frame_setup_insn = next_pc;
418       else
419 	{
420 	  /* Terminate the prologue scan.  */
421 	  break;
422 	}
423 
424       pc = next_pc;
425     }
426 
427   /* Is the frame size (offset, really) a known constant?  */
428   if (pv_is_register (reg[MSP430_SP_REGNUM], MSP430_SP_REGNUM))
429     result->frame_size = reg[MSP430_SP_REGNUM].k;
430 
431   /* Record where all the registers were saved.  */
432   stack.scan (check_for_saved, result);
433 
434   result->prologue_end = after_last_frame_setup_insn;
435 }
436 
437 /* Implement the "skip_prologue" gdbarch method.  */
438 
439 static CORE_ADDR
440 msp430_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
441 {
442   const char *name;
443   CORE_ADDR func_addr, func_end;
444   struct msp430_prologue p;
445 
446   /* Try to find the extent of the function that contains PC.  */
447   if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
448     return pc;
449 
450   msp430_analyze_prologue (gdbarch, pc, func_end, &p);
451   return p.prologue_end;
452 }
453 
454 /* Given a frame described by THIS_FRAME, decode the prologue of its
455    associated function if there is not cache entry as specified by
456    THIS_PROLOGUE_CACHE.  Save the decoded prologue in the cache and
457    return that struct as the value of this function.  */
458 
459 static struct msp430_prologue *
460 msp430_analyze_frame_prologue (frame_info_ptr this_frame,
461 			       void **this_prologue_cache)
462 {
463   if (!*this_prologue_cache)
464     {
465       CORE_ADDR func_start, stop_addr;
466 
467       *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct msp430_prologue);
468 
469       func_start = get_frame_func (this_frame);
470       stop_addr = get_frame_pc (this_frame);
471 
472       /* If we couldn't find any function containing the PC, then
473 	 just initialize the prologue cache, but don't do anything.  */
474       if (!func_start)
475 	stop_addr = func_start;
476 
477       msp430_analyze_prologue (get_frame_arch (this_frame), func_start,
478 			       stop_addr,
479 			       (struct msp430_prologue *) *this_prologue_cache);
480     }
481 
482   return (struct msp430_prologue *) *this_prologue_cache;
483 }
484 
485 /* Given a frame and a prologue cache, return this frame's base.  */
486 
487 static CORE_ADDR
488 msp430_frame_base (frame_info_ptr this_frame, void **this_prologue_cache)
489 {
490   struct msp430_prologue *p
491     = msp430_analyze_frame_prologue (this_frame, this_prologue_cache);
492   CORE_ADDR sp = get_frame_register_unsigned (this_frame, MSP430_SP_REGNUM);
493 
494   return sp - p->frame_size;
495 }
496 
497 /* Implement the "frame_this_id" method for unwinding frames.  */
498 
499 static void
500 msp430_this_id (frame_info_ptr this_frame,
501 		void **this_prologue_cache, struct frame_id *this_id)
502 {
503   *this_id = frame_id_build (msp430_frame_base (this_frame,
504 						this_prologue_cache),
505 			     get_frame_func (this_frame));
506 }
507 
508 /* Implement the "frame_prev_register" method for unwinding frames.  */
509 
510 static struct value *
511 msp430_prev_register (frame_info_ptr this_frame,
512 		      void **this_prologue_cache, int regnum)
513 {
514   struct msp430_prologue *p
515     = msp430_analyze_frame_prologue (this_frame, this_prologue_cache);
516   CORE_ADDR frame_base = msp430_frame_base (this_frame, this_prologue_cache);
517 
518   if (regnum == MSP430_SP_REGNUM)
519     return frame_unwind_got_constant (this_frame, regnum, frame_base);
520 
521   /* If prologue analysis says we saved this register somewhere,
522      return a description of the stack slot holding it.  */
523   else if (p->reg_offset[regnum] != 1)
524     {
525       struct value *rv = frame_unwind_got_memory (this_frame, regnum,
526 						  frame_base +
527 						  p->reg_offset[regnum]);
528 
529       if (regnum == MSP430_PC_REGNUM)
530 	{
531 	  ULONGEST pc = value_as_long (rv);
532 
533 	  return frame_unwind_got_constant (this_frame, regnum, pc);
534 	}
535       return rv;
536     }
537 
538   /* Otherwise, presume we haven't changed the value of this
539      register, and get it from the next frame.  */
540   else
541     return frame_unwind_got_register (this_frame, regnum, regnum);
542 }
543 
544 static const struct frame_unwind msp430_unwind = {
545   "msp430 prologue",
546   NORMAL_FRAME,
547   default_frame_unwind_stop_reason,
548   msp430_this_id,
549   msp430_prev_register,
550   NULL,
551   default_frame_sniffer
552 };
553 
554 /* Implement the "dwarf2_reg_to_regnum" gdbarch method.  */
555 
556 static int
557 msp430_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
558 {
559   if (reg >= 0 && reg < MSP430_NUM_REGS)
560     return reg + MSP430_NUM_REGS;
561   return -1;
562 }
563 
564 /* Implement the "return_value" gdbarch method.  */
565 
566 static enum return_value_convention
567 msp430_return_value (struct gdbarch *gdbarch,
568 		     struct value *function,
569 		     struct type *valtype,
570 		     struct regcache *regcache,
571 		     gdb_byte *readbuf, const gdb_byte *writebuf)
572 {
573   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
574   LONGEST valtype_len = valtype->length ();
575   msp430_gdbarch_tdep *tdep = gdbarch_tdep<msp430_gdbarch_tdep> (gdbarch);
576   int code_model = tdep->code_model;
577 
578   if (valtype->length () > 8
579       || valtype->code () == TYPE_CODE_STRUCT
580       || valtype->code () == TYPE_CODE_UNION)
581     return RETURN_VALUE_STRUCT_CONVENTION;
582 
583   if (readbuf)
584     {
585       ULONGEST u;
586       int argreg = MSP430_R12_REGNUM;
587       int offset = 0;
588 
589       while (valtype_len > 0)
590 	{
591 	  int size = 2;
592 
593 	  if (code_model == MSP_LARGE_CODE_MODEL
594 	      && valtype->code () == TYPE_CODE_PTR)
595 	    {
596 	      size = 4;
597 	    }
598 
599 	  regcache_cooked_read_unsigned (regcache, argreg, &u);
600 	  store_unsigned_integer (readbuf + offset, size, byte_order, u);
601 	  valtype_len -= size;
602 	  offset += size;
603 	  argreg++;
604 	}
605     }
606 
607   if (writebuf)
608     {
609       ULONGEST u;
610       int argreg = MSP430_R12_REGNUM;
611       int offset = 0;
612 
613       while (valtype_len > 0)
614 	{
615 	  int size = 2;
616 
617 	  if (code_model == MSP_LARGE_CODE_MODEL
618 	      && valtype->code () == TYPE_CODE_PTR)
619 	    {
620 	      size = 4;
621 	    }
622 
623 	  u = extract_unsigned_integer (writebuf + offset, size, byte_order);
624 	  regcache_cooked_write_unsigned (regcache, argreg, u);
625 	  valtype_len -= size;
626 	  offset += size;
627 	  argreg++;
628 	}
629     }
630 
631   return RETURN_VALUE_REGISTER_CONVENTION;
632 }
633 
634 
635 /* Implement the "frame_align" gdbarch method.  */
636 
637 static CORE_ADDR
638 msp430_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
639 {
640   return align_down (sp, 2);
641 }
642 
643 /* Implement the "push_dummy_call" gdbarch method.  */
644 
645 static CORE_ADDR
646 msp430_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
647 			struct regcache *regcache, CORE_ADDR bp_addr,
648 			int nargs, struct value **args, CORE_ADDR sp,
649 			function_call_return_method return_method,
650 			CORE_ADDR struct_addr)
651 {
652   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
653   int write_pass;
654   int sp_off = 0;
655   CORE_ADDR cfa;
656   msp430_gdbarch_tdep *tdep = gdbarch_tdep<msp430_gdbarch_tdep> (gdbarch);
657   int code_model = tdep->code_model;
658 
659   struct type *func_type = value_type (function);
660 
661   /* Dereference function pointer types.  */
662   while (func_type->code () == TYPE_CODE_PTR)
663     func_type = func_type->target_type ();
664 
665   /* The end result had better be a function or a method.  */
666   gdb_assert (func_type->code () == TYPE_CODE_FUNC
667 	      || func_type->code () == TYPE_CODE_METHOD);
668 
669   /* We make two passes; the first does the stack allocation,
670      the second actually stores the arguments.  */
671   for (write_pass = 0; write_pass <= 1; write_pass++)
672     {
673       int i;
674       int arg_reg = MSP430_R12_REGNUM;
675       int args_on_stack = 0;
676 
677       if (write_pass)
678 	sp = align_down (sp - sp_off, 4);
679       sp_off = 0;
680 
681       if (return_method == return_method_struct)
682 	{
683 	  if (write_pass)
684 	    regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
685 	  arg_reg++;
686 	}
687 
688       /* Push the arguments.  */
689       for (i = 0; i < nargs; i++)
690 	{
691 	  struct value *arg = args[i];
692 	  const gdb_byte *arg_bits = value_contents_all (arg).data ();
693 	  struct type *arg_type = check_typedef (value_type (arg));
694 	  ULONGEST arg_size = arg_type->length ();
695 	  int offset;
696 	  int current_arg_on_stack;
697 	  gdb_byte struct_addr_buf[4];
698 
699 	  current_arg_on_stack = 0;
700 
701 	  if (arg_type->code () == TYPE_CODE_STRUCT
702 	      || arg_type->code () == TYPE_CODE_UNION)
703 	    {
704 	      /* Aggregates of any size are passed by reference.  */
705 	      store_unsigned_integer (struct_addr_buf, 4, byte_order,
706 				      value_address (arg));
707 	      arg_bits = struct_addr_buf;
708 	      arg_size = (code_model == MSP_LARGE_CODE_MODEL) ? 4 : 2;
709 	    }
710 	  else
711 	    {
712 	      /* Scalars bigger than 8 bytes such as complex doubles are passed
713 		 on the stack.  */
714 	      if (arg_size > 8)
715 		current_arg_on_stack = 1;
716 	    }
717 
718 
719 	  for (offset = 0; offset < arg_size; offset += 2)
720 	    {
721 	      /* The condition below prevents 8 byte scalars from being split
722 		 between registers and memory (stack).  It also prevents other
723 		 splits once the stack has been written to.  */
724 	      if (!current_arg_on_stack
725 		  && (arg_reg
726 		      + ((arg_size == 8 || args_on_stack)
727 			 ? ((arg_size - offset) / 2 - 1)
728 			 : 0) <= MSP430_R15_REGNUM))
729 		{
730 		  int size = 2;
731 
732 		  if (code_model == MSP_LARGE_CODE_MODEL
733 		      && (arg_type->code () == TYPE_CODE_PTR
734 			  || TYPE_IS_REFERENCE (arg_type)
735 			  || arg_type->code () == TYPE_CODE_STRUCT
736 			  || arg_type->code () == TYPE_CODE_UNION))
737 		    {
738 		      /* When using the large memory model, pointer,
739 			 reference, struct, and union arguments are
740 			 passed using the entire register.  (As noted
741 			 earlier, aggregates are always passed by
742 			 reference.) */
743 		      if (offset != 0)
744 			continue;
745 		      size = 4;
746 		    }
747 
748 		  if (write_pass)
749 		    regcache_cooked_write_unsigned (regcache, arg_reg,
750 						    extract_unsigned_integer
751 						    (arg_bits + offset, size,
752 						     byte_order));
753 
754 		  arg_reg++;
755 		}
756 	      else
757 		{
758 		  if (write_pass)
759 		    write_memory (sp + sp_off, arg_bits + offset, 2);
760 
761 		  sp_off += 2;
762 		  args_on_stack = 1;
763 		  current_arg_on_stack = 1;
764 		}
765 	    }
766 	}
767     }
768 
769   /* Keep track of the stack address prior to pushing the return address.
770      This is the value that we'll return.  */
771   cfa = sp;
772 
773   /* Push the return address.  */
774   {
775     int sz = tdep->code_model == MSP_SMALL_CODE_MODEL ? 2 : 4;
776     sp = sp - sz;
777     write_memory_unsigned_integer (sp, sz, byte_order, bp_addr);
778   }
779 
780   /* Update the stack pointer.  */
781   regcache_cooked_write_unsigned (regcache, MSP430_SP_REGNUM, sp);
782 
783   return cfa;
784 }
785 
786 /* In order to keep code size small, the compiler may create epilogue
787    code through which more than one function epilogue is routed.  I.e.
788    the epilogue and return may just be a branch to some common piece of
789    code which is responsible for tearing down the frame and performing
790    the return.  These epilog (label) names will have the common prefix
791    defined here.  */
792 
793 static const char msp430_epilog_name_prefix[] = "__mspabi_func_epilog_";
794 
795 /* Implement the "in_return_stub" gdbarch method.  */
796 
797 static int
798 msp430_in_return_stub (struct gdbarch *gdbarch, CORE_ADDR pc,
799 		       const char *name)
800 {
801   return (name != NULL
802 	  && startswith (name, msp430_epilog_name_prefix));
803 }
804 
805 /* Implement the "skip_trampoline_code" gdbarch method.  */
806 static CORE_ADDR
807 msp430_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
808 {
809   struct bound_minimal_symbol bms;
810   const char *stub_name;
811   struct gdbarch *gdbarch = get_frame_arch (frame);
812 
813   bms = lookup_minimal_symbol_by_pc (pc);
814   if (!bms.minsym)
815     return pc;
816 
817   stub_name = bms.minsym->linkage_name ();
818 
819   msp430_gdbarch_tdep *tdep = gdbarch_tdep<msp430_gdbarch_tdep> (gdbarch);
820   if (tdep->code_model == MSP_SMALL_CODE_MODEL
821       && msp430_in_return_stub (gdbarch, pc, stub_name))
822     {
823       CORE_ADDR sp = get_frame_register_unsigned (frame, MSP430_SP_REGNUM);
824 
825       return read_memory_integer
826 	(sp + 2 * (stub_name[strlen (msp430_epilog_name_prefix)] - '0'),
827 	 2, gdbarch_byte_order (gdbarch));
828     }
829 
830   return pc;
831 }
832 
833 /* Allocate and initialize a gdbarch object.  */
834 
835 static struct gdbarch *
836 msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
837 {
838   struct gdbarch *gdbarch;
839   int elf_flags, isa, code_model;
840 
841   /* Extract the elf_flags if available.  */
842   if (info.abfd != NULL
843       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
844     elf_flags = elf_elfheader (info.abfd)->e_flags;
845   else
846     elf_flags = 0;
847 
848   if (info.abfd != NULL)
849     switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
850 				      OFBA_MSPABI_Tag_ISA))
851       {
852       case 1:
853 	isa = MSP_ISA_MSP430;
854 	code_model = MSP_SMALL_CODE_MODEL;
855 	break;
856       case 2:
857 	isa = MSP_ISA_MSP430X;
858 	switch (bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
859 					  OFBA_MSPABI_Tag_Code_Model))
860 	  {
861 	  case 1:
862 	    code_model = MSP_SMALL_CODE_MODEL;
863 	    break;
864 	  case 2:
865 	    code_model = MSP_LARGE_CODE_MODEL;
866 	    break;
867 	  default:
868 	    internal_error (_("Unknown msp430x code memory model"));
869 	    break;
870 	  }
871 	break;
872       case 0:
873 	/* This can happen when loading a previously dumped data structure.
874 	   Use the ISA and code model from the current architecture, provided
875 	   it's compatible.  */
876 	{
877 	  struct gdbarch *ca = get_current_arch ();
878 	  if (ca && gdbarch_bfd_arch_info (ca)->arch == bfd_arch_msp430)
879 	    {
880 	      msp430_gdbarch_tdep *ca_tdep
881 		= gdbarch_tdep<msp430_gdbarch_tdep> (ca);
882 
883 	      elf_flags = ca_tdep->elf_flags;
884 	      isa = ca_tdep->isa;
885 	      code_model = ca_tdep->code_model;
886 	      break;
887 	    }
888 	}
889 	/* Fall through.  */
890       default:
891 	error (_("Unknown msp430 isa"));
892 	break;
893       }
894   else
895     {
896       isa = MSP_ISA_MSP430;
897       code_model = MSP_SMALL_CODE_MODEL;
898     }
899 
900 
901   /* Try to find the architecture in the list of already defined
902      architectures.  */
903   for (arches = gdbarch_list_lookup_by_info (arches, &info);
904        arches != NULL;
905        arches = gdbarch_list_lookup_by_info (arches->next, &info))
906     {
907       msp430_gdbarch_tdep *candidate_tdep
908 	= gdbarch_tdep<msp430_gdbarch_tdep> (arches->gdbarch);
909 
910       if (candidate_tdep->elf_flags != elf_flags
911 	  || candidate_tdep->isa != isa
912 	  || candidate_tdep->code_model != code_model)
913 	continue;
914 
915       return arches->gdbarch;
916     }
917 
918   /* None found, create a new architecture from the information
919      provided.  */
920   msp430_gdbarch_tdep *tdep = new msp430_gdbarch_tdep;
921   gdbarch = gdbarch_alloc (&info, tdep);
922   tdep->elf_flags = elf_flags;
923   tdep->isa = isa;
924   tdep->code_model = code_model;
925 
926   /* Registers.  */
927   set_gdbarch_num_regs (gdbarch, MSP430_NUM_REGS);
928   set_gdbarch_num_pseudo_regs (gdbarch, MSP430_NUM_PSEUDO_REGS);
929   set_gdbarch_register_name (gdbarch, msp430_register_name);
930   if (isa == MSP_ISA_MSP430)
931     set_gdbarch_register_type (gdbarch, msp430_register_type);
932   else
933     set_gdbarch_register_type (gdbarch, msp430x_register_type);
934   set_gdbarch_pc_regnum (gdbarch, MSP430_PC_REGNUM);
935   set_gdbarch_sp_regnum (gdbarch, MSP430_SP_REGNUM);
936   set_gdbarch_register_reggroup_p (gdbarch, msp430_register_reggroup_p);
937   set_gdbarch_pseudo_register_read (gdbarch, msp430_pseudo_register_read);
938   set_gdbarch_pseudo_register_write (gdbarch, msp430_pseudo_register_write);
939   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, msp430_dwarf2_reg_to_regnum);
940   set_gdbarch_register_sim_regno (gdbarch, msp430_register_sim_regno);
941 
942   /* Data types.  */
943   set_gdbarch_char_signed (gdbarch, 0);
944   set_gdbarch_short_bit (gdbarch, 16);
945   set_gdbarch_int_bit (gdbarch, 16);
946   set_gdbarch_long_bit (gdbarch, 32);
947   set_gdbarch_long_long_bit (gdbarch, 64);
948   if (code_model == MSP_SMALL_CODE_MODEL)
949     {
950       set_gdbarch_ptr_bit (gdbarch, 16);
951       set_gdbarch_addr_bit (gdbarch, 16);
952     }
953   else				/* MSP_LARGE_CODE_MODEL */
954     {
955       set_gdbarch_ptr_bit (gdbarch, 32);
956       set_gdbarch_addr_bit (gdbarch, 32);
957     }
958   set_gdbarch_dwarf2_addr_size (gdbarch, 4);
959   set_gdbarch_float_bit (gdbarch, 32);
960   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
961   set_gdbarch_double_bit (gdbarch, 64);
962   set_gdbarch_long_double_bit (gdbarch, 64);
963   set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
964   set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
965 
966   /* Breakpoints.  */
967   set_gdbarch_breakpoint_kind_from_pc (gdbarch,
968 				       msp430_breakpoint::kind_from_pc);
969   set_gdbarch_sw_breakpoint_from_kind (gdbarch,
970 				       msp430_breakpoint::bp_from_kind);
971   set_gdbarch_decr_pc_after_break (gdbarch, 1);
972 
973   /* Frames, prologues, etc.  */
974   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
975   set_gdbarch_skip_prologue (gdbarch, msp430_skip_prologue);
976   set_gdbarch_frame_align (gdbarch, msp430_frame_align);
977   dwarf2_append_unwinders (gdbarch);
978   frame_unwind_append_unwinder (gdbarch, &msp430_unwind);
979 
980   /* Dummy frames, return values.  */
981   set_gdbarch_push_dummy_call (gdbarch, msp430_push_dummy_call);
982   set_gdbarch_return_value (gdbarch, msp430_return_value);
983 
984   /* Trampolines.  */
985   set_gdbarch_in_solib_return_trampoline (gdbarch, msp430_in_return_stub);
986   set_gdbarch_skip_trampoline_code (gdbarch, msp430_skip_trampoline_code);
987 
988   /* Virtual tables.  */
989   set_gdbarch_vbit_in_delta (gdbarch, 0);
990 
991   return gdbarch;
992 }
993 
994 /* Register the initialization routine.  */
995 
996 void _initialize_msp430_tdep ();
997 void
998 _initialize_msp430_tdep ()
999 {
1000   gdbarch_register (bfd_arch_msp430, msp430_gdbarch_init);
1001 }
1002