OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [gdb/] [mn10300-tdep.c] - Blame information for rev 1778

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
2
 
3
   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software
4
   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
#include "defs.h"
24
#include "frame.h"
25
#include "inferior.h"
26
#include "target.h"
27
#include "value.h"
28
#include "bfd.h"
29
#include "gdb_string.h"
30
#include "gdbcore.h"
31
#include "symfile.h"
32
#include "regcache.h"
33
#include "arch-utils.h"
34
 
35
#define D0_REGNUM 0
36
#define D2_REGNUM 2
37
#define D3_REGNUM 3
38
#define A0_REGNUM 4
39
#define A2_REGNUM 6
40
#define A3_REGNUM 7
41
#define MDR_REGNUM 10
42
#define PSW_REGNUM 11
43
#define LIR_REGNUM 12
44
#define LAR_REGNUM 13
45
#define MDRQ_REGNUM 14
46
#define E0_REGNUM 15
47
#define MCRH_REGNUM 26
48
#define MCRL_REGNUM 27
49
#define MCVF_REGNUM 28
50
 
51
enum movm_register_bits {
52
  movm_exother_bit = 0x01,
53
  movm_exreg1_bit  = 0x02,
54
  movm_exreg0_bit  = 0x04,
55
  movm_other_bit   = 0x08,
56
  movm_a3_bit      = 0x10,
57
  movm_a2_bit      = 0x20,
58
  movm_d3_bit      = 0x40,
59
  movm_d2_bit      = 0x80
60
};
61
 
62
extern void _initialize_mn10300_tdep (void);
63
static CORE_ADDR mn10300_analyze_prologue (struct frame_info *fi,
64
                                           CORE_ADDR pc);
65
 
66
/* mn10300 private data */
67
struct gdbarch_tdep
68
{
69
  int am33_mode;
70
#define AM33_MODE (gdbarch_tdep (current_gdbarch)->am33_mode)
71
};
72
 
73
/* Additional info used by the frame */
74
 
75
struct frame_extra_info
76
  {
77
    int status;
78
    int stack_size;
79
  };
80
 
81
 
82
static char *
83
register_name (int reg, char **regs, long sizeof_regs)
84
{
85
  if (reg < 0 || reg >= sizeof_regs / sizeof (regs[0]))
86
    return NULL;
87
  else
88
    return regs[reg];
89
}
90
 
91
static const char *
92
mn10300_generic_register_name (int reg)
93
{
94
  static char *regs[] =
95
  { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
96
    "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
97
    "", "", "", "", "", "", "", "",
98
    "", "", "", "", "", "", "", "fp"
99
  };
100
  return register_name (reg, regs, sizeof regs);
101
}
102
 
103
 
104
static const char *
105
am33_register_name (int reg)
106
{
107
  static char *regs[] =
108
  { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
109
    "sp", "pc", "mdr", "psw", "lir", "lar", "",
110
    "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
111
    "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", ""
112
  };
113
  return register_name (reg, regs, sizeof regs);
114
}
115
 
116
static CORE_ADDR
117
mn10300_saved_pc_after_call (struct frame_info *fi)
118
{
119
  return read_memory_integer (read_register (SP_REGNUM), 4);
120
}
121
 
122
static void
123
mn10300_extract_return_value (struct type *type, char *regbuf, char *valbuf)
124
{
125
  if (TYPE_CODE (type) == TYPE_CODE_PTR)
126
    memcpy (valbuf, regbuf + REGISTER_BYTE (4), TYPE_LENGTH (type));
127
  else
128
    memcpy (valbuf, regbuf + REGISTER_BYTE (0), TYPE_LENGTH (type));
129
}
130
 
131
static CORE_ADDR
132
mn10300_extract_struct_value_address (char *regbuf)
133
{
134
  return extract_address (regbuf + REGISTER_BYTE (4),
135
                          REGISTER_RAW_SIZE (4));
136
}
137
 
138
static void
139
mn10300_store_return_value (struct type *type, char *valbuf)
140
{
141
  if (TYPE_CODE (type) == TYPE_CODE_PTR)
142
    write_register_bytes (REGISTER_BYTE (4), valbuf, TYPE_LENGTH (type));
143
  else
144
    write_register_bytes (REGISTER_BYTE (0), valbuf, TYPE_LENGTH (type));
145
}
146
 
147
static struct frame_info *analyze_dummy_frame (CORE_ADDR, CORE_ADDR);
148
static struct frame_info *
149
analyze_dummy_frame (CORE_ADDR pc, CORE_ADDR frame)
150
{
151
  static struct frame_info *dummy = NULL;
152
  if (dummy == NULL)
153
    {
154
      dummy = xmalloc (sizeof (struct frame_info));
155
      dummy->saved_regs = xmalloc (SIZEOF_FRAME_SAVED_REGS);
156
      dummy->extra_info = xmalloc (sizeof (struct frame_extra_info));
157
    }
158
  dummy->next = NULL;
159
  dummy->prev = NULL;
160
  dummy->pc = pc;
161
  dummy->frame = frame;
162
  dummy->extra_info->status = 0;
163
  dummy->extra_info->stack_size = 0;
164
  memset (dummy->saved_regs, '\000', SIZEOF_FRAME_SAVED_REGS);
165
  mn10300_analyze_prologue (dummy, 0);
166
  return dummy;
167
}
168
 
169
/* Values for frame_info.status */
170
 
171
#define MY_FRAME_IN_SP 0x1
172
#define MY_FRAME_IN_FP 0x2
173
#define NO_MORE_FRAMES 0x4
174
 
175
 
176
/* Should call_function allocate stack space for a struct return?  */
177
static int
178
mn10300_use_struct_convention (int gcc_p, struct type *type)
179
{
180
  return (TYPE_NFIELDS (type) > 1 || TYPE_LENGTH (type) > 8);
181
}
182
 
