X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Farm-tdep.c;h=c3280ee211d17ff899dc56f7a7127d7b5e685d5b;hb=e66cfcef729d758a5e605d57600530ad9b1bb9c3;hp=a1075847d685c57e49439b4233f3f40726d776c4;hpb=7649770c8e52afe2696a70bb50ac3039c844d381;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index a1075847d6..c3280ee211 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on ARM systems. - Copyright (C) 1988-2017 Free Software Foundation, Inc. + Copyright (C) 1988-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -30,7 +30,7 @@ #include "disasm.h" #include "regcache.h" #include "reggroups.h" -#include "doublest.h" +#include "target-float.h" #include "value.h" #include "arch-utils.h" #include "osabi.h" @@ -44,7 +44,7 @@ #include "remote.h" #include "target-descriptions.h" #include "user-regs.h" -#include "observer.h" +#include "observable.h" #include "arch/arm.h" #include "arch/arm-get-next-pcs.h" @@ -220,19 +220,14 @@ static const char *disassembly_style; /* This is used to keep the bfd arch_info in sync with the disassembly style. */ -static void set_disassembly_style_sfunc(char *, int, +static void set_disassembly_style_sfunc (const char *, int, struct cmd_list_element *); static void show_disassembly_style_sfunc (struct ui_file *, int, struct cmd_list_element *, const char *); -static void convert_from_extended (const struct floatformat *, const void *, - void *, int); -static void convert_to_extended (const struct floatformat *, void *, - const void *, int); - static enum register_status arm_neon_quad_read (struct gdbarch *gdbarch, - struct regcache *regcache, + readable_regcache *regcache, int regnum, gdb_byte *buf); static void arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache, @@ -302,7 +297,7 @@ int arm_is_thumb (struct regcache *regcache) { ULONGEST cpsr; - ULONGEST t_bit = arm_psr_thumb_bit (get_regcache_arch (regcache)); + ULONGEST t_bit = arm_psr_thumb_bit (regcache->arch ()); cpsr = regcache_raw_get_unsigned (regcache, ARM_PS_REGNUM); @@ -404,8 +399,9 @@ arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr) { struct bound_minimal_symbol sym; char type; - struct displaced_step_closure* dsc - = get_displaced_step_closure_by_addr(memaddr); + arm_displaced_step_closure *dsc + = ((arm_displaced_step_closure * ) + get_displaced_step_closure_by_addr (memaddr)); /* If checking the mode of displaced instruction in copy area, the mode should be determined by instruction on the original address. */ @@ -652,15 +648,12 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch); int i; pv_t regs[16]; - struct pv_area *stack; - struct cleanup *back_to; CORE_ADDR offset; CORE_ADDR unrecognized_pc = 0; for (i = 0; i < 16; i++) regs[i] = pv_register (i, 0); - stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch)); - back_to = make_cleanup_free_pv_area (stack); + pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch)); while (start < limit) { @@ -673,7 +666,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, int regno; int mask; - if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM])) + if (stack.store_would_trash (regs[ARM_SP_REGNUM])) break; /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says @@ -686,7 +679,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, { regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4); - pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]); + stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]); } } else if ((insn & 0xff80) == 0xb080) /* sub sp, #imm */ @@ -740,10 +733,10 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, offset = (insn & 0xff) << 2; addr = pv_add_constant (regs[ARM_SP_REGNUM], offset); - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; - pv_area_store (stack, addr, 4, regs[regno]); + stack.store (addr, 4, regs[regno]); } else if ((insn & 0xf800) == 0x6000) /* str rd, [rn, #off] */ { @@ -754,10 +747,10 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, offset = bits (insn, 6, 10) << 2; addr = pv_add_constant (regs[rn], offset); - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; - pv_area_store (stack, addr, 4, regs[rd]); + stack.store (addr, 4, regs[rd]); } else if (((insn & 0xf800) == 0x7000 /* strb Rd, [Rn, #off] */ || (insn & 0xf800) == 0x8000) /* strh Rd, [Rn, #off] */ @@ -833,7 +826,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, pv_t addr = regs[bits (insn, 0, 3)]; int regno; - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; /* Calculate offsets of saved registers. */ @@ -841,7 +834,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, if (inst2 & (1 << regno)) { addr = pv_add_constant (addr, -4); - pv_area_store (stack, addr, 4, regs[regno]); + stack.store (addr, 4, regs[regno]); } if (insn & 0x0020) @@ -862,12 +855,12 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, else addr = pv_add_constant (addr, -offset); - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; - pv_area_store (stack, addr, 4, regs[regno1]); - pv_area_store (stack, pv_add_constant (addr, 4), - 4, regs[regno2]); + stack.store (addr, 4, regs[regno1]); + stack.store (pv_add_constant (addr, 4), + 4, regs[regno2]); if (insn & 0x0020) regs[bits (insn, 0, 3)] = addr; @@ -886,10 +879,10 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, else addr = pv_add_constant (addr, -offset); - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; - pv_area_store (stack, addr, 4, regs[regno]); + stack.store (addr, 4, regs[regno]); if (inst2 & 0x0100) regs[bits (insn, 0, 3)] = addr; @@ -904,10 +897,10 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, offset = inst2 & 0xfff; addr = pv_add_constant (regs[bits (insn, 0, 3)], offset); - if (pv_area_store_would_trash (stack, addr)) + if (stack.store_would_trash (addr)) break; - pv_area_store (stack, addr, 4, regs[regno]); + stack.store (addr, 4, regs[regno]); } else if ((insn & 0xffd0) == 0xf880 /* str{bh}.w Rt,[Rn,#imm] */ @@ -1090,10 +1083,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, unrecognized_pc = start; if (cache == NULL) - { - do_cleanups (back_to); - return unrecognized_pc; - } + return unrecognized_pc; if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM)) { @@ -1115,10 +1105,9 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, } for (i = 0; i < 16; i++) - if (pv_area_find_reg (stack, gdbarch, i, &offset)) + if (stack.find_reg (gdbarch, i, &offset)) cache->saved_regs[i].addr = offset; - do_cleanups (back_to); return unrecognized_pc; } @@ -1494,8 +1483,6 @@ arm_analyze_prologue (struct gdbarch *gdbarch, int regno; CORE_ADDR offset, current_pc; pv_t regs[ARM_FPS_REGNUM]; - struct pv_area *stack; - struct cleanup *back_to; CORE_ADDR unrecognized_pc = 0; /* Search the prologue looking for instructions that set up the @@ -1510,8 +1497,7 @@ arm_analyze_prologue (struct gdbarch *gdbarch, for (regno = 0; regno < ARM_FPS_REGNUM; regno++) regs[regno] = pv_register (regno, 0); - stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch)); - back_to = make_cleanup_free_pv_area (stack); + pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch)); for (current_pc = prologue_start; current_pc < prologue_end; @@ -1548,11 +1534,11 @@ arm_analyze_prologue (struct gdbarch *gdbarch, else if ((insn & 0xffff0fff) == 0xe52d0004) /* str Rd, [sp, #-4]! */ { - if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM])) + if (stack.store_would_trash (regs[ARM_SP_REGNUM])) break; regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4); - pv_area_store (stack, regs[ARM_SP_REGNUM], 4, - regs[bits (insn, 12, 15)]); + stack.store (regs[ARM_SP_REGNUM], 4, + regs[bits (insn, 12, 15)]); continue; } else if ((insn & 0xffff0000) == 0xe92d0000) @@ -1562,7 +1548,7 @@ arm_analyze_prologue (struct gdbarch *gdbarch, { int mask = insn & 0xffff; - if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM])) + if (stack.store_would_trash (regs[ARM_SP_REGNUM])) break; /* Calculate offsets of saved registers. */ @@ -1571,7 +1557,7 @@ arm_analyze_prologue (struct gdbarch *gdbarch, { regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4); - pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]); + stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]); } } else if ((insn & 0xffff0000) == 0xe54b0000 /* strb rx,[r11,#-n] */ @@ -1613,12 +1599,12 @@ arm_analyze_prologue (struct gdbarch *gdbarch, [sp, -#c]! */ && gdbarch_tdep (gdbarch)->have_fpa_registers) { - if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM])) + if (stack.store_would_trash (regs[ARM_SP_REGNUM])) break; regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12); regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07); - pv_area_store (stack, regs[ARM_SP_REGNUM], 12, regs[regno]); + stack.store (regs[ARM_SP_REGNUM], 12, regs[regno]); } else if ((insn & 0xffbf0fff) == 0xec2d0200 /* sfmfd f0, 4, [sp!] */ @@ -1627,7 +1613,7 @@ arm_analyze_prologue (struct gdbarch *gdbarch, int n_saved_fp_regs; unsigned int fp_start_reg, fp_bound_reg; - if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM])) + if (stack.store_would_trash (regs[ARM_SP_REGNUM])) break; if ((insn & 0x800) == 0x800) /* N0 is set */ @@ -1650,8 +1636,8 @@ arm_analyze_prologue (struct gdbarch *gdbarch, for (; fp_start_reg < fp_bound_reg; fp_start_reg++) { regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12); - pv_area_store (stack, regs[ARM_SP_REGNUM], 12, - regs[fp_start_reg++]); + stack.store (regs[ARM_SP_REGNUM], 12, + regs[fp_start_reg++]); } } else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */ @@ -1731,7 +1717,7 @@ arm_analyze_prologue (struct gdbarch *gdbarch, cache->framesize = framesize; for (regno = 0; regno < ARM_FPS_REGNUM; regno++) - if (pv_area_find_reg (stack, gdbarch, regno, &offset)) + if (stack.find_reg (gdbarch, regno, &offset)) cache->saved_regs[regno].addr = offset; } @@ -1739,7 +1725,6 @@ arm_analyze_prologue (struct gdbarch *gdbarch, fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n", paddress (gdbarch, unrecognized_pc)); - do_cleanups (back_to); return unrecognized_pc; } @@ -2055,50 +2040,40 @@ arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma) static void arm_exidx_new_objfile (struct objfile *objfile) { - struct cleanup *cleanups; struct arm_exidx_data *data; asection *exidx, *extab; bfd_vma exidx_vma = 0, extab_vma = 0; - bfd_size_type exidx_size = 0, extab_size = 0; - gdb_byte *exidx_data = NULL, *extab_data = NULL; LONGEST i; /* If we've already touched this file, do nothing. */ if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL) return; - cleanups = make_cleanup (null_cleanup, NULL); /* Read contents of exception table and index. */ exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind); + gdb::byte_vector exidx_data; if (exidx) { exidx_vma = bfd_section_vma (objfile->obfd, exidx); - exidx_size = bfd_get_section_size (exidx); - exidx_data = (gdb_byte *) xmalloc (exidx_size); - make_cleanup (xfree, exidx_data); + exidx_data.resize (bfd_get_section_size (exidx)); if (!bfd_get_section_contents (objfile->obfd, exidx, - exidx_data, 0, exidx_size)) - { - do_cleanups (cleanups); - return; - } + exidx_data.data (), 0, + exidx_data.size ())) + return; } extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab"); + gdb::byte_vector extab_data; if (extab) { extab_vma = bfd_section_vma (objfile->obfd, extab); - extab_size = bfd_get_section_size (extab); - extab_data = (gdb_byte *) xmalloc (extab_size); - make_cleanup (xfree, extab_data); + extab_data.resize (bfd_get_section_size (extab)); if (!bfd_get_section_contents (objfile->obfd, extab, - extab_data, 0, extab_size)) - { - do_cleanups (cleanups); - return; - } + extab_data.data (), 0, + extab_data.size ())) + return; } /* Allocate exception table data structure. */ @@ -2109,11 +2084,12 @@ arm_exidx_new_objfile (struct objfile *objfile) VEC(arm_exidx_entry_s) *); /* Fill in exception table. */ - for (i = 0; i < exidx_size / 8; i++) + for (i = 0; i < exidx_data.size () / 8; i++) { struct arm_exidx_entry new_exidx_entry; - bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data + i * 8); - bfd_vma val = bfd_h_get_32 (objfile->obfd, exidx_data + i * 8 + 4); + bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data.data () + i * 8); + bfd_vma val = bfd_h_get_32 (objfile->obfd, + exidx_data.data () + i * 8 + 4); bfd_vma addr = 0, word = 0; int n_bytes = 0, n_words = 0; struct obj_section *sec; @@ -2147,10 +2123,10 @@ arm_exidx_new_objfile (struct objfile *objfile) addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000; addr += exidx_vma + i * 8 + 4; - if (addr >= extab_vma && addr + 4 <= extab_vma + extab_size) + if (addr >= extab_vma && addr + 4 <= extab_vma + extab_data.size ()) { word = bfd_h_get_32 (objfile->obfd, - extab_data + addr - extab_vma); + extab_data.data () + addr - extab_vma); addr += 4; if ((word & 0xff000000) == 0x80000000) @@ -2205,10 +2181,11 @@ arm_exidx_new_objfile (struct objfile *objfile) byte, followed by the same unwind instructions as the pre-defined forms. */ if (gnu_personality - && addr + 4 <= extab_vma + extab_size) + && addr + 4 <= extab_vma + extab_data.size ()) { word = bfd_h_get_32 (objfile->obfd, - extab_data + addr - extab_vma); + (extab_data.data () + + addr - extab_vma)); addr += 4; n_bytes = 3; n_words = ((word >> 24) & 0xff); @@ -2219,7 +2196,8 @@ arm_exidx_new_objfile (struct objfile *objfile) /* Sanity check address. */ if (n_words) - if (addr < extab_vma || addr + 4 * n_words > extab_vma + extab_size) + if (addr < extab_vma + || addr + 4 * n_words > extab_vma + extab_data.size ()) n_words = n_bytes = 0; /* The unwind instructions reside in WORD (only the N_BYTES least @@ -2237,7 +2215,7 @@ arm_exidx_new_objfile (struct objfile *objfile) while (n_words--) { word = bfd_h_get_32 (objfile->obfd, - extab_data + addr - extab_vma); + extab_data.data () + addr - extab_vma); addr += 4; *p++ = (gdb_byte) ((word >> 24) & 0xff); @@ -2258,8 +2236,6 @@ arm_exidx_new_objfile (struct objfile *objfile) data->section_maps[sec->the_bfd_section->index], &new_exidx_entry); } - - do_cleanups (cleanups); } /* Search for the exception table entry covering MEMADDR. If one is found, @@ -3828,8 +3804,7 @@ arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function, reg_char, reg_scaled + i); regnum = user_reg_map_name_to_regnum (gdbarch, name_buf, strlen (name_buf)); - regcache_cooked_write (regcache, regnum, - val + i * unit_length); + regcache->cooked_write (regnum, val + i * unit_length); } } continue; @@ -4211,39 +4186,6 @@ arm_register_sim_regno (struct gdbarch *gdbarch, int regnum) internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum); } -/* NOTE: cagney/2001-08-20: Both convert_from_extended() and - convert_to_extended() use floatformat_arm_ext_littlebyte_bigword. - It is thought that this is is the floating-point register format on - little-endian systems. */ - -static void -convert_from_extended (const struct floatformat *fmt, const void *ptr, - void *dbl, int endianess) -{ - DOUBLEST d; - - if (endianess == BFD_ENDIAN_BIG) - floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d); - else - floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword, - ptr, &d); - floatformat_from_doublest (fmt, &d, dbl); -} - -static void -convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr, - int endianess) -{ - DOUBLEST d; - - floatformat_to_doublest (fmt, ptr, &d); - if (endianess == BFD_ENDIAN_BIG) - floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl); - else - floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword, - &d, dbl); -} - /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand the buffer to be NEW_LEN bytes ending at ENDADDR. Return NULL if an error occurs. BUF is freed. */ @@ -4462,7 +4404,7 @@ arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr) location. */ ULONGEST -displaced_read_reg (struct regcache *regs, struct displaced_step_closure *dsc, +displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc, int regno) { ULONGEST ret; @@ -4500,7 +4442,7 @@ static int displaced_in_arm_mode (struct regcache *regs) { ULONGEST ps; - ULONGEST t_bit = arm_psr_thumb_bit (get_regcache_arch (regs)); + ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ()); regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps); @@ -4510,7 +4452,7 @@ displaced_in_arm_mode (struct regcache *regs) /* Write to the PC as from a branch instruction. */ static void -branch_write_pc (struct regcache *regs, struct displaced_step_closure *dsc, +branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc, ULONGEST val) { if (!dsc->is_thumb) @@ -4529,7 +4471,7 @@ static void bx_write_pc (struct regcache *regs, ULONGEST val) { ULONGEST ps; - ULONGEST t_bit = arm_psr_thumb_bit (get_regcache_arch (regs)); + ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ()); regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps); @@ -4556,7 +4498,7 @@ bx_write_pc (struct regcache *regs, ULONGEST val) /* Write to the PC as if from a load instruction. */ static void -load_write_pc (struct regcache *regs, struct displaced_step_closure *dsc, +load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc, ULONGEST val) { if (DISPLACED_STEPPING_ARCH_VERSION >= 5) @@ -4568,7 +4510,7 @@ load_write_pc (struct regcache *regs, struct displaced_step_closure *dsc, /* Write to the PC as if from an ALU instruction. */ static void -alu_write_pc (struct regcache *regs, struct displaced_step_closure *dsc, +alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc, ULONGEST val) { if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb) @@ -4582,7 +4524,7 @@ alu_write_pc (struct regcache *regs, struct displaced_step_closure *dsc, this is controlled by the WRITE_PC argument. */ void -displaced_write_reg (struct regcache *regs, struct displaced_step_closure *dsc, +displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc, int regno, ULONGEST val, enum pc_write_style write_pc) { if (regno == ARM_PC_REGNUM) @@ -4666,7 +4608,7 @@ insn_references_pc (uint32_t insn, uint32_t bitmask) static int arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn, - const char *iname, struct displaced_step_closure *dsc) + const char *iname, arm_displaced_step_closure *dsc) { if (debug_displaced) fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, " @@ -4681,7 +4623,7 @@ arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn, static int thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2, const char *iname, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { if (debug_displaced) fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, " @@ -4700,7 +4642,7 @@ thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1, static int thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn, const char *iname, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { if (debug_displaced) fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, " @@ -4716,7 +4658,7 @@ thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn, static void cleanup_preload (struct gdbarch *gdbarch, - struct regcache *regs, struct displaced_step_closure *dsc) + struct regcache *regs, arm_displaced_step_closure *dsc) { displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC); if (!dsc->u.preload.immed) @@ -4725,7 +4667,7 @@ cleanup_preload (struct gdbarch *gdbarch, static void install_preload (struct gdbarch *gdbarch, struct regcache *regs, - struct displaced_step_closure *dsc, unsigned int rn) + arm_displaced_step_closure *dsc, unsigned int rn) { ULONGEST rn_val; /* Preload instructions: @@ -4744,7 +4686,7 @@ install_preload (struct gdbarch *gdbarch, struct regcache *regs, static int arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { unsigned int rn = bits (insn, 16, 19); @@ -4764,7 +4706,7 @@ arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs, static int thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2, - struct regcache *regs, struct displaced_step_closure *dsc) + struct regcache *regs, arm_displaced_step_closure *dsc) { unsigned int rn = bits (insn1, 0, 3); unsigned int u_bit = bit (insn1, 7); @@ -4814,7 +4756,7 @@ thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2, static void install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs, - struct displaced_step_closure *dsc, unsigned int rn, + arm_displaced_step_closure *dsc, unsigned int rn, unsigned int rm) { ULONGEST rn_val, rm_val; @@ -4839,7 +4781,7 @@ install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs, static int arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { unsigned int rn = bits (insn, 16, 19); unsigned int rm = bits (insn, 0, 3); @@ -4863,7 +4805,7 @@ arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn, static void cleanup_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { ULONGEST rn_val = displaced_read_reg (regs, dsc, 0); @@ -4875,7 +4817,7 @@ cleanup_copro_load_store (struct gdbarch *gdbarch, static void install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs, - struct displaced_step_closure *dsc, + arm_displaced_step_closure *dsc, int writeback, unsigned int rn) { ULONGEST rn_val; @@ -4903,7 +4845,7 @@ install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs, static int arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { unsigned int rn = bits (insn, 16, 19); @@ -4924,7 +4866,7 @@ arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn, static int thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2, struct regcache *regs, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { unsigned int rn = bits (insn1, 0, 3); @@ -4952,7 +4894,7 @@ thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1, static void cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs, - struct displaced_step_closure *dsc) + arm_displaced_step_closure *dsc) { uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM); int branch_taken = condition_true (dsc->u.branch.cond, status); @@ -4983,7 +4925,7 @@ cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs, static void install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs, - struct displaced_step_closure *dsc, + arm_displaced_step_closure *dsc, unsigned int cond, int exchange, int link, long offset) { /* Implement "BL