[PATCH 2/3] Add gdb-7.4.1 patches from Gentoo portage gdb-7.4.1 patch

Florian Fainelli f.fainelli@gmail.com
Sat Sep 22 18:01:00 GMT 2012


Le 22/09/2012 10:30, Bongseo Jang a écrit :
> hi, all
>
> Finding gdb-7.4.1 doesn't go well with eglibc_2_16, I applied  gentoo
> portage gdb-7.4.1 patch.
>
> This is it when you failed to build gdb-native.
>          gdb-7.4.1/gdb/linux-nat.h:79:18: error: field 'siginfo' has
> incomplete type"

And gdb is not the only thing to be patched, GCC also uses struct 
siginfo instead of siginfo_t in architecture specific linux-unwind.h 
files, I will send the patch a little later in the weekend.

>
>
> diff -r 677050b5c263 -r e9cb0fae0ee0
> patches/gdb/7.4.1/00_all_ptrace_setsiginfo.patch
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/patches/gdb/7.4.1/00_all_ptrace_setsiginfo.patch	Sat Sep 22
> 16:56:58 2012 +0900
> @@ -0,0 +1,314 @@
> +fix from upstream for building with newer kernel headers
> +
> +From a7f9ca9cb797d653dc7919538e1dfa0c26010331 Mon Sep 17 00:00:00 2001
> +From: tschwinge <tschwinge>
> +Date: Wed, 21 Mar 2012 13:43:50 +0000
> +Subject: [PATCH] struct siginfo vs. siginfo_t
> +
> +gdb/
> +	* amd64-linux-nat.c (amd64_linux_siginfo_fixup): Use siginfo_t instead
> +	of struct siginfo.
> +	* arm-linux-nat.c (arm_linux_stopped_data_address): Likewise.
> +	* ia64-linux-nat.c (ia64_linux_stopped_data_address): Likewise.
> +	* linux-nat.c (linux_nat_siginfo_fixup, siginfo_fixup)
> +	(linux_xfer_siginfo, linux_nat_set_siginfo_fixup)
> +	(linux_nat_get_siginfo): Likewise.
> +	* linux-nat.h (struct lwp_info, linux_nat_set_siginfo_fixup)
> +	(linux_nat_get_siginfo): Likewise.
> +	* linux-tdep.c (linux_get_siginfo_type): Likewise.
> +	* ppc-linux-nat.c (ppc_linux_stopped_data_address): Likewise.
> +	* procfs.c (gdb_siginfo_t): Likewise.
> +
> +gdbserver/
> +	* linux-arm-low.c (arm_stopped_by_watchpoint): Use siginfo_t instead of
> +	struct siginfo.
> +	* linux-low.c (siginfo_fixup, linux_xfer_siginfo): Likewise.
> +	* linux-x86-low.c (x86_siginfo_fixup): Likewise.
> +	* linux-low.h: Include <signal.h>.
> +	(struct siginfo): Remove forward declaration.
> +	(struct linux_target_ops) <siginfo_fixup>: Use siginfo_t instead of
> +	struct siginfo.
> +---
> + gdb/ChangeLog                 |   15 +++++++++++++++
> + gdb/amd64-linux-nat.c         |    4 ++--
> + gdb/arm-linux-nat.c           |    2 +-
> + gdb/gdbserver/ChangeLog       |   11 +++++++++++
> + gdb/gdbserver/linux-arm-low.c |    2 +-
> + gdb/gdbserver/linux-low.c     |   10 +++++-----
> + gdb/gdbserver/linux-low.h     |    5 ++---
> + gdb/gdbserver/linux-x86-low.c |    4 ++--
> + gdb/ia64-linux-nat.c          |    2 +-
> + gdb/linux-nat.c               |   16 ++++++++--------
> + gdb/linux-nat.h               |    6 +++---
> + gdb/ppc-linux-nat.c           |    2 +-
> + gdb/procfs.c                  |    2 +-
> + 13 files changed, 53 insertions(+), 28 deletions(-)
> +
> +diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c
> +index f954483..5ebba3a 100644
> +--- a/gdb/amd64-linux-nat.c
> ++++ b/gdb/amd64-linux-nat.c
> +@@ -731,13 +731,13 @@ siginfo_from_compat_siginfo (siginfo_t *to,
> compat_siginfo_t *from)
> +    INF.  */
> +
> + static int
> +-amd64_linux_siginfo_fixup (struct siginfo *native, gdb_byte *inf,
> int direction)
> ++amd64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
> + {
> +   /* Is the inferior 32-bit?  If so, then do fixup the siginfo
> +      object.  */
> +   if (gdbarch_addr_bit (get_frame_arch (get_current_frame ())) == 32)
> +     {
> +-      gdb_assert (sizeof (struct siginfo) == sizeof (compat_siginfo_t));
> ++      gdb_assert (sizeof (siginfo_t) == sizeof (compat_siginfo_t));
> +
> +       if (direction == 0)
> + 	compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, native);
> +diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c
> +index c5ce21c..f9f6ba5 100644
> +--- a/gdb/arm-linux-nat.c
> ++++ b/gdb/arm-linux-nat.c
> +@@ -1137,7 +1137,7 @@ 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)
> + {
> +-  struct siginfo *siginfo_p = linux_nat_get_siginfo (inferior_ptid);
> ++  siginfo_t *siginfo_p = linux_nat_get_siginfo (inferior_ptid);
> +   int slot = siginfo_p->si_errno;
> +
> +   /* This must be a hardware breakpoint.  */
> +diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c
> +index ff2437d..01208ef 100644
> +--- a/gdb/gdbserver/linux-arm-low.c
> ++++ b/gdb/gdbserver/linux-arm-low.c
> +@@ -631,7 +631,7 @@ static int
> + arm_stopped_by_watchpoint (void)
> + {
> +   struct lwp_info *lwp = get_thread_lwp (current_inferior);
> +-  struct siginfo siginfo;
> ++  siginfo_t siginfo;
> +
> +   /* We must be able to set hardware watchpoints.  */
> +   if (arm_linux_get_hw_watchpoint_count () == 0)
> +diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
> +index d2d4c1d..4734f15 100644
> +--- a/gdb/gdbserver/linux-low.c
> ++++ b/gdb/gdbserver/linux-low.c
> +@@ -4779,7 +4779,7 @@ linux_qxfer_osdata (const char *annex,
> +    layout of the inferiors' architecture.  */
> +
> + static void
> +-siginfo_fixup (struct siginfo *siginfo, void *inf_siginfo, int direction)
> ++siginfo_fixup (siginfo_t *siginfo, void *inf_siginfo, int direction)
> + {
> +   int done = 0;
> +
> +@@ -4791,9 +4791,9 @@ siginfo_fixup (struct siginfo *siginfo, void
> *inf_siginfo, int direction)
> +   if (!done)
> +     {
> +       if (direction == 1)
> +-	memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
> ++	memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
> +       else
> +-	memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
> ++	memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
> +     }
> + }
> +
> +@@ -4802,8 +4802,8 @@ linux_xfer_siginfo (const char *annex, unsigned
> char *readbuf,
> + 		    unsigned const char *writebuf, CORE_ADDR offset, int len)
> + {
> +   int pid;
> +-  struct siginfo siginfo;
> +-  char inf_siginfo[sizeof (struct siginfo)];
> ++  siginfo_t siginfo;
> ++  char inf_siginfo[sizeof (siginfo_t)];
> +
> +   if (current_inferior == NULL)
> +     return -1;
> +diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h
> +index 677d261..3aeae70 100644
> +--- a/gdb/gdbserver/linux-low.h
> ++++ b/gdb/gdbserver/linux-low.h
> +@@ -20,6 +20,7 @@
> + #ifdef HAVE_THREAD_DB_H
> + #include <thread_db.h>
> + #endif
> ++#include <signal.h>
> +
> + #include "gdb_proc_service.h"
> +
> +@@ -46,8 +47,6 @@ struct regset_info
> + extern struct regset_info target_regsets[];
> + #endif
> +
> +-struct siginfo;
> +-
> + struct process_info_private
> + {
> +   /* Arch-specific additions.  */
> +@@ -109,7 +108,7 @@ struct linux_target_ops
> +      Returns true if any conversion was done; false otherwise.
> +      If DIRECTION is 1, then copy from INF to NATIVE.
> +      If DIRECTION is 0, copy from NATIVE to INF.  */
> +-  int (*siginfo_fixup) (struct siginfo *native, void *inf, int direction);
> ++  int (*siginfo_fixup) (siginfo_t *native, void *inf, int direction);
> +
> +   /* Hook to call when a new process is created or attached to.
> +      If extra per-process architecture-specific data is needed,
> +diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
> +index ed1f8a8..b466b5d 100644
> +--- a/gdb/gdbserver/linux-x86-low.c
> ++++ b/gdb/gdbserver/linux-x86-low.c
> +@@ -918,13 +918,13 @@ siginfo_from_compat_siginfo (siginfo_t *to,
> compat_siginfo_t *from)
> +    INF.  */
> +
> + static int
> +-x86_siginfo_fixup (struct siginfo *native, void *inf, int direction)
> ++x86_siginfo_fixup (siginfo_t *native, void *inf, int direction)
> + {
> + #ifdef __x86_64__
> +   /* Is the inferior 32-bit?  If so, then fixup the siginfo object.  */
> +   if (register_size (0) == 4)
> +     {
> +-      if (sizeof (struct siginfo) != sizeof (compat_siginfo_t))
> ++      if (sizeof (siginfo_t) != sizeof (compat_siginfo_t))
> + 	fatal ("unexpected difference in siginfo");
> +
> +       if (direction == 0)
> +diff --git a/gdb/ia64-linux-nat.c b/gdb/ia64-linux-nat.c
> +index 8773195..19b827f 100644
> +--- a/gdb/ia64-linux-nat.c
> ++++ b/gdb/ia64-linux-nat.c
> +@@ -637,7 +637,7 @@ static int
> + ia64_linux_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
> + {
> +   CORE_ADDR psr;
> +-  struct siginfo *siginfo_p;
> ++  siginfo_t *siginfo_p;
> +   struct regcache *regcache = get_current_regcache ();
> +
> +   siginfo_p = linux_nat_get_siginfo (inferior_ptid);
> +diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
> +index f80c0c1..d81d55e 100644
> +--- a/gdb/linux-nat.c
> ++++ b/gdb/linux-nat.c
> +@@ -188,7 +188,7 @@ static void (*linux_nat_prepare_to_resume)
> (struct lwp_info *);
> + /* The method to call, if any, when the siginfo object needs to be
> +    converted between the layout returned by ptrace, and the layout in
> +    the architecture of the inferior.  */
> +-static int (*linux_nat_siginfo_fixup) (struct siginfo *,
> ++static int (*linux_nat_siginfo_fixup) (siginfo_t *,
> + 				       gdb_byte *,
> + 				       int);
> +
> +@@ -4232,7 +4232,7 @@ linux_nat_mourn_inferior (struct target_ops *ops)
> +    layout of the inferiors' architecture.  */
> +
> + static void
> +-siginfo_fixup (struct siginfo *siginfo, gdb_byte *inf_siginfo, int direction)
> ++siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
> + {
> +   int done = 0;
> +
> +@@ -4244,9 +4244,9 @@ siginfo_fixup (struct siginfo *siginfo,
> gdb_byte *inf_siginfo, int direction)
> +   if (!done)
> +     {
> +       if (direction == 1)
> +-	memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
> ++	memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
> +       else
> +-	memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
> ++	memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
> +     }
> + }
> +
> +@@ -4256,8 +4256,8 @@ linux_xfer_siginfo (struct target_ops *ops,
> enum target_object object,
> + 		    const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
> + {
> +   int pid;
> +-  struct siginfo siginfo;
> +-  gdb_byte inf_siginfo[sizeof (struct siginfo)];
> ++  siginfo_t siginfo;
> ++  gdb_byte inf_siginfo[sizeof (siginfo_t)];
> +
> +   gdb_assert (object == TARGET_OBJECT_SIGNAL_INFO);
> +   gdb_assert (readbuf || writebuf);
> +@@ -5266,7 +5266,7 @@ linux_nat_set_new_thread (struct target_ops *t,
> +    inferior.  */
> + void
> + linux_nat_set_siginfo_fixup (struct target_ops *t,
> +-			     int (*siginfo_fixup) (struct siginfo *,
> ++			     int (*siginfo_fixup) (siginfo_t *,
> + 						   gdb_byte *,
> + 						   int))
> + {
> +@@ -5285,7 +5285,7 @@ linux_nat_set_prepare_to_resume (struct target_ops *t,
> + }
> +
> + /* Return the saved siginfo associated with PTID.  */
> +-struct siginfo *
> ++siginfo_t *
> + linux_nat_get_siginfo (ptid_t ptid)
> + {
> +   struct lwp_info *lp = find_lwp_pid (ptid);
> +diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
> +index c9878d9..d87f0cf 100644
> +--- a/gdb/linux-nat.h
> ++++ b/gdb/linux-nat.h
> +@@ -78,7 +78,7 @@ struct lwp_info
> +
> +   /* Non-zero si_signo if this LWP stopped with a trap.  si_addr may
> +      be the address of a hardware watchpoint.  */
> +-  struct siginfo siginfo;
> ++  siginfo_t siginfo;
> +
> +   /* STOPPED_BY_WATCHPOINT is non-zero if this LWP stopped with a data
> +      watchpoint trap.  */
> +@@ -184,7 +184,7 @@ void linux_nat_set_new_thread (struct target_ops
> *, void (*) (struct lwp_info *)
> +    that ptrace returns, and the layout in the architecture of the
> +    inferior.  */
> + void linux_nat_set_siginfo_fixup (struct target_ops *,
> +-				  int (*) (struct siginfo *,
> ++				  int (*) (siginfo_t *,
> + 					   gdb_byte *,
> + 					   int));
> +
> +@@ -198,7 +198,7 @@ void linux_nat_set_prepare_to_resume (struct target_ops *,
> + void linux_nat_switch_fork (ptid_t new_ptid);
> +
> + /* Return the saved siginfo associated with PTID.  */
> +-struct siginfo *linux_nat_get_siginfo (ptid_t ptid);
> ++siginfo_t *linux_nat_get_siginfo (ptid_t ptid);
> +
> + /* Set alternative SIGTRAP-like events recognizer.  */
> + void linux_nat_set_status_is_event (struct target_ops *t,
> +diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
> +index 1bd157b..9bd11fd 100644
> +--- a/gdb/ppc-linux-nat.c
> ++++ b/gdb/ppc-linux-nat.c
> +@@ -2218,7 +2218,7 @@ ppc_linux_thread_exit (struct thread_info *tp,
> int silent)
> + static int
> + ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
> + {
> +-  struct siginfo *siginfo_p;
> ++  siginfo_t *siginfo_p;
> +
> +   siginfo_p = linux_nat_get_siginfo (inferior_ptid);
> +
> +diff --git a/gdb/procfs.c b/gdb/procfs.c
> +index 903621d..cb4bc7c 100644
> +--- a/gdb/procfs.c
> ++++ b/gdb/procfs.c
> +@@ -266,7 +266,7 @@ typedef struct sigaction gdb_sigaction_t;
> + #ifdef HAVE_PR_SIGINFO64_T
> + typedef pr_siginfo64_t gdb_siginfo_t;
> + #else
> +-typedef struct siginfo gdb_siginfo_t;
> ++typedef siginfo_t gdb_siginfo_t;
> + #endif
> +
> + /* On mips-irix, praddset and prdelset are defined in such a way that
> +--
> +1.7.9.7
> +
> diff -r 677050b5c263 -r e9cb0fae0ee0
> patches/gdb/7.4.1/05_all_readline-headers.patch
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/patches/gdb/7.4.1/05_all_readline-headers.patch	Sat Sep 22
> 16:56:58 2012 +0900
> @@ -0,0 +1,42 @@
> +--- a/readline/complete.c
> ++++ b/readline/complete.c
> +@@ -25,6 +25,11 @@
> + #  include <config.h>
> + #endif
> +
> ++#ifdef HAVE_WCHAR_H /* wcwidth() */
> ++# define _GNU_SOURCE
> ++# include <wchar.h>
> ++#endif
> ++
> + #include <sys/types.h>
> + #include <fcntl.h>
> + #if defined (HAVE_SYS_FILE_H)
> +--- a/readline/display.c
> ++++ b/readline/display.c
> +@@ -25,6 +25,11 @@
> + #  include <config.h>
> + #endif
> +
> ++#ifdef HAVE_WCHAR_H /* wcwidth() */
> ++# define _GNU_SOURCE
> ++# include <wchar.h>
> ++#endif
> ++
> + #include <sys/types.h>
> +
> + #if defined (HAVE_UNISTD_H)
> +--- a/readline/mbutil.c
> ++++ b/readline/mbutil.c
> +@@ -25,6 +25,11 @@
> + #  include <config.h>
> + #endif
> +
> ++#ifdef HAVE_WCHAR_H /* wcwidth() */
> ++# define _GNU_SOURCE
> ++# include <wchar.h>
> ++#endif
> ++
> + #include <sys/types.h>
> + #include <fcntl.h>
> + #include "posixjmp.h"
>
>
>
>
> --
> For unsubscribe information see http://sourceware.org/lists.html#faq
>


--
For unsubscribe information see http://sourceware.org/lists.html#faq



More information about the crossgcc mailing list