You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
5.0 KiB
97 lines
5.0 KiB
- Update the libunwind man page for the new/fixed cache-flushing behavior. |
|
Effectively, that unw_flush_cache() doesn't have to be called by |
|
applications except for extraordinary circumstances (e.g., if application |
|
implements its own runtime loader). |
|
- document split local-only/generic libraries and separate libunwind-ptrace.a |
|
convenience-library |
|
- document new "tdep" member in unw_proc_info_t structure |
|
- for DWARF 2, use a dummy CIE entry with an augmentation that |
|
provides the dyn-info-list-address |
|
|
|
=== taken care of: |
|
|
|
Testing: |
|
+ ensure that saving r4-r7 in a stacked register properly preserves |
|
the NaT bit, even in the face of register-rotation |
|
+ ensure that IA64_INSN_MOVE_STACKED works correctly in the face of |
|
register rotation |
|
+ on Linux, test access to f32-f127 in a signal handler (e.g., verify |
|
that fph partition gets initialized properly) |
|
+ According to Nicholas S. Wourms <nwourms@netscape.net>, adding this to the |
|
Makefile.am: |
|
AUTOMAKE_OPTIONS = 1.6 subdir-objects |
|
ensures that object-files are build in separate subdirectories and that |
|
in turn makes it possible for source files in different directories to |
|
have the same filename, thus avoiding the need for those ugly -x86, -ia64, |
|
etc., postfixes. |
|
+ Switch ia64 (and rest over) to using Debug() instead of debug() |
|
+ implement non-local versions of dwarf_readXX() |
|
+ consolidate mostly architecture-independent code such as |
|
unw_get_accessors() into shared files |
|
+ caching is pretty fundamentally broken, what should happen is this: |
|
o On unw_init_local()/unw_init_remote(), libunwind should validate |
|
that the cached information is still valid and, if not, flush the |
|
cache on its own. Rationale: once unw_init_local() has been |
|
called, it is clear that the unwind info for the calling thread |
|
cannot change (otherwise the program would be buggy anyhow) and |
|
hence it is sufficient to validate the cache at this point. |
|
Similarly, once unw_init_remote() has been called, the target |
|
address space must have been stopped, because the unwinding would |
|
otherwise be unreliable anyhow. |
|
o glibc currently lacks a feature for dl_iterate_phdr() to support |
|
safe caching; I proposed on 12/16/2003 that glibc maintain two |
|
atomic counters which get inremented whenever something is added |
|
to/removed from the dl_iterate_phdr-list. Once we have such counters, |
|
we can use them in libunwind to implement an efficient version of a |
|
cache-validation routine. |
|
Once this has been fixed, update the libunwind man page accordingly. |
|
Effectively, what this means is that unw_flush_cache() doesn't have |
|
to be called by applications except for extraordinary circumstances |
|
(e.g., if application implements its own runtime loader). |
|
+ man-page for unw_is_fpreg() |
|
+ man-page for _U_dyn_cancel() |
|
+ man-page for _U_dyn_register() |
|
+ global data is not protected by a lock; causes problems if two threads |
|
call ia64_init() at almost the same time |
|
+ cache the value of *cfm_loc; each rotate_FOO() call needs it! |
|
+ implement the remote-lookup of the dynamic registration list |
|
+ when doing sigreturn, must restore fp regs (and perhaps other regs) the same |
|
way as the (user-level) gate.S sigreturn path does! |
|
+ unw_resume() must at least restore gp (r1)! consider restoring all |
|
scratch regs (but what's the performance impact on exception handling?); |
|
alternative: restore scratch regs that may be used during procedure |
|
call/return (e.g., r8-r11, f8-f11) |
|
+ implement unw_resume() for the case where the current register frame is split |
|
across multiple backing stores |
|
+ document restricions on using unw_resume(): |
|
+ implement remote cases of unw_resume() |
|
+ test both with UNW_LOCAL_ONLY and without where this makes sense |
|
+ allow region-length (insn_count) in unw_dyn_region_info_t to be negative |
|
to indicate counting from the end of the procedure (to make it possible |
|
for differently-sized procedures to share the same region list if they |
|
share the same prologue/epilogue). |
|
+ it appears that it is currently not possible to read register UNW_IA64_TP; |
|
fix that => no, attempts to access r13 will result in access_reg() callbacks, |
|
as desired; for local-case, access to r13 will fail though (since |
|
getcontext() doesn't, and shouldn't, capture r13) |
|
+ document the special nature of UNW_IA64_GP: read-only, but adjusted |
|
automatically if the IP is changed |
|
+ use pthread-mutexes where necessary, atomic ops where possible |
|
+ man-page for unw_init_local() |
|
+ man-page for unw_init_remote() |
|
+ man-page for unw_create_addr_space() |
|
+ man-page for unw_destroy_addr_space() |
|
+ man-page for unw_get_proc_info() |
|
+ man-page for unw_get_proc_name() |
|
+ man-page for unw_get_accessors() |
|
+ man-page for unw_regname() |
|
+ man-page for unw_flush_cache() |
|
+ man-page for unw_set_caching_policy() |
|
+ man-page for unw_getcontext() |
|
+ man-page for unw_is_signal_frame() |
|
+ man-page for unw_step() |
|
+ man-page for unw_get_reg() |
|
+ man-page for unw_set_reg() |
|
+ man-page for unw_get_fpreg() |
|
+ man-page for unw_set_fpreg() |
|
+ test with Intel compiler
|
|
|