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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [gdb/] [amd64bsd-nat.c] - Blame information for rev 25

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 25 jlechner
/* Native-dependent code for AMD64 BSD's.
2
 
3
   Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
4
 
5
   This file is part of GDB.
6
 
7
   This program is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
11
 
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
16
 
17
   You should have received a copy of the GNU General Public License
18
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
 
20
#include "defs.h"
21
#include "inferior.h"
22
#include "regcache.h"
23
#include "target.h"
24
 
25
/* We include <signal.h> to make sure `struct fxsave64' is defined on
26
   NetBSD, since NetBSD's <machine/reg.h> needs it.  */
27
#include "gdb_assert.h"
28
#include <signal.h>
29
#include <sys/types.h>
30
#include <sys/ptrace.h>
31
#include <machine/reg.h>
32
 
33
#include "amd64-tdep.h"
34
#include "amd64-nat.h"
35
#include "inf-ptrace.h"
36
 
37
 
38
/* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
39
   for all registers (including the floating-point registers).  */
40
 
41
static void
42
amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
43
{
44
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
45
 
46
  if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
47
    {
48
      struct reg regs;
49
 
50
      if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
51
                  (PTRACE_TYPE_ARG3) &regs, 0) == -1)
52
        perror_with_name (_("Couldn't get registers"));
53
 
54
      amd64_supply_native_gregset (regcache, &regs, -1);
55
      if (regnum != -1)
56
        return;
57
    }
58
 
59
  if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
60
    {
61
      struct fpreg fpregs;
62
 
63
      if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
64
                  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
65
        perror_with_name (_("Couldn't get floating point status"));
66
 
67
      amd64_supply_fxsave (regcache, -1, &fpregs);
68
    }
69
}
70
 
71
/* Store register REGNUM back into the inferior.  If REGNUM is -1, do
72
   this for all registers (including the floating-point registers).  */
73
 
74
static void
75
amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum)
76
{
77
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
78
 
79
  if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
80
    {
81
      struct reg regs;
82
 
83
      if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
84
                  (PTRACE_TYPE_ARG3) &regs, 0) == -1)
85
        perror_with_name (_("Couldn't get registers"));
86
 
87
      amd64_collect_native_gregset (regcache, &regs, regnum);
88
 
89
      if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
90
                  (PTRACE_TYPE_ARG3) &regs, 0) == -1)
91
        perror_with_name (_("Couldn't write registers"));
92
 
93
      if (regnum != -1)
94
        return;
95
    }
96
 
97
  if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
98
    {
99
      struct fpreg fpregs;
100
 
101
      if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
102
                  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
103
        perror_with_name (_("Couldn't get floating point status"));
104
 
105
      amd64_collect_fxsave (regcache, regnum, &fpregs);
106
 
107
      if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
108
                  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
109
        perror_with_name (_("Couldn't write floating point status"));
110
    }
111
}
112
 
113
/* Create a prototype *BSD/amd64 target.  The client can override it
114
   with local methods.  */
115
 
116
struct target_ops *
117
amd64bsd_target (void)
118
{
119
  struct target_ops *t;
120
 
121
  t = inf_ptrace_target ();
122
  t->to_fetch_registers = amd64bsd_fetch_inferior_registers;
123
  t->to_store_registers = amd64bsd_store_inferior_registers;
124
  return t;
125
}

powered by: WebSVN 2.1.0

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