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