]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/s390-tdep.c
2003-04-28 Andrew Cagney <cagney@redhat.com>
[thirdparty/binutils-gdb.git] / gdb / s390-tdep.c
1 /* Target-dependent code for GDB, the GNU debugger.
2
3 Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
4
5 Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
6 for IBM Deutschland Entwicklung GmbH, IBM Corporation.
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23 02111-1307, USA. */
24
25 #define S390_TDEP /* for special macros in tm-s390.h */
26 #include <defs.h>
27 #include "arch-utils.h"
28 #include "frame.h"
29 #include "inferior.h"
30 #include "symtab.h"
31 #include "target.h"
32 #include "gdbcore.h"
33 #include "gdbcmd.h"
34 #include "symfile.h"
35 #include "objfiles.h"
36 #include "tm.h"
37 #include "../bfd/bfd.h"
38 #include "floatformat.h"
39 #include "regcache.h"
40 #include "value.h"
41 #include "gdb_assert.h"
42
43
44
45
46 /* Number of bytes of storage in the actual machine representation
47 for register N. */
48 int
49 s390_register_raw_size (int reg_nr)
50 {
51 if (S390_FP0_REGNUM <= reg_nr
52 && reg_nr < S390_FP0_REGNUM + S390_NUM_FPRS)
53 return S390_FPR_SIZE;
54 else
55 return 4;
56 }
57
58 int
59 s390x_register_raw_size (int reg_nr)
60 {
61 return (reg_nr == S390_FPC_REGNUM)
62 || (reg_nr >= S390_FIRST_ACR && reg_nr <= S390_LAST_ACR) ? 4 : 8;
63 }
64
65 int
66 s390_cannot_fetch_register (int regno)
67 {
68 return (regno >= S390_FIRST_CR && regno < (S390_FIRST_CR + 9)) ||
69 (regno >= (S390_FIRST_CR + 12) && regno <= S390_LAST_CR);
70 }
71
72 int
73 s390_register_byte (int reg_nr)
74 {
75 if (reg_nr <= S390_GP_LAST_REGNUM)
76 return reg_nr * S390_GPR_SIZE;
77 if (reg_nr <= S390_LAST_ACR)
78 return S390_ACR0_OFFSET + (((reg_nr) - S390_FIRST_ACR) * S390_ACR_SIZE);
79 if (reg_nr <= S390_LAST_CR)
80 return S390_CR0_OFFSET + (((reg_nr) - S390_FIRST_CR) * S390_CR_SIZE);
81 if (reg_nr == S390_FPC_REGNUM)
82 return S390_FPC_OFFSET;
83 else
84 return S390_FP0_OFFSET + (((reg_nr) - S390_FP0_REGNUM) * S390_FPR_SIZE);
85 }
86
87 #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
104 struct 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
120 static CORE_ADDR s390_frame_saved_pc_nofix (struct frame_info *fi);
121
122 int
123 s390_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];
137 if (instrlen > 2)
138 {
139 if ((*info->read_memory_func) (at + 2, &instr[2], instrlen - 2, info))
140 return -1;
141 }
142 return instrlen;
143 }
144
145 static void
146 s390_memset_extra_info (struct frame_extra_info *fextra_info)
147 {
148 memset (fextra_info, 0, sizeof (struct frame_extra_info));
149 }
150
151
152
153 const char *
154 s390_register_name (int reg_nr)
155 {
156 static char *register_names[] = {
157 "pswm", "pswa",
158 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
159 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
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",
165 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
166 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15"
167 };
168
169 if (reg_nr <= S390_LAST_REGNUM)
170 return register_names[reg_nr];
171 else
172 return NULL;
173 }
174
175
176
177
178 int
179 s390_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
190 /* Return true if REGIDX is the number of a register used to pass
191 arguments, false otherwise. */
192 static int
193 is_arg_reg (int regidx)
194 {
195 return 2 <= regidx && regidx <= 6;
196 }
197
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
213 int
214 s390_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;
226 int const_pool_state;
227 int varargs_state;
228 int loop_cnt, gdb_gpr_store, gdb_fpr_store;
229 int offset, expected_offset;
230 int err = 0;
231 disassemble_info info;
232
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
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. */
262 int save_link_state = 0;
263 int save_link_regidx, subtract_sp_regidx;
264
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. */
276 int got_state= 0;
277 CORE_ADDR got_load_addr = 0, got_load_len = 0;
278
279 const_pool_state = varargs_state = 0;
280
281 memset (gprs_saved, 0, sizeof (gprs_saved));
282 memset (fprs_saved, 0, sizeof (fprs_saved));
283 info.read_memory_func = dis_asm_read_memory;
284
285 save_link_regidx = subtract_sp_regidx = 0;
286 if (fextra_info)
287 {
288 if (fi && get_frame_base (fi))
289 {
290 orig_sp = get_frame_base (fi);
291 if (! init_extra_info && fextra_info->initialised)
292 orig_sp += fextra_info->stack_bought;
293 saved_regs = get_frame_saved_regs (fi);
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;
319 if (saved_regs && fextra_info && get_next_frame (fi)
320 && get_frame_extra_info (get_next_frame (fi))
321 && get_frame_extra_info (get_next_frame (fi))->sigcontext)
322 {
323 /* We are backtracing from a signal handler */
324 save_reg_addr = get_frame_extra_info (get_next_frame (fi))->sigcontext +
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 }
331 save_reg_addr = get_frame_extra_info (get_next_frame (fi))->sigcontext +
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
425 /* Check for an fp-relative STG, ST, or STM. This is probably
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)
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)))
442 {
443 valid_prologue = 1;
444 continue;
445 }
446
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
565 long val
566 s %r15,0(%gprx) gprx currently r1 */
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 {
628 got_state = 1;
629 got_load_addr = test_pc;
630 got_load_len = instrlen;
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 {
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)) &&
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 }
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;
674 return err;
675 }
676
677
678 int
679 s390_check_function_end (CORE_ADDR pc)
680 {
681 bfd_byte instr[S390_MAX_INSTR_SIZE];
682 disassemble_info info;
683 int regidx, instrlen;
684
685 info.read_memory_func = dis_asm_read_memory;
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
735 static CORE_ADDR
736 s390_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
770 CORE_ADDR
771 s390_function_start (struct frame_info *fi)
772 {
773 CORE_ADDR function_start = 0;
774
775 if (get_frame_extra_info (fi) && get_frame_extra_info (fi)->initialised)
776 function_start = get_frame_extra_info (fi)->function_start;
777 else if (get_frame_pc (fi))
778 function_start = get_frame_func (fi);
779 return function_start;
780 }
781
782
783
784
785 int
786 s390_frameless_function_invocation (struct frame_info *fi)
787 {
788 struct frame_extra_info fextra_info, *fextra_info_ptr;
789 int frameless = 0;
790
791 if (get_next_frame (fi) == NULL) /* no may be frameless */
792 {
793 if (get_frame_extra_info (fi))
794 fextra_info_ptr = get_frame_extra_info (fi);
795 else
796 {
797 fextra_info_ptr = &fextra_info;
798 s390_get_frame_info (s390_sniff_pc_function_start (get_frame_pc (fi), fi),
799 fextra_info_ptr, fi, 1);
800 }
801 frameless = ((fextra_info_ptr->stack_bought == 0));
802 }
803 return frameless;
804
805 }
806
807
808 static int
809 s390_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
822 info.read_memory_func = dis_asm_read_memory;
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))
833 orig_sp = get_frame_base (sighandler_fi);
834 else
835 orig_sp = ADDR_BITS_REMOVE ((CORE_ADDR)
836 read_memory_integer (get_frame_base (sighandler_fi),
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. */
884 CORE_ADDR
885 s390_init_frame_pc_first (int next_fromleaf, struct frame_info *fi)
886 {
887 CORE_ADDR sigcaller_pc;
888 CORE_ADDR pc = 0;
889 if (next_fromleaf)
890 {
891 pc = ADDR_BITS_REMOVE (read_register (S390_RETADDR_REGNUM));
892 /* fix signal handlers */
893 }
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))
898 {
899 pc = sigcaller_pc;
900 }
901 return pc;
902 }
903
904 void
905 s390_init_extra_frame_info (int fromleaf, struct frame_info *fi)
906 {
907 frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
908 if (get_frame_pc (fi))
909 s390_get_frame_info (s390_sniff_pc_function_start (get_frame_pc (fi), fi),
910 get_frame_extra_info (fi), fi, 1);
911 else
912 s390_memset_extra_info (get_frame_extra_info (fi));
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
919 void
920 s390_frame_init_saved_regs (struct frame_info *fi)
921 {
922
923 int quick;
924
925 if (get_frame_saved_regs (fi) == NULL)
926 {
927 /* zalloc memsets the saved regs */
928 frame_saved_regs_zalloc (fi);
929 if (get_frame_pc (fi))
930 {
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);
938 }
939 }
940 }
941
942
943
944 CORE_ADDR
945 s390_frame_args_address (struct frame_info *fi)
946 {
947
948 /* Apparently gdb already knows gdb_args_offset itself */
949 return get_frame_base (fi);
950 }
951
952
953 static CORE_ADDR
954 s390_frame_saved_pc_nofix (struct frame_info *fi)
955 {
956 if (get_frame_extra_info (fi) && get_frame_extra_info (fi)->saved_pc_valid)
957 return get_frame_extra_info (fi)->saved_pc;
958
959 if (deprecated_generic_find_dummy_frame (get_frame_pc (fi),
960 get_frame_base (fi)))
961 return deprecated_read_register_dummy (get_frame_pc (fi),
962 get_frame_base (fi), S390_PC_REGNUM);
963
964 s390_frame_init_saved_regs (fi);
965 if (get_frame_extra_info (fi))
966 {
967 get_frame_extra_info (fi)->saved_pc_valid = 1;
968 if (get_frame_extra_info (fi)->good_prologue
969 && get_frame_saved_regs (fi)[S390_RETADDR_REGNUM])
970 get_frame_extra_info (fi)->saved_pc
971 = ADDR_BITS_REMOVE (read_memory_integer
972 (get_frame_saved_regs (fi)[S390_RETADDR_REGNUM],
973 S390_GPR_SIZE));
974 else
975 get_frame_extra_info (fi)->saved_pc
976 = ADDR_BITS_REMOVE (read_register (S390_RETADDR_REGNUM));
977 return get_frame_extra_info (fi)->saved_pc;
978 }
979 return 0;
980 }
981
982 CORE_ADDR
983 s390_frame_saved_pc (struct frame_info *fi)
984 {
985 CORE_ADDR saved_pc = 0, sig_pc;
986
987 if (get_frame_extra_info (fi)
988 && get_frame_extra_info (fi)->sig_fixed_saved_pc_valid)
989 return get_frame_extra_info (fi)->sig_fixed_saved_pc;
990 saved_pc = s390_frame_saved_pc_nofix (fi);
991
992 if (get_frame_extra_info (fi))
993 {
994 get_frame_extra_info (fi)->sig_fixed_saved_pc_valid = 1;
995 if (saved_pc)
996 {
997 if (s390_is_sigreturn (saved_pc, fi, NULL, &sig_pc))
998 saved_pc = sig_pc;
999 }
1000 get_frame_extra_info (fi)->sig_fixed_saved_pc = saved_pc;
1001 }
1002 return saved_pc;
1003 }
1004
1005
1006
1007
1008 /* We want backtraces out of signal handlers so we don't set
1009 (get_frame_type (thisframe) == SIGTRAMP_FRAME) to 1 */
1010
1011 CORE_ADDR
1012 s390_frame_chain (struct frame_info *thisframe)
1013 {
1014 CORE_ADDR prev_fp = 0;
1015
1016 if (deprecated_generic_find_dummy_frame (get_frame_pc (thisframe),
1017 get_frame_base (thisframe)))
1018 return deprecated_read_register_dummy (get_frame_pc (thisframe),
1019 get_frame_base (thisframe),
1020 S390_SP_REGNUM);
1021 else
1022 {
1023 int sigreturn = 0;
1024 CORE_ADDR sregs = 0;
1025 struct frame_extra_info prev_fextra_info;
1026
1027 memset (&prev_fextra_info, 0, sizeof (prev_fextra_info));
1028 if (get_frame_pc (thisframe))
1029 {
1030 CORE_ADDR saved_pc, sig_pc;
1031
1032 saved_pc = s390_frame_saved_pc_nofix (thisframe);
1033 if (saved_pc)
1034 {
1035 if ((sigreturn =
1036 s390_is_sigreturn (saved_pc, thisframe, &sregs, &sig_pc)))
1037 saved_pc = sig_pc;
1038 s390_get_frame_info (s390_sniff_pc_function_start
1039 (saved_pc, NULL), &prev_fextra_info, NULL,
1040 1);
1041 }
1042 }
1043 if (sigreturn)
1044 {
1045 /* read sigregs,regs.gprs[11 or 15] */
1046 prev_fp = read_memory_integer (sregs +
1047 REGISTER_BYTE (S390_GP0_REGNUM +
1048 (prev_fextra_info.
1049 frame_pointer_saved_pc
1050 ? 11 : 15)),
1051 S390_GPR_SIZE);
1052 get_frame_extra_info (thisframe)->sigcontext = sregs;
1053 }
1054 else
1055 {
1056 if (get_frame_saved_regs (thisframe))
1057 {
1058 int regno;
1059
1060 if (prev_fextra_info.frame_pointer_saved_pc
1061 && get_frame_saved_regs (thisframe)[S390_FRAME_REGNUM])
1062 regno = S390_FRAME_REGNUM;
1063 else
1064 regno = S390_SP_REGNUM;
1065
1066 if (get_frame_saved_regs (thisframe)[regno])
1067 {
1068 /* The SP's entry of `saved_regs' is special. */
1069 if (regno == S390_SP_REGNUM)
1070 prev_fp = get_frame_saved_regs (thisframe)[regno];
1071 else
1072 prev_fp =
1073 read_memory_integer (get_frame_saved_regs (thisframe)[regno],
1074 S390_GPR_SIZE);
1075 }
1076 }
1077 }
1078 }
1079 return ADDR_BITS_REMOVE (prev_fp);
1080 }
1081
1082 /*
1083 Whether struct frame_extra_info is actually needed I'll have to figure
1084 out as our frames are similar to rs6000 there is a possibility
1085 i386 dosen't need it. */
1086
1087
1088
1089 /* a given return value in `regbuf' with a type `valtype', extract and copy its
1090 value into `valbuf' */
1091 void
1092 s390_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
1093 {
1094 /* floats and doubles are returned in fpr0. fpr's have a size of 8 bytes.
1095 We need to truncate the return value into float size (4 byte) if
1096 necessary. */
1097 int len = TYPE_LENGTH (valtype);
1098
1099 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1100 memcpy (valbuf, &regbuf[REGISTER_BYTE (S390_FP0_REGNUM)], len);
1101 else
1102 {
1103 int offset = 0;
1104 /* return value is copied starting from r2. */
1105 if (TYPE_LENGTH (valtype) < S390_GPR_SIZE)
1106 offset = S390_GPR_SIZE - TYPE_LENGTH (valtype);
1107 memcpy (valbuf,
1108 regbuf + REGISTER_BYTE (S390_GP0_REGNUM + 2) + offset,
1109 TYPE_LENGTH (valtype));
1110 }
1111 }
1112
1113
1114 static char *
1115 s390_promote_integer_argument (struct type *valtype, char *valbuf,
1116 char *reg_buff, int *arglen)
1117 {
1118 char *value = valbuf;
1119 int len = TYPE_LENGTH (valtype);
1120
1121 if (len < S390_GPR_SIZE)
1122 {
1123 /* We need to upgrade this value to a register to pass it correctly */
1124 int idx, diff = S390_GPR_SIZE - len, negative =
1125 (!TYPE_UNSIGNED (valtype) && value[0] & 0x80);
1126 for (idx = 0; idx < S390_GPR_SIZE; idx++)
1127 {
1128 reg_buff[idx] = (idx < diff ? (negative ? 0xff : 0x0) :
1129 value[idx - diff]);
1130 }
1131 value = reg_buff;
1132 *arglen = S390_GPR_SIZE;
1133 }
1134 else
1135 {
1136 if (len & (S390_GPR_SIZE - 1))
1137 {
1138 fprintf_unfiltered (gdb_stderr,
1139 "s390_promote_integer_argument detected an argument not "
1140 "a multiple of S390_GPR_SIZE & greater than S390_GPR_SIZE "
1141 "we might not deal with this correctly.\n");
1142 }
1143 *arglen = len;
1144 }
1145
1146 return (value);
1147 }
1148
1149 void
1150 s390_store_return_value (struct type *valtype, char *valbuf)
1151 {
1152 int arglen;
1153 char *reg_buff = alloca (max (S390_FPR_SIZE, REGISTER_SIZE)), *value;
1154
1155 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1156 {
1157 if (TYPE_LENGTH (valtype) == 4
1158 || TYPE_LENGTH (valtype) == 8)
1159 deprecated_write_register_bytes (REGISTER_BYTE (S390_FP0_REGNUM),
1160 valbuf, TYPE_LENGTH (valtype));
1161 else
1162 error ("GDB is unable to return `long double' values "
1163 "on this architecture.");
1164 }
1165 else
1166 {
1167 value =
1168 s390_promote_integer_argument (valtype, valbuf, reg_buff, &arglen);
1169 /* Everything else is returned in GPR2 and up. */
1170 deprecated_write_register_bytes (REGISTER_BYTE (S390_GP0_REGNUM + 2),
1171 value, arglen);
1172 }
1173 }
1174 static int
1175 gdb_print_insn_s390 (bfd_vma memaddr, disassemble_info * info)
1176 {
1177 bfd_byte instrbuff[S390_MAX_INSTR_SIZE];
1178 int instrlen, cnt;
1179
1180 instrlen = s390_readinstruction (instrbuff, (CORE_ADDR) memaddr, info);
1181 if (instrlen < 0)
1182 {
1183 (*info->memory_error_func) (instrlen, memaddr, info);
1184 return -1;
1185 }
1186 for (cnt = 0; cnt < instrlen; cnt++)
1187 info->fprintf_func (info->stream, "%02X ", instrbuff[cnt]);
1188 for (cnt = instrlen; cnt < S390_MAX_INSTR_SIZE; cnt++)
1189 info->fprintf_func (info->stream, " ");
1190 instrlen = print_insn_s390 (memaddr, info);
1191 return instrlen;
1192 }
1193
1194
1195
1196 /* Not the most efficent code in the world */
1197 int
1198 s390_fp_regnum (void)
1199 {
1200 int regno = S390_SP_REGNUM;
1201 struct frame_extra_info fextra_info;
1202
1203 CORE_ADDR pc = ADDR_BITS_REMOVE (read_register (S390_PC_REGNUM));
1204
1205 s390_get_frame_info (s390_sniff_pc_function_start (pc, NULL), &fextra_info,
1206 NULL, 1);
1207 if (fextra_info.frame_pointer_saved_pc)
1208 regno = S390_FRAME_REGNUM;
1209 return regno;
1210 }
1211
1212 CORE_ADDR
1213 s390_read_fp (void)
1214 {
1215 return read_register (s390_fp_regnum ());
1216 }
1217
1218
1219 static void
1220 s390_pop_frame_regular (struct frame_info *frame)
1221 {
1222 int regnum;
1223
1224 write_register (S390_PC_REGNUM, DEPRECATED_FRAME_SAVED_PC (frame));
1225
1226 /* Restore any saved registers. */
1227 if (get_frame_saved_regs (frame))
1228 {
1229 for (regnum = 0; regnum < NUM_REGS; regnum++)
1230 if (get_frame_saved_regs (frame)[regnum] != 0)
1231 {
1232 ULONGEST value;
1233
1234 value = read_memory_unsigned_integer (get_frame_saved_regs (frame)[regnum],
1235 REGISTER_RAW_SIZE (regnum));
1236 write_register (regnum, value);
1237 }
1238
1239 /* Actually cut back the stack. Remember that the SP's element of
1240 saved_regs is the old SP itself, not the address at which it is
1241 saved. */
1242 write_register (S390_SP_REGNUM, get_frame_saved_regs (frame)[S390_SP_REGNUM]);
1243 }
1244
1245 /* Throw away any cached frame information. */
1246 flush_cached_frames ();
1247 }
1248
1249
1250 /* Destroy the innermost (Top-Of-Stack) stack frame, restoring the
1251 machine state that was in effect before the frame was created.
1252 Used in the contexts of the "return" command, and of
1253 target function calls from the debugger. */
1254 void
1255 s390_pop_frame (void)
1256 {
1257 /* This function checks for and handles generic dummy frames, and
1258 calls back to our function for ordinary frames. */
1259 generic_pop_current_frame (s390_pop_frame_regular);
1260 }
1261
1262
1263 /* Return non-zero if TYPE is an integer-like type, zero otherwise.
1264 "Integer-like" types are those that should be passed the way
1265 integers are: integers, enums, ranges, characters, and booleans. */
1266 static int
1267 is_integer_like (struct type *type)
1268 {
1269 enum type_code code = TYPE_CODE (type);
1270
1271 return (code == TYPE_CODE_INT
1272 || code == TYPE_CODE_ENUM
1273 || code == TYPE_CODE_RANGE
1274 || code == TYPE_CODE_CHAR
1275 || code == TYPE_CODE_BOOL);
1276 }
1277
1278
1279 /* Return non-zero if TYPE is a pointer-like type, zero otherwise.
1280 "Pointer-like" types are those that should be passed the way
1281 pointers are: pointers and references. */
1282 static int
1283 is_pointer_like (struct type *type)
1284 {
1285 enum type_code code = TYPE_CODE (type);
1286
1287 return (code == TYPE_CODE_PTR
1288 || code == TYPE_CODE_REF);
1289 }
1290
1291
1292 /* Return non-zero if TYPE is a `float singleton' or `double
1293 singleton', zero otherwise.
1294
1295 A `T singleton' is a struct type with one member, whose type is
1296 either T or a `T singleton'. So, the following are all float
1297 singletons:
1298
1299 struct { float x };
1300 struct { struct { float x; } x; };
1301 struct { struct { struct { float x; } x; } x; };
1302
1303 ... and so on.
1304
1305 WHY THE HECK DO WE CARE ABOUT THIS??? Well, it turns out that GCC
1306 passes all float singletons and double singletons as if they were
1307 simply floats or doubles. This is *not* what the ABI says it
1308 should do. */
1309 static int
1310 is_float_singleton (struct type *type)
1311 {
1312 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
1313 && TYPE_NFIELDS (type) == 1
1314 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_FLT
1315 || is_float_singleton (TYPE_FIELD_TYPE (type, 0))));
1316 }
1317
1318
1319 /* Return non-zero if TYPE is a struct-like type, zero otherwise.
1320 "Struct-like" types are those that should be passed as structs are:
1321 structs and unions.
1322
1323 As an odd quirk, not mentioned in the ABI, GCC passes float and
1324 double singletons as if they were a plain float, double, etc. (The
1325 corresponding union types are handled normally.) So we exclude
1326 those types here. *shrug* */
1327 static int
1328 is_struct_like (struct type *type)
1329 {
1330 enum type_code code = TYPE_CODE (type);
1331
1332 return (code == TYPE_CODE_UNION
1333 || (code == TYPE_CODE_STRUCT && ! is_float_singleton (type)));
1334 }
1335
1336
1337 /* Return non-zero if TYPE is a float-like type, zero otherwise.
1338 "Float-like" types are those that should be passed as
1339 floating-point values are.
1340
1341 You'd think this would just be floats, doubles, long doubles, etc.
1342 But as an odd quirk, not mentioned in the ABI, GCC passes float and
1343 double singletons as if they were a plain float, double, etc. (The
1344 corresponding union types are handled normally.) So we exclude
1345 those types here. *shrug* */
1346 static int
1347 is_float_like (struct type *type)
1348 {
1349 return (TYPE_CODE (type) == TYPE_CODE_FLT
1350 || is_float_singleton (type));
1351 }
1352
1353
1354 /* Return non-zero if TYPE is considered a `DOUBLE_OR_FLOAT', as
1355 defined by the parameter passing conventions described in the
1356 "GNU/Linux for S/390 ELF Application Binary Interface Supplement".
1357 Otherwise, return zero. */
1358 static int
1359 is_double_or_float (struct type *type)
1360 {
1361 return (is_float_like (type)
1362 && (TYPE_LENGTH (type) == 4
1363 || TYPE_LENGTH (type) == 8));
1364 }
1365
1366
1367 /* Return non-zero if TYPE is considered a `SIMPLE_ARG', as defined by
1368 the parameter passing conventions described in the "GNU/Linux for
1369 S/390 ELF Application Binary Interface Supplement". Return zero
1370 otherwise. */
1371 static int
1372 is_simple_arg (struct type *type)
1373 {
1374 unsigned length = TYPE_LENGTH (type);
1375
1376 /* This is almost a direct translation of the ABI's language, except
1377 that we have to exclude 8-byte structs; those are DOUBLE_ARGs. */
1378 return ((is_integer_like (type) && length <= 4)
1379 || is_pointer_like (type)
1380 || (is_struct_like (type) && length != 8)
1381 || (is_float_like (type) && length == 16));
1382 }
1383
1384
1385 /* Return non-zero if TYPE should be passed as a pointer to a copy,
1386 zero otherwise. TYPE must be a SIMPLE_ARG, as recognized by
1387 `is_simple_arg'. */
1388 static int
1389 pass_by_copy_ref (struct type *type)
1390 {
1391 unsigned length = TYPE_LENGTH (type);
1392
1393 return ((is_struct_like (type) && length != 1 && length != 2 && length != 4)
1394 || (is_float_like (type) && length == 16));
1395 }
1396
1397
1398 /* Return ARG, a `SIMPLE_ARG', sign-extended or zero-extended to a full
1399 word as required for the ABI. */
1400 static LONGEST
1401 extend_simple_arg (struct value *arg)
1402 {
1403 struct type *type = VALUE_TYPE (arg);
1404
1405 /* Even structs get passed in the least significant bits of the
1406 register / memory word. It's not really right to extract them as
1407 an integer, but it does take care of the extension. */
1408 if (TYPE_UNSIGNED (type))
1409 return extract_unsigned_integer (VALUE_CONTENTS (arg),
1410 TYPE_LENGTH (type));
1411 else
1412 return extract_signed_integer (VALUE_CONTENTS (arg),
1413 TYPE_LENGTH (type));
1414 }
1415
1416
1417 /* Return non-zero if TYPE is a `DOUBLE_ARG', as defined by the
1418 parameter passing conventions described in the "GNU/Linux for S/390
1419 ELF Application Binary Interface Supplement". Return zero
1420 otherwise. */
1421 static int
1422 is_double_arg (struct type *type)
1423 {
1424 unsigned length = TYPE_LENGTH (type);
1425
1426 return ((is_integer_like (type)
1427 || is_struct_like (type))
1428 && length == 8);
1429 }
1430
1431
1432 /* Round ADDR up to the next N-byte boundary. N must be a power of
1433 two. */
1434 static CORE_ADDR
1435 round_up (CORE_ADDR addr, int n)
1436 {
1437 /* Check that N is really a power of two. */
1438 gdb_assert (n && (n & (n-1)) == 0);
1439 return ((addr + n - 1) & -n);
1440 }
1441
1442
1443 /* Round ADDR down to the next N-byte boundary. N must be a power of
1444 two. */
1445 static CORE_ADDR
1446 round_down (CORE_ADDR addr, int n)
1447 {
1448 /* Check that N is really a power of two. */
1449 gdb_assert (n && (n & (n-1)) == 0);
1450 return (addr & -n);
1451 }
1452
1453
1454 /* Return the alignment required by TYPE. */
1455 static int
1456 alignment_of (struct type *type)
1457 {
1458 int alignment;
1459
1460 if (is_integer_like (type)
1461 || is_pointer_like (type)
1462 || TYPE_CODE (type) == TYPE_CODE_FLT)
1463 alignment = TYPE_LENGTH (type);
1464 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
1465 || TYPE_CODE (type) == TYPE_CODE_UNION)
1466 {
1467 int i;
1468
1469 alignment = 1;
1470 for (i = 0; i < TYPE_NFIELDS (type); i++)
1471 {
1472 int field_alignment = alignment_of (TYPE_FIELD_TYPE (type, i));
1473
1474 if (field_alignment > alignment)
1475 alignment = field_alignment;
1476 }
1477 }
1478 else
1479 alignment = 1;
1480
1481 /* Check that everything we ever return is a power of two. Lots of
1482 code doesn't want to deal with aligning things to arbitrary
1483 boundaries. */
1484 gdb_assert ((alignment & (alignment - 1)) == 0);
1485
1486 return alignment;
1487 }
1488
1489
1490 /* Put the actual parameter values pointed to by ARGS[0..NARGS-1] in
1491 place to be passed to a function, as specified by the "GNU/Linux
1492 for S/390 ELF Application Binary Interface Supplement".
1493
1494 SP is the current stack pointer. We must put arguments, links,
1495 padding, etc. whereever they belong, and return the new stack
1496 pointer value.
1497
1498 If STRUCT_RETURN is non-zero, then the function we're calling is
1499 going to return a structure by value; STRUCT_ADDR is the address of
1500 a block we've allocated for it on the stack.
1501
1502 Our caller has taken care of any type promotions needed to satisfy
1503 prototypes or the old K&R argument-passing rules. */
1504 CORE_ADDR
1505 s390_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
1506 int struct_return, CORE_ADDR struct_addr)
1507 {
1508 int i;
1509 int pointer_size = (TARGET_PTR_BIT / TARGET_CHAR_BIT);
1510
1511 /* The number of arguments passed by reference-to-copy. */
1512 int num_copies;
1513
1514 /* If the i'th argument is passed as a reference to a copy, then
1515 copy_addr[i] is the address of the copy we made. */
1516 CORE_ADDR *copy_addr = alloca (nargs * sizeof (CORE_ADDR));
1517
1518 /* Build the reference-to-copy area. */
1519 num_copies = 0;
1520 for (i = 0; i < nargs; i++)
1521 {
1522 struct value *arg = args[i];
1523 struct type *type = VALUE_TYPE (arg);
1524 unsigned length = TYPE_LENGTH (type);
1525
1526 if (is_simple_arg (type)
1527 && pass_by_copy_ref (type))
1528 {
1529 sp -= length;
1530 sp = round_down (sp, alignment_of (type));
1531 write_memory (sp, VALUE_CONTENTS (arg), length);
1532 copy_addr[i] = sp;
1533 num_copies++;
1534 }
1535 }
1536
1537 /* Reserve space for the parameter area. As a conservative
1538 simplification, we assume that everything will be passed on the
1539 stack. */
1540 {
1541 int i;
1542
1543 for (i = 0; i < nargs; i++)
1544 {
1545 struct value *arg = args[i];
1546 struct type *type = VALUE_TYPE (arg);
1547 int length = TYPE_LENGTH (type);
1548
1549 sp = round_down (sp, alignment_of (type));
1550
1551 /* SIMPLE_ARG values get extended to 32 bits. Assume every
1552 argument is. */
1553 if (length < 4) length = 4;
1554 sp -= length;
1555 }
1556 }
1557
1558 /* Include space for any reference-to-copy pointers. */
1559 sp = round_down (sp, pointer_size);
1560 sp -= num_copies * pointer_size;
1561
1562 /* After all that, make sure it's still aligned on an eight-byte
1563 boundary. */
1564 sp = round_down (sp, 8);
1565
1566 /* Finally, place the actual parameters, working from SP towards
1567 higher addresses. The code above is supposed to reserve enough
1568 space for this. */
1569 {
1570 int fr = 0;
1571 int gr = 2;
1572 CORE_ADDR starg = sp;
1573
1574 for (i = 0; i < nargs; i++)
1575 {
1576 struct value *arg = args[i];
1577 struct type *type = VALUE_TYPE (arg);
1578
1579 if (is_double_or_float (type)
1580 && fr <= 2)
1581 {
1582 /* When we store a single-precision value in an FP register,
1583 it occupies the leftmost bits. */
1584 deprecated_write_register_bytes (REGISTER_BYTE (S390_FP0_REGNUM + fr),
1585 VALUE_CONTENTS (arg),
1586 TYPE_LENGTH (type));
1587 fr += 2;
1588 }
1589 else if (is_simple_arg (type)
1590 && gr <= 6)
1591 {
1592 /* Do we need to pass a pointer to our copy of this
1593 argument? */
1594 if (pass_by_copy_ref (type))
1595 write_register (S390_GP0_REGNUM + gr, copy_addr[i]);
1596 else
1597 write_register (S390_GP0_REGNUM + gr, extend_simple_arg (arg));
1598
1599 gr++;
1600 }
1601 else if (is_double_arg (type)
1602 && gr <= 5)
1603 {
1604 deprecated_write_register_gen (S390_GP0_REGNUM + gr,
1605 VALUE_CONTENTS (arg));
1606 deprecated_write_register_gen (S390_GP0_REGNUM + gr + 1,
1607 VALUE_CONTENTS (arg) + 4);
1608 gr += 2;
1609 }
1610 else
1611 {
1612 /* The `OTHER' case. */
1613 enum type_code code = TYPE_CODE (type);
1614 unsigned length = TYPE_LENGTH (type);
1615
1616 /* If we skipped r6 because we couldn't fit a DOUBLE_ARG
1617 in it, then don't go back and use it again later. */
1618 if (is_double_arg (type) && gr == 6)
1619 gr = 7;
1620
1621 if (is_simple_arg (type))
1622 {
1623 /* Simple args are always either extended to 32 bits,
1624 or pointers. */
1625 starg = round_up (starg, 4);
1626
1627 /* Do we need to pass a pointer to our copy of this
1628 argument? */
1629 if (pass_by_copy_ref (type))
1630 write_memory_signed_integer (starg, pointer_size,
1631 copy_addr[i]);
1632 else
1633 /* Simple args are always extended to 32 bits. */
1634 write_memory_signed_integer (starg, 4,
1635 extend_simple_arg (arg));
1636 starg += 4;
1637 }
1638 else
1639 {
1640 /* You'd think we should say:
1641 starg = round_up (starg, alignment_of (type));
1642 Unfortunately, GCC seems to simply align the stack on
1643 a four-byte boundary, even when passing doubles. */
1644 starg = round_up (starg, 4);
1645 write_memory (starg, VALUE_CONTENTS (arg), length);
1646 starg += length;
1647 }
1648 }
1649 }
1650 }
1651
1652 /* Allocate the standard frame areas: the register save area, the
1653 word reserved for the compiler (which seems kind of meaningless),
1654 and the back chain pointer. */
1655 sp -= 96;
1656
1657 /* Write the back chain pointer into the first word of the stack
1658 frame. This will help us get backtraces from within functions
1659 called from GDB. */
1660 write_memory_unsigned_integer (sp, (TARGET_PTR_BIT / TARGET_CHAR_BIT),
1661 deprecated_read_fp ());
1662
1663 return sp;
1664 }
1665
1666
1667 static CORE_ADDR
1668 s390_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1669 {
1670 /* Both the 32- and 64-bit ABI's say that the stack pointer should
1671 always be aligned on an eight-byte boundary. */
1672 return (addr & -8);
1673 }
1674
1675
1676 static int
1677 s390_use_struct_convention (int gcc_p, struct type *value_type)
1678 {
1679 enum type_code code = TYPE_CODE (value_type);
1680
1681 return (code == TYPE_CODE_STRUCT
1682 || code == TYPE_CODE_UNION);
1683 }
1684
1685
1686 /* Return the GDB type object for the "standard" data type
1687 of data in register N. */
1688 struct type *
1689 s390_register_virtual_type (int regno)
1690 {
1691 if (S390_FP0_REGNUM <= regno && regno < S390_FP0_REGNUM + S390_NUM_FPRS)
1692 return builtin_type_double;
1693 else
1694 return builtin_type_int;
1695 }
1696
1697
1698 struct type *
1699 s390x_register_virtual_type (int regno)
1700 {
1701 return (regno == S390_FPC_REGNUM) ||
1702 (regno >= S390_FIRST_ACR && regno <= S390_LAST_ACR) ? builtin_type_int :
1703 (regno >= S390_FP0_REGNUM) ? builtin_type_double : builtin_type_long;
1704 }
1705
1706
1707
1708 void
1709 s390_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1710 {
1711 write_register (S390_GP0_REGNUM + 2, addr);
1712 }
1713
1714
1715
1716 const static unsigned char *
1717 s390_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
1718 {
1719 static unsigned char breakpoint[] = { 0x0, 0x1 };
1720
1721 *lenptr = sizeof (breakpoint);
1722 return breakpoint;
1723 }
1724
1725 /* Advance PC across any function entry prologue instructions to reach some
1726 "real" code. */
1727 CORE_ADDR
1728 s390_skip_prologue (CORE_ADDR pc)
1729 {
1730 struct frame_extra_info fextra_info;
1731
1732 s390_get_frame_info (pc, &fextra_info, NULL, 1);
1733 return fextra_info.skip_prologue_function_start;
1734 }
1735
1736 /* Immediately after a function call, return the saved pc.
1737 Can't go through the frames for this because on some machines
1738 the new frame is not set up until the new function executes
1739 some instructions. */
1740 CORE_ADDR
1741 s390_saved_pc_after_call (struct frame_info *frame)
1742 {
1743 return ADDR_BITS_REMOVE (read_register (S390_RETADDR_REGNUM));
1744 }
1745
1746 static CORE_ADDR
1747 s390_addr_bits_remove (CORE_ADDR addr)
1748 {
1749 return (addr) & 0x7fffffff;
1750 }
1751
1752
1753 static CORE_ADDR
1754 s390_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
1755 {
1756 write_register (S390_RETADDR_REGNUM, CALL_DUMMY_ADDRESS ());
1757 return sp;
1758 }
1759
1760 static int
1761 s390_address_class_type_flags (int byte_size, int dwarf2_addr_class)
1762 {
1763 if (byte_size == 4)
1764 return TYPE_FLAG_ADDRESS_CLASS_1;
1765 else
1766 return 0;
1767 }
1768
1769 static const char *
1770 s390_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
1771 {
1772 if (type_flags & TYPE_FLAG_ADDRESS_CLASS_1)
1773 return "mode32";
1774 else
1775 return NULL;
1776 }
1777
1778 int
1779 s390_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name,
1780 int *type_flags_ptr)
1781 {
1782 if (strcmp (name, "mode32") == 0)
1783 {
1784 *type_flags_ptr = TYPE_FLAG_ADDRESS_CLASS_1;
1785 return 1;
1786 }
1787 else
1788 return 0;
1789 }
1790
1791 struct gdbarch *
1792 s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1793 {
1794 static LONGEST s390_call_dummy_words[] = { 0 };
1795 struct gdbarch *gdbarch;
1796 struct gdbarch_tdep *tdep;
1797 int elf_flags;
1798
1799 /* First see if there is already a gdbarch that can satisfy the request. */
1800 arches = gdbarch_list_lookup_by_info (arches, &info);
1801 if (arches != NULL)
1802 return arches->gdbarch;
1803
1804 /* None found: is the request for a s390 architecture? */
1805 if (info.bfd_arch_info->arch != bfd_arch_s390)
1806 return NULL; /* No; then it's not for us. */
1807
1808 /* Yes: create a new gdbarch for the specified machine type. */
1809 gdbarch = gdbarch_alloc (&info, NULL);
1810
1811 /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
1812 ready to unwind the PC first (see frame.c:get_prev_frame()). */
1813 set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
1814
1815 set_gdbarch_believe_pcc_promotion (gdbarch, 0);
1816 set_gdbarch_char_signed (gdbarch, 0);
1817
1818 set_gdbarch_frame_args_skip (gdbarch, 0);
1819 set_gdbarch_frame_args_address (gdbarch, s390_frame_args_address);
1820 set_gdbarch_deprecated_frame_chain (gdbarch, s390_frame_chain);
1821 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, s390_frame_init_saved_regs);
1822 set_gdbarch_frame_locals_address (gdbarch, s390_frame_args_address);
1823 /* We can't do this */
1824 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
1825 set_gdbarch_deprecated_store_struct_return (gdbarch, s390_store_struct_return);
1826 set_gdbarch_deprecated_extract_return_value (gdbarch, s390_extract_return_value);
1827 set_gdbarch_deprecated_store_return_value (gdbarch, s390_store_return_value);
1828 /* Amount PC must be decremented by after a breakpoint.
1829 This is often the number of bytes in BREAKPOINT
1830 but not always. */
1831 set_gdbarch_decr_pc_after_break (gdbarch, 2);
1832 set_gdbarch_deprecated_pop_frame (gdbarch, s390_pop_frame);
1833 /* Stack grows downward. */
1834 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1835 /* Offset from address of function to start of its code.
1836 Zero on most machines. */
1837 set_gdbarch_function_start_offset (gdbarch, 0);
1838 set_gdbarch_deprecated_max_register_raw_size (gdbarch, 8);
1839 set_gdbarch_deprecated_max_register_virtual_size (gdbarch, 8);
1840 set_gdbarch_breakpoint_from_pc (gdbarch, s390_breakpoint_from_pc);
1841 set_gdbarch_skip_prologue (gdbarch, s390_skip_prologue);
1842 set_gdbarch_deprecated_init_extra_frame_info (gdbarch, s390_init_extra_frame_info);
1843 set_gdbarch_deprecated_init_frame_pc_first (gdbarch, s390_init_frame_pc_first);
1844 set_gdbarch_deprecated_target_read_fp (gdbarch, s390_read_fp);
1845 /* This function that tells us whether the function invocation represented
1846 by FI does not have a frame on the stack associated with it. If it
1847 does not, FRAMELESS is set to 1, else 0. */
1848 set_gdbarch_frameless_function_invocation (gdbarch,
1849 s390_frameless_function_invocation);
1850 /* Return saved PC from a frame */
1851 set_gdbarch_deprecated_frame_saved_pc (gdbarch, s390_frame_saved_pc);
1852 /* DEPRECATED_FRAME_CHAIN takes a frame's nominal address and
1853 produces the frame's chain-pointer. */
1854 set_gdbarch_deprecated_frame_chain (gdbarch, s390_frame_chain);
1855 set_gdbarch_deprecated_saved_pc_after_call (gdbarch, s390_saved_pc_after_call);
1856 set_gdbarch_register_byte (gdbarch, s390_register_byte);
1857 set_gdbarch_pc_regnum (gdbarch, S390_PC_REGNUM);
1858 set_gdbarch_sp_regnum (gdbarch, S390_SP_REGNUM);
1859 set_gdbarch_deprecated_fp_regnum (gdbarch, S390_FP_REGNUM);
1860 set_gdbarch_fp0_regnum (gdbarch, S390_FP0_REGNUM);
1861 set_gdbarch_num_regs (gdbarch, S390_NUM_REGS);
1862 set_gdbarch_cannot_fetch_register (gdbarch, s390_cannot_fetch_register);
1863 set_gdbarch_cannot_store_register (gdbarch, s390_cannot_fetch_register);
1864 set_gdbarch_use_struct_convention (gdbarch, s390_use_struct_convention);
1865 set_gdbarch_register_name (gdbarch, s390_register_name);
1866 set_gdbarch_stab_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum);
1867 set_gdbarch_dwarf_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum);
1868 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum);
1869 set_gdbarch_deprecated_extract_struct_value_address
1870 (gdbarch, generic_cannot_extract_struct_value_address);
1871
1872 /* Parameters for inferior function calls. */
1873 set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
1874 set_gdbarch_frame_align (gdbarch, s390_frame_align);
1875 set_gdbarch_deprecated_push_arguments (gdbarch, s390_push_arguments);
1876 set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
1877 set_gdbarch_deprecated_push_return_address (gdbarch,
1878 s390_push_return_address);
1879 set_gdbarch_sizeof_call_dummy_words (gdbarch,
1880 sizeof (s390_call_dummy_words));
1881 set_gdbarch_call_dummy_words (gdbarch, s390_call_dummy_words);
1882
1883 switch (info.bfd_arch_info->mach)
1884 {
1885 case bfd_mach_s390_31:
1886 set_gdbarch_register_size (gdbarch, 4);
1887 set_gdbarch_register_raw_size (gdbarch, s390_register_raw_size);
1888 set_gdbarch_register_virtual_size (gdbarch, s390_register_raw_size);
1889 set_gdbarch_register_virtual_type (gdbarch, s390_register_virtual_type);
1890
1891 set_gdbarch_addr_bits_remove (gdbarch, s390_addr_bits_remove);
1892 set_gdbarch_register_bytes (gdbarch, S390_REGISTER_BYTES);
1893 break;
1894 case bfd_mach_s390_64:
1895 set_gdbarch_register_size (gdbarch, 8);
1896 set_gdbarch_register_raw_size (gdbarch, s390x_register_raw_size);
1897 set_gdbarch_register_virtual_size (gdbarch, s390x_register_raw_size);
1898 set_gdbarch_register_virtual_type (gdbarch,
1899 s390x_register_virtual_type);
1900
1901 set_gdbarch_long_bit (gdbarch, 64);
1902 set_gdbarch_long_long_bit (gdbarch, 64);
1903 set_gdbarch_ptr_bit (gdbarch, 64);
1904 set_gdbarch_register_bytes (gdbarch, S390X_REGISTER_BYTES);
1905 set_gdbarch_address_class_type_flags (gdbarch,
1906 s390_address_class_type_flags);
1907 set_gdbarch_address_class_type_flags_to_name (gdbarch,
1908 s390_address_class_type_flags_to_name);
1909 set_gdbarch_address_class_name_to_type_flags (gdbarch,
1910 s390_address_class_name_to_type_flags);
1911 break;
1912 }
1913
1914 /* Should be using push_dummy_call. */
1915 set_gdbarch_deprecated_dummy_write_sp (gdbarch, generic_target_write_sp);
1916
1917 return gdbarch;
1918 }
1919
1920
1921
1922 void
1923 _initialize_s390_tdep (void)
1924 {
1925
1926 /* Hook us into the gdbarch mechanism. */
1927 register_gdbarch_init (bfd_arch_s390, s390_gdbarch_init);
1928 if (!deprecated_tm_print_insn) /* Someone may have already set it */
1929 deprecated_tm_print_insn = gdb_print_insn_s390;
1930 }
1931
1932 #endif /* GDBSERVER */