Bug#906822: gdb: gdb FTBFS on ia64
Package: gdb
Version: 7.12-6+ia64.1
Severity: normal
Tags: patch
User: debian-ia64@lists.debian.org
Usertags: ia64
Dear Maintainer,
gdb 8.1 FTBFS on ia64 because an internal API change was not fully
propagated across all callers. This is fixed in upstream git commit
5d691c8829d0e5c4c4b9cfb147c8a873ce18085b, which is included here for
your convenience.
Jason
-- System Information:
Debian Release: buster/sid
APT prefers unreleased
APT policy: (500, 'unreleased'), (500, 'unstable')
Architecture: ia64
Kernel: Linux 4.17.0-3-mckinley (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages gdb depends on:
ii libc6.1 2.27-5
ii libexpat1 2.2.6-1
ii liblzma5 5.2.2-1.3+b1
ii libncurses5 6.1+20180714-1
ii libpython3.6 3.6.6-2
ii libreadline7 7.0-5
ii libtinfo5 6.1+20180714-1
ii zlib1g 1:1.2.11.dfsg-1
Versions of packages gdb recommends:
ii libc6.1-dbg [libc-dbg] 2.27-5
Versions of packages gdb suggests:
pn gdb-doc <none>
pn gdbserver <none>
-- no debconf information
diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index 0df62e26ab..2fab60c1d0 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -69,6 +69,7 @@ struct ia64_table_entry
};
static struct ia64_table_entry *ktab = NULL;
+static gdb::optional<gdb::byte_vector> ktab_buf;
#endif
@@ -2647,11 +2648,9 @@ ia64_access_mem (unw_addr_space_t as,
}
/* Call low-level function to access the kernel unwind table. */
-static LONGEST
-getunwind_table (gdb_byte **buf_p)
+static gdb::optional<gdb::byte_vector>
+getunwind_table ()
{
- LONGEST x;
-
/* FIXME drow/2005-09-10: This code used to call
ia64_linux_xfer_unwind_table directly to fetch the unwind table
for the currently running ia64-linux kernel. That data should
@@ -2660,10 +2659,8 @@ getunwind_table (gdb_byte **buf_p)
we should find a way to override the corefile layer's
xfer_partial method. */
- x = target_read_alloc (current_top_target (), TARGET_OBJECT_UNWIND_TABLE,
- NULL, buf_p);
-
- return x;
+ return target_read_alloc (current_top_target (), TARGET_OBJECT_UNWIND_TABLE,
+ NULL);
}
/* Get the kernel unwind table. */
@@ -2674,15 +2671,12 @@ get_kernel_table (unw_word_t ip, unw_dyn_info_t *di)
if (!ktab)
{
- gdb_byte *ktab_buf;
- LONGEST size;
-
- size = getunwind_table (&ktab_buf);
- if (size <= 0)
+ ktab_buf = getunwind_table ();
+ if (!ktab_buf)
return -UNW_ENOINFO;
- ktab = (struct ia64_table_entry *) ktab_buf;
- ktab_size = size;
+ ktab = (struct ia64_table_entry *) ktab_buf->data ();
+ ktab_size = ktab_buf->size ();
for (etab = ktab; etab->start_offset; ++etab)
etab->info_offset += KERNEL_START;
Reply to: