libctf: debug dumping
[external/binutils.git] / libctf / ctf-open.c
1 /* Opening CTF files.
2    Copyright (C) 2019 Free Software Foundation, Inc.
3
4    This file is part of libctf.
5
6    libctf is free software; you can redistribute it and/or modify it under
7    the terms of the GNU General Public License as published by the Free
8    Software Foundation; either version 3, or (at your option) any later
9    version.
10
11    This program is distributed in the hope that it will be useful, but
12    WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14    See the GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; see the file COPYING.  If not see
18    <http://www.gnu.org/licenses/>.  */
19
20 #include <ctf-impl.h>
21 #include <stddef.h>
22 #include <string.h>
23 #include <sys/types.h>
24 #include <elf.h>
25 #include <assert.h>
26 #include "swap.h"
27 #include <bfd.h>
28 #include <zlib.h>
29
30 #include "elf-bfd.h"
31
32 static const ctf_dmodel_t _libctf_models[] = {
33   {"ILP32", CTF_MODEL_ILP32, 4, 1, 2, 4, 4},
34   {"LP64", CTF_MODEL_LP64, 8, 1, 2, 4, 8},
35   {NULL, 0, 0, 0, 0, 0, 0}
36 };
37
38 const char _CTF_SECTION[] = ".ctf";
39 const char _CTF_NULLSTR[] = "";
40
41 /* Version-sensitive accessors.  */
42
43 static uint32_t
44 get_kind_v1 (uint32_t info)
45 {
46   return (CTF_V1_INFO_KIND (info));
47 }
48
49 static uint32_t
50 get_root_v1 (uint32_t info)
51 {
52   return (CTF_V1_INFO_ISROOT (info));
53 }
54
55 static uint32_t
56 get_vlen_v1 (uint32_t info)
57 {
58   return (CTF_V1_INFO_VLEN (info));
59 }
60
61 static uint32_t
62 get_kind_v2 (uint32_t info)
63 {
64   return (CTF_V2_INFO_KIND (info));
65 }
66
67 static uint32_t
68 get_root_v2 (uint32_t info)
69 {
70   return (CTF_V2_INFO_ISROOT (info));
71 }
72
73 static uint32_t
74 get_vlen_v2 (uint32_t info)
75 {
76   return (CTF_V2_INFO_VLEN (info));
77 }
78
79 static inline ssize_t
80 get_ctt_size_common (const ctf_file_t *fp _libctf_unused_,
81                      const ctf_type_t *tp _libctf_unused_,
82                      ssize_t *sizep, ssize_t *incrementp, size_t lsize,
83                      size_t csize, size_t ctf_type_size,
84                      size_t ctf_stype_size, size_t ctf_lsize_sent)
85 {
86   ssize_t size, increment;
87
88   if (csize == ctf_lsize_sent)
89     {
90       size = lsize;
91       increment = ctf_type_size;
92     }
93   else
94     {
95       size = csize;
96       increment = ctf_stype_size;
97     }
98
99   if (sizep)
100     *sizep = size;
101   if (incrementp)
102     *incrementp = increment;
103
104   return size;
105 }
106
107 static ssize_t
108 get_ctt_size_v1 (const ctf_file_t *fp, const ctf_type_t *tp,
109                  ssize_t *sizep, ssize_t *incrementp)
110 {
111   ctf_type_v1_t *t1p = (ctf_type_v1_t *) tp;
112
113   return (get_ctt_size_common (fp, tp, sizep, incrementp,
114                                CTF_TYPE_LSIZE (t1p), t1p->ctt_size,
115                                sizeof (ctf_type_v1_t), sizeof (ctf_stype_v1_t),
116                                CTF_LSIZE_SENT_V1));
117 }
118
119 /* Return the size that a v1 will be once it is converted to v2.  */
120
121 static ssize_t
122 get_ctt_size_v2_unconverted (const ctf_file_t *fp, const ctf_type_t *tp,
123                              ssize_t *sizep, ssize_t *incrementp)
124 {
125   ctf_type_v1_t *t1p = (ctf_type_v1_t *) tp;
126
127   return (get_ctt_size_common (fp, tp, sizep, incrementp,
128                                CTF_TYPE_LSIZE (t1p), t1p->ctt_size,
129                                sizeof (ctf_type_t), sizeof (ctf_stype_t),
130                                CTF_LSIZE_SENT));
131 }
132
133 static ssize_t
134 get_ctt_size_v2 (const ctf_file_t *fp, const ctf_type_t *tp,
135                  ssize_t *sizep, ssize_t *incrementp)
136 {
137   return (get_ctt_size_common (fp, tp, sizep, incrementp,
138                                CTF_TYPE_LSIZE (tp), tp->ctt_size,
139                                sizeof (ctf_type_t), sizeof (ctf_stype_t),
140                                CTF_LSIZE_SENT));
141 }
142
143 static ssize_t
144 get_vbytes_common (unsigned short kind, ssize_t size _libctf_unused_,
145                    size_t vlen)
146 {
147   switch (kind)
148     {
149     case CTF_K_INTEGER:
150     case CTF_K_FLOAT:
151       return (sizeof (uint32_t));
152     case CTF_K_SLICE:
153       return (offsetof (ctf_slice_t, cts_bits) +
154               sizeof (((ctf_slice_t *)0)->cts_bits));
155     case CTF_K_ENUM:
156       return (sizeof (ctf_enum_t) * vlen);
157     case CTF_K_FORWARD:
158     case CTF_K_UNKNOWN:
159     case CTF_K_POINTER:
160     case CTF_K_TYPEDEF:
161     case CTF_K_VOLATILE:
162     case CTF_K_CONST:
163     case CTF_K_RESTRICT:
164       return 0;
165     default:
166       ctf_dprintf ("detected invalid CTF kind -- %x\n", kind);
167       return ECTF_CORRUPT;
168     }
169 }
170
171 static ssize_t
172 get_vbytes_v1 (unsigned short kind, ssize_t size, size_t vlen)
173 {
174   switch (kind)
175     {
176     case CTF_K_ARRAY:
177       return (sizeof (ctf_array_v1_t));
178     case CTF_K_FUNCTION:
179       return (sizeof (unsigned short) * (vlen + (vlen & 1)));
180     case CTF_K_STRUCT:
181     case CTF_K_UNION:
182       if (size < CTF_LSTRUCT_THRESH_V1)
183         return (sizeof (ctf_member_v1_t) * vlen);
184       else
185         return (sizeof (ctf_lmember_v1_t) * vlen);
186     }
187
188   return (get_vbytes_common (kind, size, vlen));
189 }
190
191 static ssize_t
192 get_vbytes_v2 (unsigned short kind, ssize_t size, size_t vlen)
193 {
194   switch (kind)
195     {
196     case CTF_K_ARRAY:
197       return (sizeof (ctf_array_t));
198     case CTF_K_FUNCTION:
199       return (sizeof (uint32_t) * (vlen + (vlen & 1)));
200     case CTF_K_STRUCT:
201     case CTF_K_UNION:
202       if (size < CTF_LSTRUCT_THRESH)
203         return (sizeof (ctf_member_t) * vlen);
204       else
205         return (sizeof (ctf_lmember_t) * vlen);
206     }
207
208   return (get_vbytes_common (kind, size, vlen));
209 }
210
211 static const ctf_fileops_t ctf_fileops[] = {
212   {NULL, NULL, NULL, NULL, NULL},
213   /* CTF_VERSION_1 */
214   {get_kind_v1, get_root_v1, get_vlen_v1, get_ctt_size_v1, get_vbytes_v1},
215   /* CTF_VERSION_1_UPGRADED_3 */
216   {get_kind_v2, get_root_v2, get_vlen_v2, get_ctt_size_v2, get_vbytes_v2},
217   /* CTF_VERSION_2 */
218   {get_kind_v2, get_root_v2, get_vlen_v2, get_ctt_size_v2, get_vbytes_v2},
219   /* CTF_VERSION_3, identical to 2: only new type kinds */
220   {get_kind_v2, get_root_v2, get_vlen_v2, get_ctt_size_v2, get_vbytes_v2},
221 };
222
223 /* Initialize the symtab translation table by filling each entry with the
224   offset of the CTF type or function data corresponding to each STT_FUNC or
225   STT_OBJECT entry in the symbol table.  */
226
227 static int
228 init_symtab (ctf_file_t *fp, const ctf_header_t *hp,
229              const ctf_sect_t *sp, const ctf_sect_t *strp)
230 {
231   const unsigned char *symp = sp->cts_data;
232   uint32_t *xp = fp->ctf_sxlate;
233   uint32_t *xend = xp + fp->ctf_nsyms;
234
235   uint32_t objtoff = hp->cth_objtoff;
236   uint32_t funcoff = hp->cth_funcoff;
237
238   uint32_t info, vlen;
239   Elf64_Sym sym, *gsp;
240   const char *name;
241
242   /* The CTF data object and function type sections are ordered to match
243      the relative order of the respective symbol types in the symtab.
244      If no type information is available for a symbol table entry, a
245      pad is inserted in the CTF section.  As a further optimization,
246      anonymous or undefined symbols are omitted from the CTF data.  */
247
248   for (; xp < xend; xp++, symp += sp->cts_entsize)
249     {
250       if (sp->cts_entsize == sizeof (Elf32_Sym))
251         gsp = ctf_sym_to_elf64 ((Elf32_Sym *) (uintptr_t) symp, &sym);
252       else
253         gsp = (Elf64_Sym *) (uintptr_t) symp;
254
255       if (gsp->st_name < strp->cts_size)
256         name = (const char *) strp->cts_data + gsp->st_name;
257       else
258         name = _CTF_NULLSTR;
259
260       if (gsp->st_name == 0 || gsp->st_shndx == SHN_UNDEF
261           || strcmp (name, "_START_") == 0 || strcmp (name, "_END_") == 0)
262         {
263           *xp = -1u;
264           continue;
265         }
266
267       switch (ELF64_ST_TYPE (gsp->st_info))
268         {
269         case STT_OBJECT:
270           if (objtoff >= hp->cth_funcoff
271               || (gsp->st_shndx == SHN_EXTABS && gsp->st_value == 0))
272             {
273               *xp = -1u;
274               break;
275             }
276
277           *xp = objtoff;
278           objtoff += sizeof (uint32_t);
279           break;
280
281         case STT_FUNC:
282           if (funcoff >= hp->cth_typeoff)
283             {
284               *xp = -1u;
285               break;
286             }
287
288           *xp = funcoff;
289
290           info = *(uint32_t *) ((uintptr_t) fp->ctf_buf + funcoff);
291           vlen = LCTF_INFO_VLEN (fp, info);
292
293           /* If we encounter a zero pad at the end, just skip it.  Otherwise
294              skip over the function and its return type (+2) and the argument
295              list (vlen).
296            */
297           if (LCTF_INFO_KIND (fp, info) == CTF_K_UNKNOWN && vlen == 0)
298             funcoff += sizeof (uint32_t);       /* Skip pad.  */
299           else
300             funcoff += sizeof (uint32_t) * (vlen + 2);
301           break;
302
303         default:
304           *xp = -1u;
305           break;
306         }
307     }
308
309   ctf_dprintf ("loaded %lu symtab entries\n", fp->ctf_nsyms);
310   return 0;
311 }
312
313 /* Set the CTF base pointer and derive the buf pointer from it, initializing
314    everything in the ctf_file that depends on the base or buf pointers.  */
315
316 static void
317 ctf_set_base (ctf_file_t *fp, const ctf_header_t *hp, void *base)
318 {
319   fp->ctf_base = base;
320   fp->ctf_buf = fp->ctf_base + sizeof (ctf_header_t);
321   fp->ctf_vars = (ctf_varent_t *) ((const char *) fp->ctf_buf +
322                                    hp->cth_varoff);
323   fp->ctf_nvars = (hp->cth_typeoff - hp->cth_varoff) / sizeof (ctf_varent_t);
324
325   fp->ctf_str[CTF_STRTAB_0].cts_strs = (const char *) fp->ctf_buf
326     + hp->cth_stroff;
327   fp->ctf_str[CTF_STRTAB_0].cts_len = hp->cth_strlen;
328
329   /* If we have a parent container name and label, store the relocated
330      string pointers in the CTF container for easy access later. */
331
332   /* Note: before conversion, these will be set to values that will be
333      immediately invalidated by the conversion process, but the conversion
334      process will call ctf_set_base() again to fix things up.  */
335
336   if (hp->cth_parlabel != 0)
337     fp->ctf_parlabel = ctf_strptr (fp, hp->cth_parlabel);
338   if (hp->cth_parname != 0)
339     fp->ctf_parname = ctf_strptr (fp, hp->cth_parname);
340
341   ctf_dprintf ("ctf_set_base: parent name %s (label %s)\n",
342                fp->ctf_parname ? fp->ctf_parname : "<NULL>",
343                fp->ctf_parlabel ? fp->ctf_parlabel : "<NULL>");
344 }
345
346 /* Free a ctf_base pointer: the pointer passed, or (if NULL) fp->ctf_base.  */
347 static void
348 ctf_free_base (ctf_file_t *fp, unsigned char *ctf_base, size_t ctf_size)
349 {
350   unsigned char *base;
351   size_t size;
352
353   if (ctf_base)
354     {
355       base = ctf_base;
356       size = ctf_size;
357     }
358   else
359     {
360       base = (unsigned char *) fp->ctf_base;
361       size = fp->ctf_size;
362     }
363
364   if (base != fp->ctf_data.cts_data && base != NULL)
365     ctf_data_free (base, size);
366 }
367
368 /* Set the version of the CTF file. */
369
370 /* When this is reset, LCTF_* changes behaviour, but there is no guarantee that
371    the variable data list associated with each type has been upgraded: the
372    caller must ensure this has been done in advance.  */
373
374 static void
375 ctf_set_version (ctf_file_t * fp, ctf_header_t * cth, int ctf_version)
376 {
377   fp->ctf_version = ctf_version;
378   cth->cth_version = ctf_version;
379   fp->ctf_fileops = &ctf_fileops[ctf_version];
380 }
381
382 /* Upgrade the type table to CTF_VERSION_3 (really CTF_VERSION_1_UPGRADED_3).
383
384    The upgrade is not done in-place: the ctf_base is moved.  ctf_strptr() must
385    not be called before reallocation is complete.
386
387    Type kinds not checked here due to nonexistence in older formats:
388       CTF_K_SLICE.  */
389 static int
390 upgrade_types (ctf_file_t *fp, ctf_header_t *cth)
391 {
392   const ctf_type_v1_t *tbuf;
393   const ctf_type_v1_t *tend;
394   unsigned char *ctf_base, *old_ctf_base = (unsigned char *) fp->ctf_base;
395   size_t old_ctf_size = fp->ctf_size;
396   ctf_type_t *t2buf;
397
398   ssize_t increase = 0, size, increment, v2increment, vbytes, v2bytes;
399   const ctf_type_v1_t *tp;
400   ctf_type_t *t2p;
401   ctf_header_t *new_cth;
402
403   tbuf = (ctf_type_v1_t *) (fp->ctf_buf + cth->cth_typeoff);
404   tend = (ctf_type_v1_t *) (fp->ctf_buf + cth->cth_stroff);
405
406   /* Much like init_types(), this is a two-pass process.
407
408      First, figure out the new type-section size needed.  (It is possible,
409      in theory, for it to be less than the old size, but this is very
410      unlikely.  It cannot be so small that cth_typeoff ends up of negative
411      size.  We validate this with an assertion below.)
412
413      We must cater not only for changes in vlen and types sizes but also
414      for changes in 'increment', which happen because v2 places some types
415      into ctf_stype_t where v1 would be forced to use the larger non-stype.  */
416
417   for (tp = tbuf; tp < tend;
418        tp = (ctf_type_v1_t *) ((uintptr_t) tp + increment + vbytes))
419     {
420       unsigned short kind = CTF_V1_INFO_KIND (tp->ctt_info);
421       unsigned long vlen = CTF_V1_INFO_VLEN (tp->ctt_info);
422
423       size = get_ctt_size_v1 (fp, (const ctf_type_t *) tp, NULL, &increment);
424       vbytes = get_vbytes_v1 (kind, size, vlen);
425
426       get_ctt_size_v2_unconverted (fp, (const ctf_type_t *) tp, NULL,
427                                    &v2increment);
428       v2bytes = get_vbytes_v2 (kind, size, vlen);
429
430       if ((vbytes < 0) || (size < 0))
431         return ECTF_CORRUPT;
432
433       increase += v2increment - increment;      /* May be negative.  */
434       increase += v2bytes - vbytes;
435     }
436
437   /* Allocate enough room for the new buffer, then copy everything but the
438      type section into place, and reset the base accordingly.  Leave the
439      version number unchanged, so that LCTF_INFO_* still works on the
440      as-yet-untranslated type info.  */
441
442   if ((ctf_base = ctf_data_alloc (fp->ctf_size + increase)) == NULL)
443     return ECTF_ZALLOC;
444
445   memcpy (ctf_base, fp->ctf_base, sizeof (ctf_header_t) + cth->cth_typeoff);
446   memcpy (ctf_base + sizeof (ctf_header_t) + cth->cth_stroff + increase,
447           fp->ctf_base + sizeof (ctf_header_t) + cth->cth_stroff,
448           cth->cth_strlen);
449
450   memset (ctf_base + sizeof (ctf_header_t) + cth->cth_typeoff, 0,
451          cth->cth_stroff - cth->cth_typeoff + increase);
452
453   /* The cth here is an automatic variable in ctf_bufopen(), and transient
454      (a copy maintained because at that stage the header read out of the
455      ctf file may be read-only). We make all modifications in the
456      canonical copy at ctf_base (by now, writable), then copy it back into
457      cth at the end.  */
458
459   new_cth = (ctf_header_t *) ctf_base;
460   new_cth->cth_stroff += increase;
461   fp->ctf_size += increase;
462   assert (new_cth->cth_stroff >= new_cth->cth_typeoff);
463   ctf_set_base (fp, new_cth, ctf_base);
464
465   t2buf = (ctf_type_t *) (fp->ctf_buf + new_cth->cth_typeoff);
466
467   /* Iterate through all the types again, upgrading them.
468
469      Everything that hasn't changed can just be outright memcpy()ed.
470      Things that have changed need field-by-field consideration.  */
471
472   for (tp = tbuf, t2p = t2buf; tp < tend;
473        tp = (ctf_type_v1_t *) ((uintptr_t) tp + increment + vbytes),
474        t2p = (ctf_type_t *) ((uintptr_t) t2p + v2increment + v2bytes))
475     {
476       unsigned short kind = CTF_V1_INFO_KIND (tp->ctt_info);
477       int isroot = CTF_V1_INFO_ISROOT (tp->ctt_info);
478       unsigned long vlen = CTF_V1_INFO_VLEN (tp->ctt_info);
479       ssize_t v2size;
480       void *vdata, *v2data;
481
482       size = get_ctt_size_v1 (fp, (const ctf_type_t *) tp, NULL, &increment);
483       vbytes = get_vbytes_v1 (kind, size, vlen);
484
485       t2p->ctt_name = tp->ctt_name;
486       t2p->ctt_info = CTF_TYPE_INFO (kind, isroot, vlen);
487
488       switch (kind)
489         {
490         case CTF_K_FUNCTION:
491         case CTF_K_FORWARD:
492         case CTF_K_TYPEDEF:
493         case CTF_K_POINTER:
494         case CTF_K_VOLATILE:
495         case CTF_K_CONST:
496         case CTF_K_RESTRICT:
497           t2p->ctt_type = tp->ctt_type;
498           break;
499         case CTF_K_INTEGER:
500         case CTF_K_FLOAT:
501         case CTF_K_ARRAY:
502         case CTF_K_STRUCT:
503         case CTF_K_UNION:
504         case CTF_K_ENUM:
505         case CTF_K_UNKNOWN:
506           if (size <= CTF_MAX_SIZE)
507             t2p->ctt_size = size;
508           else
509             {
510               t2p->ctt_lsizehi = CTF_SIZE_TO_LSIZE_HI (size);
511               t2p->ctt_lsizelo = CTF_SIZE_TO_LSIZE_LO (size);
512             }
513           break;
514         }
515
516       v2size = get_ctt_size_v2 (fp, t2p, NULL, &v2increment);
517       v2bytes = get_vbytes_v2 (kind, v2size, vlen);
518
519       /* Catch out-of-sync get_ctt_size_*().  The count goes wrong if
520          these are not identical (and having them different makes no
521          sense semantically).  */
522
523       assert (size == v2size);
524
525       /* Now the varlen info.  */
526
527       vdata = (void *) ((uintptr_t) tp + increment);
528       v2data = (void *) ((uintptr_t) t2p + v2increment);
529
530       switch (kind)
531         {
532         case CTF_K_ARRAY:
533           {
534             const ctf_array_v1_t *ap = (const ctf_array_v1_t *) vdata;
535             ctf_array_t *a2p = (ctf_array_t *) v2data;
536
537             a2p->cta_contents = ap->cta_contents;
538             a2p->cta_index = ap->cta_index;
539             a2p->cta_nelems = ap->cta_nelems;
540             break;
541           }
542         case CTF_K_STRUCT:
543         case CTF_K_UNION:
544           {
545             ctf_member_t tmp;
546             const ctf_member_v1_t *m1 = (const ctf_member_v1_t *) vdata;
547             const ctf_lmember_v1_t *lm1 = (const ctf_lmember_v1_t *) m1;
548             ctf_member_t *m2 = (ctf_member_t *) v2data;
549             ctf_lmember_t *lm2 = (ctf_lmember_t *) m2;
550             unsigned long i;
551
552             /* We walk all four pointers forward, but only reference the two
553                that are valid for the given size, to avoid quadruplicating all
554                the code.  */
555
556             for (i = vlen; i != 0; i--, m1++, lm1++, m2++, lm2++)
557               {
558                 size_t offset;
559                 if (size < CTF_LSTRUCT_THRESH_V1)
560                   {
561                     offset = m1->ctm_offset;
562                     tmp.ctm_name = m1->ctm_name;
563                     tmp.ctm_type = m1->ctm_type;
564                   }
565                 else
566                   {
567                     offset = CTF_LMEM_OFFSET (lm1);
568                     tmp.ctm_name = lm1->ctlm_name;
569                     tmp.ctm_type = lm1->ctlm_type;
570                   }
571                 if (size < CTF_LSTRUCT_THRESH)
572                   {
573                     m2->ctm_name = tmp.ctm_name;
574                     m2->ctm_type = tmp.ctm_type;
575                     m2->ctm_offset = offset;
576                   }
577                 else
578                   {
579                     lm2->ctlm_name = tmp.ctm_name;
580                     lm2->ctlm_type = tmp.ctm_type;
581                     lm2->ctlm_offsethi = CTF_OFFSET_TO_LMEMHI (offset);
582                     lm2->ctlm_offsetlo = CTF_OFFSET_TO_LMEMLO (offset);
583                   }
584               }
585             break;
586           }
587         case CTF_K_FUNCTION:
588           {
589             unsigned long i;
590             unsigned short *a1 = (unsigned short *) vdata;
591             uint32_t *a2 = (uint32_t *) v2data;
592
593             for (i = vlen; i != 0; i--, a1++, a2++)
594               *a2 = *a1;
595           }
596         /* FALLTHRU */
597         default:
598           /* Catch out-of-sync get_vbytes_*().  */
599           assert (vbytes == v2bytes);
600           memcpy (v2data, vdata, vbytes);
601         }
602     }
603
604   /* Verify that the entire region was converted.  If not, we are either
605      converting too much, or too little (leading to a buffer overrun either here
606      or at read time, in init_types().) */
607
608   assert ((size_t) t2p - (size_t) fp->ctf_buf == new_cth->cth_stroff);
609
610   ctf_set_version (fp, (ctf_header_t *) ctf_base, CTF_VERSION_1_UPGRADED_3);
611   ctf_free_base (fp, old_ctf_base, old_ctf_size);
612   memcpy (cth, new_cth, sizeof (ctf_header_t));
613
614   return 0;
615 }
616
617 /* Initialize the type ID translation table with the byte offset of each type,
618    and initialize the hash tables of each named type.  Upgrade the type table to
619    the latest supported representation in the process, if needed, and if this
620    recension of libctf supports upgrading.  */
621
622 static int
623 init_types (ctf_file_t *fp, ctf_header_t *cth)
624 {
625   const ctf_type_t *tbuf;
626   const ctf_type_t *tend;
627
628   unsigned long pop[CTF_K_MAX + 1] = { 0 };
629   const ctf_type_t *tp;
630   ctf_hash_t *hp;
631   uint32_t id, dst;
632   uint32_t *xp;
633
634   /* We determine whether the container is a child or a parent based on
635      the value of cth_parname.  */
636
637   int child = cth->cth_parname != 0;
638   int nlstructs = 0, nlunions = 0;
639   int err;
640
641   if (_libctf_unlikely_ (fp->ctf_version == CTF_VERSION_1))
642     {
643       int err;
644       if ((err = upgrade_types (fp, cth)) != 0)
645         return err;                             /* Upgrade failed.  */
646     }
647
648   tbuf = (ctf_type_t *) (fp->ctf_buf + cth->cth_typeoff);
649   tend = (ctf_type_t *) (fp->ctf_buf + cth->cth_stroff);
650
651   /* We make two passes through the entire type section.  In this first
652      pass, we count the number of each type and the total number of types.  */
653
654   for (tp = tbuf; tp < tend; fp->ctf_typemax++)
655     {
656       unsigned short kind = LCTF_INFO_KIND (fp, tp->ctt_info);
657       unsigned long vlen = LCTF_INFO_VLEN (fp, tp->ctt_info);
658       ssize_t size, increment, vbytes;
659
660       (void) ctf_get_ctt_size (fp, tp, &size, &increment);
661       vbytes = LCTF_VBYTES (fp, kind, size, vlen);
662
663       if (vbytes < 0)
664         return ECTF_CORRUPT;
665
666       if (kind == CTF_K_FORWARD)
667         {
668           /* For forward declarations, ctt_type is the CTF_K_* kind for the tag,
669              so bump that population count too.  If ctt_type is unknown, treat
670              the tag as a struct.  */
671
672           if (tp->ctt_type == CTF_K_UNKNOWN || tp->ctt_type >= CTF_K_MAX)
673             pop[CTF_K_STRUCT]++;
674           else
675             pop[tp->ctt_type]++;
676         }
677       tp = (ctf_type_t *) ((uintptr_t) tp + increment + vbytes);
678       pop[kind]++;
679     }
680
681   if (child)
682     {
683       ctf_dprintf ("CTF container %p is a child\n", (void *) fp);
684       fp->ctf_flags |= LCTF_CHILD;
685     }
686   else
687     ctf_dprintf ("CTF container %p is a parent\n", (void *) fp);
688
689   /* Now that we've counted up the number of each type, we can allocate
690      the hash tables, type translation table, and pointer table.  */
691
692   if ((fp->ctf_structs = ctf_hash_create (pop[CTF_K_STRUCT], ctf_hash_string,
693                                           ctf_hash_eq_string)) == NULL)
694     return ENOMEM;
695
696   if ((fp->ctf_unions = ctf_hash_create (pop[CTF_K_UNION], ctf_hash_string,
697                                          ctf_hash_eq_string)) == NULL)
698     return ENOMEM;
699
700   if ((fp->ctf_enums = ctf_hash_create (pop[CTF_K_ENUM], ctf_hash_string,
701                                         ctf_hash_eq_string)) == NULL)
702     return ENOMEM;
703
704   if ((fp->ctf_names = ctf_hash_create (pop[CTF_K_INTEGER] +
705                                         pop[CTF_K_FLOAT] +
706                                         pop[CTF_K_FUNCTION] +
707                                         pop[CTF_K_TYPEDEF] +
708                                         pop[CTF_K_POINTER] +
709                                         pop[CTF_K_VOLATILE] +
710                                         pop[CTF_K_CONST] +
711                                         pop[CTF_K_RESTRICT],
712                                         ctf_hash_string,
713                                         ctf_hash_eq_string)) == NULL)
714     return ENOMEM;
715
716   fp->ctf_txlate = ctf_alloc (sizeof (uint32_t) * (fp->ctf_typemax + 1));
717   fp->ctf_ptrtab = ctf_alloc (sizeof (uint32_t) * (fp->ctf_typemax + 1));
718
719   if (fp->ctf_txlate == NULL || fp->ctf_ptrtab == NULL)
720     return ENOMEM;              /* Memory allocation failed.  */
721
722   xp = fp->ctf_txlate;
723   *xp++ = 0;                    /* Type id 0 is used as a sentinel value.  */
724
725   memset (fp->ctf_txlate, 0, sizeof (uint32_t) * (fp->ctf_typemax + 1));
726   memset (fp->ctf_ptrtab, 0, sizeof (uint32_t) * (fp->ctf_typemax + 1));
727
728   /* In the second pass through the types, we fill in each entry of the
729      type and pointer tables and add names to the appropriate hashes.  */
730
731   for (id = 1, tp = tbuf; tp < tend; xp++, id++)
732     {
733       unsigned short kind = LCTF_INFO_KIND (fp, tp->ctt_info);
734       unsigned short flag = LCTF_INFO_ISROOT (fp, tp->ctt_info);
735       unsigned long vlen = LCTF_INFO_VLEN (fp, tp->ctt_info);
736       ssize_t size, increment, vbytes;
737
738       const char *name;
739
740       (void) ctf_get_ctt_size (fp, tp, &size, &increment);
741       name = ctf_strptr (fp, tp->ctt_name);
742       vbytes = LCTF_VBYTES (fp, kind, size, vlen);
743
744       switch (kind)
745         {
746         case CTF_K_INTEGER:
747         case CTF_K_FLOAT:
748           /* Names are reused by bit-fields, which are differentiated by their
749              encodings, and so typically we'd record only the first instance of
750              a given intrinsic.  However, we replace an existing type with a
751              root-visible version so that we can be sure to find it when
752              checking for conflicting definitions in ctf_add_type().  */
753
754           if (((ctf_hash_lookup_type (fp->ctf_names, fp, name)) == 0)
755               || (flag & CTF_ADD_ROOT))
756             {
757               err = ctf_hash_define_type (fp->ctf_names, fp,
758                                           LCTF_INDEX_TO_TYPE (fp, id, child),
759                                           tp->ctt_name);
760               if (err != 0 && err != ECTF_STRTAB)
761                 return err;
762             }
763           break;
764
765           /* These kinds have no name, so do not need interning into any
766              hashtables.  */
767         case CTF_K_ARRAY:
768         case CTF_K_SLICE:
769           break;
770
771         case CTF_K_FUNCTION:
772           err = ctf_hash_insert_type (fp->ctf_names, fp,
773                                       LCTF_INDEX_TO_TYPE (fp, id, child),
774                                       tp->ctt_name);
775           if (err != 0 && err != ECTF_STRTAB)
776             return err;
777           break;
778
779         case CTF_K_STRUCT:
780           err = ctf_hash_define_type (fp->ctf_structs, fp,
781                                       LCTF_INDEX_TO_TYPE (fp, id, child),
782                                       tp->ctt_name);
783
784           if (err != 0 && err != ECTF_STRTAB)
785             return err;
786
787           if (size >= CTF_LSTRUCT_THRESH)
788             nlstructs++;
789           break;
790
791         case CTF_K_UNION:
792           err = ctf_hash_define_type (fp->ctf_unions, fp,
793                                       LCTF_INDEX_TO_TYPE (fp, id, child),
794                                       tp->ctt_name);
795
796           if (err != 0 && err != ECTF_STRTAB)
797             return err;
798
799           if (size >= CTF_LSTRUCT_THRESH)
800             nlunions++;
801           break;
802
803         case CTF_K_ENUM:
804           err = ctf_hash_define_type (fp->ctf_enums, fp,
805                                       LCTF_INDEX_TO_TYPE (fp, id, child),
806                                       tp->ctt_name);
807
808           if (err != 0 && err != ECTF_STRTAB)
809             return err;
810           break;
811
812         case CTF_K_TYPEDEF:
813           err = ctf_hash_insert_type (fp->ctf_names, fp,
814                                       LCTF_INDEX_TO_TYPE (fp, id, child),
815                                       tp->ctt_name);
816           if (err != 0 && err != ECTF_STRTAB)
817             return err;
818           break;
819
820         case CTF_K_FORWARD:
821           /* Only insert forward tags into the given hash if the type or tag
822              name is not already present.  */
823           switch (tp->ctt_type)
824             {
825             case CTF_K_STRUCT:
826               hp = fp->ctf_structs;
827               break;
828             case CTF_K_UNION:
829               hp = fp->ctf_unions;
830               break;
831             case CTF_K_ENUM:
832               hp = fp->ctf_enums;
833               break;
834             default:
835               hp = fp->ctf_structs;
836             }
837
838           if (ctf_hash_lookup_type (hp, fp, name) == 0)
839             {
840               err = ctf_hash_insert_type (hp, fp,
841                                           LCTF_INDEX_TO_TYPE (fp, id, child),
842                                           tp->ctt_name);
843               if (err != 0 && err != ECTF_STRTAB)
844                 return err;
845             }
846           break;
847
848         case CTF_K_POINTER:
849           /* If the type referenced by the pointer is in this CTF container,
850              then store the index of the pointer type in
851              fp->ctf_ptrtab[ index of referenced type ].  */
852
853           if (LCTF_TYPE_ISCHILD (fp, tp->ctt_type) == child
854               && LCTF_TYPE_TO_INDEX (fp, tp->ctt_type) <= fp->ctf_typemax)
855             fp->ctf_ptrtab[LCTF_TYPE_TO_INDEX (fp, tp->ctt_type)] = id;
856          /*FALLTHRU*/
857
858         case CTF_K_VOLATILE:
859         case CTF_K_CONST:
860         case CTF_K_RESTRICT:
861           err = ctf_hash_insert_type (fp->ctf_names, fp,
862                                       LCTF_INDEX_TO_TYPE (fp, id, child),
863                                       tp->ctt_name);
864           if (err != 0 && err != ECTF_STRTAB)
865             return err;
866           break;
867         }
868
869       *xp = (uint32_t) ((uintptr_t) tp - (uintptr_t) fp->ctf_buf);
870       tp = (ctf_type_t *) ((uintptr_t) tp + increment + vbytes);
871     }
872
873   ctf_dprintf ("%lu total types processed\n", fp->ctf_typemax);
874   ctf_dprintf ("%u enum names hashed\n", ctf_hash_size (fp->ctf_enums));
875   ctf_dprintf ("%u struct names hashed (%d long)\n",
876                ctf_hash_size (fp->ctf_structs), nlstructs);
877   ctf_dprintf ("%u union names hashed (%d long)\n",
878                ctf_hash_size (fp->ctf_unions), nlunions);
879   ctf_dprintf ("%u base type names hashed\n", ctf_hash_size (fp->ctf_names));
880
881   /* Make an additional pass through the pointer table to find pointers that
882      point to anonymous typedef nodes.  If we find one, modify the pointer table
883      so that the pointer is also known to point to the node that is referenced
884      by the anonymous typedef node.  */
885
886   for (id = 1; id <= fp->ctf_typemax; id++)
887     {
888       if ((dst = fp->ctf_ptrtab[id]) != 0)
889         {
890           tp = LCTF_INDEX_TO_TYPEPTR (fp, id);
891
892           if (LCTF_INFO_KIND (fp, tp->ctt_info) == CTF_K_TYPEDEF &&
893               strcmp (ctf_strptr (fp, tp->ctt_name), "") == 0 &&
894               LCTF_TYPE_ISCHILD (fp, tp->ctt_type) == child &&
895               LCTF_TYPE_TO_INDEX (fp, tp->ctt_type) <= fp->ctf_typemax)
896             fp->ctf_ptrtab[LCTF_TYPE_TO_INDEX (fp, tp->ctt_type)] = dst;
897         }
898     }
899
900   return 0;
901 }
902
903 /* Endianness-flipping routines.
904
905    We flip everything, mindlessly, even 1-byte entities, so that future
906    expansions do not require changes to this code.  */
907
908 /* < C11? define away static assertions.  */
909
910 #if !defined (__STDC_VERSION__) || __STDC_VERSION__ < 201112L
911 #define _Static_assert(cond, err)
912 #endif
913
914 /* Swap the endianness of something.  */
915
916 #define swap_thing(x)                                                   \
917   do {                                                                  \
918     _Static_assert (sizeof (x) == 1 || (sizeof (x) % 2 == 0             \
919                                         && sizeof (x) <= 8),            \
920                     "Invalid size, update endianness code");            \
921     switch (sizeof (x)) {                                               \
922     case 2: x = bswap_16 (x); break;                                    \
923     case 4: x = bswap_32 (x); break;                                    \
924     case 8: x = bswap_64 (x); break;                                    \
925     case 1: /* Nothing needs doing */                                   \
926       break;                                                            \
927     }                                                                   \
928   } while (0);
929
930 /* Flip the endianness of the CTF header.  */
931
932 static void
933 flip_header (ctf_header_t *cth)
934 {
935   swap_thing (cth->cth_preamble.ctp_magic);
936   swap_thing (cth->cth_preamble.ctp_version);
937   swap_thing (cth->cth_preamble.ctp_flags);
938   swap_thing (cth->cth_parlabel);
939   swap_thing (cth->cth_parname);
940   swap_thing (cth->cth_objtoff);
941   swap_thing (cth->cth_funcoff);
942   swap_thing (cth->cth_varoff);
943   swap_thing (cth->cth_typeoff);
944   swap_thing (cth->cth_stroff);
945   swap_thing (cth->cth_strlen);
946 }
947
948 /* Flip the endianness of the label section, an array of ctf_lblent_t.  */
949
950 static void
951 flip_lbls (void *start, size_t len)
952 {
953   ctf_lblent_t *lbl = start;
954
955   for (ssize_t i = len / sizeof (struct ctf_lblent); i > 0; lbl++, i--)
956     {
957       swap_thing (lbl->ctl_label);
958       swap_thing (lbl->ctl_type);
959     }
960 }
961
962 /* Flip the endianness of the data-object or function sections, an array of
963    uint32_t.  (The function section has more internal structure, but that
964    structure is an array of uint32_t, so can be treated as one big array for
965    byte-swapping.)  */
966
967 static void
968 flip_objts (void *start, size_t len)
969 {
970   uint32_t *obj = start;
971
972   for (ssize_t i = len / sizeof (uint32_t); i > 0; obj++, i--)
973       swap_thing (*obj);
974 }
975
976 /* Flip the endianness of the variable section, an array of ctf_varent_t.  */
977
978 static void
979 flip_vars (void *start, size_t len)
980 {
981   ctf_varent_t *var = start;
982
983   for (ssize_t i = len / sizeof (struct ctf_varent); i > 0; var++, i--)
984     {
985       swap_thing (var->ctv_name);
986       swap_thing (var->ctv_type);
987     }
988 }
989
990 /* Flip the endianness of the type section, a tagged array of ctf_type or
991    ctf_stype followed by variable data.  */
992
993 static int
994 flip_types (void *start, size_t len)
995 {
996   ctf_type_t *t = start;
997
998   while ((uintptr_t) t < ((uintptr_t) start) + len)
999     {
1000       swap_thing (t->ctt_name);
1001       swap_thing (t->ctt_info);
1002       swap_thing (t->ctt_size);
1003
1004       uint32_t kind = CTF_V2_INFO_KIND (t->ctt_info);
1005       size_t size = t->ctt_size;
1006       uint32_t vlen = CTF_V2_INFO_VLEN (t->ctt_info);
1007       size_t vbytes = get_vbytes_v2 (kind, size, vlen);
1008
1009       if (_libctf_unlikely_ (size == CTF_LSIZE_SENT))
1010         {
1011           swap_thing (t->ctt_lsizehi);
1012           swap_thing (t->ctt_lsizelo);
1013           size = CTF_TYPE_LSIZE (t);
1014           t = (ctf_type_t *) ((uintptr_t) t + sizeof (ctf_type_t));
1015         }
1016       else
1017         t = (ctf_type_t *) ((uintptr_t) t + sizeof (ctf_stype_t));
1018
1019       switch (kind)
1020         {
1021         case CTF_K_FORWARD:
1022         case CTF_K_UNKNOWN:
1023         case CTF_K_POINTER:
1024         case CTF_K_TYPEDEF:
1025         case CTF_K_VOLATILE:
1026         case CTF_K_CONST:
1027         case CTF_K_RESTRICT:
1028           /* These types have no vlen data to swap.  */
1029           assert (vbytes == 0);
1030           break;
1031
1032         case CTF_K_INTEGER:
1033         case CTF_K_FLOAT:
1034           {
1035             /* These types have a single uint32_t.  */
1036
1037             uint32_t *item = (uint32_t *) t;
1038
1039             swap_thing (*item);
1040             break;
1041           }
1042
1043         case CTF_K_FUNCTION:
1044           {
1045             /* This type has a bunch of uint32_ts.  */
1046
1047             uint32_t *item = (uint32_t *) t;
1048
1049             for (ssize_t i = vlen; i > 0; item++, i--)
1050               swap_thing (*item);
1051             break;
1052           }
1053
1054         case CTF_K_ARRAY:
1055           {
1056             /* This has a single ctf_array_t.  */
1057
1058             ctf_array_t *a = (ctf_array_t *) t;
1059
1060             assert (vbytes == sizeof (ctf_array_t));
1061             swap_thing (a->cta_contents);
1062             swap_thing (a->cta_index);
1063             swap_thing (a->cta_nelems);
1064
1065             break;
1066           }
1067
1068         case CTF_K_SLICE:
1069           {
1070             /* This has a single ctf_slice_t.  */
1071
1072             ctf_slice_t *s = (ctf_slice_t *) t;
1073
1074             assert (vbytes == sizeof (ctf_slice_t));
1075             swap_thing (s->cts_type);
1076             swap_thing (s->cts_offset);
1077             swap_thing (s->cts_bits);
1078
1079             break;
1080           }
1081
1082         case CTF_K_STRUCT:
1083         case CTF_K_UNION:
1084           {
1085             /* This has an array of ctf_member or ctf_lmember, depending on
1086                size.  We could consider it to be a simple array of uint32_t,
1087                but for safety's sake in case these structures ever acquire
1088                non-uint32_t members, do it member by member.  */
1089
1090             if (_libctf_unlikely_ (size >= CTF_LSTRUCT_THRESH))
1091               {
1092                 ctf_lmember_t *lm = (ctf_lmember_t *) t;
1093                 for (ssize_t i = vlen; i > 0; i--, lm++)
1094                   {
1095                     swap_thing (lm->ctlm_name);
1096                     swap_thing (lm->ctlm_offsethi);
1097                     swap_thing (lm->ctlm_type);
1098                     swap_thing (lm->ctlm_offsetlo);
1099                   }
1100               }
1101             else
1102               {
1103                 ctf_member_t *m = (ctf_member_t *) t;
1104                 for (ssize_t i = vlen; i > 0; i--, m++)
1105                   {
1106                     swap_thing (m->ctm_name);
1107                     swap_thing (m->ctm_offset);
1108                     swap_thing (m->ctm_type);
1109                   }
1110               }
1111             break;
1112           }
1113
1114         case CTF_K_ENUM:
1115           {
1116             /* This has an array of ctf_enum_t.  */
1117
1118             ctf_enum_t *item = (ctf_enum_t *) t;
1119
1120             for (ssize_t i = vlen; i > 0; item++, i--)
1121               {
1122                 swap_thing (item->cte_name);
1123                 swap_thing (item->cte_value);
1124               }
1125             break;
1126           }
1127         default:
1128           ctf_dprintf ("unhandled CTF kind in endianness conversion -- %x\n",
1129                        kind);
1130           return ECTF_CORRUPT;
1131         }
1132
1133       t = (ctf_type_t *) ((uintptr_t) t + vbytes);
1134     }
1135
1136   return 0;
1137 }
1138
1139 /* Flip the endianness of BASE, given the offsets in the (already endian-
1140    converted) CTH.
1141
1142    All of this stuff happens before the header is fully initialized, so the
1143    LCTF_*() macros cannot be used yet.  Since we do not try to endian-convert v1
1144    data, this is no real loss.  */
1145
1146 static int
1147 flip_ctf (ctf_header_t *cth, unsigned char *base)
1148 {
1149   base += sizeof (ctf_header_t);
1150
1151   flip_lbls (base + cth->cth_lbloff, cth->cth_objtoff - cth->cth_lbloff);
1152   flip_objts (base + cth->cth_objtoff, cth->cth_funcoff - cth->cth_objtoff);
1153   flip_objts (base + cth->cth_funcoff, cth->cth_varoff - cth->cth_funcoff);
1154   flip_vars (base + cth->cth_varoff, cth->cth_typeoff - cth->cth_varoff);
1155   return flip_types (base + cth->cth_typeoff, cth->cth_stroff - cth->cth_typeoff);
1156 }
1157
1158 /* Open a CTF file, mocking up a suitable ctf_sect.  */
1159 ctf_file_t *ctf_simple_open (const char *ctfsect, size_t ctfsect_size,
1160                              const char *symsect, size_t symsect_size,
1161                              size_t symsect_entsize,
1162                              const char *strsect, size_t strsect_size,
1163                              int *errp)
1164 {
1165   ctf_sect_t skeleton;
1166
1167   ctf_sect_t ctf_sect, sym_sect, str_sect;
1168   ctf_sect_t *ctfsectp = NULL;
1169   ctf_sect_t *symsectp = NULL;
1170   ctf_sect_t *strsectp = NULL;
1171
1172   skeleton.cts_name = _CTF_SECTION;
1173   skeleton.cts_type = SHT_PROGBITS;
1174   skeleton.cts_flags = 0;
1175   skeleton.cts_entsize = 1;
1176   skeleton.cts_offset = 0;
1177
1178   if (ctfsect)
1179     {
1180       memcpy (&ctf_sect, &skeleton, sizeof (struct ctf_sect));
1181       ctf_sect.cts_data = ctfsect;
1182       ctf_sect.cts_size = ctfsect_size;
1183       ctfsectp = &ctf_sect;
1184     }
1185
1186   if (symsect)
1187     {
1188       memcpy (&sym_sect, &skeleton, sizeof (struct ctf_sect));
1189       sym_sect.cts_data = symsect;
1190       sym_sect.cts_size = symsect_size;
1191       sym_sect.cts_entsize = symsect_entsize;
1192       symsectp = &sym_sect;
1193     }
1194
1195   if (strsect)
1196     {
1197       memcpy (&str_sect, &skeleton, sizeof (struct ctf_sect));
1198       str_sect.cts_data = strsect;
1199       str_sect.cts_size = strsect_size;
1200       strsectp = &str_sect;
1201     }
1202
1203   return ctf_bufopen (ctfsectp, symsectp, strsectp, errp);
1204 }
1205
1206 /* Decode the specified CTF buffer and optional symbol table, and create a new
1207    CTF container representing the symbolic debugging information.  This code can
1208    be used directly by the debugger, or it can be used as the engine for
1209    ctf_fdopen() or ctf_open(), below.  */
1210
1211 ctf_file_t *
1212 ctf_bufopen (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect,
1213              const ctf_sect_t *strsect, int *errp)
1214 {
1215   const ctf_preamble_t *pp;
1216   ctf_header_t hp;
1217   ctf_file_t *fp;
1218   void *buf, *base;
1219   size_t size, hdrsz;
1220   int foreign_endian = 0;
1221   int err;
1222
1223   libctf_init_debug();
1224
1225   if (ctfsect == NULL || ((symsect == NULL) != (strsect == NULL)))
1226     return (ctf_set_open_errno (errp, EINVAL));
1227
1228   if (symsect != NULL && symsect->cts_entsize != sizeof (Elf32_Sym) &&
1229       symsect->cts_entsize != sizeof (Elf64_Sym))
1230     return (ctf_set_open_errno (errp, ECTF_SYMTAB));
1231
1232   if (symsect != NULL && symsect->cts_data == NULL)
1233     return (ctf_set_open_errno (errp, ECTF_SYMBAD));
1234
1235   if (strsect != NULL && strsect->cts_data == NULL)
1236     return (ctf_set_open_errno (errp, ECTF_STRBAD));
1237
1238   if (ctfsect->cts_size < sizeof (ctf_preamble_t))
1239     return (ctf_set_open_errno (errp, ECTF_NOCTFBUF));
1240
1241   pp = (const ctf_preamble_t *) ctfsect->cts_data;
1242
1243   ctf_dprintf ("ctf_bufopen: magic=0x%x version=%u\n",
1244                pp->ctp_magic, pp->ctp_version);
1245
1246   /* Validate each part of the CTF header.
1247
1248      First, we validate the preamble (common to all versions).  At that point,
1249      we know the endianness and specific header version, and can validate the
1250      version-specific parts including section offsets and alignments.
1251
1252      We specifically do not support foreign-endian old versions.  */
1253
1254   if (_libctf_unlikely_ (pp->ctp_magic != CTF_MAGIC))
1255     {
1256       if (pp->ctp_magic == bswap_16 (CTF_MAGIC))
1257         {
1258           if (pp->ctp_version != CTF_VERSION_3)
1259             return (ctf_set_open_errno (errp, ECTF_CTFVERS));
1260           foreign_endian = 1;
1261         }
1262       else
1263         return (ctf_set_open_errno (errp, ECTF_NOCTFBUF));
1264     }
1265
1266   if (_libctf_unlikely_ ((pp->ctp_version < CTF_VERSION_1)
1267                          || (pp->ctp_version > CTF_VERSION_3)))
1268     return (ctf_set_open_errno (errp, ECTF_CTFVERS));
1269
1270   if ((symsect != NULL) && (pp->ctp_version < CTF_VERSION_2))
1271     {
1272       /* The symtab can contain function entries which contain embedded ctf
1273          info.  We do not support dynamically upgrading such entries (none
1274          should exist in any case, since dwarf2ctf does not create them).  */
1275
1276       ctf_dprintf ("ctf_bufopen: CTF version %d symsect not "
1277                    "supported\n", pp->ctp_version);
1278       return (ctf_set_open_errno (errp, ECTF_NOTSUP));
1279     }
1280
1281   if (ctfsect->cts_size < sizeof (ctf_header_t))
1282     return (ctf_set_open_errno (errp, ECTF_NOCTFBUF));
1283
1284   memcpy (&hp, ctfsect->cts_data, sizeof (hp));
1285
1286   if (foreign_endian)
1287     flip_header (&hp);
1288
1289   hdrsz = sizeof (ctf_header_t);
1290
1291   size = hp.cth_stroff + hp.cth_strlen;
1292
1293   ctf_dprintf ("ctf_bufopen: uncompressed size=%lu\n", (unsigned long) size);
1294
1295   if (hp.cth_lbloff > size || hp.cth_objtoff > size
1296       || hp.cth_funcoff > size || hp.cth_typeoff > size || hp.cth_stroff > size)
1297     return (ctf_set_open_errno (errp, ECTF_CORRUPT));
1298
1299   if (hp.cth_lbloff > hp.cth_objtoff
1300       || hp.cth_objtoff > hp.cth_funcoff
1301       || hp.cth_funcoff > hp.cth_typeoff
1302       || hp.cth_funcoff > hp.cth_varoff
1303       || hp.cth_varoff > hp.cth_typeoff || hp.cth_typeoff > hp.cth_stroff)
1304     return (ctf_set_open_errno (errp, ECTF_CORRUPT));
1305
1306   if ((hp.cth_lbloff & 3) || (hp.cth_objtoff & 1)
1307       || (hp.cth_funcoff & 1) || (hp.cth_varoff & 3) || (hp.cth_typeoff & 3))
1308     return (ctf_set_open_errno (errp, ECTF_CORRUPT));
1309
1310   /* Once everything is determined to be valid, attempt to decompress the CTF
1311      data buffer if it is compressed, or copy it into new storage if it is not
1312      compressed but needs endian-flipping.  Otherwise we just put the data
1313      section's buffer pointer into ctf_buf, below.  */
1314
1315   /* Note: if this is a v1 buffer, it will be reallocated and expanded by
1316      init_types().  */
1317
1318   if (hp.cth_flags & CTF_F_COMPRESS)
1319     {
1320       size_t srclen, dstlen;
1321       const void *src;
1322       int rc = Z_OK;
1323
1324       if ((base = ctf_data_alloc (size + hdrsz)) == NULL)
1325         return (ctf_set_open_errno (errp, ECTF_ZALLOC));
1326
1327       memcpy (base, ctfsect->cts_data, hdrsz);
1328       ((ctf_preamble_t *) base)->ctp_flags &= ~CTF_F_COMPRESS;
1329       buf = (unsigned char *) base + hdrsz;
1330
1331       src = (unsigned char *) ctfsect->cts_data + hdrsz;
1332       srclen = ctfsect->cts_size - hdrsz;
1333       dstlen = size;
1334
1335       if ((rc = uncompress (buf, &dstlen, src, srclen)) != Z_OK)
1336         {
1337           ctf_dprintf ("zlib inflate err: %s\n", zError (rc));
1338           ctf_data_free (base, size + hdrsz);
1339           return (ctf_set_open_errno (errp, ECTF_DECOMPRESS));
1340         }
1341
1342       if (dstlen != size)
1343         {
1344           ctf_dprintf ("zlib inflate short -- got %lu of %lu "
1345                        "bytes\n", (unsigned long) dstlen, (unsigned long) size);
1346           ctf_data_free (base, size + hdrsz);
1347           return (ctf_set_open_errno (errp, ECTF_CORRUPT));
1348         }
1349
1350     }
1351   else if (foreign_endian)
1352     {
1353       if ((base = ctf_data_alloc (size + hdrsz)) == NULL)
1354         return (ctf_set_open_errno (errp, ECTF_ZALLOC));
1355     }
1356   else
1357     {
1358       base = (void *) ctfsect->cts_data;
1359       buf = (unsigned char *) base + hdrsz;
1360     }
1361
1362   /* Once we have uncompressed and validated the CTF data buffer, we can
1363      proceed with allocating a ctf_file_t and initializing it.
1364
1365      Nothing that depends on buf or base should be set directly in this function
1366      before the init_types() call, because it may be reallocated during
1367      transparent upgrade if this recension of libctf is so configured: see
1368      ctf_set_base() and ctf_realloc_base().  */
1369
1370   if ((fp = ctf_alloc (sizeof (ctf_file_t))) == NULL)
1371     return (ctf_set_open_errno (errp, ENOMEM));
1372
1373   memset (fp, 0, sizeof (ctf_file_t));
1374   ctf_set_version (fp, &hp, hp.cth_version);
1375
1376   if (_libctf_unlikely_ (hp.cth_version < CTF_VERSION_2))
1377     fp->ctf_parmax = CTF_MAX_PTYPE_V1;
1378   else
1379     fp->ctf_parmax = CTF_MAX_PTYPE;
1380
1381   memcpy (&fp->ctf_data, ctfsect, sizeof (ctf_sect_t));
1382
1383   if (symsect != NULL)
1384     {
1385       memcpy (&fp->ctf_symtab, symsect, sizeof (ctf_sect_t));
1386       memcpy (&fp->ctf_strtab, strsect, sizeof (ctf_sect_t));
1387     }
1388
1389   if (fp->ctf_data.cts_name != NULL)
1390     fp->ctf_data.cts_name = ctf_strdup (fp->ctf_data.cts_name);
1391   if (fp->ctf_symtab.cts_name != NULL)
1392     fp->ctf_symtab.cts_name = ctf_strdup (fp->ctf_symtab.cts_name);
1393   if (fp->ctf_strtab.cts_name != NULL)
1394     fp->ctf_strtab.cts_name = ctf_strdup (fp->ctf_strtab.cts_name);
1395
1396   if (fp->ctf_data.cts_name == NULL)
1397     fp->ctf_data.cts_name = _CTF_NULLSTR;
1398   if (fp->ctf_symtab.cts_name == NULL)
1399     fp->ctf_symtab.cts_name = _CTF_NULLSTR;
1400   if (fp->ctf_strtab.cts_name == NULL)
1401     fp->ctf_strtab.cts_name = _CTF_NULLSTR;
1402
1403   if (strsect != NULL)
1404     {
1405       fp->ctf_str[CTF_STRTAB_1].cts_strs = strsect->cts_data;
1406       fp->ctf_str[CTF_STRTAB_1].cts_len = strsect->cts_size;
1407     }
1408
1409   if (foreign_endian &&
1410       (err = flip_ctf (&hp, base)) != 0)
1411     {
1412       /* We can be certain that flip_ctf() will have endian-flipped everything
1413          other than the types table when we return.  In particular the header
1414          is fine, so set it, to allow freeing to use the usual code path.  */
1415
1416       (void) ctf_set_open_errno (errp, err);
1417       ctf_set_base (fp, &hp, base);
1418       goto bad;
1419     }
1420
1421   ctf_set_base (fp, &hp, base);
1422   fp->ctf_size = size + hdrsz;
1423
1424   if ((err = init_types (fp, &hp)) != 0)
1425     {
1426       (void) ctf_set_open_errno (errp, err);
1427       goto bad;
1428     }
1429
1430   /* The ctf region may have been reallocated by init_types(), but now
1431      that is done, it will not move again, so we can protect it, as long
1432      as it didn't come from the ctfsect, which might have been allocated
1433      with malloc().  */
1434
1435   if (fp->ctf_base != (void *) ctfsect->cts_data)
1436     ctf_data_protect ((void *) fp->ctf_base, fp->ctf_size);
1437
1438   /* If we have a symbol table section, allocate and initialize
1439      the symtab translation table, pointed to by ctf_sxlate.  */
1440
1441   if (symsect != NULL)
1442     {
1443       fp->ctf_nsyms = symsect->cts_size / symsect->cts_entsize;
1444       fp->ctf_sxlate = ctf_alloc (fp->ctf_nsyms * sizeof (uint32_t));
1445
1446       if (fp->ctf_sxlate == NULL)
1447         {
1448           (void) ctf_set_open_errno (errp, ENOMEM);
1449           goto bad;
1450         }
1451
1452       if ((err = init_symtab (fp, &hp, symsect, strsect)) != 0)
1453         {
1454           (void) ctf_set_open_errno (errp, err);
1455           goto bad;
1456         }
1457     }
1458
1459   /* Initialize the ctf_lookup_by_name top-level dictionary.  We keep an
1460      array of type name prefixes and the corresponding ctf_hash to use.
1461      NOTE: This code must be kept in sync with the code in ctf_update().  */
1462   fp->ctf_lookups[0].ctl_prefix = "struct";
1463   fp->ctf_lookups[0].ctl_len = strlen (fp->ctf_lookups[0].ctl_prefix);
1464   fp->ctf_lookups[0].ctl_hash = fp->ctf_structs;
1465   fp->ctf_lookups[1].ctl_prefix = "union";
1466   fp->ctf_lookups[1].ctl_len = strlen (fp->ctf_lookups[1].ctl_prefix);
1467   fp->ctf_lookups[1].ctl_hash = fp->ctf_unions;
1468   fp->ctf_lookups[2].ctl_prefix = "enum";
1469   fp->ctf_lookups[2].ctl_len = strlen (fp->ctf_lookups[2].ctl_prefix);
1470   fp->ctf_lookups[2].ctl_hash = fp->ctf_enums;
1471   fp->ctf_lookups[3].ctl_prefix = _CTF_NULLSTR;
1472   fp->ctf_lookups[3].ctl_len = strlen (fp->ctf_lookups[3].ctl_prefix);
1473   fp->ctf_lookups[3].ctl_hash = fp->ctf_names;
1474   fp->ctf_lookups[4].ctl_prefix = NULL;
1475   fp->ctf_lookups[4].ctl_len = 0;
1476   fp->ctf_lookups[4].ctl_hash = NULL;
1477
1478   if (symsect != NULL)
1479     {
1480       if (symsect->cts_entsize == sizeof (Elf64_Sym))
1481         (void) ctf_setmodel (fp, CTF_MODEL_LP64);
1482       else
1483         (void) ctf_setmodel (fp, CTF_MODEL_ILP32);
1484     }
1485   else
1486     (void) ctf_setmodel (fp, CTF_MODEL_NATIVE);
1487
1488   fp->ctf_refcnt = 1;
1489   return fp;
1490
1491 bad:
1492   ctf_file_close (fp);
1493   return NULL;
1494 }
1495
1496 /* Close the specified CTF container and free associated data structures.  Note
1497    that ctf_file_close() is a reference counted operation: if the specified file
1498    is the parent of other active containers, its reference count will be greater
1499    than one and it will be freed later when no active children exist.  */
1500
1501 void
1502 ctf_file_close (ctf_file_t *fp)
1503 {
1504   ctf_dtdef_t *dtd, *ntd;
1505   ctf_dvdef_t *dvd, *nvd;
1506
1507   if (fp == NULL)
1508     return;                /* Allow ctf_file_close(NULL) to simplify caller code.  */
1509
1510   ctf_dprintf ("ctf_file_close(%p) refcnt=%u\n", (void *) fp, fp->ctf_refcnt);
1511
1512   if (fp->ctf_refcnt > 1)
1513     {
1514       fp->ctf_refcnt--;
1515       return;
1516     }
1517
1518   if (fp->ctf_dynparname != NULL)
1519     ctf_free (fp->ctf_dynparname);
1520
1521   if (fp->ctf_parent != NULL)
1522     ctf_file_close (fp->ctf_parent);
1523
1524   for (dtd = ctf_list_next (&fp->ctf_dtdefs); dtd != NULL; dtd = ntd)
1525     {
1526       ntd = ctf_list_next (dtd);
1527       ctf_dtd_delete (fp, dtd);
1528     }
1529   ctf_dynhash_destroy (fp->ctf_dthash);
1530   ctf_dynhash_destroy (fp->ctf_dtbyname);
1531
1532   for (dvd = ctf_list_next (&fp->ctf_dvdefs); dvd != NULL; dvd = nvd)
1533     {
1534       nvd = ctf_list_next (dvd);
1535       ctf_dvd_delete (fp, dvd);
1536     }
1537   ctf_dynhash_destroy (fp->ctf_dvhash);
1538
1539   ctf_free (fp->ctf_tmp_typeslice);
1540
1541   if (fp->ctf_data.cts_name != _CTF_NULLSTR &&
1542       fp->ctf_data.cts_name != NULL)
1543     ctf_free ((char *) fp->ctf_data.cts_name);
1544
1545   if (fp->ctf_symtab.cts_name != _CTF_NULLSTR &&
1546       fp->ctf_symtab.cts_name != NULL)
1547     ctf_free ((char *) fp->ctf_symtab.cts_name);
1548
1549   if (fp->ctf_strtab.cts_name != _CTF_NULLSTR &&
1550       fp->ctf_strtab.cts_name != NULL)
1551     ctf_free ((char *) fp->ctf_strtab.cts_name);
1552
1553   else if (fp->ctf_data_mmapped)
1554     ctf_munmap (fp->ctf_data_mmapped, fp->ctf_data_mmapped_len);
1555
1556   ctf_free_base (fp, NULL, 0);
1557
1558   if (fp->ctf_sxlate != NULL)
1559     ctf_free (fp->ctf_sxlate);
1560
1561   if (fp->ctf_txlate != NULL)
1562     ctf_free (fp->ctf_txlate);
1563
1564   if (fp->ctf_ptrtab != NULL)
1565     ctf_free (fp->ctf_ptrtab);
1566
1567   ctf_hash_destroy (fp->ctf_structs);
1568   ctf_hash_destroy (fp->ctf_unions);
1569   ctf_hash_destroy (fp->ctf_enums);
1570   ctf_hash_destroy (fp->ctf_names);
1571
1572   ctf_free (fp);
1573 }
1574
1575 /* The converse of ctf_open().  ctf_open() disguises whatever it opens as an
1576    archive, so closing one is just like closing an archive.  */
1577 void
1578 ctf_close (ctf_archive_t *arc)
1579 {
1580   ctf_arc_close (arc);
1581 }
1582
1583 /* Get the CTF archive from which this ctf_file_t is derived.  */
1584 ctf_archive_t *
1585 ctf_get_arc (const ctf_file_t *fp)
1586 {
1587   return fp->ctf_archive;
1588 }
1589
1590 /* Return the ctfsect out of the core ctf_impl.  Useful for freeing the
1591    ctfsect's data * after ctf_file_close(), which is why we return the actual
1592    structure, not a pointer to it, since that is likely to become a pointer to
1593    freed data before the return value is used under the expected use case of
1594    ctf_getsect()/ ctf_file_close()/free().  */
1595 extern ctf_sect_t
1596 ctf_getdatasect (const ctf_file_t *fp)
1597 {
1598   return fp->ctf_data;
1599 }
1600
1601 /* Return the CTF handle for the parent CTF container, if one exists.
1602    Otherwise return NULL to indicate this container has no imported parent.  */
1603 ctf_file_t *
1604 ctf_parent_file (ctf_file_t *fp)
1605 {
1606   return fp->ctf_parent;
1607 }
1608
1609 /* Return the name of the parent CTF container, if one exists.  Otherwise
1610    return NULL to indicate this container is a root container.  */
1611 const char *
1612 ctf_parent_name (ctf_file_t *fp)
1613 {
1614   return fp->ctf_parname;
1615 }
1616
1617 /* Set the parent name.  It is an error to call this routine without calling
1618    ctf_import() at some point.  */
1619 void
1620 ctf_parent_name_set (ctf_file_t *fp, const char *name)
1621 {
1622   if (fp->ctf_dynparname != NULL)
1623     ctf_free (fp->ctf_dynparname);
1624
1625   fp->ctf_dynparname = ctf_strdup (name);
1626   fp->ctf_parname = fp->ctf_dynparname;
1627 }
1628
1629 /* Import the types from the specified parent container by storing a pointer
1630    to it in ctf_parent and incrementing its reference count.  Only one parent
1631    is allowed: if a parent already exists, it is replaced by the new parent.  */
1632 int
1633 ctf_import (ctf_file_t *fp, ctf_file_t *pfp)
1634 {
1635   if (fp == NULL || fp == pfp || (pfp != NULL && pfp->ctf_refcnt == 0))
1636     return (ctf_set_errno (fp, EINVAL));
1637
1638   if (pfp != NULL && pfp->ctf_dmodel != fp->ctf_dmodel)
1639     return (ctf_set_errno (fp, ECTF_DMODEL));
1640
1641   if (fp->ctf_parent != NULL)
1642     ctf_file_close (fp->ctf_parent);
1643
1644   if (pfp != NULL)
1645     {
1646       fp->ctf_flags |= LCTF_CHILD;
1647       pfp->ctf_refcnt++;
1648
1649       if (fp->ctf_parname == NULL)
1650         ctf_parent_name_set (fp, "PARENT");
1651     }
1652   fp->ctf_parent = pfp;
1653   return 0;
1654 }
1655
1656 /* Set the data model constant for the CTF container.  */
1657 int
1658 ctf_setmodel (ctf_file_t *fp, int model)
1659 {
1660   const ctf_dmodel_t *dp;
1661
1662   for (dp = _libctf_models; dp->ctd_name != NULL; dp++)
1663     {
1664       if (dp->ctd_code == model)
1665         {
1666           fp->ctf_dmodel = dp;
1667           return 0;
1668         }
1669     }
1670
1671   return (ctf_set_errno (fp, EINVAL));
1672 }
1673
1674 /* Return the data model constant for the CTF container.  */
1675 int
1676 ctf_getmodel (ctf_file_t *fp)
1677 {
1678   return fp->ctf_dmodel->ctd_code;
1679 }
1680
1681 void
1682 ctf_setspecific (ctf_file_t *fp, void *data)
1683 {
1684   fp->ctf_specific = data;
1685 }
1686
1687 void *
1688 ctf_getspecific (ctf_file_t *fp)
1689 {
1690   return fp->ctf_specific;
1691 }