This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[commit 1/2] Refactor linux_nat_get_siginfo prototype [Re: ping: [patch 4/4]#3 Remove redundant lp->siginfo]


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;
 }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]