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