1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-26 09:07:38 +01:00
Commit graph

208 commits

Author SHA1 Message Date
mostang.com!davidm
7915b799c8 Drop argument names from prototypes to reduce namespace pollution.
Define libunwind routines such that it is possible to take their
addresses.

(Logical change 1.156)
2004-01-21 01:05:07 +00:00
mostang.com!davidm
64854d0d7c Drop argument names from prototypes to reduce namespace pollution.
(Logical change 1.156)
2004-01-21 01:05:07 +00:00
mostang.com!davidm
24ac6e693d (unw_tdep_is_fpreg): Define it as an external function (a macro would
have to evaluate the argument multiple times so it's better
	to implement it out-of-line).

(Logical change 1.156)
2004-01-21 01:05:07 +00:00
mostang.com!davidm
66e78e1ca3 (Logical change 1.156) 2004-01-21 01:05:07 +00:00
mostang.com!davidm
cd7dcba0ed Rename AO_TS_T to AO_TS_t (gets syntax coloring right... ;-).
(Logical change 1.155)
2004-01-20 23:50:00 +00:00
mostang.com!davidm
40fcb9b7e5 (unw_addr_space.cache_generation): Declare as AO_t instead of AO_T
(gets syntax-coloring right ;-).

(Logical change 1.155)
2004-01-20 23:50:00 +00:00
mostang.com!davidm
195eb64285 (struct mempool): Move "reserve" and "num_free" next to
each other to minimize padding.

(Logical change 1.155)
2004-01-20 23:50:00 +00:00
mostang.com!davidm
82cfd4862f (cmpxchg_ptr): Use a union to do the pointer-casting so that
GCC knows it can't use ANSI-C aliasing rules.

(Logical change 1.155)
2004-01-20 23:50:00 +00:00
mostang.com!davidm
c1bbbb2a3a (unwi_dyn_validate_cache): Declare.
(Logical change 1.154)
2004-01-20 23:32:28 +00:00
mostang.com!davidm
2d4098ac19 (unw): Remove debug_level.
(tdep_debug_level): Declare it as a separate variable.  This
	ensures that only one debug-level variable is in use
	at any given time, no matter what combination of
	local-only vs generic and static vs. dynamic libraries
	are in use.
(unw): Document why it's not an UNW_ARCH_OBJ().

(Logical change 1.154)
2004-01-20 23:32:28 +00:00
mostang.com!davidm
47c32cd07f (_Uia64_search_unwind_table): Make it an UNW_OBJ() instead.
(unw_search_ia64_unwind_table): Declare.

(Logical change 1.154)
2004-01-20 23:32:28 +00:00
hp.com!davidm
ea78d27d97 (unwi_dyn_remote_find_proc_info): Drop GENERATION argument.
(Logical change 1.153)
2004-01-20 01:51:17 +00:00
hp.com!davidm
a2301f6f57 (struct unw_addr_space.shared_object_removals) [!UNW_REMOTE_ONLY]: New member.
(Logical change 1.153)
2004-01-20 01:51:17 +00:00
hp.com!davidm
23024e28c0 Add includes of <string.h> and <unistd.h>.
(NORETURN): New macro.
(PROTECTED): Likewise.
(print_error): New inline routine.
(fetch8): Provide UNW_LOCAL_ONLY-version.
(fetch16): Likewise.
(fetch32): Likewise.
(fetchw): Likewise.
(_U_dyn_info_list_addr): Declare.

(Logical change 1.151)
2004-01-03 10:50:24 +00:00
hp.com!davidm
9b52d39425 (tdep_find_proc_info): Declare it as a regular object (not arch-obj).
(tdep_uc_addr): Likewise.
(tdep_put_unwind_info): Define only if not UNW_LOCAL_ONLY.
(unw): Declare as regular object.

