OSDN Git Service

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