diff options
author | Nick Alcock <nick.alcock@oracle.com> | 2019-07-13 21:31:26 +0100 |
---|---|---|
committer | Nick Alcock <nick.alcock@oracle.com> | 2019-09-23 14:12:54 +0100 |
commit | c150ea49ac8ea95059e5ae1c516b0cef39472366 (patch) | |
tree | fdae6300567339d50e9505ff057958e2c0bf4f29 /libctf/ctf-open.c | |
parent | 0aae381999d90b36375e9bf621a633b86a459161 (diff) | |
download | binutils-c150ea49ac8ea95059e5ae1c516b0cef39472366.zip binutils-c150ea49ac8ea95059e5ae1c516b0cef39472366.tar.gz binutils-c150ea49ac8ea95059e5ae1c516b0cef39472366.tar.bz2 |
libctf: map from old to corresponding newly-added types in ctf_add_type
This lets you call ctf_type_mapping (dest_fp, src_fp, src_type_id)
and get told what type ID the corresponding type has in the target
ctf_file_t. This works even if it was added by a recursive call, and
because it is stored in the target ctf_file_t it works even if we
had to add one type to multiple ctf_file_t's as part of conflicting
type handling.
We empty out this mapping after every archive is linked: because it maps
input to output fps, and we only visit each input fp once, its contents
are rendered entirely useless every time the source fp changes.
v3: add several missing mapping additions. Add ctf_dynhash_empty, and
empty after every input archive.
libctf/
* ctf-impl.h (ctf_file_t): New field ctf_link_type_mapping.
(struct ctf_link_type_mapping_key): New.
(ctf_hash_type_mapping_key): Likewise.
(ctf_hash_eq_type_mapping_key): Likewise.
(ctf_add_type_mapping): Likewise.
(ctf_type_mapping): Likewise.
(ctf_dynhash_empty): Likewise.
* ctf-open.c (ctf_file_close): Update accordingly.
* ctf-create.c (ctf_update): Likewise.
(ctf_add_type): Populate the mapping.
* ctf-hash.c (ctf_hash_type_mapping_key): Hash a type mapping key.
(ctf_hash_eq_type_mapping_key): Check the key for equality.
(ctf_dynhash_insert): Fix comment typo.
(ctf_dynhash_empty): New.
* ctf-link.c (ctf_add_type_mapping): New.
(ctf_type_mapping): Likewise.
(empty_link_type_mapping): New.
(ctf_link_one_input_archive): Call it.
Diffstat (limited to 'libctf/ctf-open.c')
-rw-r--r-- | libctf/ctf-open.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/libctf/ctf-open.c b/libctf/ctf-open.c index cc07543..8d04940 100644 --- a/libctf/ctf-open.c +++ b/libctf/ctf-open.c @@ -1628,6 +1628,7 @@ ctf_file_close (ctf_file_t *fp) ctf_dynhash_destroy (fp->ctf_syn_ext_strtab); ctf_dynhash_destroy (fp->ctf_link_inputs); ctf_dynhash_destroy (fp->ctf_link_outputs); + ctf_dynhash_destroy (fp->ctf_link_type_mapping); ctf_free (fp->ctf_sxlate); ctf_free (fp->ctf_txlate); |