xref: /netbsd/external/gpl3/gdb/dist/gdb/h8300-tdep.c (revision 1424dfb3)
1 /* Target-machine dependent code for Renesas H8/300, for GDB.
2 
3    Copyright (C) 1988-2020 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 /*
21    Contributed by Steve Chamberlain
22    sac@cygnus.com
23  */
24 
25 #include "defs.h"
26 #include "value.h"
27 #include "arch-utils.h"
28 #include "regcache.h"
29 #include "gdbcore.h"
30 #include "objfiles.h"
31 #include "dis-asm.h"
32 #include "dwarf2/frame.h"
33 #include "frame-base.h"
34 #include "frame-unwind.h"
35 
36 enum gdb_regnum
37 {
38   E_R0_REGNUM, E_ER0_REGNUM = E_R0_REGNUM, E_ARG0_REGNUM = E_R0_REGNUM,
39   E_RET0_REGNUM = E_R0_REGNUM,
40   E_R1_REGNUM, E_ER1_REGNUM = E_R1_REGNUM, E_RET1_REGNUM = E_R1_REGNUM,
41   E_R2_REGNUM, E_ER2_REGNUM = E_R2_REGNUM, E_ARGLAST_REGNUM = E_R2_REGNUM,
42   E_R3_REGNUM, E_ER3_REGNUM = E_R3_REGNUM,
43   E_R4_REGNUM, E_ER4_REGNUM = E_R4_REGNUM,
44   E_R5_REGNUM, E_ER5_REGNUM = E_R5_REGNUM,
45   E_R6_REGNUM, E_ER6_REGNUM = E_R6_REGNUM, E_FP_REGNUM = E_R6_REGNUM,
46   E_SP_REGNUM,
47   E_CCR_REGNUM,
48   E_PC_REGNUM,
49   E_CYCLES_REGNUM,
50   E_TICK_REGNUM, E_EXR_REGNUM = E_TICK_REGNUM,
51   E_INST_REGNUM, E_TICKS_REGNUM = E_INST_REGNUM,
52   E_INSTS_REGNUM,
53   E_MACH_REGNUM,
54   E_MACL_REGNUM,
55   E_SBR_REGNUM,
56   E_VBR_REGNUM
57 };
58 
59 #define H8300_MAX_NUM_REGS 18
60 
61 #define E_PSEUDO_CCR_REGNUM(gdbarch) (gdbarch_num_regs (gdbarch))
62 #define E_PSEUDO_EXR_REGNUM(gdbarch) (gdbarch_num_regs (gdbarch)+1)
63 
64 struct h8300_frame_cache
65 {
66   /* Base address.  */
67   CORE_ADDR base;
68   CORE_ADDR sp_offset;
69   CORE_ADDR pc;
70 
71   /* Flag showing that a frame has been created in the prologue code.  */
72   int uses_fp;
73 
74   /* Saved registers.  */
75   CORE_ADDR saved_regs[H8300_MAX_NUM_REGS];
76   CORE_ADDR saved_sp;
77 };
78 
79 enum
80 {
81   h8300_reg_size = 2,
82   h8300h_reg_size = 4,
83   h8300_max_reg_size = 4,
84 };
85 
86 static int is_h8300hmode (struct gdbarch *gdbarch);
87 static int is_h8300smode (struct gdbarch *gdbarch);
88 static int is_h8300sxmode (struct gdbarch *gdbarch);
89 static int is_h8300_normal_mode (struct gdbarch *gdbarch);
90 
91 #define BINWORD(gdbarch) ((is_h8300hmode (gdbarch) \
92 		  && !is_h8300_normal_mode (gdbarch)) \
93 		 ? h8300h_reg_size : h8300_reg_size)
94 
95 /* Normal frames.  */
96 
97 /* Allocate and initialize a frame cache.  */
98 
99 static void
h8300_init_frame_cache(struct gdbarch * gdbarch,struct h8300_frame_cache * cache)100 h8300_init_frame_cache (struct gdbarch *gdbarch,
101 			struct h8300_frame_cache *cache)
102 {
103   int i;
104 
105   /* Base address.  */
106   cache->base = 0;
107   cache->sp_offset = 0;
108   cache->pc = 0;
109 
110   /* Frameless until proven otherwise.  */
111   cache->uses_fp = 0;
112 
113   /* Saved registers.  We initialize these to -1 since zero is a valid
114      offset (that's where %fp is supposed to be stored).  */
115   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
116     cache->saved_regs[i] = -1;
117 }
118 
119 #define IS_MOVB_RnRm(x)		(((x) & 0xff88) == 0x0c88)
120 #define IS_MOVW_RnRm(x)		(((x) & 0xff88) == 0x0d00)
121 #define IS_MOVL_RnRm(x)		(((x) & 0xff88) == 0x0f80)
122 #define IS_MOVB_Rn16_SP(x)	(((x) & 0xfff0) == 0x6ee0)
123 #define IS_MOVB_EXT(x)		((x) == 0x7860)
124 #define IS_MOVB_Rn24_SP(x)	(((x) & 0xfff0) == 0x6aa0)
125 #define IS_MOVW_Rn16_SP(x)	(((x) & 0xfff0) == 0x6fe0)
126 #define IS_MOVW_EXT(x)		((x) == 0x78e0)
127 #define IS_MOVW_Rn24_SP(x)	(((x) & 0xfff0) == 0x6ba0)
128 /* Same instructions as mov.w, just prefixed with 0x0100.  */
129 #define IS_MOVL_PRE(x)		((x) == 0x0100)
130 #define IS_MOVL_Rn16_SP(x)	(((x) & 0xfff0) == 0x6fe0)
131 #define IS_MOVL_EXT(x)		((x) == 0x78e0)
132 #define IS_MOVL_Rn24_SP(x)	(((x) & 0xfff0) == 0x6ba0)
133 
134 #define IS_PUSHFP_MOVESPFP(x)	((x) == 0x6df60d76)
135 #define IS_PUSH_FP(x)		((x) == 0x01006df6)
136 #define IS_MOV_SP_FP(x)		((x) == 0x0ff6)
137 #define IS_SUB2_SP(x)		((x) == 0x1b87)
138 #define IS_SUB4_SP(x)		((x) == 0x1b97)
139 #define IS_ADD_IMM_SP(x)	((x) == 0x7a1f)
140 #define IS_SUB_IMM_SP(x)	((x) == 0x7a3f)
141 #define IS_SUBL4_SP(x)		((x) == 0x1acf)
142 #define IS_MOV_IMM_Rn(x)	(((x) & 0xfff0) == 0x7905)
143 #define IS_SUB_RnSP(x)		(((x) & 0xff0f) == 0x1907)
144 #define IS_ADD_RnSP(x)		(((x) & 0xff0f) == 0x0907)
145 #define IS_PUSH(x)		(((x) & 0xfff0) == 0x6df0)
146 
147 /* If the instruction at PC is an argument register spill, return its
148    length.  Otherwise, return zero.
149 
150    An argument register spill is an instruction that moves an argument
151    from the register in which it was passed to the stack slot in which
152    it really lives.  It is a byte, word, or longword move from an
153    argument register to a negative offset from the frame pointer.
154 
155    CV, 2003-06-16: Or, in optimized code or when the `register' qualifier
156    is used, it could be a byte, word or long move to registers r3-r5.  */
157 
158 static int
h8300_is_argument_spill(struct gdbarch * gdbarch,CORE_ADDR pc)159 h8300_is_argument_spill (struct gdbarch *gdbarch, CORE_ADDR pc)
160 {
161   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
162   int w = read_memory_unsigned_integer (pc, 2, byte_order);
163 
164   if ((IS_MOVB_RnRm (w) || IS_MOVW_RnRm (w) || IS_MOVL_RnRm (w))
165       && (w & 0x70) <= 0x20	/* Rs is R0, R1 or R2 */
166       && (w & 0x7) >= 0x3 && (w & 0x7) <= 0x5)	/* Rd is R3, R4 or R5 */
167     return 2;
168 
169   if (IS_MOVB_Rn16_SP (w)
170       && 8 <= (w & 0xf) && (w & 0xf) <= 10)	/* Rs is R0L, R1L, or R2L  */
171     {
172       /* ... and d:16 is negative.  */
173       if (read_memory_integer (pc + 2, 2, byte_order) < 0)
174 	return 4;
175     }
176   else if (IS_MOVB_EXT (w))
177     {
178       if (IS_MOVB_Rn24_SP (read_memory_unsigned_integer (pc + 2,
179 							 2, byte_order)))
180 	{
181 	  ULONGEST disp = read_memory_unsigned_integer (pc + 4, 4, byte_order);
182 
183 	  /* ... and d:24 is negative.  */
184 	  if ((disp & 0x00800000) != 0)
185 	    return 8;
186 	}
187     }
188   else if (IS_MOVW_Rn16_SP (w)
189 	   && (w & 0xf) <= 2)	/* Rs is R0, R1, or R2 */
190     {
191       /* ... and d:16 is negative.  */
192       if (read_memory_integer (pc + 2, 2, byte_order) < 0)
193 	return 4;
194     }
195   else if (IS_MOVW_EXT (w))
196     {
197       if (IS_MOVW_Rn24_SP (read_memory_unsigned_integer (pc + 2,
198 							 2, byte_order)))
199 	{
200 	  ULONGEST disp = read_memory_unsigned_integer (pc + 4, 4, byte_order);
201 
202 	  /* ... and d:24 is negative.  */
203 	  if ((disp & 0x00800000) != 0)
204 	    return 8;
205 	}
206     }
207   else if (IS_MOVL_PRE (w))
208     {
209       int w2 = read_memory_integer (pc + 2, 2, byte_order);
210 
211       if (IS_MOVL_Rn16_SP (w2)
212 	  && (w2 & 0xf) <= 2)	/* Rs is ER0, ER1, or ER2 */
213 	{
214 	  /* ... and d:16 is negative.  */
215 	  if (read_memory_integer (pc + 4, 2, byte_order) < 0)
216 	    return 6;
217 	}
218       else if (IS_MOVL_EXT (w2))
219 	{
220 	  if (IS_MOVL_Rn24_SP (read_memory_integer (pc + 4, 2, byte_order)))
221 	    {
222 	      ULONGEST disp = read_memory_unsigned_integer (pc + 6, 4,
223 							    byte_order);
224 
225 	      /* ... and d:24 is negative.  */
226 	      if ((disp & 0x00800000) != 0)
227 		return 10;
228 	    }
229 	}
230     }
231 
232   return 0;
233 }
234 
235 /* Do a full analysis of the prologue at PC and update CACHE
236    accordingly.  Bail out early if CURRENT_PC is reached.  Return the
237    address where the analysis stopped.
238 
239    We handle all cases that can be generated by gcc.
240 
241    For allocating a stack frame:
242 
243    mov.w r6,@-sp
244    mov.w sp,r6
245    mov.w #-n,rN
246    add.w rN,sp
247 
248    mov.w r6,@-sp
249    mov.w sp,r6
250    subs  #2,sp
251    (repeat)
252 
253    mov.l er6,@-sp
254    mov.l sp,er6
255    add.l #-n,sp
256 
257    mov.w r6,@-sp
258    mov.w sp,r6
259    subs  #4,sp
260    (repeat)
261 
262    For saving registers:
263 
264    mov.w rN,@-sp
265    mov.l erN,@-sp
266    stm.l reglist,@-sp
267 
268    */
269 
270 static CORE_ADDR
h8300_analyze_prologue(struct gdbarch * gdbarch,CORE_ADDR pc,CORE_ADDR current_pc,struct h8300_frame_cache * cache)271 h8300_analyze_prologue (struct gdbarch *gdbarch,
272 			CORE_ADDR pc, CORE_ADDR current_pc,
273 			struct h8300_frame_cache *cache)
274 {
275   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
276   unsigned int op;
277   int regno, i, spill_size;
278 
279   cache->sp_offset = 0;
280 
281   if (pc >= current_pc)
282     return current_pc;
283 
284   op = read_memory_unsigned_integer (pc, 4, byte_order);
285 
286   if (IS_PUSHFP_MOVESPFP (op))
287     {
288       cache->saved_regs[E_FP_REGNUM] = 0;
289       cache->uses_fp = 1;
290       pc += 4;
291     }
292   else if (IS_PUSH_FP (op))
293     {
294       cache->saved_regs[E_FP_REGNUM] = 0;
295       pc += 4;
296       if (pc >= current_pc)
297         return current_pc;
298       op = read_memory_unsigned_integer (pc, 2, byte_order);
299       if (IS_MOV_SP_FP (op))
300 	{
301 	  cache->uses_fp = 1;
302 	  pc += 2;
303 	}
304     }
305 
306   while (pc < current_pc)
307     {
308       op = read_memory_unsigned_integer (pc, 2, byte_order);
309       if (IS_SUB2_SP (op))
310 	{
311 	  cache->sp_offset += 2;
312 	  pc += 2;
313 	}
314       else if (IS_SUB4_SP (op))
315 	{
316 	  cache->sp_offset += 4;
317 	  pc += 2;
318 	}
319       else if (IS_ADD_IMM_SP (op))
320 	{
321 	  cache->sp_offset += -read_memory_integer (pc + 2, 2, byte_order);
322 	  pc += 4;
323 	}
324       else if (IS_SUB_IMM_SP (op))
325 	{
326 	  cache->sp_offset += read_memory_integer (pc + 2, 2, byte_order);
327 	  pc += 4;
328 	}
329       else if (IS_SUBL4_SP (op))
330 	{
331 	  cache->sp_offset += 4;
332 	  pc += 2;
333 	}
334       else if (IS_MOV_IMM_Rn (op))
335         {
336 	  int offset = read_memory_integer (pc + 2, 2, byte_order);
337 	  regno = op & 0x000f;
338 	  op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
339 	  if (IS_ADD_RnSP (op) && (op & 0x00f0) == regno)
340 	    {
341 	      cache->sp_offset -= offset;
342 	      pc += 6;
343 	    }
344 	  else if (IS_SUB_RnSP (op) && (op & 0x00f0) == regno)
345 	    {
346 	      cache->sp_offset += offset;
347 	      pc += 6;
348 	    }
349 	  else
350 	    break;
351 	}
352       else if (IS_PUSH (op))
353 	{
354 	  regno = op & 0x000f;
355 	  cache->sp_offset += 2;
356 	  cache->saved_regs[regno] = cache->sp_offset;
357 	  pc += 2;
358 	}
359       else if (op == 0x0100)
360 	{
361 	  op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
362 	  if (IS_PUSH (op))
363 	    {
364 	      regno = op & 0x000f;
365 	      cache->sp_offset += 4;
366 	      cache->saved_regs[regno] = cache->sp_offset;
367 	      pc += 4;
368 	    }
369 	  else
370 	    break;
371 	}
372       else if ((op & 0xffcf) == 0x0100)
373 	{
374 	  int op1;
375 	  op1 = read_memory_unsigned_integer (pc + 2, 2, byte_order);
376 	  if (IS_PUSH (op1))
377 	    {
378 	      /* Since the prefix is 0x01x0, this is not a simple pushm but a
379 	         stm.l reglist,@-sp */
380 	      i = ((op & 0x0030) >> 4) + 1;
381 	      regno = op1 & 0x000f;
382 	      for (; i > 0; regno++, --i)
383 		{
384 		  cache->sp_offset += 4;
385 		  cache->saved_regs[regno] = cache->sp_offset;
386 		}
387 	      pc += 4;
388 	    }
389 	  else
390 	    break;
391 	}
392       else
393 	break;
394     }
395 
396   /* Check for spilling an argument register to the stack frame.
397      This could also be an initializing store from non-prologue code,
398      but I don't think there's any harm in skipping that.  */
399   while ((spill_size = h8300_is_argument_spill (gdbarch, pc)) > 0
400          && pc + spill_size <= current_pc)
401     pc += spill_size;
402 
403   return pc;
404 }
405 
406 static struct h8300_frame_cache *
h8300_frame_cache(struct frame_info * this_frame,void ** this_cache)407 h8300_frame_cache (struct frame_info *this_frame, void **this_cache)
408 {
409   struct gdbarch *gdbarch = get_frame_arch (this_frame);
410   struct h8300_frame_cache *cache;
411   int i;
412   CORE_ADDR current_pc;
413 
414   if (*this_cache)
415     return (struct h8300_frame_cache *) *this_cache;
416 
417   cache = FRAME_OBSTACK_ZALLOC (struct h8300_frame_cache);
418   h8300_init_frame_cache (gdbarch, cache);
419   *this_cache = cache;
420 
421   /* In principle, for normal frames, %fp holds the frame pointer,
422      which holds the base address for the current stack frame.
423      However, for functions that don't need it, the frame pointer is
424      optional.  For these "frameless" functions the frame pointer is
425      actually the frame pointer of the calling frame.  */
426 
427   cache->base = get_frame_register_unsigned (this_frame, E_FP_REGNUM);
428   if (cache->base == 0)
429     return cache;
430 
431   cache->saved_regs[E_PC_REGNUM] = -BINWORD (gdbarch);
432 
433   cache->pc = get_frame_func (this_frame);
434   current_pc = get_frame_pc (this_frame);
435   if (cache->pc != 0)
436     h8300_analyze_prologue (gdbarch, cache->pc, current_pc, cache);
437 
438   if (!cache->uses_fp)
439     {
440       /* We didn't find a valid frame, which means that CACHE->base
441          currently holds the frame pointer for our calling frame.  If
442          we're at the start of a function, or somewhere half-way its
443          prologue, the function's frame probably hasn't been fully
444          setup yet.  Try to reconstruct the base address for the stack
445          frame by looking at the stack pointer.  For truly "frameless"
446          functions this might work too.  */
447 
448       cache->base = get_frame_register_unsigned (this_frame, E_SP_REGNUM)
449 		    + cache->sp_offset;
450       cache->saved_sp = cache->base + BINWORD (gdbarch);
451       cache->saved_regs[E_PC_REGNUM] = 0;
452     }
453   else
454     {
455       cache->saved_sp = cache->base + 2 * BINWORD (gdbarch);
456       cache->saved_regs[E_PC_REGNUM] = -BINWORD (gdbarch);
457     }
458 
459   /* Adjust all the saved registers such that they contain addresses
460      instead of offsets.  */
461   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
462     if (cache->saved_regs[i] != -1)
463       cache->saved_regs[i] = cache->base - cache->saved_regs[i];
464 
465   return cache;
466 }
467 
468 static void
h8300_frame_this_id(struct frame_info * this_frame,void ** this_cache,struct frame_id * this_id)469 h8300_frame_this_id (struct frame_info *this_frame, void **this_cache,
470 		     struct frame_id *this_id)
471 {
472   struct h8300_frame_cache *cache =
473     h8300_frame_cache (this_frame, this_cache);
474 
475   /* This marks the outermost frame.  */
476   if (cache->base == 0)
477     return;
478 
479   *this_id = frame_id_build (cache->saved_sp, cache->pc);
480 }
481 
482 static struct value *
h8300_frame_prev_register(struct frame_info * this_frame,void ** this_cache,int regnum)483 h8300_frame_prev_register (struct frame_info *this_frame, void **this_cache,
484 			   int regnum)
485 {
486   struct gdbarch *gdbarch = get_frame_arch (this_frame);
487   struct h8300_frame_cache *cache =
488     h8300_frame_cache (this_frame, this_cache);
489 
490   gdb_assert (regnum >= 0);
491 
492   if (regnum == E_SP_REGNUM && cache->saved_sp)
493     return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
494 
495   if (regnum < gdbarch_num_regs (gdbarch)
496       && cache->saved_regs[regnum] != -1)
497     return frame_unwind_got_memory (this_frame, regnum,
498                                     cache->saved_regs[regnum]);
499 
500   return frame_unwind_got_register (this_frame, regnum, regnum);
501 }
502 
503 static const struct frame_unwind h8300_frame_unwind = {
504   NORMAL_FRAME,
505   default_frame_unwind_stop_reason,
506   h8300_frame_this_id,
507   h8300_frame_prev_register,
508   NULL,
509   default_frame_sniffer
510 };
511 
512 static CORE_ADDR
h8300_frame_base_address(struct frame_info * this_frame,void ** this_cache)513 h8300_frame_base_address (struct frame_info *this_frame, void **this_cache)
514 {
515   struct h8300_frame_cache *cache = h8300_frame_cache (this_frame, this_cache);
516   return cache->base;
517 }
518 
519 static const struct frame_base h8300_frame_base = {
520   &h8300_frame_unwind,
521   h8300_frame_base_address,
522   h8300_frame_base_address,
523   h8300_frame_base_address
524 };
525 
526 static CORE_ADDR
h8300_skip_prologue(struct gdbarch * gdbarch,CORE_ADDR pc)527 h8300_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
528 {
529   CORE_ADDR func_addr = 0 , func_end = 0;
530 
531   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
532     {
533       struct symtab_and_line sal;
534       struct h8300_frame_cache cache;
535 
536       /* Found a function.  */
537       sal = find_pc_line (func_addr, 0);
538       if (sal.end && sal.end < func_end)
539         /* Found a line number, use it as end of prologue.  */
540         return sal.end;
541 
542       /* No useable line symbol.  Use prologue parsing method.  */
543       h8300_init_frame_cache (gdbarch, &cache);
544       return h8300_analyze_prologue (gdbarch, func_addr, func_end, &cache);
545     }
546 
547   /* No function symbol -- just return the PC.  */
548   return (CORE_ADDR) pc;
549 }
550 
551 /* Function: push_dummy_call
552    Setup the function arguments for calling a function in the inferior.
553    In this discussion, a `word' is 16 bits on the H8/300s, and 32 bits
554    on the H8/300H.
555 
556    There are actually two ABI's here: -mquickcall (the default) and
557    -mno-quickcall.  With -mno-quickcall, all arguments are passed on
558    the stack after the return address, word-aligned.  With
559    -mquickcall, GCC tries to use r0 -- r2 to pass registers.  Since
560    GCC doesn't indicate in the object file which ABI was used to
561    compile it, GDB only supports the default --- -mquickcall.
562 
563    Here are the rules for -mquickcall, in detail:
564 
565    Each argument, whether scalar or aggregate, is padded to occupy a
566    whole number of words.  Arguments smaller than a word are padded at
567    the most significant end; those larger than a word are padded at
568    the least significant end.
569 
570    The initial arguments are passed in r0 -- r2.  Earlier arguments go in
571    lower-numbered registers.  Multi-word arguments are passed in
572    consecutive registers, with the most significant end in the
573    lower-numbered register.
574 
575    If an argument doesn't fit entirely in the remaining registers, it
576    is passed entirely on the stack.  Stack arguments begin just after
577    the return address.  Once an argument has overflowed onto the stack
578    this way, all subsequent arguments are passed on the stack.
579 
580    The above rule has odd consequences.  For example, on the h8/300s,
581    if a function takes two longs and an int as arguments:
582    - the first long will be passed in r0/r1,
583    - the second long will be passed entirely on the stack, since it
584      doesn't fit in r2,
585    - and the int will be passed on the stack, even though it could fit
586      in r2.
587 
588    A weird exception: if an argument is larger than a word, but not a
589    whole number of words in length (before padding), it is passed on
590    the stack following the rules for stack arguments above, even if
591    there are sufficient registers available to hold it.  Stranger
592    still, the argument registers are still `used up' --- even though
593    there's nothing in them.
594 
595    So, for example, on the h8/300s, if a function expects a three-byte
596    structure and an int, the structure will go on the stack, and the
597    int will go in r2, not r0.
598 
599    If the function returns an aggregate type (struct, union, or class)
600    by value, the caller must allocate space to hold the return value,
601    and pass the callee a pointer to this space as an invisible first
602    argument, in R0.
603 
604    For varargs functions, the last fixed argument and all the variable
605    arguments are always passed on the stack.  This means that calls to
606    varargs functions don't work properly unless there is a prototype
607    in scope.
608 
609    Basically, this ABI is not good, for the following reasons:
610    - You can't call vararg functions properly unless a prototype is in scope.
611    - Structure passing is inconsistent, to no purpose I can see.
612    - It often wastes argument registers, of which there are only three
613      to begin with.  */
614 
615 static CORE_ADDR
h8300_push_dummy_call(struct gdbarch * gdbarch,struct value * function,struct regcache * regcache,CORE_ADDR bp_addr,int nargs,struct value ** args,CORE_ADDR sp,function_call_return_method return_method,CORE_ADDR struct_addr)616 h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
617 		       struct regcache *regcache, CORE_ADDR bp_addr,
618 		       int nargs, struct value **args, CORE_ADDR sp,
619 		       function_call_return_method return_method,
620 		       CORE_ADDR struct_addr)
621 {
622   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
623   int stack_alloc = 0, stack_offset = 0;
624   int wordsize = BINWORD (gdbarch);
625   int reg = E_ARG0_REGNUM;
626   int argument;
627 
628   /* First, make sure the stack is properly aligned.  */
629   sp = align_down (sp, wordsize);
630 
631   /* Now make sure there's space on the stack for the arguments.  We
632      may over-allocate a little here, but that won't hurt anything.  */
633   for (argument = 0; argument < nargs; argument++)
634     stack_alloc += align_up (TYPE_LENGTH (value_type (args[argument])),
635 			     wordsize);
636   sp -= stack_alloc;
637 
638   /* Now load as many arguments as possible into registers, and push
639      the rest onto the stack.
640      If we're returning a structure by value, then we must pass a
641      pointer to the buffer for the return value as an invisible first
642      argument.  */
643   if (return_method == return_method_struct)
644     regcache_cooked_write_unsigned (regcache, reg++, struct_addr);
645 
646   for (argument = 0; argument < nargs; argument++)
647     {
648       struct type *type = value_type (args[argument]);
649       int len = TYPE_LENGTH (type);
650       char *contents = (char *) value_contents (args[argument]);
651 
652       /* Pad the argument appropriately.  */
653       int padded_len = align_up (len, wordsize);
654       /* Use std::vector here to get zero initialization.  */
655       std::vector<gdb_byte> padded (padded_len);
656 
657       memcpy ((len < wordsize ? padded.data () + padded_len - len
658 	       : padded.data ()),
659 	      contents, len);
660 
661       /* Could the argument fit in the remaining registers?  */
662       if (padded_len <= (E_ARGLAST_REGNUM - reg + 1) * wordsize)
663 	{
664 	  /* Are we going to pass it on the stack anyway, for no good
665 	     reason?  */
666 	  if (len > wordsize && len % wordsize)
667 	    {
668 	      /* I feel so unclean.  */
669 	      write_memory (sp + stack_offset, padded.data (), padded_len);
670 	      stack_offset += padded_len;
671 
672 	      /* That's right --- even though we passed the argument
673 	         on the stack, we consume the registers anyway!  Love
674 	         me, love my dog.  */
675 	      reg += padded_len / wordsize;
676 	    }
677 	  else
678 	    {
679 	      /* Heavens to Betsy --- it's really going in registers!
680 	         Note that on the h8/300s, there are gaps between the
681 	         registers in the register file.  */
682 	      int offset;
683 
684 	      for (offset = 0; offset < padded_len; offset += wordsize)
685 		{
686 		  ULONGEST word
687 		    = extract_unsigned_integer (&padded[offset],
688 						wordsize, byte_order);
689 		  regcache_cooked_write_unsigned (regcache, reg++, word);
690 		}
691 	    }
692 	}
693       else
694 	{
695 	  /* It doesn't fit in registers!  Onto the stack it goes.  */
696 	  write_memory (sp + stack_offset, padded.data (), padded_len);
697 	  stack_offset += padded_len;
698 
699 	  /* Once one argument has spilled onto the stack, all
700 	     subsequent arguments go on the stack.  */
701 	  reg = E_ARGLAST_REGNUM + 1;
702 	}
703     }
704 
705   /* Store return address.  */
706   sp -= wordsize;
707   write_memory_unsigned_integer (sp, wordsize, byte_order, bp_addr);
708 
709   /* Update stack pointer.  */
710   regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, sp);
711 
712   /* Return the new stack pointer minus the return address slot since
713      that's what DWARF2/GCC uses as the frame's CFA.  */
714   return sp + wordsize;
715 }
716 
717 /* Function: extract_return_value
718    Figure out where in REGBUF the called function has left its return value.
719    Copy that into VALBUF.  Be sure to account for CPU type.   */
720 
721 static void
h8300_extract_return_value(struct type * type,struct regcache * regcache,gdb_byte * valbuf)722 h8300_extract_return_value (struct type *type, struct regcache *regcache,
723 			    gdb_byte *valbuf)
724 {
725   struct gdbarch *gdbarch = regcache->arch ();
726   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
727   int len = TYPE_LENGTH (type);
728   ULONGEST c, addr;
729 
730   switch (len)
731     {
732     case 1:
733     case 2:
734       regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &c);
735       store_unsigned_integer (valbuf, len, byte_order, c);
736       break;
737     case 4:			/* Needs two registers on plain H8/300 */
738       regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &c);
739       store_unsigned_integer (valbuf, 2, byte_order, c);
740       regcache_cooked_read_unsigned (regcache, E_RET1_REGNUM, &c);
741       store_unsigned_integer (valbuf + 2, 2, byte_order, c);
742       break;
743     case 8:			/* long long is now 8 bytes.  */
744       if (type->code () == TYPE_CODE_INT)
745 	{
746 	  regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &addr);
747 	  c = read_memory_unsigned_integer ((CORE_ADDR) addr, len, byte_order);
748 	  store_unsigned_integer (valbuf, len, byte_order, c);
749 	}
750       else
751 	{
752 	  error (_("I don't know how this 8 byte value is returned."));
753 	}
754       break;
755     }
756 }
757 
758 static void
h8300h_extract_return_value(struct type * type,struct regcache * regcache,gdb_byte * valbuf)759 h8300h_extract_return_value (struct type *type, struct regcache *regcache,
760 			     gdb_byte *valbuf)
761 {
762   struct gdbarch *gdbarch = regcache->arch ();
763   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
764   ULONGEST c;
765 
766   switch (TYPE_LENGTH (type))
767     {
768     case 1:
769     case 2:
770     case 4:
771       regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &c);
772       store_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order, c);
773       break;
774     case 8:			/* long long is now 8 bytes.  */
775       if (type->code () == TYPE_CODE_INT)
776 	{
777 	  regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &c);
778 	  store_unsigned_integer (valbuf, 4, byte_order, c);
779 	  regcache_cooked_read_unsigned (regcache, E_RET1_REGNUM, &c);
780 	  store_unsigned_integer (valbuf + 4, 4, byte_order, c);
781 	}
782       else
783 	{
784 	  error (_("I don't know how this 8 byte value is returned."));
785 	}
786       break;
787     }
788 }
789 
790 static int
h8300_use_struct_convention(struct type * value_type)791 h8300_use_struct_convention (struct type *value_type)
792 {
793   /* Types of 1, 2 or 4 bytes are returned in R0/R1, everything else on the
794      stack.  */
795 
796   if (value_type->code () == TYPE_CODE_STRUCT
797       || value_type->code () == TYPE_CODE_UNION)
798     return 1;
799   return !(TYPE_LENGTH (value_type) == 1
800 	   || TYPE_LENGTH (value_type) == 2
801 	   || TYPE_LENGTH (value_type) == 4);
802 }
803 
804 static int
h8300h_use_struct_convention(struct type * value_type)805 h8300h_use_struct_convention (struct type *value_type)
806 {
807   /* Types of 1, 2 or 4 bytes are returned in R0, INT types of 8 bytes are
808      returned in R0/R1, everything else on the stack.  */
809   if (value_type->code () == TYPE_CODE_STRUCT
810       || value_type->code () == TYPE_CODE_UNION)
811     return 1;
812   return !(TYPE_LENGTH (value_type) == 1
813 	   || TYPE_LENGTH (value_type) == 2
814 	   || TYPE_LENGTH (value_type) == 4
815 	   || (TYPE_LENGTH (value_type) == 8
816 	       && value_type->code () == TYPE_CODE_INT));
817 }
818 
819 /* Function: store_return_value
820    Place the appropriate value in the appropriate registers.
821    Primarily used by the RETURN command.  */
822 
823 static void
h8300_store_return_value(struct type * type,struct regcache * regcache,const gdb_byte * valbuf)824 h8300_store_return_value (struct type *type, struct regcache *regcache,
825 			  const gdb_byte *valbuf)
826 {
827   struct gdbarch *gdbarch = regcache->arch ();
828   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
829   ULONGEST val;
830 
831   switch (TYPE_LENGTH (type))
832     {
833     case 1:
834     case 2:			/* short...  */
835       val = extract_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order);
836       regcache_cooked_write_unsigned (regcache, E_RET0_REGNUM, val);
837       break;
838     case 4:			/* long, float */
839       val = extract_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order);
840       regcache_cooked_write_unsigned (regcache, E_RET0_REGNUM,
841 				      (val >> 16) & 0xffff);
842       regcache_cooked_write_unsigned (regcache, E_RET1_REGNUM, val & 0xffff);
843       break;
844     case 8:			/* long long, double and long double
845 				   are all defined as 4 byte types so
846 				   far so this shouldn't happen.  */
847       error (_("I don't know how to return an 8 byte value."));
848       break;
849     }
850 }
851 
852 static void
h8300h_store_return_value(struct type * type,struct regcache * regcache,const gdb_byte * valbuf)853 h8300h_store_return_value (struct type *type, struct regcache *regcache,
854 			   const gdb_byte *valbuf)
855 {
856   struct gdbarch *gdbarch = regcache->arch ();
857   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
858   ULONGEST val;
859 
860   switch (TYPE_LENGTH (type))
861     {
862     case 1:
863     case 2:
864     case 4:			/* long, float */
865       val = extract_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order);
866       regcache_cooked_write_unsigned (regcache, E_RET0_REGNUM, val);
867       break;
868     case 8:
869       val = extract_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order);
870       regcache_cooked_write_unsigned (regcache, E_RET0_REGNUM,
871 				      (val >> 32) & 0xffffffff);
872       regcache_cooked_write_unsigned (regcache, E_RET1_REGNUM,
873 				      val & 0xffffffff);
874       break;
875     }
876 }
877 
878 static enum return_value_convention
h8300_return_value(struct gdbarch * gdbarch,struct value * function,struct type * type,struct regcache * regcache,gdb_byte * readbuf,const gdb_byte * writebuf)879 h8300_return_value (struct gdbarch *gdbarch, struct value *function,
880 		    struct type *type, struct regcache *regcache,
881 		    gdb_byte *readbuf, const gdb_byte *writebuf)
882 {
883   if (h8300_use_struct_convention (type))
884     return RETURN_VALUE_STRUCT_CONVENTION;
885   if (writebuf)
886     h8300_store_return_value (type, regcache, writebuf);
887   else if (readbuf)
888     h8300_extract_return_value (type, regcache, readbuf);
889   return RETURN_VALUE_REGISTER_CONVENTION;
890 }
891 
892 static enum return_value_convention
h8300h_return_value(struct gdbarch * gdbarch,struct value * function,struct type * type,struct regcache * regcache,gdb_byte * readbuf,const gdb_byte * writebuf)893 h8300h_return_value (struct gdbarch *gdbarch, struct value *function,
894 		     struct type *type, struct regcache *regcache,
895 		     gdb_byte *readbuf, const gdb_byte *writebuf)
896 {
897   if (h8300h_use_struct_convention (type))
898     {
899       if (readbuf)
900 	{
901 	  ULONGEST addr;
902 
903 	  regcache_raw_read_unsigned (regcache, E_R0_REGNUM, &addr);
904 	  read_memory (addr, readbuf, TYPE_LENGTH (type));
905 	}
906 
907       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
908     }
909   if (writebuf)
910     h8300h_store_return_value (type, regcache, writebuf);
911   else if (readbuf)
912     h8300h_extract_return_value (type, regcache, readbuf);
913   return RETURN_VALUE_REGISTER_CONVENTION;
914 }
915 
916 /* Implementation of 'register_sim_regno' gdbarch method.  */
917 
918 static int
h8300_register_sim_regno(struct gdbarch * gdbarch,int regnum)919 h8300_register_sim_regno (struct gdbarch *gdbarch, int regnum)
920 {
921   /* Only makes sense to supply raw registers.  */
922   gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
923 
924   /* We hide the raw ccr from the user by making it nameless.  Because
925      the default register_sim_regno hook returns
926      LEGACY_SIM_REGNO_IGNORE for unnamed registers, we need to
927      override it.  The sim register numbering is compatible with
928      gdb's.  */
929   return regnum;
930 }
931 
932 static const char *
h8300_register_name_common(const char * regnames[],int numregs,struct gdbarch * gdbarch,int regno)933 h8300_register_name_common (const char *regnames[], int numregs,
934 			    struct gdbarch *gdbarch, int regno)
935 {
936   if (regno < 0
937       || regno >= numregs)
938     internal_error (__FILE__, __LINE__,
939 		    _("h8300_register_name_common: illegal register number %d"),
940 		    regno);
941   else
942     return regnames[regno];
943 }
944 
945 static const char *
h8300_register_name(struct gdbarch * gdbarch,int regno)946 h8300_register_name (struct gdbarch *gdbarch, int regno)
947 {
948   /* The register names change depending on which h8300 processor
949      type is selected.  */
950   static const char *register_names[] = {
951     "r0", "r1", "r2", "r3", "r4", "r5", "r6",
952     "sp", "", "pc", "cycles", "tick", "inst",
953     "ccr",			/* pseudo register */
954   };
955   return h8300_register_name_common(register_names, ARRAY_SIZE(register_names),
956 				    gdbarch, regno);
957 }
958 
959 static const char *
h8300h_register_name(struct gdbarch * gdbarch,int regno)960 h8300h_register_name (struct gdbarch *gdbarch, int regno)
961 {
962   static const char *register_names[] = {
963     "er0", "er1", "er2", "er3", "er4", "er5", "er6",
964     "sp", "", "pc", "cycles", "tick", "inst",
965     "ccr",			/* pseudo register */
966   };
967   return h8300_register_name_common(register_names, ARRAY_SIZE(register_names),
968 				    gdbarch, regno);
969 }
970 
971 static const char *
h8300s_register_name(struct gdbarch * gdbarch,int regno)972 h8300s_register_name (struct gdbarch *gdbarch, int regno)
973 {
974   static const char *register_names[] = {
975     "er0", "er1", "er2", "er3", "er4", "er5", "er6",
976     "sp", "", "pc", "cycles", "", "tick", "inst",
977     "mach", "macl",
978     "ccr", "exr"		/* pseudo registers */
979   };
980   return h8300_register_name_common(register_names, ARRAY_SIZE(register_names),
981 				    gdbarch, regno);
982 }
983 
984 static const char *
h8300sx_register_name(struct gdbarch * gdbarch,int regno)985 h8300sx_register_name (struct gdbarch *gdbarch, int regno)
986 {
987   static const char *register_names[] = {
988     "er0", "er1", "er2", "er3", "er4", "er5", "er6",
989     "sp", "", "pc", "cycles", "", "tick", "inst",
990     "mach", "macl", "sbr", "vbr",
991     "ccr", "exr"		/* pseudo registers */
992   };
993   return h8300_register_name_common(register_names, ARRAY_SIZE(register_names),
994 				    gdbarch, regno);
995 }
996 
997 static void
h8300_print_register(struct gdbarch * gdbarch,struct ui_file * file,struct frame_info * frame,int regno)998 h8300_print_register (struct gdbarch *gdbarch, struct ui_file *file,
999 		      struct frame_info *frame, int regno)
1000 {
1001   LONGEST rval;
1002   const char *name = gdbarch_register_name (gdbarch, regno);
1003 
1004   if (!name || !*name)
1005     return;
1006 
1007   rval = get_frame_register_signed (frame, regno);
1008 
1009   fprintf_filtered (file, "%-14s ", name);
1010   if ((regno == E_PSEUDO_CCR_REGNUM (gdbarch)) || \
1011       (regno == E_PSEUDO_EXR_REGNUM (gdbarch) && is_h8300smode (gdbarch)))
1012     {
1013       fprintf_filtered (file, "0x%02x        ", (unsigned char) rval);
1014       print_longest (file, 'u', 1, rval);
1015     }
1016   else
1017     {
1018       fprintf_filtered (file, "0x%s  ", phex ((ULONGEST) rval,
1019 			BINWORD (gdbarch)));
1020       print_longest (file, 'd', 1, rval);
1021     }
1022   if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
1023     {
1024       /* CCR register */
1025       int C, Z, N, V;
1026       unsigned char l = rval & 0xff;
1027       fprintf_filtered (file, "\t");
1028       fprintf_filtered (file, "I-%d ", (l & 0x80) != 0);
1029       fprintf_filtered (file, "UI-%d ", (l & 0x40) != 0);
1030       fprintf_filtered (file, "H-%d ", (l & 0x20) != 0);
1031       fprintf_filtered (file, "U-%d ", (l & 0x10) != 0);
1032       N = (l & 0x8) != 0;
1033       Z = (l & 0x4) != 0;
1034       V = (l & 0x2) != 0;
1035       C = (l & 0x1) != 0;
1036       fprintf_filtered (file, "N-%d ", N);
1037       fprintf_filtered (file, "Z-%d ", Z);
1038       fprintf_filtered (file, "V-%d ", V);
1039       fprintf_filtered (file, "C-%d ", C);
1040       if ((C | Z) == 0)
1041 	fprintf_filtered (file, "u> ");
1042       if ((C | Z) == 1)
1043 	fprintf_filtered (file, "u<= ");
1044       if (C == 0)
1045 	fprintf_filtered (file, "u>= ");
1046       if (C == 1)
1047 	fprintf_filtered (file, "u< ");
1048       if (Z == 0)
1049 	fprintf_filtered (file, "!= ");
1050       if (Z == 1)
1051 	fprintf_filtered (file, "== ");
1052       if ((N ^ V) == 0)
1053 	fprintf_filtered (file, ">= ");
1054       if ((N ^ V) == 1)
1055 	fprintf_filtered (file, "< ");
1056       if ((Z | (N ^ V)) == 0)
1057 	fprintf_filtered (file, "> ");
1058       if ((Z | (N ^ V)) == 1)
1059 	fprintf_filtered (file, "<= ");
1060     }
1061   else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch) && is_h8300smode (gdbarch))
1062     {
1063       /* EXR register */
1064       unsigned char l = rval & 0xff;
1065       fprintf_filtered (file, "\t");
1066       fprintf_filtered (file, "T-%d - - - ", (l & 0x80) != 0);
1067       fprintf_filtered (file, "I2-%d ", (l & 4) != 0);
1068       fprintf_filtered (file, "I1-%d ", (l & 2) != 0);
1069       fprintf_filtered (file, "I0-%d", (l & 1) != 0);
1070     }
1071   fprintf_filtered (file, "\n");
1072 }
1073 
1074 static void
h8300_print_registers_info(struct gdbarch * gdbarch,struct ui_file * file,struct frame_info * frame,int regno,int cpregs)1075 h8300_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
1076 			    struct frame_info *frame, int regno, int cpregs)
1077 {
1078   if (regno < 0)
1079     {
1080       for (regno = E_R0_REGNUM; regno <= E_SP_REGNUM; ++regno)
1081 	h8300_print_register (gdbarch, file, frame, regno);
1082       h8300_print_register (gdbarch, file, frame,
1083 			    E_PSEUDO_CCR_REGNUM (gdbarch));
1084       h8300_print_register (gdbarch, file, frame, E_PC_REGNUM);
1085       if (is_h8300smode (gdbarch))
1086 	{
1087 	  h8300_print_register (gdbarch, file, frame,
1088 				E_PSEUDO_EXR_REGNUM (gdbarch));
1089 	  if (is_h8300sxmode (gdbarch))
1090 	    {
1091 	      h8300_print_register (gdbarch, file, frame, E_SBR_REGNUM);
1092 	      h8300_print_register (gdbarch, file, frame, E_VBR_REGNUM);
1093 	    }
1094 	  h8300_print_register (gdbarch, file, frame, E_MACH_REGNUM);
1095 	  h8300_print_register (gdbarch, file, frame, E_MACL_REGNUM);
1096 	  h8300_print_register (gdbarch, file, frame, E_CYCLES_REGNUM);
1097 	  h8300_print_register (gdbarch, file, frame, E_TICKS_REGNUM);
1098 	  h8300_print_register (gdbarch, file, frame, E_INSTS_REGNUM);
1099 	}
1100       else
1101 	{
1102 	  h8300_print_register (gdbarch, file, frame, E_CYCLES_REGNUM);
1103 	  h8300_print_register (gdbarch, file, frame, E_TICK_REGNUM);
1104 	  h8300_print_register (gdbarch, file, frame, E_INST_REGNUM);
1105 	}
1106     }
1107   else
1108     {
1109       if (regno == E_CCR_REGNUM)
1110 	h8300_print_register (gdbarch, file, frame,
1111 			      E_PSEUDO_CCR_REGNUM (gdbarch));
1112       else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch)
1113 	       && is_h8300smode (gdbarch))
1114 	h8300_print_register (gdbarch, file, frame,
1115 			      E_PSEUDO_EXR_REGNUM (gdbarch));
1116       else
1117 	h8300_print_register (gdbarch, file, frame, regno);
1118     }
1119 }
1120 
1121 static struct type *
h8300_register_type(struct gdbarch * gdbarch,int regno)1122 h8300_register_type (struct gdbarch *gdbarch, int regno)
1123 {
1124   if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
1125     internal_error (__FILE__, __LINE__,
1126 		    _("h8300_register_type: illegal register number %d"),
1127 		    regno);
1128   else
1129     {
1130       switch (regno)
1131 	{
1132 	case E_PC_REGNUM:
1133 	  return builtin_type (gdbarch)->builtin_func_ptr;
1134 	case E_SP_REGNUM:
1135 	case E_FP_REGNUM:
1136 	  return builtin_type (gdbarch)->builtin_data_ptr;
1137 	default:
1138 	  if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
1139 	    return builtin_type (gdbarch)->builtin_uint8;
1140 	  else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch))
1141 	    return builtin_type (gdbarch)->builtin_uint8;
1142 	  else if (is_h8300hmode (gdbarch))
1143 	    return builtin_type (gdbarch)->builtin_int32;
1144 	  else
1145 	    return builtin_type (gdbarch)->builtin_int16;
1146 	}
1147     }
1148 }
1149 
1150 /* Helpers for h8300_pseudo_register_read.  We expose ccr/exr as
1151    pseudo-registers to users with smaller sizes than the corresponding
1152    raw registers.  These helpers extend/narrow the values.  */
1153 
1154 static enum register_status
pseudo_from_raw_register(struct gdbarch * gdbarch,readable_regcache * regcache,gdb_byte * buf,int pseudo_regno,int raw_regno)1155 pseudo_from_raw_register (struct gdbarch *gdbarch, readable_regcache *regcache,
1156 			  gdb_byte *buf, int pseudo_regno, int raw_regno)
1157 {
1158   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1159   enum register_status status;
1160   ULONGEST val;
1161 
1162   status = regcache->raw_read (raw_regno, &val);
1163   if (status == REG_VALID)
1164     store_unsigned_integer (buf,
1165 			    register_size (gdbarch, pseudo_regno),
1166 			    byte_order, val);
1167   return status;
1168 }
1169 
1170 /* See pseudo_from_raw_register.  */
1171 
1172 static void
raw_from_pseudo_register(struct gdbarch * gdbarch,struct regcache * regcache,const gdb_byte * buf,int raw_regno,int pseudo_regno)1173 raw_from_pseudo_register (struct gdbarch *gdbarch, struct regcache *regcache,
1174 			  const gdb_byte *buf, int raw_regno, int pseudo_regno)
1175 {
1176   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1177   ULONGEST val;
1178 
1179   val = extract_unsigned_integer (buf, register_size (gdbarch, pseudo_regno),
1180 				  byte_order);
1181   regcache_raw_write_unsigned (regcache, raw_regno, val);
1182 }
1183 
1184 static enum register_status
h8300_pseudo_register_read(struct gdbarch * gdbarch,readable_regcache * regcache,int regno,gdb_byte * buf)1185 h8300_pseudo_register_read (struct gdbarch *gdbarch,
1186 			    readable_regcache *regcache, int regno,
1187 			    gdb_byte *buf)
1188 {
1189   if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
1190     {
1191       return pseudo_from_raw_register (gdbarch, regcache, buf,
1192 				       regno, E_CCR_REGNUM);
1193     }
1194   else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch))
1195     {
1196       return pseudo_from_raw_register (gdbarch, regcache, buf,
1197 				       regno, E_EXR_REGNUM);
1198     }
1199   else
1200     return regcache->raw_read (regno, buf);
1201 }
1202 
1203 static void
h8300_pseudo_register_write(struct gdbarch * gdbarch,struct regcache * regcache,int regno,const gdb_byte * buf)1204 h8300_pseudo_register_write (struct gdbarch *gdbarch,
1205 			     struct regcache *regcache, int regno,
1206 			     const gdb_byte *buf)
1207 {
1208   if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
1209     raw_from_pseudo_register (gdbarch, regcache, buf, E_CCR_REGNUM, regno);
1210   else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch))
1211     raw_from_pseudo_register (gdbarch, regcache, buf, E_EXR_REGNUM, regno);
1212   else
1213     regcache->raw_write (regno, buf);
1214 }
1215 
1216 static int
h8300_dbg_reg_to_regnum(struct gdbarch * gdbarch,int regno)1217 h8300_dbg_reg_to_regnum (struct gdbarch *gdbarch, int regno)
1218 {
1219   if (regno == E_CCR_REGNUM)
1220     return E_PSEUDO_CCR_REGNUM (gdbarch);
1221   return regno;
1222 }
1223 
1224 static int
h8300s_dbg_reg_to_regnum(struct gdbarch * gdbarch,int regno)1225 h8300s_dbg_reg_to_regnum (struct gdbarch *gdbarch, int regno)
1226 {
1227   if (regno == E_CCR_REGNUM)
1228     return E_PSEUDO_CCR_REGNUM (gdbarch);
1229   if (regno == E_EXR_REGNUM)
1230     return E_PSEUDO_EXR_REGNUM (gdbarch);
1231   return regno;
1232 }
1233 
1234 /*static unsigned char breakpoint[] = { 0x7A, 0xFF }; *//* ??? */
1235 constexpr gdb_byte h8300_break_insn[] = { 0x01, 0x80 };	/* Sleep */
1236 
1237 typedef BP_MANIPULATION (h8300_break_insn) h8300_breakpoint;
1238 
1239 static struct gdbarch *
h8300_gdbarch_init(struct gdbarch_info info,struct gdbarch_list * arches)1240 h8300_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1241 {
1242   struct gdbarch *gdbarch;
1243 
1244   arches = gdbarch_list_lookup_by_info (arches, &info);
1245   if (arches != NULL)
1246     return arches->gdbarch;
1247 
1248   if (info.bfd_arch_info->arch != bfd_arch_h8300)
1249     return NULL;
1250 
1251   gdbarch = gdbarch_alloc (&info, 0);
1252 
1253   set_gdbarch_register_sim_regno (gdbarch, h8300_register_sim_regno);
1254 
1255   switch (info.bfd_arch_info->mach)
1256     {
1257     case bfd_mach_h8300:
1258       set_gdbarch_num_regs (gdbarch, 13);
1259       set_gdbarch_num_pseudo_regs (gdbarch, 1);
1260       set_gdbarch_dwarf2_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
1261       set_gdbarch_stab_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
1262       set_gdbarch_register_name (gdbarch, h8300_register_name);
1263       set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1264       set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1265       set_gdbarch_return_value (gdbarch, h8300_return_value);
1266       break;
1267     case bfd_mach_h8300h:
1268     case bfd_mach_h8300hn:
1269       set_gdbarch_num_regs (gdbarch, 13);
1270       set_gdbarch_num_pseudo_regs (gdbarch, 1);
1271       set_gdbarch_dwarf2_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
1272       set_gdbarch_stab_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
1273       set_gdbarch_register_name (gdbarch, h8300h_register_name);
1274       if (info.bfd_arch_info->mach != bfd_mach_h8300hn)
1275 	{
1276 	  set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1277 	  set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1278 	}
1279       else
1280 	{
1281 	  set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1282 	  set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1283 	}
1284       set_gdbarch_return_value (gdbarch, h8300h_return_value);
1285       break;
1286     case bfd_mach_h8300s:
1287     case bfd_mach_h8300sn:
1288       set_gdbarch_num_regs (gdbarch, 16);
1289       set_gdbarch_num_pseudo_regs (gdbarch, 2);
1290       set_gdbarch_dwarf2_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
1291       set_gdbarch_stab_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
1292       set_gdbarch_register_name (gdbarch, h8300s_register_name);
1293       if (info.bfd_arch_info->mach != bfd_mach_h8300sn)
1294 	{
1295 	  set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1296 	  set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1297 	}
1298       else
1299 	{
1300 	  set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1301 	  set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1302 	}
1303       set_gdbarch_return_value (gdbarch, h8300h_return_value);
1304       break;
1305     case bfd_mach_h8300sx:
1306     case bfd_mach_h8300sxn:
1307       set_gdbarch_num_regs (gdbarch, 18);
1308       set_gdbarch_num_pseudo_regs (gdbarch, 2);
1309       set_gdbarch_dwarf2_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
1310       set_gdbarch_stab_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
1311       set_gdbarch_register_name (gdbarch, h8300sx_register_name);
1312       if (info.bfd_arch_info->mach != bfd_mach_h8300sxn)
1313 	{
1314 	  set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1315 	  set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1316 	}
1317       else
1318 	{
1319 	  set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1320 	  set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1321 	}
1322       set_gdbarch_return_value (gdbarch, h8300h_return_value);
1323       break;
1324     }
1325 
1326   set_gdbarch_pseudo_register_read (gdbarch, h8300_pseudo_register_read);
1327   set_gdbarch_pseudo_register_write (gdbarch, h8300_pseudo_register_write);
1328 
1329   /*
1330    * Basic register fields and methods.
1331    */
1332 
1333   set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
1334   set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1335   set_gdbarch_register_type (gdbarch, h8300_register_type);
1336   set_gdbarch_print_registers_info (gdbarch, h8300_print_registers_info);
1337 
1338   /*
1339    * Frame Info
1340    */
1341   set_gdbarch_skip_prologue (gdbarch, h8300_skip_prologue);
1342 
1343   /* Frame unwinder.  */
1344   frame_base_set_default (gdbarch, &h8300_frame_base);
1345 
1346   /*
1347    * Miscellany
1348    */
1349   /* Stack grows up.  */
1350   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1351 
1352   set_gdbarch_breakpoint_kind_from_pc (gdbarch,
1353 				       h8300_breakpoint::kind_from_pc);
1354   set_gdbarch_sw_breakpoint_from_kind (gdbarch,
1355 				       h8300_breakpoint::bp_from_kind);
1356   set_gdbarch_push_dummy_call (gdbarch, h8300_push_dummy_call);
1357 
1358   set_gdbarch_char_signed (gdbarch, 0);
1359   set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1360   set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1361   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1362 
1363   set_gdbarch_wchar_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1364   set_gdbarch_wchar_signed (gdbarch, 0);
1365 
1366   set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1367   set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
1368   set_gdbarch_long_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1369   set_gdbarch_long_double_format (gdbarch, floatformats_ieee_single);
1370 
1371   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
1372 
1373   /* Hook in the DWARF CFI frame unwinder.  */
1374   dwarf2_append_unwinders (gdbarch);
1375   frame_unwind_append_unwinder (gdbarch, &h8300_frame_unwind);
1376 
1377   return gdbarch;
1378 
1379 }
1380 
1381 void _initialize_h8300_tdep ();
1382 void
_initialize_h8300_tdep()1383 _initialize_h8300_tdep ()
1384 {
1385   register_gdbarch_init (bfd_arch_h8300, h8300_gdbarch_init);
1386 }
1387 
1388 static int
is_h8300hmode(struct gdbarch * gdbarch)1389 is_h8300hmode (struct gdbarch *gdbarch)
1390 {
1391   return gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sx
1392     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sxn
1393     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300s
1394     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sn
1395     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300h
1396     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300hn;
1397 }
1398 
1399 static int
is_h8300smode(struct gdbarch * gdbarch)1400 is_h8300smode (struct gdbarch *gdbarch)
1401 {
1402   return gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sx
1403     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sxn
1404     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300s
1405     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sn;
1406 }
1407 
1408 static int
is_h8300sxmode(struct gdbarch * gdbarch)1409 is_h8300sxmode (struct gdbarch *gdbarch)
1410 {
1411   return gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sx
1412     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sxn;
1413 }
1414 
1415 static int
is_h8300_normal_mode(struct gdbarch * gdbarch)1416 is_h8300_normal_mode (struct gdbarch *gdbarch)
1417 {
1418   return gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sxn
1419     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300sn
1420     || gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_h8300hn;
1421 }
1422