Update.
(Logical change 1.153)
diff --git a/TODO b/TODO
index cc6336c..785a890 100644
--- a/TODO
+++ b/TODO
@@ -1,32 +1,14 @@
+- 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
- implement non-local versions of dwarf_readXX()
- 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
-- 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. Rational: 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).
-
Testing:
- ensure that saving r4-r7 in a stacked register properly preserves
the NaT bit, even in the face of register-rotation
@@ -37,6 +19,26 @@
=== taken care of:
++ 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()