[PATCH 10/16] libctf: don't lose track of all valid types upon serialization

Nick Alcock nick.alcock@oracle.com
Sat Mar 6 00:40:17 GMT 2021

One pattern which is rarely done in libctf but which is meant to work is

ctf_add_*(); // add stuff
ctf_type_*() // look stuff up
ctf_add_*(); // should still work
ctf_type_*() // so should this
ctf_write_*(); // and this

i.e., writing out a dict should not break it and you should be able to
do everything you could do with it before, including writing it out

Unfortunately this has been broken for a while because the field which
indicates the maximum valid type ID was not preserved across
serialization: so type additions after serialization would overwrite
types (obviously disastrous) and type lookups would just fail.

Fix trivial.

2021-03-02  Nick Alcock  <nick.alcock@oracle.com>

	* ctf-serialize.c (ctf_serialize): Preserve ctf_typemax across
 libctf/ctf-serialize.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libctf/ctf-serialize.c b/libctf/ctf-serialize.c
index 460ae1a510e..17f11f67ffb 100644
--- a/libctf/ctf-serialize.c
+++ b/libctf/ctf-serialize.c
@@ -1113,6 +1113,7 @@ ctf_serialize (ctf_dict_t *fp)
   nfp->ctf_dynsyms = fp->ctf_dynsyms;
   nfp->ctf_ptrtab = fp->ctf_ptrtab;
   nfp->ctf_pptrtab = fp->ctf_pptrtab;
+  nfp->ctf_typemax = fp->ctf_typemax;
   nfp->ctf_dynsymidx = fp->ctf_dynsymidx;
   nfp->ctf_dynsymmax = fp->ctf_dynsymmax;
   nfp->ctf_ptrtab_len = fp->ctf_ptrtab_len;

More information about the Binutils mailing list