(Logical change 1.151)
2004-01-03 10:50:24 +00:00
mostang.com!davidm
b9d2cc7919 Drop HIDDEN from declarations, only the definitions need it.
(Logical change 1.150)
2003-12-21 07:57:42 +00:00
mostang.com!davidm
aa800d423d (unw): Mark it as HIDDEN.
(Logical change 1.148)
2003-12-21 07:21:28 +00:00
mostang.com!davidm
e6aedd3089 (dyn_generation): Drop bogus comment.
(Logical change 1.147)
2003-12-21 05:53:57 +00:00
mostang.com!davidm
d5db6013ff (UNW_PI_FLAG_FIRST_TDEP_BIT): Fix comment.
(Logical change 1.147)
2003-12-21 05:53:57 +00:00
hp.com!davidm
468aaccf17 Switch over to DWARF-based unwinder.
(Logical change 1.146)
2003-12-20 11:50:00 +00:00
hp.com!davidm
45fccdc2f3 (unw_dyn_dwarf_fde_info_t): New type to handle (pre-parsed) DWARF
unwind-info.
(unw_dyn_info_t): Add member "dfi".

(Logical change 1.145)
2003-12-20 11:43:08 +00:00
hp.com!davidm
eb51b4294a (Logical change 1.145) 2003-12-20 11:43:08 +00:00
hp.com!davidm
0bbb2fab68 Initial revision 2003-12-20 11:38:49 +00:00
hp.com!davidm
b6adfb75c4 Declare mempool-routines as HIDDEN.
(Logical change 1.143)
2003-12-20 11:35:09 +00:00
hp.com!davidm
7d3de049e6 (Debug): New macro. This one automates some of usual stuff that
gets printed during debugging and is supposed to produce
	a nicer format.  Eventually, we'll switch everything over
	from debug() to Debug().
(extract_dynamic_proc_info): We need both generic and local-only.
(dyn_remote_find_proc_info): Likewise.
(dyn_remote_put_unwind_info): Likewise.

(Logical change 1.142)
2003-12-20 11:32:43 +00:00
hp.com!davidm
fbe40e537f (unw_word_t): Let the architecture-specific header take care of
defining this type---it's needed very early on.
(unw_proc_info_t): Add architecture-specific "extra" member.  Empty
	for ia64, so no ABI change.
Don't include libunwind-dynamic.h here.

(Logical change 1.140)
2003-12-20 11:20:42 +00:00
hp.com!davidm
77b06d67aa (unw_word_t): Declare it here.
(unw_tdep_proc_info_t): New type.
Include "libunwind-dynamic.h" here.

(Logical change 1.140)
2003-12-20 11:20:42 +00:00
mostang.com!davidm
bcdedf6b28 Switch from __sync_val_compare_and_swap() to
__sync_bool_compare_and_swap() since that's we need nowadays anyhow
and since that's also provided by ecc v7.0.

(Logical change 1.138)
2003-12-05 06:42:28 +00:00
hp.com!davidm
ab0fdbbb4c (Logical change 1.135) 2003-12-04 07:44:21 +00:00
hp.com!davidm
1a7d4ee7ed Initial revision 2003-12-04 07:44:21 +00:00
hp.com!davidm
7549674169 (unw_get_proc_info_by_ip): New routine.
(Logical change 1.133)
2003-12-04 07:34:21 +00:00
hp.com!davidm
1334cae324 (HAVE___THREAD): Force it off for now---the per-thread cache uses
about 128KB of thread-local storage for each and every
	thread, even if a thread never ever needs to unwind its
	stack.  Seems a bit much.
(ALWAYS_INLINE): New macro which can be used to force inlining
	on compilers that support it.

(Logical change 1.132)
2003-12-04 07:30:39 +00:00
hp.com!davidm
497018e941 Include "elf32.h".
(Logical change 1.130)
2003-11-27 06:52:54 +00:00
hp.com!davidm
7305d26f26 (struct cursor): Declare pi_valid and pi_is_dynamic as unsigned to
avoid compiler warnings.

(Logical change 1.130)
2003-11-27 06:52:54 +00:00
hp.com!davidm
04dd29b6eb (UNUSED): New macro.
(UNW_DEBUG): If DEBUG is not defined, set it to 0.
(inline): Take advantage of UNUSED macro.
(HAVE_CMPXCHG): Don't define it if we're on HP-UX with GCC v3.2 to
	work around a compiler-bug.

(Logical change 1.130)
2003-11-27 06:52:54 +00:00
hp.com!davidm
dd8806c82d (unw_dyn_info_format_t): Add UNW_INFO_FORMAT_REMOTE_TABLE.
(unw_dyn_remote_table_info_t): New type.
(unw_dyn_info): Add "rti" member.

