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