X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fs390-tdep.c;h=f19e4ddfdd8c9fcc91a22bbe4ba1adaa4f1fcb25;hb=021c2b5e4ba370c7818c09d1b85a105939fc6377;hp=c524657a57acdf72affb267466434b84a60e9f84;hpb=529765f487cef2bbe14d54fd65752d95e288d441;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c index c524657a57..f19e4ddfdd 100644 --- a/gdb/s390-tdep.c +++ b/gdb/s390-tdep.c @@ -1,5 +1,7 @@ /* Target-dependent code for GDB, the GNU debugger. - Copyright 2001 Free Software Foundation, Inc. + + Copyright 2001, 2002 Free Software Foundation, Inc. + Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) for IBM Deutschland Entwicklung GmbH, IBM Corporation. @@ -148,7 +150,7 @@ s390_memset_extra_info (struct frame_extra_info *fextra_info) -char * +const char * s390_register_name (int reg_nr) { static char *register_names[] = { @@ -953,8 +955,8 @@ s390_frame_saved_pc_nofix (struct frame_info *fi) if (fi->extra_info && fi->extra_info->saved_pc_valid) return fi->extra_info->saved_pc; - if (generic_find_dummy_frame (fi->pc, fi->frame)) - return generic_read_register_dummy (fi->pc, fi->frame, S390_PC_REGNUM); + if (deprecated_generic_find_dummy_frame (fi->pc, fi->frame)) + return deprecated_read_register_dummy (fi->pc, fi->frame, S390_PC_REGNUM); s390_frame_init_saved_regs (fi); if (fi->extra_info) @@ -1007,11 +1009,9 @@ s390_frame_chain (struct frame_info *thisframe) { CORE_ADDR prev_fp = 0; - if (thisframe->prev && thisframe->prev->frame) - prev_fp = thisframe->prev->frame; - else if (generic_find_dummy_frame (thisframe->pc, thisframe->frame)) - return generic_read_register_dummy (thisframe->pc, thisframe->frame, - S390_SP_REGNUM); + if (deprecated_generic_find_dummy_frame (thisframe->pc, thisframe->frame)) + return deprecated_read_register_dummy (thisframe->pc, thisframe->frame, + S390_SP_REGNUM); else { int sigreturn = 0; @@ -1189,7 +1189,7 @@ gdb_print_insn_s390 (bfd_vma memaddr, disassemble_info * info) /* Not the most efficent code in the world */ int -s390_fp_regnum () +s390_fp_regnum (void) { int regno = S390_SP_REGNUM; struct frame_extra_info fextra_info; @@ -1204,19 +1204,12 @@ s390_fp_regnum () } CORE_ADDR -s390_read_fp () +s390_read_fp (void) { return read_register (s390_fp_regnum ()); } -void -s390_write_fp (CORE_ADDR val) -{ - write_register (s390_fp_regnum (), val); -} - - static void s390_pop_frame_regular (struct frame_info *frame) { @@ -1225,20 +1218,23 @@ s390_pop_frame_regular (struct frame_info *frame) write_register (S390_PC_REGNUM, FRAME_SAVED_PC (frame)); /* Restore any saved registers. */ - for (regnum = 0; regnum < NUM_REGS; regnum++) - if (frame->saved_regs[regnum] != 0) - { - ULONGEST value; - - value = read_memory_unsigned_integer (frame->saved_regs[regnum], - REGISTER_RAW_SIZE (regnum)); - write_register (regnum, value); - } + if (frame->saved_regs) + { + for (regnum = 0; regnum < NUM_REGS; regnum++) + if (frame->saved_regs[regnum] != 0) + { + ULONGEST value; + + value = read_memory_unsigned_integer (frame->saved_regs[regnum], + REGISTER_RAW_SIZE (regnum)); + write_register (regnum, value); + } - /* Actually cut back the stack. Remember that the SP's element of - saved_regs is the old SP itself, not the address at which it is - saved. */ - write_register (S390_SP_REGNUM, frame->saved_regs[S390_SP_REGNUM]); + /* Actually cut back the stack. Remember that the SP's element of + saved_regs is the old SP itself, not the address at which it is + saved. */ + write_register (S390_SP_REGNUM, frame->saved_regs[S390_SP_REGNUM]); + } /* Throw away any cached frame information. */ flush_cached_frames (); @@ -1250,7 +1246,7 @@ s390_pop_frame_regular (struct frame_info *frame) Used in the contexts of the "return" command, and of target function calls from the debugger. */ void -s390_pop_frame () +s390_pop_frame (void) { /* This function checks for and handles generic dummy frames, and calls back to our function for ordinary frames. */ @@ -1351,7 +1347,7 @@ is_float_like (struct type *type) /* Return non-zero if TYPE is considered a `DOUBLE_OR_FLOAT', as defined by the parameter passing conventions described in the - "Linux for S/390 ELF Application Binary Interface Supplement". + "GNU/Linux for S/390 ELF Application Binary Interface Supplement". Otherwise, return zero. */ static int is_double_or_float (struct type *type) @@ -1363,8 +1359,9 @@ is_double_or_float (struct type *type) /* Return non-zero if TYPE is considered a `SIMPLE_ARG', as defined by - the parameter passing conventions described in the "Linux for S/390 - ELF Application Binary Interface Supplement". Return zero otherwise. */ + the parameter passing conventions described in the "GNU/Linux for + S/390 ELF Application Binary Interface Supplement". Return zero + otherwise. */ static int is_simple_arg (struct type *type) { @@ -1412,8 +1409,9 @@ extend_simple_arg (struct value *arg) /* Return non-zero if TYPE is a `DOUBLE_ARG', as defined by the - parameter passing conventions described in the "Linux for S/390 ELF - Application Binary Interface Supplement". Return zero otherwise. */ + parameter passing conventions described in the "GNU/Linux for S/390 + ELF Application Binary Interface Supplement". Return zero + otherwise. */ static int is_double_arg (struct type *type) { @@ -1484,8 +1482,8 @@ alignment_of (struct type *type) /* Put the actual parameter values pointed to by ARGS[0..NARGS-1] in - place to be passed to a function, as specified by the "Linux for - S/390 ELF Application Binary Interface Supplement". + place to be passed to a function, as specified by the "GNU/Linux + for S/390 ELF Application Binary Interface Supplement". SP is the current stack pointer. We must put arguments, links, padding, etc. whereever they belong, and return the new stack @@ -1700,7 +1698,7 @@ s390_store_struct_return (CORE_ADDR addr, CORE_ADDR sp) -static unsigned char * +const static unsigned char * s390_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr) { static unsigned char breakpoint[] = { 0x0, 0x1 }; @@ -1775,14 +1773,13 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* We can't do this */ set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown); set_gdbarch_store_struct_return (gdbarch, s390_store_struct_return); - set_gdbarch_extract_return_value (gdbarch, s390_extract_return_value); - set_gdbarch_store_return_value (gdbarch, s390_store_return_value); + set_gdbarch_deprecated_extract_return_value (gdbarch, s390_extract_return_value); + set_gdbarch_deprecated_store_return_value (gdbarch, s390_store_return_value); /* Amount PC must be decremented by after a breakpoint. This is often the number of bytes in BREAKPOINT but not always. */ set_gdbarch_decr_pc_after_break (gdbarch, 2); set_gdbarch_pop_frame (gdbarch, s390_pop_frame); - set_gdbarch_ieee_float (gdbarch, 1); /* Stack grows downward. */ set_gdbarch_inner_than (gdbarch, core_addr_lessthan); /* Offset from address of function to start of its code. @@ -1795,7 +1792,6 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_init_extra_frame_info (gdbarch, s390_init_extra_frame_info); set_gdbarch_init_frame_pc_first (gdbarch, s390_init_frame_pc_first); set_gdbarch_read_fp (gdbarch, s390_read_fp); - set_gdbarch_write_fp (gdbarch, s390_write_fp); /* This function that tells us whether the function invocation represented by FI does not have a frame on the stack associated with it. If it does not, FRAMELESS is set to 1, else 0. */ @@ -1815,14 +1811,14 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_num_regs (gdbarch, S390_NUM_REGS); set_gdbarch_cannot_fetch_register (gdbarch, s390_cannot_fetch_register); set_gdbarch_cannot_store_register (gdbarch, s390_cannot_fetch_register); - set_gdbarch_get_saved_register (gdbarch, generic_get_saved_register); + set_gdbarch_get_saved_register (gdbarch, generic_unwind_get_saved_register); set_gdbarch_use_struct_convention (gdbarch, s390_use_struct_convention); set_gdbarch_frame_chain_valid (gdbarch, func_frame_chain_valid); set_gdbarch_register_name (gdbarch, s390_register_name); set_gdbarch_stab_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum); set_gdbarch_dwarf_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum); set_gdbarch_dwarf2_reg_to_regnum (gdbarch, s390_stab_reg_to_regnum); - set_gdbarch_extract_struct_value_address + set_gdbarch_deprecated_extract_struct_value_address (gdbarch, generic_cannot_extract_struct_value_address); /* Parameters for inferior function calls. */ @@ -1849,7 +1845,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) switch (info.bfd_arch_info->mach) { - case bfd_mach_s390_esa: + case bfd_mach_s390_31: set_gdbarch_register_size (gdbarch, 4); set_gdbarch_register_raw_size (gdbarch, s390_register_raw_size); set_gdbarch_register_virtual_size (gdbarch, s390_register_raw_size); @@ -1858,7 +1854,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_addr_bits_remove (gdbarch, s390_addr_bits_remove); set_gdbarch_register_bytes (gdbarch, S390_REGISTER_BYTES); break; - case bfd_mach_s390_esame: + case bfd_mach_s390_64: set_gdbarch_register_size (gdbarch, 8); set_gdbarch_register_raw_size (gdbarch, s390x_register_raw_size); set_gdbarch_register_virtual_size (gdbarch, s390x_register_raw_size); @@ -1878,7 +1874,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) void -_initialize_s390_tdep () +_initialize_s390_tdep (void) { /* Hook us into the gdbarch mechanism. */