(Logical change 1.126)
2003-11-25 22:33:49 +00:00
hp.com!davidm
48723262f7 (_Uia64_find_dyn_list): Pass unw_dyn_info_t pointer instead of its members.
(Logical change 1.126)
2003-11-25 22:33:49 +00:00
hp.com!davidm
e01fb3b27e (cmpxchg_ptr): Correct sense of comparison.
(Logical change 1.125)
2003-11-25 20:13:21 +00:00
hp.com!davidm
d61f300b7b (ia64_script_cache): If HAVE_ATOMIC_OPS_H is true, declare "busy" member
in lieu of "lock" member.

(Logical change 1.124)
2003-11-24 23:53:25 +00:00
hp.com!davidm
c3fa0b6fa8 Regenerate.
(Logical change 1.123)
2003-11-24 21:37:22 +00:00
hp.com!davidm
8e36032bc5 (unw_addr_space): If HAVE_ATOMIC_OPS_H is defined, declare cache_generation
of type AO_T.  This is a temporary work-around until atomic_ops.h
	supports atomic ops on 32-bit variables.

(Logical change 1.123)
2003-11-24 21:37:22 +00:00
hp.com!davidm
90e8393da3 (inline): Add #undef of "inline" before (re-)defining it.
Add support for atomic_ops.h.
	Add fetch_and_add1() and if it is supported, define
	HAVE_FETCH_AND_ADD1.

(Logical change 1.123)
2003-11-24 21:37:22 +00:00
hp.com!davidm
3f35f343c3 (needs_initialization): Declare it as volatile so we get proper memory
ordering when accessing it.  Also, shrink size to 1 byte and move
	it closer to other frequently-used fields.

(Logical change 1.121)
2003-11-24 18:33:44 +00:00
hp.com!davidm
34085cad7b Fix a typo.
(Logical change 1.116)
2003-11-22 06:11:18 +00:00
hp.com!davidm
2c9be974dc Regenerate.
(Logical change 1.115)
2003-11-22 06:08:20 +00:00
hp.com!davidm
3cc1ec6be9 (struct ia64_global_unwind_state): Add "lock" member.
(Logical change 1.111)
2003-11-19 03:11:25 +00:00
hp.com!davidm
039accfd88 (__BYTE_ORDER): Fix HP-UX byte-order to be __BIG_ENDIAN, as it was meant
to be.

(Logical change 1.106)
2003-10-11 01:05:18 +00:00
hp.com!davidm
18626b8def (UNW_IA64_AR_SSD): New alias for ar26.
(Logical change 1.91)
2003-07-08 22:29:34 +00:00
hp.com!davidm
c7db73d180 (ABI_MARKER_OLD_LINUX_SIGTRAMP): Rename from ABI_MARKER_LINUX_SIGTRAMP.
(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)
2003-07-08 22:29:34 +00:00
mostang.com!davidm
d4f81e2b69 Auto merged
2003/06/03 14:35:33-07:00 mostang.com!davidm
(struct ia64_global_unwind-state): Rename member state_record_pool to
	reg_state_pool.

(Logical change 1.90)
2003-06-03 21:36:03 +00:00
hp.com!davidm
e771bcab8f (ABI_MARKER_LINUX_INTERRUPT): New macro.
(struct cursor): Add "last_abi_marker" member.  This is the sticky version of
	"abi_marker".


(Logical change 1.89)
2003-04-25 07:44:23 +00:00
mostang.com!davidm
08230509a3 (ABI_LINUX): New macro.
(ABI_HPUX): Ditto.
(ABI_FREEBSD): Ditto.
(ABI_OPENVMS): Ditto.
(ABI_NSK): Ditto.
(ABI_WINDOWS): Ditto.
(unw_addr_space): Add member "abi".

(Logical change 1.87)
2003-04-24 20:45:07 +00:00
mostang.com!davidm
78a7c5a8c1 (ia64_script_insn_opcode): Rename IA64_INSN_ADD to IA64_INSN_INC_PSP,
and IA64_INSN_LOAD to IA64_INSN_LOAD_PSP.  Add IA64_INSN_SET_REG.
(struct ia64_script_insn): Add "abi_marker" member.

