From c140d8598d86c699ec619f3652aedbbddb142b69 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Sun, 25 Apr 2010 09:44:59 -0700 Subject: [PATCH] Undo commit f252f5ff4e51af90fd6629f122f72556db94ccb7 for now. Seems to introduce a couple of test breakages. --- src/x86_64/Gstep.c | 36 +++--------------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/src/x86_64/Gstep.c b/src/x86_64/Gstep.c index 85e3989a..237811ce 100644 --- a/src/x86_64/Gstep.c +++ b/src/x86_64/Gstep.c @@ -28,38 +28,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "unwind_i.h" #include -/* Recognise PLT entries such as: - 3bdf0: ff 25 e2 49 13 00 jmpq *0x1349e2(%rip) - 3bdf6: 68 ae 03 00 00 pushq $0x3ae - 3bdfb: e9 00 c5 ff ff jmpq 38300 <_init+0x18> */ -static int -is_plt_entry (struct dwarf_cursor *c) -{ - unw_word_t w0, w1; - unw_accessors_t *a; - int ret; - - a = unw_get_accessors (c->as); - if ((ret = (*a->access_mem) (c->as, c->ip, &w0, 0, c->as_arg)) < 0 - || (ret = (*a->access_mem) (c->as, c->ip + 8, &w1, 0, c->as_arg)) < 0) - return 0; - - ret = (((w0 & 0xffff) == 0x25ff) - && (((w0 >> 48) & 0xff) == 0x68) - && (((w1 >> 24) & 0xff) == 0xe9)); - - Debug (14, "ip=0x%lx => 0x%016lx 0x%016lx, ret = %d\n", c->ip, w0, w1, ret); - return ret; -} - PROTECTED int unw_step (unw_cursor_t *cursor) { struct cursor *c = (struct cursor *) cursor; int ret, i; - Debug (1, "(cursor=%p, ip=0x%016lx, cfa=0x%016lx)\n", - c, c->dwarf.ip, c->dwarf.cfa); + Debug (1, "(cursor=%p, ip=0x%016llx)\n", + c, (unsigned long long) c->dwarf.ip); /* Try DWARF-based unwinding... */ c->sigcontext_format = X86_64_SCF_NONE; @@ -110,12 +86,6 @@ unw_step (unw_cursor_t *cursor) return 0; } } - else if (is_plt_entry (&c->dwarf)) - { - Debug (2, "found plt entry\n"); - c->dwarf.loc[RIP] = DWARF_LOC (c->dwarf.cfa, 0); - c->dwarf.cfa += 8; - } else if (DWARF_IS_NULL_LOC (c->dwarf.loc[RBP])) { for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) @@ -169,7 +139,7 @@ unw_step (unw_cursor_t *cursor) c->dwarf.ret_addr_column = RIP; - if (!DWARF_IS_NULL_LOC (c->dwarf.loc[RIP])) + if (!DWARF_IS_NULL_LOC (c->dwarf.loc[RBP])) { ret = dwarf_get (&c->dwarf, c->dwarf.loc[RIP], &c->dwarf.ip); Debug (1, "Frame Chain [RIP=0x%Lx] = 0x%Lx\n",