[Pkg-gdb-logs] [gdb] 02/03: debian/patches: backport Hurd support

Hector Oron zumbi at moszumanska.debian.org
Thu Dec 15 00:58:25 UTC 2016


This is an automated email from the git hooks/post-receive script.

zumbi pushed a commit to branch master
in repository gdb.

commit fd065d1718ef68f7f5ffedb67dcf9d70cb867234
Author: Héctor Orón Martínez <zumbi at debian.org>
Date:   Thu Dec 15 01:47:41 2016 +0100

    debian/patches: backport Hurd support
    
      Backport upstream patches to 7.12 branch
      Pending: hurd-backport-for-7.12-branch.patch
      (Closes: #834575)
    
    Signed-off-by: Héctor Orón Martínez <zumbi at debian.org>
---
 ...-to-Per-inferior-Inferior-qualified-threa.patch |  39 +++
 .../patches/0003-Hurd-C-Explicitly-cast-void.patch |  40 +++
 .../0004-Hurd-C-Avoid-GNU-C-nested-functions.patch |  59 ++++
 ...005-Hurd-C-Avoid-const-char-to-char-casts.patch | 119 +++++++
 .../0006-Hurd-C-kern_return_t-vs.-error_t.patch    | 357 +++++++++++++++++++++
 ...-Hurd-headers-and-MIG-stubs-are-not-yet-f.patch | 149 +++++++++
 ...-CLI-use-parse_thread_id-instead-of-globa.patch |  57 ++++
 debian/patches/0021-Avoid-PATH_MAX-usage.patch     |  44 +++
 ...-to-changes-to-push-pruning-old-threads-d.patch |  54 ++++
 debian/patches/explicit-cast-void.patch            |  34 ++
 debian/patches/hurd-backport-for-7.12-branch.patch |  54 ++++
 debian/patches/series                              |  13 +
 12 files changed, 1019 insertions(+)

diff --git a/debian/patches/0001-Hurd-Adjust-to-Per-inferior-Inferior-qualified-threa.patch b/debian/patches/0001-Hurd-Adjust-to-Per-inferior-Inferior-qualified-threa.patch
new file mode 100644
index 0000000..213ef34
--- /dev/null
+++ b/debian/patches/0001-Hurd-Adjust-to-Per-inferior-Inferior-qualified-threa.patch
@@ -0,0 +1,39 @@
+From 14f6890677849172a4b13779acd9089c9baa3a81 Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Tue, 24 May 2016 19:36:57 +0200
+Subject: [PATCH 01/65] Hurd: Adjust to "Per-inferior/Inferior-qualified thread
+ IDs" changes
+
+    [...]/gdb/gnu-nat.c: In function 'set_sig_thread_cmd':
+    [...]/gdb/gnu-nat.c:2973:7: warning: implicit declaration of function 'thread_id_to_pid' [-Wimplicit-function-declaration]
+           ptid_t ptid = thread_id_to_pid (atoi (args));
+           ^
+    [...]/gdb/gnu-nat.c:2973:7: error: invalid initializer
+
+That's commit 5d5658a1d3c3eb2a09c03f2f0662a1c01963c869, which renamed
+`thread_id_to_pid` to `global_thread_id_to_ptid`.
+
+	gdb/
+	* gnu-nat.c (set_sig_thread_cmd): Call global_thread_id_to_ptid
+	instead of thread_id_to_pid.
+---
+ gdb/ChangeLog | 5 +++++
+ gdb/gnu-nat.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 927ee5c6f1..92b9292428 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -2964,7 +2964,7 @@ set_sig_thread_cmd (char *args, int from_tty)
+     inf->signal_thread = 0;
+   else
+     {
+-      ptid_t ptid = thread_id_to_pid (atoi (args));
++      ptid_t ptid = global_thread_id_to_ptid (atoi (args));
+ 
+       if (ptid_equal (ptid, minus_one_ptid))
+ 	error (_("Thread ID %s not known.  "
+-- 
+2.11.0
+
diff --git a/debian/patches/0003-Hurd-C-Explicitly-cast-void.patch b/debian/patches/0003-Hurd-C-Explicitly-cast-void.patch
new file mode 100644
index 0000000..379cd98
--- /dev/null
+++ b/debian/patches/0003-Hurd-C-Explicitly-cast-void.patch
@@ -0,0 +1,40 @@
+From e9e431d19426a6dd6b8923850398b847af0a1532 Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Fri, 25 Nov 2016 11:01:39 +0100
+Subject: [PATCH 03/65] Hurd, C++: Explicitly cast "void *"
+
+C++ doesn't do implicit type conversions from "void *", so we have to...
+
+	gdb/
+	* i386-gnu-nat.c (i386_gnu_dr_set_control_one)
+	(i386_gnu_dr_set_addr_one): Explicitly cast "void *".
+---
+ gdb/ChangeLog      | 5 +++++
+ gdb/i386-gnu-nat.c | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/gdb/i386gnu-nat.c b/gdb/i386gnu-nat.c
+index e14a181564..c6c53ca508 100644
+--- a/gdb/i386gnu-nat.c
++++ b/gdb/i386gnu-nat.c
+@@ -307,7 +307,7 @@ i386_gnu_dr_set (const struct i386_debug_state *regs, struct proc *thread)
+ static void
+ i386_gnu_dr_set_control_one (struct proc *thread, void *arg)
+ {
+-  unsigned long *control = arg;
++  unsigned long *control = (unsigned long *) arg;
+   struct i386_debug_state regs;
+ 
+   i386_gnu_dr_get (&regs, thread);
+@@ -337,7 +337,7 @@ struct reg_addr
+ static void
+ i386_gnu_dr_set_addr_one (struct proc *thread, void *arg)
+ {
+-  struct reg_addr *reg_addr = arg;
++  struct reg_addr *reg_addr = (struct reg_addr *) arg;
+   struct i386_debug_state regs;
+ 
+   i386_gnu_dr_get (&regs, thread);
+-- 
+2.11.0
+
diff --git a/debian/patches/0004-Hurd-C-Avoid-GNU-C-nested-functions.patch b/debian/patches/0004-Hurd-C-Avoid-GNU-C-nested-functions.patch
new file mode 100644
index 0000000..de22f0e
--- /dev/null
+++ b/debian/patches/0004-Hurd-C-Avoid-GNU-C-nested-functions.patch
@@ -0,0 +1,59 @@
+From a9617a426d001a748168fbc399fcc77e6d8d3cac Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Fri, 25 Nov 2016 14:56:01 +0100
+Subject: [PATCH 04/65] Hurd, C++: Avoid GNU C nested functions
+
+..., which C++ doesn't allow, so...
+
+	gdb/
+	* gnu-nat.c (gnu_create_inferior): Move nested "trace_me"
+	function...
+	(gnu_ptrace_me): ... here.
+---
+ gdb/ChangeLog |  4 ++++
+ gdb/gnu-nat.c | 20 +++++++++++---------
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 92b9292428..34fd6f1ced 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -2110,6 +2110,16 @@ cur_inf (void)
+ }
+ 
+ static void
++gnu_ptrace_me (void)
++{
++  /* We're in the child; make this process stop as soon as it execs.  */
++  struct inf *inf = cur_inf ();
++  inf_debug (inf, "tracing self");
++  if (ptrace (PTRACE_TRACEME) != 0)
++    error (_("ptrace (PTRACE_TRACEME) failed!"));
++}
++
++static void
+ gnu_create_inferior (struct target_ops *ops, 
+ 		     char *exec_file, char *allargs, char **env,
+ 		     int from_tty)
+@@ -2117,17 +2127,9 @@ gnu_create_inferior (struct target_ops *ops,
+   struct inf *inf = cur_inf ();
+   int pid;
+ 
+-  void trace_me (void)
+-  {
+-    /* We're in the child; make this process stop as soon as it execs.  */
+-    inf_debug (inf, "tracing self");
+-    if (ptrace (PTRACE_TRACEME) != 0)
+-      error (_("ptrace (PTRACE_TRACEME) failed!"));
+-  }
+-
+   inf_debug (inf, "creating inferior");
+ 
+-  pid = fork_inferior (exec_file, allargs, env, trace_me,
++  pid = fork_inferior (exec_file, allargs, env, gnu_ptrace_me,
+                        NULL, NULL, NULL, NULL);
+ 
+   /* Attach to the now stopped child, which is actually a shell...  */
+-- 
+2.11.0
+
diff --git a/debian/patches/0005-Hurd-C-Avoid-const-char-to-char-casts.patch b/debian/patches/0005-Hurd-C-Avoid-const-char-to-char-casts.patch
new file mode 100644
index 0000000..49cfcd4
--- /dev/null
+++ b/debian/patches/0005-Hurd-C-Avoid-const-char-to-char-casts.patch
@@ -0,0 +1,119 @@
+From 785102a7d34f2d48f9a1616bf931fea6de2385fb Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Fri, 25 Nov 2016 15:16:13 +0100
+Subject: [PATCH 05/65] Hurd, C++: Avoid "const char *" to "char *" casts
+
+... by a bit of code refactoring:
+
+	gdb/
+	* gnu-nat.c (set_task_pause_cmd, set_signals_cmd)
+	(set_exceptions_cmd): Add variants taking an "int arg" instead of
+	a "char *".  Make the "char *" variants use the former.
+	(set_noninvasive_cmd): Also use the "int arg" variants.
+---
+ gdb/ChangeLog |  5 +++++
+ gdb/gnu-nat.c | 39 ++++++++++++++++++++++++++++-----------
+ 2 files changed, 33 insertions(+), 11 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 34fd6f1ced..29bd9b9039 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -2792,12 +2792,12 @@ active_inf (void)
+ 
+ 

+ static void
+-set_task_pause_cmd (char *args, int from_tty)
++set_task_pause_cmd (int arg, int from_tty)
+ {
+   struct inf *inf = cur_inf ();
+   int old_sc = inf->pause_sc;
+ 
+-  inf->pause_sc = parse_bool_arg (args, "set task pause");
++  inf->pause_sc = arg;
+ 
+   if (old_sc == 0 && inf->pause_sc != 0)
+     /* If the task is currently unsuspended, immediately suspend it,
+@@ -2806,6 +2806,12 @@ set_task_pause_cmd (char *args, int from_tty)
+ }
+ 
+ static void
++set_task_pause_cmd (char *args, int from_tty)
++{
++  set_task_pause_cmd (parse_bool_arg (args, "set task pause"), from_tty);
++}
++
++static void
+ show_task_pause_cmd (char *args, int from_tty)
+ {
+   struct inf *inf = cur_inf ();
+@@ -2991,11 +2997,11 @@ show_sig_thread_cmd (char *args, int from_tty)
+ 
+ 

+ static void
+-set_signals_cmd (char *args, int from_tty)
++set_signals_cmd (int arg, int from_tty)
+ {
+   struct inf *inf = cur_inf ();
+ 
+-  inf->want_signals = parse_bool_arg (args, "set signals");
++  inf->want_signals = arg;
+ 
+   if (inf->task && inf->want_signals != inf->traced)
+     /* Make this take effect immediately in a running process.  */
+@@ -3003,6 +3009,12 @@ set_signals_cmd (char *args, int from_tty)
+ }
+ 
+ static void
++set_signals_cmd (char *args, int from_tty)
++{
++  set_signals_cmd(parse_bool_arg (args, "set signals"), from_tty);
++}
++
++static void
+ show_signals_cmd (char *args, int from_tty)
+ {
+   struct inf *inf = cur_inf ();
+@@ -3015,15 +3027,20 @@ show_signals_cmd (char *args, int from_tty)
+ }
+ 
+ static void
+-set_exceptions_cmd (char *args, int from_tty)
++set_exceptions_cmd (int arg, int from_tty)
+ {
+   struct inf *inf = cur_inf ();
+-  int val = parse_bool_arg (args, "set exceptions");
+ 
+   /* Make this take effect immediately in a running process.  */
+   /* XXX */ ;
+ 
+-  inf->want_exceptions = val;
++  inf->want_exceptions = arg;
++}
++
++static void
++set_exceptions_cmd (char *args, int from_tty)
++{
++  set_exceptions_cmd (parse_bool_arg (args, "set exceptions"), from_tty);
+ }
+ 
+ static void
+@@ -3078,11 +3095,11 @@ static void
+ set_noninvasive_cmd (char *args, int from_tty)
+ {
+   /* Invert the sense of the arg for each component.  */
+-  char *inv_args = parse_bool_arg (args, "set noninvasive") ? "off" : "on";
++  int inv_arg = parse_bool_arg (args, "set noninvasive") ? 0 : 1;
+ 
+-  set_task_pause_cmd (inv_args, from_tty);
+-  set_signals_cmd (inv_args, from_tty);
+-  set_exceptions_cmd (inv_args, from_tty);
++  set_task_pause_cmd (inv_arg, from_tty);
++  set_signals_cmd (inv_arg, from_tty);
++  set_exceptions_cmd (inv_arg, from_tty);
+ }
+ 
+ 

+-- 
+2.11.0
+
diff --git a/debian/patches/0006-Hurd-C-kern_return_t-vs.-error_t.patch b/debian/patches/0006-Hurd-C-kern_return_t-vs.-error_t.patch
new file mode 100644
index 0000000..4eef5ef
--- /dev/null
+++ b/debian/patches/0006-Hurd-C-kern_return_t-vs.-error_t.patch
@@ -0,0 +1,357 @@
+From 0947023d1d4b5d8803a1065d622f707010b2bcdc Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Fri, 25 Nov 2016 11:02:17 +0100
+Subject: [PATCH 06/65] Hurd, C++: kern_return_t vs. error_t
+
+GNU/Hurd uses its own "typedef enum __error_t_codes error_t;"
+([glibc]/sysdeps/mach/hurd/bits/errno.h), contrary to the default
+"typedef int error_t;" ([glibc]/stdlib/errno.h).
+
+The Mach/Hurd RPCs return kern_return_t values, for which, upon assigning them
+to an error_t variable, GCC in C++ mode tells us "error: invalid conversion
+from 'kern_return_t {aka int}' to 'error_t {aka __error_t_codes}'".  Instead of
+casting all these RPC return values to "error_t", just use "kern_return_t"
+variables:
+
+	gdb/
+	* gnu-nat.c (proc_get_exception_port, proc_set_exception_port)
+	(INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port)
+	(proc_steal_exc_port, proc_restore_exc_port, make_proc)
+	(inf_startup, inf_set_pid, inf_validate_procinfo)
+	(inf_validate_task_sc, inf_set_traced, inf_validate_procs)
+	(inf_signal, inf_continue, gnu_wait, S_exception_raise_request)
+	(do_mach_notify_dead_name, S_proc_wait_reply)
+	(S_msg_sig_post_untraced_reply, S_msg_sig_post_reply)
+	(port_msgs_queued, gnu_read_inferior, gnu_write_inferior)
+	(gnu_find_memory_regions, steal_exc_port, thread_takeover_sc_cmd)
+	(flush_inferior_icache): Instead of "error_t" use "kern_return_t".
+	* i386-gnu-nat.c (fetch_fpregs, store_fpregs, i386_gnu_dr_get)
+	(i386_gnu_dr_set): Likewise.
+---
+ gdb/ChangeLog      | 14 ++++++++++++
+ gdb/gnu-nat.c      | 66 +++++++++++++++++++++++++++---------------------------
+ gdb/i386-gnu-nat.c |  8 +++----
+ 3 files changed, 51 insertions(+), 37 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 29bd9b9039..ae4430d754 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -113,8 +113,8 @@ void proc_abort (struct proc *proc, int force);
+ struct proc *make_proc (struct inf *inf, mach_port_t port, int tid);
+ struct proc *_proc_free (struct proc *proc);
+ int proc_update_sc (struct proc *proc);
+-error_t proc_get_exception_port (struct proc *proc, mach_port_t * port);
+-error_t proc_set_exception_port (struct proc *proc, mach_port_t port);
++kern_return_t proc_get_exception_port (struct proc *proc, mach_port_t * port);
++kern_return_t proc_set_exception_port (struct proc *proc, mach_port_t port);
+ static mach_port_t _proc_get_exc_port (struct proc *proc);
+ void proc_steal_exc_port (struct proc *proc, mach_port_t exc_port);
+ void proc_restore_exc_port (struct proc *proc);
+@@ -133,7 +133,7 @@ int proc_trace (struct proc *proc, int set);
+    afterwards).  This effects INF's threads' resume_sc count.  */
+ #define INF_RESUME_MSGPORT_RPC(inf, rpc_expr) \
+   (inf_set_threads_resume_sc_for_signal_thread (inf) \
+-   ? ({ error_t __e; \
++   ? ({ kern_return_t __e; \
+ 	inf_resume (inf); \
+ 	__e = INF_MSGPORT_RPC (inf, rpc_expr); \
+ 	inf_suspend (inf); \
+@@ -367,7 +367,7 @@ proc_get_state (struct proc *proc, int will_modify)
+   if (!proc->state_valid)
+     {
+       mach_msg_type_number_t state_size = THREAD_STATE_SIZE;
+-      error_t err =
++      kern_return_t err =
+ 	thread_get_state (proc->port, THREAD_STATE_FLAVOR,
+ 			  (thread_state_t) &proc->state, &state_size);
+ 
+@@ -387,7 +387,7 @@ proc_get_state (struct proc *proc, int will_modify)
+ 
+ 

+ /* Set PORT to PROC's exception port.  */
+-error_t
++kern_return_t
+ proc_get_exception_port (struct proc * proc, mach_port_t * port)
+ {
+   if (proc_is_task (proc))
+@@ -397,7 +397,7 @@ proc_get_exception_port (struct proc * proc, mach_port_t * port)
+ }
+ 
+ /* Set PROC's exception port to PORT.  */
+-error_t
++kern_return_t
+ proc_set_exception_port (struct proc * proc, mach_port_t port)
+ {
+   proc_debug (proc, "setting exception port: %lu", port);
+@@ -412,7 +412,7 @@ static mach_port_t
+ _proc_get_exc_port (struct proc *proc)
+ {
+   mach_port_t exc_port;
+-  error_t err = proc_get_exception_port (proc, &exc_port);
++  kern_return_t err = proc_get_exception_port (proc, &exc_port);
+ 
+   if (err)
+     /* PROC must be dead.  */
+@@ -438,7 +438,7 @@ proc_steal_exc_port (struct proc *proc, mach_port_t exc_port)
+ 
+   if (cur_exc_port)
+     {
+-      error_t err = 0;
++      kern_return_t err = 0;
+ 
+       proc_debug (proc, "inserting exception port: %lu", exc_port);
+ 
+@@ -481,7 +481,7 @@ proc_restore_exc_port (struct proc *proc)
+ 
+   if (cur_exc_port)
+     {
+-      error_t err = 0;
++      kern_return_t err = 0;
+ 
+       proc_debug (proc, "restoring real exception port");
+ 
+@@ -537,7 +537,7 @@ static int next_thread_id = 1;
+ struct proc *
+ make_proc (struct inf *inf, mach_port_t port, int tid)
+ {
+-  error_t err;
++  kern_return_t err;
+   mach_port_t prev_port = MACH_PORT_NULL;
+   struct proc *proc = XNEW (struct proc);
+ 
+@@ -713,7 +713,7 @@ inf_cleanup (struct inf *inf)
+ void
+ inf_startup (struct inf *inf, int pid)
+ {
+-  error_t err;
++  kern_return_t err;
+ 
+   inf_debug (inf, "startup: pid = %d", pid);
+ 
+@@ -745,7 +745,7 @@ inf_set_pid (struct inf *inf, pid_t pid)
+     task_port = MACH_PORT_NULL;
+   else
+     {
+-      error_t err = proc_pid2task (proc_server, pid, &task_port);
++      kern_return_t err = proc_pid2task (proc_server, pid, &task_port);
+ 
+       if (err)
+ 	error (_("Error getting task for pid %d: %s"),
+@@ -794,7 +794,7 @@ inf_validate_procinfo (struct inf *inf)
+   struct procinfo *pi;
+   mach_msg_type_number_t pi_len = 0;
+   int info_flags = 0;
+-  error_t err =
++  kern_return_t err =
+     proc_getprocinfo (proc_server, inf->pid, &info_flags,
+ 		      (procinfo_t *) &pi, &pi_len, &noise, &noise_len);
+ 
+@@ -822,7 +822,7 @@ inf_validate_task_sc (struct inf *inf)
+   mach_msg_type_number_t pi_len = 0;
+   int info_flags = PI_FETCH_TASKINFO;
+   int suspend_count = -1;
+-  error_t err;
++  kern_return_t err;
+ 
+  retry:
+   err = proc_getprocinfo (proc_server, inf->pid, &info_flags,
+@@ -875,7 +875,7 @@ inf_set_traced (struct inf *inf, int on)
+     /* Make it take effect immediately.  */
+     {
+       sigset_t mask = on ? ~(sigset_t) 0 : 0;
+-      error_t err =
++      kern_return_t err =
+ 	INF_RESUME_MSGPORT_RPC (inf, msg_set_init_int (msgport, refport,
+ 						       INIT_TRACEMASK, mask));
+ 
+@@ -1007,7 +1007,7 @@ inf_validate_procs (struct inf *inf)
+ 
+   if (task)
+     {
+-      error_t err = task_threads (task->port, &threads, &num_threads);
++      kern_return_t err = task_threads (task->port, &threads, &num_threads);
+ 
+       inf_debug (inf, "fetching threads");
+       if (err)
+@@ -1324,7 +1324,7 @@ inf_restore_exc_ports (struct inf *inf)
+ void
+ inf_signal (struct inf *inf, enum gdb_signal sig)
+ {
+-  error_t err = 0;
++  kern_return_t err = 0;
+   int host_sig = gdb_signal_to_host (sig);
+ 
+ #define NAME gdb_signal_to_name (sig)
+@@ -1413,7 +1413,7 @@ void
+ inf_continue (struct inf *inf)
+ {
+   process_t proc;
+-  error_t err = proc_pid2proc (proc_server, inf->pid, &proc);
++  kern_return_t err = proc_pid2proc (proc_server, inf->pid, &proc);
+ 
+   if (!err)
+     {
+@@ -1454,7 +1454,7 @@ gnu_wait (struct target_ops *ops,
+       mach_msg_type_t type;
+       int data[8000];
+     } msg;
+-  error_t err;
++  kern_return_t err;
+   struct proc *thread;
+   struct inf *inf = gnu_current_inf;
+ 
+@@ -1646,7 +1646,7 @@ rewait:
+ 
+ 

+ /* The rpc handler called by exc_server.  */
+-error_t
++kern_return_t
+ S_exception_raise_request (mach_port_t port, mach_port_t reply_port,
+ 			   thread_t thread_port, task_t task_port,
+ 			   int exception, int code, int subcode)
+@@ -1743,7 +1743,7 @@ inf_task_died_status (struct inf *inf)
+ }
+ 
+ /* Notify server routines.  The only real one is dead name notification.  */
+-error_t
++kern_return_t
+ do_mach_notify_dead_name (mach_port_t notify, mach_port_t dead_port)
+ {
+   struct inf *inf = waiting_inf;
+@@ -1806,8 +1806,8 @@ ILL_RPC (do_mach_notify_send_once,
+ 

+ /* Process_reply server routines.  We only use process_wait_reply.  */
+ 
+-error_t
+-S_proc_wait_reply (mach_port_t reply, error_t err,
++kern_return_t
++S_proc_wait_reply (mach_port_t reply, kern_return_t err,
+ 		   int status, int sigcode, rusage_t rusage, pid_t pid)
+ {
+   struct inf *inf = waiting_inf;
+@@ -1922,8 +1922,8 @@ ILL_RPC (S_proc_get_code_reply,
+ 

+ /* Msg_reply server routines.  We only use msg_sig_post_untraced_reply.  */
+ 
+-error_t
+-S_msg_sig_post_untraced_reply (mach_port_t reply, error_t err)
++kern_return_t
++S_msg_sig_post_untraced_reply (mach_port_t reply, kern_return_t err)
+ {
+   struct inf *inf = waiting_inf;
+ 
+@@ -1953,14 +1953,14 @@ S_msg_sig_post_untraced_reply (mach_port_t reply, error_t err)
+ }
+ 
+ ILL_RPC (S_msg_sig_post_reply,
+-	 mach_port_t reply, error_t err)
++	 mach_port_t reply, kern_return_t err)
+ 

+ /* Returns the number of messages queued for the receive right PORT.  */
+ static mach_port_msgcount_t
+ port_msgs_queued (mach_port_t port)
+ {
+   struct mach_port_status status;
+-  error_t err =
++  kern_return_t err =
+     mach_port_get_receive_status (mach_task_self (), port, &status);
+ 
+   if (err)
+@@ -2288,7 +2288,7 @@ gnu_thread_alive (struct target_ops *ops, ptid_t ptid)
+ static int
+ gnu_read_inferior (task_t task, CORE_ADDR addr, gdb_byte *myaddr, int length)
+ {
+-  error_t err;
++  kern_return_t err;
+   vm_address_t low_address = (vm_address_t) trunc_page (addr);
+   vm_size_t aligned_length =
+   (vm_size_t) round_page (addr + length) - low_address;
+@@ -2335,7 +2335,7 @@ static int
+ gnu_write_inferior (task_t task, CORE_ADDR addr,
+ 		    const gdb_byte *myaddr, int length)
+ {
+-  error_t err = 0;
++  kern_return_t err;
+   vm_address_t low_address = (vm_address_t) trunc_page (addr);
+   vm_size_t aligned_length =
+   (vm_size_t) round_page (addr + length) - low_address;
+@@ -2550,7 +2550,7 @@ static int
+ gnu_find_memory_regions (struct target_ops *self,
+ 			 find_memory_region_ftype func, void *data)
+ {
+-  error_t err;
++  kern_return_t err;
+   task_t task;
+   vm_address_t region_address, last_region_address, last_region_end;
+   vm_prot_t last_protection;
+@@ -2901,7 +2901,7 @@ show_thread_default_detach_sc_cmd (char *args, int from_tty)
+ static void
+ steal_exc_port (struct proc *proc, mach_port_t name)
+ {
+-  error_t err;
++  kern_return_t err;
+   mach_port_t port;
+   mach_msg_type_name_t port_type;
+ 
+@@ -3389,7 +3389,7 @@ thread_takeover_sc_cmd (char *args, int from_tty)
+   thread_basic_info_data_t _info;
+   thread_basic_info_t info = &_info;
+   mach_msg_type_number_t info_len = THREAD_BASIC_INFO_COUNT;
+-  error_t err =
++  kern_return_t err =
+   thread_info (thread->port, THREAD_BASIC_INFO, (int *) &info, &info_len);
+   if (err)
+     error (("%s."), safe_strerror (err));
+@@ -3500,7 +3500,7 @@ void
+ flush_inferior_icache (CORE_ADDR pc, int amount)
+ {
+   vm_machine_attribute_val_t flush = MATTR_VAL_ICACHE_FLUSH;
+-  error_t ret;
++  kern_return_t ret;
+ 
+   ret = vm_machine_attribute (gnu_current_inf->task->port,
+ 			      pc,
+diff --git a/gdb/i386gnu-nat.c b/gdb/i386gnu-nat.c
+index c6c53ca508..add0aa4171 100644
+--- a/gdb/i386gnu-nat.c
++++ b/gdb/i386gnu-nat.c
+@@ -58,7 +58,7 @@ fetch_fpregs (struct regcache *regcache, struct proc *thread)
+ {
+   mach_msg_type_number_t count = i386_FLOAT_STATE_COUNT;
+   struct i386_float_state state;
+-  error_t err;
++  kern_return_t err;
+ 
+   err = thread_get_state (thread->port, i386_FLOAT_STATE,
+ 			  (thread_state_t) &state, &count);
+@@ -148,7 +148,7 @@ store_fpregs (const struct regcache *regcache, struct proc *thread, int regno)
+ {
+   mach_msg_type_number_t count = i386_FLOAT_STATE_COUNT;
+   struct i386_float_state state;
+-  error_t err;
++  kern_return_t err;
+ 
+   err = thread_get_state (thread->port, i386_FLOAT_STATE,
+ 			  (thread_state_t) &state, &count);
+@@ -279,7 +279,7 @@ static void
+ i386_gnu_dr_get (struct i386_debug_state *regs, struct proc *thread)
+ {
+   mach_msg_type_number_t count = i386_DEBUG_STATE_COUNT;
+-  error_t err;
++  kern_return_t err;
+ 
+   err = thread_get_state (thread->port, i386_DEBUG_STATE,
+ 			  (thread_state_t) regs, &count);
+@@ -293,7 +293,7 @@ i386_gnu_dr_get (struct i386_debug_state *regs, struct proc *thread)
+ static void
+ i386_gnu_dr_set (const struct i386_debug_state *regs, struct proc *thread)
+ {
+-  error_t err;
++  kern_return_t err;
+ 
+   err = thread_set_state (thread->port, i386_DEBUG_STATE,
+ 			  (thread_state_t) regs, i386_DEBUG_STATE_COUNT);
+-- 
+2.11.0
+
diff --git a/debian/patches/0007-Hurd-C-Mach-Hurd-headers-and-MIG-stubs-are-not-yet-f.patch b/debian/patches/0007-Hurd-C-Mach-Hurd-headers-and-MIG-stubs-are-not-yet-f.patch
new file mode 100644
index 0000000..bec3ce0
--- /dev/null
+++ b/debian/patches/0007-Hurd-C-Mach-Hurd-headers-and-MIG-stubs-are-not-yet-f.patch
@@ -0,0 +1,149 @@
+From 21389b7f3451a482e14fef9bd32257c4c87f4317 Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Mon, 5 Dec 2016 11:59:03 +0100
+Subject: [PATCH 07/65] Hurd, C++: Mach/Hurd headers and MIG stubs are not yet
+ fit for C++
+
+..., so handle these in "C" mode still:
+
+	gdb/
+	* config/i386/i386gnu.mh (%_S.o %_U.o): Add "-x c" to
+	"COMPILE.post".
+	* gnu-nat.c: #include Mach/Hurd headers before all others.  Wrap
+	Mach/Hurd headers and MIG stubs' prototypes in 'extern "C"'.
+	* i386-gnu-nat.c: Likewise.
+---
+ gdb/ChangeLog              |  6 ++++++
+ gdb/config/i386/i386gnu.mh |  3 +++
+ gdb/gnu-nat.c              | 35 ++++++++++++++++++++++-------------
+ gdb/i386-gnu-nat.c         | 14 +++++++++-----
+ 4 files changed, 40 insertions(+), 18 deletions(-)
+
+diff --git a/gdb/config/i386/i386gnu.mh b/gdb/config/i386/i386gnu.mh
+index 24e817eff5..070497ffc4 100644
+--- a/gdb/config/i386/i386gnu.mh
++++ b/gdb/config/i386/i386gnu.mh
+@@ -32,6 +32,9 @@ MIGCOM = $(MIG) -cc cat - /dev/null
+ 	$(CPP) $(CPPFLAGS) $($*-MIGUFLAGS) -x c $< \
+ 	| $(MIGCOM) -sheader /dev/null -server /dev/null -user $*_U.c -header $*_U.h
+ 
++# MIG stubs are not yet ready for C++ compilation.
++%_S.o %_U.o : COMPILE.post += -x c
++
+ NAT_GENERATED_FILES = notify_S.h notify_S.c \
+ 	process_reply_S.h process_reply_S.c \
+ 	msg_reply_S.h msg_reply_S.c msg_U.h msg_U.c \
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index ae4430d754..5fd59a26fd 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -20,14 +20,9 @@
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+ 
+-#include "defs.h"
+-
+-#include <ctype.h>
+-#include <limits.h>
+-#include <setjmp.h>
+-#include <signal.h>
+-#include <sys/ptrace.h>
+-
++/* Mach/Hurd headers are not yet ready for C++ compilation.  */
++extern "C"
++{
+ #include <mach.h>
+ #include <mach_error.h>
+ #include <mach/exception.h>
+@@ -48,6 +43,15 @@
+ #include <hurd/sigpreempt.h>
+ 
+ #include <portinfo.h>
++}
++
++#include "defs.h"
++
++#include <ctype.h>
++#include <limits.h>
++#include <setjmp.h>
++#include <signal.h>
++#include <sys/ptrace.h>
+ 
+ #include "inferior.h"
+ #include "symtab.h"
+@@ -63,12 +67,16 @@
+ #include "gnu-nat.h"
+ #include "inf-child.h"
+ 
++/* MIG stubs are not yet ready for C++ compilation.  */
++extern "C"
++{
+ #include "exc_request_S.h"
+ #include "notify_S.h"
+ #include "process_reply_S.h"
+ #include "msg_reply_S.h"
+ #include "exc_request_U.h"
+ #include "msg_U.h"
++}
+ 
+ static process_t proc_server = MACH_PORT_NULL;
+ 
+@@ -1443,6 +1451,12 @@ struct inf *gnu_current_inf = 0;
+    multi-threaded, we don't bother to lock this.  */
+ struct inf *waiting_inf;
+ 
++/* MIG stubs are not yet ready for C++ compilation.  */
++extern "C" int exc_server (mach_msg_header_t *, mach_msg_header_t *);
++extern "C" int msg_reply_server (mach_msg_header_t *, mach_msg_header_t *);
++extern "C" int notify_server (mach_msg_header_t *, mach_msg_header_t *);
++extern "C" int process_reply_server (mach_msg_header_t *, mach_msg_header_t *);
++
+ /* Wait for something to happen in the inferior, returning what in STATUS.  */
+ static ptid_t
+ gnu_wait (struct target_ops *ops,
+@@ -1458,11 +1472,6 @@ gnu_wait (struct target_ops *ops,
+   struct proc *thread;
+   struct inf *inf = gnu_current_inf;
+ 
+-  extern int exc_server (mach_msg_header_t *, mach_msg_header_t *);
+-  extern int msg_reply_server (mach_msg_header_t *, mach_msg_header_t *);
+-  extern int notify_server (mach_msg_header_t *, mach_msg_header_t *);
+-  extern int process_reply_server (mach_msg_header_t *, mach_msg_header_t *);
+-
+   gdb_assert (inf->task);
+ 
+   if (!inf->threads && !inf->pending_execs)
+diff --git a/gdb/i386gnu-nat.c b/gdb/i386gnu-nat.c
+index add0aa4171..77081b8d6f 100644
+--- a/gdb/i386gnu-nat.c
++++ b/gdb/i386gnu-nat.c
+@@ -17,17 +17,21 @@
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+ 
++/* Mach/Hurd headers are not yet ready for C++ compilation.  */
++extern "C"
++{
++#include <mach.h>
++#include <mach_error.h>
++#include <mach/message.h>
++#include <mach/exception.h>
++}
++
+ #include "defs.h"
+ #include "x86-nat.h"
+ #include "inferior.h"
+ #include "floatformat.h"
+ #include "regcache.h"
+ 
+-#include <mach.h>
+-#include <mach_error.h>
+-#include <mach/message.h>
+-#include <mach/exception.h>
+-
+ #include "i386-tdep.h"
+ 
+ #include "gnu-nat.h"
+-- 
+2.11.0
+
diff --git a/debian/patches/0008-Hurd-In-the-CLI-use-parse_thread_id-instead-of-globa.patch b/debian/patches/0008-Hurd-In-the-CLI-use-parse_thread_id-instead-of-globa.patch
new file mode 100644
index 0000000..0d0accc
--- /dev/null
+++ b/debian/patches/0008-Hurd-In-the-CLI-use-parse_thread_id-instead-of-globa.patch
@@ -0,0 +1,57 @@
+From c3187fa5cc72734e6fc766a85d657018c0516bad Mon Sep 17 00:00:00 2001
+From: Simon Marchi <simon.marchi at ericsson.com>
+Date: Thu, 8 Dec 2016 09:45:59 +0100
+Subject: [PATCH 08/65] Hurd: In the CLI, use parse_thread_id instead of
+ global_thread_id_to_ptid
+
+Follow-up to commit 14f6890677849172a4b13779acd9089c9baa3a81.
+global_thread_id_to_ptid expects global thread numbers, which are nowadays only
+used in MI, never presented to the user in the CLI.  Since this is a CLI
+command, it should accept the inferior-qualified format instead.
+
+	gdb/
+	* gnu-nat.c (set_sig_thread_cmd): Use parse_thread_id instead of
+	global_thread_id_to_ptid.
+---
+ gdb/ChangeLog |  6 ++++++
+ gdb/gnu-nat.c | 12 ++++--------
+ 2 files changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 5fd59a26fd..124574e8ed 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -63,6 +63,7 @@ extern "C"
+ #include "gdbcore.h"
+ #include "gdbthread.h"
+ #include "gdb_obstack.h"
++#include "tid-parse.h"
+ 
+ #include "gnu-nat.h"
+ #include "inf-child.h"
+@@ -2975,19 +2976,14 @@ set_sig_thread_cmd (char *args, int from_tty)
+ 
+   if (!args || (!isdigit (*args) && strcmp (args, "none") != 0))
+     error (_("Illegal argument to \"set signal-thread\" command.\n"
+-	   "Should be an integer thread ID, or `none'."));
++	     "Should be a thread ID, or \"none\"."));
+ 
+   if (strcmp (args, "none") == 0)
+     inf->signal_thread = 0;
+   else
+     {
+-      ptid_t ptid = global_thread_id_to_ptid (atoi (args));
+-
+-      if (ptid_equal (ptid, minus_one_ptid))
+-	error (_("Thread ID %s not known.  "
+-		 "Use the \"info threads\" command to\n"
+-	       "see the IDs of currently known threads."), args);
+-      inf->signal_thread = inf_tid_to_thread (inf, ptid_get_lwp (ptid));
++      struct thread_info *tp = parse_thread_id (args, NULL);
++      inf->signal_thread = inf_tid_to_thread (inf, ptid_get_lwp (tp->ptid));
+     }
+ }
+ 
+-- 
+2.11.0
+
diff --git a/debian/patches/0021-Avoid-PATH_MAX-usage.patch b/debian/patches/0021-Avoid-PATH_MAX-usage.patch
new file mode 100644
index 0000000..f2b72f9
--- /dev/null
+++ b/debian/patches/0021-Avoid-PATH_MAX-usage.patch
@@ -0,0 +1,44 @@
+From 53488a6e194af11c2528e5e284facb8a6171b695 Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Thu, 8 Dec 2016 18:42:03 +0100
+Subject: [PATCH 21/65] Avoid PATH_MAX usage
+
+On GNU/Hurd, there is no "#define PATH_MAX", so this failed to build.
+
+	gdb/
+	* inferior.c (print_selected_inferior): Avoid PATH_MAX usage.
+---
+ gdb/ChangeLog  |  4 ++++
+ gdb/inferior.c | 15 +++++----------
+ 2 files changed, 9 insertions(+), 10 deletions(-)
+
+diff --git a/gdb/inferior.c b/gdb/inferior.c
+index 9fcdbd3b83..af6f3af3f7 100644
+--- a/gdb/inferior.c
++++ b/gdb/inferior.c
+@@ -556,17 +556,12 @@ inferior_pid_to_str (int pid)
+ void
+ print_selected_inferior (struct ui_out *uiout)
+ {
+-  char buf[PATH_MAX + 256];
+   struct inferior *inf = current_inferior ();
+-
+-  xsnprintf (buf, sizeof (buf),
+-	     _("[Switching to inferior %d [%s] (%s)]\n"),
+-	     inf->num,
+-	     inferior_pid_to_str (inf->pid),
+-	     (inf->pspace->pspace_exec_filename != NULL
+-	      ? inf->pspace->pspace_exec_filename
+-	      : _("<noexec>")));
+-  ui_out_text (uiout, buf);
++  const char *filename = inf->pspace->pspace_exec_filename;
++  if (filename == NULL)
++    filename = _("<noexec>");
++  ui_out_message (uiout, _("[Switching to inferior %d [%s] (%s)]\n"),
++		  inf->num, inferior_pid_to_str (inf->pid), filename);
+ }
+ 
+ /* Prints the list of inferiors and their details on UIOUT.  This is a
+-- 
+2.11.0
+
diff --git a/debian/patches/0022-Hurd-Adjust-to-changes-to-push-pruning-old-threads-d.patch b/debian/patches/0022-Hurd-Adjust-to-changes-to-push-pruning-old-threads-d.patch
new file mode 100644
index 0000000..a824908
--- /dev/null
+++ b/debian/patches/0022-Hurd-Adjust-to-changes-to-push-pruning-old-threads-d.patch
@@ -0,0 +1,54 @@
+From c752a4cccb99ba73f51eff74b394dcdcd26d4c59 Mon Sep 17 00:00:00 2001
+From: Thomas Schwinge <thomas at codesourcery.com>
+Date: Wed, 25 May 2016 18:54:40 +0200
+Subject: [PATCH 22/65] Hurd: Adjust to changes to "push pruning old threads
+ down to the target"
+
+For "info threads", we currently run into:
+
+    $ gdb/gdb -q -nw -nx --batch -ex start -ex info\ threads bfd/doc/chew
+    Temporary breakpoint 1 at 0x80486e0: file ../../../W._C._Handy/bfd/doc/chew.c, line 1535.
+    [New Thread 10656.5]
+
+    Thread 4 hit Temporary breakpoint 1, main (ac=1, av=0x102cd84) at ../../../W._C._Handy/bfd/doc/chew.c:1535
+    1535    {
+      Id   Target Id         Frame
+      1    bogus thread id 1 Can't fetch registers from thread bogus thread id 1: No such thread
+
+Before commit e8032dde10b743253125d7defb5f5503b21c1d26,
+gdb/thread.c:update_thread_list used to call prune_threads, after that change
+it doesn't anymore, and we don't implement the to_update_thread_list target
+method where the prune_threads call got moved.  For now, apply a fix, related
+to commit c82f56d9d760a9b4034eeaac44f2f0fa5779ff69 "Hurd: Adjust to
+startup-with-shell changes", which restores the previous behavior:
+
+      Id   Target Id         Frame
+    * 4    Thread 10688.4    main (ac=1, av=0x102cd84) at ../../../W._C._Handy/bfd/doc/chew.c:1535
+      5    Thread 10688.5    0x0106096c in ?? () from /lib/i386-gnu/libc.so.0.3
+
+Not perfect, but at least better.
+
+	gdb/
+	* gnu-nat.c (gnu_create_inferior): After startup_inferior, call
+	prune_threads.
+---
+ gdb/ChangeLog | 3 +++
+ gdb/gnu-nat.c | 2 ++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 124574e8ed..85a53b8b1b 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -2163,6 +2163,8 @@ gnu_create_inferior (struct target_ops *ops,
+ 
+   startup_inferior (START_INFERIOR_TRAPS_EXPECTED);
+   inf->pending_execs = 0;
++  /* Get rid of the old shell threads.  */
++  prune_threads ();
+ 
+   inf_validate_procinfo (inf);
+   inf_update_signal_thread (inf);
+-- 
+2.11.0
+
diff --git a/debian/patches/explicit-cast-void.patch b/debian/patches/explicit-cast-void.patch
new file mode 100644
index 0000000..0fde4e0
--- /dev/null
+++ b/debian/patches/explicit-cast-void.patch
@@ -0,0 +1,34 @@
+commit e9e431d19426a6dd6b8923850398b847af0a1532
+Author: Thomas Schwinge <thomas at codesourcery.com>
+Date:   Fri Nov 25 11:01:39 2016 +0100
+
+    Hurd, C++: Explicitly cast "void *"
+    
+    C++ doesn't do implicit type conversions from "void *", so we have to...
+    
+            gdb/
+            * i386-gnu-nat.c (i386_gnu_dr_set_control_one)
+            (i386_gnu_dr_set_addr_one): Explicitly cast "void *".
+
+Index: gdb-7.12/gdb/i386gnu-nat.c
+===================================================================
+--- gdb-7.12.orig/gdb/i386gnu-nat.c
++++ gdb-7.12/gdb/i386gnu-nat.c
+@@ -311,7 +311,7 @@ i386_gnu_dr_set (const struct i386_debug
+ static void
+ i386_gnu_dr_set_control_one (struct proc *thread, void *arg)
+ {
+-  unsigned long *control = arg;
++  unsigned long *control = (unsigned long *) arg;
+   struct i386_debug_state regs;
+ 
+   i386_gnu_dr_get (&regs, thread);
+@@ -341,7 +341,7 @@ struct reg_addr
+ static void
+ i386_gnu_dr_set_addr_one (struct proc *thread, void *arg)
+ {
+-  struct reg_addr *reg_addr = arg;
++  struct reg_addr *reg_addr = (struct reg_addr *) arg;
+   struct i386_debug_state regs;
+ 
+   i386_gnu_dr_get (&regs, thread);
diff --git a/debian/patches/hurd-backport-for-7.12-branch.patch b/debian/patches/hurd-backport-for-7.12-branch.patch
new file mode 100644
index 0000000..6d77c95
--- /dev/null
+++ b/debian/patches/hurd-backport-for-7.12-branch.patch
@@ -0,0 +1,54 @@
+Description: hurd support
+ gdb (7.12-2+hurd1) UNRELEASED; urgency=medium
+ .
+   * Patches for hurd
+Author: Hector Oron <zumbi at exodar.debian.net>
+
+---
+The information above should follow the Patch Tagging Guidelines, please
+checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: <vendor|upstream|other>, <url of original patch>
+Bug: <url in upstream bugtracker>
+Bug-Debian: https://bugs.debian.org/<bugnumber>
+Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
+Forwarded: <no|not-needed|url proving that it has been forwarded>
+Reviewed-By: <name and email of someone who approved the patch>
+Last-Update: 2016-12-15
+
+--- gdb-7.12.orig/gdb/inferior.c
++++ gdb-7.12/gdb/inferior.c
+@@ -559,7 +559,7 @@ print_selected_inferior (struct ui_out *
+   const char *filename = inf->pspace->pspace_exec_filename;
+   if (filename == NULL)
+     filename = _("<noexec>");
+-  ui_out_message (uiout, _("[Switching to inferior %d [%s] (%s)]\n"),
++  ui_out_message (uiout, 0, _("[Switching to inferior %d [%s] (%s)]\n"),
+ 		  inf->num, inferior_pid_to_str (inf->pid), filename);
+ }
+ 
+--- gdb-7.12.orig/gdb/remote.c
++++ gdb-7.12/gdb/remote.c
+@@ -6511,7 +6511,6 @@ Packet: '%s'\n"),
+ 	  else if (strprefix (p, p1, "exec"))
+ 	    {
+ 	      ULONGEST ignored;
+-	      char pathname[PATH_MAX];
+ 	      int pathlen;
+ 
+ 	      /* Determine the length of the execd pathname.  */
+@@ -6520,11 +6519,12 @@ Packet: '%s'\n"),
+ 
+ 	      /* Save the pathname for event reporting and for
+ 		 the next run command.  */
++	      char *pathname = (char *) xmalloc (pathlen + 1);
+ 	      hex2bin (p1, (gdb_byte *) pathname, pathlen);
+ 	      pathname[pathlen] = '\0';
+ 
+ 	      /* This is freed during event handling.  */
+-	      event->ws.value.execd_pathname = xstrdup (pathname);
++	      event->ws.value.execd_pathname = pathname;
+ 	      event->ws.kind = TARGET_WAITKIND_EXECD;
+ 
+ 	      /* Skip the registers included in this packet, since
diff --git a/debian/patches/series b/debian/patches/series
index 2a67f59..f1cef92 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,3 +4,16 @@ gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
 python-config.patch
 gdb-glibc-vdso-workaround.patch
 load-versioned-libcc1.patch
+
+# Hurd support - upstream backports
+0001-Hurd-Adjust-to-Per-inferior-Inferior-qualified-threa.patch
+#0003-Hurd-C-Explicitly-cast-void.patch
+0004-Hurd-C-Avoid-GNU-C-nested-functions.patch
+0005-Hurd-C-Avoid-const-char-to-char-casts.patch
+0006-Hurd-C-kern_return_t-vs.-error_t.patch
+0007-Hurd-C-Mach-Hurd-headers-and-MIG-stubs-are-not-yet-f.patch
+0008-Hurd-In-the-CLI-use-parse_thread_id-instead-of-globa.patch
+0021-Avoid-PATH_MAX-usage.patch
+0022-Hurd-Adjust-to-changes-to-push-pruning-old-threads-d.patch
+explicit-cast-void.patch
+hurd-backport-for-7.12-branch.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gdb/gdb.git



More information about the Pkg-gdb-logs mailing list