(Logical change 1.84)
2003-04-23 05:56:59 +00:00
mostang.com!davidm
ed67c3edb7 (ia64_pregnum): Rename IA64_REG_RP to IA64_REG_IP.
(ia64_loc_t): New type.  For UNW_LOCAL_ONLY, it's a single word, as before.
	For the generic case, it's a 2-word structure.  This provides enough
	space to encode all necessary info both for 32-bit targets (which require
	only 4-byte aligned addresses) and for targets which are limited to
	accessing ucontext_t values via uc_access(3).
(ABI_MARKER_LINUX_SIGTRAMP): New macro.
(ABI_MARKER_HP_UX_SIGTRAMP): New macro.
(struct cursor): Consolidate bsp_loc, bspstore_loc, pfs_loc, rnat_loc, ip_loc,
	pri_unat_loc, unat_loc, pr_loc, lc_loc, fpsr_loc, r4-r7_loc,
	b1-b5_loc, f2-f7_loc, and fr_loc[] into loc[] array.  Note that
	there is now a separate PSP-loc (loc[IA64_REG_PSP]) in addition
	to the cached psp value.
	Rename sigcontext_loc to sigcontext_addr.
	Remove is_signal_frame memeber and add abi_marker member instead.
	Change type of rbs_area[].rnat_loc to ia64_loc_t.
(struct ia64_global_unwind_state): Remove preg_index[] array.

(Logical change 1.84)
2003-04-23 05:56:59 +00:00
hp.com!davidm
79f981aaf7 (_U_TDEP_QP_TRUE): New macro.
(Logical change 1.81)
2003-04-21 23:14:14 +00:00
mostang.com!davidm
6ab15cdec4 Regenerate.
(Logical change 1.75)
2003-04-03 07:59:15 +00:00
mostang.com!davidm
89c081cd84 On HP-UX, unset UNW_LOCAL_ONLY and defined UNW_GENERIC_ONLY, since it makes no
sense to do UNW_LOCAL_ONLY on this platform.

(Logical change 1.75)
2003-04-03 07:59:15 +00:00
mostang.com!davidm
d53636d414 Move endian-stuff to internal.h.
(Logical change 1.75)
2003-04-03 07:59:15 +00:00
mostang.com!davidm
a04f38ef19 Move endian-related defs from tdep-ia64.h to here.
(Logical change 1.75)
2003-04-03 07:59:15 +00:00
mostang.com!davidm
46149fdccd Regenerate.
(Logical change 1.72)
2003-03-31 18:16:54 +00:00
hp.com!davidm
f9cc1e4b74 (tdep_get_elf_image): Declare.
(Logical change 1.71)
2003-03-29 07:32:50 +00:00
hp.com!davidm
1d443a63ad (pthread_mutex_init): Declare as a "weak" symbol.
(Logical change 1.71)
2003-03-29 07:32:50 +00:00
mostang.com!davidm
337c0ad989 Add C++ wrapper.
(Logical change 1.70)
2003-03-28 07:43:22 +00:00
mostang.com!davidm
271d7065c2 (cmpchg_ptr): Cast first argument to "volatile long *", since that is what the
Intel compiler wants.

(Logical change 1.70)
2003-03-28 07:43:22 +00:00
mostang.com!davidm
28fe6a6e8b Work around ECC v7.0 bug by manually definining __sync_val_compare_and_swap()
if it isn't defined yet.

(Logical change 1.68)
2003-03-27 04:29:07 +00:00
mostang.com!davidm
c7aaa68495 Regenerate.
(Logical change 1.63)
2003-03-19 19:25:18 +00:00
mostang.com!davidm
15693e234b Include config.h, if we have it (HAVE_CONFIG_H).
Include <sys/types.h>.  HP-UX can't include pthread.h otherwise.
Replace test for UNW_TARGET_IA64 with test for HAVE_IA64INTRIN_H.

(Logical change 1.63)
2003-03-19 19:25:18 +00:00
mostang.com!davidm
47c70d7858 Include <inttypes.h> instead of <stdint.h>. HP-UX doesn't have the latter.
(unw_tdep_save_loc_t): Define a dummy member, so we're ANSI-C compliant (which doesn't
	allow empty structs).

