*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / gdbserver / linux-s390-low.c
CommitLineData
265f716b
DJ
1/* GNU/Linux S/390 specific low level interface, for the remote server
2 for GDB.
9b254dd1
DJ
3 Copyright (C) 2001, 2002, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
265f716b
DJ
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
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
265f716b
DJ
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
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
265f716b
DJ
20
21/* This file is used for both 31-bit and 64-bit S/390 systems. */
22
23#include "server.h"
24#include "linux-low.h"
25
26#include <asm/ptrace.h>
27
d0f54f9d 28#define s390_num_regs 51
265f716b 29
2ec06d2e 30static int s390_regmap[] = {
265f716b
DJ
31 PT_PSWMASK, PT_PSWADDR,
32
33 PT_GPR0, PT_GPR1, PT_GPR2, PT_GPR3,
34 PT_GPR4, PT_GPR5, PT_GPR6, PT_GPR7,
35 PT_GPR8, PT_GPR9, PT_GPR10, PT_GPR11,
36 PT_GPR12, PT_GPR13, PT_GPR14, PT_GPR15,
37
38 PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3,
39 PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7,
40 PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11,
41 PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15,
42
265f716b
DJ
43 PT_FPC,
44
d0f54f9d 45#ifndef __s390x__
265f716b
DJ
46 PT_FPR0_HI, PT_FPR1_HI, PT_FPR2_HI, PT_FPR3_HI,
47 PT_FPR4_HI, PT_FPR5_HI, PT_FPR6_HI, PT_FPR7_HI,
48 PT_FPR8_HI, PT_FPR9_HI, PT_FPR10_HI, PT_FPR11_HI,
49 PT_FPR12_HI, PT_FPR13_HI, PT_FPR14_HI, PT_FPR15_HI,
50#else
51 PT_FPR0, PT_FPR1, PT_FPR2, PT_FPR3,
52 PT_FPR4, PT_FPR5, PT_FPR6, PT_FPR7,
53 PT_FPR8, PT_FPR9, PT_FPR10, PT_FPR11,
54 PT_FPR12, PT_FPR13, PT_FPR14, PT_FPR15,
55#endif
56};
57
2ec06d2e
DJ
58static int
59s390_cannot_fetch_register (int regno)
265f716b 60{
2ec06d2e 61 if (s390_regmap[regno] == -1)
265f716b
DJ
62 return 1;
63
64 return 0;
65}
66
2ec06d2e
DJ
67static int
68s390_cannot_store_register (int regno)
265f716b 69{
2ec06d2e 70 if (s390_regmap[regno] == -1)
265f716b
DJ
71 return 1;
72
73 return 0;
74}
2ec06d2e 75
b7149293
UW
76/* Provide only a fill function for the general register set. ps_lgetregs
77 will use this for NPTL support. */
78
79static void s390_fill_gregset (void *buf)
80{
81 int i;
82
83 for (i = 0; i < 34; i++)
84 collect_register (i, (char *) buf + s390_regmap[i]);
85}
86
87struct regset_info target_regsets[] = {
88 { 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL },
89 { 0, 0, -1, -1, NULL, NULL }
90};
91
b0ded00b 92
f450004a 93static const unsigned char s390_breakpoint[] = { 0, 1 };
b0ded00b
UW
94#define s390_breakpoint_len 2
95
96static CORE_ADDR
97s390_get_pc ()
98{
99 unsigned long pc;
100 collect_register_by_name ("pswa", &pc);
101#ifndef __s390x__
102 pc &= 0x7fffffff;
103#endif
104 return pc;
105}
106
107static void
108s390_set_pc (CORE_ADDR newpc)
109{
110 unsigned long pc = newpc;
111#ifndef __s390x__
112 pc |= 0x80000000;
113#endif
114 supply_register_by_name ("pswa", &pc);
115}
116
117static int
118s390_breakpoint_at (CORE_ADDR pc)
119{
120 unsigned char c[s390_breakpoint_len];
121 read_inferior_memory (pc, c, s390_breakpoint_len);
122 return memcmp (c, s390_breakpoint, s390_breakpoint_len) == 0;
123}
124
125
2ec06d2e
DJ
126struct linux_target_ops the_low_target = {
127 s390_num_regs,
128 s390_regmap,
129 s390_cannot_fetch_register,
130 s390_cannot_store_register,
b0ded00b
UW
131 s390_get_pc,
132 s390_set_pc,
133 s390_breakpoint,
134 s390_breakpoint_len,
135 NULL,
136 s390_breakpoint_len,
137 s390_breakpoint_at,
2ec06d2e 138};
b0ded00b 139
This page took 0.585048 seconds and 4 git commands to generate.