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