(Logical change 1.63)
2003-03-19 19:25:18 +00:00
mostang.com!davidm
58e0e100d1 Include <inttypes.h> instead of <stdint.h>. HP-UX doesn't have the latter.
(Logical change 1.63)
2003-03-19 19:25:18 +00:00
mostang.com!davidm
53bd7613b7 If we don't have <endian.h>, define __LITTLE_ENDIAN and __BIG_ENDIAN here and
guess the right value for __BYTE_ORDER.

(Logical change 1.63)
2003-03-19 19:25:18 +00:00
mostang.com!davidm
d5ad49b013 (unw_regname): Correct type of "regnum" from "int" to "unw_regnum_t".
(Logical change 1.62)
2003-03-13 02:15:01 +00:00
mostang.com!davidm
51095505d9 (struct addr_space): Add "dyn_info_list_addr" member.
(Logical change 1.61)
2003-03-11 01:11:18 +00:00
mostang.com!davidm
9003fd20fe Include <signal.h>. Remove include of <tdep.h>.
(mutex_init): New macro.
(HAVE_CMPXCHG): Ditto.
(cmpxchg_ptr): Ditto.
(unwi_full_sigmask): New variable.

(Logical change 1.59)
2003-03-06 06:14:36 +00:00
mostang.com!davidm
5daa8619b7 Include "internal.h".
Define sos_alloc(), mempool_init(), mempool_alloc(), and mempool_free() with
	UNWI_ARCH_OBJ() helper macro.
(sos_free): Delete.
(struct mempool): Declare "lock" member.

(Logical change 1.59)
2003-03-06 06:14:36 +00:00
mostang.com!davidm
57bdcfeb0d Delete spurious copyright message.
(struct ia64_script_cache): Declare "lock" member.
(ia64_get_cached_proc_info): Rename from ia64_script_lookup().

(Logical change 1.59)
2003-03-06 06:14:36 +00:00
mostang.com!davidm
45ce48f2e4 (unw_tdep_fpreg_t): Declare as "long double".
(UNW_TDEP_EH): Declare.
(UNW_TDEP_NUM_EH_REGS): New macro.

(Logical change 1.59)
2003-03-06 06:14:36 +00:00
mostang.com!davidm
a6e367131b (UNW_TDEP_EH): Rename from UNW_TDEP_EH_ARG0.
(UNW_TDEP_EH_ARG1): Delete.
(UNW_TDEP_EH_ARG2): Ditto.
(UNW_TDEP_EH_ARG3): Ditto.
(UNT_TDEP_NUM_EH_REGS): New macro.

(Logical change 1.59)
2003-03-06 06:14:36 +00:00
mostang.com!davidm
c670abba8f (UNW_REG_EH): Rename from UNW_REG_EH_ARG0.
(UNW_REG_EH_ARG1): Delete.
(UNW_REG_EH_ARG2): Ditto.
(UNW_REG_EH_ARG3): Ditto.
(UNW_NUM_EH_REGS): New macro.
(_UPT_resume): Declare.

(Logical change 1.59)
2003-03-06 06:14:36 +00:00
mostang.com!davidm
7343841308 (unw_accessors_t): Add optional get_proc_name() callback.
(Logical change 1.56)
2003-02-27 09:58:57 +00:00
mostang.com!davidm
9430d35c9b (_U_dyn_region_info_size): Define it in a more straight-forward manner.
(_U_dyn_op_label_state): Drop "qp" and "when" arguments.
(_U_dyn_op_copy_state): Ditto.
(_U_dyn_op_stop): Define qp to _U_QP_TRUE and when to -1.
(_U_QP_TRUE): New macro.

(Logical change 1.56)
2003-02-27 09:58:57 +00:00
mostang.com!davidm
9df94711bf (_U_TDEP_QP_TRUE): New macro.
(UNW_IA64_RP): New register-name.

(Logical change 1.56)
2003-02-27 09:58:57 +00:00
mostang.com!davidm
6863c4aaf5 (IA64_REG_PSP): Move it ino front of IA64_REG_BSP.
(tdep_get_proc_name): Delete.

(Logical change 1.56)
2003-02-27 09:58:57 +00:00
hp.com!davidm
c503981c39 (struct ia64_global_unwind_state): Add member "r0".
(Logical change 1.55)
2003-02-26 08:33:57 +00:00
hp.com!davidm
43652d9dea (ia64): Undef this macro if it's defined (bug in Intel's ECC v7.0?).
(_Uia64_find_dyn_list): Add "gp" argument.

