hp.com!davidm | a7aaf01 | 2004-01-20 01:51:17 +0000 | [diff] [blame] | 1 | - Update the libunwind man page for the new/fixed cache-flushing behavior. |
| 2 | Effectively, that unw_flush_cache() doesn't have to be called by |
| 3 | applications except for extraordinary circumstances (e.g., if application |
| 4 | implements its own runtime loader). |
| 5 | - document split local-only/generic libraries and separate libunwind-ptrace.a |
| 6 | convenience-library |
hp.com!davidm | 70be129 | 2003-12-20 11:50:00 +0000 | [diff] [blame] | 7 | - document new "tdep" member in unw_proc_info_t structure |
| 8 | - for DWARF 2, use a dummy CIE entry with an augmentation that |
| 9 | provides the dyn-info-list-address |
| 10 | |
mostang.com!davidm | 1cabc10 | 2003-04-21 18:38:48 +0000 | [diff] [blame] | 11 | === taken care of: |
| 12 | |
mostang.com!davidm | 81570a9 | 2004-03-20 09:54:28 +0000 | [diff] [blame] | 13 | Testing: |
| 14 | + ensure that saving r4-r7 in a stacked register properly preserves |
| 15 | the NaT bit, even in the face of register-rotation |
| 16 | + ensure that IA64_INSN_MOVE_STACKED works correctly in the face of |
| 17 | register rotation |
| 18 | + on Linux, test access to f32-f127 in a signal handler (e.g., verify |
| 19 | that fph partition gets initialized properly) |
homeip.net!davidm | bc22c6e | 2004-08-17 15:34:28 +0000 | [diff] [blame] | 20 | + According to Nicholas S. Wourms <nwourms@netscape.net>, adding this to the |
| 21 | Makefile.am: |
| 22 | AUTOMAKE_OPTIONS = 1.6 subdir-objects |
| 23 | ensures that object-files are build in separate subdirectories and that |
| 24 | in turn makes it possible for source files in different directories to |
| 25 | have the same filename, thus avoiding the need for those ugly -x86, -ia64, |
| 26 | etc., postfixes. |
hp.com!davidm | fcd8dad | 2004-01-30 00:01:24 +0000 | [diff] [blame] | 27 | + Switch ia64 (and rest over) to using Debug() instead of debug() |
| 28 | + implement non-local versions of dwarf_readXX() |
| 29 | + consolidate mostly architecture-independent code such as |
| 30 | unw_get_accessors() into shared files |
hp.com!davidm | a7aaf01 | 2004-01-20 01:51:17 +0000 | [diff] [blame] | 31 | + caching is pretty fundamentally broken, what should happen is this: |
| 32 | o On unw_init_local()/unw_init_remote(), libunwind should validate |
| 33 | that the cached information is still valid and, if not, flush the |
| 34 | cache on its own. Rationale: once unw_init_local() has been |
| 35 | called, it is clear that the unwind info for the calling thread |
| 36 | cannot change (otherwise the program would be buggy anyhow) and |
| 37 | hence it is sufficient to validate the cache at this point. |
| 38 | Similarly, once unw_init_remote() has been called, the target |
| 39 | address space must have been stopped, because the unwinding would |
| 40 | otherwise be unreliable anyhow. |
| 41 | o glibc currently lacks a feature for dl_iterate_phdr() to support |
| 42 | safe caching; I proposed on 12/16/2003 that glibc maintain two |
| 43 | atomic counters which get inremented whenever something is added |
| 44 | to/removed from the dl_iterate_phdr-list. Once we have such counters, |
| 45 | we can use them in libunwind to implement an efficient version of a |
| 46 | cache-validation routine. |
| 47 | Once this has been fixed, update the libunwind man page accordingly. |
| 48 | Effectively, what this means is that unw_flush_cache() doesn't have |
| 49 | to be called by applications except for extraordinary circumstances |
| 50 | (e.g., if application implements its own runtime loader). |
mostang.com!davidm | 9240efe | 2003-12-10 07:14:38 +0000 | [diff] [blame] | 51 | + man-page for unw_is_fpreg() |
| 52 | + man-page for _U_dyn_cancel() |
| 53 | + man-page for _U_dyn_register() |
hp.com!davidm | 2f5a4b5 | 2003-11-19 03:11:25 +0000 | [diff] [blame] | 54 | + global data is not protected by a lock; causes problems if two threads |
| 55 | call ia64_init() at almost the same time |
mostang.com!davidm | 1cabc10 | 2003-04-21 18:38:48 +0000 | [diff] [blame] | 56 | + cache the value of *cfm_loc; each rotate_FOO() call needs it! |
| 57 | + implement the remote-lookup of the dynamic registration list |
| 58 | + when doing sigreturn, must restore fp regs (and perhaps other regs) the same |
| 59 | way as the (user-level) gate.S sigreturn path does! |
| 60 | + unw_resume() must at least restore gp (r1)! consider restoring all |
| 61 | scratch regs (but what's the performance impact on exception handling?); |
| 62 | alternative: restore scratch regs that may be used during procedure |
| 63 | call/return (e.g., r8-r11, f8-f11) |
| 64 | + implement unw_resume() for the case where the current register frame is split |
| 65 | across multiple backing stores |
| 66 | + document restricions on using unw_resume(): |
| 67 | + implement remote cases of unw_resume() |
| 68 | + test both with UNW_LOCAL_ONLY and without where this makes sense |
| 69 | + allow region-length (insn_count) in unw_dyn_region_info_t to be negative |
| 70 | to indicate counting from the end of the procedure (to make it possible |
| 71 | for differently-sized procedures to share the same region list if they |
| 72 | share the same prologue/epilogue). |
| 73 | + it appears that it is currently not possible to read register UNW_IA64_TP; |
| 74 | fix that => no, attempts to access r13 will result in access_reg() callbacks, |
| 75 | as desired; for local-case, access to r13 will fail though (since |
| 76 | getcontext() doesn't, and shouldn't, capture r13) |
| 77 | + document the special nature of UNW_IA64_GP: read-only, but adjusted |
| 78 | automatically if the IP is changed |
| 79 | + use pthread-mutexes where necessary, atomic ops where possible |
| 80 | + man-page for unw_init_local() |
| 81 | + man-page for unw_init_remote() |
| 82 | + man-page for unw_create_addr_space() |
| 83 | + man-page for unw_destroy_addr_space() |
| 84 | + man-page for unw_get_proc_info() |
| 85 | + man-page for unw_get_proc_name() |
| 86 | + man-page for unw_get_accessors() |
| 87 | + man-page for unw_regname() |
| 88 | + man-page for unw_flush_cache() |
| 89 | + man-page for unw_set_caching_policy() |
| 90 | + man-page for unw_getcontext() |
| 91 | + man-page for unw_is_signal_frame() |
| 92 | + man-page for unw_step() |
| 93 | + man-page for unw_get_reg() |
| 94 | + man-page for unw_set_reg() |
| 95 | + man-page for unw_get_fpreg() |
| 96 | + man-page for unw_set_fpreg() |
mostang.com!davidm | 9825197 | 2003-04-23 19:22:42 +0000 | [diff] [blame] | 97 | + test with Intel compiler |