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