* tui-hooks.c: Update include order.
[deliverable/binutils-gdb.git] / gdb / s390-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3 Copyright 2001, 2002, 2003 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 2 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, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23 02111-1307, USA. */
24
25 #define S390_TDEP /* for special macros in tm-s390.h */
26 #include <defs.h>
27 #include "arch-utils.h"
28 #include "frame.h"
29 #include "inferior.h"
30 #include "symtab.h"
31 #include "target.h"
32 #include "gdbcore.h"
33 #include "gdbcmd.h"
34 #include "symfile.h"
35 #include "objfiles.h"
36 #include "tm.h"
37 #include "../bfd/bfd.h"
38 #include "floatformat.h"
39 #include "regcache.h"
40 #include "value.h"
41 #include "gdb_assert.h"
42
43
44
45
46 /* Number of bytes of storage in the actual machine representation
47 for register N. */
48 static int
49 s390_register_raw_size (int reg_nr)
50 {
51 if (S390_FP0_REGNUM <= reg_nr
52 && reg_nr < S390_FP0_REGNUM + S390_NUM_FPRS)
53 return S390_FPR_SIZE;
54 else
55 return 4;
56 }
57
58 static int
59 s390x_register_raw_size (int reg_nr)
60 {
61 return (reg_nr == S390_FPC_REGNUM)
62 || (reg_nr >= S390_FIRST_ACR && reg_nr <= S390_LAST_ACR) ? 4 : 8;
63 }
64
65 static int
66 s390_cannot_fetch_register (int regno)
67 {
68 return (regno >= S390_FIRST_CR && regno < (S390_FIRST_CR + 9)) ||
69 (regno >= (S390_FIRST_CR + 12) && regno <= S390_LAST_CR);
70 }
71
72 static int
73 s390_register_byte (int reg_nr)
74 {
75 if (reg_nr <= S390_GP_LAST_REGNUM)
76 return reg_nr * S390_GPR_SIZE;
77 if (reg_nr <= S390_LAST_ACR)
78 return S390_ACR0_OFFSET + (((reg_nr) - S390_FIRST_ACR) * S390_ACR_SIZE);
79 if (reg_nr <= S390_LAST_CR)
80 return S390_CR0_OFFSET + (((reg_nr) - S390_FIRST_CR) * S390_CR_SIZE);
81 if (reg_nr == S390_FPC_REGNUM)
82 return S390_FPC_OFFSET;
83 else
84 return S390_FP0_OFFSET + (((reg_nr) - S390_FP0_REGNUM) * S390_FPR_SIZE);
85 }
86
87 #define S390_MAX_INSTR_SIZE (6)
88 #define S390_SYSCALL_OPCODE (0x0a)
89 #define S390_SYSCALL_SIZE (2)
90 #define S390_SIGCONTEXT_SREGS_OFFSET (8)
91 #define S390X_SIGCONTEXT_SREGS_OFFSET (8)
92 #define S390_SIGREGS_FP0_OFFSET (144)
93 #define S390X_SIGREGS_FP0_OFFSET (216)
94 #define S390_UC_MCONTEXT_OFFSET (256)
95 #define S390X_UC_MCONTEXT_OFFSET (344)
96 #define S390_STACK_FRAME_OVERHEAD (GDB_TARGET_IS_ESAME ? 160:96)
97 #define S390_SIGNAL_FRAMESIZE (GDB_TARGET_IS_ESAME ? 160:96)
98 #define s390_NR_sigreturn 119
99 #define s390_NR_rt_sigreturn 173
100
101
102
103 struct frame_extra_info
104 {
105 int initialised;
106 int good_prologue;
107 CORE_ADDR function_start;
108 CORE_ADDR skip_prologue_function_start;
109 CORE_ADDR saved_pc_valid;
110 CORE_ADDR saved_pc;
111 CORE_ADDR sig_fixed_saved_pc_valid;
112 CORE_ADDR sig_fixed_saved_pc;
113 CORE_ADDR frame_pointer_saved_pc; /* frame pointer needed for alloca */
114 CORE_ADDR stack_bought; /* amount we decrement the stack pointer by */
115 CORE_ADDR sigcontext;
116 };
117
118
119 static CORE_ADDR s390_frame_saved_pc_nofix (struct frame_info *fi);
120
121 static int
122 s390_readinstruction (bfd_byte instr[], CORE_ADDR at,
123 struct disassemble_info *info)
124 {
125 int instrlen;
126
127 static int s390_instrlen[] = {
128 2,
129 4,
130 4,
131 6
132 };
133 if ((*info->read_memory_func) (at, &instr[0], 2, info))
134 return -1;
135 instrlen = s390_instrlen[instr[0] >> 6];
136 if (instrlen > 2)
137 {
138 if ((*info->read_memory_func) (at + 2, &instr[2], instrlen - 2, info))
139 return -1;
140 }
141 return instrlen;
142 }
143
144 static void
145 s390_memset_extra_info (struct frame_extra_info *fextra_info)
146 {
147 memset (fextra_info, 0, sizeof (struct frame_extra_info));
148 }
149
150
151
152 static const char *
153 s390_register_name (int reg_nr)
154 {
155 static char *register_names[] = {
156 "pswm", "pswa",
157 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
158 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
159 "acr0", "acr1", "acr2", "acr3", "acr4", "acr5", "acr6", "acr7",
160 "acr8", "acr9", "acr10", "acr11", "acr12", "acr13", "acr14", "acr15",
161 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",
162 "cr8", "cr9", "cr10", "cr11", "cr12", "cr13", "cr14", "cr15",
163 "fpc",
164 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
165 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"
166 };
167
168 if (reg_nr <= S390_LAST_REGNUM)
169 return register_names[reg_nr];
170 else
171 return NULL;
172 }
173
174
175
176
177 static int
178 s390_stab_reg_to_regnum (int regno)
179 {
180 return regno >= 64 ? S390_PSWM_REGNUM - 64 :
181 regno >= 48 ? S390_FIRST_ACR - 48 :
182 regno >= 32 ? S390_FIRST_CR - 32 :
183 regno <= 15 ? (regno + 2) :
184 S390_FP0_REGNUM + ((regno - 16) & 8) + (((regno - 16) & 3) << 1) +
185 (((regno - 16) & 4) >> 2);
186 }
187
188
189 /* Return true if REGIDX is the number of a register used to pass
190 arguments, false otherwise. */
191 static int
192 is_arg_reg (int regidx)
193 {
194 return 2 <= regidx && regidx <= 6;
195 }
196
197
198 /* s390_get_frame_info based on Hartmuts
199 prologue definition in
200 gcc-2.8.1/config/l390/linux.c
201
202 It reads one instruction at a time & based on whether
203 it looks like prologue code or not it makes a decision on
204 whether the prologue is over, there are various state machines
205 in the code to determine if the prologue code is possilby valid.
206
207 This is done to hopefully allow the code survive minor revs of
208 calling conventions.
209
210 */
211
212 static int
213 s390_get_frame_info (CORE_ADDR pc, struct frame_extra_info *fextra_info,
214 struct frame_info *fi, int init_extra_info)
215 {
216 #define CONST_POOL_REGIDX 13
217 #define GOT_REGIDX 12
218 bfd_byte instr[S390_MAX_INSTR_SIZE];
219 CORE_ADDR test_pc = pc, test_pc2;
220 CORE_ADDR orig_sp = 0, save_reg_addr = 0, *saved_regs = NULL;
221 int valid_prologue, good_prologue = 0;
222 int gprs_saved[S390_NUM_GPRS];
223 int fprs_saved[S390_NUM_FPRS];
224 int regidx, instrlen;
225 int const_pool_state;
226 int varargs_state;
227 int loop_cnt, gdb_gpr_store, gdb_fpr_store;
228 int offset, expected_offset;
229 int err = 0;
230 disassemble_info info;
231
232 /* Have we seen an instruction initializing the frame pointer yet?
233 If we've seen an `lr %r11, %r15', then frame_pointer_found is
234 non-zero, and frame_pointer_regidx == 11. Otherwise,
235 frame_pointer_found is zero and frame_pointer_regidx is 15,
236 indicating that we're using the stack pointer as our frame
237 pointer. */
238 int frame_pointer_found = 0;
239 int frame_pointer_regidx = 0xf;
240
241 /* What we've seen so far regarding saving the back chain link:
242 0 -- nothing yet; sp still has the same value it had at the entry
243 point. Since not all functions allocate frames, this is a
244 valid state for the prologue to finish in.
245 1 -- We've saved the original sp in some register other than the
246 frame pointer (hard-coded to be %r11, yuck).
247 save_link_regidx is the register we saved it in.
248 2 -- We've seen the initial `bras' instruction of the sequence for
249 reserving more than 32k of stack:
250 bras %rX, .+8
251 .long N
252 s %r15, 0(%rX)
253 where %rX is not the constant pool register.
254 subtract_sp_regidx is %rX, and fextra_info->stack_bought is N.
255 3 -- We've reserved space for a new stack frame. This means we
256 either saw a simple `ahi %r15,-N' in state 1, or the final
257 `s %r15, ...' in state 2.
258 4 -- The frame and link are now fully initialized. We've
259 reserved space for the new stack frame, and stored the old
260 stack pointer captured in the back chain pointer field. */
261 int save_link_state = 0;
262 int save_link_regidx, subtract_sp_regidx;
263
264 /* What we've seen so far regarding r12 --- the GOT (Global Offset
265 Table) pointer. We expect to see `l %r12, N(%r13)', which loads
266 r12 with the offset from the constant pool to the GOT, and then
267 an `ar %r12, %r13', which adds the constant pool address,
268 yielding the GOT's address. Here's what got_state means:
269 0 -- seen nothing
270 1 -- seen `l %r12, N(%r13)', but no `ar'
271 2 -- seen load and add, so GOT pointer is totally initialized
272 When got_state is 1, then got_load_addr is the address of the
273 load instruction, and got_load_len is the length of that
274 instruction. */
275 int got_state= 0;
276 CORE_ADDR got_load_addr = 0, got_load_len = 0;
277
278 const_pool_state = varargs_state = 0;
279
280 memset (gprs_saved, 0, sizeof (gprs_saved));
281 memset (fprs_saved, 0, sizeof (fprs_saved));
282 info.read_memory_func = deprecated_tm_print_insn_info.read_memory_func;
283
284 save_link_regidx = subtract_sp_regidx = 0;
285 if (fextra_info)
286 {
287 if (fi && get_frame_base (fi))
288 {
289 orig_sp = get_frame_base (fi);
290 if (! init_extra_info && fextra_info->initialised)
291 orig_sp += fextra_info->stack_bought;
292 saved_regs = get_frame_saved_regs (fi);
293 }
294 if (init_extra_info || !fextra_info->initialised)
295 {
296 s390_memset_extra_info (fextra_info);
297 fextra_info->function_start = pc;
298 fextra_info->initialised = 1;
299 }
300 }
301 instrlen = 0;
302 do
303 {
304 valid_prologue = 0;
305 test_pc += instrlen;
306 /* add the previous instruction len */
307 instrlen = s390_readinstruction (instr, test_pc, &info);
308 if (instrlen < 0)
309 {
310 good_prologue = 0;
311 err = -1;
312 break;
313 }
314 /* We probably are in a glibc syscall */
315 if (instr[0] == S390_SYSCALL_OPCODE && test_pc == pc)
316 {
317 good_prologue = 1;
318 if (saved_regs && fextra_info && get_next_frame (fi)
319 && get_frame_extra_info (get_next_frame (fi))
320 && get_frame_extra_info (get_next_frame (fi))->sigcontext)
321 {
322 /* We are backtracing from a signal handler */
323 save_reg_addr = get_frame_extra_info (get_next_frame (fi))->sigcontext +
324 REGISTER_BYTE (S390_GP0_REGNUM);
325 for (regidx = 0; regidx < S390_NUM_GPRS; regidx++)
326 {
327 saved_regs[S390_GP0_REGNUM + regidx] = save_reg_addr;
328 save_reg_addr += S390_GPR_SIZE;
329 }
330 save_reg_addr = get_frame_extra_info (get_next_frame (fi))->sigcontext +
331 (GDB_TARGET_IS_ESAME ? S390X_SIGREGS_FP0_OFFSET :
332 S390_SIGREGS_FP0_OFFSET);
333 for (regidx = 0; regidx < S390_NUM_FPRS; regidx++)
334 {
335 saved_regs[S390_FP0_REGNUM + regidx] = save_reg_addr;
336 save_reg_addr += S390_FPR_SIZE;
337 }
338 }
339 break;
340 }
341 if (save_link_state == 0)
342 {
343 /* check for a stack relative STMG or STM */
344 if (((GDB_TARGET_IS_ESAME &&
345 ((instr[0] == 0xeb) && (instr[5] == 0x24))) ||
346 (instr[0] == 0x90)) && ((instr[2] >> 4) == 0xf))
347 {
348 regidx = (instr[1] >> 4);
349 if (regidx < 6)
350 varargs_state = 1;
351 offset = ((instr[2] & 0xf) << 8) + instr[3];
352 expected_offset =
353 S390_GPR6_STACK_OFFSET + (S390_GPR_SIZE * (regidx - 6));
354 if (offset != expected_offset)
355 {
356 good_prologue = 0;
357 break;
358 }
359 if (saved_regs)
360 save_reg_addr = orig_sp + offset;
361 for (; regidx <= (instr[1] & 0xf); regidx++)
362 {
363 if (gprs_saved[regidx])
364 {
365 good_prologue = 0;
366 break;
367 }
368 good_prologue = 1;
369 gprs_saved[regidx] = 1;
370 if (saved_regs)
371 {
372 saved_regs[S390_GP0_REGNUM + regidx] = save_reg_addr;
373 save_reg_addr += S390_GPR_SIZE;
374 }
375 }
376 valid_prologue = 1;
377 continue;
378 }
379 }
380 /* check for a stack relative STG or ST */
381 if ((save_link_state == 0 || save_link_state == 3) &&
382 ((GDB_TARGET_IS_ESAME &&
383 ((instr[0] == 0xe3) && (instr[5] == 0x24))) ||
384 (instr[0] == 0x50)) && ((instr[2] >> 4) == 0xf))
385 {
386 regidx = instr[1] >> 4;
387 offset = ((instr[2] & 0xf) << 8) + instr[3];
388 if (offset == 0)
389 {
390 if (save_link_state == 3 && regidx == save_link_regidx)
391 {
392 save_link_state = 4;
393 valid_prologue = 1;
394 continue;
395 }
396 else
397 break;
398 }
399 if (regidx < 6)
400 varargs_state = 1;
401 expected_offset =
402 S390_GPR6_STACK_OFFSET + (S390_GPR_SIZE * (regidx - 6));
403 if (offset != expected_offset)
404 {
405 good_prologue = 0;
406 break;
407 }
408 if (gprs_saved[regidx])
409 {
410 good_prologue = 0;
411 break;
412 }
413 good_prologue = 1;
414 gprs_saved[regidx] = 1;
415 if (saved_regs)
416 {
417 save_reg_addr = orig_sp + offset;
418 saved_regs[S390_GP0_REGNUM + regidx] = save_reg_addr;
419 }
420 valid_prologue = 1;
421 continue;
422 }
423
424 /* Check for an fp-relative STG, ST, or STM. This is probably
425 spilling an argument from a register out into a stack slot.
426 This could be a user instruction, but if we haven't included
427 any other suspicious instructions in the prologue, this
428 could only be an initializing store, which isn't too bad to
429 skip. The consequences of not including arg-to-stack spills
430 are more serious, though --- you don't see the proper values
431 of the arguments. */
432 if ((save_link_state == 3 || save_link_state == 4)
433 && ((instr[0] == 0x50 /* st %rA, D(%rX,%rB) */
434 && (instr[1] & 0xf) == 0 /* %rX is zero, no index reg */
435 && is_arg_reg ((instr[1] >> 4) & 0xf)
436 && ((instr[2] >> 4) & 0xf) == frame_pointer_regidx)
437 || (instr[0] == 0x90 /* stm %rA, %rB, D(%rC) */
438 && is_arg_reg ((instr[1] >> 4) & 0xf)
439 && is_arg_reg (instr[1] & 0xf)
440 && ((instr[2] >> 4) & 0xf) == frame_pointer_regidx)))
441 {
442 valid_prologue = 1;
443 continue;
444 }
445
446 /* check for STD */
447 if (instr[0] == 0x60 && (instr[2] >> 4) == 0xf)
448 {
449 regidx = instr[1] >> 4;
450 if (regidx == 0 || regidx == 2)
451 varargs_state = 1;
452 if (fprs_saved[regidx])
453 {
454 good_prologue = 0;
455 break;
456 }
457 fprs_saved[regidx] = 1;
458 if (saved_regs)
459 {
460 save_reg_addr = orig_sp + (((instr[2] & 0xf) << 8) + instr[3]);
461 saved_regs[S390_FP0_REGNUM + regidx] = save_reg_addr;
462 }
463 valid_prologue = 1;
464 continue;
465 }
466
467
468 if (const_pool_state == 0)
469 {
470
471 if (GDB_TARGET_IS_ESAME)
472 {
473 /* Check for larl CONST_POOL_REGIDX,offset on ESAME */
474 if ((instr[0] == 0xc0)
475 && (instr[1] == (CONST_POOL_REGIDX << 4)))
476 {
477 const_pool_state = 2;
478 valid_prologue = 1;
479 continue;
480 }
481 }
482 else
483 {
484 /* Check for BASR gpr13,gpr0 used to load constant pool pointer to r13 in old compiler */
485 if (instr[0] == 0xd && (instr[1] & 0xf) == 0
486 && ((instr[1] >> 4) == CONST_POOL_REGIDX))
487 {
488 const_pool_state = 1;
489 valid_prologue = 1;
490 continue;
491 }
492 }
493 /* Check for new fangled bras %r13,newpc to load new constant pool */
494 /* embedded in code, older pre abi compilers also emitted this stuff. */
495 if ((instr[0] == 0xa7) && ((instr[1] & 0xf) == 0x5) &&
496 ((instr[1] >> 4) == CONST_POOL_REGIDX)
497 && ((instr[2] & 0x80) == 0))
498 {
499 const_pool_state = 2;
500 test_pc +=
501 (((((instr[2] & 0xf) << 8) + instr[3]) << 1) - instrlen);
502 valid_prologue = 1;
503 continue;
504 }
505 }
506 /* Check for AGHI or AHI CONST_POOL_REGIDX,val */
507 if (const_pool_state == 1 && (instr[0] == 0xa7) &&
508 ((GDB_TARGET_IS_ESAME &&
509 (instr[1] == ((CONST_POOL_REGIDX << 4) | 0xb))) ||
510 (instr[1] == ((CONST_POOL_REGIDX << 4) | 0xa))))
511 {
512 const_pool_state = 2;
513 valid_prologue = 1;
514 continue;
515 }
516 /* Check for LGR or LR gprx,15 */
517 if ((GDB_TARGET_IS_ESAME &&
518 instr[0] == 0xb9 && instr[1] == 0x04 && (instr[3] & 0xf) == 0xf) ||
519 (instr[0] == 0x18 && (instr[1] & 0xf) == 0xf))
520 {
521 if (GDB_TARGET_IS_ESAME)
522 regidx = instr[3] >> 4;
523 else
524 regidx = instr[1] >> 4;
525 if (save_link_state == 0 && regidx != 0xb)
526 {
527 /* Almost defintely code for
528 decrementing the stack pointer
529 ( i.e. a non leaf function
530 or else leaf with locals ) */
531 save_link_regidx = regidx;
532 save_link_state = 1;
533 valid_prologue = 1;
534 continue;
535 }
536 /* We use this frame pointer for alloca
537 unfortunately we need to assume its gpr11
538 otherwise we would need a smarter prologue
539 walker. */
540 if (!frame_pointer_found && regidx == 0xb)
541 {
542 frame_pointer_regidx = 0xb;
543 frame_pointer_found = 1;
544 if (fextra_info)
545 fextra_info->frame_pointer_saved_pc = test_pc;
546 valid_prologue = 1;
547 continue;
548 }
549 }
550 /* Check for AHI or AGHI gpr15,val */
551 if (save_link_state == 1 && (instr[0] == 0xa7) &&
552 ((GDB_TARGET_IS_ESAME && (instr[1] == 0xfb)) || (instr[1] == 0xfa)))
553 {
554 if (fextra_info)
555 fextra_info->stack_bought =
556 -extract_signed_integer (&instr[2], 2);
557 save_link_state = 3;
558 valid_prologue = 1;
559 continue;
560 }
561 /* Alternatively check for the complex construction for
562 buying more than 32k of stack
563 BRAS gprx,.+8
564 long val
565 s %r15,0(%gprx) gprx currently r1 */
566 if ((save_link_state == 1) && (instr[0] == 0xa7)
567 && ((instr[1] & 0xf) == 0x5) && (instr[2] == 0)
568 && (instr[3] == 0x4) && ((instr[1] >> 4) != CONST_POOL_REGIDX))
569 {
570 subtract_sp_regidx = instr[1] >> 4;
571 save_link_state = 2;
572 if (fextra_info)
573 target_read_memory (test_pc + instrlen,
574 (char *) &fextra_info->stack_bought,
575 sizeof (fextra_info->stack_bought));
576 test_pc += 4;
577 valid_prologue = 1;
578 continue;
579 }
580 if (save_link_state == 2 && instr[0] == 0x5b
581 && instr[1] == 0xf0 &&
582 instr[2] == (subtract_sp_regidx << 4) && instr[3] == 0)
583 {
584 save_link_state = 3;
585 valid_prologue = 1;
586 continue;
587 }
588 /* check for LA gprx,offset(15) used for varargs */
589 if ((instr[0] == 0x41) && ((instr[2] >> 4) == 0xf) &&
590 ((instr[1] & 0xf) == 0))
591 {
592 /* some code uses gpr7 to point to outgoing args */
593 if (((instr[1] >> 4) == 7) && (save_link_state == 0) &&
594 ((instr[2] & 0xf) == 0)
595 && (instr[3] == S390_STACK_FRAME_OVERHEAD))
596 {
597 valid_prologue = 1;
598 continue;
599 }
600 if (varargs_state == 1)
601 {
602 varargs_state = 2;
603 valid_prologue = 1;
604 continue;
605 }
606 }
607 /* Check for a GOT load */
608
609 if (GDB_TARGET_IS_ESAME)
610 {
611 /* Check for larl GOT_REGIDX, on ESAME */
612 if ((got_state == 0) && (instr[0] == 0xc0)
613 && (instr[1] == (GOT_REGIDX << 4)))
614 {
615 got_state = 2;
616 valid_prologue = 1;
617 continue;
618 }
619 }
620 else
621 {
622 /* check for l GOT_REGIDX,x(CONST_POOL_REGIDX) */
623 if (got_state == 0 && const_pool_state == 2 && instr[0] == 0x58
624 && (instr[2] == (CONST_POOL_REGIDX << 4))
625 && ((instr[1] >> 4) == GOT_REGIDX))
626 {
627 got_state = 1;
628 got_load_addr = test_pc;
629 got_load_len = instrlen;
630 valid_prologue = 1;
631 continue;
632 }
633 /* Check for subsequent ar got_regidx,basr_regidx */
634 if (got_state == 1 && instr[0] == 0x1a &&
635 instr[1] == ((GOT_REGIDX << 4) | CONST_POOL_REGIDX))
636 {
637 got_state = 2;
638 valid_prologue = 1;
639 continue;
640 }
641 }
642 }
643 while (valid_prologue && good_prologue);
644 if (good_prologue)
645 {
646 /* If this function doesn't reference the global offset table,
647 then the compiler may use r12 for other things. If the last
648 instruction we saw was a load of r12 from the constant pool,
649 with no subsequent add to make the address PC-relative, then
650 the load was probably a genuine body instruction; don't treat
651 it as part of the prologue. */
652 if (got_state == 1
653 && got_load_addr + got_load_len == test_pc)
654 {
655 test_pc = got_load_addr;
656 instrlen = got_load_len;
657 }
658
659 good_prologue = (((const_pool_state == 0) || (const_pool_state == 2)) &&
660 ((save_link_state == 0) || (save_link_state == 4)) &&
661 ((varargs_state == 0) || (varargs_state == 2)));
662 }
663 if (fextra_info)
664 {
665 fextra_info->good_prologue = good_prologue;
666 fextra_info->skip_prologue_function_start =
667 (good_prologue ? test_pc : pc);
668 }
669 if (saved_regs)
670 /* The SP's element of the saved_regs array holds the old SP,
671 not the address at which it is saved. */
672 saved_regs[S390_SP_REGNUM] = orig_sp;
673 return err;
674 }
675
676
677 static int
678 s390_check_function_end (CORE_ADDR pc)
679 {
680 bfd_byte instr[S390_MAX_INSTR_SIZE];
681 disassemble_info info;
682 int regidx, instrlen;
683
684 info.read_memory_func = deprecated_tm_print_insn_info.read_memory_func;
685 instrlen = s390_readinstruction (instr, pc, &info);
686 if (instrlen < 0)
687 return -1;
688 /* check for BR */
689 if (instrlen != 2 || instr[0] != 07 || (instr[1] >> 4) != 0xf)
690 return 0;
691 regidx = instr[1] & 0xf;
692 /* Check for LMG or LG */
693 instrlen =
694 s390_readinstruction (instr, pc - (GDB_TARGET_IS_ESAME ? 6 : 4), &info);
695 if (instrlen < 0)
696 return -1;
697 if (GDB_TARGET_IS_ESAME)
698 {
699
700 if (instrlen != 6 || instr[0] != 0xeb || instr[5] != 0x4)
701 return 0;
702 }
703 else if (instrlen != 4 || instr[0] != 0x98)
704 {
705 return 0;
706 }
707 if ((instr[2] >> 4) != 0xf)
708 return 0;
709 if (regidx == 14)
710 return 1;
711 instrlen = s390_readinstruction (instr, pc - (GDB_TARGET_IS_ESAME ? 12 : 8),
712 &info);
713 if (instrlen < 0)
714 return -1;
715 if (GDB_TARGET_IS_ESAME)
716 {
717 /* Check for LG */
718 if (instrlen != 6 || instr[0] != 0xe3 || instr[5] != 0x4)
719 return 0;
720 }
721 else
722 {
723 /* Check for L */
724 if (instrlen != 4 || instr[0] != 0x58)
725 return 0;
726 }
727 if (instr[2] >> 4 != 0xf)
728 return 0;
729 if (instr[1] >> 4 != regidx)
730 return 0;
731 return 1;
732 }
733
734 static CORE_ADDR
735 s390_sniff_pc_function_start (CORE_ADDR pc, struct frame_info *fi)
736 {
737 CORE_ADDR function_start, test_function_start;
738 int loop_cnt, err, function_end;
739 struct frame_extra_info fextra_info;
740 function_start = get_pc_function_start (pc);
741
742 if (function_start == 0)
743 {
744 test_function_start = pc;
745 if (test_function_start & 1)
746 return 0; /* This has to be bogus */
747 loop_cnt = 0;
748 do
749 {
750
751 err =
752 s390_get_frame_info (test_function_start, &fextra_info, fi, 1);
753 loop_cnt++;
754 test_function_start -= 2;
755 function_end = s390_check_function_end (test_function_start);
756 }
757 while (!(function_end == 1 || err || loop_cnt >= 4096 ||
758 (fextra_info.good_prologue)));
759 if (fextra_info.good_prologue)
760 function_start = fextra_info.function_start;
761 else if (function_end == 1)
762 function_start = test_function_start;
763 }
764 return function_start;
765 }
766
767
768
769 static CORE_ADDR
770 s390_function_start (struct frame_info *fi)
771 {
772 CORE_ADDR function_start = 0;
773
774 if (get_frame_extra_info (fi) && get_frame_extra_info (fi)->initialised)
775 function_start = get_frame_extra_info (fi)->function_start;
776 else if (get_frame_pc (fi))
777 function_start = get_frame_func (fi);
778 return function_start;
779 }
780
781
782
783
784 static int
785 s390_frameless_function_invocation (struct frame_info *fi)
786 {
787 struct frame_extra_info fextra_info, *fextra_info_ptr;
788 int frameless = 0;
789
790 if (get_next_frame (fi) == NULL) /* no may be frameless */
791 {
792 if (get_frame_extra_info (fi))
793 fextra_info_ptr = get_frame_extra_info (fi);
794 else
795 {
796 fextra_info_ptr = &fextra_info;
797 s390_get_frame_info (s390_sniff_pc_function_start (get_frame_pc (fi), fi),
798 fextra_info_ptr, fi, 1);
799 }
800 frameless = ((fextra_info_ptr->stack_bought == 0));
801 }
802 return frameless;
803
804 }
805
806
807 static int
808 s390_is_sigreturn (CORE_ADDR pc, struct frame_info *sighandler_fi,
809 CORE_ADDR *sregs, CORE_ADDR *sigcaller_pc)
810 {
811 bfd_byte instr[S390_MAX_INSTR_SIZE];
812 disassemble_info info;
813 int instrlen;
814 CORE_ADDR scontext;
815 int retval = 0;
816 CORE_ADDR orig_sp;
817 CORE_ADDR temp_sregs;
818
819 scontext = temp_sregs = 0;
820
821 info.read_memory_func = deprecated_tm_print_insn_info.read_memory_func;
822 instrlen = s390_readinstruction (instr, pc, &info);
823 if (sigcaller_pc)
824 *sigcaller_pc = 0;
825 if (((instrlen == S390_SYSCALL_SIZE) &&
826 (instr[0] == S390_SYSCALL_OPCODE)) &&
827 ((instr[1] == s390_NR_sigreturn) || (instr[1] == s390_NR_rt_sigreturn)))
828 {
829 if (sighandler_fi)
830 {
831 if (s390_frameless_function_invocation (sighandler_fi))
832 orig_sp = get_frame_base (sighandler_fi);
833 else
834 orig_sp = ADDR_BITS_REMOVE ((CORE_ADDR)
835 read_memory_integer (get_frame_base (sighandler_fi),
836 S390_GPR_SIZE));
837 if (orig_sp && sigcaller_pc)
838 {
839 scontext = orig_sp + S390_SIGNAL_FRAMESIZE;
840 if (pc == scontext && instr[1] == s390_NR_rt_sigreturn)
841 {
842 /* We got a new style rt_signal */
843 /* get address of read ucontext->uc_mcontext */
844 temp_sregs = orig_sp + (GDB_TARGET_IS_ESAME ?
845 S390X_UC_MCONTEXT_OFFSET :
846 S390_UC_MCONTEXT_OFFSET);
847 }
848 else
849 {
850 /* read sigcontext->sregs */
851 temp_sregs = ADDR_BITS_REMOVE ((CORE_ADDR)
852 read_memory_integer (scontext
853 +
854 (GDB_TARGET_IS_ESAME
855 ?
856 S390X_SIGCONTEXT_SREGS_OFFSET
857 :
858 S390_SIGCONTEXT_SREGS_OFFSET),
859 S390_GPR_SIZE));
860
861 }
862 /* read sigregs->psw.addr */
863 *sigcaller_pc =
864 ADDR_BITS_REMOVE ((CORE_ADDR)
865 read_memory_integer (temp_sregs +
866 REGISTER_BYTE
867 (S390_PC_REGNUM),
868 S390_PSW_ADDR_SIZE));
869 }
870 }
871 retval = 1;
872 }
873 if (sregs)
874 *sregs = temp_sregs;
875 return retval;
876 }
877
878 /*
879 We need to do something better here but this will keep us out of trouble
880 for the moment.
881 For some reason the blockframe.c calls us with fi->next->fromleaf
882 so this seems of little use to us. */
883 static CORE_ADDR
884 s390_init_frame_pc_first (int next_fromleaf, struct frame_info *fi)
885 {
886 CORE_ADDR sigcaller_pc;
887 CORE_ADDR pc = 0;
888 if (next_fromleaf)
889 {
890 pc = ADDR_BITS_REMOVE (read_register (S390_RETADDR_REGNUM));
891 /* fix signal handlers */
892 }
893 else if (get_next_frame (fi) && get_frame_pc (get_next_frame (fi)))
894 pc = s390_frame_saved_pc_nofix (get_next_frame (fi));
895 if (pc && get_next_frame (fi) && get_frame_base (get_next_frame (fi))
896 && s390_is_sigreturn (pc, get_next_frame (fi), NULL, &sigcaller_pc))
897 {
898 pc = sigcaller_pc;
899 }
900 return pc;
901 }
902
903 static void
904 s390_init_extra_frame_info (int fromleaf, struct frame_info *fi)
905 {
906 frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
907 if (get_frame_pc (fi))
908 s390_get_frame_info (s390_sniff_pc_function_start (get_frame_pc (fi), fi),
909 get_frame_extra_info (fi), fi, 1);
910 else
911 s390_memset_extra_info (get_frame_extra_info (fi));
912 }
913
914 /* If saved registers of frame FI are not known yet, read and cache them.
915 &FEXTRA_INFOP contains struct frame_extra_info; TDATAP can be NULL,
916 in which case the framedata are read. */
917
918 static void
919 s390_frame_init_saved_regs (struct frame_info *fi)
920 {
921
922 int quick;
923
924 if (get_frame_saved_regs (fi) == NULL)
925 {
926 /* zalloc memsets the saved regs */
927 frame_saved_regs_zalloc (fi);
928 if (get_frame_pc (fi))
929 {
930 quick = (get_frame_extra_info (fi)
931 && get_frame_extra_info (fi)->initialised
932 && get_frame_extra_info (fi)->good_prologue);
933 s390_get_frame_info (quick
934 ? get_frame_extra_info (fi)->function_start
935 : s390_sniff_pc_function_start (get_frame_pc (fi), fi),
936 get_frame_extra_info (fi), fi, !quick);
937 }
938 }
939 }
940
941
942
943 static CORE_ADDR
944 s390_frame_saved_pc_nofix (struct frame_info *fi)
945 {
946 if (get_frame_extra_info (fi) && get_frame_extra_info (fi)->saved_pc_valid)
947 return get_frame_extra_info (fi)->saved_pc;
948
949 if (deprecated_generic_find_dummy_frame (get_frame_pc (fi),
950 get_frame_base (fi)))
951 return deprecated_read_register_dummy (get_frame_pc (fi),
952 get_frame_base (fi), S390_PC_REGNUM);
953
954 s390_frame_init_saved_regs (fi);
955 if (get_frame_extra_info (fi))
956 {
957 get_frame_extra_info (fi)->saved_pc_valid = 1;
958 if (get_frame_extra_info (fi)->good_prologue
959 && get_frame_saved_regs (fi)[S390_RETADDR_REGNUM])
960 get_frame_extra_info (fi)->saved_pc
961 = ADDR_BITS_REMOVE (read_memory_integer
962 (get_frame_saved_regs (fi)[S390_RETADDR_REGNUM],
963 S390_GPR_SIZE));
964 else
965 get_frame_extra_info (fi)->saved_pc
966 = ADDR_BITS_REMOVE (read_register (S390_RETADDR_REGNUM));
967 return get_frame_extra_info (fi)->saved_pc;
968 }
969 return 0;
970 }
971
972 static CORE_ADDR
973 s390_frame_saved_pc (struct frame_info *fi)
974 {
975 CORE_ADDR saved_pc = 0, sig_pc;
976
977 if (get_frame_extra_info (fi)
978 && get_frame_extra_info (fi)->sig_fixed_saved_pc_valid)
979 return get_frame_extra_info (fi)->sig_fixed_saved_pc;
980 saved_pc = s390_frame_saved_pc_nofix (fi);
981
982 if (get_frame_extra_info (fi))
983 {
984 get_frame_extra_info (fi)->sig_fixed_saved_pc_valid = 1;
985 if (saved_pc)
986 {
987 if (s390_is_sigreturn (saved_pc, fi, NULL, &sig_pc))
988 saved_pc = sig_pc;
989 }
990 get_frame_extra_info (fi)->sig_fixed_saved_pc = saved_pc;
991 }
992 return saved_pc;
993 }
994
995
996
997
998 /* We want backtraces out of signal handlers so we don't set
999 (get_frame_type (thisframe) == SIGTRAMP_FRAME) to 1 */
1000
1001 static CORE_ADDR
1002 s390_frame_chain (struct frame_info *thisframe)
1003 {
1004 CORE_ADDR prev_fp = 0;
1005
1006 if (deprecated_generic_find_dummy_frame (get_frame_pc (thisframe),
1007 get_frame_base (thisframe)))
1008 return deprecated_read_register_dummy (get_frame_pc (thisframe),
1009 get_frame_base (thisframe),
1010 S390_SP_REGNUM);
1011 else
1012 {
1013 int sigreturn = 0;
1014 CORE_ADDR sregs = 0;
1015 struct frame_extra_info prev_fextra_info;
1016
1017 memset (&prev_fextra_info, 0, sizeof (prev_fextra_info));
1018 if (get_frame_pc (thisframe))
1019 {
1020 CORE_ADDR saved_pc, sig_pc;
1021
1022 saved_pc = s390_frame_saved_pc_nofix (thisframe);
1023 if (saved_pc)
1024 {
1025 if ((sigreturn =
1026 s390_is_sigreturn (saved_pc, thisframe, &sregs, &sig_pc)))
1027 saved_pc = sig_pc;
1028 s390_get_frame_info (s390_sniff_pc_function_start
1029 (saved_pc, NULL), &prev_fextra_info, NULL,
1030 1);
1031 }
1032 }
1033 if (sigreturn)
1034 {
1035 /* read sigregs,regs.gprs[11 or 15] */
1036 prev_fp = read_memory_integer (sregs +
1037 REGISTER_BYTE (S390_GP0_REGNUM +
1038 (prev_fextra_info.
1039 frame_pointer_saved_pc
1040 ? 11 : 15)),
1041 S390_GPR_SIZE);
1042 get_frame_extra_info (thisframe)->sigcontext = sregs;
1043 }
1044 else
1045 {
1046 if (get_frame_saved_regs (thisframe))
1047 {
1048 int regno;
1049
1050 if (prev_fextra_info.frame_pointer_saved_pc
1051 && get_frame_saved_regs (thisframe)[S390_FRAME_REGNUM])
1052 regno = S390_FRAME_REGNUM;
1053 else
1054 regno = S390_SP_REGNUM;
1055
1056 if (get_frame_saved_regs (thisframe)[regno])
1057 {
1058 /* The SP's entry of `saved_regs' is special. */
1059 if (regno == S390_SP_REGNUM)
1060 prev_fp = get_frame_saved_regs (thisframe)[regno];
1061 else
1062 prev_fp =
1063 read_memory_integer (get_frame_saved_regs (thisframe)[regno],
1064 S390_GPR_SIZE);
1065 }
1066 }
1067 }
1068 }
1069 return ADDR_BITS_REMOVE (prev_fp);
1070 }
1071
1072 /*
1073 Whether struct frame_extra_info is actually needed I'll have to figure
1074 out as our frames are similar to rs6000 there is a possibility
1075 i386 dosen't need it. */
1076
1077
1078
1079 /* a given return value in `regbuf' with a type `valtype', extract and copy its
1080 value into `valbuf' */
1081 static void
1082 s390_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
1083 {
1084 /* floats and doubles are returned in fpr0. fpr's have a size of 8 bytes.
1085 We need to truncate the return value into float size (4 byte) if
1086 necessary. */
1087 int len = TYPE_LENGTH (valtype);
1088
1089 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1090 memcpy (valbuf, &regbuf[REGISTER_BYTE (S390_FP0_REGNUM)], len);
1091 else
1092 {
1093 int offset = 0;
1094 /* return value is copied starting from r2. */
1095 if (TYPE_LENGTH (valtype) < S390_GPR_SIZE)
1096 offset = S390_GPR_SIZE - TYPE_LENGTH (valtype);
1097 memcpy (valbuf,
1098 regbuf + REGISTER_BYTE (S390_GP0_REGNUM + 2) + offset,
1099 TYPE_LENGTH (valtype));
1100 }
1101 }
1102
1103
1104 static char *
1105 s390_promote_integer_argument (struct type *valtype, char *valbuf,
1106 char *reg_buff, int *arglen)
1107 {
1108 char *value = valbuf;
1109 int len = TYPE_LENGTH (valtype);
1110
1111 if (len < S390_GPR_SIZE)
1112 {
1113 /* We need to upgrade this value to a register to pass it correctly */
1114 int idx, diff = S390_GPR_SIZE - len, negative =
1115 (!TYPE_UNSIGNED (valtype) && value[0] & 0x80);
1116 for (idx = 0; idx < S390_GPR_SIZE; idx++)
1117 {
1118 reg_buff[idx] = (idx < diff ? (negative ? 0xff : 0x0) :
1119 value[idx - diff]);
1120 }
1121 value = reg_buff;
1122 *arglen = S390_GPR_SIZE;
1123 }
1124 else
1125 {
1126 if (len & (S390_GPR_SIZE - 1))
1127 {
1128 fprintf_unfiltered (gdb_stderr,
1129 "s390_promote_integer_argument detected an argument not "
1130 "a multiple of S390_GPR_SIZE & greater than S390_GPR_SIZE "
1131 "we might not deal with this correctly.\n");
1132 }
1133 *arglen = len;
1134 }
1135
1136 return (value);
1137 }
1138
1139 static void
1140 s390_store_return_value (struct type *valtype, char *valbuf)
1141 {
1142 int arglen;
1143 char *reg_buff = alloca (max (S390_FPR_SIZE, DEPRECATED_REGISTER_SIZE)), *value;
1144
1145 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1146 {
1147 if (TYPE_LENGTH (valtype) == 4
1148 || TYPE_LENGTH (valtype) == 8)
1149 deprecated_write_register_bytes (REGISTER_BYTE (S390_FP0_REGNUM),
1150 valbuf, TYPE_LENGTH (valtype));
1151 else
1152 error ("GDB is unable to return `long double' values "
1153 "on this architecture.");
1154 }
1155 else
1156 {
1157 value =
1158 s390_promote_integer_argument (valtype, valbuf, reg_buff, &arglen);
1159 /* Everything else is returned in GPR2 and up. */
1160 deprecated_write_register_bytes (REGISTER_BYTE (S390_GP0_REGNUM + 2),
1161 value, arglen);
1162 }
1163 }
1164 static int
1165 gdb_print_insn_s390 (bfd_vma memaddr, disassemble_info * info)
1166 {
1167 bfd_byte instrbuff[S390_MAX_INSTR_SIZE];
1168 int instrlen, cnt;
1169
1170 instrlen = s390_readinstruction (instrbuff, (CORE_ADDR) memaddr, info);
1171 if (instrlen < 0)
1172 {
1173 (*info->memory_error_func) (instrlen, memaddr, info);
1174 return -1;
1175 }
1176 for (cnt = 0; cnt < instrlen; cnt++)
1177 info->fprintf_func (info->stream, "%02X ", instrbuff[cnt]);
1178 for (cnt = instrlen; cnt < S390_MAX_INSTR_SIZE; cnt++)
1179 info->fprintf_func (info->stream, " ");
1180 instrlen = print_insn_s390 (memaddr, info);
1181 return instrlen;
1182 }
1183
1184
1185
1186 /* Not the most efficent code in the world */
1187 static int
1188 s390_fp_regnum (void)
1189 {
1190 int regno = S390_SP_REGNUM;
1191 struct frame_extra_info fextra_info;
1192
1193 CORE_ADDR pc = ADDR_BITS_REMOVE (read_register (S390_PC_REGNUM));
1194
1195 s390_get_frame_info (s390_sniff_pc_function_start (pc, NULL), &fextra_info,
1196 NULL, 1);
1197 if (fextra_info.frame_pointer_saved_pc)
1198 regno = S390_FRAME_REGNUM;
1199 return regno;
1200 }
1201
1202 static CORE_ADDR
1203 s390_read_fp (void)
1204 {
1205 return read_register (s390_fp_regnum ());
1206 }
1207
1208
1209 static void
1210 s390_pop_frame_regular (struct frame_info *frame)
1211 {
1212 int regnum;
1213
1214 write_register (S390_PC_REGNUM, DEPRECATED_FRAME_SAVED_PC (frame));
1215
1216 /* Restore any saved registers. */
1217 if (get_frame_saved_regs (frame))
1218 {
1219 for (regnum = 0; regnum < NUM_REGS; regnum++)
1220 if (get_frame_saved_regs (frame)[regnum] != 0)
1221 {
1222 ULONGEST value;
1223
1224 value = read_memory_unsigned_integer (get_frame_saved_regs (frame)[regnum],
1225 REGISTER_RAW_SIZE (regnum));
1226 write_register (regnum, value);
1227 }
1228
1229 /* Actually cut back the stack. Remember that the SP's element of
1230 saved_regs is the old SP itself, not the address at which it is
1231 saved. */
1232 write_register (S390_SP_REGNUM, get_frame_saved_regs (frame)[S390_SP_REGNUM]);
1233 }
1234
1235 /* Throw away any cached frame information. */
1236 flush_cached_frames ();
1237 }
1238
1239
1240 /* Destroy the innermost (Top-Of-Stack) stack frame, restoring the
1241 machine state that was in effect before the frame was created.
1242 Used in the contexts of the "return" command, and of
1243 target function calls from the debugger. */
1244 static void
1245 s390_pop_frame (void)
1246 {
1247 /* This function checks for and handles generic dummy frames, and
1248 calls back to our function for ordinary frames. */
1249 generic_pop_current_frame (s390_pop_frame_regular);
1250 }
1251
1252
1253 /* Return non-zero if TYPE is an integer-like type, zero otherwise.
1254 "Integer-like" types are those that should be passed the way
1255 integers are: integers, enums, ranges, characters, and booleans. */
1256 static int
1257 is_integer_like (struct type *type)
1258 {
1259 enum type_code code = TYPE_CODE (type);
1260
1261 return (code == TYPE_CODE_INT
1262 || code == TYPE_CODE_ENUM
1263 || code == TYPE_CODE_RANGE
1264 || code == TYPE_CODE_CHAR
1265 || code == TYPE_CODE_BOOL);
1266 }
1267
1268
1269 /* Return non-zero if TYPE is a pointer-like type, zero otherwise.
1270 "Pointer-like" types are those that should be passed the way
1271 pointers are: pointers and references. */
1272 static int
1273 is_pointer_like (struct type *type)
1274 {
1275 enum type_code code = TYPE_CODE (type);
1276
1277 return (code == TYPE_CODE_PTR
1278 || code == TYPE_CODE_REF);
1279 }
1280
1281
1282 /* Return non-zero if TYPE is a `float singleton' or `double
1283 singleton', zero otherwise.
1284
1285 A `T singleton' is a struct type with one member, whose type is
1286 either T or a `T singleton'. So, the following are all float
1287 singletons:
1288
1289 struct { float x };
1290 struct { struct { float x; } x; };
1291 struct { struct { struct { float x; } x; } x; };
1292
1293 ... and so on.
1294
1295 WHY THE HECK DO WE CARE ABOUT THIS??? Well, it turns out that GCC
1296 passes all float singletons and double singletons as if they were
1297 simply floats or doubles. This is *not* what the ABI says it
1298 should do. */
1299 static int
1300 is_float_singleton (struct type *type)
1301 {
1302 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
1303 && TYPE_NFIELDS (type) == 1
1304 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_FLT
1305 || is_float_singleton (TYPE_FIELD_TYPE (type, 0))));
1306 }
1307
1308
1309 /* Return non-zero if TYPE is a struct-like type, zero otherwise.
1310 "Struct-like" types are those that should be passed as structs are:
1311 structs and unions.
1312
1313 As an odd quirk, not mentioned in the ABI, GCC passes float and
1314 double singletons as if they were a plain float, double, etc. (The
1315 corresponding union types are handled normally.) So we exclude
1316 those types here. *shrug* */
1317 static int
1318 is_struct_like (struct type *type)
1319 {
1320 enum type_code code = TYPE_CODE (type);
1321
1322 return (code == TYPE_CODE_UNION
1323 || (code == TYPE_CODE_STRUCT && ! is_float_singleton (type)));
1324 }
1325
1326
1327 /* Return non-zero if TYPE is a float-like type, zero otherwise.
1328 "Float-like" types are those that should be passed as
1329 floating-point values are.
1330
1331 You'd think this would just be floats, doubles, long doubles, etc.
1332 But as an odd quirk, not mentioned in the ABI, GCC passes float and
1333 double singletons as if they were a plain float, double, etc. (The
1334 corresponding union types are handled normally.) So we exclude
1335 those types here. *shrug* */
1336 static int
1337 is_float_like (struct type *type)
1338 {
1339 return (TYPE_CODE (type) == TYPE_CODE_FLT
1340 || is_float_singleton (type));
1341 }
1342
1343
1344 /* Return non-zero if TYPE is considered a `DOUBLE_OR_FLOAT', as
1345 defined by the parameter passing conventions described in the
1346 "GNU/Linux for S/390 ELF Application Binary Interface Supplement".
1347 Otherwise, return zero. */
1348 static int
1349 is_double_or_float (struct type *type)
1350 {
1351 return (is_float_like (type)
1352 && (TYPE_LENGTH (type) == 4
1353 || TYPE_LENGTH (type) == 8));
1354 }
1355
1356
1357 /* Return non-zero if TYPE is considered a `SIMPLE_ARG', as defined by
1358 the parameter passing conventions described in the "GNU/Linux for
1359 S/390 ELF Application Binary Interface Supplement". Return zero
1360 otherwise. */
1361 static int
1362 is_simple_arg (struct type *type)
1363 {
1364 unsigned length = TYPE_LENGTH (type);
1365
1366 /* This is almost a direct translation of the ABI's language, except
1367 that we have to exclude 8-byte structs; those are DOUBLE_ARGs. */
1368 return ((is_integer_like (type) && length <= 4)
1369 || is_pointer_like (type)
1370 || (is_struct_like (type) && length != 8)
1371 || (is_float_like (type) && length == 16));
1372 }
1373
1374
1375 /* Return non-zero if TYPE should be passed as a pointer to a copy,
1376 zero otherwise. TYPE must be a SIMPLE_ARG, as recognized by
1377 `is_simple_arg'. */
1378 static int
1379 pass_by_copy_ref (struct type *type)
1380 {
1381 unsigned length = TYPE_LENGTH (type);
1382
1383 return ((is_struct_like (type) && length != 1 && length != 2 && length != 4)
1384 || (is_float_like (type) && length == 16));
1385 }
1386
1387
1388 /* Return ARG, a `SIMPLE_ARG', sign-extended or zero-extended to a full
1389 word as required for the ABI. */
1390 static LONGEST
1391 extend_simple_arg (struct value *arg)
1392 {
1393 struct type *type = VALUE_TYPE (arg);
1394
1395 /* Even structs get passed in the least significant bits of the
1396 register / memory word. It's not really right to extract them as
1397 an integer, but it does take care of the extension. */
1398 if (TYPE_UNSIGNED (type))
1399 return extract_unsigned_integer (VALUE_CONTENTS (arg),
1400 TYPE_LENGTH (type));
1401 else
1402 return extract_signed_integer (VALUE_CONTENTS (arg),
1403 TYPE_LENGTH (type));
1404 }
1405
1406
1407 /* Return non-zero if TYPE is a `DOUBLE_ARG', as defined by the
1408 parameter passing conventions described in the "GNU/Linux for S/390
1409 ELF Application Binary Interface Supplement". Return zero
1410 otherwise. */
1411 static int
1412 is_double_arg (struct type *type)
1413 {
1414 unsigned length = TYPE_LENGTH (type);
1415
1416 return ((is_integer_like (type)
1417 || is_struct_like (type))
1418 && length == 8);
1419 }
1420
1421
1422 /* Round ADDR up to the next N-byte boundary. N must be a power of
1423 two. */
1424 static CORE_ADDR
1425 round_up (CORE_ADDR addr, int n)
1426 {
1427 /* Check that N is really a power of two. */
1428 gdb_assert (n && (n & (n-1)) == 0);
1429 return ((addr + n - 1) & -n);
1430 }
1431
1432
1433 /* Round ADDR down to the next N-byte boundary. N must be a power of
1434 two. */
1435 static CORE_ADDR
1436 round_down (CORE_ADDR addr, int n)
1437 {
1438 /* Check that N is really a power of two. */
1439 gdb_assert (n && (n & (n-1)) == 0);
1440 return (addr & -n);
1441 }
1442
1443
1444 /* Return the alignment required by TYPE. */
1445 static int
1446 alignment_of (struct type *type)
1447 {
1448 int alignment;
1449
1450 if (is_integer_like (type)
1451 || is_pointer_like (type)
1452 || TYPE_CODE (type) == TYPE_CODE_FLT)
1453 alignment = TYPE_LENGTH (type);
1454 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
1455 || TYPE_CODE (type) == TYPE_CODE_UNION)
1456 {
1457 int i;
1458
1459 alignment = 1;
1460 for (i = 0; i < TYPE_NFIELDS (type); i++)
1461 {
1462 int field_alignment = alignment_of (TYPE_FIELD_TYPE (type, i));
1463
1464 if (field_alignment > alignment)
1465 alignment = field_alignment;
1466 }
1467 }
1468 else
1469 alignment = 1;
1470
1471 /* Check that everything we ever return is a power of two. Lots of
1472 code doesn't want to deal with aligning things to arbitrary
1473 boundaries. */
1474 gdb_assert ((alignment & (alignment - 1)) == 0);
1475
1476 return alignment;
1477 }
1478
1479
1480 /* Put the actual parameter values pointed to by ARGS[0..NARGS-1] in
1481 place to be passed to a function, as specified by the "GNU/Linux
1482 for S/390 ELF Application Binary Interface Supplement".
1483
1484 SP is the current stack pointer. We must put arguments, links,
1485 padding, etc. whereever they belong, and return the new stack
1486 pointer value.
1487
1488 If STRUCT_RETURN is non-zero, then the function we're calling is
1489 going to return a structure by value; STRUCT_ADDR is the address of
1490 a block we've allocated for it on the stack.
1491
1492 Our caller has taken care of any type promotions needed to satisfy
1493 prototypes or the old K&R argument-passing rules. */
1494 static CORE_ADDR
1495 s390_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
1496 int struct_return, CORE_ADDR struct_addr)
1497 {
1498 int i;
1499 int pointer_size = (TARGET_PTR_BIT / TARGET_CHAR_BIT);
1500
1501 /* The number of arguments passed by reference-to-copy. */
1502 int num_copies;
1503
1504 /* If the i'th argument is passed as a reference to a copy, then
1505 copy_addr[i] is the address of the copy we made. */
1506 CORE_ADDR *copy_addr = alloca (nargs * sizeof (CORE_ADDR));
1507
1508 /* Build the reference-to-copy area. */
1509 num_copies = 0;
1510 for (i = 0; i < nargs; i++)
1511 {
1512 struct value *arg = args[i];
1513 struct type *type = VALUE_TYPE (arg);
1514 unsigned length = TYPE_LENGTH (type);
1515
1516 if (is_simple_arg (type)
1517 && pass_by_copy_ref (type))
1518 {
1519 sp -= length;
1520 sp = round_down (sp, alignment_of (type));
1521 write_memory (sp, VALUE_CONTENTS (arg), length);
1522 copy_addr[i] = sp;
1523 num_copies++;
1524 }
1525 }
1526
1527 /* Reserve space for the parameter area. As a conservative
1528 simplification, we assume that everything will be passed on the
1529 stack. */
1530 {
1531 int i;
1532
1533 for (i = 0; i < nargs; i++)
1534 {
1535 struct value *arg = args[i];
1536 struct type *type = VALUE_TYPE (arg);
1537 int length = TYPE_LENGTH (type);
1538
1539 sp = round_down (sp, alignment_of (type));
1540
1541 /* SIMPLE_ARG values get extended to 32 bits. Assume every
1542 argument is. */
1543 if (length < 4) length = 4;
1544 sp -= length;
1545 }
1546 }
1547
1548 /* Include space for any reference-to-copy pointers. */
1549 sp = round_down (sp, pointer_size);
1550 sp -= num_copies * pointer_size;
1551
1552 /* After all that, make sure it's still aligned on an eight-byte
1553 boundary. */
1554 sp = round_down (sp, 8);
1555
1556 /* Finally, place the actual parameters, working from SP towards
1557 higher addresses. The code above is supposed to reserve enough
1558 space for this. */
1559 {
1560 int fr = 0;
1561 int gr = 2;
1562 CORE_ADDR starg = sp;
1563
1564 for (i = 0; i < nargs; i++)
1565 {
1566 struct value *arg = args[i];
1567 struct type *type = VALUE_TYPE (arg);
1568
1569 if (is_double_or_float (type)
1570 && fr <= 2)
1571 {
1572 /* When we store a single-precision value in an FP register,
1573 it occupies the leftmost bits. */
1574 deprecated_write_register_bytes (REGISTER_BYTE (S390_FP0_REGNUM + fr),
1575 VALUE_CONTENTS (arg),
1576 TYPE_LENGTH (type));
1577 fr += 2;
1578 }
1579 else if (is_simple_arg (type)
1580 && gr <= 6)
1581 {
1582 /* Do we need to pass a pointer to our copy of this
1583 argument? */
1584 if (pass_by_copy_ref (type))
1585 write_register (S390_GP0_REGNUM + gr, copy_addr[i]);
1586 else
1587 write_register (S390_GP0_REGNUM + gr, extend_simple_arg (arg));
1588
1589 gr++;
1590 }
1591 else if (is_double_arg (type)
1592 && gr <= 5)
1593 {
1594 deprecated_write_register_gen (S390_GP0_REGNUM + gr,
1595 VALUE_CONTENTS (arg));
1596 deprecated_write_register_gen (S390_GP0_REGNUM + gr + 1,
1597 VALUE_CONTENTS (arg) + 4);
1598 gr += 2;
1599 }
1600 else
1601 {
1602 /* The `OTHER' case. */
1603 enum type_code code = TYPE_CODE (type);
1604 unsigned length = TYPE_LENGTH (type);
1605
1606 /* If we skipped r6 because we couldn't fit a DOUBLE_ARG
1607 in it, then don't go back and use it again later. */
1608 if (is_double_arg (type) && gr == 6)
1609 gr = 7;
1610
1611 if (is_simple_arg (type))
1612 {
1613 /* Simple args are always either extended to 32 bits,
1614 or pointers. */
1615 starg = round_up (starg, 4);
1616
1617 /* Do we need to pass a pointer to our copy of this
1618 argument? */
1619 if (pass_by_copy_ref (type))
1620 write_memory_signed_integer (starg, pointer_size,
1621 copy_addr[i]);
1622 else
1623 /* Simple args are always extended to 32 bits. */
1624 write_memory_signed_integer (starg, 4,
1625 extend_simple_arg (arg));
1626 starg += 4;
1627 }
1628 else
1629 {
1630 /* You'd think we should say:
1631 starg = round_up (starg, alignment_of (type));
1632 Unfortunately, GCC seems to simply align the stack on
1633 a four-byte boundary, even when passing doubles. */
1634 starg = round_up (starg, 4);
1635 write_memory (starg, VALUE_CONTENTS (arg), length);
1636 starg += length;
1637 }
1638 }
1639 }
1640 }
1641
1642 /* Allocate the standard frame areas: the register save area, the
1643 word reserved for the compiler (which seems kind of meaningless),
1644 and the back chain pointer. */
1645 sp -= 96;
1646
1647 /* Write the back chain pointer into the first word of the stack
1648 frame. This will help us get backtraces from within functions
1649 called from GDB. */
1650 write_memory_unsigned_integer (sp, (TARGET_PTR_BIT / TARGET_CHAR_BIT),
1651 deprecated_read_fp ());
1652
1653 return sp;
1654 }
1655
1656
1657 static CORE_ADDR
1658 s390_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1659 {
1660 /* Both the 32- and 64-bit ABI's say that the stack pointer should
1661 always be aligned on an eight-byte boundary. */
1662 return (addr & -8);
1663 }
1664
1665
1666 static int
1667 s390_use_struct_convention (int gcc_p, struct type *value_type)
1668 {
1669 enum type_code code = TYPE_CODE (value_type);
1670
1671 return (code == TYPE_CODE_STRUCT
1672 || code == TYPE_CODE_UNION);
1673 }
1674
1675
1676 /* Return the GDB type object for the "standard" data type
1677 of data in register N. */
1678 static struct type *
1679 s390_register_virtual_type (int regno)
1680 {
1681 if (S390_FP0_REGNUM <= regno && regno < S390_FP0_REGNUM + S390_NUM_FPRS)
1682 return builtin_type_double;
1683 else
1684 return builtin_type_int;
1685 }
1686
1687
1688 static struct type *
1689 s390x_register_virtual_type (int regno)
1690 {
1691 return (regno == S390_FPC_REGNUM) ||
1692 (regno >= S390_FIRST_ACR && regno <= S390_LAST_ACR) ? builtin_type_int :
1693 (regno >= S390_FP0_REGNUM) ? builtin_type_double : builtin_type_long;
1694 }
1695
1696
1697
1698 static void
1699 s390_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1700 {
1701 write_register (S390_GP0_REGNUM + 2, addr);
1702 }
1703
1704
1705
1706 static const unsigned char *
1707 s390_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
1708 {
1709 static unsigned char breakpoint[] = { 0x0, 0x1 };
1710
1711 *lenptr = sizeof (breakpoint);
1712 return breakpoint;
1713 }
1714
1715 /* Advance PC across any function entry prologue instructions to reach some
1716 "real" code. */
1717 static CORE_ADDR
1718 s390_skip_prologue (CORE_ADDR pc)
1719 {
1720 struct frame_extra_info fextra_info;
1721
1722 s390_get_frame_info (pc, &fextra_info, NULL, 1);
1723 return fextra_info.skip_prologue_function_start;
1724 }
1725
1726 /* Immediately after a function call, return the saved pc.
1727 Can't go through the frames for this because on some machines
1728 the new frame is not set up until the new function executes
1729 some instructions. */
1730 static CORE_ADDR
1731 s390_saved_pc_after_call (struct frame_info *frame)
1732 {
1733 return ADDR_BITS_REMOVE (read_register (S390_RETADDR_REGNUM));
1734 }
1735
1736 static CORE_ADDR
1737 s390_addr_bits_remove (CORE_ADDR addr)
1738 {
1739 return (addr) & 0x7fffffff;
1740 }
1741
1742
1743 static CORE_ADDR
1744 s390_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
1745 {
1746 write_register (S390_RETADDR_REGNUM, CALL_DUMMY_ADDRESS ());
1747 return sp;
1748 }
1749
1750 static int
1751 s390_address_class_type_flags (int byte_size, int dwarf2_addr_class)
1752 {
1753 if (byte_size == 4)
1754 return TYPE_FLAG_ADDRESS_CLASS_1;
1755 else
1756 return 0;
1757 }
1758
1759 static const char *
1760 s390_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
1761 {
1762 if (type_flags & TYPE_FLAG_ADDRESS_CLASS_1)
1763 return "mode32";
1764 else
1765 return NULL;
1766 }
1767
1768 static int
1769 s390_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name,
1770 int *type_flags_ptr)
1771 {
1772 if (strcmp (name, "mode32") == 0)
1773 {
1774 *type_flags_ptr = TYPE_FLAG_ADDRESS_CLASS_1;
1775 return 1;
1776 }
1777 else
1778 return 0;
1779 }
1780
1781 static struct gdbarch *
1782 s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1783 {
1784 static LONGEST s390_call_dummy_words[] = { 0 };
1785 struct gdbarch *gdbarch;
1786 struct gdbarch_tdep *tdep;
1787 int elf_flags;
1788
1789 /* First see if there is already a gdbarch that can satisfy the request. */
1790 arches = gdbarch_list_lookup_by_info (arches, &info);
1791 if (arches != NULL)
1792 return arches->gdbarch;
1793
1794 /* None found: is the request for a s390 architecture? */
1795 if (info.bfd_arch_info->arch != bfd_arch_s390)
1796 return NULL; /* No; then it's not for us. */
1797
1798 /* Yes: create a new gdbarch for the specified machine type. */
1799 gdbarch = gdbarch_alloc (&info, NULL);
1800
1801 /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
1802 ready to unwind the PC first (see frame.c:get_prev_frame()). */
1803 set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
1804
1805 set_gdbarch_believe_pcc_promotion (gdbarch, 0);
1806 set_gdbarch_char_signed (gdbarch, 0);
1807
1808 set_gdbarch_frame_args_skip (gdbarch, 0);
1809 set_gdbarch_deprecated_frame_chain (gdbarch, s390_frame_chain);
1810 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, s390_frame_init_saved_regs);
1811 set_gdbarch_deprecated_store_struct_return (gdbarch, s390_store_struct_return);
1812 set_gdbarch_deprecated_extract_return_value (gdbarch, s390_extract_return_value);
1813 set_gdbarch_deprecated_store_return_value (gdbarch, s390_store_return_value);
1814 /* Amount PC must be decremented by after a breakpoint. This is
1815 often the number of bytes returned by BREAKPOINT_FROM_PC but not
1816 always. */
1817 set_gdbarch_decr_pc_after_break (gdbarch, 2);
1818 set_gdbarch_deprecated_pop_frame (gdbarch, s390_pop_frame);
1819 /* Stack grows downward. */
1820 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1821 /* Offset from address of function to start of its code.
1822 Zero on most machines. */
1823 set_gdbarch_function_start_offset (gdbarch, 0);
1824 set_gdbarch_deprecated_max_register_raw_size (gdbarch, 8);
1825 set_gdbarch_deprecated_max_register_virtual_size (gdbarch, 8);
1826 set_gdbarch_breakpoint_from_pc (gdbarch, s390_breakpoint_from_pc);
1827 set_gdbarch_skip_prologue (gdbarch, s390_skip_prologue);
1828 set_gdbarch_deprecated_init_extra_frame_info (gdbarch, s390_init_extra_frame_info);
1829 set_gdbarch_deprecated_init_frame_pc_first (gdbarch, s390_init_frame_pc_first);
1830 set_gdbarch_deprecated_target_read_fp (gdbarch, s390_read_fp);
1831 /* This function that tells us whether the function invocation represented
1832 by FI does not have a frame on the stack associated with it. If it
1833 does not, FRAMELESS is set to 1, else 0. */
1834 set_gdbarch_frameless_function_invocation (gdbarch,
1835 s390_frameless_function_invocation);
1836 /* Return saved PC from a frame */
1837 set_gdbarch_deprecated_frame_saved_pc (gdbarch, s390_frame_saved_pc);
1838 /* DEPRECATED_FRAME_CHAIN takes a frame's nominal address and
1839 produces the frame's chain-pointer. */
1840 set_gdbarch_deprecated_frame_chain (gdbarch, s390_frame_chain);
1841 set_gdbarch_deprecated_saved_pc_after_call (gdbarch, s390_saved_pc_after_call);
1842 set_gdbarch_deprecated_register_byte (gdbarch, s390_register_byte);
1843 set_gdbarch_pc_regnum (gdbarch, S390_PC_REGNUM);
1844 set_gdbarch_sp_regnum (gdbarch, S390_SP_REGNUM);
1845 set_gdbarch_deprecated_fp_regnum (gdbarch, S390_FP_REGNUM);
1846 set_gdbarch_fp0_regnum (gdbarch, S390_FP0_REGNUM);
1847 set_gdbarch_num_regs (gdbarch, S390_NUM_REGS);
1848 set_gdbarch_cannot_fetch_register (gdbarch, s390_cannot_fetch_register);
1849 set_gdbarch_cannot_store_register (gdbarch, s390_cannot_fetch_register);
1850 set_gdbarch_use_struct_convention (gdbarch, s390_use_struct_convention);
1851 set_gdbarch_register_name (gdbarch, s390_register_name);
1852 set_gdbarch_stab_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum);
1853 set_gdbarch_dwarf_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum);
1854 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum);
1855 set_gdbarch_deprecated_extract_struct_value_address
1856 (gdbarch, generic_cannot_extract_struct_value_address);
1857
1858 /* Parameters for inferior function calls. */
1859 set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
1860 set_gdbarch_frame_align (gdbarch, s390_frame_align);
1861 set_gdbarch_deprecated_push_arguments (gdbarch, s390_push_arguments);
1862 set_gdbarch_deprecated_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
1863 set_gdbarch_deprecated_push_return_address (gdbarch,
1864 s390_push_return_address);
1865 set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, sizeof (s390_call_dummy_words));
1866 set_gdbarch_deprecated_call_dummy_words (gdbarch, s390_call_dummy_words);
1867
1868 switch (info.bfd_arch_info->mach)
1869 {
1870 case bfd_mach_s390_31:
1871 set_gdbarch_deprecated_register_size (gdbarch, 4);
1872 set_gdbarch_deprecated_register_raw_size (gdbarch, s390_register_raw_size);
1873 set_gdbarch_deprecated_register_virtual_size (gdbarch, s390_register_raw_size);
1874 set_gdbarch_deprecated_register_virtual_type (gdbarch, s390_register_virtual_type);
1875
1876 set_gdbarch_addr_bits_remove (gdbarch, s390_addr_bits_remove);
1877 set_gdbarch_deprecated_register_bytes (gdbarch, S390_REGISTER_BYTES);
1878 break;
1879 case bfd_mach_s390_64:
1880 set_gdbarch_deprecated_register_size (gdbarch, 8);
1881 set_gdbarch_deprecated_register_raw_size (gdbarch, s390x_register_raw_size);
1882 set_gdbarch_deprecated_register_virtual_size (gdbarch, s390x_register_raw_size);
1883 set_gdbarch_deprecated_register_virtual_type (gdbarch, s390x_register_virtual_type);
1884
1885 set_gdbarch_long_bit (gdbarch, 64);
1886 set_gdbarch_long_long_bit (gdbarch, 64);
1887 set_gdbarch_ptr_bit (gdbarch, 64);
1888 set_gdbarch_deprecated_register_bytes (gdbarch, S390X_REGISTER_BYTES);
1889 set_gdbarch_address_class_type_flags (gdbarch,
1890 s390_address_class_type_flags);
1891 set_gdbarch_address_class_type_flags_to_name (gdbarch,
1892 s390_address_class_type_flags_to_name);
1893 set_gdbarch_address_class_name_to_type_flags (gdbarch,
1894 s390_address_class_name_to_type_flags);
1895 break;
1896 }
1897
1898 /* Should be using push_dummy_call. */
1899 set_gdbarch_deprecated_dummy_write_sp (gdbarch, deprecated_write_sp);
1900
1901 return gdbarch;
1902 }
1903
1904
1905
1906 extern initialize_file_ftype _initialize_s390_tdep; /* -Wmissing-prototypes */
1907
1908 void
1909 _initialize_s390_tdep (void)
1910 {
1911
1912 /* Hook us into the gdbarch mechanism. */
1913 register_gdbarch_init (bfd_arch_s390, s390_gdbarch_init);
1914 if (!deprecated_tm_print_insn) /* Someone may have already set it */
1915 deprecated_tm_print_insn = gdb_print_insn_s390;
1916 }
This page took 0.072209 seconds and 4 git commands to generate.