that in the UNW_LOCAL_ONLY-case, bit 2 in register save locations is unused. If
UNW_LOCAL_ONLY is defined, define stream-lined versions of IA64_REG_LOC(),
IA64_FPREG_LOC(), ia64_acquire_unwind_info(), ia64_release_unwind_info(), ia64_get(),
ia64_put(), ia64_getfp(), and ia64_putfp(). Drop convenience macros and declarations for
ia64_glibc_{acquire,release}_unwind_info(). Add convenience macro and declaration for
ia64_local_resume().
(Logical change 1.8)
(_U_ia64_uc_addr): New function.
(access_reg): Use uc_addr() to calculate ucontext address. Use uc->sc_rbs_base
when accessing ar.bsp or ar.bspstore (see comments for unw_init_local()).
(access_fpreg): Ditto.
(ia64_local_resume): Renamed from resume(). Read NaT bits via ia64_access_reg().
Call abort() instead of fprintf() when encountering a signal trampoline.
(unw_init_local): Initialize uc->sc_rbs_base to the bsp value of the current function.
For UNW_LOCAL_ONLY case, just initialize c->uc and then call
common_init() to do the remaining initialization. For the general case,
just initialize the accessor and then also call common_init().
(Logical change 1.8)
cast the value to (long).
(struct ia64_labeled_state): New type.
(alloc_labeled_state): New macro.
(free_labeled_state): Ditto.
(push, pop): Update for new ia64_state_record layout.
(dup_state_stack): New function.
(free_state_stack): Ditto.
(desc_copy_state): Make it restore the entire stack of states, not
just the current one.
(desc_label_state): Make it save the entire stack of states, not
just the current one.
(ia64_free_state_record): Free the list of labeled states.
(desc_prologue): Terminate parsing at end of region regardless of
whether the next region is a body or a prologue.
(lookup): Verify that unwind table entry found by binary search
really includes the desired IP. If not, return NULL.
(get_proc_info): Adjust for move of start/end from unwind table
to the unwind table info. Return -UNW_ENOMEM if unable
to allocate a new table. If unwind entry does not exist
for desired IP, clear the procedure info to zero. Check
the unwind version number and return -UNW_EBADVERSION if
it is not 1.
(Logical change 1.5)
alias() macros.
(struct ia64_cursor): Rearrange order of members a bit to group
things that logicall belong together. Rename rp_loc to
ip_loc.
(struct ia64_unwind_table): Drop start and end members (they are now
in unw_ia64_table_t).
(struct ia64_reg_state): Break declaration out of declaration for
ia64_state_record and add "next" member.
(struct ia64_state_record): Add member "labeled_states", drop
members "stack", and "reg_state_list".
(Logical change 1.5)
various other types and constants based on it.
(unw_error_t): A UNW_EINVAL, UNW_EBADVERSION, and UNW_ENOINFO.
(unw_frame_regnum_t): Instead of hardcoding the numbers for the
well-known frame registers, use the architecture-specific
(target-dependent) values instead.
(Logical change 1.5)
as sigcontext). Adjust for the fact that the RSE arithmetic
is now done on values of type unw_word_t rather than long pointers.
(ia64_scratch_loc): Rename from ia64_get_sigcontext() and expand
it such that it returns a scratch register location if
the current frame is not a sigcontext frame.
(ia64_access_reg): Read the address of the personality routine with
ia64_get() rather than trying to dereference the address
directly. When writing the IP or the PR, update the cached
values, too.
(Logical change 1.5)