X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Frs6000-tdep.c;h=ead3500c26300c78c9d509833eb1dad7973bbe47;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=9c4df4a61d69f166ec6524748d668a44cf7d87a0;hpb=30baf67b6505d903bf678f9a0ba3645eb337ce49;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 9c4df4a61d..ead3500c26 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for GDB, the GNU debugger. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -37,7 +37,7 @@ #include "sim-regno.h" #include "gdb/sim-ppc.h" #include "reggroups.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "target-descriptions.h" #include "user-regs.h" #include "record-full.h" @@ -851,18 +851,18 @@ typedef BP_MANIPULATION_ENDIAN (little_breakpoint, big_breakpoint) || (insn & STORE_CONDITIONAL_MASK) == STHCX_INSTRUCTION \ || (insn & STORE_CONDITIONAL_MASK) == STQCX_INSTRUCTION) -typedef buf_displaced_step_closure ppc_displaced_step_closure; +typedef buf_displaced_step_copy_insn_closure ppc_displaced_step_copy_insn_closure; /* We can't displaced step atomic sequences. */ -static struct displaced_step_closure * +static displaced_step_copy_insn_closure_up ppc_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { size_t len = gdbarch_max_insn_length (gdbarch); - std::unique_ptr closure - (new ppc_displaced_step_closure (len)); + std::unique_ptr closure + (new ppc_displaced_step_copy_insn_closure (len)); gdb_byte *buf = closure->buf.data (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int insn; @@ -894,20 +894,21 @@ ppc_displaced_step_copy_insn (struct gdbarch *gdbarch, displaced_step_dump_bytes (gdb_stdlog, buf, len); } - return closure.release (); + /* This is a work around for a problem with g++ 4.8. */ + return displaced_step_copy_insn_closure_up (closure.release ()); } /* Fix up the state of registers and memory after having single-stepped a displaced instruction. */ static void ppc_displaced_step_fixup (struct gdbarch *gdbarch, - struct displaced_step_closure *closure_, + struct displaced_step_copy_insn_closure *closure_, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); /* Our closure is a copy of the instruction. */ - ppc_displaced_step_closure *closure = (ppc_displaced_step_closure *) closure_; + ppc_displaced_step_copy_insn_closure *closure = (ppc_displaced_step_copy_insn_closure *) closure_; ULONGEST insn = extract_unsigned_integer (closure->buf.data (), PPC_INSN_SIZE, byte_order); ULONGEST opcode = 0; @@ -995,7 +996,7 @@ ppc_displaced_step_fixup (struct gdbarch *gdbarch, displaced instruction. */ static int ppc_displaced_step_hw_singlestep (struct gdbarch *gdbarch, - struct displaced_step_closure *closure) + struct displaced_step_copy_insn_closure *closure) { return 1; } @@ -2119,9 +2120,9 @@ rs6000_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) to __eabi in case the GCC option "-fleading-underscore" was used to compile the program. */ if (s.minsym != NULL - && MSYMBOL_LINKAGE_NAME (s.minsym) != NULL - && (strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "__eabi") == 0 - || strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "___eabi") == 0)) + && s.minsym->linkage_name () != NULL + && (strcmp (s.minsym->linkage_name (), "__eabi") == 0 + || strcmp (s.minsym->linkage_name (), "___eabi") == 0)) pc += 4; } return pc; @@ -2205,7 +2206,7 @@ rs6000_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc) msymbol = lookup_minimal_symbol_by_pc (pc); if (msymbol.minsym && rs6000_in_solib_return_trampoline (gdbarch, pc, - MSYMBOL_LINKAGE_NAME (msymbol.minsym))) + msymbol.minsym->linkage_name ())) { /* Double-check that the third instruction from PC is relative "b". */ op = read_memory_integer (pc + 8, 4, byte_order); @@ -2273,7 +2274,7 @@ rs6000_builtin_type_vec64 (struct gdbarch *gdbarch) init_vector_type (bt->builtin_int8, 8)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "ppc_builtin_type_vec64"; + t->set_name ("ppc_builtin_type_vec64"); tdep->ppc_builtin_type_vec64 = t; } @@ -2320,7 +2321,7 @@ rs6000_builtin_type_vec128 (struct gdbarch *gdbarch) init_vector_type (bt->builtin_int8, 16)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "ppc_builtin_type_vec128"; + t->set_name ("ppc_builtin_type_vec128"); tdep->ppc_builtin_type_vec128 = t; } @@ -2530,7 +2531,7 @@ rs6000_convert_register_p (struct gdbarch *gdbarch, int regnum, return (tdep->ppc_fp0_regnum >= 0 && regnum >= tdep->ppc_fp0_regnum && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs - && TYPE_CODE (type) == TYPE_CODE_FLT + && type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) != TYPE_LENGTH (builtin_type (gdbarch)->builtin_double)); } @@ -2545,7 +2546,7 @@ rs6000_register_to_value (struct frame_info *frame, struct gdbarch *gdbarch = get_frame_arch (frame); gdb_byte from[PPC_MAX_REGISTER_SIZE]; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + gdb_assert (type->code () == TYPE_CODE_FLT); if (!get_frame_register_bytes (frame, regnum, 0, register_size (gdbarch, regnum), @@ -2567,7 +2568,7 @@ rs6000_value_to_register (struct frame_info *frame, struct gdbarch *gdbarch = get_frame_arch (frame); gdb_byte to[PPC_MAX_REGISTER_SIZE]; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + gdb_assert (type->code () == TYPE_CODE_FLT); target_float_convert (from, type, to, builtin_type (gdbarch)->builtin_double); @@ -3314,7 +3315,7 @@ rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p) /* Information about a particular processor variant. */ -struct variant +struct ppc_variant { /* Name of this variant. */ const char *name; @@ -3332,7 +3333,7 @@ struct variant struct target_desc **tdesc; }; -static struct variant variants[] = +static struct ppc_variant variants[] = { {"powerpc", "PowerPC user-level", bfd_arch_powerpc, bfd_mach_ppc, &tdesc_powerpc_altivec32}, @@ -3391,10 +3392,10 @@ static struct variant variants[] = /* Return the variant corresponding to architecture ARCH and machine number MACH. If no such variant exists, return null. */ -static const struct variant * +static const struct ppc_variant * find_variant_by_arch (enum bfd_architecture arch, unsigned long mach) { - const struct variant *v; + const struct ppc_variant *v; for (v = variants; v->name; v++) if (arch == v->arch && mach == v->mach) @@ -6198,7 +6199,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) layout, if we do not already have one. */ if (! tdesc_has_registers (tdesc)) { - const struct variant *v; + const struct ppc_variant *v; /* Choose variant. */ v = find_variant_by_arch (arch, mach); @@ -7171,22 +7172,6 @@ rs6000_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file) /* FIXME: Dump gdbarch_tdep. */ } -/* PowerPC-specific commands. */ - -static void -set_powerpc_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\ -\"set powerpc\" must be followed by an appropriate subcommand.\n")); - help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout); -} - -static void -show_powerpc_command (const char *args, int from_tty) -{ - cmd_show_list (showpowerpccmdlist, from_tty, ""); -} - static void powerpc_set_soft_float (const char *args, int from_tty, struct cmd_list_element *c) @@ -7307,8 +7292,9 @@ ppc_insn_ds_field (unsigned int insn) /* Initialization code. */ +void _initialize_rs6000_tdep (); void -_initialize_rs6000_tdep (void) +_initialize_rs6000_tdep () { gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep); gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep); @@ -7336,13 +7322,13 @@ _initialize_rs6000_tdep (void) /* Add root prefix command for all "set powerpc"/"show powerpc" commands. */ - add_prefix_cmd ("powerpc", no_class, set_powerpc_command, - _("Various PowerPC-specific commands."), - &setpowerpccmdlist, "set powerpc ", 0, &setlist); + add_basic_prefix_cmd ("powerpc", no_class, + _("Various PowerPC-specific commands."), + &setpowerpccmdlist, "set powerpc ", 0, &setlist); - add_prefix_cmd ("powerpc", no_class, show_powerpc_command, - _("Various PowerPC-specific commands."), - &showpowerpccmdlist, "show powerpc ", 0, &showlist); + add_show_prefix_cmd ("powerpc", no_class, + _("Various PowerPC-specific commands."), + &showpowerpccmdlist, "show powerpc ", 0, &showlist); /* Add a command to allow the user to force the ABI. */ add_setshow_auto_boolean_cmd ("soft-float", class_support,