183
/* The breakpoint instruction must be the same size as the smallest
184
   instruction in the instruction set.
185
 
186
   The Matsushita mn10x00 processors have single byte instructions
187
   so we need a single byte breakpoint.  Matsushita hasn't defined
188
   one, so we defined it ourselves.  */
189
 
190
const static unsigned char *
191
mn10300_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
192
{
193
  static char breakpoint[] =
194
  {0xff};
195
  *bp_size = 1;
196
  return breakpoint;
197
}
198
 
199
 
200
/* Fix fi->frame if it's bogus at this point.  This is a helper
201
   function for mn10300_analyze_prologue. */
202
 
203
static void
204
fix_frame_pointer (struct frame_info *fi, int stack_size)
205
{
206
  if (fi && fi->next == NULL)
207
    {
208
      if (fi->extra_info->status & MY_FRAME_IN_SP)
209
        fi->frame = read_sp () - stack_size;
210
      else if (fi->extra_info->status & MY_FRAME_IN_FP)
211
        fi->frame = read_register (A3_REGNUM);
212
    }
213
}
214
 
215
 
216
/* Set offsets of registers saved by movm instruction.
217
   This is a helper function for mn10300_analyze_prologue.  */
218
 
219
static void
220
set_movm_offsets (struct frame_info *fi, int movm_args)
221
{
222
  int offset = 0;
223
 
224
  if (fi == NULL || movm_args == 0)
225
    return;
226
 
227
  if (movm_args & movm_other_bit)
228
    {
229
      /* The `other' bit leaves a blank area of four bytes at the
230
         beginning of its block of saved registers, making it 32 bytes
231
         long in total.  */
232
      fi->saved_regs[LAR_REGNUM]    = fi->frame + offset + 4;
233
      fi->saved_regs[LIR_REGNUM]    = fi->frame + offset + 8;
234
      fi->saved_regs[MDR_REGNUM]    = fi->frame + offset + 12;
235
      fi->saved_regs[A0_REGNUM + 1] = fi->frame + offset + 16;
236
      fi->saved_regs[A0_REGNUM]     = fi->frame + offset + 20;
237
      fi->saved_regs[D0_REGNUM + 1] = fi->frame + offset + 24;
238
      fi->saved_regs[D0_REGNUM]     = fi->frame + offset + 28;
239
      offset += 32;
240
    }
241
  if (movm_args & movm_a3_bit)
242
    {
243
      fi->saved_regs[A3_REGNUM] = fi->frame + offset;
244
      offset += 4;
245
    }
246
  if (movm_args & movm_a2_bit)
247
    {
248
      fi->saved_regs[A2_REGNUM] = fi->frame + offset;
249
      offset += 4;
250
    }
251
  if (movm_args & movm_d3_bit)
252
    {
253
      fi->saved_regs[D3_REGNUM] = fi->frame + offset;
254
      offset += 4;
255
    }
256
  if (movm_args & movm_d2_bit)
257
    {
258
      fi->saved_regs[D2_REGNUM] = fi->frame + offset;
259
      offset += 4;
260
    }
261
  if (AM33_MODE)
262
    {
263
      if (movm_args & movm_exother_bit)
264
        {
265
          fi->saved_regs[MCVF_REGNUM]   = fi->frame + offset;
266
          fi->saved_regs[MCRL_REGNUM]   = fi->frame + offset + 4;
267
          fi->saved_regs[MCRH_REGNUM]   = fi->frame + offset + 8;
268
          fi->saved_regs[MDRQ_REGNUM]   = fi->frame + offset + 12;
269
          fi->saved_regs[E0_REGNUM + 1] = fi->frame + offset + 16;
270
          fi->saved_regs[E0_REGNUM + 0] = fi->frame + offset + 20;
271
          offset += 24;
272
        }
273
      if (movm_args & movm_exreg1_bit)
274
        {
275
          fi->saved_regs[E0_REGNUM + 7] = fi->frame + offset;
276
          fi->saved_regs[E0_REGNUM + 6] = fi->frame + offset + 4;
277
          fi->saved_regs[E0_REGNUM + 5] = fi->frame + offset + 8;
278
          fi->saved_regs[E0_REGNUM + 4] = fi->frame + offset + 12;
279
          offset += 16;
280
        }
281
      if (movm_args & movm_exreg0_bit)
282
        {
283
          fi->saved_regs[E0_REGNUM + 3] = fi->frame + offset;
284
          fi->saved_regs[E0_REGNUM + 2] = fi->frame + offset + 4;
285
          offset += 8;
286
        }
287
    }
288
}
289
 
290
 
291
/* The main purpose of this file is dealing with prologues to extract
292
   information about stack frames and saved registers.
293
 
294
   In gcc/config/mn13000/mn10300.c, the expand_prologue prologue
295
   function is pretty readable, and has a nice explanation of how the
296
   prologue is generated.  The prologues generated by that code will
297
   have the following form (NOTE: the current code doesn't handle all
298
   this!):
299
 
300
   + If this is an old-style varargs function, then its arguments
301
     need to be flushed back to the stack:
302
 
303
        mov d0,(4,sp)
304
        mov d1,(4,sp)
305
 
306
   + If we use any of the callee-saved registers, save them now.
307
 
308
        movm [some callee-saved registers],(sp)
309
 
310
   + If we have any floating-point registers to save:
311
 
312
     - Decrement the stack pointer to reserve space for the registers.
313
       If the function doesn't need a frame pointer, we may combine
314
       this with the adjustment that reserves space for the frame.
315
 
316
        add -SIZE, sp
317
 
318
     - Save the floating-point registers.  We have two possible
319
       strategies:
320
 
321
       . Save them at fixed offset from the SP:
322
 
323
        fmov fsN,(OFFSETN,sp)
324
        fmov fsM,(OFFSETM,sp)
325
        ...
326
 
327
       Note that, if OFFSETN happens to be zero, you'll get the
328
       different opcode: fmov fsN,(sp)
329
 
330
       . Or, set a0 to the start of the save area, and then use
331
       post-increment addressing to save the FP registers.
332
 
333
        mov sp, a0
334
        add SIZE, a0
335
        fmov fsN,(a0+)
336
        fmov fsM,(a0+)
337
        ...
338
 
339
   + If the function needs a frame pointer, we set it here.
340
 
341
        mov sp, a3
342
 
343
   + Now we reserve space for the stack frame proper.  This could be
344
     merged into the `add -SIZE, sp' instruction for FP saves up
345
     above, unless we needed to set the frame pointer in the previous
346
     step, or the frame is so large that allocating the whole thing at
347
     once would put the FP register save slots out of reach of the
348
     addressing mode (128 bytes).
349
 
350
        add -SIZE, sp
351
 
352
   One day we might keep the stack pointer constant, that won't
353
   change the code for prologues, but it will make the frame
354
   pointerless case much more common.  */
