1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
// OBSOLETE /* Native dependent code for Mach 386's for GDB, the GNU debugger.
// OBSOLETE Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1995, 1996, 1999, 2000,
// OBSOLETE 2001 Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE #include "defs.h"
// OBSOLETE #include "frame.h"
// OBSOLETE #include "inferior.h"
// OBSOLETE #include "gdbcore.h"
// OBSOLETE #include "regcache.h"
// OBSOLETE
// OBSOLETE #include <sys/param.h>
// OBSOLETE #include <sys/dir.h>
// OBSOLETE #include <sys/user.h>
// OBSOLETE #include <signal.h>
// OBSOLETE #include <sys/ioctl.h>
// OBSOLETE #include <fcntl.h>
// OBSOLETE
// OBSOLETE #include <sys/ptrace.h>
// OBSOLETE #include <machine/reg.h>
// OBSOLETE
// OBSOLETE #include <sys/file.h>
// OBSOLETE #include "gdb_stat.h"
// OBSOLETE #include <sys/core.h>
// OBSOLETE
// OBSOLETE static void fetch_core_registers (char *, unsigned, int, CORE_ADDR);
// OBSOLETE
// OBSOLETE void
// OBSOLETE fetch_inferior_registers (int regno)
// OBSOLETE {
// OBSOLETE struct regs inferior_registers;
// OBSOLETE struct fp_state inferior_fp_registers;
// OBSOLETE
// OBSOLETE registers_fetched ();
// OBSOLETE
// OBSOLETE ptrace (PTRACE_GETREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_registers);
// OBSOLETE ptrace (PTRACE_GETFPREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_fp_registers);
// OBSOLETE
// OBSOLETE memcpy (registers, &inferior_registers, sizeof inferior_registers);
// OBSOLETE
// OBSOLETE memcpy (®isters[REGISTER_BYTE (FP0_REGNUM)],
// OBSOLETE inferior_fp_registers.f_st,
// OBSOLETE sizeof inferior_fp_registers.f_st);
// OBSOLETE memcpy (®isters[REGISTER_BYTE (FPC_REGNUM)],
// OBSOLETE &inferior_fp_registers.f_ctrl,
// OBSOLETE sizeof inferior_fp_registers - sizeof inferior_fp_registers.f_st);
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Store our register values back into the inferior.
// OBSOLETE If REGNO is -1, do this for all registers.
// OBSOLETE Otherwise, REGNO specifies which register (so we can save time). */
// OBSOLETE
// OBSOLETE void
// OBSOLETE store_inferior_registers (int regno)
// OBSOLETE {
// OBSOLETE struct regs inferior_registers;
// OBSOLETE struct fp_state inferior_fp_registers;
// OBSOLETE
// OBSOLETE memcpy (&inferior_registers, registers, 20 * 4);
// OBSOLETE
// OBSOLETE memcpy (inferior_fp_registers.f_st, ®isters[REGISTER_BYTE (FP0_REGNUM)],
// OBSOLETE sizeof inferior_fp_registers.f_st);
// OBSOLETE memcpy (&inferior_fp_registers.f_ctrl,
// OBSOLETE ®isters[REGISTER_BYTE (FPC_REGNUM)],
// OBSOLETE sizeof inferior_fp_registers - sizeof inferior_fp_registers.f_st);
// OBSOLETE
// OBSOLETE #ifdef PTRACE_FP_BUG
// OBSOLETE if (regno == FP_REGNUM || regno == -1)
// OBSOLETE /* Storing the frame pointer requires a gross hack, in which an
// OBSOLETE instruction that moves eax into ebp gets single-stepped. */
// OBSOLETE {
// OBSOLETE int stack = inferior_registers.r_reg[SP_REGNUM];
// OBSOLETE int stuff = ptrace (PTRACE_PEEKDATA, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack);
// OBSOLETE int reg = inferior_registers.r_reg[EAX];
// OBSOLETE inferior_registers.r_reg[EAX] =
// OBSOLETE inferior_registers.r_reg[FP_REGNUM];
// OBSOLETE ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_registers);
// OBSOLETE ptrace (PTRACE_POKEDATA, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack, 0xc589);
// OBSOLETE ptrace (PTRACE_SINGLESTEP, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack, 0);
// OBSOLETE wait (0);
// OBSOLETE ptrace (PTRACE_POKEDATA, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack, stuff);
// OBSOLETE inferior_registers.r_reg[EAX] = reg;
// OBSOLETE }
// OBSOLETE #endif
// OBSOLETE ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_registers);
// OBSOLETE ptrace (PTRACE_SETFPREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_fp_registers);
// OBSOLETE }
// OBSOLETE
// OBSOLETE
// OBSOLETE
// OBSOLETE /* Provide registers to GDB from a core file.
// OBSOLETE
// OBSOLETE CORE_REG_SECT points to an array of bytes, which were obtained from
// OBSOLETE a core file which BFD thinks might contain register contents.
// OBSOLETE CORE_REG_SIZE is its size.
// OBSOLETE
// OBSOLETE WHICH says which register set corelow suspects this is:
// OBSOLETE 0 --- the general-purpose register set
// OBSOLETE 2 --- the floating-point register set
// OBSOLETE
// OBSOLETE REG_ADDR isn't used. */
// OBSOLETE
// OBSOLETE static void
// OBSOLETE fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
// OBSOLETE int which, CORE_ADDR reg_addr)
// OBSOLETE {
// OBSOLETE int val;
// OBSOLETE
// OBSOLETE switch (which)
// OBSOLETE {
// OBSOLETE case 0:
// OBSOLETE case 1:
// OBSOLETE memcpy (registers, core_reg_sect, core_reg_size);
// OBSOLETE break;
// OBSOLETE
// OBSOLETE case 2:
// OBSOLETE memcpy (®isters[REGISTER_BYTE (FP0_REGNUM)],
// OBSOLETE core_reg_sect,
// OBSOLETE core_reg_size); /* FIXME, probably bogus */
// OBSOLETE #ifdef FPC_REGNUM
// OBSOLETE memcpy (®isters[REGISTER_BYTE (FPC_REGNUM)],
// OBSOLETE &corestr.c_fpu.f_fpstatus.f_ctrl,
// OBSOLETE sizeof corestr.c_fpu.f_fpstatus -
// OBSOLETE sizeof corestr.c_fpu.f_fpstatus.f_st);
// OBSOLETE #endif
// OBSOLETE break;
// OBSOLETE }
// OBSOLETE }
// OBSOLETE
// OBSOLETE
// OBSOLETE /* Register that we are able to handle i386mach core file formats.
// OBSOLETE FIXME: is this really bfd_target_unknown_flavour? */
// OBSOLETE
// OBSOLETE static struct core_fns i386mach_core_fns =
// OBSOLETE {
// OBSOLETE bfd_target_unknown_flavour, /* core_flavour */
// OBSOLETE default_check_format, /* check_format */
// OBSOLETE default_core_sniffer, /* core_sniffer */
// OBSOLETE fetch_core_registers, /* core_read_registers */
// OBSOLETE NULL /* next */
// OBSOLETE };
// OBSOLETE
// OBSOLETE void
// OBSOLETE _initialize_core_i386mach (void)
// OBSOLETE {
// OBSOLETE add_core_fns (&i386mach_core_fns);
// OBSOLETE }
|