Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: gdb/ia64-libunwind-tdep.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/ia64-libunwind-tdep.h ('k') | gdb/ia64-linux-nat.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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. */
« no previous file with comments | « gdb/ia64-libunwind-tdep.h ('k') | gdb/ia64-linux-nat.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698