355
 
356
/* Analyze the prologue to determine where registers are saved,
357
   the end of the prologue, etc etc.  Return the end of the prologue
358
   scanned.
359
 
360
   We store into FI (if non-null) several tidbits of information:
361
 
362
   * stack_size -- size of this stack frame.  Note that if we stop in
363
   certain parts of the prologue/epilogue we may claim the size of the
364
   current frame is zero.  This happens when the current frame has
365
   not been allocated yet or has already been deallocated.
366
 
367
   * fsr -- Addresses of registers saved in the stack by this frame.
368
 
369
   * status -- A (relatively) generic status indicator.  It's a bitmask
370
   with the following bits:
371
 
372
   MY_FRAME_IN_SP: The base of the current frame is actually in
373
   the stack pointer.  This can happen for frame pointerless
374
   functions, or cases where we're stopped in the prologue/epilogue
375
   itself.  For these cases mn10300_analyze_prologue will need up
376
   update fi->frame before returning or analyzing the register
377
   save instructions.
378
 
379
   MY_FRAME_IN_FP: The base of the current frame is in the
380
   frame pointer register ($a3).
381
 
382
   NO_MORE_FRAMES: Set this if the current frame is "start" or
383
   if the first instruction looks like mov <imm>,sp.  This tells
384
   frame chain to not bother trying to unwind past this frame.  */
385
 
