From 8b17d136c54d40e0a369135f12108cd052ebf405 Mon Sep 17 00:00:00 2001 From: "mostang.com!davidm" Date: Tue, 21 Jan 2003 17:41:20 +0000 Subject: [PATCH] (struct cursor): Replace rbs_top and top_rnat_loc with rbs_wridx, rbs_curr, rbs_nvalid, and rbs_area. Add new member sigcontext_off. (Logical change 1.40) --- include/tdep-ia64.h | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/include/tdep-ia64.h b/include/tdep-ia64.h index f52484a0..ce6f25c5 100644 --- a/include/tdep-ia64.h +++ b/include/tdep-ia64.h @@ -1,5 +1,5 @@ /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002 Hewlett-Packard Co + Copyright (C) 2001-2003 Hewlett-Packard Co Contributed by David Mosberger-Tang This file is part of libunwind. @@ -91,8 +91,6 @@ struct cursor unw_word_t sp; /* stack pointer value */ unw_word_t psp; /* previous sp value */ unw_word_t cfm_loc; /* cfm save location (or NULL) */ - unw_word_t rbs_top; /* address of end of register backing store */ - unw_word_t top_rnat_loc; /* location of final (topmost) RNaT word */ /* preserved state: */ unw_word_t bsp_loc; /* previous bsp save location */ @@ -114,12 +112,33 @@ struct cursor unw_word_t sigcontext_loc; /* location of sigcontext or NULL */ unw_word_t is_signal_frame; /* is this a signal trampoline frame? */ + unw_word_t sigcontext_off; /* sigcontext-offset relative to signal sp */ + short hint; short prev_script; int pi_valid : 1; /* is proc_info valid? */ int pi_is_dynamic : 1; /* proc_info found via dynamic proc info? */ unw_proc_info_t pi; /* info about current procedure */ + + /* In case of stack-discontiguities, such as those introduced by + signal-delivery on an alternate signal-stack (see + sigaltstack(2)), we use the following data-structure to keep + track of the register-backing-store areas across on which the + current frame may be backed up. Since there are at most 96 + stacked registers and since we only have to track the current + frame and only areas that are not empty, at most 96 + backing-store areas have to be tracked. */ + uint8_t rbs_wridx; /* write index (see rbs-ia64.c) */ + uint8_t rbs_curr; /* index of current rbs-area (contains c->bsp) */ + uint8_t rbs_nvalid; /* number of entries that area valid */ + struct rbs_area + { + unw_word_t end; + unw_word_t size; + unw_word_t rnat_loc; + } + rbs_area[96]; }; struct ia64_global_unwind_state