]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gdbserver/linux-x86-64-low.c
Import latest version of texi2pod.pl from FSF GCC sources.
[thirdparty/binutils-gdb.git] / gdb / gdbserver / linux-x86-64-low.c
CommitLineData
58caa3dc
DJ
1/* GNU/Linux/x86-64 specific low level interface, for the remote server
2 for GDB.
3 Copyright 2002
4 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#include "server.h"
24#include "linux-low.h"
25#include "i387-fp.h"
26
27#include <sys/reg.h>
28#include <sys/procfs.h>
29#include <sys/ptrace.h>
30
de220d0f
ML
31#define X86_64_NUM_GREGS 22
32
2ec06d2e 33static int x86_64_regmap[X86_64_NUM_GREGS] = {
de220d0f 34 RAX, RBX, RCX, RDX,
58caa3dc
DJ
35 RSI, RDI, RBP, RSP,
36 R8, R9, R10, R11,
37 R12, R13, R14, R15,
de220d0f
ML
38 RIP, EFLAGS,
39 DS, ES, FS, GS
58caa3dc
DJ
40};
41
42static void
43x86_64_fill_gregset (void *buf)
44{
45 int i;
46
de220d0f 47 for (i = 0; i < X86_64_NUM_GREGS; i++)
2ec06d2e 48 collect_register (i, ((char *) buf) + x86_64_regmap[i]);
58caa3dc
DJ
49}
50
51static void
52x86_64_store_gregset (void *buf)
53{
54 int i;
55
de220d0f 56 for (i = 0; i < X86_64_NUM_GREGS; i++)
2ec06d2e 57 supply_register (i, ((char *) buf) + x86_64_regmap[i]);
58caa3dc
DJ
58}
59
60static void
61x86_64_fill_fpregset (void *buf)
62{
63 i387_cache_to_fxsave (buf);
64}
65
66static void
67x86_64_store_fpregset (void *buf)
68{
69 i387_fxsave_to_cache (buf);
70}
71
58caa3dc
DJ
72struct regset_info target_regsets[] = {
73 { PTRACE_GETREGS, PTRACE_SETREGS, sizeof (elf_gregset_t),
74 x86_64_fill_gregset, x86_64_store_gregset },
75 { PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof (elf_fpregset_t),
76 x86_64_fill_fpregset, x86_64_store_fpregset },
77 { 0, 0, -1, NULL, NULL }
78};
2ec06d2e
DJ
79
80struct linux_target_ops the_low_target = {
81 -1,
82 NULL,
83 NULL,
84 NULL,
85};