386
static CORE_ADDR
387
mn10300_analyze_prologue (struct frame_info *fi, CORE_ADDR pc)
388
{
389
  CORE_ADDR func_addr, func_end, addr, stop;
390
  CORE_ADDR stack_size;
391
  int imm_size;
392
  unsigned char buf[4];
393
  int status, movm_args = 0;
394
  char *name;
395
 
396
  /* Use the PC in the frame if it's provided to look up the
397
     start of this function.  */
398
  pc = (fi ? fi->pc : pc);
399
 
400
  /* Find the start of this function.  */
401
  status = find_pc_partial_function (pc, &name, &func_addr, &func_end);
402
 
403
  /* Do nothing if we couldn't find the start of this function or if we're
404
     stopped at the first instruction in the prologue.  */
405
  if (status == 0)
406
    {
407
      return pc;
408
    }
409
 
410
  /* If we're in start, then give up.  */
411
  if (strcmp (name, "start") == 0)
412
    {
413
      if (fi != NULL)
414
        fi->extra_info->status = NO_MORE_FRAMES;
415
      return pc;
416
    }
417
 
418
  /* At the start of a function our frame is in the stack pointer.  */
419
  if (fi)
420
    fi->extra_info->status = MY_FRAME_IN_SP;
421
 
422
  /* Get the next two bytes into buf, we need two because rets is a two
423
     byte insn and the first isn't enough to uniquely identify it.  */
424
  status = read_memory_nobpt (pc, buf, 2);
425
  if (status != 0)
426
    return pc;
427
 
428
  /* If we're physically on an "rets" instruction, then our frame has
429
     already been deallocated.  Note this can also be true for retf
430
     and ret if they specify a size of zero.
431
 
432
     In this case fi->frame is bogus, we need to fix it.  */
433
  if (fi && buf[0] == 0xf0 && buf[1] == 0xfc)
434
    {
435
      if (fi->next == NULL)
436
        fi->frame = read_sp ();
437
      return fi->pc;
438
    }
439
 
440
  /* Similarly if we're stopped on the first insn of a prologue as our
441
     frame hasn't been allocated yet.  */
442
  if (fi && fi->pc == func_addr)
443
    {
444
      if (fi->next == NULL)
445
        fi->frame = read_sp ();
446
      return fi->pc;
447
    }
448
 
449
  /* Figure out where to stop scanning.  */
450
  stop = fi ? fi->pc : func_end;
451
 
452
  /* Don't walk off the end of the function.  */
453
  stop = stop > func_end ? func_end : stop;
454
 
455
  /* Start scanning on the first instruction of this function.  */
456
  addr = func_addr;
457
 
458
  /* Suck in two bytes.  */
459
  status = read_memory_nobpt (addr, buf, 2);
460
  if (status != 0)
461
    {
462
      fix_frame_pointer (fi, 0);
463
      return addr;
464
    }
465
 
466
  /* First see if this insn sets the stack pointer from a register; if
467
     so, it's probably the initialization of the stack pointer in _start,
468
     so mark this as the bottom-most frame.  */
469
  if (buf[0] == 0xf2 && (buf[1] & 0xf3) == 0xf0)
470
    {
471
      if (fi)
472
        fi->extra_info->status = NO_MORE_FRAMES;
473
      return addr;
474
    }
475
 
476
  /* Now look for movm [regs],sp, which saves the callee saved registers.
477
 
478
     At this time we don't know if fi->frame is valid, so we only note
479
     that we encountered a movm instruction.  Later, we'll set the entries
480
     in fsr.regs as needed.  */
481
  if (buf[0] == 0xcf)
482
    {
483
      /* Extract the register list for the movm instruction.  */
484
      status = read_memory_nobpt (addr + 1, buf, 1);
485
      movm_args = *buf;
486
 
487
      addr += 2;
488
 
489
      /* Quit now if we're beyond the stop point.  */
490
      if (addr >= stop)
491
        {
492
          /* Fix fi->frame since it's bogus at this point.  */
493
          if (fi && fi->next == NULL)
494
            fi->frame = read_sp ();
495
 
496
          /* Note if/where callee saved registers were saved.  */
497
          set_movm_offsets (fi, movm_args);
498
          return addr;
499
        }
500
 
501
      /* Get the next two bytes so the prologue scan can continue.  */
502
      status = read_memory_nobpt (addr, buf, 2);
503
      if (status != 0)
504
        {
505
          /* Fix fi->frame since it's bogus at this point.  */
506
          if (fi && fi->next == NULL)
507
            fi->frame = read_sp ();
508
 
509
          /* Note if/where callee saved registers were saved.  */
510
          set_movm_offsets (fi, movm_args);
511
          return addr;
512
        }
513
    }
514
 
515
  /* Now see if we set up a frame pointer via "mov sp,a3" */
516
  if (buf[0] == 0x3f)
517
    {
518
      addr += 1;
519
 
520
      /* The frame pointer is now valid.  */
521
      if (fi)
522
        {
523
          fi->extra_info->status |= MY_FRAME_IN_FP;
524
          fi->extra_info->status &= ~MY_FRAME_IN_SP;
525
        }
526
 
527
      /* Quit now if we're beyond the stop point.  */
528
      if (addr >= stop)
529
        {
530
          /* Fix fi->frame if it's bogus at this point.  */
531
          fix_frame_pointer (fi, 0);
532
 
533
          /* Note if/where callee saved registers were saved.  */
534
          set_movm_offsets (fi, movm_args);
535
          return addr;
536
        }
537
 
538
      /* Get two more bytes so scanning can continue.  */
539
      status = read_memory_nobpt (addr, buf, 2);
540
      if (status != 0)
541
        {
542
          /* Fix fi->frame if it's bogus at this point.  */
543
          fix_frame_pointer (fi, 0);
544
 
545
          /* Note if/where callee saved registers were saved.  */
546
          set_movm_offsets (fi, movm_args);
547
          return addr;
548
        }
549
    }
550
 
551
  /* Next we should allocate the local frame.  No more prologue insns
552
     are found after allocating the local frame.
553
 
554
     Search for add imm8,sp (0xf8feXX)
555
     or add imm16,sp (0xfafeXXXX)
556
     or add imm32,sp (0xfcfeXXXXXXXX).
557
 
558
     If none of the above was found, then this prologue has no
559
     additional stack.  */
560
 
561
  status = read_memory_nobpt (addr, buf, 2);
562
  if (status != 0)
563
    {
564
      /* Fix fi->frame if it's bogus at this point.  */
565
      fix_frame_pointer (fi, 0);
566
 
567
      /* Note if/where callee saved registers were saved.  */
568
      set_movm_offsets (fi, movm_args);
569
      return addr;
570
    }
571
 
572
  imm_size = 0;
573
  if (buf[0] == 0xf8 && buf[1] == 0xfe)
574
    imm_size = 1;
575
  else if (buf[0] == 0xfa && buf[1] == 0xfe)
576
    imm_size = 2;
577
  else if (buf[0] == 0xfc && buf[1] == 0xfe)
578
    imm_size = 4;
579
 
580
  if (imm_size != 0)
581
    {
582
      /* Suck in imm_size more bytes, they'll hold the size of the
583
         current frame.  */
584
      status = read_memory_nobpt (addr + 2, buf, imm_size);
585
      if (status != 0)
586
        {
587
          /* Fix fi->frame if it's bogus at this point.  */
588
          fix_frame_pointer (fi, 0);
589
 
590
          /* Note if/where callee saved registers were saved.  */
591
          set_movm_offsets (fi, movm_args);
592
          return addr;
593
        }
594
 
595
      /* Note the size of the stack in the frame info structure.  */
596
      stack_size = extract_signed_integer (buf, imm_size);
597
      if (fi)
598
        fi->extra_info->stack_size = stack_size;
599
 
600
      /* We just consumed 2 + imm_size bytes.  */
601
      addr += 2 + imm_size;
602
 
603
      /* No more prologue insns follow, so begin preparation to return.  */
604
      /* Fix fi->frame if it's bogus at this point.  */
605
      fix_frame_pointer (fi, stack_size);
606
 
607
      /* Note if/where callee saved registers were saved.  */
608
      set_movm_offsets (fi, movm_args);
609
      return addr;
610
    }
611
 
612
  /* We never found an insn which allocates local stack space, regardless
613
     this is the end of the prologue.  */
614
  /* Fix fi->frame if it's bogus at this point.  */
615
  fix_frame_pointer (fi, 0);
616
 
617
  /* Note if/where callee saved registers were saved.  */
618
  set_movm_offsets (fi, movm_args);
619
  return addr;
620
}
621
 
622
 
623
/* Function: saved_regs_size
624
   Return the size in bytes of the register save area, based on the
625
   saved_regs array in FI.  */
