This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[commit 1/2] Refactor linux_nat_get_siginfo prototype [Re: ping: [patch 4/4]#3 Remove redundant lp->siginfo]
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: Pedro Alves <pedro at codesourcery dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Fri, 6 Jul 2012 18:52:41 +0200
- Subject: [commit 1/2] Refactor linux_nat_get_siginfo prototype [Re: ping: [patch 4/4]#3 Remove redundant lp->siginfo]
- References: <20100921225026.GE20130@host1.dyn.jankratochvil.net> <20110518192248.GB6042@host1.jankratochvil.net> <201105191951.12117.pedro@codesourcery.com>
On Thu, 19 May 2011 20:51:11 +0200, Pedro Alves wrote:
> On Wednesday 18 May 2011 20:22:48, Jan Kratochvil wrote:
> > struct siginfo *
> > linux_nat_get_siginfo (ptid_t ptid)
>
> Minor nit. I'd've preferred to have the interface changed
> to something like
>
> int
> linux_nat_get_siginfo (ptid_t ptid, struct siginfo *siginfo)
>
> (and make the callers pass in a pointer to a siginfo to fill,
> mirroring the PTRACE_GETSIGINFO interface)
Done as a pre-requisite patch.
Tested build and regression-tested only 'runtest */siginfo*.exp' on
ia64-linux-gnu, ppc64-linux-gnu and arm-linux-gnu.
Thanks,
Jan
http://sourceware.org/ml/gdb-cvs/2012-07/msg00052.html
--- src/gdb/ChangeLog 2012/07/06 15:51:38 1.14444
+++ src/gdb/ChangeLog 2012/07/06 16:49:42 1.14445
@@ -1,5 +1,20 @@
2012-07-06 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Code cleanup for the next patch.
+ * arm-linux-nat.c (arm_linux_stopped_data_address): Change variable
+ siginfo_p to siginfo, update its users incl. the linux_nat_get_siginfo
+ call for it.
+ * ia64-linux-nat.c (ia64_linux_stopped_data_address): Likewise.
+ (ia64_linux_stopped_data_address):
+ * linux-nat.c (linux_nat_get_siginfo): Add parameter siginfo, change
+ the return value.
+ * linux-nat.h (linux_nat_get_siginfo): Likewise.
+ * ppc-linux-nat.c (ppc_linux_stopped_data_address): Change variable
+ siginfo_p to siginfo, update its users incl. the linux_nat_get_siginfo
+ call for it.
+
+2012-07-06 Jan Kratochvil <jan.kratochvil@redhat.com>
+
PR 14321
* findcmd.c (parse_find_args): New variable pattern_buf_size_need.
Increase buffer sizes to 2x we need, not just 2x of the previous size.
--- src/gdb/arm-linux-nat.c 2012/03/21 13:43:54 1.54
+++ src/gdb/arm-linux-nat.c 2012/07/06 16:49:43 1.55
@@ -1137,24 +1137,29 @@
static int
arm_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
{
- siginfo_t *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. */
- 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;
+ 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;
- *addr_p = (CORE_ADDR) (uintptr_t) siginfo_p->si_addr;
+ *addr_p = (CORE_ADDR) (uintptr_t) siginfo.si_addr;
return 1;
}
--- src/gdb/ia64-linux-nat.c 2012/03/28 17:50:17 1.59
+++ src/gdb/ia64-linux-nat.c 2012/07/06 16:49:43 1.60
@@ -649,13 +649,14 @@
ia64_linux_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
{
CORE_ADDR psr;
- siginfo_t *siginfo_p;
+ siginfo_t siginfo;
struct regcache *regcache = get_current_regcache ();
- siginfo_p = linux_nat_get_siginfo (inferior_ptid);
+ if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
+ return 0;
- 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;
regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr);
@@ -663,7 +664,7 @@
for the next instruction. */
regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr);
- *addr_p = (CORE_ADDR)siginfo_p->si_addr;
+ *addr_p = (CORE_ADDR) siginfo.si_addr;
return 1;
}
--- src/gdb/linux-nat.c 2012/06/28 16:34:03 1.251
+++ src/gdb/linux-nat.c 2012/07/06 16:49:43 1.252
@@ -5187,15 +5187,18 @@
linux_nat_prepare_to_resume = prepare_to_resume;
}
-/* Return the saved siginfo associated with PTID. */
-siginfo_t *
-linux_nat_get_siginfo (ptid_t ptid)
+/* See linux-nat.h. */
+
+int
+linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo)
{
struct lwp_info *lp = find_lwp_pid (ptid);
gdb_assert (lp != NULL);
- return &lp->siginfo;
+ *siginfo = lp->siginfo;
+
+ return 1;
}
/* Provide a prototype to silence -Wmissing-prototypes. */
--- src/gdb/linux-nat.h 2012/03/21 13:43:54 1.46
+++ src/gdb/linux-nat.h 2012/07/06 16:49:43 1.47
@@ -197,8 +197,10 @@
to another. */
void linux_nat_switch_fork (ptid_t new_ptid);
-/* Return the saved siginfo associated with PTID. */
-siginfo_t *linux_nat_get_siginfo (ptid_t ptid);
+/* Store the saved siginfo associated with PTID in *SIGINFO.
+ Return 1 if it was retrieved successfully, 0 otherwise (*SIGINFO is
+ uninitialized in such case). */
+int linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo);
/* Set alternative SIGTRAP-like events recognizer. */
void linux_nat_set_status_is_event (struct target_ops *t,
--- src/gdb/ppc-linux-nat.c 2012/05/31 22:07:31 1.113
+++ src/gdb/ppc-linux-nat.c 2012/07/06 16:49:43 1.114
@@ -2221,12 +2221,13 @@
static int
ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
{
- siginfo_t *siginfo_p;
+ siginfo_t siginfo;
- siginfo_p = linux_nat_get_siginfo (inferior_ptid);
+ if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
+ return 0;
- 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;
if (have_ptrace_booke_interface ())
@@ -2235,7 +2236,7 @@
struct thread_points *t;
struct hw_break_tuple *hw_breaks;
/* The index (or slot) of the *point is passed in the si_errno field. */
- int slot = siginfo_p->si_errno;
+ int slot = siginfo.si_errno;
t = booke_find_thread_points_by_tid (TIDGET (inferior_ptid), 0);
@@ -2252,7 +2253,7 @@
}
}
- *addr_p = (CORE_ADDR) (uintptr_t) siginfo_p->si_addr;
+ *addr_p = (CORE_ADDR) (uintptr_t) siginfo.si_addr;
return 1;
}