projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add target_ops argument to to_trace_set_readonly_regions
[deliverable/binutils-gdb.git]
/
gdb
/
arm-linux-nat.c
diff --git
a/gdb/arm-linux-nat.c
b/gdb/arm-linux-nat.c
index c614f968654bcc6bbf83e1fc635f07b7792769d3..75f58ca49799e2495902a1fcf9140edcb70bcbbc 100644
(file)
--- a/
gdb/arm-linux-nat.c
+++ b/
gdb/arm-linux-nat.c
@@
-1,6
+1,5
@@
/* GNU/Linux on ARM native support.
/* GNU/Linux on ARM native support.
- Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009,
- 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-20,7
+19,7
@@
#include "defs.h"
#include "inferior.h"
#include "gdbcore.h"
#include "defs.h"
#include "inferior.h"
#include "gdbcore.h"
-#include
"gdb_string.h"
+#include
<string.h>
#include "regcache.h"
#include "target.h"
#include "linux-nat.h"
#include "regcache.h"
#include "target.h"
#include "linux-nat.h"
@@
-78,12
+77,12
@@
extern int arm_apcs_32;
individual thread (process) ID. get_thread_id () is used to get
the thread id if it's available, and the process id otherwise. */
individual thread (process) ID. get_thread_id () is used to get
the thread id if it's available, and the process id otherwise. */
-int
+
static
int
get_thread_id (ptid_t ptid)
{
get_thread_id (ptid_t ptid)
{
- int tid =
TIDGET
(ptid);
+ int tid =
ptid_get_lwp
(ptid);
if (0 == tid)
if (0 == tid)
- tid =
PIDGET
(ptid);
+ tid =
ptid_get_pid
(ptid);
return tid;
}
return tid;
}
@@
-672,7
+671,7
@@
arm_linux_read_description (struct target_ops *ops)
/* Now make sure that the kernel supports reading these
registers. Support was added in 2.6.30. */
/* Now make sure that the kernel supports reading these
registers. Support was added in 2.6.30. */
- pid =
GET_LWP
(inferior_ptid);
+ pid =
ptid_get_lwp
(inferior_ptid);
errno = 0;
buf = alloca (VFP_REGS_SIZE);
if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0
errno = 0;
buf = alloca (VFP_REGS_SIZE);
if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0
@@
-748,7
+747,8
@@
arm_linux_get_hw_watchpoint_count (void)
/* Have we got a free break-/watch-point available for use? Returns -1 if
there is not an appropriate resource available, otherwise returns 1. */
static int
/* Have we got a free break-/watch-point available for use? Returns -1 if
there is not an appropriate resource available, otherwise returns 1. */
static int
-arm_linux_can_use_hw_breakpoint (int type, int cnt, int ot)
+arm_linux_can_use_hw_breakpoint (struct target_ops *self,
+ int type, int cnt, int ot)
{
if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
|| type == bp_access_watchpoint || type == bp_watchpoint)
{
if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
|| type == bp_access_watchpoint || type == bp_watchpoint)
@@
-897,11
+897,17
@@
arm_linux_hw_breakpoint_initialize (struct gdbarch *gdbarch,
/* We have to create a mask for the control register which says which bits
of the word pointed to by address to break on. */
if (arm_pc_is_thumb (gdbarch, address))
/* We have to create a mask for the control register which says which bits
of the word pointed to by address to break on. */
if (arm_pc_is_thumb (gdbarch, address))
- mask = 0x3 << (address & 2);
+ {
+ mask = 0x3;
+ address &= ~1;
+ }
else
else
- mask = 0xf;
+ {
+ mask = 0xf;
+ address &= ~3;
+ }
- p->address = (unsigned int)
(address & ~3)
;
+ p->address = (unsigned int)
address
;
p->control = arm_hwbp_control_initialize (mask, arm_hwbp_break, 1);
}
p->control = arm_hwbp_control_initialize (mask, arm_hwbp_break, 1);
}
@@
-1031,7
+1037,8
@@
arm_linux_remove_hw_breakpoint1 (const struct arm_linux_hw_breakpoint *bpt,
/* Insert a Hardware breakpoint. */
static int
/* Insert a Hardware breakpoint. */
static int
-arm_linux_insert_hw_breakpoint (struct gdbarch *gdbarch,
+arm_linux_insert_hw_breakpoint (struct target_ops *self,
+ struct gdbarch *gdbarch,
struct bp_target_info *bp_tgt)
{
struct lwp_info *lp;
struct bp_target_info *bp_tgt)
{
struct lwp_info *lp;
@@
-1042,14
+1049,15
@@
arm_linux_insert_hw_breakpoint (struct gdbarch *gdbarch,
arm_linux_hw_breakpoint_initialize (gdbarch, bp_tgt, &p);
ALL_LWPS (lp)
arm_linux_hw_breakpoint_initialize (gdbarch, bp_tgt, &p);
ALL_LWPS (lp)
- arm_linux_insert_hw_breakpoint1 (&p,
TIDGET
(lp->ptid), 0);
+ arm_linux_insert_hw_breakpoint1 (&p,
ptid_get_lwp
(lp->ptid), 0);
return 0;
}
/* Remove a hardware breakpoint. */
static int
return 0;
}
/* Remove a hardware breakpoint. */
static int
-arm_linux_remove_hw_breakpoint (struct gdbarch *gdbarch,
+arm_linux_remove_hw_breakpoint (struct target_ops *self,
+ struct gdbarch *gdbarch,
struct bp_target_info *bp_tgt)
{
struct lwp_info *lp;
struct bp_target_info *bp_tgt)
{
struct lwp_info *lp;
@@
-1060,7
+1068,7
@@
arm_linux_remove_hw_breakpoint (struct gdbarch *gdbarch,
arm_linux_hw_breakpoint_initialize (gdbarch, bp_tgt, &p);
ALL_LWPS (lp)
arm_linux_hw_breakpoint_initialize (gdbarch, bp_tgt, &p);
ALL_LWPS (lp)
- arm_linux_remove_hw_breakpoint1 (&p,
TIDGET
(lp->ptid), 0);
+ arm_linux_remove_hw_breakpoint1 (&p,
ptid_get_lwp
(lp->ptid), 0);
return 0;
}
return 0;
}
@@
-1068,7
+1076,8
@@
arm_linux_remove_hw_breakpoint (struct gdbarch *gdbarch,
/* Are we able to use a hardware watchpoint for the LEN bytes starting at
ADDR? */
static int
/* Are we able to use a hardware watchpoint for the LEN bytes starting at
ADDR? */
static int
-arm_linux_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
+arm_linux_region_ok_for_hw_watchpoint (struct target_ops *self,
+ CORE_ADDR addr, int len)
{
const struct arm_linux_hwbp_cap *cap = arm_linux_get_hwbp_cap ();
CORE_ADDR max_wp_length, aligned_addr;
{
const struct arm_linux_hwbp_cap *cap = arm_linux_get_hwbp_cap ();
CORE_ADDR max_wp_length, aligned_addr;
@@
-1100,7
+1109,8
@@
arm_linux_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
/* Insert a Hardware breakpoint. */
static int
/* Insert a Hardware breakpoint. */
static int
-arm_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw,
+arm_linux_insert_watchpoint (struct target_ops *self,
+ CORE_ADDR addr, int len, int rw,
struct expression *cond)
{
struct lwp_info *lp;
struct expression *cond)
{
struct lwp_info *lp;
@@
-1111,14
+1121,15
@@
arm_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw,
arm_linux_hw_watchpoint_initialize (addr, len, rw, &p);
ALL_LWPS (lp)
arm_linux_hw_watchpoint_initialize (addr, len, rw, &p);
ALL_LWPS (lp)
- arm_linux_insert_hw_breakpoint1 (&p,
TIDGET
(lp->ptid), 1);
+ arm_linux_insert_hw_breakpoint1 (&p,
ptid_get_lwp
(lp->ptid), 1);
return 0;
}
/* Remove a hardware breakpoint. */
static int
return 0;
}
/* Remove a hardware breakpoint. */
static int
-arm_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw,
+arm_linux_remove_watchpoint (struct target_ops *self,
+ CORE_ADDR addr, int len, int rw,
struct expression *cond)
{
struct lwp_info *lp;
struct expression *cond)
{
struct lwp_info *lp;
@@
-1129,7
+1140,7
@@
arm_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw,
arm_linux_hw_watchpoint_initialize (addr, len, rw, &p);
ALL_LWPS (lp)
arm_linux_hw_watchpoint_initialize (addr, len, rw, &p);
ALL_LWPS (lp)
- arm_linux_remove_hw_breakpoint1 (&p,
TIDGET
(lp->ptid), 1);
+ arm_linux_remove_hw_breakpoint1 (&p,
ptid_get_lwp
(lp->ptid), 1);
return 0;
}
return 0;
}
@@
-1138,33
+1149,38
@@
arm_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw,
static int
arm_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
{
static int
arm_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
{
- struct siginfo *siginfo_p = linux_nat_get_siginfo (inferior_ptid);
- int slot = siginfo_p->si_errno;
+ siginfo_t siginfo;
+ int slot;
+
+ if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
+ return 0;
/* This must be a hardware breakpoint. */
/* This must be a hardware breakpoint. */
- if (siginfo
_p->
si_signo != SIGTRAP
- || (siginfo
_p->
si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
+ if (siginfo
.
si_signo != SIGTRAP
+ || (siginfo
.
si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
return 0;
/* We must be able to set hardware watchpoints. */
if (arm_linux_get_hw_watchpoint_count () == 0)
return 0;
return 0;
/* We must be able to set hardware watchpoints. */
if (arm_linux_get_hw_watchpoint_count () == 0)
return 0;
+ slot = siginfo.si_errno;
+
/* If we are in a positive slot then we're looking at a breakpoint and not
a watchpoint. */
if (slot >= 0)
return 0;
/* If we are in a positive slot then we're looking at a breakpoint and not
a watchpoint. */
if (slot >= 0)
return 0;
- *addr_p = (CORE_ADDR) (uintptr_t) siginfo
_p->
si_addr;
+ *addr_p = (CORE_ADDR) (uintptr_t) siginfo
.
si_addr;
return 1;
}
/* Has the target been stopped by hitting a watchpoint? */
static int
return 1;
}
/* Has the target been stopped by hitting a watchpoint? */
static int
-arm_linux_stopped_by_watchpoint (
void
)
+arm_linux_stopped_by_watchpoint (
struct target_ops *ops
)
{
CORE_ADDR addr;
{
CORE_ADDR addr;
- return arm_linux_stopped_data_address (
¤t_target
, &addr);
+ return arm_linux_stopped_data_address (
ops
, &addr);
}
static int
}
static int
@@
-1180,7
+1196,7
@@
arm_linux_watchpoint_addr_within_range (struct target_ops *target,
static void
arm_linux_new_thread (struct lwp_info *lp)
{
static void
arm_linux_new_thread (struct lwp_info *lp)
{
- int tid =
TIDGET
(lp->ptid);
+ int tid =
ptid_get_lwp
(lp->ptid);
const struct arm_linux_hwbp_cap *info = arm_linux_get_hwbp_cap ();
if (info != NULL)
const struct arm_linux_hwbp_cap *info = arm_linux_get_hwbp_cap ();
if (info != NULL)
@@
-1215,7
+1231,7
@@
arm_linux_thread_exit (struct thread_info *tp, int silent)
if (info != NULL)
{
int i;
if (info != NULL)
{
int i;
- int tid =
TIDGET
(tp->ptid);
+ int tid =
ptid_get_lwp
(tp->ptid);
struct arm_linux_thread_points *t = NULL, *p;
for (i = 0;
struct arm_linux_thread_points *t = NULL, *p;
for (i = 0;
This page took
0.026838 seconds
and
4
git commands to generate.