626
static int
627
saved_regs_size (struct frame_info *fi)
628
{
629
  int adjust = 0;
630
  int i;
631
 
632
  /* Reserve four bytes for every register saved.  */
633
  for (i = 0; i < NUM_REGS; i++)
634
    if (fi->saved_regs[i])
635
      adjust += 4;
636
 
637
  /* If we saved LIR, then it's most likely we used a `movm'
638
     instruction with the `other' bit set, in which case the SP is
639
     decremented by an extra four bytes, "to simplify calculation
640
     of the transfer area", according to the processor manual.  */
641
  if (fi->saved_regs[LIR_REGNUM])
642
    adjust += 4;
643
 
644
  return adjust;
645
}
646
 
647
 
648
/* Function: frame_chain
649
   Figure out and return the caller's frame pointer given current
650
   frame_info struct.
651
 
652
   We don't handle dummy frames yet but we would probably just return the
653
   stack pointer that was in use at the time the function call was made?  */
654
 
655
static CORE_ADDR
656
mn10300_frame_chain (struct frame_info *fi)
657
{
658
  struct frame_info *dummy;
659
  /* Walk through the prologue to determine the stack size,
660
     location of saved registers, end of the prologue, etc.  */
661
  if (fi->extra_info->status == 0)
662
    mn10300_analyze_prologue (fi, (CORE_ADDR) 0);
663
 
664
  /* Quit now if mn10300_analyze_prologue set NO_MORE_FRAMES.  */
665
  if (fi->extra_info->status & NO_MORE_FRAMES)
666
    return 0;
667
 
668
  /* Now that we've analyzed our prologue, determine the frame
669
     pointer for our caller.
670
 
671
     If our caller has a frame pointer, then we need to
672
     find the entry value of $a3 to our function.
673
 
674
     If fsr.regs[A3_REGNUM] is nonzero, then it's at the memory
675
     location pointed to by fsr.regs[A3_REGNUM].
676
 
677
     Else it's still in $a3.
678
 
679
     If our caller does not have a frame pointer, then his
680
     frame base is fi->frame + -caller's stack size.  */
681
 
682
  /* The easiest way to get that info is to analyze our caller's frame.
683
     So we set up a dummy frame and call mn10300_analyze_prologue to
684
     find stuff for us.  */
685
  dummy = analyze_dummy_frame (FRAME_SAVED_PC (fi), fi->frame);
686
 
687
  if (dummy->extra_info->status & MY_FRAME_IN_FP)
688
    {
689
      /* Our caller has a frame pointer.  So find the frame in $a3 or
690
         in the stack.  */
691
      if (fi->saved_regs[A3_REGNUM])
692
        return (read_memory_integer (fi->saved_regs[A3_REGNUM], REGISTER_SIZE));
693
      else
694
        return read_register (A3_REGNUM);
695
    }
696
  else
697
    {
698
      int adjust = saved_regs_size (fi);
699
 
700
      /* Our caller does not have a frame pointer.  So his frame starts
701
         at the base of our frame (fi->frame) + register save space
702
         + <his size>.  */
703
      return fi->frame + adjust + -dummy->extra_info->stack_size;
704
    }
705
}
706
 
707
/* Function: skip_prologue
708
   Return the address of the first inst past the prologue of the function.  */
709
 
710
static CORE_ADDR
711
mn10300_skip_prologue (CORE_ADDR pc)
712
{
713
  /* We used to check the debug symbols, but that can lose if
714
     we have a null prologue.  */
715
  return mn10300_analyze_prologue (NULL, pc);
716
}
717
 
718
/* generic_pop_current_frame calls this function if the current
719
   frame isn't a dummy frame.  */
720
static void
721
mn10300_pop_frame_regular (struct frame_info *frame)
722
{
723
  int regnum;
724
 
725
  write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
726
 
727
  /* Restore any saved registers.  */
728
  for (regnum = 0; regnum < NUM_REGS; regnum++)
729
    if (frame->saved_regs[regnum] != 0)
730
      {
731
        ULONGEST value;
732
 
733
        value = read_memory_unsigned_integer (frame->saved_regs[regnum],
734
                                              REGISTER_RAW_SIZE (regnum));
735
        write_register (regnum, value);
736
      }
737
 
738
  /* Actually cut back the stack.  */
739
  write_register (SP_REGNUM, FRAME_FP (frame));
740
 
741
  /* Don't we need to set the PC?!?  XXX FIXME.  */
742
}
743
 
744
/* Function: pop_frame
745
   This routine gets called when either the user uses the `return'
746
   command, or the call dummy breakpoint gets hit.  */
747
static void
748
mn10300_pop_frame (void)
749
{
750
  /* This function checks for and handles generic dummy frames, and
751
     calls back to our function for ordinary frames.  */
752
  generic_pop_current_frame (mn10300_pop_frame_regular);
753
 
754
  /* Throw away any cached frame information.  */
755
  flush_cached_frames ();
756
}
757
 
758
/* Function: push_arguments
759
   Setup arguments for a call to the target.  Arguments go in
760
   order on the stack.  */
761
 
762
static CORE_ADDR
763
mn10300_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
764
                        int struct_return, CORE_ADDR struct_addr)
