1 /* Target-dependent code for GDB, the GNU debugger.
3 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4 2011 Free Software Foundation, Inc.
6 Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
7 for IBM Deutschland Entwicklung GmbH, IBM Corporation.
9 This file is part of GDB.
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3 of the License, or
14 (at your option) any later version.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program. If not, see <http://www.gnu.org/licenses/>. */
25 #include "arch-utils.h"
33 #include "floatformat.h"
35 #include "trad-frame.h"
36 #include "frame-base.h"
37 #include "frame-unwind.h"
38 #include "dwarf2-frame.h"
39 #include "reggroups.h"
42 #include "gdb_assert.h"
44 #include "solib-svr4.h"
45 #include "prologue-value.h"
46 #include "linux-tdep.h"
47 #include "s390-tdep.h"
49 #include "features/s390-linux32.c"
50 #include "features/s390-linux32v1.c"
51 #include "features/s390-linux32v2.c"
52 #include "features/s390-linux64.c"
53 #include "features/s390-linux64v1.c"
54 #include "features/s390-linux64v2.c"
55 #include "features/s390x-linux64.c"
56 #include "features/s390x-linux64v1.c"
57 #include "features/s390x-linux64v2.c"
60 /* The tdep structure. */
65 enum { ABI_LINUX_S390, ABI_LINUX_ZSERIES } abi;
67 /* Pseudo register numbers. */
72 /* Core file register sets. */
73 const struct regset *gregset;
76 const struct regset *fpregset;
81 /* ABI call-saved register information. */
84 s390_register_call_saved (struct gdbarch *gdbarch, int regnum)
86 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
91 if ((regnum >= S390_R6_REGNUM && regnum <= S390_R15_REGNUM)
92 || regnum == S390_F4_REGNUM || regnum == S390_F6_REGNUM
93 || regnum == S390_A0_REGNUM)
98 case ABI_LINUX_ZSERIES:
99 if ((regnum >= S390_R6_REGNUM && regnum <= S390_R15_REGNUM)
100 || (regnum >= S390_F8_REGNUM && regnum <= S390_F15_REGNUM)
101 || (regnum >= S390_A0_REGNUM && regnum <= S390_A1_REGNUM))
111 s390_cannot_store_register (struct gdbarch *gdbarch, int regnum)
113 /* The last-break address is read-only. */
114 return regnum == S390_LAST_BREAK_REGNUM;
118 s390_write_pc (struct regcache *regcache, CORE_ADDR pc)
120 struct gdbarch *gdbarch = get_regcache_arch (regcache);
121 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
123 regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
125 /* Set special SYSTEM_CALL register to 0 to prevent the kernel from
126 messing with the PC we just installed, if we happen to be within
127 an interrupted system call that the kernel wants to restart.
129 Note that after we return from the dummy call, the SYSTEM_CALL and
130 ORIG_R2 registers will be automatically restored, and the kernel
131 continues to restart the system call at this point. */
132 if (register_size (gdbarch, S390_SYSTEM_CALL_REGNUM) > 0)
133 regcache_cooked_write_unsigned (regcache, S390_SYSTEM_CALL_REGNUM, 0);
137 /* DWARF Register Mapping. */
139 static int s390_dwarf_regmap[] =
141 /* General Purpose Registers. */
142 S390_R0_REGNUM, S390_R1_REGNUM, S390_R2_REGNUM, S390_R3_REGNUM,
143 S390_R4_REGNUM, S390_R5_REGNUM, S390_R6_REGNUM, S390_R7_REGNUM,
144 S390_R8_REGNUM, S390_R9_REGNUM, S390_R10_REGNUM, S390_R11_REGNUM,
145 S390_R12_REGNUM, S390_R13_REGNUM, S390_R14_REGNUM, S390_R15_REGNUM,
147 /* Floating Point Registers. */
148 S390_F0_REGNUM, S390_F2_REGNUM, S390_F4_REGNUM, S390_F6_REGNUM,
149 S390_F1_REGNUM, S390_F3_REGNUM, S390_F5_REGNUM, S390_F7_REGNUM,
150 S390_F8_REGNUM, S390_F10_REGNUM, S390_F12_REGNUM, S390_F14_REGNUM,
151 S390_F9_REGNUM, S390_F11_REGNUM, S390_F13_REGNUM, S390_F15_REGNUM,
153 /* Control Registers (not mapped). */
154 -1, -1, -1, -1, -1, -1, -1, -1,
155 -1, -1, -1, -1, -1, -1, -1, -1,
157 /* Access Registers. */
158 S390_A0_REGNUM, S390_A1_REGNUM, S390_A2_REGNUM, S390_A3_REGNUM,
159 S390_A4_REGNUM, S390_A5_REGNUM, S390_A6_REGNUM, S390_A7_REGNUM,
160 S390_A8_REGNUM, S390_A9_REGNUM, S390_A10_REGNUM, S390_A11_REGNUM,
161 S390_A12_REGNUM, S390_A13_REGNUM, S390_A14_REGNUM, S390_A15_REGNUM,
163 /* Program Status Word. */
167 /* GPR Lower Half Access. */
168 S390_R0_REGNUM, S390_R1_REGNUM, S390_R2_REGNUM, S390_R3_REGNUM,
169 S390_R4_REGNUM, S390_R5_REGNUM, S390_R6_REGNUM, S390_R7_REGNUM,
170 S390_R8_REGNUM, S390_R9_REGNUM, S390_R10_REGNUM, S390_R11_REGNUM,
171 S390_R12_REGNUM, S390_R13_REGNUM, S390_R14_REGNUM, S390_R15_REGNUM,
173 /* GNU/Linux-specific registers (not mapped). */
177 /* Convert DWARF register number REG to the appropriate register
178 number used by GDB. */
180 s390_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
182 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
184 /* In a 32-on-64 debug scenario, debug info refers to the full 64-bit
185 GPRs. Note that call frame information still refers to the 32-bit
186 lower halves, because s390_adjust_frame_regnum uses register numbers
187 66 .. 81 to access GPRs. */
188 if (tdep->gpr_full_regnum != -1 && reg >= 0 && reg < 16)
189 return tdep->gpr_full_regnum + reg;
191 if (reg >= 0 && reg < ARRAY_SIZE (s390_dwarf_regmap))
192 return s390_dwarf_regmap[reg];
194 warning (_("Unmapped DWARF Register #%d encountered."), reg);
198 /* Translate a .eh_frame register to DWARF register, or adjust a
199 .debug_frame register. */
201 s390_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
203 /* See s390_dwarf_reg_to_regnum for comments. */
204 return (num >= 0 && num < 16)? num + 66 : num;
208 /* Pseudo registers. */
211 s390_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
213 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
215 if (regnum == tdep->pc_regnum)
218 if (regnum == tdep->cc_regnum)
221 if (tdep->gpr_full_regnum != -1
222 && regnum >= tdep->gpr_full_regnum
223 && regnum < tdep->gpr_full_regnum + 16)
225 static const char *full_name[] = {
226 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
227 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
229 return full_name[regnum - tdep->gpr_full_regnum];
232 internal_error (__FILE__, __LINE__, _("invalid regnum"));
236 s390_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
238 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
240 if (regnum == tdep->pc_regnum)
241 return builtin_type (gdbarch)->builtin_func_ptr;
243 if (regnum == tdep->cc_regnum)
244 return builtin_type (gdbarch)->builtin_int;
246 if (tdep->gpr_full_regnum != -1
247 && regnum >= tdep->gpr_full_regnum
248 && regnum < tdep->gpr_full_regnum + 16)
249 return builtin_type (gdbarch)->builtin_uint64;
251 internal_error (__FILE__, __LINE__, _("invalid regnum"));
254 static enum register_status
255 s390_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
256 int regnum, gdb_byte *buf)
258 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
259 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
260 int regsize = register_size (gdbarch, regnum);
263 if (regnum == tdep->pc_regnum)
265 enum register_status status;
267 status = regcache_raw_read_unsigned (regcache, S390_PSWA_REGNUM, &val);
268 if (status == REG_VALID)
270 if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
272 store_unsigned_integer (buf, regsize, byte_order, val);
277 if (regnum == tdep->cc_regnum)
279 enum register_status status;
281 status = regcache_raw_read_unsigned (regcache, S390_PSWM_REGNUM, &val);
282 if (status == REG_VALID)
284 if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
285 val = (val >> 12) & 3;
287 val = (val >> 44) & 3;
288 store_unsigned_integer (buf, regsize, byte_order, val);
293 if (tdep->gpr_full_regnum != -1
294 && regnum >= tdep->gpr_full_regnum
295 && regnum < tdep->gpr_full_regnum + 16)
297 enum register_status status;
300 regnum -= tdep->gpr_full_regnum;
302 status = regcache_raw_read_unsigned (regcache, S390_R0_REGNUM + regnum, &val);
303 if (status == REG_VALID)
304 status = regcache_raw_read_unsigned (regcache, S390_R0_UPPER_REGNUM + regnum,
306 if (status == REG_VALID)
308 val |= val_upper << 32;
309 store_unsigned_integer (buf, regsize, byte_order, val);
314 internal_error (__FILE__, __LINE__, _("invalid regnum"));
318 s390_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
319 int regnum, const gdb_byte *buf)
321 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
322 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
323 int regsize = register_size (gdbarch, regnum);
326 if (regnum == tdep->pc_regnum)
328 val = extract_unsigned_integer (buf, regsize, byte_order);
329 if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
331 regcache_raw_read_unsigned (regcache, S390_PSWA_REGNUM, &psw);
332 val = (psw & 0x80000000) | (val & 0x7fffffff);
334 regcache_raw_write_unsigned (regcache, S390_PSWA_REGNUM, val);
338 if (regnum == tdep->cc_regnum)
340 val = extract_unsigned_integer (buf, regsize, byte_order);
341 regcache_raw_read_unsigned (regcache, S390_PSWM_REGNUM, &psw);
342 if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
343 val = (psw & ~((ULONGEST)3 << 12)) | ((val & 3) << 12);
345 val = (psw & ~((ULONGEST)3 << 44)) | ((val & 3) << 44);
346 regcache_raw_write_unsigned (regcache, S390_PSWM_REGNUM, val);
350 if (tdep->gpr_full_regnum != -1
351 && regnum >= tdep->gpr_full_regnum
352 && regnum < tdep->gpr_full_regnum + 16)
354 regnum -= tdep->gpr_full_regnum;
355 val = extract_unsigned_integer (buf, regsize, byte_order);
356 regcache_raw_write_unsigned (regcache, S390_R0_REGNUM + regnum,
358 regcache_raw_write_unsigned (regcache, S390_R0_UPPER_REGNUM + regnum,
363 internal_error (__FILE__, __LINE__, _("invalid regnum"));
366 /* 'float' values are stored in the upper half of floating-point
367 registers, even though we are otherwise a big-endian platform. */
369 static struct value *
370 s390_value_from_register (struct type *type, int regnum,
371 struct frame_info *frame)
373 struct value *value = default_value_from_register (type, regnum, frame);
374 int len = TYPE_LENGTH (check_typedef (type));
376 if (regnum >= S390_F0_REGNUM && regnum <= S390_F15_REGNUM && len < 8)
377 set_value_offset (value, 0);
382 /* Register groups. */
385 s390_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
386 struct reggroup *group)
388 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
390 /* We usually save/restore the whole PSW, which includes PC and CC.
391 However, some older gdbservers may not support saving/restoring
392 the whole PSW yet, and will return an XML register description
393 excluding those from the save/restore register groups. In those
394 cases, we still need to explicitly save/restore PC and CC in order
395 to push or pop frames. Since this doesn't hurt anything if we
396 already save/restore the whole PSW (it's just redundant), we add
397 PC and CC at this point unconditionally. */
398 if (group == save_reggroup || group == restore_reggroup)
399 return regnum == tdep->pc_regnum || regnum == tdep->cc_regnum;
401 return default_register_reggroup_p (gdbarch, regnum, group);
405 /* Core file register sets. */
407 int s390_regmap_gregset[S390_NUM_REGS] =
409 /* Program Status Word. */
411 /* General Purpose Registers. */
412 0x08, 0x0c, 0x10, 0x14,
413 0x18, 0x1c, 0x20, 0x24,
414 0x28, 0x2c, 0x30, 0x34,
415 0x38, 0x3c, 0x40, 0x44,
416 /* Access Registers. */
417 0x48, 0x4c, 0x50, 0x54,
418 0x58, 0x5c, 0x60, 0x64,
419 0x68, 0x6c, 0x70, 0x74,
420 0x78, 0x7c, 0x80, 0x84,
421 /* Floating Point Control Word. */
423 /* Floating Point Registers. */
424 -1, -1, -1, -1, -1, -1, -1, -1,
425 -1, -1, -1, -1, -1, -1, -1, -1,
426 /* GPR Uppper Halves. */
427 -1, -1, -1, -1, -1, -1, -1, -1,
428 -1, -1, -1, -1, -1, -1, -1, -1,
429 /* GNU/Linux-specific optional "registers". */
433 int s390x_regmap_gregset[S390_NUM_REGS] =
435 /* Program Status Word. */
437 /* General Purpose Registers. */
438 0x10, 0x18, 0x20, 0x28,
439 0x30, 0x38, 0x40, 0x48,
440 0x50, 0x58, 0x60, 0x68,
441 0x70, 0x78, 0x80, 0x88,
442 /* Access Registers. */
443 0x90, 0x94, 0x98, 0x9c,
444 0xa0, 0xa4, 0xa8, 0xac,
445 0xb0, 0xb4, 0xb8, 0xbc,
446 0xc0, 0xc4, 0xc8, 0xcc,
447 /* Floating Point Control Word. */
449 /* Floating Point Registers. */
450 -1, -1, -1, -1, -1, -1, -1, -1,
451 -1, -1, -1, -1, -1, -1, -1, -1,
452 /* GPR Uppper Halves. */
453 0x10, 0x18, 0x20, 0x28,
454 0x30, 0x38, 0x40, 0x48,
455 0x50, 0x58, 0x60, 0x68,
456 0x70, 0x78, 0x80, 0x88,
457 /* GNU/Linux-specific optional "registers". */
461 int s390_regmap_fpregset[S390_NUM_REGS] =
463 /* Program Status Word. */
465 /* General Purpose Registers. */
466 -1, -1, -1, -1, -1, -1, -1, -1,
467 -1, -1, -1, -1, -1, -1, -1, -1,
468 /* Access Registers. */
469 -1, -1, -1, -1, -1, -1, -1, -1,
470 -1, -1, -1, -1, -1, -1, -1, -1,
471 /* Floating Point Control Word. */
473 /* Floating Point Registers. */
474 0x08, 0x10, 0x18, 0x20,
475 0x28, 0x30, 0x38, 0x40,
476 0x48, 0x50, 0x58, 0x60,
477 0x68, 0x70, 0x78, 0x80,
478 /* GPR Uppper Halves. */
479 -1, -1, -1, -1, -1, -1, -1, -1,
480 -1, -1, -1, -1, -1, -1, -1, -1,
481 /* GNU/Linux-specific optional "registers". */
485 int s390_regmap_upper[S390_NUM_REGS] =
487 /* Program Status Word. */
489 /* General Purpose Registers. */
490 -1, -1, -1, -1, -1, -1, -1, -1,
491 -1, -1, -1, -1, -1, -1, -1, -1,
492 /* Access Registers. */
493 -1, -1, -1, -1, -1, -1, -1, -1,
494 -1, -1, -1, -1, -1, -1, -1, -1,
495 /* Floating Point Control Word. */
497 /* Floating Point Registers. */
498 -1, -1, -1, -1, -1, -1, -1, -1,
499 -1, -1, -1, -1, -1, -1, -1, -1,
500 /* GPR Uppper Halves. */
501 0x00, 0x04, 0x08, 0x0c,
502 0x10, 0x14, 0x18, 0x1c,
503 0x20, 0x24, 0x28, 0x2c,
504 0x30, 0x34, 0x38, 0x3c,
505 /* GNU/Linux-specific optional "registers". */
509 int s390_regmap_last_break[S390_NUM_REGS] =
511 /* Program Status Word. */
513 /* General Purpose Registers. */
514 -1, -1, -1, -1, -1, -1, -1, -1,
515 -1, -1, -1, -1, -1, -1, -1, -1,
516 /* Access Registers. */
517 -1, -1, -1, -1, -1, -1, -1, -1,
518 -1, -1, -1, -1, -1, -1, -1, -1,
519 /* Floating Point Control Word. */
521 /* Floating Point Registers. */
522 -1, -1, -1, -1, -1, -1, -1, -1,
523 -1, -1, -1, -1, -1, -1, -1, -1,
524 /* GPR Uppper Halves. */
525 -1, -1, -1, -1, -1, -1, -1, -1,
526 -1, -1, -1, -1, -1, -1, -1, -1,
527 /* GNU/Linux-specific optional "registers". */
531 int s390x_regmap_last_break[S390_NUM_REGS] =
533 /* Program Status Word. */
535 /* General Purpose Registers. */
536 -1, -1, -1, -1, -1, -1, -1, -1,
537 -1, -1, -1, -1, -1, -1, -1, -1,
538 /* Access Registers. */
539 -1, -1, -1, -1, -1, -1, -1, -1,
540 -1, -1, -1, -1, -1, -1, -1, -1,
541 /* Floating Point Control Word. */
543 /* Floating Point Registers. */
544 -1, -1, -1, -1, -1, -1, -1, -1,
545 -1, -1, -1, -1, -1, -1, -1, -1,
546 /* GPR Uppper Halves. */
547 -1, -1, -1, -1, -1, -1, -1, -1,
548 -1, -1, -1, -1, -1, -1, -1, -1,
549 /* GNU/Linux-specific optional "registers". */
553 int s390_regmap_system_call[S390_NUM_REGS] =
555 /* Program Status Word. */
557 /* General Purpose Registers. */
558 -1, -1, -1, -1, -1, -1, -1, -1,
559 -1, -1, -1, -1, -1, -1, -1, -1,
560 /* Access Registers. */
561 -1, -1, -1, -1, -1, -1, -1, -1,
562 -1, -1, -1, -1, -1, -1, -1, -1,
563 /* Floating Point Control Word. */
565 /* Floating Point Registers. */
566 -1, -1, -1, -1, -1, -1, -1, -1,
567 -1, -1, -1, -1, -1, -1, -1, -1,
568 /* GPR Uppper Halves. */
569 -1, -1, -1, -1, -1, -1, -1, -1,
570 -1, -1, -1, -1, -1, -1, -1, -1,
571 /* GNU/Linux-specific optional "registers". */
575 /* Supply register REGNUM from the register set REGSET to register cache
576 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
578 s390_supply_regset (const struct regset *regset, struct regcache *regcache,
579 int regnum, const void *regs, size_t len)
581 const int *offset = regset->descr;
584 for (i = 0; i < S390_NUM_REGS; i++)
586 if ((regnum == i || regnum == -1) && offset[i] != -1)
587 regcache_raw_supply (regcache, i, (const char *)regs + offset[i]);
591 /* Collect register REGNUM from the register cache REGCACHE and store
592 it in the buffer specified by REGS and LEN as described by the
593 general-purpose register set REGSET. If REGNUM is -1, do this for
594 all registers in REGSET. */
596 s390_collect_regset (const struct regset *regset,
597 const struct regcache *regcache,
598 int regnum, void *regs, size_t len)
600 const int *offset = regset->descr;
603 for (i = 0; i < S390_NUM_REGS; i++)
605 if ((regnum == i || regnum == -1) && offset[i] != -1)
606 regcache_raw_collect (regcache, i, (char *)regs + offset[i]);
610 static const struct regset s390_gregset = {
616 static const struct regset s390x_gregset = {
617 s390x_regmap_gregset,
622 static const struct regset s390_fpregset = {
623 s390_regmap_fpregset,
628 static const struct regset s390_upper_regset = {
634 static const struct regset s390_last_break_regset = {
635 s390_regmap_last_break,
640 static const struct regset s390x_last_break_regset = {
641 s390x_regmap_last_break,
646 static const struct regset s390_system_call_regset = {
647 s390_regmap_system_call,
652 static struct core_regset_section s390_linux32_regset_sections[] =
654 { ".reg", s390_sizeof_gregset, "general-purpose" },
655 { ".reg2", s390_sizeof_fpregset, "floating-point" },
659 static struct core_regset_section s390_linux32v1_regset_sections[] =
661 { ".reg", s390_sizeof_gregset, "general-purpose" },
662 { ".reg2", s390_sizeof_fpregset, "floating-point" },
663 { ".reg-s390-last-break", 8, "s390 last-break address" },
667 static struct core_regset_section s390_linux32v2_regset_sections[] =
669 { ".reg", s390_sizeof_gregset, "general-purpose" },
670 { ".reg2", s390_sizeof_fpregset, "floating-point" },
671 { ".reg-s390-last-break", 8, "s390 last-break address" },
672 { ".reg-s390-system-call", 4, "s390 system-call" },
676 static struct core_regset_section s390_linux64_regset_sections[] =
678 { ".reg", s390_sizeof_gregset, "general-purpose" },
679 { ".reg2", s390_sizeof_fpregset, "floating-point" },
680 { ".reg-s390-high-gprs", 16*4, "s390 GPR upper halves" },
684 static struct core_regset_section s390_linux64v1_regset_sections[] =
686 { ".reg", s390_sizeof_gregset, "general-purpose" },
687 { ".reg2", s390_sizeof_fpregset, "floating-point" },
688 { ".reg-s390-high-gprs", 16*4, "s390 GPR upper halves" },
689 { ".reg-s390-last-break", 8, "s930 last-break address" },
693 static struct core_regset_section s390_linux64v2_regset_sections[] =
695 { ".reg", s390_sizeof_gregset, "general-purpose" },
696 { ".reg2", s390_sizeof_fpregset, "floating-point" },
697 { ".reg-s390-high-gprs", 16*4, "s390 GPR upper halves" },
698 { ".reg-s390-last-break", 8, "s930 last-break address" },
699 { ".reg-s390-system-call", 4, "s390 system-call" },
703 static struct core_regset_section s390x_linux64_regset_sections[] =
705 { ".reg", s390x_sizeof_gregset, "general-purpose" },
706 { ".reg2", s390_sizeof_fpregset, "floating-point" },
710 static struct core_regset_section s390x_linux64v1_regset_sections[] =
712 { ".reg", s390x_sizeof_gregset, "general-purpose" },
713 { ".reg2", s390_sizeof_fpregset, "floating-point" },
714 { ".reg-s390-last-break", 8, "s930 last-break address" },
718 static struct core_regset_section s390x_linux64v2_regset_sections[] =
720 { ".reg", s390x_sizeof_gregset, "general-purpose" },
721 { ".reg2", s390_sizeof_fpregset, "floating-point" },
722 { ".reg-s390-last-break", 8, "s930 last-break address" },
723 { ".reg-s390-system-call", 4, "s390 system-call" },
728 /* Return the appropriate register set for the core section identified
729 by SECT_NAME and SECT_SIZE. */
730 static const struct regset *
731 s390_regset_from_core_section (struct gdbarch *gdbarch,
732 const char *sect_name, size_t sect_size)
734 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
736 if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset)
737 return tdep->gregset;
739 if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset)
740 return tdep->fpregset;
742 if (strcmp (sect_name, ".reg-s390-high-gprs") == 0 && sect_size >= 16*4)
743 return &s390_upper_regset;
745 if (strcmp (sect_name, ".reg-s390-last-break") == 0 && sect_size >= 8)
746 return (gdbarch_ptr_bit (gdbarch) == 32
747 ? &s390_last_break_regset : &s390x_last_break_regset);
749 if (strcmp (sect_name, ".reg-s390-system-call") == 0 && sect_size >= 4)
750 return &s390_system_call_regset;
755 static const struct target_desc *
756 s390_core_read_description (struct gdbarch *gdbarch,
757 struct target_ops *target, bfd *abfd)
759 asection *high_gprs = bfd_get_section_by_name (abfd, ".reg-s390-high-gprs");
760 asection *v1 = bfd_get_section_by_name (abfd, ".reg-s390-last-break");
761 asection *v2 = bfd_get_section_by_name (abfd, ".reg-s390-system-call");
762 asection *section = bfd_get_section_by_name (abfd, ".reg");
766 switch (bfd_section_size (abfd, section))
768 case s390_sizeof_gregset:
770 return (v2? tdesc_s390_linux64v2 :
771 v1? tdesc_s390_linux64v1 : tdesc_s390_linux64);
773 return (v2? tdesc_s390_linux32v2 :
774 v1? tdesc_s390_linux32v1 : tdesc_s390_linux32);
776 case s390x_sizeof_gregset:
777 return (v2? tdesc_s390x_linux64v2 :
778 v1? tdesc_s390x_linux64v1 : tdesc_s390x_linux64);
786 /* Decoding S/390 instructions. */
788 /* Named opcode values for the S/390 instructions we recognize. Some
789 instructions have their opcode split across two fields; those are the
790 op1_* and op2_* enums. */
793 op1_lhi = 0xa7, op2_lhi = 0x08,
794 op1_lghi = 0xa7, op2_lghi = 0x09,
795 op1_lgfi = 0xc0, op2_lgfi = 0x01,
799 op1_ly = 0xe3, op2_ly = 0x58,
800 op1_lg = 0xe3, op2_lg = 0x04,
802 op1_lmy = 0xeb, op2_lmy = 0x98,
803 op1_lmg = 0xeb, op2_lmg = 0x04,
805 op1_sty = 0xe3, op2_sty = 0x50,
806 op1_stg = 0xe3, op2_stg = 0x24,
809 op1_stmy = 0xeb, op2_stmy = 0x90,
810 op1_stmg = 0xeb, op2_stmg = 0x24,
811 op1_aghi = 0xa7, op2_aghi = 0x0b,
812 op1_ahi = 0xa7, op2_ahi = 0x0a,
813 op1_agfi = 0xc2, op2_agfi = 0x08,
814 op1_afi = 0xc2, op2_afi = 0x09,
815 op1_algfi= 0xc2, op2_algfi= 0x0a,
816 op1_alfi = 0xc2, op2_alfi = 0x0b,
820 op1_ay = 0xe3, op2_ay = 0x5a,
821 op1_ag = 0xe3, op2_ag = 0x08,
822 op1_slgfi= 0xc2, op2_slgfi= 0x04,
823 op1_slfi = 0xc2, op2_slfi = 0x05,
827 op1_sy = 0xe3, op2_sy = 0x5b,
828 op1_sg = 0xe3, op2_sg = 0x09,
832 op1_lay = 0xe3, op2_lay = 0x71,
833 op1_larl = 0xc0, op2_larl = 0x00,
841 op1_bctg = 0xe3, op2_bctg = 0x46,
843 op1_bxhg = 0xeb, op2_bxhg = 0x44,
845 op1_bxleg= 0xeb, op2_bxleg= 0x45,
846 op1_bras = 0xa7, op2_bras = 0x05,
847 op1_brasl= 0xc0, op2_brasl= 0x05,
848 op1_brc = 0xa7, op2_brc = 0x04,
849 op1_brcl = 0xc0, op2_brcl = 0x04,
850 op1_brct = 0xa7, op2_brct = 0x06,
851 op1_brctg= 0xa7, op2_brctg= 0x07,
853 op1_brxhg= 0xec, op2_brxhg= 0x44,
855 op1_brxlg= 0xec, op2_brxlg= 0x45,
859 /* Read a single instruction from address AT. */
861 #define S390_MAX_INSTR_SIZE 6
863 s390_readinstruction (bfd_byte instr[], CORE_ADDR at)
865 static int s390_instrlen[] = { 2, 4, 4, 6 };
868 if (target_read_memory (at, &instr[0], 2))
870 instrlen = s390_instrlen[instr[0] >> 6];
873 if (target_read_memory (at + 2, &instr[2], instrlen - 2))
880 /* The functions below are for recognizing and decoding S/390
881 instructions of various formats. Each of them checks whether INSN
882 is an instruction of the given format, with the specified opcodes.
883 If it is, it sets the remaining arguments to the values of the
884 instruction's fields, and returns a non-zero value; otherwise, it
887 These functions' arguments appear in the order they appear in the
888 instruction, not in the machine-language form. So, opcodes always
889 come first, even though they're sometimes scattered around the
890 instructions. And displacements appear before base and extension
891 registers, as they do in the assembly syntax, not at the end, as
892 they do in the machine language. */
894 is_ri (bfd_byte *insn, int op1, int op2, unsigned int *r1, int *i2)
896 if (insn[0] == op1 && (insn[1] & 0xf) == op2)
898 *r1 = (insn[1] >> 4) & 0xf;
899 /* i2 is a 16-bit signed quantity. */
900 *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
909 is_ril (bfd_byte *insn, int op1, int op2,
910 unsigned int *r1, int *i2)
912 if (insn[0] == op1 && (insn[1] & 0xf) == op2)
914 *r1 = (insn[1] >> 4) & 0xf;
915 /* i2 is a signed quantity. If the host 'int' is 32 bits long,
916 no sign extension is necessary, but we don't want to assume
918 *i2 = (((insn[2] << 24)
921 | (insn[5])) ^ 0x80000000) - 0x80000000;
930 is_rr (bfd_byte *insn, int op, unsigned int *r1, unsigned int *r2)
934 *r1 = (insn[1] >> 4) & 0xf;
944 is_rre (bfd_byte *insn, int op, unsigned int *r1, unsigned int *r2)
946 if (((insn[0] << 8) | insn[1]) == op)
948 /* Yes, insn[3]. insn[2] is unused in RRE format. */
949 *r1 = (insn[3] >> 4) & 0xf;
959 is_rs (bfd_byte *insn, int op,
960 unsigned int *r1, unsigned int *r3, unsigned int *d2, unsigned int *b2)
964 *r1 = (insn[1] >> 4) & 0xf;
966 *b2 = (insn[2] >> 4) & 0xf;
967 *d2 = ((insn[2] & 0xf) << 8) | insn[3];
976 is_rsy (bfd_byte *insn, int op1, int op2,
977 unsigned int *r1, unsigned int *r3, unsigned int *d2, unsigned int *b2)
982 *r1 = (insn[1] >> 4) & 0xf;
984 *b2 = (insn[2] >> 4) & 0xf;
985 /* The 'long displacement' is a 20-bit signed integer. */
986 *d2 = ((((insn[2] & 0xf) << 8) | insn[3] | (insn[4] << 12))
987 ^ 0x80000) - 0x80000;
996 is_rsi (bfd_byte *insn, int op,
997 unsigned int *r1, unsigned int *r3, int *i2)
1001 *r1 = (insn[1] >> 4) & 0xf;
1002 *r3 = insn[1] & 0xf;
1003 /* i2 is a 16-bit signed quantity. */
1004 *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
1013 is_rie (bfd_byte *insn, int op1, int op2,
1014 unsigned int *r1, unsigned int *r3, int *i2)
1019 *r1 = (insn[1] >> 4) & 0xf;
1020 *r3 = insn[1] & 0xf;
1021 /* i2 is a 16-bit signed quantity. */
1022 *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
1031 is_rx (bfd_byte *insn, int op,
1032 unsigned int *r1, unsigned int *d2, unsigned int *x2, unsigned int *b2)
1036 *r1 = (insn[1] >> 4) & 0xf;
1037 *x2 = insn[1] & 0xf;
1038 *b2 = (insn[2] >> 4) & 0xf;
1039 *d2 = ((insn[2] & 0xf) << 8) | insn[3];
1048 is_rxy (bfd_byte *insn, int op1, int op2,
1049 unsigned int *r1, unsigned int *d2, unsigned int *x2, unsigned int *b2)
1054 *r1 = (insn[1] >> 4) & 0xf;
1055 *x2 = insn[1] & 0xf;
1056 *b2 = (insn[2] >> 4) & 0xf;
1057 /* The 'long displacement' is a 20-bit signed integer. */
1058 *d2 = ((((insn[2] & 0xf) << 8) | insn[3] | (insn[4] << 12))
1059 ^ 0x80000) - 0x80000;
1067 /* Prologue analysis. */
1069 #define S390_NUM_GPRS 16
1070 #define S390_NUM_FPRS 16
1072 struct s390_prologue_data {
1075 struct pv_area *stack;
1077 /* The size and byte-order of a GPR or FPR. */
1080 enum bfd_endian byte_order;
1082 /* The general-purpose registers. */
1083 pv_t gpr[S390_NUM_GPRS];
1085 /* The floating-point registers. */
1086 pv_t fpr[S390_NUM_FPRS];
1088 /* The offset relative to the CFA where the incoming GPR N was saved
1089 by the function prologue. 0 if not saved or unknown. */
1090 int gpr_slot[S390_NUM_GPRS];
1092 /* Likewise for FPRs. */
1093 int fpr_slot[S390_NUM_FPRS];
1095 /* Nonzero if the backchain was saved. This is assumed to be the
1096 case when the incoming SP is saved at the current SP location. */
1097 int back_chain_saved_p;
1100 /* Return the effective address for an X-style instruction, like:
1104 Here, X2 and B2 are registers, and D2 is a signed 20-bit
1105 constant; the effective address is the sum of all three. If either
1106 X2 or B2 are zero, then it doesn't contribute to the sum --- this
1107 means that r0 can't be used as either X2 or B2. */
1109 s390_addr (struct s390_prologue_data *data,
1110 int d2, unsigned int x2, unsigned int b2)
1114 result = pv_constant (d2);
1116 result = pv_add (result, data->gpr[x2]);
1118 result = pv_add (result, data->gpr[b2]);
1123 /* Do a SIZE-byte store of VALUE to D2(X2,B2). */
1125 s390_store (struct s390_prologue_data *data,
1126 int d2, unsigned int x2, unsigned int b2, CORE_ADDR size,
1129 pv_t addr = s390_addr (data, d2, x2, b2);
1132 /* Check whether we are storing the backchain. */
1133 offset = pv_subtract (data->gpr[S390_SP_REGNUM - S390_R0_REGNUM], addr);
1135 if (pv_is_constant (offset) && offset.k == 0)
1136 if (size == data->gpr_size
1137 && pv_is_register_k (value, S390_SP_REGNUM, 0))
1139 data->back_chain_saved_p = 1;
1144 /* Check whether we are storing a register into the stack. */
1145 if (!pv_area_store_would_trash (data->stack, addr))
1146 pv_area_store (data->stack, addr, size, value);
1149 /* Note: If this is some store we cannot identify, you might think we
1150 should forget our cached values, as any of those might have been hit.
1152 However, we make the assumption that the register save areas are only
1153 ever stored to once in any given function, and we do recognize these
1154 stores. Thus every store we cannot recognize does not hit our data. */
1157 /* Do a SIZE-byte load from D2(X2,B2). */
1159 s390_load (struct s390_prologue_data *data,
1160 int d2, unsigned int x2, unsigned int b2, CORE_ADDR size)
1163 pv_t addr = s390_addr (data, d2, x2, b2);
1166 /* If it's a load from an in-line constant pool, then we can
1167 simulate that, under the assumption that the code isn't
1168 going to change between the time the processor actually
1169 executed it creating the current frame, and the time when
1170 we're analyzing the code to unwind past that frame. */
1171 if (pv_is_constant (addr))
1173 struct target_section *secp;
1174 secp = target_section_by_addr (¤t_target, addr.k);
1176 && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
1178 return pv_constant (read_memory_integer (addr.k, size,
1182 /* Check whether we are accessing one of our save slots. */
1183 return pv_area_fetch (data->stack, addr, size);
1186 /* Function for finding saved registers in a 'struct pv_area'; we pass
1187 this to pv_area_scan.
1189 If VALUE is a saved register, ADDR says it was saved at a constant
1190 offset from the frame base, and SIZE indicates that the whole
1191 register was saved, record its offset in the reg_offset table in
1192 PROLOGUE_UNTYPED. */
1194 s390_check_for_saved (void *data_untyped, pv_t addr,
1195 CORE_ADDR size, pv_t value)
1197 struct s390_prologue_data *data = data_untyped;
1200 if (!pv_is_register (addr, S390_SP_REGNUM))
1203 offset = 16 * data->gpr_size + 32 - addr.k;
1205 /* If we are storing the original value of a register, we want to
1206 record the CFA offset. If the same register is stored multiple
1207 times, the stack slot with the highest address counts. */
1209 for (i = 0; i < S390_NUM_GPRS; i++)
1210 if (size == data->gpr_size
1211 && pv_is_register_k (value, S390_R0_REGNUM + i, 0))
1212 if (data->gpr_slot[i] == 0
1213 || data->gpr_slot[i] > offset)
1215 data->gpr_slot[i] = offset;
1219 for (i = 0; i < S390_NUM_FPRS; i++)
1220 if (size == data->fpr_size
1221 && pv_is_register_k (value, S390_F0_REGNUM + i, 0))
1222 if (data->fpr_slot[i] == 0
1223 || data->fpr_slot[i] > offset)
1225 data->fpr_slot[i] = offset;
1230 /* Analyze the prologue of the function starting at START_PC,
1231 continuing at most until CURRENT_PC. Initialize DATA to
1232 hold all information we find out about the state of the registers
1233 and stack slots. Return the address of the instruction after
1234 the last one that changed the SP, FP, or back chain; or zero
1237 s390_analyze_prologue (struct gdbarch *gdbarch,
1239 CORE_ADDR current_pc,
1240 struct s390_prologue_data *data)
1242 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1244 /* Our return value:
1245 The address of the instruction after the last one that changed
1246 the SP, FP, or back chain; zero if we got an error trying to
1248 CORE_ADDR result = start_pc;
1250 /* The current PC for our abstract interpretation. */
1253 /* The address of the next instruction after that. */
1256 /* Set up everything's initial value. */
1260 data->stack = make_pv_area (S390_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1262 /* For the purpose of prologue tracking, we consider the GPR size to
1263 be equal to the ABI word size, even if it is actually larger
1264 (i.e. when running a 32-bit binary under a 64-bit kernel). */
1265 data->gpr_size = word_size;
1267 data->byte_order = gdbarch_byte_order (gdbarch);
1269 for (i = 0; i < S390_NUM_GPRS; i++)
1270 data->gpr[i] = pv_register (S390_R0_REGNUM + i, 0);
1272 for (i = 0; i < S390_NUM_FPRS; i++)
1273 data->fpr[i] = pv_register (S390_F0_REGNUM + i, 0);
1275 for (i = 0; i < S390_NUM_GPRS; i++)
1276 data->gpr_slot[i] = 0;
1278 for (i = 0; i < S390_NUM_FPRS; i++)
1279 data->fpr_slot[i] = 0;
1281 data->back_chain_saved_p = 0;
1284 /* Start interpreting instructions, until we hit the frame's
1285 current PC or the first branch instruction. */
1286 for (pc = start_pc; pc > 0 && pc < current_pc; pc = next_pc)
1288 bfd_byte insn[S390_MAX_INSTR_SIZE];
1289 int insn_len = s390_readinstruction (insn, pc);
1291 bfd_byte dummy[S390_MAX_INSTR_SIZE] = { 0 };
1292 bfd_byte *insn32 = word_size == 4 ? insn : dummy;
1293 bfd_byte *insn64 = word_size == 8 ? insn : dummy;
1295 /* Fields for various kinds of instructions. */
1296 unsigned int b2, r1, r2, x2, r3;
1299 /* The values of SP and FP before this instruction,
1300 for detecting instructions that change them. */
1301 pv_t pre_insn_sp, pre_insn_fp;
1302 /* Likewise for the flag whether the back chain was saved. */
1303 int pre_insn_back_chain_saved_p;
1305 /* If we got an error trying to read the instruction, report it. */
1312 next_pc = pc + insn_len;
1314 pre_insn_sp = data->gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1315 pre_insn_fp = data->gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1316 pre_insn_back_chain_saved_p = data->back_chain_saved_p;
1319 /* LHI r1, i2 --- load halfword immediate. */
1320 /* LGHI r1, i2 --- load halfword immediate (64-bit version). */
1321 /* LGFI r1, i2 --- load fullword immediate. */
1322 if (is_ri (insn32, op1_lhi, op2_lhi, &r1, &i2)
1323 || is_ri (insn64, op1_lghi, op2_lghi, &r1, &i2)
1324 || is_ril (insn, op1_lgfi, op2_lgfi, &r1, &i2))
1325 data->gpr[r1] = pv_constant (i2);
1327 /* LR r1, r2 --- load from register. */
1328 /* LGR r1, r2 --- load from register (64-bit version). */
1329 else if (is_rr (insn32, op_lr, &r1, &r2)
1330 || is_rre (insn64, op_lgr, &r1, &r2))
1331 data->gpr[r1] = data->gpr[r2];
1333 /* L r1, d2(x2, b2) --- load. */
1334 /* LY r1, d2(x2, b2) --- load (long-displacement version). */
1335 /* LG r1, d2(x2, b2) --- load (64-bit version). */
1336 else if (is_rx (insn32, op_l, &r1, &d2, &x2, &b2)
1337 || is_rxy (insn32, op1_ly, op2_ly, &r1, &d2, &x2, &b2)
1338 || is_rxy (insn64, op1_lg, op2_lg, &r1, &d2, &x2, &b2))
1339 data->gpr[r1] = s390_load (data, d2, x2, b2, data->gpr_size);
1341 /* ST r1, d2(x2, b2) --- store. */
1342 /* STY r1, d2(x2, b2) --- store (long-displacement version). */
1343 /* STG r1, d2(x2, b2) --- store (64-bit version). */
1344 else if (is_rx (insn32, op_st, &r1, &d2, &x2, &b2)
1345 || is_rxy (insn32, op1_sty, op2_sty, &r1, &d2, &x2, &b2)
1346 || is_rxy (insn64, op1_stg, op2_stg, &r1, &d2, &x2, &b2))
1347 s390_store (data, d2, x2, b2, data->gpr_size, data->gpr[r1]);
1349 /* STD r1, d2(x2,b2) --- store floating-point register. */
1350 else if (is_rx (insn, op_std, &r1, &d2, &x2, &b2))
1351 s390_store (data, d2, x2, b2, data->fpr_size, data->fpr[r1]);
1353 /* STM r1, r3, d2(b2) --- store multiple. */
1354 /* STMY r1, r3, d2(b2) --- store multiple (long-displacement
1356 /* STMG r1, r3, d2(b2) --- store multiple (64-bit version). */
1357 else if (is_rs (insn32, op_stm, &r1, &r3, &d2, &b2)
1358 || is_rsy (insn32, op1_stmy, op2_stmy, &r1, &r3, &d2, &b2)
1359 || is_rsy (insn64, op1_stmg, op2_stmg, &r1, &r3, &d2, &b2))
1361 for (; r1 <= r3; r1++, d2 += data->gpr_size)
1362 s390_store (data, d2, 0, b2, data->gpr_size, data->gpr[r1]);
1365 /* AHI r1, i2 --- add halfword immediate. */
1366 /* AGHI r1, i2 --- add halfword immediate (64-bit version). */
1367 /* AFI r1, i2 --- add fullword immediate. */
1368 /* AGFI r1, i2 --- add fullword immediate (64-bit version). */
1369 else if (is_ri (insn32, op1_ahi, op2_ahi, &r1, &i2)
1370 || is_ri (insn64, op1_aghi, op2_aghi, &r1, &i2)
1371 || is_ril (insn32, op1_afi, op2_afi, &r1, &i2)
1372 || is_ril (insn64, op1_agfi, op2_agfi, &r1, &i2))
1373 data->gpr[r1] = pv_add_constant (data->gpr[r1], i2);
1375 /* ALFI r1, i2 --- add logical immediate. */
1376 /* ALGFI r1, i2 --- add logical immediate (64-bit version). */
1377 else if (is_ril (insn32, op1_alfi, op2_alfi, &r1, &i2)
1378 || is_ril (insn64, op1_algfi, op2_algfi, &r1, &i2))
1379 data->gpr[r1] = pv_add_constant (data->gpr[r1],
1380 (CORE_ADDR)i2 & 0xffffffff);
1382 /* AR r1, r2 -- add register. */
1383 /* AGR r1, r2 -- add register (64-bit version). */
1384 else if (is_rr (insn32, op_ar, &r1, &r2)
1385 || is_rre (insn64, op_agr, &r1, &r2))
1386 data->gpr[r1] = pv_add (data->gpr[r1], data->gpr[r2]);
1388 /* A r1, d2(x2, b2) -- add. */
1389 /* AY r1, d2(x2, b2) -- add (long-displacement version). */
1390 /* AG r1, d2(x2, b2) -- add (64-bit version). */
1391 else if (is_rx (insn32, op_a, &r1, &d2, &x2, &b2)
1392 || is_rxy (insn32, op1_ay, op2_ay, &r1, &d2, &x2, &b2)
1393 || is_rxy (insn64, op1_ag, op2_ag, &r1, &d2, &x2, &b2))
1394 data->gpr[r1] = pv_add (data->gpr[r1],
1395 s390_load (data, d2, x2, b2, data->gpr_size));
1397 /* SLFI r1, i2 --- subtract logical immediate. */
1398 /* SLGFI r1, i2 --- subtract logical immediate (64-bit version). */
1399 else if (is_ril (insn32, op1_slfi, op2_slfi, &r1, &i2)
1400 || is_ril (insn64, op1_slgfi, op2_slgfi, &r1, &i2))
1401 data->gpr[r1] = pv_add_constant (data->gpr[r1],
1402 -((CORE_ADDR)i2 & 0xffffffff));
1404 /* SR r1, r2 -- subtract register. */
1405 /* SGR r1, r2 -- subtract register (64-bit version). */
1406 else if (is_rr (insn32, op_sr, &r1, &r2)
1407 || is_rre (insn64, op_sgr, &r1, &r2))
1408 data->gpr[r1] = pv_subtract (data->gpr[r1], data->gpr[r2]);
1410 /* S r1, d2(x2, b2) -- subtract. */
1411 /* SY r1, d2(x2, b2) -- subtract (long-displacement version). */
1412 /* SG r1, d2(x2, b2) -- subtract (64-bit version). */
1413 else if (is_rx (insn32, op_s, &r1, &d2, &x2, &b2)
1414 || is_rxy (insn32, op1_sy, op2_sy, &r1, &d2, &x2, &b2)
1415 || is_rxy (insn64, op1_sg, op2_sg, &r1, &d2, &x2, &b2))
1416 data->gpr[r1] = pv_subtract (data->gpr[r1],
1417 s390_load (data, d2, x2, b2, data->gpr_size));
1419 /* LA r1, d2(x2, b2) --- load address. */
1420 /* LAY r1, d2(x2, b2) --- load address (long-displacement version). */
1421 else if (is_rx (insn, op_la, &r1, &d2, &x2, &b2)
1422 || is_rxy (insn, op1_lay, op2_lay, &r1, &d2, &x2, &b2))
1423 data->gpr[r1] = s390_addr (data, d2, x2, b2);
1425 /* LARL r1, i2 --- load address relative long. */
1426 else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2))
1427 data->gpr[r1] = pv_constant (pc + i2 * 2);
1429 /* BASR r1, 0 --- branch and save.
1430 Since r2 is zero, this saves the PC in r1, but doesn't branch. */
1431 else if (is_rr (insn, op_basr, &r1, &r2)
1433 data->gpr[r1] = pv_constant (next_pc);
1435 /* BRAS r1, i2 --- branch relative and save. */
1436 else if (is_ri (insn, op1_bras, op2_bras, &r1, &i2))
1438 data->gpr[r1] = pv_constant (next_pc);
1439 next_pc = pc + i2 * 2;
1441 /* We'd better not interpret any backward branches. We'll
1447 /* Terminate search when hitting any other branch instruction. */
1448 else if (is_rr (insn, op_basr, &r1, &r2)
1449 || is_rx (insn, op_bas, &r1, &d2, &x2, &b2)
1450 || is_rr (insn, op_bcr, &r1, &r2)
1451 || is_rx (insn, op_bc, &r1, &d2, &x2, &b2)
1452 || is_ri (insn, op1_brc, op2_brc, &r1, &i2)
1453 || is_ril (insn, op1_brcl, op2_brcl, &r1, &i2)
1454 || is_ril (insn, op1_brasl, op2_brasl, &r2, &i2))
1458 /* An instruction we don't know how to simulate. The only
1459 safe thing to do would be to set every value we're tracking
1460 to 'unknown'. Instead, we'll be optimistic: we assume that
1461 we *can* interpret every instruction that the compiler uses
1462 to manipulate any of the data we're interested in here --
1463 then we can just ignore anything else. */
1466 /* Record the address after the last instruction that changed
1467 the FP, SP, or backlink. Ignore instructions that changed
1468 them back to their original values --- those are probably
1469 restore instructions. (The back chain is never restored,
1472 pv_t sp = data->gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1473 pv_t fp = data->gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1475 if ((! pv_is_identical (pre_insn_sp, sp)
1476 && ! pv_is_register_k (sp, S390_SP_REGNUM, 0)
1477 && sp.kind != pvk_unknown)
1478 || (! pv_is_identical (pre_insn_fp, fp)
1479 && ! pv_is_register_k (fp, S390_FRAME_REGNUM, 0)
1480 && fp.kind != pvk_unknown)
1481 || pre_insn_back_chain_saved_p != data->back_chain_saved_p)
1486 /* Record where all the registers were saved. */
1487 pv_area_scan (data->stack, s390_check_for_saved, data);
1489 free_pv_area (data->stack);
1495 /* Advance PC across any function entry prologue instructions to reach
1496 some "real" code. */
1498 s390_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1500 struct s390_prologue_data data;
1502 skip_pc = s390_analyze_prologue (gdbarch, pc, (CORE_ADDR)-1, &data);
1503 return skip_pc ? skip_pc : pc;
1506 /* Return true if we are in the functin's epilogue, i.e. after the
1507 instruction that destroyed the function's stack frame. */
1509 s390_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1511 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1513 /* In frameless functions, there's not frame to destroy and thus
1514 we don't care about the epilogue.
1516 In functions with frame, the epilogue sequence is a pair of
1517 a LM-type instruction that restores (amongst others) the
1518 return register %r14 and the stack pointer %r15, followed
1519 by a branch 'br %r14' --or equivalent-- that effects the
1522 In that situation, this function needs to return 'true' in
1523 exactly one case: when pc points to that branch instruction.
1525 Thus we try to disassemble the one instructions immediately
1526 preceding pc and check whether it is an LM-type instruction
1527 modifying the stack pointer.
1529 Note that disassembling backwards is not reliable, so there
1530 is a slight chance of false positives here ... */
1533 unsigned int r1, r3, b2;
1537 && !target_read_memory (pc - 4, insn, 4)
1538 && is_rs (insn, op_lm, &r1, &r3, &d2, &b2)
1539 && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1543 && !target_read_memory (pc - 6, insn, 6)
1544 && is_rsy (insn, op1_lmy, op2_lmy, &r1, &r3, &d2, &b2)
1545 && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1549 && !target_read_memory (pc - 6, insn, 6)
1550 && is_rsy (insn, op1_lmg, op2_lmg, &r1, &r3, &d2, &b2)
1551 && r3 == S390_SP_REGNUM - S390_R0_REGNUM)
1557 /* Displaced stepping. */
1559 /* Fix up the state of registers and memory after having single-stepped
1560 a displaced instruction. */
1562 s390_displaced_step_fixup (struct gdbarch *gdbarch,
1563 struct displaced_step_closure *closure,
1564 CORE_ADDR from, CORE_ADDR to,
1565 struct regcache *regs)
1567 /* Since we use simple_displaced_step_copy_insn, our closure is a
1568 copy of the instruction. */
1569 gdb_byte *insn = (gdb_byte *) closure;
1570 static int s390_instrlen[] = { 2, 4, 4, 6 };
1571 int insnlen = s390_instrlen[insn[0] >> 6];
1573 /* Fields for various kinds of instructions. */
1574 unsigned int b2, r1, r2, x2, r3;
1577 /* Get current PC and addressing mode bit. */
1578 CORE_ADDR pc = regcache_read_pc (regs);
1581 if (register_size (gdbarch, S390_PSWA_REGNUM) == 4)
1583 regcache_cooked_read_unsigned (regs, S390_PSWA_REGNUM, &amode);
1584 amode &= 0x80000000;
1587 if (debug_displaced)
1588 fprintf_unfiltered (gdb_stdlog,
1589 "displaced: (s390) fixup (%s, %s) pc %s len %d amode 0x%x\n",
1590 paddress (gdbarch, from), paddress (gdbarch, to),
1591 paddress (gdbarch, pc), insnlen, (int) amode);
1593 /* Handle absolute branch and save instructions. */
1594 if (is_rr (insn, op_basr, &r1, &r2)
1595 || is_rx (insn, op_bas, &r1, &d2, &x2, &b2))
1597 /* Recompute saved return address in R1. */
1598 regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1599 amode | (from + insnlen));
1602 /* Handle absolute branch instructions. */
1603 else if (is_rr (insn, op_bcr, &r1, &r2)
1604 || is_rx (insn, op_bc, &r1, &d2, &x2, &b2)
1605 || is_rr (insn, op_bctr, &r1, &r2)
1606 || is_rre (insn, op_bctgr, &r1, &r2)
1607 || is_rx (insn, op_bct, &r1, &d2, &x2, &b2)
1608 || is_rxy (insn, op1_bctg, op2_brctg, &r1, &d2, &x2, &b2)
1609 || is_rs (insn, op_bxh, &r1, &r3, &d2, &b2)
1610 || is_rsy (insn, op1_bxhg, op2_bxhg, &r1, &r3, &d2, &b2)
1611 || is_rs (insn, op_bxle, &r1, &r3, &d2, &b2)
1612 || is_rsy (insn, op1_bxleg, op2_bxleg, &r1, &r3, &d2, &b2))
1614 /* Update PC iff branch was *not* taken. */
1615 if (pc == to + insnlen)
1616 regcache_write_pc (regs, from + insnlen);
1619 /* Handle PC-relative branch and save instructions. */
1620 else if (is_ri (insn, op1_bras, op2_bras, &r1, &i2)
1621 || is_ril (insn, op1_brasl, op2_brasl, &r1, &i2))
1624 regcache_write_pc (regs, pc - to + from);
1625 /* Recompute saved return address in R1. */
1626 regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1627 amode | (from + insnlen));
1630 /* Handle PC-relative branch instructions. */
1631 else if (is_ri (insn, op1_brc, op2_brc, &r1, &i2)
1632 || is_ril (insn, op1_brcl, op2_brcl, &r1, &i2)
1633 || is_ri (insn, op1_brct, op2_brct, &r1, &i2)
1634 || is_ri (insn, op1_brctg, op2_brctg, &r1, &i2)
1635 || is_rsi (insn, op_brxh, &r1, &r3, &i2)
1636 || is_rie (insn, op1_brxhg, op2_brxhg, &r1, &r3, &i2)
1637 || is_rsi (insn, op_brxle, &r1, &r3, &i2)
1638 || is_rie (insn, op1_brxlg, op2_brxlg, &r1, &r3, &i2))
1641 regcache_write_pc (regs, pc - to + from);
1644 /* Handle LOAD ADDRESS RELATIVE LONG. */
1645 else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2))
1648 regcache_write_pc (regs, from + insnlen);
1649 /* Recompute output address in R1. */
1650 regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
1651 amode | (from + i2 * 2));
1654 /* If we executed a breakpoint instruction, point PC right back at it. */
1655 else if (insn[0] == 0x0 && insn[1] == 0x1)
1656 regcache_write_pc (regs, from);
1658 /* For any other insn, PC points right after the original instruction. */
1660 regcache_write_pc (regs, from + insnlen);
1662 if (debug_displaced)
1663 fprintf_unfiltered (gdb_stdlog,
1664 "displaced: (s390) pc is now %s\n",
1665 paddress (gdbarch, regcache_read_pc (regs)));
1669 /* Helper routine to unwind pseudo registers. */
1671 static struct value *
1672 s390_unwind_pseudo_register (struct frame_info *this_frame, int regnum)
1674 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1675 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1676 struct type *type = register_type (gdbarch, regnum);
1678 /* Unwind PC via PSW address. */
1679 if (regnum == tdep->pc_regnum)
1683 val = frame_unwind_register_value (this_frame, S390_PSWA_REGNUM);
1684 if (!value_optimized_out (val))
1686 LONGEST pswa = value_as_long (val);
1688 if (TYPE_LENGTH (type) == 4)
1689 return value_from_pointer (type, pswa & 0x7fffffff);
1691 return value_from_pointer (type, pswa);
1695 /* Unwind CC via PSW mask. */
1696 if (regnum == tdep->cc_regnum)
1700 val = frame_unwind_register_value (this_frame, S390_PSWM_REGNUM);
1701 if (!value_optimized_out (val))
1703 LONGEST pswm = value_as_long (val);
1705 if (TYPE_LENGTH (type) == 4)
1706 return value_from_longest (type, (pswm >> 12) & 3);
1708 return value_from_longest (type, (pswm >> 44) & 3);
1712 /* Unwind full GPRs to show at least the lower halves (as the
1713 upper halves are undefined). */
1714 if (tdep->gpr_full_regnum != -1
1715 && regnum >= tdep->gpr_full_regnum
1716 && regnum < tdep->gpr_full_regnum + 16)
1718 int reg = regnum - tdep->gpr_full_regnum;
1721 val = frame_unwind_register_value (this_frame, S390_R0_REGNUM + reg);
1722 if (!value_optimized_out (val))
1723 return value_cast (type, val);
1726 return allocate_optimized_out_value (type);
1729 static struct value *
1730 s390_trad_frame_prev_register (struct frame_info *this_frame,
1731 struct trad_frame_saved_reg saved_regs[],
1734 if (regnum < S390_NUM_REGS)
1735 return trad_frame_get_prev_register (this_frame, saved_regs, regnum);
1737 return s390_unwind_pseudo_register (this_frame, regnum);
1741 /* Normal stack frames. */
1743 struct s390_unwind_cache {
1746 CORE_ADDR frame_base;
1747 CORE_ADDR local_base;
1749 struct trad_frame_saved_reg *saved_regs;
1753 s390_prologue_frame_unwind_cache (struct frame_info *this_frame,
1754 struct s390_unwind_cache *info)
1756 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1757 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1758 struct s390_prologue_data data;
1759 pv_t *fp = &data.gpr[S390_FRAME_REGNUM - S390_R0_REGNUM];
1760 pv_t *sp = &data.gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1769 struct frame_info *next_frame;
1771 /* Try to find the function start address. If we can't find it, we don't
1772 bother searching for it -- with modern compilers this would be mostly
1773 pointless anyway. Trust that we'll either have valid DWARF-2 CFI data
1774 or else a valid backchain ... */
1775 func = get_frame_func (this_frame);
1779 /* Try to analyze the prologue. */
1780 result = s390_analyze_prologue (gdbarch, func,
1781 get_frame_pc (this_frame), &data);
1785 /* If this was successful, we should have found the instruction that
1786 sets the stack pointer register to the previous value of the stack
1787 pointer minus the frame size. */
1788 if (!pv_is_register (*sp, S390_SP_REGNUM))
1791 /* A frame size of zero at this point can mean either a real
1792 frameless function, or else a failure to find the prologue.
1793 Perform some sanity checks to verify we really have a
1794 frameless function. */
1797 /* If the next frame is a NORMAL_FRAME, this frame *cannot* have frame
1798 size zero. This is only possible if the next frame is a sentinel
1799 frame, a dummy frame, or a signal trampoline frame. */
1800 /* FIXME: cagney/2004-05-01: This sanity check shouldn't be
1801 needed, instead the code should simpliy rely on its
1803 next_frame = get_next_frame (this_frame);
1804 while (next_frame && get_frame_type (next_frame) == INLINE_FRAME)
1805 next_frame = get_next_frame (next_frame);
1807 && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
1810 /* If we really have a frameless function, %r14 must be valid
1811 -- in particular, it must point to a different function. */
1812 reg = get_frame_register_unsigned (this_frame, S390_RETADDR_REGNUM);
1813 reg = gdbarch_addr_bits_remove (gdbarch, reg) - 1;
1814 if (get_pc_function_start (reg) == func)
1816 /* However, there is one case where it *is* valid for %r14
1817 to point to the same function -- if this is a recursive
1818 call, and we have stopped in the prologue *before* the
1819 stack frame was allocated.
1821 Recognize this case by looking ahead a bit ... */
1823 struct s390_prologue_data data2;
1824 pv_t *sp = &data2.gpr[S390_SP_REGNUM - S390_R0_REGNUM];
1826 if (!(s390_analyze_prologue (gdbarch, func, (CORE_ADDR)-1, &data2)
1827 && pv_is_register (*sp, S390_SP_REGNUM)
1834 /* OK, we've found valid prologue data. */
1837 /* If the frame pointer originally also holds the same value
1838 as the stack pointer, we're probably using it. If it holds
1839 some other value -- even a constant offset -- it is most
1840 likely used as temp register. */
1841 if (pv_is_identical (*sp, *fp))
1842 frame_pointer = S390_FRAME_REGNUM;
1844 frame_pointer = S390_SP_REGNUM;
1846 /* If we've detected a function with stack frame, we'll still have to
1847 treat it as frameless if we're currently within the function epilog
1848 code at a point where the frame pointer has already been restored.
1849 This can only happen in an innermost frame. */
1850 /* FIXME: cagney/2004-05-01: This sanity check shouldn't be needed,
1851 instead the code should simpliy rely on its analysis. */
1852 next_frame = get_next_frame (this_frame);
1853 while (next_frame && get_frame_type (next_frame) == INLINE_FRAME)
1854 next_frame = get_next_frame (next_frame);
1856 && (next_frame == NULL
1857 || get_frame_type (get_next_frame (this_frame)) != NORMAL_FRAME))
1859 /* See the comment in s390_in_function_epilogue_p on why this is
1860 not completely reliable ... */
1861 if (s390_in_function_epilogue_p (gdbarch, get_frame_pc (this_frame)))
1863 memset (&data, 0, sizeof (data));
1865 frame_pointer = S390_SP_REGNUM;
1869 /* Once we know the frame register and the frame size, we can unwind
1870 the current value of the frame register from the next frame, and
1871 add back the frame size to arrive that the previous frame's
1872 stack pointer value. */
1873 prev_sp = get_frame_register_unsigned (this_frame, frame_pointer) + size;
1874 cfa = prev_sp + 16*word_size + 32;
1876 /* Set up ABI call-saved/call-clobbered registers. */
1877 for (i = 0; i < S390_NUM_REGS; i++)
1878 if (!s390_register_call_saved (gdbarch, i))
1879 trad_frame_set_unknown (info->saved_regs, i);
1881 /* CC is always call-clobbered. */
1882 trad_frame_set_unknown (info->saved_regs, S390_PSWM_REGNUM);
1884 /* Record the addresses of all register spill slots the prologue parser
1885 has recognized. Consider only registers defined as call-saved by the
1886 ABI; for call-clobbered registers the parser may have recognized
1889 for (i = 0; i < 16; i++)
1890 if (s390_register_call_saved (gdbarch, S390_R0_REGNUM + i)
1891 && data.gpr_slot[i] != 0)
1892 info->saved_regs[S390_R0_REGNUM + i].addr = cfa - data.gpr_slot[i];
1894 for (i = 0; i < 16; i++)
1895 if (s390_register_call_saved (gdbarch, S390_F0_REGNUM + i)
1896 && data.fpr_slot[i] != 0)
1897 info->saved_regs[S390_F0_REGNUM + i].addr = cfa - data.fpr_slot[i];
1899 /* Function return will set PC to %r14. */
1900 info->saved_regs[S390_PSWA_REGNUM] = info->saved_regs[S390_RETADDR_REGNUM];
1902 /* In frameless functions, we unwind simply by moving the return
1903 address to the PC. However, if we actually stored to the
1904 save area, use that -- we might only think the function frameless
1905 because we're in the middle of the prologue ... */
1907 && !trad_frame_addr_p (info->saved_regs, S390_PSWA_REGNUM))
1909 info->saved_regs[S390_PSWA_REGNUM].realreg = S390_RETADDR_REGNUM;
1912 /* Another sanity check: unless this is a frameless function,
1913 we should have found spill slots for SP and PC.
1914 If not, we cannot unwind further -- this happens e.g. in
1915 libc's thread_start routine. */
1918 if (!trad_frame_addr_p (info->saved_regs, S390_SP_REGNUM)
1919 || !trad_frame_addr_p (info->saved_regs, S390_PSWA_REGNUM))
1923 /* We use the current value of the frame register as local_base,
1924 and the top of the register save area as frame_base. */
1927 info->frame_base = prev_sp + 16*word_size + 32;
1928 info->local_base = prev_sp - size;
1936 s390_backchain_frame_unwind_cache (struct frame_info *this_frame,
1937 struct s390_unwind_cache *info)
1939 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1940 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
1941 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1942 CORE_ADDR backchain;
1947 /* Set up ABI call-saved/call-clobbered registers. */
1948 for (i = 0; i < S390_NUM_REGS; i++)
1949 if (!s390_register_call_saved (gdbarch, i))
1950 trad_frame_set_unknown (info->saved_regs, i);
1952 /* CC is always call-clobbered. */
1953 trad_frame_set_unknown (info->saved_regs, S390_PSWM_REGNUM);
1955 /* Get the backchain. */
1956 reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
1957 backchain = read_memory_unsigned_integer (reg, word_size, byte_order);
1959 /* A zero backchain terminates the frame chain. As additional
1960 sanity check, let's verify that the spill slot for SP in the
1961 save area pointed to by the backchain in fact links back to
1964 && safe_read_memory_integer (backchain + 15*word_size,
1965 word_size, byte_order, &sp)
1966 && (CORE_ADDR)sp == backchain)
1968 /* We don't know which registers were saved, but it will have
1969 to be at least %r14 and %r15. This will allow us to continue
1970 unwinding, but other prev-frame registers may be incorrect ... */
1971 info->saved_regs[S390_SP_REGNUM].addr = backchain + 15*word_size;
1972 info->saved_regs[S390_RETADDR_REGNUM].addr = backchain + 14*word_size;
1974 /* Function return will set PC to %r14. */
1975 info->saved_regs[S390_PSWA_REGNUM]
1976 = info->saved_regs[S390_RETADDR_REGNUM];
1978 /* We use the current value of the frame register as local_base,
1979 and the top of the register save area as frame_base. */
1980 info->frame_base = backchain + 16*word_size + 32;
1981 info->local_base = reg;
1984 info->func = get_frame_pc (this_frame);
1987 static struct s390_unwind_cache *
1988 s390_frame_unwind_cache (struct frame_info *this_frame,
1989 void **this_prologue_cache)
1991 struct s390_unwind_cache *info;
1992 if (*this_prologue_cache)
1993 return *this_prologue_cache;
1995 info = FRAME_OBSTACK_ZALLOC (struct s390_unwind_cache);
1996 *this_prologue_cache = info;
1997 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1999 info->frame_base = -1;
2000 info->local_base = -1;
2002 /* Try to use prologue analysis to fill the unwind cache.
2003 If this fails, fall back to reading the stack backchain. */
2004 if (!s390_prologue_frame_unwind_cache (this_frame, info))
2005 s390_backchain_frame_unwind_cache (this_frame, info);
2011 s390_frame_this_id (struct frame_info *this_frame,
2012 void **this_prologue_cache,
2013 struct frame_id *this_id)
2015 struct s390_unwind_cache *info
2016 = s390_frame_unwind_cache (this_frame, this_prologue_cache);
2018 if (info->frame_base == -1)
2021 *this_id = frame_id_build (info->frame_base, info->func);
2024 static struct value *
2025 s390_frame_prev_register (struct frame_info *this_frame,
2026 void **this_prologue_cache, int regnum)
2028 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2029 struct s390_unwind_cache *info
2030 = s390_frame_unwind_cache (this_frame, this_prologue_cache);
2032 return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2035 static const struct frame_unwind s390_frame_unwind = {
2037 default_frame_unwind_stop_reason,
2039 s390_frame_prev_register,
2041 default_frame_sniffer
2045 /* Code stubs and their stack frames. For things like PLTs and NULL
2046 function calls (where there is no true frame and the return address
2047 is in the RETADDR register). */
2049 struct s390_stub_unwind_cache
2051 CORE_ADDR frame_base;
2052 struct trad_frame_saved_reg *saved_regs;
2055 static struct s390_stub_unwind_cache *
2056 s390_stub_frame_unwind_cache (struct frame_info *this_frame,
2057 void **this_prologue_cache)
2059 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2060 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2061 struct s390_stub_unwind_cache *info;
2064 if (*this_prologue_cache)
2065 return *this_prologue_cache;
2067 info = FRAME_OBSTACK_ZALLOC (struct s390_stub_unwind_cache);
2068 *this_prologue_cache = info;
2069 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2071 /* The return address is in register %r14. */
2072 info->saved_regs[S390_PSWA_REGNUM].realreg = S390_RETADDR_REGNUM;
2074 /* Retrieve stack pointer and determine our frame base. */
2075 reg = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2076 info->frame_base = reg + 16*word_size + 32;
2082 s390_stub_frame_this_id (struct frame_info *this_frame,
2083 void **this_prologue_cache,
2084 struct frame_id *this_id)
2086 struct s390_stub_unwind_cache *info
2087 = s390_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2088 *this_id = frame_id_build (info->frame_base, get_frame_pc (this_frame));
2091 static struct value *
2092 s390_stub_frame_prev_register (struct frame_info *this_frame,
2093 void **this_prologue_cache, int regnum)
2095 struct s390_stub_unwind_cache *info
2096 = s390_stub_frame_unwind_cache (this_frame, this_prologue_cache);
2097 return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2101 s390_stub_frame_sniffer (const struct frame_unwind *self,
2102 struct frame_info *this_frame,
2103 void **this_prologue_cache)
2105 CORE_ADDR addr_in_block;
2106 bfd_byte insn[S390_MAX_INSTR_SIZE];
2108 /* If the current PC points to non-readable memory, we assume we
2109 have trapped due to an invalid function pointer call. We handle
2110 the non-existing current function like a PLT stub. */
2111 addr_in_block = get_frame_address_in_block (this_frame);
2112 if (in_plt_section (addr_in_block, NULL)
2113 || s390_readinstruction (insn, get_frame_pc (this_frame)) < 0)
2118 static const struct frame_unwind s390_stub_frame_unwind = {
2120 default_frame_unwind_stop_reason,
2121 s390_stub_frame_this_id,
2122 s390_stub_frame_prev_register,
2124 s390_stub_frame_sniffer
2128 /* Signal trampoline stack frames. */
2130 struct s390_sigtramp_unwind_cache {
2131 CORE_ADDR frame_base;
2132 struct trad_frame_saved_reg *saved_regs;
2135 static struct s390_sigtramp_unwind_cache *
2136 s390_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
2137 void **this_prologue_cache)
2139 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2140 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2141 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2142 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2143 struct s390_sigtramp_unwind_cache *info;
2144 ULONGEST this_sp, prev_sp;
2145 CORE_ADDR next_ra, next_cfa, sigreg_ptr, sigreg_high_off;
2148 if (*this_prologue_cache)
2149 return *this_prologue_cache;
2151 info = FRAME_OBSTACK_ZALLOC (struct s390_sigtramp_unwind_cache);
2152 *this_prologue_cache = info;
2153 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2155 this_sp = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2156 next_ra = get_frame_pc (this_frame);
2157 next_cfa = this_sp + 16*word_size + 32;
2159 /* New-style RT frame:
2160 retcode + alignment (8 bytes)
2162 ucontext (contains sigregs at offset 5 words). */
2163 if (next_ra == next_cfa)
2165 sigreg_ptr = next_cfa + 8 + 128 + align_up (5*word_size, 8);
2166 /* sigregs are followed by uc_sigmask (8 bytes), then by the
2167 upper GPR halves if present. */
2168 sigreg_high_off = 8;
2171 /* Old-style RT frame and all non-RT frames:
2172 old signal mask (8 bytes)
2173 pointer to sigregs. */
2176 sigreg_ptr = read_memory_unsigned_integer (next_cfa + 8,
2177 word_size, byte_order);
2178 /* sigregs are followed by signo (4 bytes), then by the
2179 upper GPR halves if present. */
2180 sigreg_high_off = 4;
2183 /* The sigregs structure looks like this:
2192 /* PSW mask and address. */
2193 info->saved_regs[S390_PSWM_REGNUM].addr = sigreg_ptr;
2194 sigreg_ptr += word_size;
2195 info->saved_regs[S390_PSWA_REGNUM].addr = sigreg_ptr;
2196 sigreg_ptr += word_size;
2198 /* Then the GPRs. */
2199 for (i = 0; i < 16; i++)
2201 info->saved_regs[S390_R0_REGNUM + i].addr = sigreg_ptr;
2202 sigreg_ptr += word_size;
2205 /* Then the ACRs. */
2206 for (i = 0; i < 16; i++)
2208 info->saved_regs[S390_A0_REGNUM + i].addr = sigreg_ptr;
2212 /* The floating-point control word. */
2213 info->saved_regs[S390_FPC_REGNUM].addr = sigreg_ptr;
2216 /* And finally the FPRs. */
2217 for (i = 0; i < 16; i++)
2219 info->saved_regs[S390_F0_REGNUM + i].addr = sigreg_ptr;
2223 /* If we have them, the GPR upper halves are appended at the end. */
2224 sigreg_ptr += sigreg_high_off;
2225 if (tdep->gpr_full_regnum != -1)
2226 for (i = 0; i < 16; i++)
2228 info->saved_regs[S390_R0_UPPER_REGNUM + i].addr = sigreg_ptr;
2232 /* Restore the previous frame's SP. */
2233 prev_sp = read_memory_unsigned_integer (
2234 info->saved_regs[S390_SP_REGNUM].addr,
2235 word_size, byte_order);
2237 /* Determine our frame base. */
2238 info->frame_base = prev_sp + 16*word_size + 32;
2244 s390_sigtramp_frame_this_id (struct frame_info *this_frame,
2245 void **this_prologue_cache,
2246 struct frame_id *this_id)
2248 struct s390_sigtramp_unwind_cache *info
2249 = s390_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
2250 *this_id = frame_id_build (info->frame_base, get_frame_pc (this_frame));
2253 static struct value *
2254 s390_sigtramp_frame_prev_register (struct frame_info *this_frame,
2255 void **this_prologue_cache, int regnum)
2257 struct s390_sigtramp_unwind_cache *info
2258 = s390_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
2259 return s390_trad_frame_prev_register (this_frame, info->saved_regs, regnum);
2263 s390_sigtramp_frame_sniffer (const struct frame_unwind *self,
2264 struct frame_info *this_frame,
2265 void **this_prologue_cache)
2267 CORE_ADDR pc = get_frame_pc (this_frame);
2268 bfd_byte sigreturn[2];
2270 if (target_read_memory (pc, sigreturn, 2))
2273 if (sigreturn[0] != 0x0a /* svc */)
2276 if (sigreturn[1] != 119 /* sigreturn */
2277 && sigreturn[1] != 173 /* rt_sigreturn */)
2283 static const struct frame_unwind s390_sigtramp_frame_unwind = {
2285 default_frame_unwind_stop_reason,
2286 s390_sigtramp_frame_this_id,
2287 s390_sigtramp_frame_prev_register,
2289 s390_sigtramp_frame_sniffer
2293 /* Frame base handling. */
2296 s390_frame_base_address (struct frame_info *this_frame, void **this_cache)
2298 struct s390_unwind_cache *info
2299 = s390_frame_unwind_cache (this_frame, this_cache);
2300 return info->frame_base;
2304 s390_local_base_address (struct frame_info *this_frame, void **this_cache)
2306 struct s390_unwind_cache *info
2307 = s390_frame_unwind_cache (this_frame, this_cache);
2308 return info->local_base;
2311 static const struct frame_base s390_frame_base = {
2313 s390_frame_base_address,
2314 s390_local_base_address,
2315 s390_local_base_address
2319 s390_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2321 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2323 pc = frame_unwind_register_unsigned (next_frame, tdep->pc_regnum);
2324 return gdbarch_addr_bits_remove (gdbarch, pc);
2328 s390_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
2331 sp = frame_unwind_register_unsigned (next_frame, S390_SP_REGNUM);
2332 return gdbarch_addr_bits_remove (gdbarch, sp);
2336 /* DWARF-2 frame support. */
2338 static struct value *
2339 s390_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
2342 return s390_unwind_pseudo_register (this_frame, regnum);
2346 s390_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
2347 struct dwarf2_frame_state_reg *reg,
2348 struct frame_info *this_frame)
2350 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2352 /* The condition code (and thus PSW mask) is call-clobbered. */
2353 if (regnum == S390_PSWM_REGNUM)
2354 reg->how = DWARF2_FRAME_REG_UNDEFINED;
2356 /* The PSW address unwinds to the return address. */
2357 else if (regnum == S390_PSWA_REGNUM)
2358 reg->how = DWARF2_FRAME_REG_RA;
2360 /* Fixed registers are call-saved or call-clobbered
2361 depending on the ABI in use. */
2362 else if (regnum < S390_NUM_REGS)
2364 if (s390_register_call_saved (gdbarch, regnum))
2365 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
2367 reg->how = DWARF2_FRAME_REG_UNDEFINED;
2370 /* We install a special function to unwind pseudos. */
2373 reg->how = DWARF2_FRAME_REG_FN;
2374 reg->loc.fn = s390_dwarf2_prev_register;
2379 /* Dummy function calls. */
2381 /* Return non-zero if TYPE is an integer-like type, zero otherwise.
2382 "Integer-like" types are those that should be passed the way
2383 integers are: integers, enums, ranges, characters, and booleans. */
2385 is_integer_like (struct type *type)
2387 enum type_code code = TYPE_CODE (type);
2389 return (code == TYPE_CODE_INT
2390 || code == TYPE_CODE_ENUM
2391 || code == TYPE_CODE_RANGE
2392 || code == TYPE_CODE_CHAR
2393 || code == TYPE_CODE_BOOL);
2396 /* Return non-zero if TYPE is a pointer-like type, zero otherwise.
2397 "Pointer-like" types are those that should be passed the way
2398 pointers are: pointers and references. */
2400 is_pointer_like (struct type *type)
2402 enum type_code code = TYPE_CODE (type);
2404 return (code == TYPE_CODE_PTR
2405 || code == TYPE_CODE_REF);
2409 /* Return non-zero if TYPE is a `float singleton' or `double
2410 singleton', zero otherwise.
2412 A `T singleton' is a struct type with one member, whose type is
2413 either T or a `T singleton'. So, the following are all float
2417 struct { struct { float x; } x; };
2418 struct { struct { struct { float x; } x; } x; };
2422 All such structures are passed as if they were floats or doubles,
2423 as the (revised) ABI says. */
2425 is_float_singleton (struct type *type)
2427 if (TYPE_CODE (type) == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
2429 struct type *singleton_type = TYPE_FIELD_TYPE (type, 0);
2430 CHECK_TYPEDEF (singleton_type);
2432 return (TYPE_CODE (singleton_type) == TYPE_CODE_FLT
2433 || TYPE_CODE (singleton_type) == TYPE_CODE_DECFLOAT
2434 || is_float_singleton (singleton_type));
2441 /* Return non-zero if TYPE is a struct-like type, zero otherwise.
2442 "Struct-like" types are those that should be passed as structs are:
2445 As an odd quirk, not mentioned in the ABI, GCC passes float and
2446 double singletons as if they were a plain float, double, etc. (The
2447 corresponding union types are handled normally.) So we exclude
2448 those types here. *shrug* */
2450 is_struct_like (struct type *type)
2452 enum type_code code = TYPE_CODE (type);
2454 return (code == TYPE_CODE_UNION
2455 || (code == TYPE_CODE_STRUCT && ! is_float_singleton (type)));
2459 /* Return non-zero if TYPE is a float-like type, zero otherwise.
2460 "Float-like" types are those that should be passed as
2461 floating-point values are.
2463 You'd think this would just be floats, doubles, long doubles, etc.
2464 But as an odd quirk, not mentioned in the ABI, GCC passes float and
2465 double singletons as if they were a plain float, double, etc. (The
2466 corresponding union types are handled normally.) So we include
2467 those types here. *shrug* */
2469 is_float_like (struct type *type)
2471 return (TYPE_CODE (type) == TYPE_CODE_FLT
2472 || TYPE_CODE (type) == TYPE_CODE_DECFLOAT
2473 || is_float_singleton (type));
2478 is_power_of_two (unsigned int n)
2480 return ((n & (n - 1)) == 0);
2483 /* Return non-zero if TYPE should be passed as a pointer to a copy,
2486 s390_function_arg_pass_by_reference (struct type *type)
2488 unsigned length = TYPE_LENGTH (type);
2492 return (is_struct_like (type) && !is_power_of_two (TYPE_LENGTH (type)))
2493 || TYPE_CODE (type) == TYPE_CODE_COMPLEX
2494 || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type));
2497 /* Return non-zero if TYPE should be passed in a float register
2500 s390_function_arg_float (struct type *type)
2502 unsigned length = TYPE_LENGTH (type);
2506 return is_float_like (type);
2509 /* Return non-zero if TYPE should be passed in an integer register
2510 (or a pair of integer registers) if possible. */
2512 s390_function_arg_integer (struct type *type)
2514 unsigned length = TYPE_LENGTH (type);
2518 return is_integer_like (type)
2519 || is_pointer_like (type)
2520 || (is_struct_like (type) && is_power_of_two (length));
2523 /* Return ARG, a `SIMPLE_ARG', sign-extended or zero-extended to a full
2524 word as required for the ABI. */
2526 extend_simple_arg (struct gdbarch *gdbarch, struct value *arg)
2528 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2529 struct type *type = check_typedef (value_type (arg));
2531 /* Even structs get passed in the least significant bits of the
2532 register / memory word. It's not really right to extract them as
2533 an integer, but it does take care of the extension. */
2534 if (TYPE_UNSIGNED (type))
2535 return extract_unsigned_integer (value_contents (arg),
2536 TYPE_LENGTH (type), byte_order);
2538 return extract_signed_integer (value_contents (arg),
2539 TYPE_LENGTH (type), byte_order);
2543 /* Return the alignment required by TYPE. */
2545 alignment_of (struct type *type)
2549 if (is_integer_like (type)
2550 || is_pointer_like (type)
2551 || TYPE_CODE (type) == TYPE_CODE_FLT
2552 || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2553 alignment = TYPE_LENGTH (type);
2554 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
2555 || TYPE_CODE (type) == TYPE_CODE_UNION)
2560 for (i = 0; i < TYPE_NFIELDS (type); i++)
2563 = alignment_of (check_typedef (TYPE_FIELD_TYPE (type, i)));
2565 if (field_alignment > alignment)
2566 alignment = field_alignment;
2572 /* Check that everything we ever return is a power of two. Lots of
2573 code doesn't want to deal with aligning things to arbitrary
2575 gdb_assert ((alignment & (alignment - 1)) == 0);
2581 /* Put the actual parameter values pointed to by ARGS[0..NARGS-1] in
2582 place to be passed to a function, as specified by the "GNU/Linux
2583 for S/390 ELF Application Binary Interface Supplement".
2585 SP is the current stack pointer. We must put arguments, links,
2586 padding, etc. whereever they belong, and return the new stack
2589 If STRUCT_RETURN is non-zero, then the function we're calling is
2590 going to return a structure by value; STRUCT_ADDR is the address of
2591 a block we've allocated for it on the stack.
2593 Our caller has taken care of any type promotions needed to satisfy
2594 prototypes or the old K&R argument-passing rules. */
2596 s390_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2597 struct regcache *regcache, CORE_ADDR bp_addr,
2598 int nargs, struct value **args, CORE_ADDR sp,
2599 int struct_return, CORE_ADDR struct_addr)
2601 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2602 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2603 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2606 /* If the i'th argument is passed as a reference to a copy, then
2607 copy_addr[i] is the address of the copy we made. */
2608 CORE_ADDR *copy_addr = alloca (nargs * sizeof (CORE_ADDR));
2610 /* Reserve space for the reference-to-copy area. */
2611 for (i = 0; i < nargs; i++)
2613 struct value *arg = args[i];
2614 struct type *type = check_typedef (value_type (arg));
2615 unsigned length = TYPE_LENGTH (type);
2617 if (s390_function_arg_pass_by_reference (type))
2620 sp = align_down (sp, alignment_of (type));
2625 /* Reserve space for the parameter area. As a conservative
2626 simplification, we assume that everything will be passed on the
2627 stack. Since every argument larger than 8 bytes will be
2628 passed by reference, we use this simple upper bound. */
2631 /* After all that, make sure it's still aligned on an eight-byte
2633 sp = align_down (sp, 8);
2635 /* Allocate the standard frame areas: the register save area, the
2636 word reserved for the compiler (which seems kind of meaningless),
2637 and the back chain pointer. */
2638 sp -= 16*word_size + 32;
2640 /* Now we have the final SP value. Make sure we didn't underflow;
2641 on 31-bit, this would result in addresses with the high bit set,
2642 which causes confusion elsewhere. Note that if we error out
2643 here, stack and registers remain untouched. */
2644 if (gdbarch_addr_bits_remove (gdbarch, sp) != sp)
2645 error (_("Stack overflow"));
2648 /* Finally, place the actual parameters, working from SP towards
2649 higher addresses. The code above is supposed to reserve enough
2654 CORE_ADDR starg = sp + 16*word_size + 32;
2656 /* A struct is returned using general register 2. */
2659 regcache_cooked_write_unsigned (regcache, S390_R0_REGNUM + gr,
2664 for (i = 0; i < nargs; i++)
2666 struct value *arg = args[i];
2667 struct type *type = check_typedef (value_type (arg));
2668 unsigned length = TYPE_LENGTH (type);
2670 if (s390_function_arg_pass_by_reference (type))
2672 /* Actually copy the argument contents to the stack slot
2673 that was reserved above. */
2674 write_memory (copy_addr[i], value_contents (arg), length);
2678 regcache_cooked_write_unsigned (regcache, S390_R0_REGNUM + gr,
2684 write_memory_unsigned_integer (starg, word_size, byte_order,
2689 else if (s390_function_arg_float (type))
2691 /* The GNU/Linux for S/390 ABI uses FPRs 0 and 2 to pass arguments,
2692 the GNU/Linux for zSeries ABI uses 0, 2, 4, and 6. */
2693 if (fr <= (tdep->abi == ABI_LINUX_S390 ? 2 : 6))
2695 /* When we store a single-precision value in an FP register,
2696 it occupies the leftmost bits. */
2697 regcache_cooked_write_part (regcache, S390_F0_REGNUM + fr,
2698 0, length, value_contents (arg));
2703 /* When we store a single-precision value in a stack slot,
2704 it occupies the rightmost bits. */
2705 starg = align_up (starg + length, word_size);
2706 write_memory (starg - length, value_contents (arg), length);
2709 else if (s390_function_arg_integer (type) && length <= word_size)
2713 /* Integer arguments are always extended to word size. */
2714 regcache_cooked_write_signed (regcache, S390_R0_REGNUM + gr,
2715 extend_simple_arg (gdbarch,
2721 /* Integer arguments are always extended to word size. */
2722 write_memory_signed_integer (starg, word_size, byte_order,
2723 extend_simple_arg (gdbarch, arg));
2727 else if (s390_function_arg_integer (type) && length == 2*word_size)
2731 regcache_cooked_write (regcache, S390_R0_REGNUM + gr,
2732 value_contents (arg));
2733 regcache_cooked_write (regcache, S390_R0_REGNUM + gr + 1,
2734 value_contents (arg) + word_size);
2739 /* If we skipped r6 because we couldn't fit a DOUBLE_ARG
2740 in it, then don't go back and use it again later. */
2743 write_memory (starg, value_contents (arg), length);
2748 internal_error (__FILE__, __LINE__, _("unknown argument type"));
2752 /* Store return PSWA. In 31-bit mode, keep addressing mode bit. */
2756 regcache_cooked_read_unsigned (regcache, S390_PSWA_REGNUM, &pswa);
2757 bp_addr = (bp_addr & 0x7fffffff) | (pswa & 0x80000000);
2759 regcache_cooked_write_unsigned (regcache, S390_RETADDR_REGNUM, bp_addr);
2761 /* Store updated stack pointer. */
2762 regcache_cooked_write_unsigned (regcache, S390_SP_REGNUM, sp);
2764 /* We need to return the 'stack part' of the frame ID,
2765 which is actually the top of the register save area. */
2766 return sp + 16*word_size + 32;
2769 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
2770 dummy frame. The frame ID's base needs to match the TOS value
2771 returned by push_dummy_call, and the PC match the dummy frame's
2773 static struct frame_id
2774 s390_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2776 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2777 CORE_ADDR sp = get_frame_register_unsigned (this_frame, S390_SP_REGNUM);
2778 sp = gdbarch_addr_bits_remove (gdbarch, sp);
2780 return frame_id_build (sp + 16*word_size + 32,
2781 get_frame_pc (this_frame));
2785 s390_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2787 /* Both the 32- and 64-bit ABI's say that the stack pointer should
2788 always be aligned on an eight-byte boundary. */
2793 /* Function return value access. */
2795 static enum return_value_convention
2796 s390_return_value_convention (struct gdbarch *gdbarch, struct type *type)
2798 int length = TYPE_LENGTH (type);
2800 return RETURN_VALUE_STRUCT_CONVENTION;
2802 switch (TYPE_CODE (type))
2804 case TYPE_CODE_STRUCT:
2805 case TYPE_CODE_UNION:
2806 case TYPE_CODE_ARRAY:
2807 case TYPE_CODE_COMPLEX:
2808 return RETURN_VALUE_STRUCT_CONVENTION;
2811 return RETURN_VALUE_REGISTER_CONVENTION;
2815 static enum return_value_convention
2816 s390_return_value (struct gdbarch *gdbarch, struct type *func_type,
2817 struct type *type, struct regcache *regcache,
2818 gdb_byte *out, const gdb_byte *in)
2820 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2821 int word_size = gdbarch_ptr_bit (gdbarch) / 8;
2822 enum return_value_convention rvc;
2825 type = check_typedef (type);
2826 rvc = s390_return_value_convention (gdbarch, type);
2827 length = TYPE_LENGTH (type);
2833 case RETURN_VALUE_REGISTER_CONVENTION:
2834 if (TYPE_CODE (type) == TYPE_CODE_FLT
2835 || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2837 /* When we store a single-precision value in an FP register,
2838 it occupies the leftmost bits. */
2839 regcache_cooked_write_part (regcache, S390_F0_REGNUM,
2842 else if (length <= word_size)
2844 /* Integer arguments are always extended to word size. */
2845 if (TYPE_UNSIGNED (type))
2846 regcache_cooked_write_unsigned (regcache, S390_R2_REGNUM,
2847 extract_unsigned_integer (in, length, byte_order));
2849 regcache_cooked_write_signed (regcache, S390_R2_REGNUM,
2850 extract_signed_integer (in, length, byte_order));
2852 else if (length == 2*word_size)
2854 regcache_cooked_write (regcache, S390_R2_REGNUM, in);
2855 regcache_cooked_write (regcache, S390_R3_REGNUM, in + word_size);
2858 internal_error (__FILE__, __LINE__, _("invalid return type"));
2861 case RETURN_VALUE_STRUCT_CONVENTION:
2862 error (_("Cannot set function return value."));
2870 case RETURN_VALUE_REGISTER_CONVENTION:
2871 if (TYPE_CODE (type) == TYPE_CODE_FLT
2872 || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2874 /* When we store a single-precision value in an FP register,
2875 it occupies the leftmost bits. */
2876 regcache_cooked_read_part (regcache, S390_F0_REGNUM,
2879 else if (length <= word_size)
2881 /* Integer arguments occupy the rightmost bits. */
2882 regcache_cooked_read_part (regcache, S390_R2_REGNUM,
2883 word_size - length, length, out);
2885 else if (length == 2*word_size)
2887 regcache_cooked_read (regcache, S390_R2_REGNUM, out);
2888 regcache_cooked_read (regcache, S390_R3_REGNUM, out + word_size);
2891 internal_error (__FILE__, __LINE__, _("invalid return type"));
2894 case RETURN_VALUE_STRUCT_CONVENTION:
2895 error (_("Function return value unknown."));
2906 static const gdb_byte *
2907 s390_breakpoint_from_pc (struct gdbarch *gdbarch,
2908 CORE_ADDR *pcptr, int *lenptr)
2910 static const gdb_byte breakpoint[] = { 0x0, 0x1 };
2912 *lenptr = sizeof (breakpoint);
2917 /* Address handling. */
2920 s390_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
2922 return addr & 0x7fffffff;
2926 s390_address_class_type_flags (int byte_size, int dwarf2_addr_class)
2929 return TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
2935 s390_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
2937 if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
2944 s390_address_class_name_to_type_flags (struct gdbarch *gdbarch,
2946 int *type_flags_ptr)
2948 if (strcmp (name, "mode32") == 0)
2950 *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
2957 /* Set up gdbarch struct. */
2959 static struct gdbarch *
2960 s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2962 const struct target_desc *tdesc = info.target_desc;
2963 struct tdesc_arch_data *tdesc_data = NULL;
2964 struct gdbarch *gdbarch;
2965 struct gdbarch_tdep *tdep;
2968 int have_linux_v1 = 0;
2969 int have_linux_v2 = 0;
2970 int first_pseudo_reg, last_pseudo_reg;
2972 /* Default ABI and register size. */
2973 switch (info.bfd_arch_info->mach)
2975 case bfd_mach_s390_31:
2976 tdep_abi = ABI_LINUX_S390;
2979 case bfd_mach_s390_64:
2980 tdep_abi = ABI_LINUX_ZSERIES;
2987 /* Use default target description if none provided by the target. */
2988 if (!tdesc_has_registers (tdesc))
2990 if (tdep_abi == ABI_LINUX_S390)
2991 tdesc = tdesc_s390_linux32;
2993 tdesc = tdesc_s390x_linux64;
2996 /* Check any target description for validity. */
2997 if (tdesc_has_registers (tdesc))
2999 static const char *const gprs[] = {
3000 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
3001 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3003 static const char *const fprs[] = {
3004 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
3005 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"
3007 static const char *const acrs[] = {
3008 "acr0", "acr1", "acr2", "acr3", "acr4", "acr5", "acr6", "acr7",
3009 "acr8", "acr9", "acr10", "acr11", "acr12", "acr13", "acr14", "acr15"
3011 static const char *const gprs_lower[] = {
3012 "r0l", "r1l", "r2l", "r3l", "r4l", "r5l", "r6l", "r7l",
3013 "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l"
3015 static const char *const gprs_upper[] = {
3016 "r0h", "r1h", "r2h", "r3h", "r4h", "r5h", "r6h", "r7h",
3017 "r8h", "r9h", "r10h", "r11h", "r12h", "r13h", "r14h", "r15h"
3019 const struct tdesc_feature *feature;
3022 feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.core");
3023 if (feature == NULL)
3026 tdesc_data = tdesc_data_alloc ();
3028 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3029 S390_PSWM_REGNUM, "pswm");
3030 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3031 S390_PSWA_REGNUM, "pswa");
3033 if (tdesc_unnumbered_register (feature, "r0"))
3035 for (i = 0; i < 16; i++)
3036 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3037 S390_R0_REGNUM + i, gprs[i]);
3043 for (i = 0; i < 16; i++)
3044 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3047 for (i = 0; i < 16; i++)
3048 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3049 S390_R0_UPPER_REGNUM + i,
3053 feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.fpr");
3054 if (feature == NULL)
3056 tdesc_data_cleanup (tdesc_data);
3060 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3061 S390_FPC_REGNUM, "fpc");
3062 for (i = 0; i < 16; i++)
3063 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3064 S390_F0_REGNUM + i, fprs[i]);
3066 feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.acr");
3067 if (feature == NULL)
3069 tdesc_data_cleanup (tdesc_data);
3073 for (i = 0; i < 16; i++)
3074 valid_p &= tdesc_numbered_register (feature, tdesc_data,
3075 S390_A0_REGNUM + i, acrs[i]);
3077 /* Optional GNU/Linux-specific "registers". */
3078 feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.linux");
3081 tdesc_numbered_register (feature, tdesc_data,
3082 S390_ORIG_R2_REGNUM, "orig_r2");
3084 if (tdesc_numbered_register (feature, tdesc_data,
3085 S390_LAST_BREAK_REGNUM, "last_break"))
3088 if (tdesc_numbered_register (feature, tdesc_data,
3089 S390_SYSTEM_CALL_REGNUM, "system_call"))
3092 if (have_linux_v2 > have_linux_v1)
3098 tdesc_data_cleanup (tdesc_data);
3103 /* Find a candidate among extant architectures. */
3104 for (arches = gdbarch_list_lookup_by_info (arches, &info);
3106 arches = gdbarch_list_lookup_by_info (arches->next, &info))
3108 tdep = gdbarch_tdep (arches->gdbarch);
3111 if (tdep->abi != tdep_abi)
3113 if ((tdep->gpr_full_regnum != -1) != have_upper)
3115 if (tdesc_data != NULL)
3116 tdesc_data_cleanup (tdesc_data);
3117 return arches->gdbarch;
3120 /* Otherwise create a new gdbarch for the specified machine type. */
3121 tdep = XCALLOC (1, struct gdbarch_tdep);
3122 tdep->abi = tdep_abi;
3123 gdbarch = gdbarch_alloc (&info, tdep);
3125 set_gdbarch_believe_pcc_promotion (gdbarch, 0);
3126 set_gdbarch_char_signed (gdbarch, 0);
3128 /* S/390 GNU/Linux uses either 64-bit or 128-bit long doubles.
3129 We can safely let them default to 128-bit, since the debug info
3130 will give the size of type actually used in each case. */
3131 set_gdbarch_long_double_bit (gdbarch, 128);
3132 set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
3134 /* Amount PC must be decremented by after a breakpoint. This is
3135 often the number of bytes returned by gdbarch_breakpoint_from_pc but not
3137 set_gdbarch_decr_pc_after_break (gdbarch, 2);
3138 /* Stack grows downward. */
3139 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3140 set_gdbarch_breakpoint_from_pc (gdbarch, s390_breakpoint_from_pc);
3141 set_gdbarch_skip_prologue (gdbarch, s390_skip_prologue);
3142 set_gdbarch_in_function_epilogue_p (gdbarch, s390_in_function_epilogue_p);
3144 set_gdbarch_num_regs (gdbarch, S390_NUM_REGS);
3145 set_gdbarch_sp_regnum (gdbarch, S390_SP_REGNUM);
3146 set_gdbarch_fp0_regnum (gdbarch, S390_F0_REGNUM);
3147 set_gdbarch_stab_reg_to_regnum (gdbarch, s390_dwarf_reg_to_regnum);
3148 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, s390_dwarf_reg_to_regnum);
3149 set_gdbarch_value_from_register (gdbarch, s390_value_from_register);
3150 set_gdbarch_regset_from_core_section (gdbarch,
3151 s390_regset_from_core_section);
3152 set_gdbarch_core_read_description (gdbarch, s390_core_read_description);
3153 set_gdbarch_cannot_store_register (gdbarch, s390_cannot_store_register);
3154 set_gdbarch_write_pc (gdbarch, s390_write_pc);
3155 set_gdbarch_pseudo_register_read (gdbarch, s390_pseudo_register_read);
3156 set_gdbarch_pseudo_register_write (gdbarch, s390_pseudo_register_write);
3157 set_tdesc_pseudo_register_name (gdbarch, s390_pseudo_register_name);
3158 set_tdesc_pseudo_register_type (gdbarch, s390_pseudo_register_type);
3159 set_tdesc_pseudo_register_reggroup_p (gdbarch,
3160 s390_pseudo_register_reggroup_p);
3161 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
3163 /* Assign pseudo register numbers. */
3164 first_pseudo_reg = gdbarch_num_regs (gdbarch);
3165 last_pseudo_reg = first_pseudo_reg;
3166 tdep->gpr_full_regnum = -1;
3169 tdep->gpr_full_regnum = last_pseudo_reg;
3170 last_pseudo_reg += 16;
3172 tdep->pc_regnum = last_pseudo_reg++;
3173 tdep->cc_regnum = last_pseudo_reg++;
3174 set_gdbarch_pc_regnum (gdbarch, tdep->pc_regnum);
3175 set_gdbarch_num_pseudo_regs (gdbarch, last_pseudo_reg - first_pseudo_reg);
3177 /* Inferior function calls. */
3178 set_gdbarch_push_dummy_call (gdbarch, s390_push_dummy_call);
3179 set_gdbarch_dummy_id (gdbarch, s390_dummy_id);
3180 set_gdbarch_frame_align (gdbarch, s390_frame_align);
3181 set_gdbarch_return_value (gdbarch, s390_return_value);
3183 /* Frame handling. */
3184 dwarf2_frame_set_init_reg (gdbarch, s390_dwarf2_frame_init_reg);
3185 dwarf2_frame_set_adjust_regnum (gdbarch, s390_adjust_frame_regnum);
3186 dwarf2_append_unwinders (gdbarch);
3187 frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
3188 frame_unwind_append_unwinder (gdbarch, &s390_stub_frame_unwind);
3189 frame_unwind_append_unwinder (gdbarch, &s390_sigtramp_frame_unwind);
3190 frame_unwind_append_unwinder (gdbarch, &s390_frame_unwind);
3191 frame_base_set_default (gdbarch, &s390_frame_base);
3192 set_gdbarch_unwind_pc (gdbarch, s390_unwind_pc);
3193 set_gdbarch_unwind_sp (gdbarch, s390_unwind_sp);
3195 /* Displaced stepping. */
3196 set_gdbarch_displaced_step_copy_insn (gdbarch,
3197 simple_displaced_step_copy_insn);
3198 set_gdbarch_displaced_step_fixup (gdbarch, s390_displaced_step_fixup);
3199 set_gdbarch_displaced_step_free_closure (gdbarch,
3200 simple_displaced_step_free_closure);
3201 set_gdbarch_displaced_step_location (gdbarch,
3202 displaced_step_at_entry_point);
3203 set_gdbarch_max_insn_length (gdbarch, S390_MAX_INSTR_SIZE);
3205 /* Note that GNU/Linux is the only OS supported on this
3207 linux_init_abi (info, gdbarch);
3211 case ABI_LINUX_S390:
3212 tdep->gregset = &s390_gregset;
3213 tdep->sizeof_gregset = s390_sizeof_gregset;
3214 tdep->fpregset = &s390_fpregset;
3215 tdep->sizeof_fpregset = s390_sizeof_fpregset;
3217 set_gdbarch_addr_bits_remove (gdbarch, s390_addr_bits_remove);
3218 set_solib_svr4_fetch_link_map_offsets
3219 (gdbarch, svr4_ilp32_fetch_link_map_offsets);
3224 set_gdbarch_core_regset_sections (gdbarch,
3225 s390_linux64v2_regset_sections);
3226 else if (have_linux_v1)
3227 set_gdbarch_core_regset_sections (gdbarch,
3228 s390_linux64v1_regset_sections);
3230 set_gdbarch_core_regset_sections (gdbarch,
3231 s390_linux64_regset_sections);
3236 set_gdbarch_core_regset_sections (gdbarch,
3237 s390_linux32v2_regset_sections);
3238 else if (have_linux_v1)
3239 set_gdbarch_core_regset_sections (gdbarch,
3240 s390_linux32v1_regset_sections);
3242 set_gdbarch_core_regset_sections (gdbarch,
3243 s390_linux32_regset_sections);
3247 case ABI_LINUX_ZSERIES:
3248 tdep->gregset = &s390x_gregset;
3249 tdep->sizeof_gregset = s390x_sizeof_gregset;
3250 tdep->fpregset = &s390_fpregset;
3251 tdep->sizeof_fpregset = s390_sizeof_fpregset;
3253 set_gdbarch_long_bit (gdbarch, 64);
3254 set_gdbarch_long_long_bit (gdbarch, 64);
3255 set_gdbarch_ptr_bit (gdbarch, 64);
3256 set_solib_svr4_fetch_link_map_offsets
3257 (gdbarch, svr4_lp64_fetch_link_map_offsets);
3258 set_gdbarch_address_class_type_flags (gdbarch,
3259 s390_address_class_type_flags);
3260 set_gdbarch_address_class_type_flags_to_name (gdbarch,
3261 s390_address_class_type_flags_to_name);
3262 set_gdbarch_address_class_name_to_type_flags (gdbarch,
3263 s390_address_class_name_to_type_flags);
3266 set_gdbarch_core_regset_sections (gdbarch,
3267 s390x_linux64v2_regset_sections);
3268 else if (have_linux_v1)
3269 set_gdbarch_core_regset_sections (gdbarch,
3270 s390x_linux64v1_regset_sections);
3272 set_gdbarch_core_regset_sections (gdbarch,
3273 s390x_linux64_regset_sections);
3277 set_gdbarch_print_insn (gdbarch, print_insn_s390);
3279 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
3281 /* Enable TLS support. */
3282 set_gdbarch_fetch_tls_load_module_address (gdbarch,
3283 svr4_fetch_objfile_link_map);
3285 set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
3291 extern initialize_file_ftype _initialize_s390_tdep; /* -Wmissing-prototypes */
3294 _initialize_s390_tdep (void)
3296 /* Hook us into the gdbarch mechanism. */
3297 register_gdbarch_init (bfd_arch_s390, s390_gdbarch_init);
3299 /* Initialize the GNU/Linux target descriptions. */
3300 initialize_tdesc_s390_linux32 ();
3301 initialize_tdesc_s390_linux32v1 ();
3302 initialize_tdesc_s390_linux32v2 ();
3303 initialize_tdesc_s390_linux64 ();
3304 initialize_tdesc_s390_linux64v1 ();
3305 initialize_tdesc_s390_linux64v2 ();
3306 initialize_tdesc_s390x_linux64 ();
3307 initialize_tdesc_s390x_linux64v1 ();
3308 initialize_tdesc_s390x_linux64v2 ();