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

Unified Diff: gdb/frame-unwind.c

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 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/frame-unwind.h ('k') | gdb/frv-linux-tdep.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/frame-unwind.c
diff --git a/gdb/frame-unwind.c b/gdb/frame-unwind.c
index c90144f6dd562ae81d7d69bb5cbf24d96c697c8f..8fabf52c549eba70b9e5e1d843d593bce7078e29 100644
--- a/gdb/frame-unwind.c
+++ b/gdb/frame-unwind.c
@@ -1,6 +1,6 @@
/* Definitions for frame unwinder, for GDB, the GNU debugger.
- Copyright (C) 2003-2004, 2007-2012 Free Software Foundation, Inc.
+ Copyright (C) 2003-2013 Free Software Foundation, Inc.
This file is part of GDB.
@@ -143,14 +143,18 @@ default_frame_sniffer (const struct frame_unwind *self,
return 1;
}
-/* A default frame unwinder stop_reason callback that always claims
- the frame is unwindable. */
+/* The default frame unwinder stop_reason callback. */
enum unwind_stop_reason
default_frame_unwind_stop_reason (struct frame_info *this_frame,
void **this_cache)
{
- return UNWIND_NO_REASON;
+ struct frame_id this_id = get_frame_id (this_frame);
+
+ if (frame_id_eq (this_id, outer_frame_id))
+ return UNWIND_OUTERMOST;
+ else
+ return UNWIND_NO_REASON;
}
/* Helper functions for value-based register unwinding. These return
@@ -162,11 +166,18 @@ struct value *
frame_unwind_got_optimized (struct frame_info *frame, int regnum)
{
struct gdbarch *gdbarch = frame_unwind_arch (frame);
- struct value *reg_val;
-
- reg_val = value_zero (register_type (gdbarch, regnum), not_lval);
- set_value_optimized_out (reg_val, 1);
- return reg_val;
+ struct type *type = register_type (gdbarch, regnum);
+ struct value *val;
+
+ /* Return an lval_register value, so that we print it as
+ "<not saved>". */
+ val = allocate_value_lazy (type);
+ set_value_lazy (val, 0);
+ set_value_optimized_out (val, 1);
+ VALUE_LVAL (val) = lval_register;
+ VALUE_REGNUM (val) = regnum;
+ VALUE_FRAME_ID (val) = get_frame_id (frame);
+ return val;
}
/* Return a value which indicates that FRAME copied REGNUM into
« no previous file with comments | « gdb/frame-unwind.h ('k') | gdb/frv-linux-tdep.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698