765
{
766
  int argnum = 0;
767
  int len = 0;
768
  int stack_offset = 0;
769
  int regsused = struct_return ? 1 : 0;
770
 
771
  /* This should be a nop, but align the stack just in case something
772
     went wrong.  Stacks are four byte aligned on the mn10300.  */
773
  sp &= ~3;
774
 
775
  /* Now make space on the stack for the args.
776
 
777
     XXX This doesn't appear to handle pass-by-invisible reference
778
     arguments.  */
779
  for (argnum = 0; argnum < nargs; argnum++)
780
    {
781
      int arg_length = (TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 3) & ~3;
782
 
783
      while (regsused < 2 && arg_length > 0)
784
        {
785
          regsused++;
786
          arg_length -= 4;
787
        }
788
      len += arg_length;
789
    }
790
 
791
  /* Allocate stack space.  */
792
  sp -= len;
793
 
794
  regsused = struct_return ? 1 : 0;
795
  /* Push all arguments onto the stack. */
796
  for (argnum = 0; argnum < nargs; argnum++)
797
    {
798
      int len;
799
      char *val;
800
 
801
      /* XXX Check this.  What about UNIONS?  */
802
      if (TYPE_CODE (VALUE_TYPE (*args)) == TYPE_CODE_STRUCT
803
          && TYPE_LENGTH (VALUE_TYPE (*args)) > 8)
804
        {
805
          /* XXX Wrong, we want a pointer to this argument.  */
806
          len = TYPE_LENGTH (VALUE_TYPE (*args));
807
          val = (char *) VALUE_CONTENTS (*args);
808
        }
809
      else
810
        {
811
          len = TYPE_LENGTH (VALUE_TYPE (*args));
812
          val = (char *) VALUE_CONTENTS (*args);
813
        }
814
 
815
      while (regsused < 2 && len > 0)
816
        {
817
          write_register (regsused, extract_unsigned_integer (val, 4));
818
          val += 4;
819
          len -= 4;
820
          regsused++;
821
        }
822
 
823
      while (len > 0)
824
        {
825
          write_memory (sp + stack_offset, val, 4);
826
          len -= 4;
827
          val += 4;
828
          stack_offset += 4;
829
        }
830
 
831
      args++;
832
    }
833
 
834
  /* Make space for the flushback area.  */
835
  sp -= 8;
836
  return sp;
837
}
838
 
839
/* Function: push_return_address (pc)
840
   Set up the return address for the inferior function call.
841
   Needed for targets where we don't actually execute a JSR/BSR instruction */
842
 
843
static CORE_ADDR
844
mn10300_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
845
{
846
  unsigned char buf[4];
847
 
848
  store_unsigned_integer (buf, 4, CALL_DUMMY_ADDRESS ());
849
  write_memory (sp - 4, buf, 4);
850
  return sp - 4;
851
}
852
 
853
/* Function: store_struct_return (addr,sp)
854
   Store the structure value return address for an inferior function
855
   call.  */
856
 
857
static void
858
mn10300_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
859
{
860
  /* The structure return address is passed as the first argument.  */
861
  write_register (0, addr);
862
}
863
 
864
/* Function: frame_saved_pc
865
   Find the caller of this frame.  We do this by seeing if RP_REGNUM
866
   is saved in the stack anywhere, otherwise we get it from the
867
   registers.  If the inner frame is a dummy frame, return its PC
868
   instead of RP, because that's where "caller" of the dummy-frame
869
   will be found.  */
870
 
871
static CORE_ADDR
872
mn10300_frame_saved_pc (struct frame_info *fi)
873
{
874
  int adjust = saved_regs_size (fi);
875
 
876
  return (read_memory_integer (fi->frame + adjust, REGISTER_SIZE));
877
}
878
 
879
/* Function: mn10300_init_extra_frame_info
880
   Setup the frame's frame pointer, pc, and frame addresses for saved
881
   registers.  Most of the work is done in mn10300_analyze_prologue().
882
 
883
   Note that when we are called for the last frame (currently active frame),
884
   that fi->pc and fi->frame will already be setup.  However, fi->frame will
885
   be valid only if this routine uses FP.  For previous frames, fi-frame will
886
   always be correct.  mn10300_analyze_prologue will fix fi->frame if
887
   it's not valid.
888
 
889
   We can be called with the PC in the call dummy under two circumstances.
890
   First, during normal backtracing, second, while figuring out the frame
891
   pointer just prior to calling the target function (see run_stack_dummy).  */
892
 
893
static void
894
mn10300_init_extra_frame_info (int fromleaf, struct frame_info *fi)
895
{
896
  if (fi->next)
897
    fi->pc = FRAME_SAVED_PC (fi->next);
898
 
899
  frame_saved_regs_zalloc (fi);
900
  fi->extra_info = (struct frame_extra_info *)
901
    frame_obstack_alloc (sizeof (struct frame_extra_info));
902
 
903
  fi->extra_info->status = 0;
904
  fi->extra_info->stack_size = 0;
905
 
906
  mn10300_analyze_prologue (fi, 0);
907
}
908
 
909
 
910
/* This function's job is handled by init_extra_frame_info.  */
911
static void
912
mn10300_frame_init_saved_regs (struct frame_info *frame)
913
{
914
}
915
 
916
 
917
/* Function: mn10300_virtual_frame_pointer
918
   Return the register that the function uses for a frame pointer,
919
   plus any necessary offset to be applied to the register before
920
   any frame pointer offsets.  */
921
 
922
static void
923
mn10300_virtual_frame_pointer (CORE_ADDR pc,
924
                               int *reg,
925
                               LONGEST *offset)
926
{
927
  struct frame_info *dummy = analyze_dummy_frame (pc, 0);
928
  /* Set up a dummy frame_info, Analyze the prolog and fill in the
929
     extra info.  */
930
  /* Results will tell us which type of frame it uses.  */
931
  if (dummy->extra_info->status & MY_FRAME_IN_SP)
932
    {
933
      *reg = SP_REGNUM;
934
      *offset = -(dummy->extra_info->stack_size);
935
    }
936
  else
937
    {
938
      *reg = A3_REGNUM;
939
      *offset = 0;
940
    }
941
}
942
 
943
static int
944
mn10300_reg_struct_has_addr (int gcc_p, struct type *type)
945
{
946
  return (TYPE_LENGTH (type) > 8);
947
}
948
 
949
static struct type *
950
mn10300_register_virtual_type (int reg)
951
{
952
  return builtin_type_int;
953
}
954
 
955
static int
956
mn10300_register_byte (int reg)
957
{
958
  return (reg * 4);
959
}
960
 
961
static int
962
mn10300_register_virtual_size (int reg)
963
{
964
  return 4;
965
}
966
 
