(eventually) clear the IP values of all scripts, but failed to
update the hash/collision-chain info, which could result in
loops in the collision-chains. Fixed by flushing the cache under
the global lock and since things are locked now, we can update the
collision-chain etc. without fear of races. Added test-flush-cache
to test for this error-condition.
BKrev: 3f6aa88cQRr-NcDXg_8mM3dN2esAQQ
hash-table, collision-chains, and hash-table in addition
to clearing the script's IP value. The latter wasn't nearly
sufficient because it could cause loops on the collision
chain...
(get_script_cache): Also lock the cache if global caching is in
effect. Take additional "saved_sigmaskp" argument.
After flushing the cache, update the cache generation
here.
(put_script_cache): New function.
(ia64_get_cached_proc_info): Adjust for get_script_cache() and
put_script_cache() changes.
(ia64_find_save_locs): Ditto.
(ia64_script_cache_init): Call flush_script_cache() instead of
opening-coding the equivalent code.
(Logical change 1.96)
a failure status, we ended up bugging out at a time when the
script was already created, but not fully initialized. To prevent
this, the proc-info is now obtained early on, i.e., before creating
the script, so that if the proc-info cannot be obtained, we can bug
out without bad side-effects. Also, I added a test-program
(test-proc-info) which verifies that proc-info lookup failures are
not cached (which we don't want, because it could turn temporary
failures into permanent ones and would break UNW_ESTOPUNWIND).
BKrev: 3f694c12mGQ-jHr9HOtB4YXFHeLdMw
state-record.
(ia64_fetch_proc_info): Rename from get_proc_info().
(create_state_record_for): Assert that c->pi_valid is TRUE at the
time of entry. Remove call to get_proc_info().
(Logical change 1.95)
a value that is potentially > 31. Casting it to (unsigned long)
is not enough on 32-bit platforms.
(create_state_record_for): Cast 0xf to (unw_word_t) instead of
(unsigned long) to avoid losing bits on 32-bit platforms.
(Logical change 1.92)
Linux kernel "struct pt_regs" layout.
(update_frame_state): Handle ABI_MARKER_OLD_LINUX_SIGTRAMP and
ABI_MARKRE_OLD_LINUX_INTERRUPT. Cast values of type unw_word_t
to (unsigned long) before printing them.
(Logical change 1.91)
(linux_scratch_loc): Add support for new pt_regs layout.
(access_nat): Check last_abi_marker instead of sigcontext_addr and
address-space ABI.
(Logical change 1.91)
(ABI_MARKER_OLD_LINUX_INTERRUPT): Rename from ABI_MARKER_LINUX_INTERRUPT.
(ABI_MARKER_LINUX_SIGTRAMP): Define with Linux ABI value (3).
(ABI_MARKER_LINUX_INTERRUPT): Ditto.
(Logical change 1.91)
into panda.mostang.com:/data/home/davidm/src/unwind/libunwind
2003/06/03 14:35:33-07:00 mostang.com!davidm
Fix bug reported by Brian Sumner:
Replace state_record_pool with reg_state_pool. This avoids allocating
more than the necessary amount of memory when pushing register states.
BKrev: 3edd14c3Z03JVOhew5snOIkekLUxfg
(update_frame_state): Handle ABI_MARKER_LINUX_INTERRUPT by calling linux_interrupt().
If c->abi_marker is non-zero, copy it to c->last_abi_marker.
(Logical change 1.89)
(access_reg) [HAVE_SYS_UC_ACCESS_H]: Sanitize and simplify this routine. Turns out
uc_access(3) works pretty much the way we need it, the only problem is that
the unwind info for getcontext() seems to be missing as of HP-UX 11.22.
(ia64_uc_access_reg): New function.
(ia64_uc_access_fpreg): Ditto.
(ia64_local_addr_space_init): Initialize "abi" member of local address space based
on the platform we're compiling on.
(Logical change 1.87)