(lookup): New function (moved from parser.c).
(_Uia64_search_unwind_table): New function (based on code in parser.c).
(kernel_table): New variable.
(get_kernel_table): Relocate the kernel table's "info_offset" values as we
count it. Adjust for new callback-interface.
(callback): Adjust for new interface.
(_Uia64_find_proc_info): Rename from _Uia64_glibc_acquire_unwind_info).
}(Logical change 1.29)
(lookup): New function (moved from parser.c).
(_Uia64_search_unwind_table): New function (based on code in parser.c).
(kernel_table): New variable.
(get_kernel_table): Relocate the kernel table's "info_offset" values as we
count it. Adjust for new callback-interface.
(callback): Adjust for new interface.
(_Uia64_find_proc_info): Rename from _Uia64_glibc_acquire_unwind_info).
2002/11/27 16:44:37-08:00 mostang.com!davidm
Rename: src/ia64/tables-glibc.c -> src/ia64/tables.c
(Logical change 1.29)
(struct ia64_cursor): Change type of "pi" member from struct ia64_proc_info to
unw_proc_info_t.
(struct unw_addr_space): Declare "acc" member even for UNW_LOCAL_ONLY case.
(ia64_acquire_unwind_info): Delete
(ia64_relesae_unwind_info): Ditto.
(ia64_find_proc_info): New routine.
(struct ia64_unwind_table_entry): Delete.
(struct ia64_unwind_talbe): Ditto.
(struct ia64_global_unwind_state): Remove "unwind_table_pool" member.
(ia64_get_proc_info): Rename to ia64_make_proc_info().
(Logical change 1.29)
(lookup_preg): New function.
(parse_dynamic): Ditto.
(get_proc_info): Take explicit IP argument.
(create_state_record_for): New function, containing most of the code originally
in ia64_create_state_record(). Don't forget to initialize
sr->first_region. Check c->pi.format and parse unwind descriptors or
dynamically registered unwind info accordingly.
(ia64_get_proc_info): Adjust for extra argument expected by get_proc_info().
(ia64_create_state_record): Do interesting work by calling create_state_record_for().
(Logical change 1.29)
(get_script_cache): Ditto.
(script_lookup): Renamed from ia64_script_lookup() and add "address-space" argument.
(ia64_script_lookup): New function.
(build_script): Get script from the caller instead of via script_new().
(ia64_find_save_locs): If caching is disabled, create a temporary script and
do not update the script cache.
(Logical change 1.27)
(struct ia64_reg_state): Moved here from parser.c.
(struct ia64_global_unwind_state): Add unwind_table_pool, state_record_pool,
and labeled_state_pool.
(Logical change 1.19)
(alloc_reg_state): Use mempool interface.
(free_reg_state): Ditto.
(alloc_labeled_state): Ditto.
(free_labeled_state): Ditto.
(alloc_spill_area): Fix spill-area allocation (fix by Richard Henderson).
(desc_frgr_mem): Fix case for f16-f31 (fix by Richard Henderson).
(get_proc_info): Use mempool_alloc() instead of malloc().
(Logical change 1.19)
pointing at the signal trampoline frame. Otherwise, raising an exception from within
a signal handler will fail to pass the exception arguments to the exception handler.
(Logical change 1.19)
(unw_regname): First register number now starts with zero.
2002/04/11 21:43:00-07:00 mostang.com!davidm
Rename: src/ia64/shared.c -> src/ia64/unw_regname.c
(Logical change 1.16)
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)
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)
cfm_loc with UNW_IA64_CFM. Initialize bspstore_loc with
UNW_IA64_AR_BSPSTORE. Renamem rp_loc to ip_loc and initialize
with UNW_IA64_IP. Initialized the cached values of
PR and IP. Initialize sp and psp to value in UNW_IA64_SP.
Initialize exception handling args by reading the corresponding
scratch registers (r15-r18). If the read fails, initialize
with 0. Finish by calling ia64_get_proc_info() instead of
ia64_get_frame_state().
(Logical change 1.5)