(unwi_dyn_remote_find_proc_info): Maintain as->dyn_info_list_addr as a cache of
the most recently obtained dyn-info-list address.
(Logical change 1.61)
(_longjmp): Ensure that we have at least 4 exception-handling args. (This code
will need updating to make it work on x86, where only 2 exception handling
args are available).
(longjmp): If we are compiling with GCC, use an alias-attribute to alias it with
_longjmp(). This is more efficient and works around a gcc-3.2/ia64 bug
which causes bad unwind info when a noreturn function is a last call.
(Logical change 1.59)
(_longjmp): Ensure that we have at least 4 exception-handling args. (This code
will need updating to make it work on x86, where only 2 exception handling
args are available).
(Logical change 1.59)
(SOSLOCK): Remove
(SOSUNLOCK): Ditto.
(LOCK): Ditto
(UNLOCK): Ditto.
(sos_alloc): If HAVE_CMPXCHG is defined, use cmpxchg_ptr() to atomically allocate
memory in a lock-free manner. Otherwise, fall back on disabling signal
delivery and holding the sos_lock during memory allocation.
(sos_free): Remove.
(mempool_init): Initialize pool lock. Replace LOCK/UNLOCK with appropriate
signal-masking & mutex_lock/unlock calls.
(mempool_free): Replace LOCK/UNLOC with appropriate signal-masking & mutex_lock/unlock
calls.
(Logical change 1.59)
(ia64_get_cached_proc_info): Rename from ia64_script_lookup() and modify it so
it directly updates the proc-info if the necessary script is in the cache.
(script_new): Remove locking comments and adjust formatting.
(ia64_find_save_locs): If global caching is enabled, mask signal delivery and
hold the cache lock while accessing the cache.
(ia64_script_cache_init): Initialize the cache lock.
(Logical change 1.59)
(parse_dynamic): Fix it so it actually works.
(create_state_record_for): Initialize return_link_reg to zero.
Don't print "no unwind info" unconditionally when UNW_DEBUG is
in effect.
(Logical change 1.56)
(intern_dyn_info): Skip over padding rather than fetching it.
Start intern_regions() at address of first region, not just at the next
sequential address.
(unwi_dyn_remote_find_proc_info): Allocate "di" dynamically (it needs to persist
until put_unwind_info() is called).
(Logical change 1.56)
Skip over "prev_addr". Read start/end-IP directly into the "di" structure,
not into temporary variables. Skip padding by directly adjusting the
address (don't bother fetching padding values; that only slows things down).
Return 0 only if we really did find dynamic unwind info.
(Logical change 1.55)
(.info): Use @gprel() reloc instead of @segrel() reloc for _U_dyn_info_list.
The latter doesn't work because the unwind-info is in a different segment.
(ia64_init): Clear unw.r0.
(Logical change 1.55)
(desc_prologue): Fix handling of region_start so it doesn't get corrupted by
state-record pushing/popping.
(parse_dynamic): Allow the last region to contain a negative insn_count, indicating
that the region covers the last portion of a procedure.
(Logical change 1.54)