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)
Use offsets defined in this file instead of calculating the offsets
from sigcontext structure.
(update_frame_state): Rename from ia64_get_frame_state() and make it
static and inlined.
(unw_step): Call update_frame_state() instead of ia64_get_frame_state().
(Logical change 1.5)
unconditionally returns -UNW_EINVAL.
(access_reg): IP is now read via UNW_IA64_IP (instead of
UNW_IA64_BR+0). CFM is now read via UNW_IA64_CFM
instead of UNW_IA64_AR_PFS. For UNW_IA64_AR_BSP
(and UNW_IA64_AR_BSPSTORE), adjust the pointer so
that it points to the first stacked register in
the current frame.
(resume): "rp_loc" has been renamed to "ip_loc".
(unw_init_local): Add an #error directive to prevent compilation
with UNW_LOCAL_ONLY until this case has been implemented.
(Logical change 1.5)
(get_kernel_table): Return -UNW_ENOMEM if unable to allocate buffer
for kernel's unwind info. Initialize the start and end
members in unw_ia64_table_t.
(callback): Initialize the start and end members.
(Logical change 1.5)