| Index: gdb/ia64-libunwind-tdep.c | 
| diff --git a/gdb/libunwind-frame.c b/gdb/ia64-libunwind-tdep.c | 
| similarity index 92% | 
| rename from gdb/libunwind-frame.c | 
| rename to gdb/ia64-libunwind-tdep.c | 
| index 94449b0c698d0dc5678f6f4a82833a3919665b3d..e1c89c48a532e2f799551be43961dccfdeef6f7e 100644 | 
| --- a/gdb/libunwind-frame.c | 
| +++ b/gdb/ia64-libunwind-tdep.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,10 +36,18 @@ | 
| #include "gdb_assert.h" | 
| #include "gdb_string.h" | 
|  | 
| -#include "libunwind-frame.h" | 
| +#include "ia64-libunwind-tdep.h" | 
|  | 
| #include "complaints.h" | 
|  | 
| +/* IA-64 is the only target that currently uses ia64-libunwind-tdep. | 
| +   Note how UNW_TARGET, UNW_OBJ, etc. are compile time constants below. | 
| +   Those come from libunwind's headers, and are target dependent. | 
| +   Also, some of libunwind's typedefs are target dependent, as e.g., | 
| +   unw_word_t.  If some other target wants to use this, we will need | 
| +   to do some abstracting in order to make it possible to select which | 
| +   libunwind we're talking to at runtime (and have one per arch).  */ | 
| + | 
| /* The following two macros are normally defined in <endian.h>. | 
| But systems such as ia64-hpux do not provide such header, so | 
| we just define them here if not already defined.  */ | 
| @@ -87,7 +95,11 @@ struct libunwind_frame_cache | 
| #ifndef LIBUNWIND_SO | 
| /* Use the stable ABI major version number.  `libunwind-ia64.so' is a link time | 
| only library, not a runtime one.  */ | 
| -#define LIBUNWIND_SO "libunwind-" STRINGIFY(UNW_TARGET) ".so.7" | 
| +#define LIBUNWIND_SO "libunwind-" STRINGIFY(UNW_TARGET) ".so.8" | 
| + | 
| +/* Provide also compatibility with older .so.  The two APIs are compatible, .8 | 
| +   is only extended a bit, GDB does not use the extended API at all.  */ | 
| +#define LIBUNWIND_SO_7 "libunwind-" STRINGIFY(UNW_TARGET) ".so.7" | 
| #endif | 
|  | 
| static char *get_reg_name = STRINGIFY(UNW_OBJ(get_reg)); | 
| @@ -233,17 +245,6 @@ libunwind_find_dyn_list (unw_addr_space_t as, unw_dyn_info_t *di, void *arg) | 
| return unw_find_dyn_list_p (as, di, arg); | 
| } | 
|  | 
| -static const struct frame_unwind libunwind_frame_unwind = | 
| -{ | 
| -  NORMAL_FRAME, | 
| -  default_frame_unwind_stop_reason, | 
| -  libunwind_frame_this_id, | 
| -  libunwind_frame_prev_register, | 
| -  NULL, | 
| -  libunwind_frame_sniffer, | 
| -  libunwind_frame_dealloc_cache, | 
| -}; | 
| - | 
| /* Verify if there is sufficient libunwind information for the frame to use | 
| libunwind frame unwinding.  */ | 
| int | 
| @@ -376,17 +377,6 @@ libunwind_frame_prev_register (struct frame_info *this_frame, | 
| return val; | 
| } | 
|  | 
| -CORE_ADDR | 
| -libunwind_frame_base_address (struct frame_info *this_frame, void **this_cache) | 
| -{ | 
| -  struct libunwind_frame_cache *cache = | 
| -    libunwind_frame_cache (this_frame, this_cache); | 
| - | 
| -  if (cache == NULL) | 
| -    return (CORE_ADDR)NULL; | 
| -  return cache->base; | 
| -} | 
| - | 
| /* The following is a glue routine to call the libunwind unwind table | 
| search function to get unwind information for a specified ip address.  */ | 
| int | 
| @@ -505,9 +495,27 @@ static int | 
| libunwind_load (void) | 
| { | 
| void *handle; | 
| +  char *so_error = NULL; | 
|  | 
| handle = dlopen (LIBUNWIND_SO, RTLD_NOW); | 
| if (handle == NULL) | 
| +    { | 
| +      so_error = xstrdup (dlerror ()); | 
| +#ifdef LIBUNWIND_SO_7 | 
| +      handle = dlopen (LIBUNWIND_SO_7, RTLD_NOW); | 
| +#endif /* LIBUNWIND_SO_7 */ | 
| +    } | 
| +  if (handle == NULL) | 
| +    { | 
| +      fprintf_unfiltered (gdb_stderr, _("[GDB failed to load %s: %s]\n"), | 
| +			  LIBUNWIND_SO, so_error); | 
| +#ifdef LIBUNWIND_SO_7 | 
| +      fprintf_unfiltered (gdb_stderr, _("[GDB failed to load %s: %s]\n"), | 
| +			  LIBUNWIND_SO_7, dlerror ()); | 
| +#endif /* LIBUNWIND_SO_7 */ | 
| +    } | 
| +  xfree (so_error); | 
| +  if (handle == NULL) | 
| return 0; | 
|  | 
| /* Initialize pointers to the dynamic library functions we will use.  */ | 
|  |