~ubuntu-branches/ubuntu/karmic/insight/karmic

« back to all changes in this revision

Viewing changes to gdb/frv-tdep.c

  • Committer: Bazaar Package Importer
  • Author(s): Masayuki Hatta (mhatta)
  • Date: 2007-12-04 22:37:09 UTC
  • mfrom: (1.2.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20071204223709-jxj396d1ox92s8ox
Tags: 6.7.1.dfsg.1-1
* New upstream release.
* This typo has been fixed in the upstream - closes: #314037.
* Removed non-free documents (GFDL'd with Invariant Sections, etc.).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* Target-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger.
2
2
 
3
 
   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
3
   Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
4
4
 
5
5
   This file is part of GDB.
6
6
 
7
7
   This program is free software; you can redistribute it and/or modify
8
8
   it under the terms of the GNU General Public License as published by
9
 
   the Free Software Foundation; either version 2 of the License, or
 
9
   the Free Software Foundation; either version 3 of the License, or
10
10
   (at your option) any later version.
11
11
 
12
12
   This program is distributed in the hope that it will be useful,
15
15
   GNU General Public License for more details.
16
16
 
17
17
   You should have received a copy of the GNU General Public License
18
 
   along with this program; if not, write to the Free Software
19
 
   Foundation, Inc., 51 Franklin Street, Fifth Floor,
20
 
   Boston, MA 02110-1301, USA.  */
 
18
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
19
 
22
20
#include "defs.h"
23
21
#include "gdb_string.h"
43
41
 
44
42
extern void _initialize_frv_tdep (void);
45
43
 
46
 
static gdbarch_init_ftype frv_gdbarch_init;
47
 
 
48
 
static gdbarch_register_name_ftype frv_register_name;
49
 
static gdbarch_breakpoint_from_pc_ftype frv_breakpoint_from_pc;
50
 
static gdbarch_adjust_breakpoint_address_ftype frv_gdbarch_adjust_breakpoint_address;
51
 
static gdbarch_skip_prologue_ftype frv_skip_prologue;
52
 
 
53
 
 
54
44
struct frv_unwind_cache         /* was struct frame_extra_info */
55
45
  {
56
46
    /* The previous frame's inner-most stack address.  Used as this
120
110
    return -1;
121
111
  else
122
112
    {
 
113
      struct regcache *regcache = get_current_regcache ();
 
114
 
123
115
      if (interp_addr != NULL)
124
116
        {
125
117
          ULONGEST val;
126
 
          regcache_cooked_read_unsigned (current_regcache,
 
118
          regcache_cooked_read_unsigned (regcache,
127
119
                                         fdpic_loadmap_interp_regnum, &val);
128
120
          *interp_addr = val;
129
121
        }
130
122
      if (exec_addr != NULL)
131
123
        {
132
124
          ULONGEST val;
133
 
          regcache_cooked_read_unsigned (current_regcache,
 
125
          regcache_cooked_read_unsigned (regcache,
134
126
                                         fdpic_loadmap_exec_regnum, &val);
135
127
          *exec_addr = val;
136
128
        }
402
394
      H_SPR_FNER1,              /* fner1_regnum */
403
395
    };
404
396
 
405
 
  gdb_assert (reg >= 0 && reg < NUM_REGS);
 
397
  gdb_assert (reg >= 0 && reg < gdbarch_num_regs (current_gdbarch));
406
398
 
407
399
  if (first_gpr_regnum <= reg && reg <= last_gpr_regnum)
408
400
    return reg - first_gpr_regnum + SIM_FRV_GR0_REGNUM;
443
435
   constraint that a break instruction must not appear as any but the
444
436
   first instruction in the bundle.  */
445
437
static CORE_ADDR
446
 
frv_gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
 
438
frv_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
447
439
{
448
440
  int count = max_instrs_per_bundle;
449
441
  CORE_ADDR addr = bpaddr - frv_instr_size;
1024
1016
  info->saved_regs = trad_frame_alloc_saved_regs (next_frame);
1025
1017
 
1026
1018
  /* Prologue analysis does the rest...  */
1027
 
  frv_analyze_prologue (frame_func_unwind (next_frame), next_frame, info);
 
1019
  frv_analyze_prologue (frame_func_unwind (next_frame, NORMAL_FRAME),
 
1020
                        next_frame, info);
1028
1021
 
1029
1022
  return info;
1030
1023
}
1054
1047
}
1055
1048
 
1056
1049
static CORE_ADDR
1057
 
frv_extract_struct_value_address (struct regcache *regcache)
1058
 
{
1059
 
  ULONGEST addr;
1060
 
  regcache_cooked_read_unsigned (regcache, struct_return_regnum, &addr);
1061
 
  return addr;
1062
 
}
1063
 
 
1064
 
static void
1065
 
frv_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1066
 
{
1067
 
  write_register (struct_return_regnum, addr);
1068
 
}
1069
 
 
1070
 
static CORE_ADDR
1071
1050
frv_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1072
1051
{
1073
1052
  /* Require dword alignment.  */
1304
1283
int
1305
1284
frv_stopped_data_address (CORE_ADDR *addr_p)
1306
1285
{
 
1286
  struct frame_info *frame = get_current_frame ();
1307
1287
  CORE_ADDR brr, dbar0, dbar1, dbar2, dbar3;
1308
1288
 
1309
 
  brr = read_register (brr_regnum);
1310
 
  dbar0 = read_register (dbar0_regnum);
1311
 
  dbar1 = read_register (dbar1_regnum);
1312
 
  dbar2 = read_register (dbar2_regnum);
1313
 
  dbar3 = read_register (dbar3_regnum);
 
1289
  brr = get_frame_register_unsigned (frame, brr_regnum);
 
1290
  dbar0 = get_frame_register_unsigned (frame, dbar0_regnum);
 
1291
  dbar1 = get_frame_register_unsigned (frame, dbar1_regnum);
 
1292
  dbar2 = get_frame_register_unsigned (frame, dbar2_regnum);
 
1293
  dbar3 = get_frame_register_unsigned (frame, dbar3_regnum);
1314
1294
 
1315
1295
  if (brr & (1<<11))
1316
1296
    *addr_p = dbar0;
1354
1334
  struct frame_id id;
1355
1335
 
1356
1336
  /* The FUNC is easy.  */
1357
 
  func = frame_func_unwind (next_frame);
 
1337
  func = frame_func_unwind (next_frame, NORMAL_FRAME);
1358
1338
 
1359
1339
  /* Check if the stack is empty.  */
1360
1340
  msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
1505
1485
 
1506
1486
  set_gdbarch_skip_prologue (gdbarch, frv_skip_prologue);
1507
1487
  set_gdbarch_breakpoint_from_pc (gdbarch, frv_breakpoint_from_pc);
1508
 
  set_gdbarch_adjust_breakpoint_address (gdbarch, frv_gdbarch_adjust_breakpoint_address);
 
1488
  set_gdbarch_adjust_breakpoint_address
 
1489
    (gdbarch, frv_adjust_breakpoint_address);
1509
1490
 
1510
1491
  set_gdbarch_deprecated_use_struct_convention (gdbarch, always_use_struct_convention);
1511
1492
  set_gdbarch_extract_return_value (gdbarch, frv_extract_return_value);
1512
1493
 
1513
 
  set_gdbarch_deprecated_store_struct_return (gdbarch, frv_store_struct_return);
1514
1494
  set_gdbarch_store_return_value (gdbarch, frv_store_return_value);
1515
 
  set_gdbarch_deprecated_extract_struct_value_address (gdbarch, frv_extract_struct_value_address);
1516
1495
 
1517
1496
  /* Frame stuff.  */
1518
1497
  set_gdbarch_unwind_pc (gdbarch, frv_unwind_pc);
1529
1508
  /* Settings that should be unnecessary.  */
1530
1509
  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1531
1510
 
1532
 
  set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
1533
 
 
1534
 
  set_gdbarch_remote_translate_xfer_address
1535
 
    (gdbarch, generic_remote_translate_xfer_address);
1536
 
 
1537
1511
  /* Hardware watchpoint / breakpoint support.  */
1538
1512
  switch (info.bfd_arch_info->mach)
1539
1513
    {