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