From 6675be4926ff3989da0542ed19c55ab3a01df010 Mon Sep 17 00:00:00 2001 From: "hp.com!davidm" Date: Fri, 20 May 2005 09:48:08 +0000 Subject: [PATCH] (linux_interrupt): Enable this code for the kernel, too. Use ia64_get_abi_marker() instead of c->abi_marker. Use ia64_set_abi() instead of storing directly to c->as->abi. (Logical change 1.294) --- src/ia64/Gstep.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/ia64/Gstep.c b/src/ia64/Gstep.c index bf94f17a..9da2d9e8 100644 --- a/src/ia64/Gstep.c +++ b/src/ia64/Gstep.c @@ -64,10 +64,7 @@ static inline int linux_interrupt (struct cursor *c, ia64_loc_t prev_cfm_loc, unw_word_t *num_regsp, int marker) { -#if defined(UNW_LOCAL_ONLY) - /* Perhaps libunwind will some day become the Linux kernel unwinder. - Until such time, linux_interrupt() is needed only for non-local - unwinding. */ +#if defined(UNW_LOCAL_ONLY) && !(defined(__linux) && defined(__KERNEL__)) return -UNW_EINVAL; #else unw_word_t sc_addr, num_regs; @@ -272,25 +269,25 @@ update_frame_state (struct cursor *c) if (unlikely (c->abi_marker)) { c->last_abi_marker = c->abi_marker; - switch (c->abi_marker) + switch (ia64_get_abi_marker (c)) { case ABI_MARKER_LINUX_SIGTRAMP: case ABI_MARKER_OLD_LINUX_SIGTRAMP: - c->as->abi = ABI_LINUX; + ia64_set_abi (c, ABI_LINUX); if ((ret = linux_sigtramp (c, prev_cfm_loc, &num_regs)) < 0) return ret; break; case ABI_MARKER_OLD_LINUX_INTERRUPT: case ABI_MARKER_LINUX_INTERRUPT: - c->as->abi = ABI_LINUX; + ia64_set_abi (c, ABI_LINUX); if ((ret = linux_interrupt (c, prev_cfm_loc, &num_regs, c->abi_marker)) < 0) return ret; break; case ABI_MARKER_HP_UX_SIGTRAMP: - c->as->abi = ABI_HPUX; + ia64_set_abi (c, ABI_HPUX); if ((ret = hpux_sigtramp (c, prev_cfm_loc, &num_regs)) < 0) return ret; break; @@ -360,6 +357,6 @@ unw_step (unw_cursor_t *cursor) && (ret = update_frame_state (c)) >= 0) ret = (c->ip == 0) ? 0 : 1; - Debug (2, "returning %d\n", ret); + Debug (2, "returning %d (ip=0x%016lx)\n", ret, (unsigned long) c->ip); return ret; }