2003-06-04 Michael Snyder <msnyder@redhat.com>
[platform/upstream/binutils.git] / gdb / h8300-tdep.c
1 /* Target-machine dependent code for Hitachi H8/300, for GDB.
2
3    Copyright 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
4    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 /*
24    Contributed by Steve Chamberlain
25    sac@cygnus.com
26  */
27
28 #include "defs.h"
29 #include "value.h"
30 #include "inferior.h"
31 #include "symfile.h"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "gdbcore.h"
35 #include "objfiles.h"
36 #include "gdbcmd.h"
37 #include "gdb_assert.h"
38
39 /* Extra info which is saved in each frame_info. */
40 struct frame_extra_info
41 {
42   CORE_ADDR from_pc;
43   CORE_ADDR args_pointer;
44   CORE_ADDR locals_pointer;
45 };
46
47 #define E_NUM_REGS (h8300smode ? 14 : 13)
48
49 enum
50 {
51   h8300_reg_size = 2,
52   h8300h_reg_size = 4,
53   h8300_max_reg_size = 4,
54 };
55 #define BINWORD (h8300hmode ? h8300h_reg_size : h8300_reg_size)
56
57 enum gdb_regnum
58 {
59   E_R0_REGNUM, E_ER0_REGNUM = E_R0_REGNUM, E_ARG0_REGNUM = E_R0_REGNUM,
60   E_R1_REGNUM, E_ER1_REGNUM = E_R1_REGNUM,
61   E_R2_REGNUM, E_ER2_REGNUM = E_R2_REGNUM, E_ARGLAST_REGNUM = E_R2_REGNUM,
62   E_R3_REGNUM, E_ER3_REGNUM = E_R3_REGNUM,
63   E_R4_REGNUM, E_ER4_REGNUM = E_R4_REGNUM,
64   E_R5_REGNUM, E_ER5_REGNUM = E_R5_REGNUM,
65   E_R6_REGNUM, E_ER6_REGNUM = E_R6_REGNUM, E_FP_REGNUM = E_R6_REGNUM,
66   E_SP_REGNUM,
67   E_CCR_REGNUM,
68   E_PC_REGNUM,
69   E_CYCLES_REGNUM,
70   E_TICK_REGNUM, E_EXR_REGNUM = E_TICK_REGNUM,
71   E_INST_REGNUM, E_TICKS_REGNUM = E_INST_REGNUM,
72   E_INSTS_REGNUM
73 };
74
75 #define UNSIGNED_SHORT(X) ((X) & 0xffff)
76
77 #define IS_PUSH(x) ((x & 0xfff0)==0x6df0)
78 #define IS_PUSH_FP(x) (x == 0x6df6)
79 #define IS_MOVE_FP(x) (x == 0x0d76 || x == 0x0ff6)
80 #define IS_MOV_SP_FP(x) (x == 0x0d76 || x == 0x0ff6)
81 #define IS_SUB2_SP(x) (x==0x1b87)
82 #define IS_SUB4_SP(x) (x==0x1b97)
83 #define IS_SUBL_SP(x) (x==0x7a37)
84 #define IS_MOVK_R5(x) (x==0x7905)
85 #define IS_SUB_R5SP(x) (x==0x1957)
86
87 /* If the instruction at PC is an argument register spill, return its
88    length.  Otherwise, return zero.
89
90    An argument register spill is an instruction that moves an argument
91    from the register in which it was passed to the stack slot in which
92    it really lives.  It is a byte, word, or longword move from an
93    argument register to a negative offset from the frame pointer.  */
94
95 static int
96 h8300_is_argument_spill (CORE_ADDR pc)
97 {
98   int w = read_memory_unsigned_integer (pc, 2);
99
100   if ((w & 0xfff0) == 0x6ee0                  /* mov.b Rs,@(d:16,er6) */
101       && 8 <= (w & 0xf) && (w & 0xf) <= 10)   /* Rs is R0L, R1L, or R2L  */
102     {
103       int w2 = read_memory_integer (pc + 2, 2);
104
105       /* ... and d:16 is negative.  */
106       if (w2 < 0)
107         return 4;
108     }
109   else if (w == 0x7860)
110     {
111       int w2 = read_memory_integer (pc + 2, 2);
112
113       if ((w2 & 0xfff0) == 0x6aa0)              /* mov.b Rs, @(d:24,er6) */
114         {
115           LONGEST disp = read_memory_integer (pc + 4, 4);
116
117           /* ... and d:24 is negative.  */
118           if (disp < 0 && disp > 0xffffff)
119             return 8;
120         }
121     }
122   else if ((w & 0xfff0) == 0x6fe0             /* mov.w Rs,@(d:16,er6) */
123            && (w & 0xf) <= 2)                 /* Rs is R0, R1, or R2 */
124     {
125       int w2 = read_memory_integer (pc + 2, 2);
126
127       /* ... and d:16 is negative.  */
128       if (w2 < 0)
129         return 4;
130     }
131   else if (w == 0x78e0)
132     {
133       int w2 = read_memory_integer (pc + 2, 2);
134
135       if ((w2 & 0xfff0) == 0x6ba0)              /* mov.b Rs, @(d:24,er6) */
136         {
137           LONGEST disp = read_memory_integer (pc + 4, 4);
138
139           /* ... and d:24 is negative.  */
140           if (disp < 0 && disp > 0xffffff)
141             return 8;
142         }
143     }
144   else if (w == 0x0100)
145     {
146       int w2 = read_memory_integer (pc + 2, 2);
147
148       if ((w2 & 0xfff0) == 0x6fe0             /* mov.l Rs,@(d:16,er6) */
149           && (w2 & 0xf) <= 2)                /* Rs is ER0, ER1, or ER2 */
150         {
151           int w3 = read_memory_integer (pc + 4, 2);
152
153           /* ... and d:16 is negative.  */
154           if (w3 < 0)
155             return 6;
156         }
157       else if (w2 == 0x78e0)
158         {
159           int w3 = read_memory_integer (pc + 4, 2);
160
161           if ((w3 & 0xfff0) == 0x6ba0)          /* mov.l Rs, @(d:24,er6) */
162             {
163               LONGEST disp = read_memory_integer (pc + 6, 4);
164
165               /* ... and d:24 is negative.  */
166               if (disp < 0 && disp > 0xffffff)
167                 return 10;
168             }
169         }
170     }
171
172   return 0;
173 }
174
175 static CORE_ADDR
176 h8300_skip_prologue (CORE_ADDR start_pc)
177 {
178   short int w;
179   int adjust = 0;
180
181   /* Skip past all push and stm insns.  */
182   while (1)
183     {
184       w = read_memory_unsigned_integer (start_pc, 2);
185       /* First look for push insns.  */
186       if (w == 0x0100 || w == 0x0110 || w == 0x0120 || w == 0x0130)
187         {
188           w = read_memory_unsigned_integer (start_pc + 2, 2);
189           adjust = 2;
190         }
191
192       if (IS_PUSH (w))
193         {
194           start_pc += 2 + adjust;
195           w = read_memory_unsigned_integer (start_pc, 2);
196           continue;
197         }
198       adjust = 0;
199       break;
200     }
201
202   /* Skip past a move to FP, either word or long sized */
203   w = read_memory_unsigned_integer (start_pc, 2);
204   if (w == 0x0100)
205     {
206       w = read_memory_unsigned_integer (start_pc + 2, 2);
207       adjust += 2;
208     }
209
210   if (IS_MOVE_FP (w))
211     {
212       start_pc += 2 + adjust;
213       w = read_memory_unsigned_integer (start_pc, 2);
214     }
215
216   /* Check for loading either a word constant into r5;
217      long versions are handled by the SUBL_SP below.  */
218   if (IS_MOVK_R5 (w))
219     {
220       start_pc += 2;
221       w = read_memory_unsigned_integer (start_pc, 2);
222     }
223
224   /* Now check for subtracting r5 from sp, word sized only.  */
225   if (IS_SUB_R5SP (w))
226     {
227       start_pc += 2 + adjust;
228       w = read_memory_unsigned_integer (start_pc, 2);
229     }
230
231   /* Check for subs #2 and subs #4. */
232   while (IS_SUB2_SP (w) || IS_SUB4_SP (w))
233     {
234       start_pc += 2 + adjust;
235       w = read_memory_unsigned_integer (start_pc, 2);
236     }
237
238   /* Check for a 32bit subtract.  */
239   if (IS_SUBL_SP (w))
240     start_pc += 6 + adjust;
241
242   /* Check for spilling an argument register to the stack frame.
243      This could also be an initializing store from non-prologue code,
244      but I don't think there's any harm in skipping that.  */
245   for (;;)
246     {
247       int spill_size = h8300_is_argument_spill (start_pc);
248       if (spill_size == 0)
249         break;
250       start_pc += spill_size;
251     }
252
253   return start_pc;
254 }
255
256 static int
257 gdb_print_insn_h8300 (bfd_vma memaddr, disassemble_info * info)
258 {
259   if (h8300smode)
260     return print_insn_h8300s (memaddr, info);
261   else if (h8300hmode)
262     return print_insn_h8300h (memaddr, info);
263   else
264     return print_insn_h8300 (memaddr, info);
265 }
266
267 /* Fetch the instruction at ADDR, returning 0 if ADDR is beyond LIM or
268    is not the address of a valid instruction, the address of the next
269    instruction beyond ADDR otherwise.  *PWORD1 receives the first word
270    of the instruction. */
271
272 static CORE_ADDR
273 h8300_next_prologue_insn (CORE_ADDR addr, CORE_ADDR lim, unsigned short* pword1)
274 {
275   char buf[2];
276   if (addr < lim + 8)
277     {
278       read_memory (addr, buf, 2);
279       *pword1 = extract_signed_integer (buf, 2);
280
281       return addr + 2;
282     }
283   return 0;
284 }
285
286 /* Examine the prologue of a function.  `ip' points to the first instruction.
287    `limit' is the limit of the prologue (e.g. the addr of the first
288    linenumber, or perhaps the program counter if we're stepping through).
289    `frame_sp' is the stack pointer value in use in this frame.
290    `fsr' is a pointer to a frame_saved_regs structure into which we put
291    info about the registers saved by this frame.
292    `fi' is a struct frame_info pointer; we fill in various fields in it
293    to reflect the offsets of the arg pointer and the locals pointer.  */
294
295 /* Any function with a frame looks like this
296    SECOND ARG
297    FIRST ARG
298    RET PC
299    SAVED R2
300    SAVED R3
301    SAVED FP   <-FP POINTS HERE
302    LOCALS0
303    LOCALS1    <-SP POINTS HERE
304  */
305
306 static CORE_ADDR
307 h8300_examine_prologue (register CORE_ADDR ip, register CORE_ADDR limit,
308                         CORE_ADDR after_prolog_fp, CORE_ADDR *fsr,
309                         struct frame_info *fi)
310 {
311   register CORE_ADDR next_ip;
312   int r;
313   int have_fp = 0;
314   unsigned short insn_word;
315   /* Number of things pushed onto stack, starts at 2/4, 'cause the
316      PC is already there */
317   unsigned int reg_save_depth = BINWORD;
318
319   unsigned int auto_depth = 0;  /* Number of bytes of autos */
320
321   char in_frame[11];            /* One for each reg */
322
323   int adjust = 0;
324
325   memset (in_frame, 1, 11);
326   for (r = 0; r < 8; r++)
327     {
328       fsr[r] = 0;
329     }
330   if (after_prolog_fp == 0)
331     {
332       after_prolog_fp = read_register (E_SP_REGNUM);
333     }
334
335   /* If the PC isn't valid, quit now.  */
336   if (ip == 0 || ip & (h8300hmode ? ~0xffffff : ~0xffff))
337     return 0;
338
339   next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
340
341   if (insn_word == 0x0100)
342     {
343       insn_word = read_memory_unsigned_integer (ip + 2, 2);
344       adjust = 2;
345     }
346
347   /* Skip over any fp push instructions */
348   fsr[E_FP_REGNUM] = after_prolog_fp;
349   while (next_ip && IS_PUSH_FP (insn_word))
350     {
351       ip = next_ip + adjust;
352
353       in_frame[insn_word & 0x7] = reg_save_depth;
354       next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
355       reg_save_depth += 2 + adjust;
356     }
357
358   /* Is this a move into the fp */
359   if (next_ip && IS_MOV_SP_FP (insn_word))
360     {
361       ip = next_ip;
362       next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
363       have_fp = 1;
364     }
365
366   /* Skip over any stack adjustment, happens either with a number of
367      sub#2,sp or a mov #x,r5 sub r5,sp */
368
369   if (next_ip && (IS_SUB2_SP (insn_word) || IS_SUB4_SP (insn_word)))
370     {
371       while (next_ip && (IS_SUB2_SP (insn_word) || IS_SUB4_SP (insn_word)))
372         {
373           auto_depth += IS_SUB2_SP (insn_word) ? 2 : 4;
374           ip = next_ip;
375           next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
376         }
377     }
378   else
379     {
380       if (next_ip && IS_MOVK_R5 (insn_word))
381         {
382           ip = next_ip;
383           next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
384           auto_depth += insn_word;
385
386           next_ip = h8300_next_prologue_insn (next_ip, limit, &insn_word);
387           auto_depth += insn_word;
388         }
389       if (next_ip && IS_SUBL_SP (insn_word))
390         {
391           ip = next_ip;
392           auto_depth += read_memory_unsigned_integer (ip, 4);
393           ip += 4;
394
395           next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
396         }
397     }
398
399   /* Now examine the push insns to determine where everything lives
400      on the stack.  */
401   while (1)
402     {
403       adjust = 0;
404       if (!next_ip)
405         break;
406
407       if (insn_word == 0x0100)
408         {
409           ip = next_ip;
410           next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
411           adjust = 2;
412         }
413
414       if (IS_PUSH (insn_word))
415         {
416           auto_depth += 2 + adjust;
417           fsr[insn_word & 0x7] = after_prolog_fp - auto_depth;
418           ip = next_ip;
419           next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
420           continue;
421         }
422
423       /* Now check for push multiple insns.  */
424       if (insn_word == 0x0110 || insn_word == 0x0120 || insn_word == 0x0130)
425         {
426           int count = ((insn_word >> 4) & 0xf) + 1;
427           int start, i;
428
429           ip = next_ip;
430           next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
431           start = insn_word & 0x7;
432
433           for (i = start; i < start + count; i++)
434             {
435               auto_depth += 4;
436               fsr[i] = after_prolog_fp - auto_depth;
437             }
438         }
439       break;
440     }
441
442   /* The args are always reffed based from the stack pointer */
443   get_frame_extra_info (fi)->args_pointer = after_prolog_fp;
444   /* Locals are always reffed based from the fp */
445   get_frame_extra_info (fi)->locals_pointer = after_prolog_fp;
446   /* The PC is at a known place */
447   get_frame_extra_info (fi)->from_pc =
448     read_memory_unsigned_integer (after_prolog_fp + BINWORD, BINWORD);
449
450   /* Rememeber any others too */
451   in_frame[E_PC_REGNUM] = 0;
452
453   if (have_fp)
454     /* We keep the old FP in the SP spot */
455     fsr[E_SP_REGNUM] = read_memory_unsigned_integer (fsr[E_FP_REGNUM], BINWORD);
456   else
457     fsr[E_SP_REGNUM] = after_prolog_fp + auto_depth;
458
459   return (ip);
460 }
461
462 static void
463 h8300_frame_init_saved_regs (struct frame_info *fi)
464 {
465   CORE_ADDR func_addr, func_end;
466
467   if (!get_frame_saved_regs (fi))
468     {
469       frame_saved_regs_zalloc (fi);
470
471       /* Find the beginning of this function, so we can analyze its
472          prologue. */
473       if (find_pc_partial_function (get_frame_pc (fi), NULL, &func_addr, &func_end))
474         {
475           struct symtab_and_line sal = find_pc_line (func_addr, 0);
476           CORE_ADDR limit = (sal.end && sal.end < get_frame_pc (fi)) ? sal.end : get_frame_pc (fi);
477           /* This will fill in fields in fi. */
478           h8300_examine_prologue (func_addr, limit, get_frame_base (fi),
479                                   get_frame_saved_regs (fi), fi);
480         }
481       /* Else we're out of luck (can't debug completely stripped code). 
482          FIXME. */
483     }
484 }
485
486 /* Given a GDB frame, determine the address of the calling function's
487    frame.  This will be used to create a new GDB frame struct, and
488    then DEPRECATED_INIT_EXTRA_FRAME_INFO and DEPRECATED_INIT_FRAME_PC
489    will be called for the new frame.
490
491    For us, the frame address is its stack pointer value, so we look up
492    the function prologue to determine the caller's sp value, and return it.  */
493
494 static CORE_ADDR
495 h8300_frame_chain (struct frame_info *thisframe)
496 {
497   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (thisframe),
498                                    get_frame_base (thisframe),
499                                    get_frame_base (thisframe)))
500     {                           /* initialize the from_pc now */
501       get_frame_extra_info (thisframe)->from_pc =
502         deprecated_read_register_dummy (get_frame_pc (thisframe),
503                                         get_frame_base (thisframe),
504                                         E_PC_REGNUM);
505       return get_frame_base (thisframe);
506     }
507   return get_frame_saved_regs (thisframe)[E_SP_REGNUM];
508 }
509
510 /* Return the saved PC from this frame.
511
512    If the frame has a memory copy of SRP_REGNUM, use that.  If not,
513    just use the register SRP_REGNUM itself.  */
514
515 static CORE_ADDR
516 h8300_frame_saved_pc (struct frame_info *frame)
517 {
518   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
519                                    get_frame_base (frame),
520                                    get_frame_base (frame)))
521     return deprecated_read_register_dummy (get_frame_pc (frame),
522                                            get_frame_base (frame),
523                                            E_PC_REGNUM);
524   else
525     return get_frame_extra_info (frame)->from_pc;
526 }
527
528 static void
529 h8300_init_extra_frame_info (int fromleaf, struct frame_info *fi)
530 {
531   if (!get_frame_extra_info (fi))
532     {
533       frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
534       get_frame_extra_info (fi)->from_pc = 0;
535       get_frame_extra_info (fi)->args_pointer = 0;              /* Unknown */
536       get_frame_extra_info (fi)->locals_pointer = 0;    /* Unknown */
537       
538       if (!get_frame_pc (fi))
539         {
540           if (get_next_frame (fi))
541             deprecated_update_frame_pc_hack (fi, h8300_frame_saved_pc (get_next_frame (fi)));
542         }
543       h8300_frame_init_saved_regs (fi);
544     }
545 }
546
547 static CORE_ADDR
548 h8300_frame_locals_address (struct frame_info *fi)
549 {
550   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), get_frame_base (fi),
551                                    get_frame_base (fi)))
552     return (CORE_ADDR) 0;       /* Not sure what else to do... */
553   return get_frame_extra_info (fi)->locals_pointer;
554 }
555
556 /* Return the address of the argument block for the frame
557    described by FI.  Returns 0 if the address is unknown.  */
558
559 static CORE_ADDR
560 h8300_frame_args_address (struct frame_info *fi)
561 {
562   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), get_frame_base (fi),
563                                    get_frame_base (fi)))
564     return (CORE_ADDR) 0;       /* Not sure what else to do... */
565   return get_frame_extra_info (fi)->args_pointer;
566 }
567
568 /* Round N up or down to the nearest multiple of UNIT.
569    Evaluate N only once, UNIT several times.
570    UNIT must be a power of two.  */
571 #define round_up(n, unit)   (((n) + (unit) - 1) & -(unit))
572 #define round_down(n, unit) ((n) & -(unit))
573
574 /* Function: push_arguments
575    Setup the function arguments for calling a function in the inferior.
576    In this discussion, a `word' is 16 bits on the H8/300s, and 32 bits
577    on the H8/300H.
578
579    There are actually two ABI's here: -mquickcall (the default) and
580    -mno-quickcall.  With -mno-quickcall, all arguments are passed on
581    the stack after the return address, word-aligned.  With
582    -mquickcall, GCC tries to use r0 -- r2 to pass registers.  Since
583    GCC doesn't indicate in the object file which ABI was used to
584    compile it, GDB only supports the default --- -mquickcall.
585
586    Here are the rules for -mquickcall, in detail:
587
588    Each argument, whether scalar or aggregate, is padded to occupy a
589    whole number of words.  Arguments smaller than a word are padded at
590    the most significant end; those larger than a word are padded at
591    the least significant end.
592
593    The initial arguments are passed in r0 -- r2.  Earlier arguments go in
594    lower-numbered registers.  Multi-word arguments are passed in
595    consecutive registers, with the most significant end in the
596    lower-numbered register.
597
598    If an argument doesn't fit entirely in the remaining registers, it
599    is passed entirely on the stack.  Stack arguments begin just after
600    the return address.  Once an argument has overflowed onto the stack
601    this way, all subsequent arguments are passed on the stack.
602
603    The above rule has odd consequences.  For example, on the h8/300s,
604    if a function takes two longs and an int as arguments:
605    - the first long will be passed in r0/r1,
606    - the second long will be passed entirely on the stack, since it
607      doesn't fit in r2,
608    - and the int will be passed on the stack, even though it could fit
609      in r2.
610
611    A weird exception: if an argument is larger than a word, but not a
612    whole number of words in length (before padding), it is passed on
613    the stack following the rules for stack arguments above, even if
614    there are sufficient registers available to hold it.  Stranger
615    still, the argument registers are still `used up' --- even though
616    there's nothing in them.
617
618    So, for example, on the h8/300s, if a function expects a three-byte
619    structure and an int, the structure will go on the stack, and the
620    int will go in r2, not r0.
621   
622    If the function returns an aggregate type (struct, union, or class)
623    by value, the caller must allocate space to hold the return value,
624    and pass the callee a pointer to this space as an invisible first
625    argument, in R0.
626
627    For varargs functions, the last fixed argument and all the variable
628    arguments are always passed on the stack.  This means that calls to
629    varargs functions don't work properly unless there is a prototype
630    in scope.
631
632    Basically, this ABI is not good, for the following reasons:
633    - You can't call vararg functions properly unless a prototype is in scope.
634    - Structure passing is inconsistent, to no purpose I can see.
635    - It often wastes argument registers, of which there are only three
636      to begin with.  */
637
638 static CORE_ADDR
639 h8300_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
640                       int struct_return, CORE_ADDR struct_addr)
641 {
642   int stack_align, stack_alloc, stack_offset;
643   int wordsize = BINWORD;
644   int reg;
645   int argument;
646
647   /* First, make sure the stack is properly aligned.  */
648   sp = round_down (sp, wordsize);
649
650   /* Now make sure there's space on the stack for the arguments.  We
651      may over-allocate a little here, but that won't hurt anything.  */
652   stack_alloc = 0;
653   for (argument = 0; argument < nargs; argument++)
654     stack_alloc += round_up (TYPE_LENGTH (VALUE_TYPE (args[argument])),
655                              wordsize);
656   sp -= stack_alloc;
657
658   /* Now load as many arguments as possible into registers, and push
659      the rest onto the stack.  */
660   reg = E_ARG0_REGNUM;
661   stack_offset = 0;
662
663   /* If we're returning a structure by value, then we must pass a
664      pointer to the buffer for the return value as an invisible first
665      argument.  */
666   if (struct_return)
667     write_register (reg++, struct_addr);
668
669   for (argument = 0; argument < nargs; argument++)
670     {
671       struct type *type = VALUE_TYPE (args[argument]);
672       int len = TYPE_LENGTH (type);
673       char *contents = (char *) VALUE_CONTENTS (args[argument]);
674
675       /* Pad the argument appropriately.  */
676       int padded_len = round_up (len, wordsize);
677       char *padded = alloca (padded_len);
678
679       memset (padded, 0, padded_len);
680       memcpy (len < wordsize ? padded + padded_len - len : padded,
681               contents, len);
682
683       /* Could the argument fit in the remaining registers?  */
684       if (padded_len <= (E_ARGLAST_REGNUM - reg + 1) * wordsize)
685         {
686           /* Are we going to pass it on the stack anyway, for no good
687              reason?  */
688           if (len > wordsize && len % wordsize)
689             {
690               /* I feel so unclean.  */
691               write_memory (sp + stack_offset, padded, padded_len);
692               stack_offset += padded_len;
693
694               /* That's right --- even though we passed the argument
695                  on the stack, we consume the registers anyway!  Love
696                  me, love my dog.  */
697               reg += padded_len / wordsize;
698             }
699           else
700             {
701               /* Heavens to Betsy --- it's really going in registers!
702                  It would be nice if we could use write_register_bytes
703                  here, but on the h8/300s, there are gaps between
704                  the registers in the register file.  */
705               int offset;
706
707               for (offset = 0; offset < padded_len; offset += wordsize)
708                 {
709                   ULONGEST word = extract_unsigned_integer (padded + offset, wordsize);
710                   write_register (reg++, word);
711                 }
712             }
713         }
714       else
715         {
716           /* It doesn't fit in registers!  Onto the stack it goes.  */
717           write_memory (sp + stack_offset, padded, padded_len);
718           stack_offset += padded_len;
719
720           /* Once one argument has spilled onto the stack, all
721              subsequent arguments go on the stack.  */
722           reg = E_ARGLAST_REGNUM + 1;
723         }
724     }
725
726   return sp;
727 }
728
729 /* Function: push_return_address
730    Setup the return address for a dummy frame, as called by
731    call_function_by_hand.  Only necessary when you are using an
732    empty CALL_DUMMY, ie. the target will not actually be executing
733    a JSR/BSR instruction.  */
734
735 static CORE_ADDR
736 h8300_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
737 {
738   unsigned char buf[4];
739   int wordsize = BINWORD;
740
741   sp -= wordsize;
742   store_unsigned_integer (buf, wordsize, CALL_DUMMY_ADDRESS ());
743   write_memory (sp, buf, wordsize);
744   return sp;
745 }
746
747 /* Function: h8300_pop_frame
748    Restore the machine to the state it had before the current frame 
749    was created.  Usually used either by the "RETURN" command, or by
750    call_function_by_hand after the dummy_frame is finished. */
751
752 static void
753 h8300_pop_frame (void)
754 {
755   unsigned regno;
756   struct frame_info *frame = get_current_frame ();
757
758   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
759                                    get_frame_base (frame),
760                                    get_frame_base (frame)))
761     {
762       generic_pop_dummy_frame ();
763     }
764   else
765     {
766       for (regno = 0; regno < 8; regno++)
767         {
768           /* Don't forget E_SP_REGNUM is a frame_saved_regs struct is the
769              actual value we want, not the address of the value we want.  */
770           if (get_frame_saved_regs (frame)[regno] && regno != E_SP_REGNUM)
771             write_register (regno,
772                             read_memory_integer (get_frame_saved_regs (frame)[regno],
773                                                  BINWORD));
774           else if (get_frame_saved_regs (frame)[regno] && regno == E_SP_REGNUM)
775             write_register (regno, get_frame_base (frame) + 2 * BINWORD);
776         }
777
778       /* Don't forget to update the PC too!  */
779       write_register (E_PC_REGNUM, get_frame_extra_info (frame)->from_pc);
780     }
781   flush_cached_frames ();
782 }
783
784 /* Function: extract_return_value
785    Figure out where in REGBUF the called function has left its return value.
786    Copy that into VALBUF.  Be sure to account for CPU type.   */
787
788 static void
789 h8300_extract_return_value (struct type *type, char *regbuf, char *valbuf)
790 {
791   int wordsize = BINWORD;
792   int len = TYPE_LENGTH (type);
793
794   switch (len)
795     {
796     case 1:                     /* (char) */
797     case 2:                     /* (short), (int) */
798       memcpy (valbuf, regbuf + REGISTER_BYTE (0) + (wordsize - len), len);
799       break;
800     case 4:                     /* (long), (float) */
801       if (wordsize == 4)
802         {
803           memcpy (valbuf, regbuf + REGISTER_BYTE (0), 4);
804         }
805       else
806         {
807           memcpy (valbuf, regbuf + REGISTER_BYTE (0), 2);
808           memcpy (valbuf + 2, regbuf + REGISTER_BYTE (1), 2);
809         }
810       break;
811     case 8:                     /* (double) (doesn't seem to happen, which is good,
812                                    because this almost certainly isn't right.  */
813       error ("I don't know how a double is returned.");
814       break;
815     }
816 }
817
818 /* Function: store_return_value
819    Place the appropriate value in the appropriate registers.
820    Primarily used by the RETURN command.  */
821
822 static void
823 h8300_store_return_value (struct type *type, char *valbuf)
824 {
825   int regval;
826   int wordsize = BINWORD;
827   int len = TYPE_LENGTH (type);
828
829   switch (len)
830     {
831     case 1:                     /* char */
832     case 2:                     /* short, int */
833       regval = extract_unsigned_integer (valbuf, len);
834       write_register (0, regval);
835       break;
836     case 4:                     /* long, float */
837       regval = extract_unsigned_integer (valbuf, len);
838       if (wordsize == 4)
839         {
840           write_register (0, regval);
841         }
842       else
843         {
844           write_register (0, regval >> 16);
845           write_register (1, regval & 0xffff);
846         }
847       break;
848     case 8:                     /* presumeably double, but doesn't seem to happen */
849       error ("I don't know how to return a double.");
850       break;
851     }
852 }
853
854 static struct cmd_list_element *setmachinelist;
855
856 static const char *
857 h8300_register_name (int regno)
858 {
859   /* The register names change depending on whether the h8300h processor
860      type is selected. */
861   static char *h8300_register_names[] = {
862     "r0", "r1", "r2", "r3", "r4", "r5", "r6",
863     "sp", "ccr","pc","cycles", "tick", "inst", ""
864   };
865   static char *h8300s_register_names[] = {
866     "er0", "er1", "er2", "er3", "er4", "er5", "er6",
867     "sp", "ccr", "pc", "cycles", "exr", "tick", "inst"
868   };
869   char **register_names =
870                 h8300smode ? h8300s_register_names : h8300_register_names;
871   if (regno < 0 || regno >= E_NUM_REGS)
872     internal_error (__FILE__, __LINE__,
873                     "h8300_register_name: illegal register number %d", regno);
874   else
875     return register_names[regno];
876 }
877
878 static void
879 h8300_print_register (struct gdbarch *gdbarch, struct ui_file *file,
880                       struct frame_info *frame, int regno)
881 {
882   ULONGEST rval;
883   long val;
884   const char *name = h8300_register_name (regno);
885
886   if (!name || !*name)
887     return;
888
889   /* FIXME: cagney/2002-10-22: The code below assumes that VAL is at
890      least 4 bytes (32 bits) in size and hence is large enough to hold
891      the largest h8300 register.  Should instead be using ULONGEST and
892      the phex() functions.  */
893   gdb_assert (sizeof (val) >= 4);
894   frame_read_unsigned_register (frame, regno, &rval);
895   val = rval;
896
897   fprintf_filtered (file, "%-14s ", name);
898   if (h8300hmode)
899     {
900       if (val)
901         fprintf_filtered (file, "0x%08lx   %-8ld", val, val);
902       else
903         fprintf_filtered (file, "0x%-8lx   %-8ld", val, val);
904     }
905   else
906     {
907       if (val)
908         fprintf_filtered (file, "0x%04lx   %-4ld", val, val);
909       else
910         fprintf_filtered (file, "0x%-4lx   %-4ld", val, val);
911     }
912   if (regno == E_CCR_REGNUM)
913     {
914       /* CCR register */
915       int C, Z, N, V;
916       unsigned char b[h8300h_reg_size];
917       unsigned char l;
918       frame_register_read (deprecated_selected_frame, regno, b);
919       l = b[REGISTER_VIRTUAL_SIZE (E_CCR_REGNUM) - 1];
920       fprintf_filtered (file, "\t");
921       fprintf_filtered (file, "I-%d ", (l & 0x80) != 0);
922       fprintf_filtered (file, "UI-%d ", (l & 0x40) != 0);
923       fprintf_filtered (file, "H-%d ", (l & 0x20) != 0);
924       fprintf_filtered (file, "U-%d ", (l & 0x10) != 0);
925       N = (l & 0x8) != 0;
926       Z = (l & 0x4) != 0;
927       V = (l & 0x2) != 0;
928       C = (l & 0x1) != 0;
929       fprintf_filtered (file, "N-%d ", N);
930       fprintf_filtered (file, "Z-%d ", Z);
931       fprintf_filtered (file, "V-%d ", V);
932       fprintf_filtered (file, "C-%d ", C);
933       if ((C | Z) == 0)
934         fprintf_filtered (file, "u> ");
935       if ((C | Z) == 1)
936         fprintf_filtered (file, "u<= ");
937       if ((C == 0))
938         fprintf_filtered (file, "u>= ");
939       if (C == 1)
940         fprintf_filtered (file, "u< ");
941       if (Z == 0)
942         fprintf_filtered (file, "!= ");
943       if (Z == 1)
944         fprintf_filtered (file, "== ");
945       if ((N ^ V) == 0)
946         fprintf_filtered (file, ">= ");
947       if ((N ^ V) == 1)
948         fprintf_filtered (file, "< ");
949       if ((Z | (N ^ V)) == 0)
950         fprintf_filtered (file, "> ");
951       if ((Z | (N ^ V)) == 1)
952         fprintf_filtered (file, "<= ");
953     }
954   else if (regno == E_EXR_REGNUM && h8300smode)
955     {
956       /* EXR register */
957       unsigned char b[h8300h_reg_size];
958       unsigned char l;
959       frame_register_read (deprecated_selected_frame, regno, b);
960       l = b[REGISTER_VIRTUAL_SIZE (E_EXR_REGNUM) - 1];
961       fprintf_filtered (file, "\t");
962       fprintf_filtered (file, "T-%d - - - ", (l & 0x80) != 0);
963       fprintf_filtered (file, "I2-%d ", (l & 4) != 0);
964       fprintf_filtered (file, "I1-%d ", (l & 2) != 0);
965       fprintf_filtered (file, "I0-%d", (l & 1) != 0);
966     }
967   fprintf_filtered (file, "\n");
968 }
969
970 static void
971 h8300_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
972                             struct frame_info *frame, int regno, int cpregs)
973 {
974   if (regno < 0)
975     for (regno = 0; regno < E_NUM_REGS; ++regno)
976       h8300_print_register (gdbarch, file, frame, regno);
977   else
978     h8300_print_register (gdbarch, file, frame, regno);
979 }
980
981 static CORE_ADDR
982 h8300_saved_pc_after_call (struct frame_info *ignore)
983 {
984   return read_memory_unsigned_integer (read_register (E_SP_REGNUM), BINWORD);
985 }
986
987 static int
988 h8300_register_byte (int regno)
989 {
990   if (regno < 0 || regno >= E_NUM_REGS)
991     internal_error (__FILE__, __LINE__,
992                     "h8300_register_byte: illegal register number %d", regno);
993   else
994     return regno * BINWORD;
995 }
996
997 static int
998 h8300_register_raw_size (int regno)
999 {
1000   if (regno < 0 || regno >= E_NUM_REGS)
1001     internal_error (__FILE__, __LINE__,
1002                     "h8300_register_raw_size: illegal register number %d",
1003                     regno);
1004   else
1005     return BINWORD;
1006 }
1007
1008 static struct type *
1009 h8300_register_virtual_type (int regno)
1010 {
1011   if (regno < 0 || regno >= E_NUM_REGS)
1012     internal_error (__FILE__, __LINE__,
1013                     "h8300_register_virtual_type: illegal register number %d",
1014                     regno);
1015   else
1016     return h8300hmode ?
1017            builtin_type_unsigned_long : builtin_type_unsigned_short;
1018 }
1019
1020 static void
1021 h8300_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1022
1023   write_register (0, addr);
1024 }
1025
1026 static int
1027 h8300_use_struct_convention (int gcc_p, struct type *type)
1028 {
1029   return 1;
1030 }
1031
1032 static CORE_ADDR
1033 h8300_extract_struct_value_address (char *regbuf)
1034 {
1035   return extract_unsigned_integer (regbuf + h8300_register_byte (E_ARG0_REGNUM),
1036                                    h8300_register_raw_size (E_ARG0_REGNUM));
1037 }
1038
1039 const static unsigned char *
1040 h8300_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
1041 {
1042   /*static unsigned char breakpoint[] = { 0x7A, 0xFF };*/       /* ??? */
1043   static unsigned char breakpoint[] = { 0x01, 0x80 };           /* Sleep */
1044
1045   *lenptr = sizeof (breakpoint);
1046   return breakpoint;
1047 }
1048
1049 static void
1050 h8300_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
1051                         struct frame_info *frame, const char *args)
1052 {
1053   fprintf_filtered (file, "\
1054 No floating-point info available for this processor.\n");
1055 }
1056
1057 static struct gdbarch *
1058 h8300_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1059 {
1060   static LONGEST call_dummy_words[1] = { 0 };
1061   struct gdbarch_tdep *tdep = NULL;
1062   struct gdbarch *gdbarch;
1063
1064   arches = gdbarch_list_lookup_by_info (arches, &info);
1065   if (arches != NULL)
1066     return arches->gdbarch;
1067
1068 #if 0
1069   tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
1070 #endif
1071
1072   if (info.bfd_arch_info->arch != bfd_arch_h8300)
1073     return NULL;
1074
1075   switch (info.bfd_arch_info->mach)
1076     {
1077     case bfd_mach_h8300:
1078       h8300sxmode = 0;
1079       h8300smode = 0;
1080       h8300hmode = 0;
1081       break;
1082     case bfd_mach_h8300h:
1083     case bfd_mach_h8300hn:
1084       h8300sxmode = 0;
1085       h8300smode = 0;
1086       h8300hmode = 1;
1087       break;
1088     case bfd_mach_h8300s:
1089     case bfd_mach_h8300sn:
1090       h8300sxmode = 0;
1091       h8300smode = 1;
1092       h8300hmode = 1;
1093       break;
1094     case bfd_mach_h8300sx:
1095       h8300sxmode = 1;
1096       h8300smode = 1;
1097       h8300hmode = 1;
1098       break;
1099     }
1100
1101   gdbarch = gdbarch_alloc (&info, 0);
1102
1103   /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
1104      ready to unwind the PC first (see frame.c:get_prev_frame()).  */
1105   set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
1106
1107   /*
1108    * Basic register fields and methods.
1109    */
1110
1111   set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
1112   set_gdbarch_num_pseudo_regs (gdbarch, 0);
1113   set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
1114   set_gdbarch_deprecated_fp_regnum (gdbarch, E_FP_REGNUM);
1115   set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1116   set_gdbarch_register_name (gdbarch, h8300_register_name);
1117   set_gdbarch_deprecated_register_size (gdbarch, BINWORD);
1118   set_gdbarch_deprecated_register_bytes (gdbarch, E_NUM_REGS * BINWORD);
1119   set_gdbarch_register_byte (gdbarch, h8300_register_byte);
1120   set_gdbarch_register_raw_size (gdbarch, h8300_register_raw_size);
1121   set_gdbarch_deprecated_max_register_raw_size (gdbarch, h8300h_reg_size);
1122   set_gdbarch_register_virtual_size (gdbarch, h8300_register_raw_size);
1123   set_gdbarch_deprecated_max_register_virtual_size (gdbarch, h8300h_reg_size);
1124   set_gdbarch_register_virtual_type (gdbarch, h8300_register_virtual_type);
1125   set_gdbarch_print_registers_info (gdbarch, h8300_print_registers_info);
1126   set_gdbarch_print_float_info (gdbarch, h8300_print_float_info);
1127
1128   /*
1129    * Frame Info
1130    */
1131   set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, h8300_frame_init_saved_regs);
1132   set_gdbarch_deprecated_init_extra_frame_info (gdbarch, h8300_init_extra_frame_info);
1133   set_gdbarch_deprecated_frame_chain (gdbarch, h8300_frame_chain);
1134   set_gdbarch_deprecated_saved_pc_after_call (gdbarch, h8300_saved_pc_after_call);
1135   set_gdbarch_deprecated_frame_saved_pc (gdbarch, h8300_frame_saved_pc);
1136   set_gdbarch_skip_prologue (gdbarch, h8300_skip_prologue);
1137   set_gdbarch_frame_args_address (gdbarch, h8300_frame_args_address);
1138   set_gdbarch_frame_locals_address (gdbarch, h8300_frame_locals_address);
1139
1140   /* 
1141    * Miscelany
1142    */
1143   /* Stack grows up. */
1144   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1145   /* PC stops zero byte after a trap instruction
1146      (which means: exactly on trap instruction). */
1147   set_gdbarch_decr_pc_after_break (gdbarch, 0);
1148   /* This value is almost never non-zero... */
1149   set_gdbarch_function_start_offset (gdbarch, 0);
1150   /* This value is almost never non-zero... */
1151   set_gdbarch_frame_args_skip (gdbarch, 0);
1152   /* OK to default this value to 'unknown'. */
1153   set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
1154   set_gdbarch_frameless_function_invocation (gdbarch,
1155                                              frameless_look_for_prologue);
1156
1157   /*
1158    * Call Dummies
1159    * 
1160    * These values and methods are used when gdb calls a target function.  */
1161   set_gdbarch_deprecated_push_return_address (gdbarch, h8300_push_return_address);
1162   set_gdbarch_deprecated_extract_return_value (gdbarch, h8300_extract_return_value);
1163   set_gdbarch_deprecated_push_arguments (gdbarch, h8300_push_arguments);
1164   set_gdbarch_deprecated_pop_frame (gdbarch, h8300_pop_frame);
1165   set_gdbarch_deprecated_store_struct_return (gdbarch, h8300_store_struct_return);
1166   set_gdbarch_deprecated_store_return_value (gdbarch, h8300_store_return_value);
1167   set_gdbarch_deprecated_extract_struct_value_address (gdbarch, h8300_extract_struct_value_address);
1168   set_gdbarch_use_struct_convention (gdbarch, h8300_use_struct_convention);
1169   set_gdbarch_deprecated_call_dummy_words (gdbarch, call_dummy_words);
1170   set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, 0);
1171   set_gdbarch_breakpoint_from_pc (gdbarch, h8300_breakpoint_from_pc);
1172
1173   set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1174   set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1175   set_gdbarch_ptr_bit (gdbarch, BINWORD * TARGET_CHAR_BIT);
1176   set_gdbarch_addr_bit (gdbarch, BINWORD * TARGET_CHAR_BIT);
1177
1178   /* set_gdbarch_stack_align (gdbarch, SOME_stack_align); */
1179   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
1180
1181   /* Should be using push_dummy_call.  */
1182   set_gdbarch_deprecated_dummy_write_sp (gdbarch, generic_target_write_sp);
1183
1184   return gdbarch;
1185 }
1186
1187 void
1188 _initialize_h8300_tdep (void)
1189 {
1190   deprecated_tm_print_insn = gdb_print_insn_h8300;
1191   register_gdbarch_init (bfd_arch_h8300, h8300_gdbarch_init);
1192 }