Index: gdb/dwarf2-frame-tailcall.c |
diff --git a/gdb/dwarf2-frame-tailcall.c b/gdb/dwarf2-frame-tailcall.c |
index fcfeaf4227e05bc90f59fe620fa2035de995d4de..b82a0517dc507c24a8bc21abca541707303e4d2b 100644 |
--- a/gdb/dwarf2-frame-tailcall.c |
+++ b/gdb/dwarf2-frame-tailcall.c |
@@ -1,6 +1,6 @@ |
/* Virtual tail call frames unwinder for GDB. |
- Copyright (C) 2010-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2010-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -223,9 +223,9 @@ tailcall_frame_this_id (struct frame_info *this_frame, void **this_cache, |
*this_id = get_frame_id (next_frame); |
(*this_id).code_addr = get_frame_pc (this_frame); |
(*this_id).code_addr_p = 1; |
- (*this_id).inline_depth = (cache->chain_levels |
- - existing_next_levels (this_frame, cache)); |
- gdb_assert ((*this_id).inline_depth > 0); |
+ (*this_id).artificial_depth = (cache->chain_levels |
+ - existing_next_levels (this_frame, cache)); |
+ gdb_assert ((*this_id).artificial_depth > 0); |
} |
/* Find PC to be unwound from THIS_FRAME. THIS_FRAME must be a part of |
@@ -374,7 +374,9 @@ dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, |
gdb_assert (*tailcall_cachep == NULL); |
- this_pc = get_frame_pc (this_frame); |
+ /* PC may be after the function if THIS_FRAME calls noreturn function, |
+ get_frame_address_in_block will decrease it by 1 in such case. */ |
+ this_pc = get_frame_address_in_block (this_frame); |
/* Catch any unwinding errors. */ |
TRY_CATCH (except, RETURN_MASK_ERROR) |