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