* m2-valprint.c (m2_print_array_contents): Eliminate variable
[external/binutils.git] / gdb / s390-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3    Copyright (C) 2001-2012 Free Software Foundation, Inc.
4
5    Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
6    for IBM Deutschland Entwicklung GmbH, IBM Corporation.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "arch-utils.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "symtab.h"
28 #include "target.h"
29 #include "gdbcore.h"
30 #include "gdbcmd.h"
31 #include "objfiles.h"
32 #include "floatformat.h"
33 #include "regcache.h"
34 #include "trad-frame.h"
35 #include "frame-base.h"
36 #include "frame-unwind.h"
37 #include "dwarf2-frame.h"
38 #include "reggroups.h"
39 #include "regset.h"
40 #include "value.h"
41 #include "gdb_assert.h"
42 #include "dis-asm.h"
43 #include "solib-svr4.h"
44 #include "prologue-value.h"
45 #include "linux-tdep.h"
46 #include "s390-tdep.h"
47
48 #include "stap-probe.h"
49 #include "ax.h"
50 #include "ax-gdb.h"
51 #include "user-regs.h"
52 #include "cli/cli-utils.h"
53 #include <ctype.h>
54
55 #include "features/s390-linux32.c"
56 #include "features/s390-linux32v1.c"
57 #include "features/s390-linux32v2.c"
58 #include "features/s390-linux64.c"
59 #include "features/s390-linux64v1.c"
60 #include "features/s390-linux64v2.c"
61 #include "features/s390x-linux64.c"
62 #include "features/s390x-linux64v1.c"
63 #include "features/s390x-linux64v2.c"
64
65 /* The tdep structure.  */
66
67 struct gdbarch_tdep
68 {
69   /* ABI version.  */
70   enum { ABI_LINUX_S390, ABI_LINUX_ZSERIES } abi;
71
72   /* Pseudo register numbers.  */
73   int gpr_full_regnum;
74   int pc_regnum;
75   int cc_regnum;
76
77   /* Core file register sets.  */
78   const struct regset *gregset;
79   int sizeof_gregset;
80
81   const struct regset *fpregset;
82   int sizeof_fpregset;
83 };
84
85
86 /* ABI call-saved register information.  */
87
88 static int
89 s390_register_call_saved (struct gdbarch *gdbarch, int regnum)
90 {
91   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
92
93   switch (tdep->abi)
94     {
95     case ABI_LINUX_S390:
96       if ((regnum >= S390_R6_REGNUM && regnum <= S390_R15_REGNUM)
97           || regnum == S390_F4_REGNUM || regnum == S390_F6_REGNUM
98           || regnum == S390_A0_REGNUM)
99         return 1;
100
101       break;
102
103     case ABI_LINUX_ZSERIES:
104       if ((regnum >= S390_R6_REGNUM && regnum <= S390_R15_REGNUM)
105           || (regnum >= S390_F8_REGNUM && regnum <= S390_F15_REGNUM)
106           || (regnum >= S390_A0_REGNUM && regnum <= S390_A1_REGNUM))
107         return 1;
108
109       break;
110     }
111
112   return 0;
113 }
114
115 static int
116 s390_cannot_store_register (struct gdbarch *gdbarch, int regnum)
117 {
118   /* The last-break address is read-only.  */
119   return regnum == S390_LAST_BREAK_REGNUM;
120 }
121
122 static void
123 s390_write_pc (struct regcache *regcache, CORE_ADDR pc)
124 {
125   struct gdbarch *gdbarch = get_regcache_arch (regcache);
126   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
127
128   regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
129
130   /* Set special SYSTEM_CALL register to 0 to prevent the kernel from
131      messing with the PC we just installed, if we happen to be within
132      an interrupted system call that the kernel wants to restart.
133
134      Note that after we return from the dummy call, the SYSTEM_CALL and
135      ORIG_R2 registers will be automatically restored, and the kernel
136      continues to restart the system call at this point.  */
137   if (register_size (gdbarch, S390_SYSTEM_CALL_REGNUM) > 0)
138     regcache_cooked_write_unsigned (regcache, S390_SYSTEM_CALL_REGNUM, 0);
139 }
140
141
142 /* DWARF Register Mapping.  */
143
144 static int s390_dwarf_regmap[] =
145 {
146   /* General Purpose Registers.  */
147   S390_R0_REGNUM, S390_R1_REGNUM, S390_R2_REGNUM, S390_R3_REGNUM,
148   S390_R4_REGNUM, S390_R5_REGNUM, S390_R6_REGNUM, S390_R7_REGNUM,
149   S390_R8_REGNUM, S390_R9_REGNUM, S390_R10_REGNUM, S390_R11_REGNUM,
150   S390_R12_REGNUM, S390_R13_REGNUM, S390_R14_REGNUM, S390_R15_REGNUM,
151
152   /* Floating Point Registers.  */
153   S390_F0_REGNUM, S390_F2_REGNUM, S390_F4_REGNUM, S390_F6_REGNUM,
154   S390_F1_REGNUM, S390_F3_REGNUM, S390_F5_REGNUM, S390_F7_REGNUM,
155   S390_F8_REGNUM, S390_F10_REGNUM, S390_F12_REGNUM, S390_F14_REGNUM,
156   S390_F9_REGNUM, S390_F11_REGNUM, S390_F13_REGNUM, S390_F15_REGNUM,
157
158   /* Control Registers (not mapped).  */
159   -1, -1, -1, -1, -1, -1, -1, -1, 
160   -1, -1, -1, -1, -1, -1, -1, -1, 
161
162   /* Access Registers.  */
163   S390_A0_REGNUM, S390_A1_REGNUM, S390_A2_REGNUM, S390_A3_REGNUM,
164   S390_A4_REGNUM, S390_A5_REGNUM, S390_A6_REGNUM, S390_A7_REGNUM,
165   S390_A8_REGNUM, S390_A9_REGNUM, S390_A10_REGNUM, S390_A11_REGNUM,
166   S390_A12_REGNUM, S390_A13_REGNUM, S390_A14_REGNUM, S390_A15_REGNUM,
167
168   /* Program Status Word.  */
169   S390_PSWM_REGNUM,
170   S390_PSWA_REGNUM,
171
172   /* GPR Lower Half Access.  */
173   S390_R0_REGNUM, S390_R1_REGNUM, S390_R2_REGNUM, S390_R3_REGNUM,
174   S390_R4_REGNUM, S390_R5_REGNUM, S390_R6_REGNUM, S390_R7_REGNUM,
175   S390_R8_REGNUM, S390_R9_REGNUM, S390_R10_REGNUM, S390_R11_REGNUM,
176   S390_R12_REGNUM, S390_R13_REGNUM, S390_R14_REGNUM, S390_R15_REGNUM,
177
178   /* GNU/Linux-specific registers (not mapped).  */
179   -1, -1, -1,
180 };
181
182 /* Convert DWARF register number REG to the appropriate register
183    number used by GDB.  */
184 static int
185 s390_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
186 {
187   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
188
189   /* In a 32-on-64 debug scenario, debug info refers to the full 64-bit
190      GPRs.  Note that call frame information still refers to the 32-bit
191      lower halves, because s390_adjust_frame_regnum uses register numbers
192      66 .. 81 to access GPRs.  */
193   if (tdep->gpr_full_regnum != -1 && reg >= 0 && reg < 16)
194     return tdep->gpr_full_regnum + reg;
195
196   if (reg >= 0 && reg < ARRAY_SIZE (s390_dwarf_regmap))
197     return s390_dwarf_regmap[reg];
198
199   warning (_("Unmapped DWARF Register #%d encountered."), reg);
200   return -1;
201 }
202
203 /* Translate a .eh_frame register to DWARF register, or adjust a
204    .debug_frame register.  */
205 static int
206 s390_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
207 {
208   /* See s390_dwarf_reg_to_regnum for comments.  */
209   return (num >= 0 && num < 16)? num + 66 : num;
210 }
211
212
213 /* Pseudo registers.  */
214
215 static const char *
216 s390_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
217 {
218   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
219
220   if (regnum == tdep->pc_regnum)
221     return "pc";
222
223   if (regnum == tdep->cc_regnum)
224     return "cc";
225
226   if (tdep->gpr_full_regnum != -1
227       && regnum >= tdep->gpr_full_regnum
228       && regnum < tdep->gpr_full_regnum + 16)
229     {
230       static const char *full_name[] = {
231         "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
232         "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
233       };
234       return full_name[regnum - tdep->gpr_full_regnum];
235     }
236
237   internal_error (__FILE__, __LINE__, _("invalid regnum"));
238 }
239
240 static struct type *
241 s390_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
242 {
243   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
244
245   if (regnum == tdep->pc_regnum)
246     return builtin_type (gdbarch)->builtin_func_ptr;
247
248   if (regnum == tdep->cc_regnum)
249     return builtin_type (gdbarch)->builtin_int;
250
251   if (tdep->gpr_full_regnum != -1
252       && regnum >= tdep->gpr_full_regnum
253       && regnum < tdep->gpr_full_regnum + 16)
254     return builtin_type (gdbarch)->builtin_uint64;
255
256   internal_error (__FILE__, __LINE__, _("invalid regnum"));
257 }
258
259 static enum register_status
260 s390_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
261                            int regnum, gdb_byte *buf)
262 {
263   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
264   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
265   int regsize = register_size (gdbarch, regnum);
266   ULONGEST val;
267
268   if (regnum == tdep->pc_regnum)
269     {
270       enum register_status status;
271
272       status = regcache_raw_read_unsigned (regcache, S390_PSWA_REGNUM, &val);
273       if (status == REG_VALID)
274         {
275           if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
276             val &= 0x7fffffff;
277           store_unsigned_integer (buf, regsize, byte_order, val);
278         }
279       return status;
280     }
281
282   if (regnum == tdep->cc_regnum)
283     {
284       enum register_status status;
285
286       status = regcache_raw_read_unsigned (regcache, S390_PSWM_REGNUM, &val);
287       if (status == REG_VALID)
288         {
289           if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
290             val = (val >> 12) & 3;
291           else
292             val = (val >> 44) & 3;
293           store_unsigned_integer (buf, regsize, byte_order, val);
294         }
295       return status;
296     }
297
298   if (tdep->gpr_full_regnum != -1
299       && regnum >= tdep->gpr_full_regnum
300       && regnum < tdep->gpr_full_regnum + 16)
301     {
302       enum register_status status;
303       ULONGEST val_upper;
304
305       regnum -= tdep->gpr_full_regnum;
306
307       status = regcache_raw_read_unsigned (regcache, S390_R0_REGNUM + regnum, &val);
308       if (status == REG_VALID)
309         status = regcache_raw_read_unsigned (regcache, S390_R0_UPPER_REGNUM + regnum,
310                                              &val_upper);
311       if (status == REG_VALID)
312         {
313           val |= val_upper << 32;
314           store_unsigned_integer (buf, regsize, byte_order, val);
315         }
316       return status;
317     }
318
319   internal_error (__FILE__, __LINE__, _("invalid regnum"));
320 }
321
322 static void
323 s390_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
324                             int regnum, const gdb_byte *buf)
325 {
326   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
327   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
328   int regsize = register_size (gdbarch, regnum);
329   ULONGEST val, psw;
330
331   if (regnum == tdep->pc_regnum)
332     {
333       val = extract_unsigned_integer (buf, regsize, byte_order);
334       if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
335         {
336           regcache_raw_read_unsigned (regcache, S390_PSWA_REGNUM, &psw);
337           val = (psw & 0x80000000) | (val & 0x7fffffff);
338         }
339       regcache_raw_write_unsigned (regcache, S390_PSWA_REGNUM, val);
340       return;
341     }
342
343   if (regnum == tdep->cc_regnum)
344     {
345       val = extract_unsigned_integer (buf, regsize, byte_order);
346       regcache_raw_read_unsigned (regcache, S390_PSWM_REGNUM, &psw);
347       if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
348         val = (psw & ~((ULONGEST)3 << 12)) | ((val & 3) << 12);
349       else
350         val = (psw & ~((ULONGEST)3 << 44)) | ((val & 3) << 44);
351       regcache_raw_write_unsigned (regcache, S390_PSWM_REGNUM, val);
352       return;
353     }
354
355   if (tdep->gpr_full_regnum != -1
356       && regnum >= tdep->gpr_full_regnum
357       && regnum < tdep->gpr_full_regnum + 16)
358     {
359       regnum -= tdep->gpr_full_regnum;
360       val = extract_unsigned_integer (buf, regsize, byte_order);
361       regcache_raw_write_unsigned (regcache, S390_R0_REGNUM + regnum,
362                                    val & 0xffffffff);
363       regcache_raw_write_unsigned (regcache, S390_R0_UPPER_REGNUM + regnum,
364                                    val >> 32);
365       return;
366     }
367
368   internal_error (__FILE__, __LINE__, _("invalid regnum"));
369 }
370
371 /* 'float' values are stored in the upper half of floating-point
372    registers, even though we are otherwise a big-endian platform.  */
373
374 static struct value *
375 s390_value_from_register (struct type *type, int regnum,
376                           struct frame_info *frame)
377 {
378   struct value *value = default_value_from_register (type, regnum, frame);
379   int len = TYPE_LENGTH (check_typedef (type));
380
381   if (regnum >= S390_F0_REGNUM && regnum <= S390_F15_REGNUM && len < 8)
382     set_value_offset (value, 0);
383
384   return value;
385 }
386
387 /* Register groups.  */
388
389 static int
390 s390_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
391                                  struct reggroup *group)
392 {
393   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
394
395   /* We usually save/restore the whole PSW, which includes PC and CC.
396      However, some older gdbservers may not support saving/restoring
397      the whole PSW yet, and will return an XML register description
398      excluding those from the save/restore register groups.  In those
399      cases, we still need to explicitly save/restore PC and CC in order
400      to push or pop frames.  Since this doesn't hurt anything if we
401      already save/restore the whole PSW (it's just redundant), we add
402      PC and CC at this point unconditionally.  */
403   if (group == save_reggroup || group == restore_reggroup)
404     return regnum == tdep->pc_regnum || regnum == tdep->cc_regnum;
405
406   return default_register_reggroup_p (gdbarch, regnum, group);
407 }
408
409
410 /* Core file register sets.  */
411
412 int s390_regmap_gregset[S390_NUM_REGS] =
413 {
414   /* Program Status Word.  */
415   0x00, 0x04,
416   /* General Purpose Registers.  */
417   0x08, 0x0c, 0x10, 0x14,
418   0x18, 0x1c, 0x20, 0x24,
419   0x28, 0x2c, 0x30, 0x34,
420   0x38, 0x3c, 0x40, 0x44,
421   /* Access Registers.  */
422   0x48, 0x4c, 0x50, 0x54,
423   0x58, 0x5c, 0x60, 0x64,
424   0x68, 0x6c, 0x70, 0x74,
425   0x78, 0x7c, 0x80, 0x84,
426   /* Floating Point Control Word.  */
427   -1,
428   /* Floating Point Registers.  */
429   -1, -1, -1, -1, -1, -1, -1, -1,
430   -1, -1, -1, -1, -1, -1, -1, -1,
431   /* GPR Uppper Halves.  */
432   -1, -1, -1, -1, -1, -1, -1, -1,
433   -1, -1, -1, -1, -1, -1, -1, -1,
434   /* GNU/Linux-specific optional "registers".  */
435   0x88, -1, -1,
436 };
437
438 int s390x_regmap_gregset[S390_NUM_REGS] =
439 {
440   /* Program Status Word.  */
441   0x00, 0x08,
442   /* General Purpose Registers.  */
443   0x10, 0x18, 0x20, 0x28,
444   0x30, 0x38, 0x40, 0x48,
445   0x50, 0x58, 0x60, 0x68,
446   0x70, 0x78, 0x80, 0x88,
447   /* Access Registers.  */
448   0x90, 0x94, 0x98, 0x9c,
449   0xa0, 0xa4, 0xa8, 0xac,
450   0xb0, 0xb4, 0xb8, 0xbc,
451   0xc0, 0xc4, 0xc8, 0xcc,
452   /* Floating Point Control Word.  */
453   -1,
454   /* Floating Point Registers.  */
455   -1, -1, -1, -1, -1, -1, -1, -1,
456   -1, -1, -1, -1, -1, -1, -1, -1,
457   /* GPR Uppper Halves.  */
458   0x10, 0x18, 0x20, 0x28,
459   0x30, 0x38, 0x40, 0x48,
460   0x50, 0x58, 0x60, 0x68,
461   0x70, 0x78, 0x80, 0x88,
462   /* GNU/Linux-specific optional "registers".  */
463   0xd0, -1, -1,
464 };
465
466 int s390_regmap_fpregset[S390_NUM_REGS] =
467 {
468   /* Program Status Word.  */
469   -1, -1,
470   /* General Purpose Registers.  */
471   -1, -1, -1, -1, -1, -1, -1, -1,
472   -1, -1, -1, -1, -1, -1, -1, -1,
473   /* Access Registers.  */
474   -1, -1, -1, -1, -1, -1, -1, -1,
475   -1, -1, -1, -1, -1, -1, -1, -1,
476   /* Floating Point Control Word.  */
477   0x00,
478   /* Floating Point Registers.  */
479   0x08, 0x10, 0x18, 0x20,
480   0x28, 0x30, 0x38, 0x40,
481   0x48, 0x50, 0x58, 0x60,
482   0x68, 0x70, 0x78, 0x80,
483   /* GPR Uppper Halves.  */
484   -1, -1, -1, -1, -1, -1, -1, -1,
485   -1, -1, -1, -1, -1, -1, -1, -1,
486   /* GNU/Linux-specific optional "registers".  */
487   -1, -1, -1,
488 };
489
490 int s390_regmap_upper[S390_NUM_REGS] =
491 {
492   /* Program Status Word.  */
493   -1, -1,
494   /* General Purpose Registers.  */
495   -1, -1, -1, -1, -1, -1, -1, -1,
496   -1, -1, -1, -1, -1, -1, -1, -1,
497   /* Access Registers.  */
498   -1, -1, -1, -1, -1, -1, -1, -1,
499   -1, -1, -1, -1, -1, -1, -1, -1,
500   /* Floating Point Control Word.  */
501   -1,
502   /* Floating Point Registers.  */
503   -1, -1, -1, -1, -1, -1, -1, -1,
504   -1, -1, -1, -1, -1, -1, -1, -1,
505   /* GPR Uppper Halves.  */
506   0x00, 0x04, 0x08, 0x0c,
507   0x10, 0x14, 0x18, 0x1c,
508   0x20, 0x24, 0x28, 0x2c,
509   0x30, 0x34, 0x38, 0x3c,
510   /* GNU/Linux-specific optional "registers".  */
511   -1, -1, -1,
512 };
513
514 int s390_regmap_last_break[S390_NUM_REGS] =
515 {
516   /* Program Status Word.  */
517   -1, -1,
518   /* General Purpose Registers.  */
519   -1, -1, -1, -1, -1, -1, -1, -1,
520   -1, -1, -1, -1, -1, -1, -1, -1,
521   /* Access Registers.  */
522   -1, -1, -1, -1, -1, -1, -1, -1,
523   -1, -1, -1, -1, -1, -1, -1, -1,
524   /* Floating Point Control Word.  */
525   -1,
526   /* Floating Point Registers.  */
527   -1, -1, -1, -1, -1, -1, -1, -1,
528   -1, -1, -1, -1, -1, -1, -1, -1,
529   /* GPR Uppper Halves.  */
530   -1, -1, -1, -1, -1, -1, -1, -1,
531   -1, -1, -1, -1, -1, -1, -1, -1,
532   /* GNU/Linux-specific optional "registers".  */
533   -1, 4, -1,
534 };
535
536 int s390x_regmap_last_break[S390_NUM_REGS] =
537 {
538   /* Program Status Word.  */
539   -1, -1,
540   /* General Purpose Registers.  */
541   -1, -1, -1, -1, -1, -1, -1, -1,
542   -1, -1, -1, -1, -1, -1, -1, -1,
543   /* Access Registers.  */
544   -1, -1, -1, -1, -1, -1, -1, -1,
545   -1, -1, -1, -1, -1, -1, -1, -1,
546   /* Floating Point Control Word.  */
547   -1,
548   /* Floating Point Registers.  */
549   -1, -1, -1, -1, -1, -1, -1, -1,
550   -1, -1, -1, -1, -1, -1, -1, -1,
551   /* GPR Uppper Halves.  */
552   -1, -1, -1, -1, -1, -1, -1, -1,
553   -1, -1, -1, -1, -1, -1, -1, -1,
554   /* GNU/Linux-specific optional "registers".  */
555   -1, 0, -1,
556 };
557
558 int s390_regmap_system_call[S390_NUM_REGS] =
559 {
560   /* Program Status Word.  */
561   -1, -1,
562   /* General Purpose Registers.  */
563   -1, -1, -1, -1, -1, -1, -1, -1,
564   -1, -1, -1, -1, -1, -1, -1, -1,
565   /* Access Registers.  */
566   -1, -1, -1, -1, -1, -1, -1, -1,
567   -1, -1, -1, -1, -1, -1, -1, -1,
568   /* Floating Point Control Word.  */
569   -1,
570   /* Floating Point Registers.  */
571   -1, -1, -1, -1, -1, -1, -1, -1,
572   -1, -1, -1, -1, -1, -1, -1, -1,
573   /* GPR Uppper Halves.  */
574   -1, -1, -1, -1, -1, -1, -1, -1,
575   -1, -1, -1, -1, -1, -1, -1, -1,
576   /* GNU/Linux-specific optional "registers".  */
577   -1, -1, 0,
578 };
579
580 /* Supply register REGNUM from the register set REGSET to register cache 
581    REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
582 static void
583 s390_supply_regset (const struct regset *regset, struct regcache *regcache,
584                     int regnum, const void *regs, size_t len)
585 {
586   const int *offset = regset->descr;
587   int i;
588
589   for (i = 0; i < S390_NUM_REGS; i++)
590     {
591       if ((regnum == i || regnum == -1) && offset[i] != -1)
592         regcache_raw_supply (regcache, i, (const char *)regs + offset[i]);
593     }
594 }
595
596 /* Collect register REGNUM from the register cache REGCACHE and store
597    it in the buffer specified by REGS and LEN as described by the
598    general-purpose register set REGSET.  If REGNUM is -1, do this for
599    all registers in REGSET.  */
600 static void
601 s390_collect_regset (const struct regset *regset,
602                      const struct regcache *regcache,
603                      int regnum, void *regs, size_t len)
604 {
605   const int *offset = regset->descr;
606   int i;
607
608   for (i = 0; i < S390_NUM_REGS; i++)
609     {
610       if ((regnum == i || regnum == -1) && offset[i] != -1)
611         regcache_raw_collect (regcache, i, (char *)regs + offset[i]);
612     }
613 }
614
615 static const struct regset s390_gregset = {
616   s390_regmap_gregset, 
617   s390_supply_regset,
618   s390_collect_regset
619 };
620
621 static const struct regset s390x_gregset = {
622   s390x_regmap_gregset, 
623   s390_supply_regset,
624   s390_collect_regset
625 };
626
627 static const struct regset s390_fpregset = {
628   s390_regmap_fpregset, 
629   s390_supply_regset,
630   s390_collect_regset
631 };
632
633 static const struct regset s390_upper_regset = {
634   s390_regmap_upper, 
635   s390_supply_regset,
636   s390_collect_regset
637 };
638
639 static const struct regset s390_last_break_regset = {
640   s390_regmap_last_break,
641   s390_supply_regset,
642   s390_collect_regset
643 };
644
645 static const struct regset s390x_last_break_regset = {
646   s390x_regmap_last_break,
647   s390_supply_regset,
648   s390_collect_regset
649 };
650
651 static const struct regset s390_system_call_regset = {
652   s390_regmap_system_call,
653   s390_supply_regset,
654   s390_collect_regset
655 };
656
657 static struct core_regset_section s390_linux32_regset_sections[] =
658 {
659   { ".reg", s390_sizeof_gregset, "general-purpose" },
660   { ".reg2", s390_sizeof_fpregset, "floating-point" },
661   { NULL, 0}
662 };
663
664 static struct core_regset_section s390_linux32v1_regset_sections[] =
665 {
666   { ".reg", s390_sizeof_gregset, "general-purpose" },
667   { ".reg2", s390_sizeof_fpregset, "floating-point" },
668   { ".reg-s390-last-break", 8, "s390 last-break address" },
669   { NULL, 0}
670 };
671
672 static struct core_regset_section s390_linux32v2_regset_sections[] =
673 {
674   { ".reg", s390_sizeof_gregset, "general-purpose" },
675   { ".reg2", s390_sizeof_fpregset, "floating-point" },
676   { ".reg-s390-last-break", 8, "s390 last-break address" },
677   { ".reg-s390-system-call", 4, "s390 system-call" },
678   { NULL, 0}
679 };
680
681 static struct core_regset_section s390_linux64_regset_sections[] =
682 {
683   { ".reg", s390_sizeof_gregset, "general-purpose" },
684   { ".reg2", s390_sizeof_fpregset, "floating-point" },
685   { ".reg-s390-high-gprs", 16*4, "s390 GPR upper halves" },
686   { NULL, 0}
687 };
688
689 static struct core_regset_section s390_linux64v1_regset_sections[] =
690 {
691   { ".reg", s390_sizeof_gregset, "general-purpose" },
692   { ".reg2", s390_sizeof_fpregset, "floating-point" },
693   { ".reg-s390-high-gprs", 16*4, "s390 GPR upper halves" },
694   { ".reg-s390-last-break", 8, "s930 last-break address" },
695   { NULL, 0}
696 };
697
698 static struct core_regset_section s390_linux64v2_regset_sections[] =
699 {
700   { ".reg", s390_sizeof_gregset, "general-purpose" },
701   { ".reg2", s390_sizeof_fpregset, "floating-point" },
702   { ".reg-s390-high-gprs", 16*4, "s390 GPR upper halves" },
703   { ".reg-s390-last-break", 8, "s930 last-break address" },
704   { ".reg-s390-system-call", 4, "s390 system-call" },
705   { NULL, 0}
706 };
707
708 static struct core_regset_section s390x_linux64_regset_sections[] =
709 {
710   { ".reg", s390x_sizeof_gregset, "general-purpose" },
711   { ".reg2", s390_sizeof_fpregset, "floating-point" },
712   { NULL, 0}
713 };
714
715 static struct core_regset_section s390x_linux64v1_regset_sections[] =
716 {
717   { ".reg", s390x_sizeof_gregset, "general-purpose" },
718   { ".reg2", s390_sizeof_fpregset, "floating-point" },
719   { ".reg-s390-last-break", 8, "s930 last-break address" },
720   { NULL, 0}
721 };
722
723 static struct core_regset_section s390x_linux64v2_regset_sections[] =
724 {
725   { ".reg", s390x_sizeof_gregset, "general-purpose" },
726   { ".reg2", s390_sizeof_fpregset, "floating-point" },
727   { ".reg-s390-last-break", 8, "s930 last-break address" },
728   { ".reg-s390-system-call", 4, "s390 system-call" },
729   { NULL, 0}
730 };
731
732
733 /* Return the appropriate register set for the core section identified
734    by SECT_NAME and SECT_SIZE.  */
735 static const struct regset *
736 s390_regset_from_core_section (struct gdbarch *gdbarch,
737                                const char *sect_name, size_t sect_size)
738 {
739   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
740
741   if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset)
742     return tdep->gregset;
743
744   if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset)
745     return tdep->fpregset;
746
747   if (strcmp (sect_name, ".reg-s390-high-gprs") == 0 && sect_size >= 16*4)
748     return &s390_upper_regset;
749
750   if (strcmp (sect_name, ".reg-s390-last-break") == 0 && sect_size >= 8)
751     return (gdbarch_ptr_bit (gdbarch) == 32
752             ?  &s390_last_break_regset : &s390x_last_break_regset);
753
754   if (strcmp (sect_name, ".reg-s390-system-call") == 0 && sect_size >= 4)
755     return &s390_system_call_regset;
756
757   return NULL;
758 }
759
760 static const struct target_desc *
761 s390_core_read_description (struct gdbarch *gdbarch,
762                             struct target_ops *target, bfd *abfd)
763 {
764   asection *high_gprs = bfd_get_section_by_name (abfd, ".reg-s390-high-gprs");
765   asection *v1 = bfd_get_section_by_name (abfd, ".reg-s390-last-break");
766   asection *v2 = bfd_get_section_by_name (abfd, ".reg-s390-system-call");
767   asection *section = bfd_get_section_by_name (abfd, ".reg");
768   if (!section)
769     return NULL;
770
771   switch (bfd_section_size (abfd, section))
772     {
773     case s390_sizeof_gregset:
774       if (high_gprs)
775         return (v2? tdesc_s390_linux64v2 :
776                 v1? tdesc_s390_linux64v1 : tdesc_s390_linux64);
777       else
778         return (v2? tdesc_s390_linux32v2 :
779                 v1? tdesc_s390_linux32v1 : tdesc_s390_linux32);
780
781     case s390x_sizeof_gregset:
782       return (v2? tdesc_s390x_linux64v2 :
783               v1? tdesc_s390x_linux64v1 : tdesc_s390x_linux64);
784
785     default:
786       return NULL;
787     }
788 }
789
790
791 /* Decoding S/390 instructions.  */
792
793 /* Named opcode values for the S/390 instructions we recognize.  Some
794    instructions have their opcode split across two fields; those are the
795    op1_* and op2_* enums.  */
796 enum
797   {
798     op1_lhi  = 0xa7,   op2_lhi  = 0x08,
799     op1_lghi = 0xa7,   op2_lghi = 0x09,
800     op1_lgfi = 0xc0,   op2_lgfi = 0x01,
801     op_lr    = 0x18,
802     op_lgr   = 0xb904,
803     op_l     = 0x58,
804     op1_ly   = 0xe3,   op2_ly   = 0x58,
805     op1_lg   = 0xe3,   op2_lg   = 0x04,
806     op_lm    = 0x98,
807     op1_lmy  = 0xeb,   op2_lmy  = 0x98,
808     op1_lmg  = 0xeb,   op2_lmg  = 0x04,
809     op_st    = 0x50,
810     op1_sty  = 0xe3,   op2_sty  = 0x50,
811     op1_stg  = 0xe3,   op2_stg  = 0x24,
812     op_std   = 0x60,
813     op_stm   = 0x90,
814     op1_stmy = 0xeb,   op2_stmy = 0x90,
815     op1_stmg = 0xeb,   op2_stmg = 0x24,
816     op1_aghi = 0xa7,   op2_aghi = 0x0b,
817     op1_ahi  = 0xa7,   op2_ahi  = 0x0a,
818     op1_agfi = 0xc2,   op2_agfi = 0x08,
819     op1_afi  = 0xc2,   op2_afi  = 0x09,
820     op1_algfi= 0xc2,   op2_algfi= 0x0a,
821     op1_alfi = 0xc2,   op2_alfi = 0x0b,
822     op_ar    = 0x1a,
823     op_agr   = 0xb908,
824     op_a     = 0x5a,
825     op1_ay   = 0xe3,   op2_ay   = 0x5a,
826     op1_ag   = 0xe3,   op2_ag   = 0x08,
827     op1_slgfi= 0xc2,   op2_slgfi= 0x04,
828     op1_slfi = 0xc2,   op2_slfi = 0x05,
829     op_sr    = 0x1b,
830     op_sgr   = 0xb909,
831     op_s     = 0x5b,
832     op1_sy   = 0xe3,   op2_sy   = 0x5b,
833     op1_sg   = 0xe3,   op2_sg   = 0x09,
834     op_nr    = 0x14,
835     op_ngr   = 0xb980,
836     op_la    = 0x41,
837     op1_lay  = 0xe3,   op2_lay  = 0x71,
838     op1_larl = 0xc0,   op2_larl = 0x00,
839     op_basr  = 0x0d,
840     op_bas   = 0x4d,
841     op_bcr   = 0x07,
842     op_bc    = 0x0d,
843     op_bctr  = 0x06,
844     op_bctgr = 0xb946,
845     op_bct   = 0x46,
846     op1_bctg = 0xe3,   op2_bctg = 0x46,
847     op_bxh   = 0x86,
848     op1_bxhg = 0xeb,   op2_bxhg = 0x44,
849     op_bxle  = 0x87,
850     op1_bxleg= 0xeb,   op2_bxleg= 0x45,
851     op1_bras = 0xa7,   op2_bras = 0x05,
852     op1_brasl= 0xc0,   op2_brasl= 0x05,
853     op1_brc  = 0xa7,   op2_brc  = 0x04,
854     op1_brcl = 0xc0,   op2_brcl = 0x04,
855     op1_brct = 0xa7,   op2_brct = 0x06,
856     op1_brctg= 0xa7,   op2_brctg= 0x07,
857     op_brxh  = 0x84,
858     op1_brxhg= 0xec,   op2_brxhg= 0x44,
859     op_brxle = 0x85,
860     op1_brxlg= 0xec,   op2_brxlg= 0x45,
861   };
862
863
864 /* Read a single instruction from address AT.  */
865
866 #define S390_MAX_INSTR_SIZE 6
867 static int
868 s390_readinstruction (bfd_byte instr[], CORE_ADDR at)
869 {
870   static int s390_instrlen[] = { 2, 4, 4, 6 };
871   int instrlen;
872
873   if (target_read_memory (at, &instr[0], 2))
874     return -1;
875   instrlen = s390_instrlen[instr[0] >> 6];
876   if (instrlen > 2)
877     {
878       if (target_read_memory (at + 2, &instr[2], instrlen - 2))
879         return -1;
880     }
881   return instrlen;
882 }
883
884
885 /* The functions below are for recognizing and decoding S/390
886    instructions of various formats.  Each of them checks whether INSN
887    is an instruction of the given format, with the specified opcodes.
888    If it is, it sets the remaining arguments to the values of the
889    instruction's fields, and returns a non-zero value; otherwise, it
890    returns zero.
891
892    These functions' arguments appear in the order they appear in the
893    instruction, not in the machine-language form.  So, opcodes always
894    come first, even though they're sometimes scattered around the
895    instructions.  And displacements appear before base and extension
896    registers, as they do in the assembly syntax, not at the end, as
897    they do in the machine language.  */
898 static int
899 is_ri (bfd_byte *insn, int op1, int op2, unsigned int *r1, int *i2)
900 {
901   if (insn[0] == op1 && (insn[1] & 0xf) == op2)
902     {
903       *r1 = (insn[1] >> 4) & 0xf;
904       /* i2 is a 16-bit signed quantity.  */
905       *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
906       return 1;
907     }
908   else
909     return 0;
910 }
911
912
913 static int
914 is_ril (bfd_byte *insn, int op1, int op2,
915         unsigned int *r1, int *i2)
916 {
917   if (insn[0] == op1 && (insn[1] & 0xf) == op2)
918     {
919       *r1 = (insn[1] >> 4) & 0xf;
920       /* i2 is a signed quantity.  If the host 'int' is 32 bits long,
921          no sign extension is necessary, but we don't want to assume
922          that.  */
923       *i2 = (((insn[2] << 24)
924               | (insn[3] << 16)
925               | (insn[4] << 8)
926               | (insn[5])) ^ 0x80000000) - 0x80000000;
927       return 1;
928     }
929   else
930     return 0;
931 }
932
933
934 static int
935 is_rr (bfd_byte *insn, int op, unsigned int *r1, unsigned int *r2)
936 {
937   if (insn[0] == op)
938     {
939       *r1 = (insn[1] >> 4) & 0xf;
940       *r2 = insn[1] & 0xf;
941       return 1;
942     }
943   else
944     return 0;
945 }
946
947
948 static int
949 is_rre (bfd_byte *insn, int op, unsigned int *r1, unsigned int *r2)
950 {
951   if (((insn[0] << 8) | insn[1]) == op)
952     {
953       /* Yes, insn[3].  insn[2] is unused in RRE format.  */
954       *r1 = (insn[3] >> 4) & 0xf;
955       *r2 = insn[3] & 0xf;
956       return 1;
957     }
958   else
959     return 0;
960 }
961
962
963 static int
964 is_rs (bfd_byte *insn, int op,
965        unsigned int *r1, unsigned int *r3, unsigned int *d2, unsigned int *b2)
966 {
967   if (insn[0] == op)
968     {
969       *r1 = (insn[1] >> 4) & 0xf;
970       *r3 = insn[1] & 0xf;
971       *b2 = (insn[2] >> 4) & 0xf;
972       *d2 = ((insn[2] & 0xf) << 8) | insn[3];
973       return 1;
974     }
975   else
976     return 0;
977 }
978
979
980 static int
981 is_rsy (bfd_byte *insn, int op1, int op2,
982         unsigned int *r1, unsigned int *r3, unsigned int *d2, unsigned int *b2)
983 {
984   if (insn[0] == op1
985       && insn[5] == op2)
986     {
987       *r1 = (insn[1] >> 4) & 0xf;
988       *r3 = insn[1] & 0xf;
989       *b2 = (insn[2] >> 4) & 0xf;
990       /* The 'long displacement' is a 20-bit signed integer.  */
991       *d2 = ((((insn[2] & 0xf) << 8) | insn[3] | (insn[4] << 12)) 
992                 ^ 0x80000) - 0x80000;
993       return 1;
994     }
995   else
996     return 0;
997 }
998
999
1000 static int
1001 is_rsi (bfd_byte *insn, int op,
1002         unsigned int *r1, unsigned int *r3, int *i2)
1003 {
1004   if (insn[0] == op)
1005     {
1006       *r1 = (insn[1] >> 4) & 0xf;
1007       *r3 = insn[1] & 0xf;
1008       /* i2 is a 16-bit signed quantity.  */
1009       *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
1010       return 1;
1011     }
1012   else
1013     return 0;
1014 }
1015
1016
1017 static int
1018 is_rie (bfd_byte *insn, int op1, int op2,
1019         unsigned int *r1, unsigned int *r3, int *i2)
1020 {
1021   if (insn[0] == op1
1022       && insn[5] == op2)
1023     {
1024       *r1 = (insn[1] >> 4) & 0xf;
1025       *r3 = insn[1] & 0xf;
1026       /* i2 is a 16-bit signed quantity.  */
1027       *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
1028       return 1;
1029     }
1030   else
1031     return 0;
1032 }
1033
1034
1035 static int
1036 is_rx (bfd_byte *insn, int op,
1037        unsigned int *r1, unsigned int *d2, unsigned int *x2, unsigned int *b2)
1038 {
1039   if (insn[0] == op)
1040     {
1041       *r1 = (insn[1] >> 4) & 0xf;
1042       *x2 = insn[1] & 0xf;
1043       *b2 = (insn[2] >> 4) & 0xf;
1044       *d2 = ((insn[2] & 0xf) << 8) | insn[3];
1045       return 1;
1046     }
1047   else
1048     return 0;
1049 }
1050
1051
1052 static int
1053 is_rxy (bfd_byte *insn, int op1, int op2,
1054         unsigned int *r1, unsigned int *d2, unsigned int *x2, unsigned int *b2)
1055 {
1056   if (insn[0] == op1
1057       && insn[5] == op2)
1058     {
1059       *r1 = (insn[1] >> 4) & 0xf;
1060       *x2 = insn[1] & 0xf;
1061       *b2 = (insn[2] >> 4) & 0xf;
1062       /* The 'long displacement' is a 20-bit signed integer.  */
1063       *d2 = ((((insn[2] & 0xf) << 8) | insn[3] | (insn[4] << 12)) 
1064                 ^ 0x80000) - 0x80000;
1065       return 1;
1066     }
1067   else
1068     return 0;
1069 }
1070
1071
1072 /* Prologue analysis.  */
1073
1074 #define S390_NUM_GPRS 16
1075 #define S390_NUM_FPRS 16
1076
1077 struct s390_prologue_data {
1078
1079   /* The stack.  */
1080   struct pv_area *stack;
1081
1082   /* The size and byte-order of a GPR or FPR.  */
1083   int gpr_size;
1084   int fpr_size;
1085   enum bfd_endian byte_order;
1086
1087   /* The general-purpose registers.  */
1088   pv_t gpr[S390_NUM_GPRS];
1089
1090   /* The floating-point registers.  */
1091   pv_t fpr[S390_NUM_FPRS];
1092
1093   /* The offset relative to the CFA where the incoming GPR N was saved
1094      by the function prologue.  0 if not saved or unknown.  */
1095   int gpr_slot[S390_NUM_GPRS];
1096
1097   /* Likewise for FPRs.  */
1098   int fpr_slot[S390_NUM_FPRS];
1099
1100   /* Nonzero if the backchain was saved.  This is assumed to be the
1101      case when the incoming SP is saved at the current SP location.  */
1102   int back_chain_saved_p;
1103 };
1104
1105 /* Return the effective address for an X-style instruction, like:
1106
1107         L R1, D2(X2, B2)
1108
1109    Here, X2 and B2 are registers, and D2 is a signed 20-bit
1110    constant; the effective address is the sum of all three.  If either
1111    X2 or B2 are zero, then it doesn't contribute to the sum --- this
1112    means that r0 can't be used as either X2 or B2.  */
1113 static pv_t
1114 s390_addr (struct s390_prologue_data *data,
1115            int d2, unsigned int x2, unsigned int b2)
1116 {
1117   pv_t result;
1118
1119   result = pv_constant (d2);
1120   if (x2)
1121     result = pv_add (result, data->gpr[x2]);
1122   if (b2)
1123     result = pv_add (result, data->gpr[b2]);
1124
1125   return result;
1126 }
1127
1128 /* Do a SIZE-byte store of VALUE to D2(X2,B2).  */
1129 static void
1130 s390_store (struct s390_prologue_data *data,
1131             int d2, unsigned int x2, unsigned int b2, CORE_ADDR size,
1132             pv_t value)
1133 {
1134   pv_t addr = s390_addr (data, d2, x2, b2);
1135   pv_t offset;
1136
1137   /* Check whether we are storing the backchain.  */
1138   offset = pv_subtract (data->gpr[S390_SP_REGNUM - S390_R0_REGNUM], addr);
1139
1140   if (pv_is_constant (offset) && offset.k == 0)
1141     if (size == data->gpr_size
1142         && pv_is_register_k (value, S390_SP_REGNUM, 0))
1143       {
1144         data->back_chain_saved_p = 1;
1145         return;
1146       }
1147
1148
1149   /* Check whether we are storing a register into the stack.  */
1150   if (!pv_area_store_would_trash (data->stack, addr))
1151     pv_area_store (data->stack, addr, size, value);
1152
1153
1154   /* Note: If this is some store we cannot identify, you might think we
1155      should forget our cached values, as any of those might have been hit.
1156
1157      However, we make the assumption that the register save areas are only
1158      ever stored to once in any given function, and we do recognize these
1159      stores.  Thus every store we cannot recognize does not hit our data.  */
1160 }
1161
1162 /* Do a SIZE-byte load from D2(X2,B2).  */
1163 static pv_t
1164 s390_load (struct s390_prologue_data *data,
1165            int d2, unsigned int x2, unsigned int b2, CORE_ADDR size)
1166            
1167 {
1168   pv_t addr = s390_addr (data, d2, x2, b2);
1169
1170   /* If it's a load from an in-line constant pool, then we can
1171      simulate that, under the assumption that the code isn't
1172      going to change between the time the processor actually
1173      executed it creating the current frame, and the time when
1174      we're analyzing the code to unwind past that frame.  */
1175   if (pv_is_constant (addr))
1176     {
1177       struct target_section *secp;
1178       secp = target_section_by_addr (&current_target, addr.k);
1179       if (secp != NULL
1180           && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
1181               & SEC_READONLY))
1182         return pv_constant (read_memory_integer (addr.k, size,
1183                                                  data->byte_order));
1184     }
1185
1186   /* Check whether we are accessing one of our save slots.  */
1187   return pv_area_fetch (data->stack, addr, size);
1188 }
1189
1190 /* Function for finding saved registers in a 'struct pv_area'; we pass
1191    this to pv_area_scan.
1192
1193    If VALUE is a saved register, ADDR says it was saved at a constant
1194    offset from the frame base, and SIZE indicates that the whole
1195    register was saved, record its offset in the reg_offset table in
1196    PROLOGUE_UNTYPED.  */
1197 static void
1198 s390_check_for_saved (void *data_untyped, pv_t addr,
1199                       CORE_ADDR size, pv_t value)
1200 {
1201   struct s390_prologue_data *data = data_untyped;
1202   int i, offset;
1203
1204   if (!pv_is_register (addr, S390_SP_REGNUM))
1205     return;
1206
1207   offset = 16 * data->gpr_size + 32 - addr.k;
1208
1209   /* If we are storing the original value of a register, we want to
1210      record the CFA offset.  If the same register is stored multiple
1211      times, the stack slot with the highest address counts.  */
1212  
1213   for (i = 0; i < S390_NUM_GPRS; i++)
1214     if (size == data->gpr_size
1215         && pv_is_register_k (value, S390_R0_REGNUM + i, 0))
1216       if (data->gpr_slot[i] == 0
1217           || data->gpr_slot[i] > offset)
1218         {
1219           data->gpr_slot[i] = offset;
1220           return;
1221         }
1222
1223   for (i = 0; i < S390_NUM_FPRS; i++)
1224     if (size == data->fpr_size
1225         && pv_is_register_k (value, S390_F0_REGNUM + i, 0))
1226       if (data->fpr_slot[i] == 0
1227           || data->fpr_slot[i] > offset)
1228         {
1229           data->fpr_slot[i] = offset;
1230           return;
1231         }
1232 }
1233
1234 /* Analyze the prologue of the function starting at START_PC,
1235    continuing at most until CURRENT_PC.  Initialize DATA to
1236    hold all information we find out about the state of the registers
1237    and stack slots.  Return the address of the instruction after
1238    the last one that changed the SP, FP, or back chain; or zero
1239    on error.  */
1240 static CORE_ADDR
1241 s390_analyze_prologue (struct gdbarch *gdbarch,
1242                        CORE_ADDR start_pc,
1243                        CORE_ADDR current_pc,
1244                        struct s390_prologue_data *data)
1245 {
1246   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1247
1248   /* Our return value:
1249      The address of the instruction after the last one that changed
1250      the SP, FP, or back chain;  zero if we got an error trying to 
1251      read memory.  */
1252   CORE_ADDR result = start_pc;
1253
1254   /* The current PC for our abstract interpretation.  */
1255   CORE_ADDR pc;
1256
1257   /* The address of the next instruction after that.  */
1258   CORE_ADDR next_pc;
1259   
1260   /* Set up everything's initial value.  */
1261   {
1262     int i;
1263
1264     data->stack = make_pv_area (S390_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1265
1266     /* For the purpose of prologue tracking, we consider the GPR size to
1267        be equal to the ABI word size, even if it is actually larger
1268        (i.e. when running a 32-bit binary under a 64-bit kernel).  */
1269     data->gpr_size = word_size;
1270     data->fpr_size = 8;
1271     data->byte_order = gdbarch_byte_order (gdbarch);
1272
1273     for (i = 0; i < S390_NUM_GPRS; i++)
1274       data->gpr[i] = pv_register (S390_R0_REGNUM + i, 0);
1275
1276     for (i = 0; i < S390_NUM_FPRS; i++)
1277       data->fpr[i] = pv_register (S390_F0_REGNUM + i, 0);
1278
1279     for (i = 0; i < S390_NUM_GPRS; i++)
1280       data->gpr_slot[i]  = 0;
1281
1282     for (i = 0; i < S390_NUM_FPRS; i++)
1283       data->fpr_slot[i]  = 0;
1284
1285     data->back_chain_saved_p = 0;
1286   }
1287
1288   /* Start interpreting instructions, until we hit the frame's
1289      current PC or the first branch instruction.  */
1290   for (pc = start_pc; pc > 0 && pc < current_pc; pc = next_pc)
1291     {
1292       bfd_byte insn[S390_MAX_INSTR_SIZE];
1293       int insn_len = s390_readinstruction (insn, pc);
1294
1295       bfd_byte dummy[S390_MAX_INSTR_SIZE] = { 0 };
1296       bfd_byte *insn32 = word_size == 4 ? insn : dummy;
1297       bfd_byte *insn64 = word_size == 8 ? insn : dummy;
1298
1299       /* Fields for various kinds of instructions.  */
1300       unsigned int b2, r1, r2, x2, r3;
1301       int i2, d2;
1302
1303       /* The values of SP and FP before this instruction,
1304          for detecting instructions that change them.  */
1305       pv_t pre_insn_sp, pre_insn_fp;
1306       /* Likewise for the flag whether the back chain was saved.  */
1307       int pre_insn_back_chain_saved_p;
1308
1309       /* If we got an error trying to read the instruction, report it.  */
1310       if (insn_len < 0)
1311         {
1312           result = 0;
1313           break;
1314         }
1315
1316       next_pc = pc + insn_len;
1317
1318       pre_insn_sp = data->gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1319       pre_insn_fp = data->gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1320       pre_insn_back_chain_saved_p = data->back_chain_saved_p;
1321
1322
1323       /* LHI r1, i2 --- load halfword immediate.  */
1324       /* LGHI r1, i2 --- load halfword immediate (64-bit version).  */
1325       /* LGFI r1, i2 --- load fullword immediate.  */
1326       if (is_ri (insn32, op1_lhi, op2_lhi, &r1, &i2)
1327           || is_ri (insn64, op1_lghi, op2_lghi, &r1, &i2)
1328           || is_ril (insn, op1_lgfi, op2_lgfi, &r1, &i2))
1329         data->gpr[r1] = pv_constant (i2);
1330
1331       /* LR r1, r2 --- load from register.  */
1332       /* LGR r1, r2 --- load from register (64-bit version).  */
1333       else if (is_rr (insn32, op_lr, &r1, &r2)
1334                || is_rre (insn64, op_lgr, &r1, &r2))
1335         data->gpr[r1] = data->gpr[r2];
1336
1337       /* L r1, d2(x2, b2) --- load.  */
1338       /* LY r1, d2(x2, b2) --- load (long-displacement version).  */
1339       /* LG r1, d2(x2, b2) --- load (64-bit version).  */
1340       else if (is_rx (insn32, op_l, &r1, &d2, &x2, &b2)
1341                || is_rxy (insn32, op1_ly, op2_ly, &r1, &d2, &x2, &b2)
1342                || is_rxy (insn64, op1_lg, op2_lg, &r1, &d2, &x2, &b2))
1343         data->gpr[r1] = s390_load (data, d2, x2, b2, data->gpr_size);
1344
1345       /* ST r1, d2(x2, b2) --- store.  */
1346       /* STY r1, d2(x2, b2) --- store (long-displacement version).  */
1347       /* STG r1, d2(x2, b2) --- store (64-bit version).  */
1348       else if (is_rx (insn32, op_st, &r1, &d2, &x2, &b2)
1349                || is_rxy (insn32, op1_sty, op2_sty, &r1, &d2, &x2, &b2)
1350                || is_rxy (insn64, op1_stg, op2_stg, &r1, &d2, &x2, &b2))
1351         s390_store (data, d2, x2, b2, data->gpr_size, data->gpr[r1]);
1352
1353       /* STD r1, d2(x2,b2) --- store floating-point register.  */
1354       else if (is_rx (insn, op_std, &r1, &d2, &x2, &b2))
1355         s390_store (data, d2, x2, b2, data->fpr_size, data->fpr[r1]);
1356
1357       /* STM r1, r3, d2(b2) --- store multiple.  */
1358       /* STMY r1, r3, d2(b2) --- store multiple (long-displacement
1359          version).  */
1360       /* STMG r1, r3, d2(b2) --- store multiple (64-bit version).  */
1361       else if (is_rs (insn32, op_stm, &r1, &r3, &d2, &b2)
1362                || is_rsy (insn32, op1_stmy, op2_stmy, &r1, &r3, &d2, &b2)
1363                || is_rsy (insn64, op1_stmg, op2_stmg, &r1, &r3, &d2, &b2))
1364         {
1365           for (; r1 <= r3; r1++, d2 += data->gpr_size)
1366             s390_store (data, d2, 0, b2, data->gpr_size, data->gpr[r1]);
1367         }
1368
1369       /* AHI r1, i2 --- add halfword immediate.  */
1370       /* AGHI r1, i2 --- add halfword immediate (64-bit version).  */
1371       /* AFI r1, i2 --- add fullword immediate.  */
1372       /* AGFI r1, i2 --- add fullword immediate (64-bit version).  */
1373       else if (is_ri (insn32, op1_ahi, op2_ahi, &r1, &i2)
1374                || is_ri (insn64, op1_aghi, op2_aghi, &r1, &i2)
1375                || is_ril (insn32, op1_afi, op2_afi, &r1, &i2)
1376                || is_ril (insn64, op1_agfi, op2_agfi, &r1, &i2))
1377         data->gpr[r1] = pv_add_constant (data->gpr[r1], i2);
1378
1379       /* ALFI r1, i2 --- add logical immediate.  */
1380       /* ALGFI r1, i2 --- add logical immediate (64-bit version).  */
1381       else if (is_ril (insn32, op1_alfi, op2_alfi, &r1, &i2)
1382                || is_ril (insn64, op1_algfi, op2_algfi, &r1, &i2))
1383         data->gpr[r1] = pv_add_constant (data->gpr[r1],
1384                                          (CORE_ADDR)i2 & 0xffffffff);
1385
1386       /* AR r1, r2 -- add register.  */
1387       /* AGR r1, r2 -- add register (64-bit version).  */
1388       else if (is_rr (insn32, op_ar, &r1, &r2)
1389                || is_rre (insn64, op_agr, &r1, &r2))
1390         data->gpr[r1] = pv_add (data->gpr[r1], data->gpr[r2]);
1391
1392       /* A r1, d2(x2, b2) -- add.  */
1393       /* AY r1, d2(x2, b2) -- add (long-displacement version).  */
1394       /* AG r1, d2(x2, b2) -- add (64-bit version).  */
1395       else if (is_rx (insn32, op_a, &r1, &d2, &x2, &b2)
1396                || is_rxy (insn32, op1_ay, op2_ay, &r1, &d2, &x2, &b2)
1397                || is_rxy (insn64, op1_ag, op2_ag, &r1, &d2, &x2, &b2))
1398         data->gpr[r1] = pv_add (data->gpr[r1],
1399                                 s390_load (data, d2, x2, b2, data->gpr_size));
1400
1401       /* SLFI r1, i2 --- subtract logical immediate.  */
1402       /* SLGFI r1, i2 --- subtract logical immediate (64-bit version).  */
1403       else if (is_ril (insn32, op1_slfi, op2_slfi, &r1, &i2)
1404                || is_ril (insn64, op1_slgfi, op2_slgfi, &r1, &i2))
1405         data->gpr[r1] = pv_add_constant (data->gpr[r1],
1406                                          -((CORE_ADDR)i2 & 0xffffffff));
1407
1408       /* SR r1, r2 -- subtract register.  */
1409       /* SGR r1, r2 -- subtract register (64-bit version).  */
1410       else if (is_rr (insn32, op_sr, &r1, &r2)
1411                || is_rre (insn64, op_sgr, &r1, &r2))
1412         data->gpr[r1] = pv_subtract (data->gpr[r1], data->gpr[r2]);
1413
1414       /* S r1, d2(x2, b2) -- subtract.  */
1415       /* SY r1, d2(x2, b2) -- subtract (long-displacement version).  */
1416       /* SG r1, d2(x2, b2) -- subtract (64-bit version).  */
1417       else if (is_rx (insn32, op_s, &r1, &d2, &x2, &b2)
1418                || is_rxy (insn32, op1_sy, op2_sy, &r1, &d2, &x2, &b2)
1419                || is_rxy (insn64, op1_sg, op2_sg, &r1, &d2, &x2, &b2))
1420         data->gpr[r1] = pv_subtract (data->gpr[r1],
1421                                 s390_load (data, d2, x2, b2, data->gpr_size));
1422
1423       /* LA r1, d2(x2, b2) --- load address.  */
1424       /* LAY r1, d2(x2, b2) --- load address (long-displacement version).  */
1425       else if (is_rx (insn, op_la, &r1, &d2, &x2, &b2)
1426                || is_rxy (insn, op1_lay, op2_lay, &r1, &d2, &x2, &b2))
1427         data->gpr[r1] = s390_addr (data, d2, x2, b2);
1428
1429       /* LARL r1, i2 --- load address relative long.  */
1430       else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2))
1431         data->gpr[r1] = pv_constant (pc + i2 * 2);
1432
1433       /* BASR r1, 0 --- branch and save.
1434          Since r2 is zero, this saves the PC in r1, but doesn't branch.  */
1435       else if (is_rr (insn, op_basr, &r1, &r2)
1436                && r2 == 0)
1437         data->gpr[r1] = pv_constant (next_pc);
1438
1439       /* BRAS r1, i2 --- branch relative and save.  */
1440       else if (is_ri (insn, op1_bras, op2_bras, &r1, &i2))
1441         {
1442           data->gpr[r1] = pv_constant (next_pc);
1443           next_pc = pc + i2 * 2;
1444
1445           /* We'd better not interpret any backward branches.  We'll
1446              never terminate.  */
1447           if (next_pc <= pc)
1448             break;
1449         }
1450
1451       /* Terminate search when hitting any other branch instruction.  */
1452       else if (is_rr (insn, op_basr, &r1, &r2)
1453                || is_rx (insn, op_bas, &r1, &d2, &x2, &b2)
1454                || is_rr (insn, op_bcr, &r1, &r2)
1455                || is_rx (insn, op_bc, &r1, &d2, &x2, &b2)
1456                || is_ri (insn, op1_brc, op2_brc, &r1, &i2)
1457                || is_ril (insn, op1_brcl, op2_brcl, &r1, &i2)
1458                || is_ril (insn, op1_brasl, op2_brasl, &r2, &i2))
1459         break;
1460
1461       else
1462         /* An instruction we don't know how to simulate.  The only
1463            safe thing to do would be to set every value we're tracking
1464            to 'unknown'.  Instead, we'll be optimistic: we assume that
1465            we *can* interpret every instruction that the compiler uses
1466            to manipulate any of the data we're interested in here --
1467            then we can just ignore anything else.  */
1468         ;
1469
1470       /* Record the address after the last instruction that changed
1471          the FP, SP, or backlink.  Ignore instructions that changed
1472          them back to their original values --- those are probably
1473          restore instructions.  (The back chain is never restored,
1474          just popped.)  */
1475       {
1476         pv_t sp = data->gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1477         pv_t fp = data->gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1478         
1479         if ((! pv_is_identical (pre_insn_sp, sp)
1480              && ! pv_is_register_k (sp, S390_SP_REGNUM, 0)
1481              && sp.kind != pvk_unknown)
1482             || (! pv_is_identical (pre_insn_fp, fp)
1483                 && ! pv_is_register_k (fp, S390_FRAME_REGNUM, 0)
1484                 && fp.kind != pvk_unknown)
1485             || pre_insn_back_chain_saved_p != data->back_chain_saved_p)
1486           result = next_pc;
1487       }
1488     }
1489
1490   /* Record where all the registers were saved.  */
1491   pv_area_scan (data->stack, s390_check_for_saved, data);
1492
1493   free_pv_area (data->stack);
1494   data->stack = NULL;
1495
1496   return result;
1497 }
1498
1499 /* Advance PC across any function entry prologue instructions to reach 
1500    some "real" code.  */
1501 static CORE_ADDR
1502 s390_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1503 {
1504   struct s390_prologue_data data;
1505   CORE_ADDR skip_pc;
1506   skip_pc = s390_analyze_prologue (gdbarch, pc, (CORE_ADDR)-1, &data);
1507   return skip_pc ? skip_pc : pc;
1508 }
1509
1510 /* Return true if we are in the functin's epilogue, i.e. after the
1511    instruction that destroyed the function's stack frame.  */
1512 static int
1513 s390_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1514 {
1515   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1516
1517   /* In frameless functions, there's not frame to destroy and thus
1518      we don't care about the epilogue.
1519
1520      In functions with frame, the epilogue sequence is a pair of
1521      a LM-type instruction that restores (amongst others) the
1522      return register %r14 and the stack pointer %r15, followed
1523      by a branch 'br %r14' --or equivalent-- that effects the
1524      actual return.
1525
1526      In that situation, this function needs to return 'true' in
1527      exactly one case: when pc points to that branch instruction.
1528
1529      Thus we try to disassemble the one instructions immediately
1530      preceding pc and check whether it is an LM-type instruction
1531      modifying the stack pointer.
1532
1533      Note that disassembling backwards is not reliable, so there
1534      is a slight chance of false positives here ...  */
1535
1536   bfd_byte insn[6];
1537   unsigned int r1, r3, b2;
1538   int d2;
1539
1540   if (word_size == 4
1541       && !target_read_memory (pc - 4, insn, 4)
1542       && is_rs (insn, op_lm, &r1, &r3, &d2, &b2)
1543       && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1544     return 1;
1545
1546   if (word_size == 4
1547       && !target_read_memory (pc - 6, insn, 6)
1548       && is_rsy (insn, op1_lmy, op2_lmy, &r1, &r3, &d2, &b2)
1549       && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1550     return 1;
1551
1552   if (word_size == 8
1553       && !target_read_memory (pc - 6, insn, 6)
1554       && is_rsy (insn, op1_lmg, op2_lmg, &r1, &r3, &d2, &b2)
1555       && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1556     return 1;
1557
1558   return 0;
1559 }
1560
1561 /* Displaced stepping.  */
1562
1563 /* Fix up the state of registers and memory after having single-stepped
1564    a displaced instruction.  */
1565 static void
1566 s390_displaced_step_fixup (struct gdbarch *gdbarch,
1567                            struct displaced_step_closure *closure,
1568                            CORE_ADDR from, CORE_ADDR to,
1569                            struct regcache *regs)
1570 {
1571   /* Since we use simple_displaced_step_copy_insn, our closure is a
1572      copy of the instruction.  */
1573   gdb_byte *insn = (gdb_byte *) closure;
1574   static int s390_instrlen[] = { 2, 4, 4, 6 };
1575   int insnlen = s390_instrlen[insn[0] >> 6];
1576
1577   /* Fields for various kinds of instructions.  */
1578   unsigned int b2, r1, r2, x2, r3;
1579   int i2, d2;
1580
1581   /* Get current PC and addressing mode bit.  */
1582   CORE_ADDR pc = regcache_read_pc (regs);
1583   ULONGEST amode = 0;
1584
1585   if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
1586     {
1587       regcache_cooked_read_unsigned (regs, S390_PSWA_REGNUM, &amode);
1588       amode &= 0x80000000;
1589     }
1590
1591   if (debug_displaced)
1592     fprintf_unfiltered (gdb_stdlog,
1593                         "displaced: (s390) fixup (%s, %s) pc %s len %d amode 0x%x\n",
1594                         paddress (gdbarch, from), paddress (gdbarch, to),
1595                         paddress (gdbarch, pc), insnlen, (int) amode);
1596
1597   /* Handle absolute branch and save instructions.  */
1598   if (is_rr (insn, op_basr, &r1, &r2)
1599       || is_rx (insn, op_bas, &r1, &d2, &x2, &b2))
1600     {
1601       /* Recompute saved return address in R1.  */
1602       regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1603                                       amode | (from + insnlen));
1604     }
1605
1606   /* Handle absolute branch instructions.  */
1607   else if (is_rr (insn, op_bcr, &r1, &r2)
1608            || is_rx (insn, op_bc, &r1, &d2, &x2, &b2)
1609            || is_rr (insn, op_bctr, &r1, &r2)
1610            || is_rre (insn, op_bctgr, &r1, &r2)
1611            || is_rx (insn, op_bct, &r1, &d2, &x2, &b2)
1612            || is_rxy (insn, op1_bctg, op2_brctg, &r1, &d2, &x2, &b2)
1613            || is_rs (insn, op_bxh, &r1, &r3, &d2, &b2)
1614            || is_rsy (insn, op1_bxhg, op2_bxhg, &r1, &r3, &d2, &b2)
1615            || is_rs (insn, op_bxle, &r1, &r3, &d2, &b2)
1616            || is_rsy (insn, op1_bxleg, op2_bxleg, &r1, &r3, &d2, &b2))
1617     {
1618       /* Update PC iff branch was *not* taken.  */
1619       if (pc == to + insnlen)
1620         regcache_write_pc (regs, from + insnlen);
1621     }
1622
1623   /* Handle PC-relative branch and save instructions.  */
1624   else if (is_ri (insn, op1_bras, op2_bras, &r1, &i2)
1625            || is_ril (insn, op1_brasl, op2_brasl, &r1, &i2))
1626     {
1627       /* Update PC.  */
1628       regcache_write_pc (regs, pc - to + from);
1629       /* Recompute saved return address in R1.  */
1630       regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1631                                       amode | (from + insnlen));
1632     }
1633
1634   /* Handle PC-relative branch instructions.  */
1635   else if (is_ri (insn, op1_brc, op2_brc, &r1, &i2)
1636            || is_ril (insn, op1_brcl, op2_brcl, &r1, &i2)
1637            || is_ri (insn, op1_brct, op2_brct, &r1, &i2)
1638            || is_ri (insn, op1_brctg, op2_brctg, &r1, &i2)
1639            || is_rsi (insn, op_brxh, &r1, &r3, &i2)
1640            || is_rie (insn, op1_brxhg, op2_brxhg, &r1, &r3, &i2)
1641            || is_rsi (insn, op_brxle, &r1, &r3, &i2)
1642            || is_rie (insn, op1_brxlg, op2_brxlg, &r1, &r3, &i2))
1643     {
1644       /* Update PC.  */
1645       regcache_write_pc (regs, pc - to + from);
1646     }
1647
1648   /* Handle LOAD ADDRESS RELATIVE LONG.  */
1649   else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2))
1650     {
1651       /* Update PC.  */
1652       regcache_write_pc (regs, from + insnlen);
1653       /* Recompute output address in R1.  */ 
1654       regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1655                                       amode | (from + i2 * 2));
1656     }
1657
1658   /* If we executed a breakpoint instruction, point PC right back at it.  */
1659   else if (insn[0] == 0x0 && insn[1] == 0x1)
1660     regcache_write_pc (regs, from);
1661
1662   /* For any other insn, PC points right after the original instruction.  */
1663   else
1664     regcache_write_pc (regs, from + insnlen);
1665
1666   if (debug_displaced)
1667     fprintf_unfiltered (gdb_stdlog,
1668                         "displaced: (s390) pc is now %s\n",
1669                         paddress (gdbarch, regcache_read_pc (regs)));
1670 }
1671
1672
1673 /* Helper routine to unwind pseudo registers.  */
1674
1675 static struct value *
1676 s390_unwind_pseudo_register (struct frame_info *this_frame, int regnum)
1677 {
1678   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1679   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1680   struct type *type = register_type (gdbarch, regnum);
1681
1682   /* Unwind PC via PSW address.  */
1683   if (regnum == tdep->pc_regnum)
1684     {
1685       struct value *val;
1686
1687       val = frame_unwind_register_value (this_frame, S390_PSWA_REGNUM);
1688       if (!value_optimized_out (val))
1689         {
1690           LONGEST pswa = value_as_long (val);
1691
1692           if (TYPE_LENGTH (type) == 4)
1693             return value_from_pointer (type, pswa & 0x7fffffff);
1694           else
1695             return value_from_pointer (type, pswa);
1696         }
1697     }
1698
1699   /* Unwind CC via PSW mask.  */
1700   if (regnum == tdep->cc_regnum)
1701     {
1702       struct value *val;
1703
1704       val = frame_unwind_register_value (this_frame, S390_PSWM_REGNUM);
1705       if (!value_optimized_out (val))
1706         {
1707           LONGEST pswm = value_as_long (val);
1708
1709           if (TYPE_LENGTH (type) == 4)
1710             return value_from_longest (type, (pswm >> 12) & 3);
1711           else
1712             return value_from_longest (type, (pswm >> 44) & 3);
1713         }
1714     }
1715
1716   /* Unwind full GPRs to show at least the lower halves (as the
1717      upper halves are undefined).  */
1718   if (tdep->gpr_full_regnum != -1
1719       && regnum >= tdep->gpr_full_regnum
1720       && regnum < tdep->gpr_full_regnum + 16)
1721     {
1722       int reg = regnum - tdep->gpr_full_regnum;
1723       struct value *val;
1724
1725       val = frame_unwind_register_value (this_frame, S390_R0_REGNUM + reg);
1726       if (!value_optimized_out (val))
1727         return value_cast (type, val);
1728     }
1729
1730   return allocate_optimized_out_value (type);
1731 }
1732
1733 static struct value *
1734 s390_trad_frame_prev_register (struct frame_info *this_frame,
1735                                struct trad_frame_saved_reg saved_regs[],
1736                                int regnum)
1737 {
1738   if (regnum < S390_NUM_REGS)
1739     return trad_frame_get_prev_register (this_frame, saved_regs, regnum);
1740   else
1741     return s390_unwind_pseudo_register (this_frame, regnum);
1742 }
1743
1744
1745 /* Normal stack frames.  */
1746
1747 struct s390_unwind_cache {
1748
1749   CORE_ADDR func;
1750   CORE_ADDR frame_base;
1751   CORE_ADDR local_base;
1752
1753   struct trad_frame_saved_reg *saved_regs;
1754 };
1755
1756 static int
1757 s390_prologue_frame_unwind_cache (struct frame_info *this_frame,
1758                                   struct s390_unwind_cache *info)
1759 {
1760   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1761   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1762   struct s390_prologue_data data;
1763   pv_t *fp = &data.gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1764   pv_t *sp = &data.gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1765   int i;
1766   CORE_ADDR cfa;
1767   CORE_ADDR func;
1768   CORE_ADDR result;
1769   ULONGEST reg;
1770   CORE_ADDR prev_sp;
1771   int frame_pointer;
1772   int size;
1773   struct frame_info *next_frame;
1774
1775   /* Try to find the function start address.  If we can't find it, we don't
1776      bother searching for it -- with modern compilers this would be mostly
1777      pointless anyway.  Trust that we'll either have valid DWARF-2 CFI data
1778      or else a valid backchain ...  */
1779   func = get_frame_func (this_frame);
1780   if (!func)
1781     return 0;
1782
1783   /* Try to analyze the prologue.  */
1784   result = s390_analyze_prologue (gdbarch, func,
1785                                   get_frame_pc (this_frame), &data);
1786   if (!result)
1787     return 0;
1788
1789   /* If this was successful, we should have found the instruction that
1790      sets the stack pointer register to the previous value of the stack 
1791      pointer minus the frame size.  */
1792   if (!pv_is_register (*sp, S390_SP_REGNUM))
1793     return 0;
1794
1795   /* A frame size of zero at this point can mean either a real 
1796      frameless function, or else a failure to find the prologue.
1797      Perform some sanity checks to verify we really have a 
1798      frameless function.  */
1799   if (sp->k == 0)
1800     {
1801       /* If the next frame is a NORMAL_FRAME, this frame *cannot* have frame 
1802          size zero.  This is only possible if the next frame is a sentinel 
1803          frame, a dummy frame, or a signal trampoline frame.  */
1804       /* FIXME: cagney/2004-05-01: This sanity check shouldn't be
1805          needed, instead the code should simpliy rely on its
1806          analysis.  */
1807       next_frame = get_next_frame (this_frame);
1808       while (next_frame && get_frame_type (next_frame) == INLINE_FRAME)
1809         next_frame = get_next_frame (next_frame);
1810       if (next_frame
1811           && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
1812         return 0;
1813
1814       /* If we really have a frameless function, %r14 must be valid
1815          -- in particular, it must point to a different function.  */
1816       reg = get_frame_register_unsigned (this_frame, S390_RETADDR_REGNUM);
1817       reg = gdbarch_addr_bits_remove (gdbarch, reg) - 1;
1818       if (get_pc_function_start (reg) == func)
1819         {
1820           /* However, there is one case where it *is* valid for %r14
1821              to point to the same function -- if this is a recursive
1822              call, and we have stopped in the prologue *before* the
1823              stack frame was allocated.
1824
1825              Recognize this case by looking ahead a bit ...  */
1826
1827           struct s390_prologue_data data2;
1828           pv_t *sp = &data2.gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1829
1830           if (!(s390_analyze_prologue (gdbarch, func, (CORE_ADDR)-1, &data2)
1831                 && pv_is_register (*sp, S390_SP_REGNUM)
1832                 && sp->k != 0))
1833             return 0;
1834         }
1835     }
1836
1837
1838   /* OK, we've found valid prologue data.  */
1839   size = -sp->k;
1840
1841   /* If the frame pointer originally also holds the same value
1842      as the stack pointer, we're probably using it.  If it holds
1843      some other value -- even a constant offset -- it is most
1844      likely used as temp register.  */
1845   if (pv_is_identical (*sp, *fp))
1846     frame_pointer = S390_FRAME_REGNUM;
1847   else
1848     frame_pointer = S390_SP_REGNUM;
1849
1850   /* If we've detected a function with stack frame, we'll still have to 
1851      treat it as frameless if we're currently within the function epilog 
1852      code at a point where the frame pointer has already been restored.
1853      This can only happen in an innermost frame.  */
1854   /* FIXME: cagney/2004-05-01: This sanity check shouldn't be needed,
1855      instead the code should simpliy rely on its analysis.  */
1856   next_frame = get_next_frame (this_frame);
1857   while (next_frame && get_frame_type (next_frame) == INLINE_FRAME)
1858     next_frame = get_next_frame (next_frame);
1859   if (size > 0
1860       && (next_frame == NULL
1861           || get_frame_type (get_next_frame (this_frame)) != NORMAL_FRAME))
1862     {
1863       /* See the comment in s390_in_function_epilogue_p on why this is
1864          not completely reliable ...  */
1865       if (s390_in_function_epilogue_p (gdbarch, get_frame_pc (this_frame)))
1866         {
1867           memset (&data, 0, sizeof (data));
1868           size = 0;
1869           frame_pointer = S390_SP_REGNUM;
1870         }
1871     }
1872
1873   /* Once we know the frame register and the frame size, we can unwind
1874      the current value of the frame register from the next frame, and
1875      add back the frame size to arrive that the previous frame's 
1876      stack pointer value.  */
1877   prev_sp = get_frame_register_unsigned (this_frame, frame_pointer) + size;
1878   cfa = prev_sp + 16*word_size + 32;
1879
1880   /* Set up ABI call-saved/call-clobbered registers.  */
1881   for (i = 0; i < S390_NUM_REGS; i++)
1882     if (!s390_register_call_saved (gdbarch, i))
1883       trad_frame_set_unknown (info->saved_regs, i);
1884
1885   /* CC is always call-clobbered.  */
1886   trad_frame_set_unknown (info->saved_regs, S390_PSWM_REGNUM);
1887
1888   /* Record the addresses of all register spill slots the prologue parser
1889      has recognized.  Consider only registers defined as call-saved by the
1890      ABI; for call-clobbered registers the parser may have recognized
1891      spurious stores.  */
1892
1893   for (i = 0; i < 16; i++)
1894     if (s390_register_call_saved (gdbarch, S390_R0_REGNUM + i)
1895         && data.gpr_slot[i] != 0)
1896       info->saved_regs[S390_R0_REGNUM + i].addr = cfa - data.gpr_slot[i];
1897
1898   for (i = 0; i < 16; i++)
1899     if (s390_register_call_saved (gdbarch, S390_F0_REGNUM + i)
1900         && data.fpr_slot[i] != 0)
1901       info->saved_regs[S390_F0_REGNUM + i].addr = cfa - data.fpr_slot[i];
1902
1903   /* Function return will set PC to %r14.  */
1904   info->saved_regs[S390_PSWA_REGNUM] = info->saved_regs[S390_RETADDR_REGNUM];
1905
1906   /* In frameless functions, we unwind simply by moving the return
1907      address to the PC.  However, if we actually stored to the
1908      save area, use that -- we might only think the function frameless
1909      because we're in the middle of the prologue ...  */
1910   if (size == 0
1911       && !trad_frame_addr_p (info->saved_regs, S390_PSWA_REGNUM))
1912     {
1913       info->saved_regs[S390_PSWA_REGNUM].realreg = S390_RETADDR_REGNUM;
1914     }
1915
1916   /* Another sanity check: unless this is a frameless function,
1917      we should have found spill slots for SP and PC.
1918      If not, we cannot unwind further -- this happens e.g. in
1919      libc's thread_start routine.  */
1920   if (size > 0)
1921     {
1922       if (!trad_frame_addr_p (info->saved_regs, S390_SP_REGNUM)
1923           || !trad_frame_addr_p (info->saved_regs, S390_PSWA_REGNUM))
1924         prev_sp = -1;
1925     }
1926
1927   /* We use the current value of the frame register as local_base,
1928      and the top of the register save area as frame_base.  */
1929   if (prev_sp != -1)
1930     {
1931       info->frame_base = prev_sp + 16*word_size + 32;
1932       info->local_base = prev_sp - size;
1933     }
1934
1935   info->func = func;
1936   return 1;
1937 }
1938
1939 static void
1940 s390_backchain_frame_unwind_cache (struct frame_info *this_frame,
1941                                    struct s390_unwind_cache *info)
1942 {
1943   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1944   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1945   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1946   CORE_ADDR backchain;
1947   ULONGEST reg;
1948   LONGEST sp;
1949   int i;
1950
1951   /* Set up ABI call-saved/call-clobbered registers.  */
1952   for (i = 0; i < S390_NUM_REGS; i++)
1953     if (!s390_register_call_saved (gdbarch, i))
1954       trad_frame_set_unknown (info->saved_regs, i);
1955
1956   /* CC is always call-clobbered.  */
1957   trad_frame_set_unknown (info->saved_regs, S390_PSWM_REGNUM);
1958
1959   /* Get the backchain.  */
1960   reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
1961   backchain = read_memory_unsigned_integer (reg, word_size, byte_order);
1962
1963   /* A zero backchain terminates the frame chain.  As additional
1964      sanity check, let's verify that the spill slot for SP in the
1965      save area pointed to by the backchain in fact links back to
1966      the save area.  */
1967   if (backchain != 0
1968       && safe_read_memory_integer (backchain + 15*word_size,
1969                                    word_size, byte_order, &sp)
1970       && (CORE_ADDR)sp == backchain)
1971     {
1972       /* We don't know which registers were saved, but it will have
1973          to be at least %r14 and %r15.  This will allow us to continue
1974          unwinding, but other prev-frame registers may be incorrect ...  */
1975       info->saved_regs[S390_SP_REGNUM].addr = backchain + 15*word_size;
1976       info->saved_regs[S390_RETADDR_REGNUM].addr = backchain + 14*word_size;
1977
1978       /* Function return will set PC to %r14.  */
1979       info->saved_regs[S390_PSWA_REGNUM]
1980         = info->saved_regs[S390_RETADDR_REGNUM];
1981
1982       /* We use the current value of the frame register as local_base,
1983          and the top of the register save area as frame_base.  */
1984       info->frame_base = backchain + 16*word_size + 32;
1985       info->local_base = reg;
1986     }
1987
1988   info->func = get_frame_pc (this_frame);
1989 }
1990
1991 static struct s390_unwind_cache *
1992 s390_frame_unwind_cache (struct frame_info *this_frame,
1993                          void **this_prologue_cache)
1994 {
1995   struct s390_unwind_cache *info;
1996   if (*this_prologue_cache)
1997     return *this_prologue_cache;
1998
1999   info = FRAME_OBSTACK_ZALLOC (struct s390_unwind_cache);
2000   *this_prologue_cache = info;
2001   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2002   info->func = -1;
2003   info->frame_base = -1;
2004   info->local_base = -1;
2005
2006   /* Try to use prologue analysis to fill the unwind cache.
2007      If this fails, fall back to reading the stack backchain.  */
2008   if (!s390_prologue_frame_unwind_cache (this_frame, info))
2009     s390_backchain_frame_unwind_cache (this_frame, info);
2010
2011   return info;
2012 }
2013
2014 static void
2015 s390_frame_this_id (struct frame_info *this_frame,
2016                     void **this_prologue_cache,
2017                     struct frame_id *this_id)
2018 {
2019   struct s390_unwind_cache *info
2020     = s390_frame_unwind_cache (this_frame, this_prologue_cache);
2021
2022   if (info->frame_base == -1)
2023     return;
2024
2025   *this_id = frame_id_build (info->frame_base, info->func);
2026 }
2027
2028 static struct value *
2029 s390_frame_prev_register (struct frame_info *this_frame,
2030                           void **this_prologue_cache, int regnum)
2031 {
2032   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2033   struct s390_unwind_cache *info
2034     = s390_frame_unwind_cache (this_frame, this_prologue_cache);
2035
2036   return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2037 }
2038
2039 static const struct frame_unwind s390_frame_unwind = {
2040   NORMAL_FRAME,
2041   default_frame_unwind_stop_reason,
2042   s390_frame_this_id,
2043   s390_frame_prev_register,
2044   NULL,
2045   default_frame_sniffer
2046 };
2047
2048
2049 /* Code stubs and their stack frames.  For things like PLTs and NULL
2050    function calls (where there is no true frame and the return address
2051    is in the RETADDR register).  */
2052
2053 struct s390_stub_unwind_cache
2054 {
2055   CORE_ADDR frame_base;
2056   struct trad_frame_saved_reg *saved_regs;
2057 };
2058
2059 static struct s390_stub_unwind_cache *
2060 s390_stub_frame_unwind_cache (struct frame_info *this_frame,
2061                               void **this_prologue_cache)
2062 {
2063   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2064   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2065   struct s390_stub_unwind_cache *info;
2066   ULONGEST reg;
2067
2068   if (*this_prologue_cache)
2069     return *this_prologue_cache;
2070
2071   info = FRAME_OBSTACK_ZALLOC (struct s390_stub_unwind_cache);
2072   *this_prologue_cache = info;
2073   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2074
2075   /* The return address is in register %r14.  */
2076   info->saved_regs[S390_PSWA_REGNUM].realreg = S390_RETADDR_REGNUM;
2077
2078   /* Retrieve stack pointer and determine our frame base.  */
2079   reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2080   info->frame_base = reg + 16*word_size + 32;
2081
2082   return info;
2083 }
2084
2085 static void
2086 s390_stub_frame_this_id (struct frame_info *this_frame,
2087                          void **this_prologue_cache,
2088                          struct frame_id *this_id)
2089 {
2090   struct s390_stub_unwind_cache *info
2091     = s390_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2092   *this_id = frame_id_build (info->frame_base, get_frame_pc (this_frame));
2093 }
2094
2095 static struct value *
2096 s390_stub_frame_prev_register (struct frame_info *this_frame,
2097                                void **this_prologue_cache, int regnum)
2098 {
2099   struct s390_stub_unwind_cache *info
2100     = s390_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2101   return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2102 }
2103
2104 static int
2105 s390_stub_frame_sniffer (const struct frame_unwind *self,
2106                          struct frame_info *this_frame,
2107                          void **this_prologue_cache)
2108 {
2109   CORE_ADDR addr_in_block;
2110   bfd_byte insn[S390_MAX_INSTR_SIZE];
2111
2112   /* If the current PC points to non-readable memory, we assume we
2113      have trapped due to an invalid function pointer call.  We handle
2114      the non-existing current function like a PLT stub.  */
2115   addr_in_block = get_frame_address_in_block (this_frame);
2116   if (in_plt_section (addr_in_block, NULL)
2117       || s390_readinstruction (insn, get_frame_pc (this_frame)) < 0)
2118     return 1;
2119   return 0;
2120 }
2121
2122 static const struct frame_unwind s390_stub_frame_unwind = {
2123   NORMAL_FRAME,
2124   default_frame_unwind_stop_reason,
2125   s390_stub_frame_this_id,
2126   s390_stub_frame_prev_register,
2127   NULL,
2128   s390_stub_frame_sniffer
2129 };
2130
2131
2132 /* Signal trampoline stack frames.  */
2133
2134 struct s390_sigtramp_unwind_cache {
2135   CORE_ADDR frame_base;
2136   struct trad_frame_saved_reg *saved_regs;
2137 };
2138
2139 static struct s390_sigtramp_unwind_cache *
2140 s390_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
2141                                   void **this_prologue_cache)
2142 {
2143   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2144   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2145   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2146   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2147   struct s390_sigtramp_unwind_cache *info;
2148   ULONGEST this_sp, prev_sp;
2149   CORE_ADDR next_ra, next_cfa, sigreg_ptr, sigreg_high_off;
2150   int i;
2151
2152   if (*this_prologue_cache)
2153     return *this_prologue_cache;
2154
2155   info = FRAME_OBSTACK_ZALLOC (struct s390_sigtramp_unwind_cache);
2156   *this_prologue_cache = info;
2157   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2158
2159   this_sp = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2160   next_ra = get_frame_pc (this_frame);
2161   next_cfa = this_sp + 16*word_size + 32;
2162
2163   /* New-style RT frame:
2164         retcode + alignment (8 bytes)
2165         siginfo (128 bytes)
2166         ucontext (contains sigregs at offset 5 words).  */
2167   if (next_ra == next_cfa)
2168     {
2169       sigreg_ptr = next_cfa + 8 + 128 + align_up (5*word_size, 8);
2170       /* sigregs are followed by uc_sigmask (8 bytes), then by the
2171          upper GPR halves if present.  */
2172       sigreg_high_off = 8;
2173     }
2174
2175   /* Old-style RT frame and all non-RT frames:
2176         old signal mask (8 bytes)
2177         pointer to sigregs.  */
2178   else
2179     {
2180       sigreg_ptr = read_memory_unsigned_integer (next_cfa + 8,
2181                                                  word_size, byte_order);
2182       /* sigregs are followed by signo (4 bytes), then by the
2183          upper GPR halves if present.  */
2184       sigreg_high_off = 4;
2185     }
2186
2187   /* The sigregs structure looks like this:
2188             long   psw_mask;
2189             long   psw_addr;
2190             long   gprs[16];
2191             int    acrs[16];
2192             int    fpc;
2193             int    __pad;
2194             double fprs[16];  */
2195
2196   /* PSW mask and address.  */
2197   info->saved_regs[S390_PSWM_REGNUM].addr = sigreg_ptr;
2198   sigreg_ptr += word_size;
2199   info->saved_regs[S390_PSWA_REGNUM].addr = sigreg_ptr;
2200   sigreg_ptr += word_size;
2201
2202   /* Then the GPRs.  */
2203   for (i = 0; i < 16; i++)
2204     {
2205       info->saved_regs[S390_R0_REGNUM + i].addr = sigreg_ptr;
2206       sigreg_ptr += word_size;
2207     }
2208
2209   /* Then the ACRs.  */
2210   for (i = 0; i < 16; i++)
2211     {
2212       info->saved_regs[S390_A0_REGNUM + i].addr = sigreg_ptr;
2213       sigreg_ptr += 4;
2214     }
2215
2216   /* The floating-point control word.  */
2217   info->saved_regs[S390_FPC_REGNUM].addr = sigreg_ptr;
2218   sigreg_ptr += 8;
2219
2220   /* And finally the FPRs.  */
2221   for (i = 0; i < 16; i++)
2222     {
2223       info->saved_regs[S390_F0_REGNUM + i].addr = sigreg_ptr;
2224       sigreg_ptr += 8;
2225     }
2226
2227   /* If we have them, the GPR upper halves are appended at the end.  */
2228   sigreg_ptr += sigreg_high_off;
2229   if (tdep->gpr_full_regnum != -1)
2230     for (i = 0; i < 16; i++)
2231       {
2232         info->saved_regs[S390_R0_UPPER_REGNUM + i].addr = sigreg_ptr;
2233         sigreg_ptr += 4;
2234       }
2235
2236   /* Restore the previous frame's SP.  */
2237   prev_sp = read_memory_unsigned_integer (
2238                         info->saved_regs[S390_SP_REGNUM].addr,
2239                         word_size, byte_order);
2240
2241   /* Determine our frame base.  */
2242   info->frame_base = prev_sp + 16*word_size + 32;
2243
2244   return info;
2245 }
2246
2247 static void
2248 s390_sigtramp_frame_this_id (struct frame_info *this_frame,
2249                              void **this_prologue_cache,
2250                              struct frame_id *this_id)
2251 {
2252   struct s390_sigtramp_unwind_cache *info
2253     = s390_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
2254   *this_id = frame_id_build (info->frame_base, get_frame_pc (this_frame));
2255 }
2256
2257 static struct value *
2258 s390_sigtramp_frame_prev_register (struct frame_info *this_frame,
2259                                    void **this_prologue_cache, int regnum)
2260 {
2261   struct s390_sigtramp_unwind_cache *info
2262     = s390_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
2263   return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2264 }
2265
2266 static int
2267 s390_sigtramp_frame_sniffer (const struct frame_unwind *self,
2268                              struct frame_info *this_frame,
2269                              void **this_prologue_cache)
2270 {
2271   CORE_ADDR pc = get_frame_pc (this_frame);
2272   bfd_byte sigreturn[2];
2273
2274   if (target_read_memory (pc, sigreturn, 2))
2275     return 0;
2276
2277   if (sigreturn[0] != 0x0a /* svc */)
2278     return 0;
2279
2280   if (sigreturn[1] != 119 /* sigreturn */
2281       && sigreturn[1] != 173 /* rt_sigreturn */)
2282     return 0;
2283   
2284   return 1;
2285 }
2286
2287 static const struct frame_unwind s390_sigtramp_frame_unwind = {
2288   SIGTRAMP_FRAME,
2289   default_frame_unwind_stop_reason,
2290   s390_sigtramp_frame_this_id,
2291   s390_sigtramp_frame_prev_register,
2292   NULL,
2293   s390_sigtramp_frame_sniffer
2294 };
2295
2296
2297 /* Frame base handling.  */
2298
2299 static CORE_ADDR
2300 s390_frame_base_address (struct frame_info *this_frame, void **this_cache)
2301 {
2302   struct s390_unwind_cache *info
2303     = s390_frame_unwind_cache (this_frame, this_cache);
2304   return info->frame_base;
2305 }
2306
2307 static CORE_ADDR
2308 s390_local_base_address (struct frame_info *this_frame, void **this_cache)
2309 {
2310   struct s390_unwind_cache *info
2311     = s390_frame_unwind_cache (this_frame, this_cache);
2312   return info->local_base;
2313 }
2314
2315 static const struct frame_base s390_frame_base = {
2316   &s390_frame_unwind,
2317   s390_frame_base_address,
2318   s390_local_base_address,
2319   s390_local_base_address
2320 };
2321
2322 static CORE_ADDR
2323 s390_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2324 {
2325   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2326   ULONGEST pc;
2327   pc = frame_unwind_register_unsigned (next_frame, tdep->pc_regnum);
2328   return gdbarch_addr_bits_remove (gdbarch, pc);
2329 }
2330
2331 static CORE_ADDR
2332 s390_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
2333 {
2334   ULONGEST sp;
2335   sp = frame_unwind_register_unsigned (next_frame, S390_SP_REGNUM);
2336   return gdbarch_addr_bits_remove (gdbarch, sp);
2337 }
2338
2339
2340 /* DWARF-2 frame support.  */
2341
2342 static struct value *
2343 s390_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
2344                            int regnum)
2345 {
2346   return s390_unwind_pseudo_register (this_frame, regnum);
2347 }
2348
2349 static void
2350 s390_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
2351                             struct dwarf2_frame_state_reg *reg,
2352                             struct frame_info *this_frame)
2353 {
2354   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2355
2356   /* The condition code (and thus PSW mask) is call-clobbered.  */
2357   if (regnum == S390_PSWM_REGNUM)
2358     reg->how = DWARF2_FRAME_REG_UNDEFINED;
2359
2360   /* The PSW address unwinds to the return address.  */
2361   else if (regnum == S390_PSWA_REGNUM)
2362     reg->how = DWARF2_FRAME_REG_RA;
2363
2364   /* Fixed registers are call-saved or call-clobbered
2365      depending on the ABI in use.  */
2366   else if (regnum < S390_NUM_REGS)
2367     {
2368       if (s390_register_call_saved (gdbarch, regnum))
2369         reg->how = DWARF2_FRAME_REG_SAME_VALUE;
2370       else
2371         reg->how = DWARF2_FRAME_REG_UNDEFINED;
2372     }
2373
2374   /* We install a special function to unwind pseudos.  */
2375   else
2376     {
2377       reg->how = DWARF2_FRAME_REG_FN;
2378       reg->loc.fn = s390_dwarf2_prev_register;
2379     }
2380 }
2381
2382
2383 /* Dummy function calls.  */
2384
2385 /* Return non-zero if TYPE is an integer-like type, zero otherwise.
2386    "Integer-like" types are those that should be passed the way
2387    integers are: integers, enums, ranges, characters, and booleans.  */
2388 static int
2389 is_integer_like (struct type *type)
2390 {
2391   enum type_code code = TYPE_CODE (type);
2392
2393   return (code == TYPE_CODE_INT
2394           || code == TYPE_CODE_ENUM
2395           || code == TYPE_CODE_RANGE
2396           || code == TYPE_CODE_CHAR
2397           || code == TYPE_CODE_BOOL);
2398 }
2399
2400 /* Return non-zero if TYPE is a pointer-like type, zero otherwise.
2401    "Pointer-like" types are those that should be passed the way
2402    pointers are: pointers and references.  */
2403 static int
2404 is_pointer_like (struct type *type)
2405 {
2406   enum type_code code = TYPE_CODE (type);
2407
2408   return (code == TYPE_CODE_PTR
2409           || code == TYPE_CODE_REF);
2410 }
2411
2412
2413 /* Return non-zero if TYPE is a `float singleton' or `double
2414    singleton', zero otherwise.
2415
2416    A `T singleton' is a struct type with one member, whose type is
2417    either T or a `T singleton'.  So, the following are all float
2418    singletons:
2419
2420    struct { float x };
2421    struct { struct { float x; } x; };
2422    struct { struct { struct { float x; } x; } x; };
2423
2424    ... and so on.
2425
2426    All such structures are passed as if they were floats or doubles,
2427    as the (revised) ABI says.  */
2428 static int
2429 is_float_singleton (struct type *type)
2430 {
2431   if (TYPE_CODE (type) == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2432     {
2433       struct type *singleton_type = TYPE_FIELD_TYPE (type, 0);
2434       CHECK_TYPEDEF (singleton_type);
2435
2436       return (TYPE_CODE (singleton_type) == TYPE_CODE_FLT
2437               || TYPE_CODE (singleton_type) == TYPE_CODE_DECFLOAT
2438               || is_float_singleton (singleton_type));
2439     }
2440
2441   return 0;
2442 }
2443
2444
2445 /* Return non-zero if TYPE is a struct-like type, zero otherwise.
2446    "Struct-like" types are those that should be passed as structs are:
2447    structs and unions.
2448
2449    As an odd quirk, not mentioned in the ABI, GCC passes float and
2450    double singletons as if they were a plain float, double, etc.  (The
2451    corresponding union types are handled normally.)  So we exclude
2452    those types here.  *shrug* */
2453 static int
2454 is_struct_like (struct type *type)
2455 {
2456   enum type_code code = TYPE_CODE (type);
2457
2458   return (code == TYPE_CODE_UNION
2459           || (code == TYPE_CODE_STRUCT && ! is_float_singleton (type)));
2460 }
2461
2462
2463 /* Return non-zero if TYPE is a float-like type, zero otherwise.
2464    "Float-like" types are those that should be passed as
2465    floating-point values are.
2466
2467    You'd think this would just be floats, doubles, long doubles, etc.
2468    But as an odd quirk, not mentioned in the ABI, GCC passes float and
2469    double singletons as if they were a plain float, double, etc.  (The
2470    corresponding union types are handled normally.)  So we include
2471    those types here.  *shrug* */
2472 static int
2473 is_float_like (struct type *type)
2474 {
2475   return (TYPE_CODE (type) == TYPE_CODE_FLT
2476           || TYPE_CODE (type) == TYPE_CODE_DECFLOAT
2477           || is_float_singleton (type));
2478 }
2479
2480
2481 static int
2482 is_power_of_two (unsigned int n)
2483 {
2484   return ((n & (n - 1)) == 0);
2485 }
2486
2487 /* Return non-zero if TYPE should be passed as a pointer to a copy,
2488    zero otherwise.  */
2489 static int
2490 s390_function_arg_pass_by_reference (struct type *type)
2491 {
2492   if (TYPE_LENGTH (type) > 8)
2493     return 1;
2494
2495   return (is_struct_like (type) && !is_power_of_two (TYPE_LENGTH (type)))
2496           || TYPE_CODE (type) == TYPE_CODE_COMPLEX
2497           || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type));
2498 }
2499
2500 /* Return non-zero if TYPE should be passed in a float register
2501    if possible.  */
2502 static int
2503 s390_function_arg_float (struct type *type)
2504 {
2505   if (TYPE_LENGTH (type) > 8)
2506     return 0;
2507
2508   return is_float_like (type);
2509 }
2510
2511 /* Return non-zero if TYPE should be passed in an integer register
2512    (or a pair of integer registers) if possible.  */
2513 static int
2514 s390_function_arg_integer (struct type *type)
2515 {
2516   if (TYPE_LENGTH (type) > 8)
2517     return 0;
2518
2519    return is_integer_like (type)
2520           || is_pointer_like (type)
2521           || (is_struct_like (type) && is_power_of_two (TYPE_LENGTH (type)));
2522 }
2523
2524 /* Return ARG, a `SIMPLE_ARG', sign-extended or zero-extended to a full
2525    word as required for the ABI.  */
2526 static LONGEST
2527 extend_simple_arg (struct gdbarch *gdbarch, struct value *arg)
2528 {
2529   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2530   struct type *type = check_typedef (value_type (arg));
2531
2532   /* Even structs get passed in the least significant bits of the
2533      register / memory word.  It's not really right to extract them as
2534      an integer, but it does take care of the extension.  */
2535   if (TYPE_UNSIGNED (type))
2536     return extract_unsigned_integer (value_contents (arg),
2537                                      TYPE_LENGTH (type), byte_order);
2538   else
2539     return extract_signed_integer (value_contents (arg),
2540                                    TYPE_LENGTH (type), byte_order);
2541 }
2542
2543
2544 /* Return the alignment required by TYPE.  */
2545 static int
2546 alignment_of (struct type *type)
2547 {
2548   int alignment;
2549
2550   if (is_integer_like (type)
2551       || is_pointer_like (type)
2552       || TYPE_CODE (type) == TYPE_CODE_FLT
2553       || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2554     alignment = TYPE_LENGTH (type);
2555   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
2556            || TYPE_CODE (type) == TYPE_CODE_UNION)
2557     {
2558       int i;
2559
2560       alignment = 1;
2561       for (i = 0; i < TYPE_NFIELDS (type); i++)
2562         {
2563           int field_alignment
2564             = alignment_of (check_typedef (TYPE_FIELD_TYPE (type, i)));
2565
2566           if (field_alignment > alignment)
2567             alignment = field_alignment;
2568         }
2569     }
2570   else
2571     alignment = 1;
2572
2573   /* Check that everything we ever return is a power of two.  Lots of
2574      code doesn't want to deal with aligning things to arbitrary
2575      boundaries.  */
2576   gdb_assert ((alignment & (alignment - 1)) == 0);
2577
2578   return alignment;
2579 }
2580
2581
2582 /* Put the actual parameter values pointed to by ARGS[0..NARGS-1] in
2583    place to be passed to a function, as specified by the "GNU/Linux
2584    for S/390 ELF Application Binary Interface Supplement".
2585
2586    SP is the current stack pointer.  We must put arguments, links,
2587    padding, etc. whereever they belong, and return the new stack
2588    pointer value.
2589    
2590    If STRUCT_RETURN is non-zero, then the function we're calling is
2591    going to return a structure by value; STRUCT_ADDR is the address of
2592    a block we've allocated for it on the stack.
2593
2594    Our caller has taken care of any type promotions needed to satisfy
2595    prototypes or the old K&R argument-passing rules.  */
2596 static CORE_ADDR
2597 s390_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2598                       struct regcache *regcache, CORE_ADDR bp_addr,
2599                       int nargs, struct value **args, CORE_ADDR sp,
2600                       int struct_return, CORE_ADDR struct_addr)
2601 {
2602   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2603   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2604   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2605   int i;
2606
2607   /* If the i'th argument is passed as a reference to a copy, then
2608      copy_addr[i] is the address of the copy we made.  */
2609   CORE_ADDR *copy_addr = alloca (nargs * sizeof (CORE_ADDR));
2610
2611   /* Reserve space for the reference-to-copy area.  */
2612   for (i = 0; i < nargs; i++)
2613     {
2614       struct value *arg = args[i];
2615       struct type *type = check_typedef (value_type (arg));
2616
2617       if (s390_function_arg_pass_by_reference (type))
2618         {
2619           sp -= TYPE_LENGTH (type);
2620           sp = align_down (sp, alignment_of (type));
2621           copy_addr[i] = sp;
2622         }
2623     }
2624
2625   /* Reserve space for the parameter area.  As a conservative
2626      simplification, we assume that everything will be passed on the
2627      stack.  Since every argument larger than 8 bytes will be 
2628      passed by reference, we use this simple upper bound.  */
2629   sp -= nargs * 8;
2630
2631   /* After all that, make sure it's still aligned on an eight-byte
2632      boundary.  */
2633   sp = align_down (sp, 8);
2634
2635   /* Allocate the standard frame areas: the register save area, the
2636      word reserved for the compiler (which seems kind of meaningless),
2637      and the back chain pointer.  */
2638   sp -= 16*word_size + 32;
2639
2640   /* Now we have the final SP value.  Make sure we didn't underflow;
2641      on 31-bit, this would result in addresses with the high bit set,
2642      which causes confusion elsewhere.  Note that if we error out
2643      here, stack and registers remain untouched.  */
2644   if (gdbarch_addr_bits_remove (gdbarch, sp) != sp)
2645     error (_("Stack overflow"));
2646
2647
2648   /* Finally, place the actual parameters, working from SP towards
2649      higher addresses.  The code above is supposed to reserve enough
2650      space for this.  */
2651   {
2652     int fr = 0;
2653     int gr = 2;
2654     CORE_ADDR starg = sp + 16*word_size + 32;
2655
2656     /* A struct is returned using general register 2.  */
2657     if (struct_return)
2658       {
2659         regcache_cooked_write_unsigned (regcache, S390_R0_REGNUM + gr,
2660                                         struct_addr);
2661         gr++;
2662       }
2663
2664     for (i = 0; i < nargs; i++)
2665       {
2666         struct value *arg = args[i];
2667         struct type *type = check_typedef (value_type (arg));
2668         unsigned length = TYPE_LENGTH (type);
2669
2670         if (s390_function_arg_pass_by_reference (type))
2671           {
2672             /* Actually copy the argument contents to the stack slot
2673                that was reserved above.  */
2674             write_memory (copy_addr[i], value_contents (arg), length);
2675
2676             if (gr <= 6)
2677               {
2678                 regcache_cooked_write_unsigned (regcache, S390_R0_REGNUM + gr,
2679                                                 copy_addr[i]);
2680                 gr++;
2681               }
2682             else
2683               {
2684                 write_memory_unsigned_integer (starg, word_size, byte_order,
2685                                                copy_addr[i]);
2686                 starg += word_size;
2687               }
2688           }
2689         else if (s390_function_arg_float (type))
2690           {
2691             /* The GNU/Linux for S/390 ABI uses FPRs 0 and 2 to pass arguments,
2692                the GNU/Linux for zSeries ABI uses 0, 2, 4, and 6.  */
2693             if (fr <= (tdep->abi == ABI_LINUX_S390 ? 2 : 6))
2694               {
2695                 /* When we store a single-precision value in an FP register,
2696                    it occupies the leftmost bits.  */
2697                 regcache_cooked_write_part (regcache, S390_F0_REGNUM + fr,
2698                                             0, length, value_contents (arg));
2699                 fr += 2;
2700               }
2701             else
2702               {
2703                 /* When we store a single-precision value in a stack slot,
2704                    it occupies the rightmost bits.  */
2705                 starg = align_up (starg + length, word_size);
2706                 write_memory (starg - length, value_contents (arg), length);
2707               }
2708           }
2709         else if (s390_function_arg_integer (type) && length <= word_size)
2710           {
2711             if (gr <= 6)
2712               {
2713                 /* Integer arguments are always extended to word size.  */
2714                 regcache_cooked_write_signed (regcache, S390_R0_REGNUM + gr,
2715                                               extend_simple_arg (gdbarch,
2716                                                                  arg));
2717                 gr++;
2718               }
2719             else
2720               {
2721                 /* Integer arguments are always extended to word size.  */
2722                 write_memory_signed_integer (starg, word_size, byte_order,
2723                                              extend_simple_arg (gdbarch, arg));
2724                 starg += word_size;
2725               }
2726           }
2727         else if (s390_function_arg_integer (type) && length == 2*word_size)
2728           {
2729             if (gr <= 5)
2730               {
2731                 regcache_cooked_write (regcache, S390_R0_REGNUM + gr,
2732                                        value_contents (arg));
2733                 regcache_cooked_write (regcache, S390_R0_REGNUM + gr + 1,
2734                                        value_contents (arg) + word_size);
2735                 gr += 2;
2736               }
2737             else
2738               {
2739                 /* If we skipped r6 because we couldn't fit a DOUBLE_ARG
2740                    in it, then don't go back and use it again later.  */
2741                 gr = 7;
2742
2743                 write_memory (starg, value_contents (arg), length);
2744                 starg += length;
2745               }
2746           }
2747         else
2748           internal_error (__FILE__, __LINE__, _("unknown argument type"));
2749       }
2750   }
2751
2752   /* Store return PSWA.  In 31-bit mode, keep addressing mode bit.  */
2753   if (word_size == 4)
2754     {
2755       ULONGEST pswa;
2756       regcache_cooked_read_unsigned (regcache, S390_PSWA_REGNUM, &pswa);
2757       bp_addr = (bp_addr & 0x7fffffff) | (pswa & 0x80000000);
2758     }
2759   regcache_cooked_write_unsigned (regcache, S390_RETADDR_REGNUM, bp_addr);
2760
2761   /* Store updated stack pointer.  */
2762   regcache_cooked_write_unsigned (regcache, S390_SP_REGNUM, sp);
2763
2764   /* We need to return the 'stack part' of the frame ID,
2765      which is actually the top of the register save area.  */
2766   return sp + 16*word_size + 32;
2767 }
2768
2769 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
2770    dummy frame.  The frame ID's base needs to match the TOS value
2771    returned by push_dummy_call, and the PC match the dummy frame's
2772    breakpoint.  */
2773 static struct frame_id
2774 s390_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2775 {
2776   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2777   CORE_ADDR sp = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2778   sp = gdbarch_addr_bits_remove (gdbarch, sp);
2779
2780   return frame_id_build (sp + 16*word_size + 32,
2781                          get_frame_pc (this_frame));
2782 }
2783
2784 static CORE_ADDR
2785 s390_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2786 {
2787   /* Both the 32- and 64-bit ABI's say that the stack pointer should
2788      always be aligned on an eight-byte boundary.  */
2789   return (addr & -8);
2790 }
2791
2792
2793 /* Function return value access.  */
2794
2795 static enum return_value_convention
2796 s390_return_value_convention (struct gdbarch *gdbarch, struct type *type)
2797 {
2798   if (TYPE_LENGTH (type) > 8)
2799     return RETURN_VALUE_STRUCT_CONVENTION;
2800
2801   switch (TYPE_CODE (type))
2802     {
2803     case TYPE_CODE_STRUCT:
2804     case TYPE_CODE_UNION:
2805     case TYPE_CODE_ARRAY:
2806     case TYPE_CODE_COMPLEX:
2807       return RETURN_VALUE_STRUCT_CONVENTION;
2808
2809     default:
2810       return RETURN_VALUE_REGISTER_CONVENTION;
2811     }
2812 }
2813
2814 static enum return_value_convention
2815 s390_return_value (struct gdbarch *gdbarch, struct value *function,
2816                    struct type *type, struct regcache *regcache,
2817                    gdb_byte *out, const gdb_byte *in)
2818 {
2819   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2820   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2821   enum return_value_convention rvc;
2822   int length;
2823
2824   type = check_typedef (type);
2825   rvc = s390_return_value_convention (gdbarch, type);
2826   length = TYPE_LENGTH (type);
2827
2828   if (in)
2829     {
2830       switch (rvc)
2831         {
2832         case RETURN_VALUE_REGISTER_CONVENTION:
2833           if (TYPE_CODE (type) == TYPE_CODE_FLT
2834               || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2835             {
2836               /* When we store a single-precision value in an FP register,
2837                  it occupies the leftmost bits.  */
2838               regcache_cooked_write_part (regcache, S390_F0_REGNUM, 
2839                                           0, length, in);
2840             }
2841           else if (length <= word_size)
2842             {
2843               /* Integer arguments are always extended to word size.  */
2844               if (TYPE_UNSIGNED (type))
2845                 regcache_cooked_write_unsigned (regcache, S390_R2_REGNUM,
2846                         extract_unsigned_integer (in, length, byte_order));
2847               else
2848                 regcache_cooked_write_signed (regcache, S390_R2_REGNUM,
2849                         extract_signed_integer (in, length, byte_order));
2850             }
2851           else if (length == 2*word_size)
2852             {
2853               regcache_cooked_write (regcache, S390_R2_REGNUM, in);
2854               regcache_cooked_write (regcache, S390_R3_REGNUM, in + word_size);
2855             }
2856           else
2857             internal_error (__FILE__, __LINE__, _("invalid return type"));
2858           break;
2859
2860         case RETURN_VALUE_STRUCT_CONVENTION:
2861           error (_("Cannot set function return value."));
2862           break;
2863         }
2864     }
2865   else if (out)
2866     {
2867       switch (rvc)
2868         {
2869         case RETURN_VALUE_REGISTER_CONVENTION:
2870           if (TYPE_CODE (type) == TYPE_CODE_FLT
2871               || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2872             {
2873               /* When we store a single-precision value in an FP register,
2874                  it occupies the leftmost bits.  */
2875               regcache_cooked_read_part (regcache, S390_F0_REGNUM, 
2876                                          0, length, out);
2877             }
2878           else if (length <= word_size)
2879             {
2880               /* Integer arguments occupy the rightmost bits.  */
2881               regcache_cooked_read_part (regcache, S390_R2_REGNUM, 
2882                                          word_size - length, length, out);
2883             }
2884           else if (length == 2*word_size)
2885             {
2886               regcache_cooked_read (regcache, S390_R2_REGNUM, out);
2887               regcache_cooked_read (regcache, S390_R3_REGNUM, out + word_size);
2888             }
2889           else
2890             internal_error (__FILE__, __LINE__, _("invalid return type"));
2891           break;
2892
2893         case RETURN_VALUE_STRUCT_CONVENTION:
2894           error (_("Function return value unknown."));
2895           break;
2896         }
2897     }
2898
2899   return rvc;
2900 }
2901
2902
2903 /* Breakpoints.  */
2904
2905 static const gdb_byte *
2906 s390_breakpoint_from_pc (struct gdbarch *gdbarch,
2907                          CORE_ADDR *pcptr, int *lenptr)
2908 {
2909   static const gdb_byte breakpoint[] = { 0x0, 0x1 };
2910
2911   *lenptr = sizeof (breakpoint);
2912   return breakpoint;
2913 }
2914
2915
2916 /* Address handling.  */
2917
2918 static CORE_ADDR
2919 s390_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
2920 {
2921   return addr & 0x7fffffff;
2922 }
2923
2924 static int
2925 s390_address_class_type_flags (int byte_size, int dwarf2_addr_class)
2926 {
2927   if (byte_size == 4)
2928     return TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
2929   else
2930     return 0;
2931 }
2932
2933 static const char *
2934 s390_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
2935 {
2936   if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
2937     return "mode32";
2938   else
2939     return NULL;
2940 }
2941
2942 static int
2943 s390_address_class_name_to_type_flags (struct gdbarch *gdbarch,
2944                                        const char *name,
2945                                        int *type_flags_ptr)
2946 {
2947   if (strcmp (name, "mode32") == 0)
2948     {
2949       *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
2950       return 1;
2951     }
2952   else
2953     return 0;
2954 }
2955
2956 /* Implementation of `gdbarch_stap_is_single_operand', as defined in
2957    gdbarch.h.  */
2958
2959 static int
2960 s390_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
2961 {
2962   return ((isdigit (*s) && s[1] == '(' && s[2] == '%') /* Displacement
2963                                                           or indirection.  */
2964           || *s == '%' /* Register access.  */
2965           || isdigit (*s)); /* Literal number.  */
2966 }
2967
2968 /* Set up gdbarch struct.  */
2969
2970 static struct gdbarch *
2971 s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2972 {
2973   const struct target_desc *tdesc = info.target_desc;
2974   struct tdesc_arch_data *tdesc_data = NULL;
2975   struct gdbarch *gdbarch;
2976   struct gdbarch_tdep *tdep;
2977   int tdep_abi;
2978   int have_upper = 0;
2979   int have_linux_v1 = 0;
2980   int have_linux_v2 = 0;
2981   int first_pseudo_reg, last_pseudo_reg;
2982
2983   /* Default ABI and register size.  */
2984   switch (info.bfd_arch_info->mach)
2985     {
2986     case bfd_mach_s390_31:
2987       tdep_abi = ABI_LINUX_S390;
2988       break;
2989
2990     case bfd_mach_s390_64:
2991       tdep_abi = ABI_LINUX_ZSERIES;
2992       break;
2993
2994     default:
2995       return NULL;
2996     }
2997
2998   /* Use default target description if none provided by the target.  */
2999   if (!tdesc_has_registers (tdesc))
3000     {
3001       if (tdep_abi == ABI_LINUX_S390)
3002         tdesc = tdesc_s390_linux32;
3003       else
3004         tdesc = tdesc_s390x_linux64;
3005     }
3006
3007   /* Check any target description for validity.  */
3008   if (tdesc_has_registers (tdesc))
3009     {
3010       static const char *const gprs[] = {
3011         "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
3012         "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3013       };
3014       static const char *const fprs[] = {
3015         "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
3016         "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"
3017       };
3018       static const char *const acrs[] = {
3019         "acr0", "acr1", "acr2", "acr3", "acr4", "acr5", "acr6", "acr7",
3020         "acr8", "acr9", "acr10", "acr11", "acr12", "acr13", "acr14", "acr15"
3021       };
3022       static const char *const gprs_lower[] = {
3023         "r0l", "r1l", "r2l", "r3l", "r4l", "r5l", "r6l", "r7l",
3024         "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l"
3025       };
3026       static const char *const gprs_upper[] = {
3027         "r0h", "r1h", "r2h", "r3h", "r4h", "r5h", "r6h", "r7h",
3028         "r8h", "r9h", "r10h", "r11h", "r12h", "r13h", "r14h", "r15h"
3029       };
3030       const struct tdesc_feature *feature;
3031       int i, valid_p = 1;
3032
3033       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.core");
3034       if (feature == NULL)
3035         return NULL;
3036
3037       tdesc_data = tdesc_data_alloc ();
3038
3039       valid_p &= tdesc_numbered_register (feature, tdesc_data,
3040                                           S390_PSWM_REGNUM, "pswm");
3041       valid_p &= tdesc_numbered_register (feature, tdesc_data,
3042                                           S390_PSWA_REGNUM, "pswa");
3043
3044       if (tdesc_unnumbered_register (feature, "r0"))
3045         {
3046           for (i = 0; i < 16; i++)
3047             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3048                                                 S390_R0_REGNUM + i, gprs[i]);
3049         }
3050       else
3051         {
3052           have_upper = 1;
3053
3054           for (i = 0; i < 16; i++)
3055             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3056                                                 S390_R0_REGNUM + i,
3057                                                 gprs_lower[i]);
3058           for (i = 0; i < 16; i++)
3059             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3060                                                 S390_R0_UPPER_REGNUM + i,
3061                                                 gprs_upper[i]);
3062         }
3063
3064       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.fpr");
3065       if (feature == NULL)
3066         {
3067           tdesc_data_cleanup (tdesc_data);
3068           return NULL;
3069         }
3070
3071       valid_p &= tdesc_numbered_register (feature, tdesc_data,
3072                                           S390_FPC_REGNUM, "fpc");
3073       for (i = 0; i < 16; i++)
3074         valid_p &= tdesc_numbered_register (feature, tdesc_data,
3075                                             S390_F0_REGNUM + i, fprs[i]);
3076
3077       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.acr");
3078       if (feature == NULL)
3079         {
3080           tdesc_data_cleanup (tdesc_data);
3081           return NULL;
3082         }
3083
3084       for (i = 0; i < 16; i++)
3085         valid_p &= tdesc_numbered_register (feature, tdesc_data,
3086                                             S390_A0_REGNUM + i, acrs[i]);
3087
3088       /* Optional GNU/Linux-specific "registers".  */
3089       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.linux");
3090       if (feature)
3091         {
3092           tdesc_numbered_register (feature, tdesc_data,
3093                                    S390_ORIG_R2_REGNUM, "orig_r2");
3094
3095           if (tdesc_numbered_register (feature, tdesc_data,
3096                                        S390_LAST_BREAK_REGNUM, "last_break"))
3097             have_linux_v1 = 1;
3098
3099           if (tdesc_numbered_register (feature, tdesc_data,
3100                                        S390_SYSTEM_CALL_REGNUM, "system_call"))
3101             have_linux_v2 = 1;
3102
3103           if (have_linux_v2 > have_linux_v1)
3104             valid_p = 0;
3105         }
3106
3107       if (!valid_p)
3108         {
3109           tdesc_data_cleanup (tdesc_data);
3110           return NULL;
3111         }
3112     }
3113
3114   /* Find a candidate among extant architectures.  */
3115   for (arches = gdbarch_list_lookup_by_info (arches, &info);
3116        arches != NULL;
3117        arches = gdbarch_list_lookup_by_info (arches->next, &info))
3118     {
3119       tdep = gdbarch_tdep (arches->gdbarch);
3120       if (!tdep)
3121         continue;
3122       if (tdep->abi != tdep_abi)
3123         continue;
3124       if ((tdep->gpr_full_regnum != -1) != have_upper)
3125         continue;
3126       if (tdesc_data != NULL)
3127         tdesc_data_cleanup (tdesc_data);
3128       return arches->gdbarch;
3129     }
3130
3131   /* Otherwise create a new gdbarch for the specified machine type.  */
3132   tdep = XCALLOC (1, struct gdbarch_tdep);
3133   tdep->abi = tdep_abi;
3134   gdbarch = gdbarch_alloc (&info, tdep);
3135
3136   set_gdbarch_believe_pcc_promotion (gdbarch, 0);
3137   set_gdbarch_char_signed (gdbarch, 0);
3138
3139   /* S/390 GNU/Linux uses either 64-bit or 128-bit long doubles.
3140      We can safely let them default to 128-bit, since the debug info
3141      will give the size of type actually used in each case.  */
3142   set_gdbarch_long_double_bit (gdbarch, 128);
3143   set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
3144
3145   /* Amount PC must be decremented by after a breakpoint.  This is
3146      often the number of bytes returned by gdbarch_breakpoint_from_pc but not
3147      always.  */
3148   set_gdbarch_decr_pc_after_break (gdbarch, 2);
3149   /* Stack grows downward.  */
3150   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3151   set_gdbarch_breakpoint_from_pc (gdbarch, s390_breakpoint_from_pc);
3152   set_gdbarch_skip_prologue (gdbarch, s390_skip_prologue);
3153   set_gdbarch_in_function_epilogue_p (gdbarch, s390_in_function_epilogue_p);
3154
3155   set_gdbarch_num_regs (gdbarch, S390_NUM_REGS);
3156   set_gdbarch_sp_regnum (gdbarch, S390_SP_REGNUM);
3157   set_gdbarch_fp0_regnum (gdbarch, S390_F0_REGNUM);
3158   set_gdbarch_stab_reg_to_regnum (gdbarch, s390_dwarf_reg_to_regnum);
3159   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, s390_dwarf_reg_to_regnum);
3160   set_gdbarch_value_from_register (gdbarch, s390_value_from_register);
3161   set_gdbarch_regset_from_core_section (gdbarch,
3162                                         s390_regset_from_core_section);
3163   set_gdbarch_core_read_description (gdbarch, s390_core_read_description);
3164   set_gdbarch_cannot_store_register (gdbarch, s390_cannot_store_register);
3165   set_gdbarch_write_pc (gdbarch, s390_write_pc);
3166   set_gdbarch_pseudo_register_read (gdbarch, s390_pseudo_register_read);
3167   set_gdbarch_pseudo_register_write (gdbarch, s390_pseudo_register_write);
3168   set_tdesc_pseudo_register_name (gdbarch, s390_pseudo_register_name);
3169   set_tdesc_pseudo_register_type (gdbarch, s390_pseudo_register_type);
3170   set_tdesc_pseudo_register_reggroup_p (gdbarch,
3171                                         s390_pseudo_register_reggroup_p);
3172   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
3173
3174   /* Assign pseudo register numbers.  */
3175   first_pseudo_reg = gdbarch_num_regs (gdbarch);
3176   last_pseudo_reg = first_pseudo_reg;
3177   tdep->gpr_full_regnum = -1;
3178   if (have_upper)
3179     {
3180       tdep->gpr_full_regnum = last_pseudo_reg;
3181       last_pseudo_reg += 16;
3182     }
3183   tdep->pc_regnum = last_pseudo_reg++;
3184   tdep->cc_regnum = last_pseudo_reg++;
3185   set_gdbarch_pc_regnum (gdbarch, tdep->pc_regnum);
3186   set_gdbarch_num_pseudo_regs (gdbarch, last_pseudo_reg - first_pseudo_reg);
3187
3188   /* Inferior function calls.  */
3189   set_gdbarch_push_dummy_call (gdbarch, s390_push_dummy_call);
3190   set_gdbarch_dummy_id (gdbarch, s390_dummy_id);
3191   set_gdbarch_frame_align (gdbarch, s390_frame_align);
3192   set_gdbarch_return_value (gdbarch, s390_return_value);
3193
3194   /* Frame handling.  */
3195   dwarf2_frame_set_init_reg (gdbarch, s390_dwarf2_frame_init_reg);
3196   dwarf2_frame_set_adjust_regnum (gdbarch, s390_adjust_frame_regnum);
3197   dwarf2_append_unwinders (gdbarch);
3198   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
3199   frame_unwind_append_unwinder (gdbarch, &s390_stub_frame_unwind);
3200   frame_unwind_append_unwinder (gdbarch, &s390_sigtramp_frame_unwind);
3201   frame_unwind_append_unwinder (gdbarch, &s390_frame_unwind);
3202   frame_base_set_default (gdbarch, &s390_frame_base);
3203   set_gdbarch_unwind_pc (gdbarch, s390_unwind_pc);
3204   set_gdbarch_unwind_sp (gdbarch, s390_unwind_sp);
3205
3206   /* Displaced stepping.  */
3207   set_gdbarch_displaced_step_copy_insn (gdbarch,
3208                                         simple_displaced_step_copy_insn);
3209   set_gdbarch_displaced_step_fixup (gdbarch, s390_displaced_step_fixup);
3210   set_gdbarch_displaced_step_free_closure (gdbarch,
3211                                            simple_displaced_step_free_closure);
3212   set_gdbarch_displaced_step_location (gdbarch,
3213                                        displaced_step_at_entry_point);
3214   set_gdbarch_max_insn_length (gdbarch, S390_MAX_INSTR_SIZE);
3215
3216   /* Note that GNU/Linux is the only OS supported on this
3217      platform.  */
3218   linux_init_abi (info, gdbarch);
3219
3220   switch (tdep->abi)
3221     {
3222     case ABI_LINUX_S390:
3223       tdep->gregset = &s390_gregset;
3224       tdep->sizeof_gregset = s390_sizeof_gregset;
3225       tdep->fpregset = &s390_fpregset;
3226       tdep->sizeof_fpregset = s390_sizeof_fpregset;
3227
3228       set_gdbarch_addr_bits_remove (gdbarch, s390_addr_bits_remove);
3229       set_solib_svr4_fetch_link_map_offsets
3230         (gdbarch, svr4_ilp32_fetch_link_map_offsets);
3231
3232       if (have_upper)
3233         {
3234           if (have_linux_v2)
3235             set_gdbarch_core_regset_sections (gdbarch,
3236                                               s390_linux64v2_regset_sections);
3237           else if (have_linux_v1)
3238             set_gdbarch_core_regset_sections (gdbarch,
3239                                               s390_linux64v1_regset_sections);
3240           else
3241             set_gdbarch_core_regset_sections (gdbarch,
3242                                               s390_linux64_regset_sections);
3243         }
3244       else
3245         {
3246           if (have_linux_v2)
3247             set_gdbarch_core_regset_sections (gdbarch,
3248                                               s390_linux32v2_regset_sections);
3249           else if (have_linux_v1)
3250             set_gdbarch_core_regset_sections (gdbarch,
3251                                               s390_linux32v1_regset_sections);
3252           else
3253             set_gdbarch_core_regset_sections (gdbarch,
3254                                               s390_linux32_regset_sections);
3255         }
3256       break;
3257
3258     case ABI_LINUX_ZSERIES:
3259       tdep->gregset = &s390x_gregset;
3260       tdep->sizeof_gregset = s390x_sizeof_gregset;
3261       tdep->fpregset = &s390_fpregset;
3262       tdep->sizeof_fpregset = s390_sizeof_fpregset;
3263
3264       set_gdbarch_long_bit (gdbarch, 64);
3265       set_gdbarch_long_long_bit (gdbarch, 64);
3266       set_gdbarch_ptr_bit (gdbarch, 64);
3267       set_solib_svr4_fetch_link_map_offsets
3268         (gdbarch, svr4_lp64_fetch_link_map_offsets);
3269       set_gdbarch_address_class_type_flags (gdbarch,
3270                                             s390_address_class_type_flags);
3271       set_gdbarch_address_class_type_flags_to_name (gdbarch,
3272                                                     s390_address_class_type_flags_to_name);
3273       set_gdbarch_address_class_name_to_type_flags (gdbarch,
3274                                                     s390_address_class_name_to_type_flags);
3275
3276       if (have_linux_v2)
3277         set_gdbarch_core_regset_sections (gdbarch,
3278                                           s390x_linux64v2_regset_sections);
3279       else if (have_linux_v1)
3280         set_gdbarch_core_regset_sections (gdbarch,
3281                                           s390x_linux64v1_regset_sections);
3282       else
3283         set_gdbarch_core_regset_sections (gdbarch,
3284                                           s390x_linux64_regset_sections);
3285       break;
3286     }
3287
3288   set_gdbarch_print_insn (gdbarch, print_insn_s390);
3289
3290   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
3291
3292   /* Enable TLS support.  */
3293   set_gdbarch_fetch_tls_load_module_address (gdbarch,
3294                                              svr4_fetch_objfile_link_map);
3295
3296   set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
3297
3298   /* SystemTap functions.  */
3299   set_gdbarch_stap_register_prefix (gdbarch, "%");
3300   set_gdbarch_stap_register_indirection_prefix (gdbarch, "(");
3301   set_gdbarch_stap_register_indirection_suffix (gdbarch, ")");
3302   set_gdbarch_stap_is_single_operand (gdbarch, s390_stap_is_single_operand);
3303
3304   return gdbarch;
3305 }
3306
3307
3308 extern initialize_file_ftype _initialize_s390_tdep; /* -Wmissing-prototypes */
3309
3310 void
3311 _initialize_s390_tdep (void)
3312 {
3313   /* Hook us into the gdbarch mechanism.  */
3314   register_gdbarch_init (bfd_arch_s390, s390_gdbarch_init);
3315
3316   /* Initialize the GNU/Linux target descriptions.  */
3317   initialize_tdesc_s390_linux32 ();
3318   initialize_tdesc_s390_linux32v1 ();
3319   initialize_tdesc_s390_linux32v2 ();
3320   initialize_tdesc_s390_linux64 ();
3321   initialize_tdesc_s390_linux64v1 ();
3322   initialize_tdesc_s390_linux64v2 ();
3323   initialize_tdesc_s390x_linux64 ();
3324   initialize_tdesc_s390x_linux64v1 ();
3325   initialize_tdesc_s390x_linux64v2 ();
3326 }