X-Git-Url: https://repo.jachan.dev/binutils.git/blobdiff_plain/534444b1ee161f342d303fd6549310963ce233c9..HEAD:/libctf/ctf-impl.h diff --git a/libctf/ctf-impl.h b/libctf/ctf-impl.h index c1ce50bc3b..465f1c6c58 100644 --- a/libctf/ctf-impl.h +++ b/libctf/ctf-impl.h @@ -1,5 +1,5 @@ /* Implementation header. - Copyright (C) 2019-2021 Free Software Foundation, Inc. + Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is part of libctf. @@ -29,8 +29,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -178,26 +180,13 @@ typedef struct ctf_decl int cd_enomem; /* Nonzero if OOM during printing. */ } ctf_decl_t; -typedef struct ctf_dmdef -{ - ctf_list_t dmd_list; /* List forward/back pointers. */ - char *dmd_name; /* Name of this member. */ - ctf_id_t dmd_type; /* Type of this member (for sou). */ - unsigned long dmd_offset; /* Offset of this member in bits (for sou). */ - int dmd_value; /* Value of this member (for enum). */ -} ctf_dmdef_t; - typedef struct ctf_dtdef { ctf_list_t dtd_list; /* List forward/back pointers. */ ctf_id_t dtd_type; /* Type identifier for this definition. */ ctf_type_t dtd_data; /* Type node, including name. */ + size_t dtd_vlen_alloc; /* Total vlen space allocated. */ unsigned char *dtd_vlen; /* Variable-length data for this type. */ - union - { - ctf_list_t dtu_members; /* struct, union, or enum */ - uint32_t *dtu_argv; /* function */ - } dtd_u; } ctf_dtdef_t; typedef struct ctf_dvdef @@ -399,7 +388,8 @@ struct ctf_dict ctf_names_t ctf_names; /* Hash table of remaining type names. */ ctf_lookup_t ctf_lookups[5]; /* Pointers to nametabs for name lookup. */ ctf_strs_t ctf_str[2]; /* Array of string table base and bounds. */ - ctf_dynhash_t *ctf_str_atoms; /* Hash table of ctf_str_atoms_t. */ + ctf_dynhash_t *ctf_str_atoms; /* Hash table of ctf_str_atoms_t. */ + ctf_dynset_t *ctf_str_pending_ref; /* Locations awaiting ref addition. */ uint64_t ctf_str_num_refs; /* Number of refs to cts_str_atoms. */ uint32_t ctf_str_prov_offset; /* Latest provisional offset assigned so far. */ unsigned char *ctf_base; /* CTF file pointer. */ @@ -459,6 +449,10 @@ struct ctf_dict ctf_dynhash_t *ctf_link_inputs; /* Inputs to this link. */ ctf_dynhash_t *ctf_link_outputs; /* Additional outputs from this link. */ + /* If a link input CU, points at the corresponding per-CU output (if any); + if an output, points at the input (if any). */ + ctf_dict_t *ctf_link_in_out; + /* Map input types to output types for ctf_add_type. Key is a ctf_link_type_key_t: value is a type ID. */ ctf_dynhash_t *ctf_link_type_mapping; @@ -541,6 +535,7 @@ struct ctf_next ctf_id_t ctn_type; ssize_t ctn_size; ssize_t ctn_increment; + const ctf_type_t *ctn_tp; uint32_t ctn_n; /* Some iterators contain other iterators, in addition to their other @@ -553,9 +548,7 @@ struct ctf_next members, and the structure, variable and enum members, etc. */ union { - const ctf_member_t *ctn_mp; - const ctf_lmember_t *ctn_lmp; - const ctf_dmdef_t *ctn_dmd; + unsigned char *ctn_vlen; const ctf_enum_t *ctn_en; const ctf_dvdef_t *ctn_dvd; ctf_next_hkv_t *ctn_sorted_hkv; @@ -628,8 +621,6 @@ extern int ctf_hash_eq_string (const void *, const void *); extern int ctf_hash_eq_type_key (const void *, const void *); extern int ctf_hash_eq_type_id_key (const void *, const void *); -extern int ctf_dynset_eq_string (const void *, const void *); - typedef void (*ctf_hash_free_fun) (void *); typedef void (*ctf_hash_iter_f) (void *key, void *value, void *arg); @@ -674,6 +665,7 @@ extern int ctf_dynset_insert (ctf_dynset_t *, void *); extern void ctf_dynset_remove (ctf_dynset_t *, const void *); extern void ctf_dynset_destroy (ctf_dynset_t *); extern void *ctf_dynset_lookup (ctf_dynset_t *, const void *); +extern size_t ctf_dynset_elements (ctf_dynset_t *); extern int ctf_dynset_exists (ctf_dynset_t *, const void *key, const void **orig_key); extern int ctf_dynset_next (ctf_dynset_t *, ctf_next_t **, void **key); @@ -732,6 +724,8 @@ extern int ctf_str_create_atoms (ctf_dict_t *); extern void ctf_str_free_atoms (ctf_dict_t *); extern uint32_t ctf_str_add (ctf_dict_t *, const char *); extern uint32_t ctf_str_add_ref (ctf_dict_t *, const char *, uint32_t *ref); +extern uint32_t ctf_str_add_pending (ctf_dict_t *, const char *, uint32_t *); +extern int ctf_str_move_pending (ctf_dict_t *, uint32_t *, ptrdiff_t); extern int ctf_str_add_external (ctf_dict_t *, const char *, uint32_t offset); extern void ctf_str_remove_ref (ctf_dict_t *, const char *, uint32_t *ref); extern void ctf_str_rollback (ctf_dict_t *, ctf_snapshot_id_t); @@ -748,6 +742,8 @@ extern void ctf_arc_close_internal (struct ctf_archive *); extern const ctf_preamble_t *ctf_arc_bufpreamble (const ctf_sect_t *); extern void *ctf_set_open_errno (int *, int); extern unsigned long ctf_set_errno (ctf_dict_t *, int); +extern void ctf_flip_header (ctf_header_t *); +extern int ctf_flip (ctf_dict_t *, ctf_header_t *, unsigned char *, int); extern ctf_dict_t *ctf_simple_open_internal (const char *, size_t, const char *, size_t, size_t,