+/* Atoms associate strings with a list of the CTF items that reference that
+ string, so that ctf_update() can instantiate all the strings using the
+ ctf_str_atoms and then reassociate them with the real string later.
+
+ Strings can be interned into ctf_str_atom without having refs associated
+ with them, for values that are returned to callers, etc. Items are only
+ removed from this table on ctf_close(), but on every ctf_update(), all the
+ csa_refs in all entries are purged. */
+
+typedef struct ctf_str_atom
+{
+ const char *csa_str; /* Backpointer to string (hash key). */
+ ctf_list_t csa_refs; /* This string's refs. */
+ uint32_t csa_offset; /* Strtab offset, if any. */
+ uint32_t csa_external_offset; /* External strtab offset, if any. */
+ unsigned long csa_snapshot_id; /* Snapshot ID at time of creation. */
+} ctf_str_atom_t;
+
+/* The refs of a single string in the atoms table. */
+
+typedef struct ctf_str_atom_ref
+{
+ ctf_list_t caf_list; /* List forward/back pointers. */
+ uint32_t *caf_ref; /* A single ref to this string. */
+} ctf_str_atom_ref_t;
+
+/* The structure used as the key in a ctf_link_type_mapping, which lets the
+ linker machinery determine which type IDs on the input side of a link map to
+ which types on the output side. (The value is a ctf_id_t: another
+ index, not a type.) */
+
+typedef struct ctf_link_type_mapping_key
+{
+ ctf_file_t *cltm_fp;
+ ctf_id_t cltm_idx;
+} ctf_link_type_mapping_key_t;
+