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