967
static int
968
mn10300_register_raw_size (int reg)
969
{
970
  return 4;
971
}
972
 
973
/* If DWARF2 is a register number appearing in Dwarf2 debug info, then
974
   mn10300_dwarf2_reg_to_regnum (DWARF2) is the corresponding GDB
975
   register number.  Why don't Dwarf2 and GDB use the same numbering?
976
   Who knows?  But since people have object files lying around with
977
   the existing Dwarf2 numbering, and other people have written stubs
978
   to work with the existing GDB, neither of them can change.  So we
979
   just have to cope.  */
980
static int
981
mn10300_dwarf2_reg_to_regnum (int dwarf2)
982
{
983
  /* This table is supposed to be shaped like the REGISTER_NAMES
984
     initializer in gcc/config/mn10300/mn10300.h.  Registers which
985
     appear in GCC's numbering, but have no counterpart in GDB's
986
     world, are marked with a -1.  */
987
  static int dwarf2_to_gdb[] = {
988
    0,  1,  2,  3,  4,  5,  6,  7, -1, 8,
989
    15, 16, 17, 18, 19, 20, 21, 22
990
  };
991
  int gdb;
992
 
993
  if (dwarf2 < 0
994
      || dwarf2 >= (sizeof (dwarf2_to_gdb) / sizeof (dwarf2_to_gdb[0]))
995
      || dwarf2_to_gdb[dwarf2] == -1)
996
    internal_error (__FILE__, __LINE__,
997
                    "bogus register number in debug info: %d", dwarf2);
998
 
999
  return dwarf2_to_gdb[dwarf2];
1000
}
1001
 
1002
static void
1003
mn10300_print_register (const char *name, int regnum, int reg_width)
1004
{
1005
  char *raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
1006
 
1007
  if (reg_width)
1008
    printf_filtered ("%*s: ", reg_width, name);
1009
  else
1010
    printf_filtered ("%s: ", name);
1011
 
1012
  /* Get the data */
1013
  if (!frame_register_read (selected_frame, regnum, raw_buffer))
1014
    {
1015
      printf_filtered ("[invalid]");
1016
      return;
1017
    }
1018
  else
1019
    {
1020
      int byte;
1021
      if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1022
        {
1023
          for (byte = REGISTER_RAW_SIZE (regnum) - REGISTER_VIRTUAL_SIZE (regnum);
1024
               byte < REGISTER_RAW_SIZE (regnum);
1025
               byte++)
1026
            printf_filtered ("%02x", (unsigned char) raw_buffer[byte]);
1027
        }
1028
      else
1029
        {
1030
          for (byte = REGISTER_VIRTUAL_SIZE (regnum) - 1;
1031
               byte >= 0;
1032
               byte--)
1033
            printf_filtered ("%02x", (unsigned char) raw_buffer[byte]);
1034
        }
1035
    }
1036
}
1037
 
1038
static void
1039
mn10300_do_registers_info (int regnum, int fpregs)
1040
{
1041
  if (regnum >= 0)
1042
    {
1043
      const char *name = REGISTER_NAME (regnum);
1044
      if (name == NULL || name[0] == '\0')
1045
        error ("Not a valid register for the current processor type");
1046
      mn10300_print_register (name, regnum, 0);
1047
      printf_filtered ("\n");
1048
    }
1049
  else
1050
    {
1051
      /* print registers in an array 4x8 */
1052
      int r;
1053
      int reg;
1054
      const int nr_in_row = 4;
1055
      const int reg_width = 4;
1056
      for (r = 0; r < NUM_REGS; r += nr_in_row)
1057
        {
1058
          int c;
1059
          int printing = 0;
1060
          int padding = 0;
1061
          for (c = r; c < r + nr_in_row; c++)
1062
            {
1063
              const char *name = REGISTER_NAME (c);
1064
              if (name != NULL && *name != '\0')
1065
                {
1066
                  printing = 1;
1067
                  while (padding > 0)
1068
                    {
1069
                      printf_filtered (" ");
1070
                      padding--;
1071
                    }
1072
                  mn10300_print_register (name, c, reg_width);
1073
                  printf_filtered (" ");
1074
                }
1075
              else
1076
                {
1077
                  padding += (reg_width + 2 + 8 + 1);
1078
                }
1079
            }
1080
          if (printing)
1081
            printf_filtered ("\n");
1082
        }
1083
    }
1084
}
1085
 
1086
/* Dump out the mn10300 speciic architecture information. */
1087
 
1088
static void
1089
mn10300_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
1090
{
1091
  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1092
  fprintf_unfiltered (file, "mn10300_dump_tdep: am33_mode = %d\n",
1093
                      tdep->am33_mode);
1094
}
1095
 
1096
static struct gdbarch *
1097
mn10300_gdbarch_init (struct gdbarch_info info,
1098
                      struct gdbarch_list *arches)
