This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch 2/2] libunwind/ia64: Make libunwind ia64 specific
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Sun, 4 Mar 2012 22:58:45 +0100
- Subject: [patch 2/2] libunwind/ia64: Make libunwind ia64 specific
Hi,
in the thread
RFA: Try to include libunwind-ia64.h in libunwind-frame.h
http://sourceware.org/ml/gdb-patches/2012-02/msg00034.html
was libunwind made ia64 more specific, Pedro IIRC does not agree with that,
anyway even before libunwind was coded like ready also for non-ia64 platforms
but only ia64 support was ever implemented.
This patch really makes libunwind clearly ia64 specific.
If anyone wants to implement libunwind support for non-ia64 targets the patch
can be reverted in the future; I doubt that ever happens.
Tested basic configure behavior on ia64-rhel58-linux-gnu.
Sourceware tree uses AC_DISABLE_OPTION_CHECKING so that should not be
a concern wrt the rename of --with-libunwind.
Thanks,
Jan
2012-03-04 Jan Kratochvil <jan.kratochvil@redhat.com>
* libunwind-frame.c: Rename to ...
* ia64-tdep-libunwind-frame.c: ... here.
* libunwind-frame.h: Rename to ...
* ia64-tdep-libunwind-frame.h: ... here.
* Makefile.in (HFILES_NO_SRCDIR): Rename libunwind-frame.h to
ia64-tdep-libunwind-frame.h.
(ALLDEPFILES): Rename libunwind-frame.c to ia64-tdep-libunwind-frame.c.
* README (--with-libunwind): Rename to ...
(--with-libunwind-ia64): ... here, note it is ia64 specific now.
* config.in: Regenerate.
* configure: Regenerate.
* configure.ac: New option --with-libunwind-ia64, make the
AS_HELP_STRING ia64 specific. Deprecate option --with-libunwind.
Remove AC_DEFINE for HAVE_LIBUNWIND.
* ia64-tdep-libunwind-frame.c: Make the file top comment ia64 specific.
Rename libunwind-frame.h #include to ia64-tdep-libunwind-frame.h.
* ia64-tdep-libunwind-frame.h: Make the file top comment ia64 specific.
Rename symbol LIBUNWIND_FRAME_H to IA64_TDEP_LIBUNWIND_FRAME_H.
* ia64-tdep.c: Rename libunwind-frame.h #include to
ia64-tdep-libunwind-frame.h.
(ia64_gdb2uw_regnum, ia64_uw2gdb_regnum, ia64_is_fpreg)
(ia64_libunwind_descr): Rename libunwind-frame to
ia64-tdep-libunwind-frame in these function comments.
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -780,7 +780,7 @@ ser-unix.h inf-ptrace.h terminal.h ui-out.h frame-base.h \
f-lang.h dwarf2loc.h value.h sparc-tdep.h defs.h target-descriptions.h \
objfiles.h vec.h disasm.h mips-tdep.h ser-base.h \
gdb_curses.h bfd-target.h memattr.h inferior.h ax.h dummy-frame.h \
-inflow.h fbsd-nat.h libunwind-frame.h completer.h inf-ttrace.h \
+inflow.h fbsd-nat.h ia64-tdep-libunwind-frame.h completer.h inf-ttrace.h \
solib-target.h gdb_vfork.h alpha-tdep.h dwarf2expr.h \
m2-lang.h stack.h charset.h addrmap.h command.h solist.h source.h \
target.h prologue-value.h cp-abi.h tui/tui-hooks.h tui/tui.h \
@@ -1463,7 +1463,7 @@ ALLDEPFILES = \
ia64-linux-nat.c ia64-linux-tdep.c ia64-tdep.c \
inf-ptrace.c inf-ttrace.c \
irix5-nat.c \
- libunwind-frame.c \
+ ia64-tdep-libunwind-frame.c \
linux-fork.c \
linux-tdep.c \
linux-record.c \
--- a/gdb/README
+++ b/gdb/README
@@ -446,10 +446,10 @@ prefer; but you may abbreviate option names if you use `--'.
Build GDB with the gdbtk GUI interface. Requires TCL/Tk to be
installed.
-`--with-libunwind'
- Use the libunwind library for unwinding function call stack. See
- http://www.nongnu.org/libunwind/index.html fro details.
- Supported only on some platforms.
+`--with-libunwind-ia64'
+ Use the libunwind library for unwinding function call stack on ia64
+ target platforms.
+ See http://www.nongnu.org/libunwind/index.html for details.
`--with-curses'
Use the curses library instead of the termcap library, for
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -328,26 +328,44 @@ case $host_os in
enable_gdbtk=no ;;
esac
-# Libunwind support.
-AC_ARG_WITH(libunwind,
-AS_HELP_STRING([--with-libunwind], [use libunwind frame unwinding support]),
-[case "${withval}" in
- yes) enable_libunwind=yes ;;
- no) enable_libunwind=no ;;
- *) AC_MSG_ERROR(bad value ${withval} for GDB with-libunwind option) ;;
-esac],[
- AC_CHECK_HEADERS(libunwind-ia64.h)
- if test x"$ac_cv_header_libunwind_ia64_h" = xyes; then
- enable_libunwind=yes;
+# Libunwind support for ia64.
+
+AC_ARG_WITH(libunwind-ia64,
+AS_HELP_STRING([--with-libunwind-ia64],
+ [use libunwind frame unwinding for ia64 targets]),,
+ [with_libunwind_ia64=auto])
+
+# Backward compatibility option.
+if test "${with_libunwind+set}" = set; then
+ if test x"$with_libunwind_ia64" != xauto; then
+ AC_MSG_ERROR(
+ [option --with-libunwind is deprecated, use --with-libunwind-ia64])
fi
-])
-
-if test x"$enable_libunwind" = xyes; then
+ AC_MSG_WARN([option --with-libunwind is deprecated, use --with-libunwind-ia64])
+ with_libunwind_ia64="$with_libunwind"
+fi
+
+case "$with_libunwind_ia64" in
+ yes | no)
+ ;;
+ auto)
+ AC_CHECK_HEADERS(libunwind-ia64.h)
+ with_libunwind_ia64=$ac_cv_header_libunwind_ia64_h
+ ;;
+ *)
+ AC_MSG_ERROR(
+ [bad value $with_libunwind_ia64 for GDB --with-libunwind-ia64 option])
+ ;;
+esac
+
+if test x"$with_libunwind_ia64" = xyes; then
AC_CHECK_HEADERS(libunwind-ia64.h)
- AC_DEFINE(HAVE_LIBUNWIND, 1, [Define if libunwind library is being used.])
- CONFIG_OBS="$CONFIG_OBS libunwind-frame.o"
- CONFIG_DEPS="$CONFIG_DEPS libunwind-frame.o"
- CONFIG_SRCS="$CONFIG_SRCS libunwind-frame.c"
+ if test x"$ac_cv_header_libunwind_ia64_h" != xyes; then
+ AC_MSG_ERROR([GDB option --with-libunwind-ia64 requires libunwind-ia64.h])
+ fi
+ CONFIG_OBS="$CONFIG_OBS ia64-tdep-libunwind-frame.o"
+ CONFIG_DEPS="$CONFIG_DEPS ia64-tdep-libunwind-frame.o"
+ CONFIG_SRCS="$CONFIG_SRCS ia64-tdep-libunwind-frame.c"
fi
opt_curses=no
--- a/gdb/ia64-tdep-libunwind-frame.c
+++ b/gdb/ia64-tdep-libunwind-frame.c
@@ -1,4 +1,4 @@
-/* Frame unwinder for frames using the libunwind library.
+/* Frame unwinder for ia64 frames using the libunwind library.
Copyright (C) 2003-2004, 2006-2012 Free Software Foundation, Inc.
@@ -36,7 +36,7 @@
#include "gdb_assert.h"
#include "gdb_string.h"
-#include "libunwind-frame.h"
+#include "ia64-tdep-libunwind-frame.h"
#include "complaints.h"
--- a/gdb/ia64-tdep-libunwind-frame.h
+++ b/gdb/ia64-tdep-libunwind-frame.h
@@ -1,4 +1,4 @@
-/* Frame unwinder for frames with libunwind frame information.
+/* Frame unwinder for ia64 frames with libunwind frame information.
Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc.
@@ -24,8 +24,8 @@ struct frame_id;
struct regcache;
struct gdbarch;
-#ifndef LIBUNWIND_FRAME_H
-#define LIBUNWIND_FRAME_H 1
+#ifndef IA64_TDEP_LIBUNWIND_FRAME_H
+#define IA64_TDEP_LIBUNWIND_FRAME_H 1
/* IA-64 is the only target that currently uses libunwind. If some
other target wants to use it, we will need to do some abstracting
@@ -73,4 +73,4 @@ int libunwind_get_reg_special (struct gdbarch *gdbarch,
struct regcache *regcache,
int regnum, void *buf);
-#endif /* libunwind-frame.h */
+#endif /* ia64-tdep-libunwind-frame.h */
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -42,7 +42,7 @@
#ifdef HAVE_LIBUNWIND_IA64_H
#include "elf/ia64.h" /* for PT_IA_64_UNWIND value */
-#include "libunwind-frame.h"
+#include "ia64-tdep-libunwind-frame.h"
/* Note: KERNEL_START is supposed to be an address which is not going
to ever contain any valid unwind info. For ia64 linux, the choice
@@ -2417,8 +2417,8 @@ ia64_rse_skip_regs (uint64_t addr, long num_regs)
return addr + ((num_regs + delta/0x3f) << 3);
}
-/* Gdb libunwind-frame callback function to convert from an ia64 gdb register
- number to a libunwind register number. */
+/* Gdb ia64-tdep-libunwind-frame callback function to convert from an ia64 gdb
+ register number to a libunwind register number. */
static int
ia64_gdb2uw_regnum (int regnum)
{
@@ -2450,8 +2450,8 @@ ia64_gdb2uw_regnum (int regnum)
return -1;
}
-/* Gdb libunwind-frame callback function to convert from a libunwind register
- number to a ia64 gdb register number. */
+/* Gdb ia64-tdep-libunwind-frame callback function to convert from a libunwind
+ register number to a ia64 gdb register number. */
static int
ia64_uw2gdb_regnum (int uw_regnum)
{
@@ -2481,8 +2481,8 @@ ia64_uw2gdb_regnum (int uw_regnum)
return -1;
}
-/* Gdb libunwind-frame callback function to reveal if register is a float
- register or not. */
+/* Gdb ia64-tdep-libunwind-frame callback function to reveal if register is
+ a float register or not. */
static int
ia64_is_fpreg (int uw_regnum)
{
@@ -3176,7 +3176,7 @@ static unw_accessors_t ia64_unw_rse_accessors =
/* get_proc_name */
};
-/* Set of ia64 gdb libunwind-frame callbacks and data for generic
+/* Set of ia64 gdb ia64-tdep-libunwind-frame callbacks and data for generic
libunwind-frame code to use. */
static struct libunwind_descr ia64_libunwind_descr =
{