Use gdb_byte for bytes from the program being debugged.
[platform/upstream/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, unsigned 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, unsigned 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, unsigned 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, unsigned 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->bfd, secp->the_bfd_section)
1183               & SEC_READONLY))
1184         return pv_constant (read_memory_integer (addr.k, size,
1185                                                  data->byte_order));
1186     }
1187
1188   /* Check whether we are accessing one of our save slots.  */
1189   return pv_area_fetch (data->stack, addr, size);
1190 }
1191
1192 /* Function for finding saved registers in a 'struct pv_area'; we pass
1193    this to pv_area_scan.
1194
1195    If VALUE is a saved register, ADDR says it was saved at a constant
1196    offset from the frame base, and SIZE indicates that the whole
1197    register was saved, record its offset in the reg_offset table in
1198    PROLOGUE_UNTYPED.  */
1199 static void
1200 s390_check_for_saved (void *data_untyped, pv_t addr,
1201                       CORE_ADDR size, pv_t value)
1202 {
1203   struct s390_prologue_data *data = data_untyped;
1204   int i, offset;
1205
1206   if (!pv_is_register (addr, S390_SP_REGNUM))
1207     return;
1208
1209   offset = 16 * data->gpr_size + 32 - addr.k;
1210
1211   /* If we are storing the original value of a register, we want to
1212      record the CFA offset.  If the same register is stored multiple
1213      times, the stack slot with the highest address counts.  */
1214  
1215   for (i = 0; i < S390_NUM_GPRS; i++)
1216     if (size == data->gpr_size
1217         && pv_is_register_k (value, S390_R0_REGNUM + i, 0))
1218       if (data->gpr_slot[i] == 0
1219           || data->gpr_slot[i] > offset)
1220         {
1221           data->gpr_slot[i] = offset;
1222           return;
1223         }
1224
1225   for (i = 0; i < S390_NUM_FPRS; i++)
1226     if (size == data->fpr_size
1227         && pv_is_register_k (value, S390_F0_REGNUM + i, 0))
1228       if (data->fpr_slot[i] == 0
1229           || data->fpr_slot[i] > offset)
1230         {
1231           data->fpr_slot[i] = offset;
1232           return;
1233         }
1234 }
1235
1236 /* Analyze the prologue of the function starting at START_PC,
1237    continuing at most until CURRENT_PC.  Initialize DATA to
1238    hold all information we find out about the state of the registers
1239    and stack slots.  Return the address of the instruction after
1240    the last one that changed the SP, FP, or back chain; or zero
1241    on error.  */
1242 static CORE_ADDR
1243 s390_analyze_prologue (struct gdbarch *gdbarch,
1244                        CORE_ADDR start_pc,
1245                        CORE_ADDR current_pc,
1246                        struct s390_prologue_data *data)
1247 {
1248   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1249
1250   /* Our return value:
1251      The address of the instruction after the last one that changed
1252      the SP, FP, or back chain;  zero if we got an error trying to 
1253      read memory.  */
1254   CORE_ADDR result = start_pc;
1255
1256   /* The current PC for our abstract interpretation.  */
1257   CORE_ADDR pc;
1258
1259   /* The address of the next instruction after that.  */
1260   CORE_ADDR next_pc;
1261   
1262   /* Set up everything's initial value.  */
1263   {
1264     int i;
1265
1266     data->stack = make_pv_area (S390_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1267
1268     /* For the purpose of prologue tracking, we consider the GPR size to
1269        be equal to the ABI word size, even if it is actually larger
1270        (i.e. when running a 32-bit binary under a 64-bit kernel).  */
1271     data->gpr_size = word_size;
1272     data->fpr_size = 8;
1273     data->byte_order = gdbarch_byte_order (gdbarch);
1274
1275     for (i = 0; i < S390_NUM_GPRS; i++)
1276       data->gpr[i] = pv_register (S390_R0_REGNUM + i, 0);
1277
1278     for (i = 0; i < S390_NUM_FPRS; i++)
1279       data->fpr[i] = pv_register (S390_F0_REGNUM + i, 0);
1280
1281     for (i = 0; i < S390_NUM_GPRS; i++)
1282       data->gpr_slot[i]  = 0;
1283
1284     for (i = 0; i < S390_NUM_FPRS; i++)
1285       data->fpr_slot[i]  = 0;
1286
1287     data->back_chain_saved_p = 0;
1288   }
1289
1290   /* Start interpreting instructions, until we hit the frame's
1291      current PC or the first branch instruction.  */
1292   for (pc = start_pc; pc > 0 && pc < current_pc; pc = next_pc)
1293     {
1294       bfd_byte insn[S390_MAX_INSTR_SIZE];
1295       int insn_len = s390_readinstruction (insn, pc);
1296
1297       bfd_byte dummy[S390_MAX_INSTR_SIZE] = { 0 };
1298       bfd_byte *insn32 = word_size == 4 ? insn : dummy;
1299       bfd_byte *insn64 = word_size == 8 ? insn : dummy;
1300
1301       /* Fields for various kinds of instructions.  */
1302       unsigned int b2, r1, r2, x2, r3;
1303       int i2, d2;
1304
1305       /* The values of SP and FP before this instruction,
1306          for detecting instructions that change them.  */
1307       pv_t pre_insn_sp, pre_insn_fp;
1308       /* Likewise for the flag whether the back chain was saved.  */
1309       int pre_insn_back_chain_saved_p;
1310
1311       /* If we got an error trying to read the instruction, report it.  */
1312       if (insn_len < 0)
1313         {
1314           result = 0;
1315           break;
1316         }
1317
1318       next_pc = pc + insn_len;
1319
1320       pre_insn_sp = data->gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1321       pre_insn_fp = data->gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1322       pre_insn_back_chain_saved_p = data->back_chain_saved_p;
1323
1324
1325       /* LHI r1, i2 --- load halfword immediate.  */
1326       /* LGHI r1, i2 --- load halfword immediate (64-bit version).  */
1327       /* LGFI r1, i2 --- load fullword immediate.  */
1328       if (is_ri (insn32, op1_lhi, op2_lhi, &r1, &i2)
1329           || is_ri (insn64, op1_lghi, op2_lghi, &r1, &i2)
1330           || is_ril (insn, op1_lgfi, op2_lgfi, &r1, &i2))
1331         data->gpr[r1] = pv_constant (i2);
1332
1333       /* LR r1, r2 --- load from register.  */
1334       /* LGR r1, r2 --- load from register (64-bit version).  */
1335       else if (is_rr (insn32, op_lr, &r1, &r2)
1336                || is_rre (insn64, op_lgr, &r1, &r2))
1337         data->gpr[r1] = data->gpr[r2];
1338
1339       /* L r1, d2(x2, b2) --- load.  */
1340       /* LY r1, d2(x2, b2) --- load (long-displacement version).  */
1341       /* LG r1, d2(x2, b2) --- load (64-bit version).  */
1342       else if (is_rx (insn32, op_l, &r1, &d2, &x2, &b2)
1343                || is_rxy (insn32, op1_ly, op2_ly, &r1, &d2, &x2, &b2)
1344                || is_rxy (insn64, op1_lg, op2_lg, &r1, &d2, &x2, &b2))
1345         data->gpr[r1] = s390_load (data, d2, x2, b2, data->gpr_size);
1346
1347       /* ST r1, d2(x2, b2) --- store.  */
1348       /* STY r1, d2(x2, b2) --- store (long-displacement version).  */
1349       /* STG r1, d2(x2, b2) --- store (64-bit version).  */
1350       else if (is_rx (insn32, op_st, &r1, &d2, &x2, &b2)
1351                || is_rxy (insn32, op1_sty, op2_sty, &r1, &d2, &x2, &b2)
1352                || is_rxy (insn64, op1_stg, op2_stg, &r1, &d2, &x2, &b2))
1353         s390_store (data, d2, x2, b2, data->gpr_size, data->gpr[r1]);
1354
1355       /* STD r1, d2(x2,b2) --- store floating-point register.  */
1356       else if (is_rx (insn, op_std, &r1, &d2, &x2, &b2))
1357         s390_store (data, d2, x2, b2, data->fpr_size, data->fpr[r1]);
1358
1359       /* STM r1, r3, d2(b2) --- store multiple.  */
1360       /* STMY r1, r3, d2(b2) --- store multiple (long-displacement
1361          version).  */
1362       /* STMG r1, r3, d2(b2) --- store multiple (64-bit version).  */
1363       else if (is_rs (insn32, op_stm, &r1, &r3, &d2, &b2)
1364                || is_rsy (insn32, op1_stmy, op2_stmy, &r1, &r3, &d2, &b2)
1365                || is_rsy (insn64, op1_stmg, op2_stmg, &r1, &r3, &d2, &b2))
1366         {
1367           for (; r1 <= r3; r1++, d2 += data->gpr_size)
1368             s390_store (data, d2, 0, b2, data->gpr_size, data->gpr[r1]);
1369         }
1370
1371       /* AHI r1, i2 --- add halfword immediate.  */
1372       /* AGHI r1, i2 --- add halfword immediate (64-bit version).  */
1373       /* AFI r1, i2 --- add fullword immediate.  */
1374       /* AGFI r1, i2 --- add fullword immediate (64-bit version).  */
1375       else if (is_ri (insn32, op1_ahi, op2_ahi, &r1, &i2)
1376                || is_ri (insn64, op1_aghi, op2_aghi, &r1, &i2)
1377                || is_ril (insn32, op1_afi, op2_afi, &r1, &i2)
1378                || is_ril (insn64, op1_agfi, op2_agfi, &r1, &i2))
1379         data->gpr[r1] = pv_add_constant (data->gpr[r1], i2);
1380
1381       /* ALFI r1, i2 --- add logical immediate.  */
1382       /* ALGFI r1, i2 --- add logical immediate (64-bit version).  */
1383       else if (is_ril (insn32, op1_alfi, op2_alfi, &r1, &i2)
1384                || is_ril (insn64, op1_algfi, op2_algfi, &r1, &i2))
1385         data->gpr[r1] = pv_add_constant (data->gpr[r1],
1386                                          (CORE_ADDR)i2 & 0xffffffff);
1387
1388       /* AR r1, r2 -- add register.  */
1389       /* AGR r1, r2 -- add register (64-bit version).  */
1390       else if (is_rr (insn32, op_ar, &r1, &r2)
1391                || is_rre (insn64, op_agr, &r1, &r2))
1392         data->gpr[r1] = pv_add (data->gpr[r1], data->gpr[r2]);
1393
1394       /* A r1, d2(x2, b2) -- add.  */
1395       /* AY r1, d2(x2, b2) -- add (long-displacement version).  */
1396       /* AG r1, d2(x2, b2) -- add (64-bit version).  */
1397       else if (is_rx (insn32, op_a, &r1, &d2, &x2, &b2)
1398                || is_rxy (insn32, op1_ay, op2_ay, &r1, &d2, &x2, &b2)
1399                || is_rxy (insn64, op1_ag, op2_ag, &r1, &d2, &x2, &b2))
1400         data->gpr[r1] = pv_add (data->gpr[r1],
1401                                 s390_load (data, d2, x2, b2, data->gpr_size));
1402
1403       /* SLFI r1, i2 --- subtract logical immediate.  */
1404       /* SLGFI r1, i2 --- subtract logical immediate (64-bit version).  */
1405       else if (is_ril (insn32, op1_slfi, op2_slfi, &r1, &i2)
1406                || is_ril (insn64, op1_slgfi, op2_slgfi, &r1, &i2))
1407         data->gpr[r1] = pv_add_constant (data->gpr[r1],
1408                                          -((CORE_ADDR)i2 & 0xffffffff));
1409
1410       /* SR r1, r2 -- subtract register.  */
1411       /* SGR r1, r2 -- subtract register (64-bit version).  */
1412       else if (is_rr (insn32, op_sr, &r1, &r2)
1413                || is_rre (insn64, op_sgr, &r1, &r2))
1414         data->gpr[r1] = pv_subtract (data->gpr[r1], data->gpr[r2]);
1415
1416       /* S r1, d2(x2, b2) -- subtract.  */
1417       /* SY r1, d2(x2, b2) -- subtract (long-displacement version).  */
1418       /* SG r1, d2(x2, b2) -- subtract (64-bit version).  */
1419       else if (is_rx (insn32, op_s, &r1, &d2, &x2, &b2)
1420                || is_rxy (insn32, op1_sy, op2_sy, &r1, &d2, &x2, &b2)
1421                || is_rxy (insn64, op1_sg, op2_sg, &r1, &d2, &x2, &b2))
1422         data->gpr[r1] = pv_subtract (data->gpr[r1],
1423                                 s390_load (data, d2, x2, b2, data->gpr_size));
1424
1425       /* LA r1, d2(x2, b2) --- load address.  */
1426       /* LAY r1, d2(x2, b2) --- load address (long-displacement version).  */
1427       else if (is_rx (insn, op_la, &r1, &d2, &x2, &b2)
1428                || is_rxy (insn, op1_lay, op2_lay, &r1, &d2, &x2, &b2))
1429         data->gpr[r1] = s390_addr (data, d2, x2, b2);
1430
1431       /* LARL r1, i2 --- load address relative long.  */
1432       else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2))
1433         data->gpr[r1] = pv_constant (pc + i2 * 2);
1434
1435       /* BASR r1, 0 --- branch and save.
1436          Since r2 is zero, this saves the PC in r1, but doesn't branch.  */
1437       else if (is_rr (insn, op_basr, &r1, &r2)
1438                && r2 == 0)
1439         data->gpr[r1] = pv_constant (next_pc);
1440
1441       /* BRAS r1, i2 --- branch relative and save.  */
1442       else if (is_ri (insn, op1_bras, op2_bras, &r1, &i2))
1443         {
1444           data->gpr[r1] = pv_constant (next_pc);
1445           next_pc = pc + i2 * 2;
1446
1447           /* We'd better not interpret any backward branches.  We'll
1448              never terminate.  */
1449           if (next_pc <= pc)
1450             break;
1451         }
1452
1453       /* Terminate search when hitting any other branch instruction.  */
1454       else if (is_rr (insn, op_basr, &r1, &r2)
1455                || is_rx (insn, op_bas, &r1, &d2, &x2, &b2)
1456                || is_rr (insn, op_bcr, &r1, &r2)
1457                || is_rx (insn, op_bc, &r1, &d2, &x2, &b2)
1458                || is_ri (insn, op1_brc, op2_brc, &r1, &i2)
1459                || is_ril (insn, op1_brcl, op2_brcl, &r1, &i2)
1460                || is_ril (insn, op1_brasl, op2_brasl, &r2, &i2))
1461         break;
1462
1463       else
1464         {
1465           /* An instruction we don't know how to simulate.  The only
1466              safe thing to do would be to set every value we're tracking
1467              to 'unknown'.  Instead, we'll be optimistic: we assume that
1468              we *can* interpret every instruction that the compiler uses
1469              to manipulate any of the data we're interested in here --
1470              then we can just ignore anything else.  */
1471         }
1472
1473       /* Record the address after the last instruction that changed
1474          the FP, SP, or backlink.  Ignore instructions that changed
1475          them back to their original values --- those are probably
1476          restore instructions.  (The back chain is never restored,
1477          just popped.)  */
1478       {
1479         pv_t sp = data->gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1480         pv_t fp = data->gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1481         
1482         if ((! pv_is_identical (pre_insn_sp, sp)
1483              && ! pv_is_register_k (sp, S390_SP_REGNUM, 0)
1484              && sp.kind != pvk_unknown)
1485             || (! pv_is_identical (pre_insn_fp, fp)
1486                 && ! pv_is_register_k (fp, S390_FRAME_REGNUM, 0)
1487                 && fp.kind != pvk_unknown)
1488             || pre_insn_back_chain_saved_p != data->back_chain_saved_p)
1489           result = next_pc;
1490       }
1491     }
1492
1493   /* Record where all the registers were saved.  */
1494   pv_area_scan (data->stack, s390_check_for_saved, data);
1495
1496   free_pv_area (data->stack);
1497   data->stack = NULL;
1498
1499   return result;
1500 }
1501
1502 /* Advance PC across any function entry prologue instructions to reach 
1503    some "real" code.  */
1504 static CORE_ADDR
1505 s390_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1506 {
1507   struct s390_prologue_data data;
1508   CORE_ADDR skip_pc;
1509   skip_pc = s390_analyze_prologue (gdbarch, pc, (CORE_ADDR)-1, &data);
1510   return skip_pc ? skip_pc : pc;
1511 }
1512
1513 /* Return true if we are in the functin's epilogue, i.e. after the
1514    instruction that destroyed the function's stack frame.  */
1515 static int
1516 s390_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1517 {
1518   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1519
1520   /* In frameless functions, there's not frame to destroy and thus
1521      we don't care about the epilogue.
1522
1523      In functions with frame, the epilogue sequence is a pair of
1524      a LM-type instruction that restores (amongst others) the
1525      return register %r14 and the stack pointer %r15, followed
1526      by a branch 'br %r14' --or equivalent-- that effects the
1527      actual return.
1528
1529      In that situation, this function needs to return 'true' in
1530      exactly one case: when pc points to that branch instruction.
1531
1532      Thus we try to disassemble the one instructions immediately
1533      preceding pc and check whether it is an LM-type instruction
1534      modifying the stack pointer.
1535
1536      Note that disassembling backwards is not reliable, so there
1537      is a slight chance of false positives here ...  */
1538
1539   bfd_byte insn[6];
1540   unsigned int r1, r3, b2;
1541   int d2;
1542
1543   if (word_size == 4
1544       && !target_read_memory (pc - 4, insn, 4)
1545       && is_rs (insn, op_lm, &r1, &r3, &d2, &b2)
1546       && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1547     return 1;
1548
1549   if (word_size == 4
1550       && !target_read_memory (pc - 6, insn, 6)
1551       && is_rsy (insn, op1_lmy, op2_lmy, &r1, &r3, &d2, &b2)
1552       && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1553     return 1;
1554
1555   if (word_size == 8
1556       && !target_read_memory (pc - 6, insn, 6)
1557       && is_rsy (insn, op1_lmg, op2_lmg, &r1, &r3, &d2, &b2)
1558       && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1559     return 1;
1560
1561   return 0;
1562 }
1563
1564 /* Displaced stepping.  */
1565
1566 /* Fix up the state of registers and memory after having single-stepped
1567    a displaced instruction.  */
1568 static void
1569 s390_displaced_step_fixup (struct gdbarch *gdbarch,
1570                            struct displaced_step_closure *closure,
1571                            CORE_ADDR from, CORE_ADDR to,
1572                            struct regcache *regs)
1573 {
1574   /* Since we use simple_displaced_step_copy_insn, our closure is a
1575      copy of the instruction.  */
1576   gdb_byte *insn = (gdb_byte *) closure;
1577   static int s390_instrlen[] = { 2, 4, 4, 6 };
1578   int insnlen = s390_instrlen[insn[0] >> 6];
1579
1580   /* Fields for various kinds of instructions.  */
1581   unsigned int b2, r1, r2, x2, r3;
1582   int i2, d2;
1583
1584   /* Get current PC and addressing mode bit.  */
1585   CORE_ADDR pc = regcache_read_pc (regs);
1586   ULONGEST amode = 0;
1587
1588   if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
1589     {
1590       regcache_cooked_read_unsigned (regs, S390_PSWA_REGNUM, &amode);
1591       amode &= 0x80000000;
1592     }
1593
1594   if (debug_displaced)
1595     fprintf_unfiltered (gdb_stdlog,
1596                         "displaced: (s390) fixup (%s, %s) pc %s len %d amode 0x%x\n",
1597                         paddress (gdbarch, from), paddress (gdbarch, to),
1598                         paddress (gdbarch, pc), insnlen, (int) amode);
1599
1600   /* Handle absolute branch and save instructions.  */
1601   if (is_rr (insn, op_basr, &r1, &r2)
1602       || is_rx (insn, op_bas, &r1, &d2, &x2, &b2))
1603     {
1604       /* Recompute saved return address in R1.  */
1605       regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1606                                       amode | (from + insnlen));
1607     }
1608
1609   /* Handle absolute branch instructions.  */
1610   else if (is_rr (insn, op_bcr, &r1, &r2)
1611            || is_rx (insn, op_bc, &r1, &d2, &x2, &b2)
1612            || is_rr (insn, op_bctr, &r1, &r2)
1613            || is_rre (insn, op_bctgr, &r1, &r2)
1614            || is_rx (insn, op_bct, &r1, &d2, &x2, &b2)
1615            || is_rxy (insn, op1_bctg, op2_brctg, &r1, &d2, &x2, &b2)
1616            || is_rs (insn, op_bxh, &r1, &r3, &d2, &b2)
1617            || is_rsy (insn, op1_bxhg, op2_bxhg, &r1, &r3, &d2, &b2)
1618            || is_rs (insn, op_bxle, &r1, &r3, &d2, &b2)
1619            || is_rsy (insn, op1_bxleg, op2_bxleg, &r1, &r3, &d2, &b2))
1620     {
1621       /* Update PC iff branch was *not* taken.  */
1622       if (pc == to + insnlen)
1623         regcache_write_pc (regs, from + insnlen);
1624     }
1625
1626   /* Handle PC-relative branch and save instructions.  */
1627   else if (is_ri (insn, op1_bras, op2_bras, &r1, &i2)
1628            || is_ril (insn, op1_brasl, op2_brasl, &r1, &i2))
1629     {
1630       /* Update PC.  */
1631       regcache_write_pc (regs, pc - to + from);
1632       /* Recompute saved return address in R1.  */
1633       regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1634                                       amode | (from + insnlen));
1635     }
1636
1637   /* Handle PC-relative branch instructions.  */
1638   else if (is_ri (insn, op1_brc, op2_brc, &r1, &i2)
1639            || is_ril (insn, op1_brcl, op2_brcl, &r1, &i2)
1640            || is_ri (insn, op1_brct, op2_brct, &r1, &i2)
1641            || is_ri (insn, op1_brctg, op2_brctg, &r1, &i2)
1642            || is_rsi (insn, op_brxh, &r1, &r3, &i2)
1643            || is_rie (insn, op1_brxhg, op2_brxhg, &r1, &r3, &i2)
1644            || is_rsi (insn, op_brxle, &r1, &r3, &i2)
1645            || is_rie (insn, op1_brxlg, op2_brxlg, &r1, &r3, &i2))
1646     {
1647       /* Update PC.  */
1648       regcache_write_pc (regs, pc - to + from);
1649     }
1650
1651   /* Handle LOAD ADDRESS RELATIVE LONG.  */
1652   else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2))
1653     {
1654       /* Update PC.  */
1655       regcache_write_pc (regs, from + insnlen);
1656       /* Recompute output address in R1.  */ 
1657       regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1658                                       amode | (from + i2 * 2));
1659     }
1660
1661   /* If we executed a breakpoint instruction, point PC right back at it.  */
1662   else if (insn[0] == 0x0 && insn[1] == 0x1)
1663     regcache_write_pc (regs, from);
1664
1665   /* For any other insn, PC points right after the original instruction.  */
1666   else
1667     regcache_write_pc (regs, from + insnlen);
1668
1669   if (debug_displaced)
1670     fprintf_unfiltered (gdb_stdlog,
1671                         "displaced: (s390) pc is now %s\n",
1672                         paddress (gdbarch, regcache_read_pc (regs)));
1673 }
1674
1675
1676 /* Helper routine to unwind pseudo registers.  */
1677
1678 static struct value *
1679 s390_unwind_pseudo_register (struct frame_info *this_frame, int regnum)
1680 {
1681   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1682   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1683   struct type *type = register_type (gdbarch, regnum);
1684
1685   /* Unwind PC via PSW address.  */
1686   if (regnum == tdep->pc_regnum)
1687     {
1688       struct value *val;
1689
1690       val = frame_unwind_register_value (this_frame, S390_PSWA_REGNUM);
1691       if (!value_optimized_out (val))
1692         {
1693           LONGEST pswa = value_as_long (val);
1694
1695           if (TYPE_LENGTH (type) == 4)
1696             return value_from_pointer (type, pswa & 0x7fffffff);
1697           else
1698             return value_from_pointer (type, pswa);
1699         }
1700     }
1701
1702   /* Unwind CC via PSW mask.  */
1703   if (regnum == tdep->cc_regnum)
1704     {
1705       struct value *val;
1706
1707       val = frame_unwind_register_value (this_frame, S390_PSWM_REGNUM);
1708       if (!value_optimized_out (val))
1709         {
1710           LONGEST pswm = value_as_long (val);
1711
1712           if (TYPE_LENGTH (type) == 4)
1713             return value_from_longest (type, (pswm >> 12) & 3);
1714           else
1715             return value_from_longest (type, (pswm >> 44) & 3);
1716         }
1717     }
1718
1719   /* Unwind full GPRs to show at least the lower halves (as the
1720      upper halves are undefined).  */
1721   if (tdep->gpr_full_regnum != -1
1722       && regnum >= tdep->gpr_full_regnum
1723       && regnum < tdep->gpr_full_regnum + 16)
1724     {
1725       int reg = regnum - tdep->gpr_full_regnum;
1726       struct value *val;
1727
1728       val = frame_unwind_register_value (this_frame, S390_R0_REGNUM + reg);
1729       if (!value_optimized_out (val))
1730         return value_cast (type, val);
1731     }
1732
1733   return allocate_optimized_out_value (type);
1734 }
1735
1736 static struct value *
1737 s390_trad_frame_prev_register (struct frame_info *this_frame,
1738                                struct trad_frame_saved_reg saved_regs[],
1739                                int regnum)
1740 {
1741   if (regnum < S390_NUM_REGS)
1742     return trad_frame_get_prev_register (this_frame, saved_regs, regnum);
1743   else
1744     return s390_unwind_pseudo_register (this_frame, regnum);
1745 }
1746
1747
1748 /* Normal stack frames.  */
1749
1750 struct s390_unwind_cache {
1751
1752   CORE_ADDR func;
1753   CORE_ADDR frame_base;
1754   CORE_ADDR local_base;
1755
1756   struct trad_frame_saved_reg *saved_regs;
1757 };
1758
1759 static int
1760 s390_prologue_frame_unwind_cache (struct frame_info *this_frame,
1761                                   struct s390_unwind_cache *info)
1762 {
1763   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1764   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1765   struct s390_prologue_data data;
1766   pv_t *fp = &data.gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1767   pv_t *sp = &data.gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1768   int i;
1769   CORE_ADDR cfa;
1770   CORE_ADDR func;
1771   CORE_ADDR result;
1772   ULONGEST reg;
1773   CORE_ADDR prev_sp;
1774   int frame_pointer;
1775   int size;
1776   struct frame_info *next_frame;
1777
1778   /* Try to find the function start address.  If we can't find it, we don't
1779      bother searching for it -- with modern compilers this would be mostly
1780      pointless anyway.  Trust that we'll either have valid DWARF-2 CFI data
1781      or else a valid backchain ...  */
1782   func = get_frame_func (this_frame);
1783   if (!func)
1784     return 0;
1785
1786   /* Try to analyze the prologue.  */
1787   result = s390_analyze_prologue (gdbarch, func,
1788                                   get_frame_pc (this_frame), &data);
1789   if (!result)
1790     return 0;
1791
1792   /* If this was successful, we should have found the instruction that
1793      sets the stack pointer register to the previous value of the stack 
1794      pointer minus the frame size.  */
1795   if (!pv_is_register (*sp, S390_SP_REGNUM))
1796     return 0;
1797
1798   /* A frame size of zero at this point can mean either a real 
1799      frameless function, or else a failure to find the prologue.
1800      Perform some sanity checks to verify we really have a 
1801      frameless function.  */
1802   if (sp->k == 0)
1803     {
1804       /* If the next frame is a NORMAL_FRAME, this frame *cannot* have frame 
1805          size zero.  This is only possible if the next frame is a sentinel 
1806          frame, a dummy frame, or a signal trampoline frame.  */
1807       /* FIXME: cagney/2004-05-01: This sanity check shouldn't be
1808          needed, instead the code should simpliy rely on its
1809          analysis.  */
1810       next_frame = get_next_frame (this_frame);
1811       while (next_frame && get_frame_type (next_frame) == INLINE_FRAME)
1812         next_frame = get_next_frame (next_frame);
1813       if (next_frame
1814           && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
1815         return 0;
1816
1817       /* If we really have a frameless function, %r14 must be valid
1818          -- in particular, it must point to a different function.  */
1819       reg = get_frame_register_unsigned (this_frame, S390_RETADDR_REGNUM);
1820       reg = gdbarch_addr_bits_remove (gdbarch, reg) - 1;
1821       if (get_pc_function_start (reg) == func)
1822         {
1823           /* However, there is one case where it *is* valid for %r14
1824              to point to the same function -- if this is a recursive
1825              call, and we have stopped in the prologue *before* the
1826              stack frame was allocated.
1827
1828              Recognize this case by looking ahead a bit ...  */
1829
1830           struct s390_prologue_data data2;
1831           pv_t *sp = &data2.gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1832
1833           if (!(s390_analyze_prologue (gdbarch, func, (CORE_ADDR)-1, &data2)
1834                 && pv_is_register (*sp, S390_SP_REGNUM)
1835                 && sp->k != 0))
1836             return 0;
1837         }
1838     }
1839
1840
1841   /* OK, we've found valid prologue data.  */
1842   size = -sp->k;
1843
1844   /* If the frame pointer originally also holds the same value
1845      as the stack pointer, we're probably using it.  If it holds
1846      some other value -- even a constant offset -- it is most
1847      likely used as temp register.  */
1848   if (pv_is_identical (*sp, *fp))
1849     frame_pointer = S390_FRAME_REGNUM;
1850   else
1851     frame_pointer = S390_SP_REGNUM;
1852
1853   /* If we've detected a function with stack frame, we'll still have to 
1854      treat it as frameless if we're currently within the function epilog 
1855      code at a point where the frame pointer has already been restored.
1856      This can only happen in an innermost frame.  */
1857   /* FIXME: cagney/2004-05-01: This sanity check shouldn't be needed,
1858      instead the code should simpliy rely on its analysis.  */
1859   next_frame = get_next_frame (this_frame);
1860   while (next_frame && get_frame_type (next_frame) == INLINE_FRAME)
1861     next_frame = get_next_frame (next_frame);
1862   if (size > 0
1863       && (next_frame == NULL
1864           || get_frame_type (get_next_frame (this_frame)) != NORMAL_FRAME))
1865     {
1866       /* See the comment in s390_in_function_epilogue_p on why this is
1867          not completely reliable ...  */
1868       if (s390_in_function_epilogue_p (gdbarch, get_frame_pc (this_frame)))
1869         {
1870           memset (&data, 0, sizeof (data));
1871           size = 0;
1872           frame_pointer = S390_SP_REGNUM;
1873         }
1874     }
1875
1876   /* Once we know the frame register and the frame size, we can unwind
1877      the current value of the frame register from the next frame, and
1878      add back the frame size to arrive that the previous frame's 
1879      stack pointer value.  */
1880   prev_sp = get_frame_register_unsigned (this_frame, frame_pointer) + size;
1881   cfa = prev_sp + 16*word_size + 32;
1882
1883   /* Set up ABI call-saved/call-clobbered registers.  */
1884   for (i = 0; i < S390_NUM_REGS; i++)
1885     if (!s390_register_call_saved (gdbarch, i))
1886       trad_frame_set_unknown (info->saved_regs, i);
1887
1888   /* CC is always call-clobbered.  */
1889   trad_frame_set_unknown (info->saved_regs, S390_PSWM_REGNUM);
1890
1891   /* Record the addresses of all register spill slots the prologue parser
1892      has recognized.  Consider only registers defined as call-saved by the
1893      ABI; for call-clobbered registers the parser may have recognized
1894      spurious stores.  */
1895
1896   for (i = 0; i < 16; i++)
1897     if (s390_register_call_saved (gdbarch, S390_R0_REGNUM + i)
1898         && data.gpr_slot[i] != 0)
1899       info->saved_regs[S390_R0_REGNUM + i].addr = cfa - data.gpr_slot[i];
1900
1901   for (i = 0; i < 16; i++)
1902     if (s390_register_call_saved (gdbarch, S390_F0_REGNUM + i)
1903         && data.fpr_slot[i] != 0)
1904       info->saved_regs[S390_F0_REGNUM + i].addr = cfa - data.fpr_slot[i];
1905
1906   /* Function return will set PC to %r14.  */
1907   info->saved_regs[S390_PSWA_REGNUM] = info->saved_regs[S390_RETADDR_REGNUM];
1908
1909   /* In frameless functions, we unwind simply by moving the return
1910      address to the PC.  However, if we actually stored to the
1911      save area, use that -- we might only think the function frameless
1912      because we're in the middle of the prologue ...  */
1913   if (size == 0
1914       && !trad_frame_addr_p (info->saved_regs, S390_PSWA_REGNUM))
1915     {
1916       info->saved_regs[S390_PSWA_REGNUM].realreg = S390_RETADDR_REGNUM;
1917     }
1918
1919   /* Another sanity check: unless this is a frameless function,
1920      we should have found spill slots for SP and PC.
1921      If not, we cannot unwind further -- this happens e.g. in
1922      libc's thread_start routine.  */
1923   if (size > 0)
1924     {
1925       if (!trad_frame_addr_p (info->saved_regs, S390_SP_REGNUM)
1926           || !trad_frame_addr_p (info->saved_regs, S390_PSWA_REGNUM))
1927         prev_sp = -1;
1928     }
1929
1930   /* We use the current value of the frame register as local_base,
1931      and the top of the register save area as frame_base.  */
1932   if (prev_sp != -1)
1933     {
1934       info->frame_base = prev_sp + 16*word_size + 32;
1935       info->local_base = prev_sp - size;
1936     }
1937
1938   info->func = func;
1939   return 1;
1940 }
1941
1942 static void
1943 s390_backchain_frame_unwind_cache (struct frame_info *this_frame,
1944                                    struct s390_unwind_cache *info)
1945 {
1946   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1947   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1948   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1949   CORE_ADDR backchain;
1950   ULONGEST reg;
1951   LONGEST sp;
1952   int i;
1953
1954   /* Set up ABI call-saved/call-clobbered registers.  */
1955   for (i = 0; i < S390_NUM_REGS; i++)
1956     if (!s390_register_call_saved (gdbarch, i))
1957       trad_frame_set_unknown (info->saved_regs, i);
1958
1959   /* CC is always call-clobbered.  */
1960   trad_frame_set_unknown (info->saved_regs, S390_PSWM_REGNUM);
1961
1962   /* Get the backchain.  */
1963   reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
1964   backchain = read_memory_unsigned_integer (reg, word_size, byte_order);
1965
1966   /* A zero backchain terminates the frame chain.  As additional
1967      sanity check, let's verify that the spill slot for SP in the
1968      save area pointed to by the backchain in fact links back to
1969      the save area.  */
1970   if (backchain != 0
1971       && safe_read_memory_integer (backchain + 15*word_size,
1972                                    word_size, byte_order, &sp)
1973       && (CORE_ADDR)sp == backchain)
1974     {
1975       /* We don't know which registers were saved, but it will have
1976          to be at least %r14 and %r15.  This will allow us to continue
1977          unwinding, but other prev-frame registers may be incorrect ...  */
1978       info->saved_regs[S390_SP_REGNUM].addr = backchain + 15*word_size;
1979       info->saved_regs[S390_RETADDR_REGNUM].addr = backchain + 14*word_size;
1980
1981       /* Function return will set PC to %r14.  */
1982       info->saved_regs[S390_PSWA_REGNUM]
1983         = info->saved_regs[S390_RETADDR_REGNUM];
1984
1985       /* We use the current value of the frame register as local_base,
1986          and the top of the register save area as frame_base.  */
1987       info->frame_base = backchain + 16*word_size + 32;
1988       info->local_base = reg;
1989     }
1990
1991   info->func = get_frame_pc (this_frame);
1992 }
1993
1994 static struct s390_unwind_cache *
1995 s390_frame_unwind_cache (struct frame_info *this_frame,
1996                          void **this_prologue_cache)
1997 {
1998   struct s390_unwind_cache *info;
1999   if (*this_prologue_cache)
2000     return *this_prologue_cache;
2001
2002   info = FRAME_OBSTACK_ZALLOC (struct s390_unwind_cache);
2003   *this_prologue_cache = info;
2004   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2005   info->func = -1;
2006   info->frame_base = -1;
2007   info->local_base = -1;
2008
2009   /* Try to use prologue analysis to fill the unwind cache.
2010      If this fails, fall back to reading the stack backchain.  */
2011   if (!s390_prologue_frame_unwind_cache (this_frame, info))
2012     s390_backchain_frame_unwind_cache (this_frame, info);
2013
2014   return info;
2015 }
2016
2017 static void
2018 s390_frame_this_id (struct frame_info *this_frame,
2019                     void **this_prologue_cache,
2020                     struct frame_id *this_id)
2021 {
2022   struct s390_unwind_cache *info
2023     = s390_frame_unwind_cache (this_frame, this_prologue_cache);
2024
2025   if (info->frame_base == -1)
2026     return;
2027
2028   *this_id = frame_id_build (info->frame_base, info->func);
2029 }
2030
2031 static struct value *
2032 s390_frame_prev_register (struct frame_info *this_frame,
2033                           void **this_prologue_cache, int regnum)
2034 {
2035   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2036   struct s390_unwind_cache *info
2037     = s390_frame_unwind_cache (this_frame, this_prologue_cache);
2038
2039   return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2040 }
2041
2042 static const struct frame_unwind s390_frame_unwind = {
2043   NORMAL_FRAME,
2044   default_frame_unwind_stop_reason,
2045   s390_frame_this_id,
2046   s390_frame_prev_register,
2047   NULL,
2048   default_frame_sniffer
2049 };
2050
2051
2052 /* Code stubs and their stack frames.  For things like PLTs and NULL
2053    function calls (where there is no true frame and the return address
2054    is in the RETADDR register).  */
2055
2056 struct s390_stub_unwind_cache
2057 {
2058   CORE_ADDR frame_base;
2059   struct trad_frame_saved_reg *saved_regs;
2060 };
2061
2062 static struct s390_stub_unwind_cache *
2063 s390_stub_frame_unwind_cache (struct frame_info *this_frame,
2064                               void **this_prologue_cache)
2065 {
2066   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2067   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2068   struct s390_stub_unwind_cache *info;
2069   ULONGEST reg;
2070
2071   if (*this_prologue_cache)
2072     return *this_prologue_cache;
2073
2074   info = FRAME_OBSTACK_ZALLOC (struct s390_stub_unwind_cache);
2075   *this_prologue_cache = info;
2076   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2077
2078   /* The return address is in register %r14.  */
2079   info->saved_regs[S390_PSWA_REGNUM].realreg = S390_RETADDR_REGNUM;
2080
2081   /* Retrieve stack pointer and determine our frame base.  */
2082   reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2083   info->frame_base = reg + 16*word_size + 32;
2084
2085   return info;
2086 }
2087
2088 static void
2089 s390_stub_frame_this_id (struct frame_info *this_frame,
2090                          void **this_prologue_cache,
2091                          struct frame_id *this_id)
2092 {
2093   struct s390_stub_unwind_cache *info
2094     = s390_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2095   *this_id = frame_id_build (info->frame_base, get_frame_pc (this_frame));
2096 }
2097
2098 static struct value *
2099 s390_stub_frame_prev_register (struct frame_info *this_frame,
2100                                void **this_prologue_cache, int regnum)
2101 {
2102   struct s390_stub_unwind_cache *info
2103     = s390_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2104   return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2105 }
2106
2107 static int
2108 s390_stub_frame_sniffer (const struct frame_unwind *self,
2109                          struct frame_info *this_frame,
2110                          void **this_prologue_cache)
2111 {
2112   CORE_ADDR addr_in_block;
2113   bfd_byte insn[S390_MAX_INSTR_SIZE];
2114
2115   /* If the current PC points to non-readable memory, we assume we
2116      have trapped due to an invalid function pointer call.  We handle
2117      the non-existing current function like a PLT stub.  */
2118   addr_in_block = get_frame_address_in_block (this_frame);
2119   if (in_plt_section (addr_in_block, NULL)
2120       || s390_readinstruction (insn, get_frame_pc (this_frame)) < 0)
2121     return 1;
2122   return 0;
2123 }
2124
2125 static const struct frame_unwind s390_stub_frame_unwind = {
2126   NORMAL_FRAME,
2127   default_frame_unwind_stop_reason,
2128   s390_stub_frame_this_id,
2129   s390_stub_frame_prev_register,
2130   NULL,
2131   s390_stub_frame_sniffer
2132 };
2133
2134
2135 /* Signal trampoline stack frames.  */
2136
2137 struct s390_sigtramp_unwind_cache {
2138   CORE_ADDR frame_base;
2139   struct trad_frame_saved_reg *saved_regs;
2140 };
2141
2142 static struct s390_sigtramp_unwind_cache *
2143 s390_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
2144                                   void **this_prologue_cache)
2145 {
2146   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2147   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2148   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2149   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2150   struct s390_sigtramp_unwind_cache *info;
2151   ULONGEST this_sp, prev_sp;
2152   CORE_ADDR next_ra, next_cfa, sigreg_ptr, sigreg_high_off;
2153   int i;
2154
2155   if (*this_prologue_cache)
2156     return *this_prologue_cache;
2157
2158   info = FRAME_OBSTACK_ZALLOC (struct s390_sigtramp_unwind_cache);
2159   *this_prologue_cache = info;
2160   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2161
2162   this_sp = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2163   next_ra = get_frame_pc (this_frame);
2164   next_cfa = this_sp + 16*word_size + 32;
2165
2166   /* New-style RT frame:
2167         retcode + alignment (8 bytes)
2168         siginfo (128 bytes)
2169         ucontext (contains sigregs at offset 5 words).  */
2170   if (next_ra == next_cfa)
2171     {
2172       sigreg_ptr = next_cfa + 8 + 128 + align_up (5*word_size, 8);
2173       /* sigregs are followed by uc_sigmask (8 bytes), then by the
2174          upper GPR halves if present.  */
2175       sigreg_high_off = 8;
2176     }
2177
2178   /* Old-style RT frame and all non-RT frames:
2179         old signal mask (8 bytes)
2180         pointer to sigregs.  */
2181   else
2182     {
2183       sigreg_ptr = read_memory_unsigned_integer (next_cfa + 8,
2184                                                  word_size, byte_order);
2185       /* sigregs are followed by signo (4 bytes), then by the
2186          upper GPR halves if present.  */
2187       sigreg_high_off = 4;
2188     }
2189
2190   /* The sigregs structure looks like this:
2191             long   psw_mask;
2192             long   psw_addr;
2193             long   gprs[16];
2194             int    acrs[16];
2195             int    fpc;
2196             int    __pad;
2197             double fprs[16];  */
2198
2199   /* PSW mask and address.  */
2200   info->saved_regs[S390_PSWM_REGNUM].addr = sigreg_ptr;
2201   sigreg_ptr += word_size;
2202   info->saved_regs[S390_PSWA_REGNUM].addr = sigreg_ptr;
2203   sigreg_ptr += word_size;
2204
2205   /* Then the GPRs.  */
2206   for (i = 0; i < 16; i++)
2207     {
2208       info->saved_regs[S390_R0_REGNUM + i].addr = sigreg_ptr;
2209       sigreg_ptr += word_size;
2210     }
2211
2212   /* Then the ACRs.  */
2213   for (i = 0; i < 16; i++)
2214     {
2215       info->saved_regs[S390_A0_REGNUM + i].addr = sigreg_ptr;
2216       sigreg_ptr += 4;
2217     }
2218
2219   /* The floating-point control word.  */
2220   info->saved_regs[S390_FPC_REGNUM].addr = sigreg_ptr;
2221   sigreg_ptr += 8;
2222
2223   /* And finally the FPRs.  */
2224   for (i = 0; i < 16; i++)
2225     {
2226       info->saved_regs[S390_F0_REGNUM + i].addr = sigreg_ptr;
2227       sigreg_ptr += 8;
2228     }
2229
2230   /* If we have them, the GPR upper halves are appended at the end.  */
2231   sigreg_ptr += sigreg_high_off;
2232   if (tdep->gpr_full_regnum != -1)
2233     for (i = 0; i < 16; i++)
2234       {
2235         info->saved_regs[S390_R0_UPPER_REGNUM + i].addr = sigreg_ptr;
2236         sigreg_ptr += 4;
2237       }
2238
2239   /* Restore the previous frame's SP.  */
2240   prev_sp = read_memory_unsigned_integer (
2241                         info->saved_regs[S390_SP_REGNUM].addr,
2242                         word_size, byte_order);
2243
2244   /* Determine our frame base.  */
2245   info->frame_base = prev_sp + 16*word_size + 32;
2246
2247   return info;
2248 }
2249
2250 static void
2251 s390_sigtramp_frame_this_id (struct frame_info *this_frame,
2252                              void **this_prologue_cache,
2253                              struct frame_id *this_id)
2254 {
2255   struct s390_sigtramp_unwind_cache *info
2256     = s390_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
2257   *this_id = frame_id_build (info->frame_base, get_frame_pc (this_frame));
2258 }
2259
2260 static struct value *
2261 s390_sigtramp_frame_prev_register (struct frame_info *this_frame,
2262                                    void **this_prologue_cache, int regnum)
2263 {
2264   struct s390_sigtramp_unwind_cache *info
2265     = s390_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
2266   return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2267 }
2268
2269 static int
2270 s390_sigtramp_frame_sniffer (const struct frame_unwind *self,
2271                              struct frame_info *this_frame,
2272                              void **this_prologue_cache)
2273 {
2274   CORE_ADDR pc = get_frame_pc (this_frame);
2275   bfd_byte sigreturn[2];
2276
2277   if (target_read_memory (pc, sigreturn, 2))
2278     return 0;
2279
2280   if (sigreturn[0] != 0x0a /* svc */)
2281     return 0;
2282
2283   if (sigreturn[1] != 119 /* sigreturn */
2284       && sigreturn[1] != 173 /* rt_sigreturn */)
2285     return 0;
2286   
2287   return 1;
2288 }
2289
2290 static const struct frame_unwind s390_sigtramp_frame_unwind = {
2291   SIGTRAMP_FRAME,
2292   default_frame_unwind_stop_reason,
2293   s390_sigtramp_frame_this_id,
2294   s390_sigtramp_frame_prev_register,
2295   NULL,
2296   s390_sigtramp_frame_sniffer
2297 };
2298
2299
2300 /* Frame base handling.  */
2301
2302 static CORE_ADDR
2303 s390_frame_base_address (struct frame_info *this_frame, void **this_cache)
2304 {
2305   struct s390_unwind_cache *info
2306     = s390_frame_unwind_cache (this_frame, this_cache);
2307   return info->frame_base;
2308 }
2309
2310 static CORE_ADDR
2311 s390_local_base_address (struct frame_info *this_frame, void **this_cache)
2312 {
2313   struct s390_unwind_cache *info
2314     = s390_frame_unwind_cache (this_frame, this_cache);
2315   return info->local_base;
2316 }
2317
2318 static const struct frame_base s390_frame_base = {
2319   &s390_frame_unwind,
2320   s390_frame_base_address,
2321   s390_local_base_address,
2322   s390_local_base_address
2323 };
2324
2325 static CORE_ADDR
2326 s390_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2327 {
2328   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2329   ULONGEST pc;
2330   pc = frame_unwind_register_unsigned (next_frame, tdep->pc_regnum);
2331   return gdbarch_addr_bits_remove (gdbarch, pc);
2332 }
2333
2334 static CORE_ADDR
2335 s390_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
2336 {
2337   ULONGEST sp;
2338   sp = frame_unwind_register_unsigned (next_frame, S390_SP_REGNUM);
2339   return gdbarch_addr_bits_remove (gdbarch, sp);
2340 }
2341
2342
2343 /* DWARF-2 frame support.  */
2344
2345 static struct value *
2346 s390_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
2347                            int regnum)
2348 {
2349   return s390_unwind_pseudo_register (this_frame, regnum);
2350 }
2351
2352 static void
2353 s390_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
2354                             struct dwarf2_frame_state_reg *reg,
2355                             struct frame_info *this_frame)
2356 {
2357   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2358
2359   /* The condition code (and thus PSW mask) is call-clobbered.  */
2360   if (regnum == S390_PSWM_REGNUM)
2361     reg->how = DWARF2_FRAME_REG_UNDEFINED;
2362
2363   /* The PSW address unwinds to the return address.  */
2364   else if (regnum == S390_PSWA_REGNUM)
2365     reg->how = DWARF2_FRAME_REG_RA;
2366
2367   /* Fixed registers are call-saved or call-clobbered
2368      depending on the ABI in use.  */
2369   else if (regnum < S390_NUM_REGS)
2370     {
2371       if (s390_register_call_saved (gdbarch, regnum))
2372         reg->how = DWARF2_FRAME_REG_SAME_VALUE;
2373       else
2374         reg->how = DWARF2_FRAME_REG_UNDEFINED;
2375     }
2376
2377   /* We install a special function to unwind pseudos.  */
2378   else
2379     {
2380       reg->how = DWARF2_FRAME_REG_FN;
2381       reg->loc.fn = s390_dwarf2_prev_register;
2382     }
2383 }
2384
2385
2386 /* Dummy function calls.  */
2387
2388 /* Return non-zero if TYPE is an integer-like type, zero otherwise.
2389    "Integer-like" types are those that should be passed the way
2390    integers are: integers, enums, ranges, characters, and booleans.  */
2391 static int
2392 is_integer_like (struct type *type)
2393 {
2394   enum type_code code = TYPE_CODE (type);
2395
2396   return (code == TYPE_CODE_INT
2397           || code == TYPE_CODE_ENUM
2398           || code == TYPE_CODE_RANGE
2399           || code == TYPE_CODE_CHAR
2400           || code == TYPE_CODE_BOOL);
2401 }
2402
2403 /* Return non-zero if TYPE is a pointer-like type, zero otherwise.
2404    "Pointer-like" types are those that should be passed the way
2405    pointers are: pointers and references.  */
2406 static int
2407 is_pointer_like (struct type *type)
2408 {
2409   enum type_code code = TYPE_CODE (type);
2410
2411   return (code == TYPE_CODE_PTR
2412           || code == TYPE_CODE_REF);
2413 }
2414
2415
2416 /* Return non-zero if TYPE is a `float singleton' or `double
2417    singleton', zero otherwise.
2418
2419    A `T singleton' is a struct type with one member, whose type is
2420    either T or a `T singleton'.  So, the following are all float
2421    singletons:
2422
2423    struct { float x };
2424    struct { struct { float x; } x; };
2425    struct { struct { struct { float x; } x; } x; };
2426
2427    ... and so on.
2428
2429    All such structures are passed as if they were floats or doubles,
2430    as the (revised) ABI says.  */
2431 static int
2432 is_float_singleton (struct type *type)
2433 {
2434   if (TYPE_CODE (type) == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2435     {
2436       struct type *singleton_type = TYPE_FIELD_TYPE (type, 0);
2437       CHECK_TYPEDEF (singleton_type);
2438
2439       return (TYPE_CODE (singleton_type) == TYPE_CODE_FLT
2440               || TYPE_CODE (singleton_type) == TYPE_CODE_DECFLOAT
2441               || is_float_singleton (singleton_type));
2442     }
2443
2444   return 0;
2445 }
2446
2447
2448 /* Return non-zero if TYPE is a struct-like type, zero otherwise.
2449    "Struct-like" types are those that should be passed as structs are:
2450    structs and unions.
2451
2452    As an odd quirk, not mentioned in the ABI, GCC passes float and
2453    double singletons as if they were a plain float, double, etc.  (The
2454    corresponding union types are handled normally.)  So we exclude
2455    those types here.  *shrug* */
2456 static int
2457 is_struct_like (struct type *type)
2458 {
2459   enum type_code code = TYPE_CODE (type);
2460
2461   return (code == TYPE_CODE_UNION
2462           || (code == TYPE_CODE_STRUCT && ! is_float_singleton (type)));
2463 }
2464
2465
2466 /* Return non-zero if TYPE is a float-like type, zero otherwise.
2467    "Float-like" types are those that should be passed as
2468    floating-point values are.
2469
2470    You'd think this would just be floats, doubles, long doubles, etc.
2471    But as an odd quirk, not mentioned in the ABI, GCC passes float and
2472    double singletons as if they were a plain float, double, etc.  (The
2473    corresponding union types are handled normally.)  So we include
2474    those types here.  *shrug* */
2475 static int
2476 is_float_like (struct type *type)
2477 {
2478   return (TYPE_CODE (type) == TYPE_CODE_FLT
2479           || TYPE_CODE (type) == TYPE_CODE_DECFLOAT
2480           || is_float_singleton (type));
2481 }
2482
2483
2484 static int
2485 is_power_of_two (unsigned int n)
2486 {
2487   return ((n & (n - 1)) == 0);
2488 }
2489
2490 /* Return non-zero if TYPE should be passed as a pointer to a copy,
2491    zero otherwise.  */
2492 static int
2493 s390_function_arg_pass_by_reference (struct type *type)
2494 {
2495   if (TYPE_LENGTH (type) > 8)
2496     return 1;
2497
2498   return (is_struct_like (type) && !is_power_of_two (TYPE_LENGTH (type)))
2499           || TYPE_CODE (type) == TYPE_CODE_COMPLEX
2500           || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type));
2501 }
2502
2503 /* Return non-zero if TYPE should be passed in a float register
2504    if possible.  */
2505 static int
2506 s390_function_arg_float (struct type *type)
2507 {
2508   if (TYPE_LENGTH (type) > 8)
2509     return 0;
2510
2511   return is_float_like (type);
2512 }
2513
2514 /* Return non-zero if TYPE should be passed in an integer register
2515    (or a pair of integer registers) if possible.  */
2516 static int
2517 s390_function_arg_integer (struct type *type)
2518 {
2519   if (TYPE_LENGTH (type) > 8)
2520     return 0;
2521
2522    return is_integer_like (type)
2523           || is_pointer_like (type)
2524           || (is_struct_like (type) && is_power_of_two (TYPE_LENGTH (type)));
2525 }
2526
2527 /* Return ARG, a `SIMPLE_ARG', sign-extended or zero-extended to a full
2528    word as required for the ABI.  */
2529 static LONGEST
2530 extend_simple_arg (struct gdbarch *gdbarch, struct value *arg)
2531 {
2532   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2533   struct type *type = check_typedef (value_type (arg));
2534
2535   /* Even structs get passed in the least significant bits of the
2536      register / memory word.  It's not really right to extract them as
2537      an integer, but it does take care of the extension.  */
2538   if (TYPE_UNSIGNED (type))
2539     return extract_unsigned_integer (value_contents (arg),
2540                                      TYPE_LENGTH (type), byte_order);
2541   else
2542     return extract_signed_integer (value_contents (arg),
2543                                    TYPE_LENGTH (type), byte_order);
2544 }
2545
2546
2547 /* Return the alignment required by TYPE.  */
2548 static int
2549 alignment_of (struct type *type)
2550 {
2551   int alignment;
2552
2553   if (is_integer_like (type)
2554       || is_pointer_like (type)
2555       || TYPE_CODE (type) == TYPE_CODE_FLT
2556       || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2557     alignment = TYPE_LENGTH (type);
2558   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
2559            || TYPE_CODE (type) == TYPE_CODE_UNION)
2560     {
2561       int i;
2562
2563       alignment = 1;
2564       for (i = 0; i < TYPE_NFIELDS (type); i++)
2565         {
2566           int field_alignment
2567             = alignment_of (check_typedef (TYPE_FIELD_TYPE (type, i)));
2568
2569           if (field_alignment > alignment)
2570             alignment = field_alignment;
2571         }
2572     }
2573   else
2574     alignment = 1;
2575
2576   /* Check that everything we ever return is a power of two.  Lots of
2577      code doesn't want to deal with aligning things to arbitrary
2578      boundaries.  */
2579   gdb_assert ((alignment & (alignment - 1)) == 0);
2580
2581   return alignment;
2582 }
2583
2584
2585 /* Put the actual parameter values pointed to by ARGS[0..NARGS-1] in
2586    place to be passed to a function, as specified by the "GNU/Linux
2587    for S/390 ELF Application Binary Interface Supplement".
2588
2589    SP is the current stack pointer.  We must put arguments, links,
2590    padding, etc. whereever they belong, and return the new stack
2591    pointer value.
2592    
2593    If STRUCT_RETURN is non-zero, then the function we're calling is
2594    going to return a structure by value; STRUCT_ADDR is the address of
2595    a block we've allocated for it on the stack.
2596
2597    Our caller has taken care of any type promotions needed to satisfy
2598    prototypes or the old K&R argument-passing rules.  */
2599 static CORE_ADDR
2600 s390_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2601                       struct regcache *regcache, CORE_ADDR bp_addr,
2602                       int nargs, struct value **args, CORE_ADDR sp,
2603                       int struct_return, CORE_ADDR struct_addr)
2604 {
2605   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2606   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2607   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2608   int i;
2609
2610   /* If the i'th argument is passed as a reference to a copy, then
2611      copy_addr[i] is the address of the copy we made.  */
2612   CORE_ADDR *copy_addr = alloca (nargs * sizeof (CORE_ADDR));
2613
2614   /* Reserve space for the reference-to-copy area.  */
2615   for (i = 0; i < nargs; i++)
2616     {
2617       struct value *arg = args[i];
2618       struct type *type = check_typedef (value_type (arg));
2619
2620       if (s390_function_arg_pass_by_reference (type))
2621         {
2622           sp -= TYPE_LENGTH (type);
2623           sp = align_down (sp, alignment_of (type));
2624           copy_addr[i] = sp;
2625         }
2626     }
2627
2628   /* Reserve space for the parameter area.  As a conservative
2629      simplification, we assume that everything will be passed on the
2630      stack.  Since every argument larger than 8 bytes will be 
2631      passed by reference, we use this simple upper bound.  */
2632   sp -= nargs * 8;
2633
2634   /* After all that, make sure it's still aligned on an eight-byte
2635      boundary.  */
2636   sp = align_down (sp, 8);
2637
2638   /* Allocate the standard frame areas: the register save area, the
2639      word reserved for the compiler (which seems kind of meaningless),
2640      and the back chain pointer.  */
2641   sp -= 16*word_size + 32;
2642
2643   /* Now we have the final SP value.  Make sure we didn't underflow;
2644      on 31-bit, this would result in addresses with the high bit set,
2645      which causes confusion elsewhere.  Note that if we error out
2646      here, stack and registers remain untouched.  */
2647   if (gdbarch_addr_bits_remove (gdbarch, sp) != sp)
2648     error (_("Stack overflow"));
2649
2650
2651   /* Finally, place the actual parameters, working from SP towards
2652      higher addresses.  The code above is supposed to reserve enough
2653      space for this.  */
2654   {
2655     int fr = 0;
2656     int gr = 2;
2657     CORE_ADDR starg = sp + 16*word_size + 32;
2658
2659     /* A struct is returned using general register 2.  */
2660     if (struct_return)
2661       {
2662         regcache_cooked_write_unsigned (regcache, S390_R0_REGNUM + gr,
2663                                         struct_addr);
2664         gr++;
2665       }
2666
2667     for (i = 0; i < nargs; i++)
2668       {
2669         struct value *arg = args[i];
2670         struct type *type = check_typedef (value_type (arg));
2671         unsigned length = TYPE_LENGTH (type);
2672
2673         if (s390_function_arg_pass_by_reference (type))
2674           {
2675             /* Actually copy the argument contents to the stack slot
2676                that was reserved above.  */
2677             write_memory (copy_addr[i], value_contents (arg), length);
2678
2679             if (gr <= 6)
2680               {
2681                 regcache_cooked_write_unsigned (regcache, S390_R0_REGNUM + gr,
2682                                                 copy_addr[i]);
2683                 gr++;
2684               }
2685             else
2686               {
2687                 write_memory_unsigned_integer (starg, word_size, byte_order,
2688                                                copy_addr[i]);
2689                 starg += word_size;
2690               }
2691           }
2692         else if (s390_function_arg_float (type))
2693           {
2694             /* The GNU/Linux for S/390 ABI uses FPRs 0 and 2 to pass arguments,
2695                the GNU/Linux for zSeries ABI uses 0, 2, 4, and 6.  */
2696             if (fr <= (tdep->abi == ABI_LINUX_S390 ? 2 : 6))
2697               {
2698                 /* When we store a single-precision value in an FP register,
2699                    it occupies the leftmost bits.  */
2700                 regcache_cooked_write_part (regcache, S390_F0_REGNUM + fr,
2701                                             0, length, value_contents (arg));
2702                 fr += 2;
2703               }
2704             else
2705               {
2706                 /* When we store a single-precision value in a stack slot,
2707                    it occupies the rightmost bits.  */
2708                 starg = align_up (starg + length, word_size);
2709                 write_memory (starg - length, value_contents (arg), length);
2710               }
2711           }
2712         else if (s390_function_arg_integer (type) && length <= word_size)
2713           {
2714             if (gr <= 6)
2715               {
2716                 /* Integer arguments are always extended to word size.  */
2717                 regcache_cooked_write_signed (regcache, S390_R0_REGNUM + gr,
2718                                               extend_simple_arg (gdbarch,
2719                                                                  arg));
2720                 gr++;
2721               }
2722             else
2723               {
2724                 /* Integer arguments are always extended to word size.  */
2725                 write_memory_signed_integer (starg, word_size, byte_order,
2726                                              extend_simple_arg (gdbarch, arg));
2727                 starg += word_size;
2728               }
2729           }
2730         else if (s390_function_arg_integer (type) && length == 2*word_size)
2731           {
2732             if (gr <= 5)
2733               {
2734                 regcache_cooked_write (regcache, S390_R0_REGNUM + gr,
2735                                        value_contents (arg));
2736                 regcache_cooked_write (regcache, S390_R0_REGNUM + gr + 1,
2737                                        value_contents (arg) + word_size);
2738                 gr += 2;
2739               }
2740             else
2741               {
2742                 /* If we skipped r6 because we couldn't fit a DOUBLE_ARG
2743                    in it, then don't go back and use it again later.  */
2744                 gr = 7;
2745
2746                 write_memory (starg, value_contents (arg), length);
2747                 starg += length;
2748               }
2749           }
2750         else
2751           internal_error (__FILE__, __LINE__, _("unknown argument type"));
2752       }
2753   }
2754
2755   /* Store return PSWA.  In 31-bit mode, keep addressing mode bit.  */
2756   if (word_size == 4)
2757     {
2758       ULONGEST pswa;
2759       regcache_cooked_read_unsigned (regcache, S390_PSWA_REGNUM, &pswa);
2760       bp_addr = (bp_addr & 0x7fffffff) | (pswa & 0x80000000);
2761     }
2762   regcache_cooked_write_unsigned (regcache, S390_RETADDR_REGNUM, bp_addr);
2763
2764   /* Store updated stack pointer.  */
2765   regcache_cooked_write_unsigned (regcache, S390_SP_REGNUM, sp);
2766
2767   /* We need to return the 'stack part' of the frame ID,
2768      which is actually the top of the register save area.  */
2769   return sp + 16*word_size + 32;
2770 }
2771
2772 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
2773    dummy frame.  The frame ID's base needs to match the TOS value
2774    returned by push_dummy_call, and the PC match the dummy frame's
2775    breakpoint.  */
2776 static struct frame_id
2777 s390_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2778 {
2779   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2780   CORE_ADDR sp = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2781   sp = gdbarch_addr_bits_remove (gdbarch, sp);
2782
2783   return frame_id_build (sp + 16*word_size + 32,
2784                          get_frame_pc (this_frame));
2785 }
2786
2787 static CORE_ADDR
2788 s390_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2789 {
2790   /* Both the 32- and 64-bit ABI's say that the stack pointer should
2791      always be aligned on an eight-byte boundary.  */
2792   return (addr & -8);
2793 }
2794
2795
2796 /* Function return value access.  */
2797
2798 static enum return_value_convention
2799 s390_return_value_convention (struct gdbarch *gdbarch, struct type *type)
2800 {
2801   if (TYPE_LENGTH (type) > 8)
2802     return RETURN_VALUE_STRUCT_CONVENTION;
2803
2804   switch (TYPE_CODE (type))
2805     {
2806     case TYPE_CODE_STRUCT:
2807     case TYPE_CODE_UNION:
2808     case TYPE_CODE_ARRAY:
2809     case TYPE_CODE_COMPLEX:
2810       return RETURN_VALUE_STRUCT_CONVENTION;
2811
2812     default:
2813       return RETURN_VALUE_REGISTER_CONVENTION;
2814     }
2815 }
2816
2817 static enum return_value_convention
2818 s390_return_value (struct gdbarch *gdbarch, struct value *function,
2819                    struct type *type, struct regcache *regcache,
2820                    gdb_byte *out, const gdb_byte *in)
2821 {
2822   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2823   int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2824   enum return_value_convention rvc;
2825   int length;
2826
2827   type = check_typedef (type);
2828   rvc = s390_return_value_convention (gdbarch, type);
2829   length = TYPE_LENGTH (type);
2830
2831   if (in)
2832     {
2833       switch (rvc)
2834         {
2835         case RETURN_VALUE_REGISTER_CONVENTION:
2836           if (TYPE_CODE (type) == TYPE_CODE_FLT
2837               || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2838             {
2839               /* When we store a single-precision value in an FP register,
2840                  it occupies the leftmost bits.  */
2841               regcache_cooked_write_part (regcache, S390_F0_REGNUM, 
2842                                           0, length, in);
2843             }
2844           else if (length <= word_size)
2845             {
2846               /* Integer arguments are always extended to word size.  */
2847               if (TYPE_UNSIGNED (type))
2848                 regcache_cooked_write_unsigned (regcache, S390_R2_REGNUM,
2849                         extract_unsigned_integer (in, length, byte_order));
2850               else
2851                 regcache_cooked_write_signed (regcache, S390_R2_REGNUM,
2852                         extract_signed_integer (in, length, byte_order));
2853             }
2854           else if (length == 2*word_size)
2855             {
2856               regcache_cooked_write (regcache, S390_R2_REGNUM, in);
2857               regcache_cooked_write (regcache, S390_R3_REGNUM, in + word_size);
2858             }
2859           else
2860             internal_error (__FILE__, __LINE__, _("invalid return type"));
2861           break;
2862
2863         case RETURN_VALUE_STRUCT_CONVENTION:
2864           error (_("Cannot set function return value."));
2865           break;
2866         }
2867     }
2868   else if (out)
2869     {
2870       switch (rvc)
2871         {
2872         case RETURN_VALUE_REGISTER_CONVENTION:
2873           if (TYPE_CODE (type) == TYPE_CODE_FLT
2874               || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2875             {
2876               /* When we store a single-precision value in an FP register,
2877                  it occupies the leftmost bits.  */
2878               regcache_cooked_read_part (regcache, S390_F0_REGNUM, 
2879                                          0, length, out);
2880             }
2881           else if (length <= word_size)
2882             {
2883               /* Integer arguments occupy the rightmost bits.  */
2884               regcache_cooked_read_part (regcache, S390_R2_REGNUM, 
2885                                          word_size - length, length, out);
2886             }
2887           else if (length == 2*word_size)
2888             {
2889               regcache_cooked_read (regcache, S390_R2_REGNUM, out);
2890               regcache_cooked_read (regcache, S390_R3_REGNUM, out + word_size);
2891             }
2892           else
2893             internal_error (__FILE__, __LINE__, _("invalid return type"));
2894           break;
2895
2896         case RETURN_VALUE_STRUCT_CONVENTION:
2897           error (_("Function return value unknown."));
2898           break;
2899         }
2900     }
2901
2902   return rvc;
2903 }
2904
2905
2906 /* Breakpoints.  */
2907
2908 static const gdb_byte *
2909 s390_breakpoint_from_pc (struct gdbarch *gdbarch,
2910                          CORE_ADDR *pcptr, int *lenptr)
2911 {
2912   static const gdb_byte breakpoint[] = { 0x0, 0x1 };
2913
2914   *lenptr = sizeof (breakpoint);
2915   return breakpoint;
2916 }
2917
2918
2919 /* Address handling.  */
2920
2921 static CORE_ADDR
2922 s390_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
2923 {
2924   return addr & 0x7fffffff;
2925 }
2926
2927 static int
2928 s390_address_class_type_flags (int byte_size, int dwarf2_addr_class)
2929 {
2930   if (byte_size == 4)
2931     return TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
2932   else
2933     return 0;
2934 }
2935
2936 static const char *
2937 s390_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
2938 {
2939   if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
2940     return "mode32";
2941   else
2942     return NULL;
2943 }
2944
2945 static int
2946 s390_address_class_name_to_type_flags (struct gdbarch *gdbarch,
2947                                        const char *name,
2948                                        int *type_flags_ptr)
2949 {
2950   if (strcmp (name, "mode32") == 0)
2951     {
2952       *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
2953       return 1;
2954     }
2955   else
2956     return 0;
2957 }
2958
2959 /* Implementation of `gdbarch_stap_is_single_operand', as defined in
2960    gdbarch.h.  */
2961
2962 static int
2963 s390_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
2964 {
2965   return ((isdigit (*s) && s[1] == '(' && s[2] == '%') /* Displacement
2966                                                           or indirection.  */
2967           || *s == '%' /* Register access.  */
2968           || isdigit (*s)); /* Literal number.  */
2969 }
2970
2971 /* Set up gdbarch struct.  */
2972
2973 static struct gdbarch *
2974 s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2975 {
2976   const struct target_desc *tdesc = info.target_desc;
2977   struct tdesc_arch_data *tdesc_data = NULL;
2978   struct gdbarch *gdbarch;
2979   struct gdbarch_tdep *tdep;
2980   int tdep_abi;
2981   int have_upper = 0;
2982   int have_linux_v1 = 0;
2983   int have_linux_v2 = 0;
2984   int first_pseudo_reg, last_pseudo_reg;
2985
2986   /* Default ABI and register size.  */
2987   switch (info.bfd_arch_info->mach)
2988     {
2989     case bfd_mach_s390_31:
2990       tdep_abi = ABI_LINUX_S390;
2991       break;
2992
2993     case bfd_mach_s390_64:
2994       tdep_abi = ABI_LINUX_ZSERIES;
2995       break;
2996
2997     default:
2998       return NULL;
2999     }
3000
3001   /* Use default target description if none provided by the target.  */
3002   if (!tdesc_has_registers (tdesc))
3003     {
3004       if (tdep_abi == ABI_LINUX_S390)
3005         tdesc = tdesc_s390_linux32;
3006       else
3007         tdesc = tdesc_s390x_linux64;
3008     }
3009
3010   /* Check any target description for validity.  */
3011   if (tdesc_has_registers (tdesc))
3012     {
3013       static const char *const gprs[] = {
3014         "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
3015         "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3016       };
3017       static const char *const fprs[] = {
3018         "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
3019         "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"
3020       };
3021       static const char *const acrs[] = {
3022         "acr0", "acr1", "acr2", "acr3", "acr4", "acr5", "acr6", "acr7",
3023         "acr8", "acr9", "acr10", "acr11", "acr12", "acr13", "acr14", "acr15"
3024       };
3025       static const char *const gprs_lower[] = {
3026         "r0l", "r1l", "r2l", "r3l", "r4l", "r5l", "r6l", "r7l",
3027         "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l"
3028       };
3029       static const char *const gprs_upper[] = {
3030         "r0h", "r1h", "r2h", "r3h", "r4h", "r5h", "r6h", "r7h",
3031         "r8h", "r9h", "r10h", "r11h", "r12h", "r13h", "r14h", "r15h"
3032       };
3033       const struct tdesc_feature *feature;
3034       int i, valid_p = 1;
3035
3036       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.core");
3037       if (feature == NULL)
3038         return NULL;
3039
3040       tdesc_data = tdesc_data_alloc ();
3041
3042       valid_p &= tdesc_numbered_register (feature, tdesc_data,
3043                                           S390_PSWM_REGNUM, "pswm");
3044       valid_p &= tdesc_numbered_register (feature, tdesc_data,
3045                                           S390_PSWA_REGNUM, "pswa");
3046
3047       if (tdesc_unnumbered_register (feature, "r0"))
3048         {
3049           for (i = 0; i < 16; i++)
3050             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3051                                                 S390_R0_REGNUM + i, gprs[i]);
3052         }
3053       else
3054         {
3055           have_upper = 1;
3056
3057           for (i = 0; i < 16; i++)
3058             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3059                                                 S390_R0_REGNUM + i,
3060                                                 gprs_lower[i]);
3061           for (i = 0; i < 16; i++)
3062             valid_p &= tdesc_numbered_register (feature, tdesc_data,
3063                                                 S390_R0_UPPER_REGNUM + i,
3064                                                 gprs_upper[i]);
3065         }
3066
3067       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.fpr");
3068       if (feature == NULL)
3069         {
3070           tdesc_data_cleanup (tdesc_data);
3071           return NULL;
3072         }
3073
3074       valid_p &= tdesc_numbered_register (feature, tdesc_data,
3075                                           S390_FPC_REGNUM, "fpc");
3076       for (i = 0; i < 16; i++)
3077         valid_p &= tdesc_numbered_register (feature, tdesc_data,
3078                                             S390_F0_REGNUM + i, fprs[i]);
3079
3080       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.acr");
3081       if (feature == NULL)
3082         {
3083           tdesc_data_cleanup (tdesc_data);
3084           return NULL;
3085         }
3086
3087       for (i = 0; i < 16; i++)
3088         valid_p &= tdesc_numbered_register (feature, tdesc_data,
3089                                             S390_A0_REGNUM + i, acrs[i]);
3090
3091       /* Optional GNU/Linux-specific "registers".  */
3092       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.linux");
3093       if (feature)
3094         {
3095           tdesc_numbered_register (feature, tdesc_data,
3096                                    S390_ORIG_R2_REGNUM, "orig_r2");
3097
3098           if (tdesc_numbered_register (feature, tdesc_data,
3099                                        S390_LAST_BREAK_REGNUM, "last_break"))
3100             have_linux_v1 = 1;
3101
3102           if (tdesc_numbered_register (feature, tdesc_data,
3103                                        S390_SYSTEM_CALL_REGNUM, "system_call"))
3104             have_linux_v2 = 1;
3105
3106           if (have_linux_v2 > have_linux_v1)
3107             valid_p = 0;
3108         }
3109
3110       if (!valid_p)
3111         {
3112           tdesc_data_cleanup (tdesc_data);
3113           return NULL;
3114         }
3115     }
3116
3117   /* Find a candidate among extant architectures.  */
3118   for (arches = gdbarch_list_lookup_by_info (arches, &info);
3119        arches != NULL;
3120        arches = gdbarch_list_lookup_by_info (arches->next, &info))
3121     {
3122       tdep = gdbarch_tdep (arches->gdbarch);
3123       if (!tdep)
3124         continue;
3125       if (tdep->abi != tdep_abi)
3126         continue;
3127       if ((tdep->gpr_full_regnum != -1) != have_upper)
3128         continue;
3129       if (tdesc_data != NULL)
3130         tdesc_data_cleanup (tdesc_data);
3131       return arches->gdbarch;
3132     }
3133
3134   /* Otherwise create a new gdbarch for the specified machine type.  */
3135   tdep = XCALLOC (1, struct gdbarch_tdep);
3136   tdep->abi = tdep_abi;
3137   gdbarch = gdbarch_alloc (&info, tdep);
3138
3139   set_gdbarch_believe_pcc_promotion (gdbarch, 0);
3140   set_gdbarch_char_signed (gdbarch, 0);
3141
3142   /* S/390 GNU/Linux uses either 64-bit or 128-bit long doubles.
3143      We can safely let them default to 128-bit, since the debug info
3144      will give the size of type actually used in each case.  */
3145   set_gdbarch_long_double_bit (gdbarch, 128);
3146   set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
3147
3148   /* Amount PC must be decremented by after a breakpoint.  This is
3149      often the number of bytes returned by gdbarch_breakpoint_from_pc but not
3150      always.  */
3151   set_gdbarch_decr_pc_after_break (gdbarch, 2);
3152   /* Stack grows downward.  */
3153   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3154   set_gdbarch_breakpoint_from_pc (gdbarch, s390_breakpoint_from_pc);
3155   set_gdbarch_skip_prologue (gdbarch, s390_skip_prologue);
3156   set_gdbarch_in_function_epilogue_p (gdbarch, s390_in_function_epilogue_p);
3157
3158   set_gdbarch_num_regs (gdbarch, S390_NUM_REGS);
3159   set_gdbarch_sp_regnum (gdbarch, S390_SP_REGNUM);
3160   set_gdbarch_fp0_regnum (gdbarch, S390_F0_REGNUM);
3161   set_gdbarch_stab_reg_to_regnum (gdbarch, s390_dwarf_reg_to_regnum);
3162   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, s390_dwarf_reg_to_regnum);
3163   set_gdbarch_value_from_register (gdbarch, s390_value_from_register);
3164   set_gdbarch_regset_from_core_section (gdbarch,
3165                                         s390_regset_from_core_section);
3166   set_gdbarch_core_read_description (gdbarch, s390_core_read_description);
3167   set_gdbarch_cannot_store_register (gdbarch, s390_cannot_store_register);
3168   set_gdbarch_write_pc (gdbarch, s390_write_pc);
3169   set_gdbarch_pseudo_register_read (gdbarch, s390_pseudo_register_read);
3170   set_gdbarch_pseudo_register_write (gdbarch, s390_pseudo_register_write);
3171   set_tdesc_pseudo_register_name (gdbarch, s390_pseudo_register_name);
3172   set_tdesc_pseudo_register_type (gdbarch, s390_pseudo_register_type);
3173   set_tdesc_pseudo_register_reggroup_p (gdbarch,
3174                                         s390_pseudo_register_reggroup_p);
3175   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
3176
3177   /* Assign pseudo register numbers.  */
3178   first_pseudo_reg = gdbarch_num_regs (gdbarch);
3179   last_pseudo_reg = first_pseudo_reg;
3180   tdep->gpr_full_regnum = -1;
3181   if (have_upper)
3182     {
3183       tdep->gpr_full_regnum = last_pseudo_reg;
3184       last_pseudo_reg += 16;
3185     }
3186   tdep->pc_regnum = last_pseudo_reg++;
3187   tdep->cc_regnum = last_pseudo_reg++;
3188   set_gdbarch_pc_regnum (gdbarch, tdep->pc_regnum);
3189   set_gdbarch_num_pseudo_regs (gdbarch, last_pseudo_reg - first_pseudo_reg);
3190
3191   /* Inferior function calls.  */
3192   set_gdbarch_push_dummy_call (gdbarch, s390_push_dummy_call);
3193   set_gdbarch_dummy_id (gdbarch, s390_dummy_id);
3194   set_gdbarch_frame_align (gdbarch, s390_frame_align);
3195   set_gdbarch_return_value (gdbarch, s390_return_value);
3196
3197   /* Frame handling.  */
3198   dwarf2_frame_set_init_reg (gdbarch, s390_dwarf2_frame_init_reg);
3199   dwarf2_frame_set_adjust_regnum (gdbarch, s390_adjust_frame_regnum);
3200   dwarf2_append_unwinders (gdbarch);
3201   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
3202   frame_unwind_append_unwinder (gdbarch, &s390_stub_frame_unwind);
3203   frame_unwind_append_unwinder (gdbarch, &s390_sigtramp_frame_unwind);
3204   frame_unwind_append_unwinder (gdbarch, &s390_frame_unwind);
3205   frame_base_set_default (gdbarch, &s390_frame_base);
3206   set_gdbarch_unwind_pc (gdbarch, s390_unwind_pc);
3207   set_gdbarch_unwind_sp (gdbarch, s390_unwind_sp);
3208
3209   /* Displaced stepping.  */
3210   set_gdbarch_displaced_step_copy_insn (gdbarch,
3211                                         simple_displaced_step_copy_insn);
3212   set_gdbarch_displaced_step_fixup (gdbarch, s390_displaced_step_fixup);
3213   set_gdbarch_displaced_step_free_closure (gdbarch,
3214                                            simple_displaced_step_free_closure);
3215   set_gdbarch_displaced_step_location (gdbarch,
3216                                        displaced_step_at_entry_point);
3217   set_gdbarch_max_insn_length (gdbarch, S390_MAX_INSTR_SIZE);
3218
3219   /* Note that GNU/Linux is the only OS supported on this
3220      platform.  */
3221   linux_init_abi (info, gdbarch);
3222
3223   switch (tdep->abi)
3224     {
3225     case ABI_LINUX_S390:
3226       tdep->gregset = &s390_gregset;
3227       tdep->sizeof_gregset = s390_sizeof_gregset;
3228       tdep->fpregset = &s390_fpregset;
3229       tdep->sizeof_fpregset = s390_sizeof_fpregset;
3230
3231       set_gdbarch_addr_bits_remove (gdbarch, s390_addr_bits_remove);
3232       set_solib_svr4_fetch_link_map_offsets
3233         (gdbarch, svr4_ilp32_fetch_link_map_offsets);
3234
3235       if (have_upper)
3236         {
3237           if (have_linux_v2)
3238             set_gdbarch_core_regset_sections (gdbarch,
3239                                               s390_linux64v2_regset_sections);
3240           else if (have_linux_v1)
3241             set_gdbarch_core_regset_sections (gdbarch,
3242                                               s390_linux64v1_regset_sections);
3243           else
3244             set_gdbarch_core_regset_sections (gdbarch,
3245                                               s390_linux64_regset_sections);
3246         }
3247       else
3248         {
3249           if (have_linux_v2)
3250             set_gdbarch_core_regset_sections (gdbarch,
3251                                               s390_linux32v2_regset_sections);
3252           else if (have_linux_v1)
3253             set_gdbarch_core_regset_sections (gdbarch,
3254                                               s390_linux32v1_regset_sections);
3255           else
3256             set_gdbarch_core_regset_sections (gdbarch,
3257                                               s390_linux32_regset_sections);
3258         }
3259       break;
3260
3261     case ABI_LINUX_ZSERIES:
3262       tdep->gregset = &s390x_gregset;
3263       tdep->sizeof_gregset = s390x_sizeof_gregset;
3264       tdep->fpregset = &s390_fpregset;
3265       tdep->sizeof_fpregset = s390_sizeof_fpregset;
3266
3267       set_gdbarch_long_bit (gdbarch, 64);
3268       set_gdbarch_long_long_bit (gdbarch, 64);
3269       set_gdbarch_ptr_bit (gdbarch, 64);
3270       set_solib_svr4_fetch_link_map_offsets
3271         (gdbarch, svr4_lp64_fetch_link_map_offsets);
3272       set_gdbarch_address_class_type_flags (gdbarch,
3273                                             s390_address_class_type_flags);
3274       set_gdbarch_address_class_type_flags_to_name (gdbarch,
3275                                                     s390_address_class_type_flags_to_name);
3276       set_gdbarch_address_class_name_to_type_flags (gdbarch,
3277                                                     s390_address_class_name_to_type_flags);
3278
3279       if (have_linux_v2)
3280         set_gdbarch_core_regset_sections (gdbarch,
3281                                           s390x_linux64v2_regset_sections);
3282       else if (have_linux_v1)
3283         set_gdbarch_core_regset_sections (gdbarch,
3284                                           s390x_linux64v1_regset_sections);
3285       else
3286         set_gdbarch_core_regset_sections (gdbarch,
3287                                           s390x_linux64_regset_sections);
3288       break;
3289     }
3290
3291   set_gdbarch_print_insn (gdbarch, print_insn_s390);
3292
3293   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
3294
3295   /* Enable TLS support.  */
3296   set_gdbarch_fetch_tls_load_module_address (gdbarch,
3297                                              svr4_fetch_objfile_link_map);
3298
3299   set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
3300
3301   /* SystemTap functions.  */
3302   set_gdbarch_stap_register_prefix (gdbarch, "%");
3303   set_gdbarch_stap_register_indirection_prefix (gdbarch, "(");
3304   set_gdbarch_stap_register_indirection_suffix (gdbarch, ")");
3305   set_gdbarch_stap_is_single_operand (gdbarch, s390_stap_is_single_operand);
3306
3307   return gdbarch;
3308 }
3309
3310
3311 extern initialize_file_ftype _initialize_s390_tdep; /* -Wmissing-prototypes */
3312
3313 void
3314 _initialize_s390_tdep (void)
3315 {
3316   /* Hook us into the gdbarch mechanism.  */
3317   register_gdbarch_init (bfd_arch_s390, s390_gdbarch_init);
3318
3319   /* Initialize the GNU/Linux target descriptions.  */
3320   initialize_tdesc_s390_linux32 ();
3321   initialize_tdesc_s390_linux32v1 ();
3322   initialize_tdesc_s390_linux32v2 ();
3323   initialize_tdesc_s390_linux64 ();
3324   initialize_tdesc_s390_linux64v1 ();
3325   initialize_tdesc_s390_linux64v2 ();
3326   initialize_tdesc_s390x_linux64 ();
3327   initialize_tdesc_s390x_linux64v1 ();
3328   initialize_tdesc_s390x_linux64v2 ();
3329 }