1099
{
1100
  static LONGEST mn10300_call_dummy_words[] = { 0 };
1101
  struct gdbarch *gdbarch;
1102
  struct gdbarch_tdep *tdep = NULL;
1103
  int am33_mode;
1104
  gdbarch_register_name_ftype *register_name;
1105
  int mach;
1106
  int num_regs;
1107
 
1108
  arches = gdbarch_list_lookup_by_info (arches, &info);
1109
  if (arches != NULL)
1110
    return arches->gdbarch;
1111
  tdep = xmalloc (sizeof (struct gdbarch_tdep));
1112
  gdbarch = gdbarch_alloc (&info, tdep);
1113
 
1114
  if (info.bfd_arch_info != NULL
1115
      && info.bfd_arch_info->arch == bfd_arch_mn10300)
1116
    mach = info.bfd_arch_info->mach;
1117
  else
1118
    mach = 0;
1119
  switch (mach)
1120
    {
1121
    case 0:
1122
    case bfd_mach_mn10300:
1123
      am33_mode = 0;
1124
      register_name = mn10300_generic_register_name;
1125
      num_regs = 32;
1126
      break;
1127
    case bfd_mach_am33:
1128
      am33_mode = 1;
1129
      register_name = am33_register_name;
1130
      num_regs = 32;
1131
      break;
1132
    default:
1133
      internal_error (__FILE__, __LINE__,
1134
                      "mn10300_gdbarch_init: Unknown mn10300 variant");
1135
      return NULL; /* keep GCC happy. */
1136
    }
1137
 
1138
  /* Registers.  */
1139
  set_gdbarch_num_regs (gdbarch, num_regs);
1140
  set_gdbarch_register_name (gdbarch, register_name);
1141
  set_gdbarch_register_size (gdbarch, 4);
1142
  set_gdbarch_register_bytes (gdbarch,
1143
                              num_regs * gdbarch_register_size (gdbarch));
1144
  set_gdbarch_max_register_raw_size (gdbarch, 4);
1145
  set_gdbarch_register_raw_size (gdbarch, mn10300_register_raw_size);
1146
  set_gdbarch_register_byte (gdbarch, mn10300_register_byte);
1147
  set_gdbarch_max_register_virtual_size (gdbarch, 4);
1148
  set_gdbarch_register_virtual_size (gdbarch, mn10300_register_virtual_size);
1149
  set_gdbarch_register_virtual_type (gdbarch, mn10300_register_virtual_type);
1150
  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, mn10300_dwarf2_reg_to_regnum);
1151
  set_gdbarch_do_registers_info (gdbarch, mn10300_do_registers_info);
1152
  set_gdbarch_sp_regnum (gdbarch, 8);
1153
  set_gdbarch_pc_regnum (gdbarch, 9);
1154
  set_gdbarch_fp_regnum (gdbarch, 31);
1155
  set_gdbarch_virtual_frame_pointer (gdbarch, mn10300_virtual_frame_pointer);
1156
 
1157
  /* Breakpoints.  */
1158
  set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
1159
  set_gdbarch_function_start_offset (gdbarch, 0);
1160
  set_gdbarch_decr_pc_after_break (gdbarch, 0);
1161
 
1162
  /* Stack unwinding.  */
1163
  set_gdbarch_get_saved_register (gdbarch, generic_unwind_get_saved_register);
1164
  set_gdbarch_frame_chain_valid (gdbarch, generic_file_frame_chain_valid);
1165
  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1166
  set_gdbarch_frame_chain_valid (gdbarch, generic_file_frame_chain_valid);
1167
  set_gdbarch_saved_pc_after_call (gdbarch, mn10300_saved_pc_after_call);
1168
  set_gdbarch_init_extra_frame_info (gdbarch, mn10300_init_extra_frame_info);
1169
  set_gdbarch_init_frame_pc (gdbarch, init_frame_pc_noop);
1170
  set_gdbarch_frame_init_saved_regs (gdbarch, mn10300_frame_init_saved_regs);
1171
  set_gdbarch_frame_chain (gdbarch, mn10300_frame_chain);
1172
  set_gdbarch_frame_saved_pc (gdbarch, mn10300_frame_saved_pc);
1173
  set_gdbarch_deprecated_extract_return_value (gdbarch, mn10300_extract_return_value);
1174
  set_gdbarch_deprecated_extract_struct_value_address
1175
    (gdbarch, mn10300_extract_struct_value_address);
1176
  set_gdbarch_deprecated_store_return_value (gdbarch, mn10300_store_return_value);
1177
  set_gdbarch_store_struct_return (gdbarch, mn10300_store_struct_return);
1178
  set_gdbarch_pop_frame (gdbarch, mn10300_pop_frame);
1179
  set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
1180
  set_gdbarch_frame_args_skip (gdbarch, 0);
1181
  set_gdbarch_frame_args_address (gdbarch, default_frame_address);
1182
  set_gdbarch_frame_locals_address (gdbarch, default_frame_address);
1183
  set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
1184
  /* That's right, we're using the stack pointer as our frame pointer.  */
1185
  set_gdbarch_read_fp (gdbarch, generic_target_read_sp);
1186
 
1187
  /* Calling functions in the inferior from GDB.  */
1188
  set_gdbarch_call_dummy_p (gdbarch, 1);
1189
  set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
1190
  set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
1191
  set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
1192
  set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
1193
  set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
1194
  set_gdbarch_call_dummy_words (gdbarch, mn10300_call_dummy_words);
1195
  set_gdbarch_sizeof_call_dummy_words (gdbarch,
1196
                                       sizeof (mn10300_call_dummy_words));
1197
  set_gdbarch_call_dummy_length (gdbarch, 0);
1198
  set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
1199
  set_gdbarch_call_dummy_start_offset (gdbarch, 0);
1200
  set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_at_entry_point);
1201
  set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
1202
  set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
1203
  set_gdbarch_push_arguments (gdbarch, mn10300_push_arguments);
1204
  set_gdbarch_reg_struct_has_addr (gdbarch, mn10300_reg_struct_has_addr);
1205
  set_gdbarch_push_return_address (gdbarch, mn10300_push_return_address);
1206
  set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
1207
  set_gdbarch_use_struct_convention (gdbarch, mn10300_use_struct_convention);
1208
 
1209
  tdep->am33_mode = am33_mode;
1210
 
1211
  return gdbarch;
1212
}
1213
 
1214
void
1215
_initialize_mn10300_tdep (void)
1216
{
1217
/*  printf("_initialize_mn10300_tdep\n"); */
1218
 
1219
  tm_print_insn = print_insn_mn10300;
1220
 
1221
  register_gdbarch_init (bfd_arch_mn10300, mn10300_gdbarch_init);
1222
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.