(Logical change 1.55)
2003-02-26 08:33:57 +00:00
hp.com!davidm
cf3b756567 (_U_dyn_op_pop_frames): Fix typo in UNW_DYN_POP_FRAMES.
(Logical change 1.55)
2003-02-26 08:33:57 +00:00
mostang.com!davidm
e20ecc63b8 (unwi_get_proc_name): Don't make it an arch-object. Drop "is_local" argument.
(Logical change 1.54)
2003-02-22 08:19:43 +00:00
mostang.com!davidm
e61440508f (unw_dyn_region_info_t): Make insn_count signed.
(Logical change 1.54)
2003-02-22 08:19:43 +00:00
hp.com!davidm
ea34cc2bee (uc_off): Remove (it wasn't used anymore).
(Logical change 1.53)
2003-02-22 03:08:22 +00:00
mostang.com!davidm
c341225693 (struct cursor): Remove rbs_right_edge.
(Logical change 1.52)
2003-02-21 07:36:26 +00:00
hp.com!davidm
a45c88823a (likely): Make them work even for non-GCC (or old GCC) compilers.
(unlikely): Ditto.
(debug): Print to stderr.
(dprintf): Ditto.

(Logical change 1.48)
2003-02-15 03:10:30 +00:00
hp.com!davidm
74f568c602 Regenerate.
(Logical change 1.46)
2003-02-14 03:09:27 +00:00
mostang.com!davidm
108627cab7 Include "elf64.h".
(struct cursor): Add member "eh_valid_mask" to track which eh_args[] are valid.
	Fix comment for rbs_curr.
(tdep_get_elf_image): New routine.

(Logical change 1.45)
2003-02-08 10:10:59 +00:00
mostang.com!davidm
8c2740cfe3 (unw_tdep_fpreg_t): New type.
(UNW_TDEP_EH_ARG0): Make it an alias for r15.
(UNW_TDEP_EH_ARG1): Make it an alias for r16.
(UNW_TDEP_EH_ARG2): Make it an alias for r17.
(UNW_TDEP_EH_ARG3): Make it an alias for r18.

(Logical change 1.45)
2003-02-08 10:10:59 +00:00
mostang.com!davidm
981c8cc37b (UNW_REG_EH_ARG0): New well-known register name.
(UNW_REG_EH_ARG1): Ditto.
(UNW_REG_EH_ARG2): Ditto.
(UNW_REG_EH_ARG3): Ditto.
(unw_fpreg_t): Make it a target-dependent type.
(unw_get_proc_name): Also return the offset relative to the function name returned.

(Logical change 1.45)
2003-02-08 10:10:59 +00:00
mostang.com!davidm
f5265f56ba (HIDDEN): Make it empty unless we have at least GCC v3.3.
(unwi_get_proc_name): Also return the offset relative to the returned function-name.
(struct elf_image): New structure.

(Logical change 1.45)
2003-02-08 10:10:59 +00:00
hp.com!davidm
644c919345 Rename UNW_IA64_AR_25 to UNW_IA64_AR_CSD, as per SDM v2.1.
(_Uia64_search_unwind_table): Declare.
(_Uia64_find_dyn_list): Declare as "extern".
(_Uia64_get_kernel_table): Declare.

(Logical change 1.43)
2003-01-28 03:40:06 +00:00
hp.com!davidm
a69cf3deb9 Regenerate.
(Logical change 1.43)
2003-01-28 03:40:06 +00:00
hp.com!davidm
68bdac3681 Add declarations for the _UPT_* helper routines (libunwind via ptrace helpers).
(Logical change 1.43)
2003-01-28 03:40:06 +00:00
hp.com!davidm
bb25a5ed3b (tdep_search_unwind_table): Explicitly call _Uia64_search_unwind_table().
Remove declaration of same name; this is now done in libunwind-ia64.h.

(Logical change 1.43)
2003-01-28 03:40:06 +00:00
mostang.com!davidm
717cb71374 (struct cursor): Add "cfm" cache.
(Logical change 1.42)
2003-01-23 18:47:51 +00:00