X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fppc-linux-nat.c;h=d619971a001d225ea278c776e09fb5297074c6a7;hb=3318ac0e53a673f9989f5e9bbaa9d1c5d536f4e5;hp=3a6bbf416356bbe59c4fcc2c3b2148ba8ed0724a;hpb=0f83012ea0fb84d86d2a84a5feb51c0d63f0b7eb;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c index 3a6bbf4163..d619971a00 100644 --- a/gdb/ppc-linux-nat.c +++ b/gdb/ppc-linux-nat.c @@ -1,6 +1,6 @@ /* PPC GNU/Linux native support. - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -32,7 +32,7 @@ #include #include #include -#include "common/gdb_wait.h" +#include "gdbsupport/gdb_wait.h" #include #include #include "nat/gdb_ptrace.h" @@ -51,6 +51,7 @@ #include "arch/ppc-linux-common.h" #include "arch/ppc-linux-tdesc.h" #include "nat/ppc-linux.h" +#include "linux-tdep.h" /* Similarly for the hardware watchpoint support. These requests are used when the PowerPC HWDEBUG ptrace interface is not available. */ @@ -615,7 +616,7 @@ fetch_register (struct regcache *regcache, int tid, int regno) if (altivec_register_p (gdbarch, regno)) { /* If this is the first time through, or if it is not the first - time through, and we have comfirmed that there is kernel + time through, and we have confirmed that there is kernel support for such a ptrace request, then go and fetch the register. */ if (have_ptrace_getvrregs) @@ -1084,7 +1085,7 @@ store_altivec_registers (const struct regcache *regcache, int tid, perror_with_name (_("Unable to store AltiVec registers")); } -/* Assuming TID referrs to an SPE process, set the top halves of TID's +/* Assuming TID refers to an SPE process, set the top halves of TID's general-purpose registers and its SPE-specific registers to the values in EVRREGSET. If we don't support PTRACE_SETEVRREGS, do nothing. @@ -1574,10 +1575,10 @@ struct hw_break_tuple struct ppc_hw_breakpoint *hw_break; }; -/* This is an internal VEC created to store information about *points inserted - for each thread. This is used when PowerPC HWDEBUG ptrace interface is - available. */ -typedef struct thread_points +/* This is an internal vector created to store information about *points + inserted for each thread. This is used when PowerPC HWDEBUG ptrace + interface is available. */ +struct thread_points { /* The TID to which this *point relates. */ int tid; @@ -1588,10 +1589,9 @@ typedef struct thread_points size of these vector is MAX_SLOTS_NUMBER. If the hw_break element of the tuple is NULL, then the position in the vector is free. */ struct hw_break_tuple *hw_breaks; - } *thread_points_p; -DEF_VEC_P (thread_points_p); + }; -VEC(thread_points_p) *ppc_threads = NULL; +static std::vector ppc_threads; /* The version of the PowerPC HWDEBUG kernel interface that we will use, if available. */ @@ -1757,14 +1757,13 @@ hwdebug_point_cmp (struct ppc_hw_breakpoint *a, struct ppc_hw_breakpoint *b) static struct thread_points * hwdebug_find_thread_points_by_tid (int tid, int alloc_new) { - int i; - struct thread_points *t; - - for (i = 0; VEC_iterate (thread_points_p, ppc_threads, i, t); i++) - if (t->tid == tid) - return t; + for (thread_points *t : ppc_threads) + { + if (t->tid == tid) + return t; + } - t = NULL; + struct thread_points *t = NULL; /* Do we need to allocate a new point_item if the wanted one does not exist? */ @@ -1773,7 +1772,7 @@ hwdebug_find_thread_points_by_tid (int tid, int alloc_new) t = XNEW (struct thread_points); t->hw_breaks = XCNEWVEC (struct hw_break_tuple, max_slots_number); t->tid = tid; - VEC_safe_push (thread_points_p, ppc_threads, t); + ppc_threads.push_back (t); } return t; @@ -1803,12 +1802,14 @@ hwdebug_insert_point (struct ppc_hw_breakpoint *b, int tid) /* Find a free element in the hw_breaks vector. */ for (i = 0; i < max_slots_number; i++) - if (hw_breaks[i].hw_break == NULL) - { - hw_breaks[i].slot = slot; - hw_breaks[i].hw_break = p.release (); - break; - } + { + if (hw_breaks[i].hw_break == NULL) + { + hw_breaks[i].slot = slot; + hw_breaks[i].hw_break = p.release (); + break; + } + } gdb_assert (i != max_slots_number); } @@ -2358,11 +2359,11 @@ ppc_linux_nat_target::low_new_thread (struct lwp_info *lp) struct thread_points *p; struct hw_break_tuple *hw_breaks; - if (VEC_empty (thread_points_p, ppc_threads)) + if (ppc_threads.empty ()) return; /* Get a list of breakpoints from any thread. */ - p = VEC_last (thread_points_p, ppc_threads); + p = ppc_threads.back (); hw_breaks = p->hw_breaks; /* Copy that thread's breakpoints and watchpoints to the new thread. */ @@ -2391,22 +2392,24 @@ ppc_linux_thread_exit (struct thread_info *tp, int silent) int i; int tid = tp->ptid.lwp (); struct hw_break_tuple *hw_breaks; - struct thread_points *t = NULL, *p; + struct thread_points *t = NULL; if (!have_ptrace_hwdebug_interface ()) return; - for (i = 0; VEC_iterate (thread_points_p, ppc_threads, i, p); i++) - if (p->tid == tid) - { - t = p; - break; - } + for (i = 0; i < ppc_threads.size (); i++) + { + if (ppc_threads[i]->tid == tid) + { + t = ppc_threads[i]; + break; + } + } if (t == NULL) return; - VEC_unordered_remove (thread_points_p, ppc_threads, i); + unordered_remove (ppc_threads, i); hw_breaks = t->hw_breaks; @@ -2643,9 +2646,6 @@ ppc_linux_nat_target::read_description () perror_with_name (_("Unable to fetch AltiVec registers")); } - if (hwcap & PPC_FEATURE_CELL) - features.cell = true; - features.isa205 = ppc_linux_has_isa205 (hwcap); if ((hwcap2 & PPC_FEATURE2_DSCR)