2 Copyright (C) 2019-2020 Free Software Foundation, Inc.
4 This file is part of libctf.
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
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.
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/>. */
23 #include <sys/types.h>
30 static const ctf_dmodel_t _libctf_models
[] = {
31 {"ILP32", CTF_MODEL_ILP32
, 4, 1, 2, 4, 4},
32 {"LP64", CTF_MODEL_LP64
, 8, 1, 2, 4, 8},
33 {NULL
, 0, 0, 0, 0, 0, 0}
36 const char _CTF_SECTION
[] = ".ctf";
37 const char _CTF_NULLSTR
[] = "";
39 /* Version-sensitive accessors. */
42 get_kind_v1 (uint32_t info
)
44 return (CTF_V1_INFO_KIND (info
));
48 get_root_v1 (uint32_t info
)
50 return (CTF_V1_INFO_ISROOT (info
));
54 get_vlen_v1 (uint32_t info
)
56 return (CTF_V1_INFO_VLEN (info
));
60 get_kind_v2 (uint32_t info
)
62 return (CTF_V2_INFO_KIND (info
));
66 get_root_v2 (uint32_t info
)
68 return (CTF_V2_INFO_ISROOT (info
));
72 get_vlen_v2 (uint32_t info
)
74 return (CTF_V2_INFO_VLEN (info
));
78 get_ctt_size_common (const ctf_dict_t
*fp _libctf_unused_
,
79 const ctf_type_t
*tp _libctf_unused_
,
80 ssize_t
*sizep
, ssize_t
*incrementp
, size_t lsize
,
81 size_t csize
, size_t ctf_type_size
,
82 size_t ctf_stype_size
, size_t ctf_lsize_sent
)
84 ssize_t size
, increment
;
86 if (csize
== ctf_lsize_sent
)
89 increment
= ctf_type_size
;
94 increment
= ctf_stype_size
;
100 *incrementp
= increment
;
106 get_ctt_size_v1 (const ctf_dict_t
*fp
, const ctf_type_t
*tp
,
107 ssize_t
*sizep
, ssize_t
*incrementp
)
109 ctf_type_v1_t
*t1p
= (ctf_type_v1_t
*) tp
;
111 return (get_ctt_size_common (fp
, tp
, sizep
, incrementp
,
112 CTF_TYPE_LSIZE (t1p
), t1p
->ctt_size
,
113 sizeof (ctf_type_v1_t
), sizeof (ctf_stype_v1_t
),
117 /* Return the size that a v1 will be once it is converted to v2. */
120 get_ctt_size_v2_unconverted (const ctf_dict_t
*fp
, const ctf_type_t
*tp
,
121 ssize_t
*sizep
, ssize_t
*incrementp
)
123 ctf_type_v1_t
*t1p
= (ctf_type_v1_t
*) tp
;
125 return (get_ctt_size_common (fp
, tp
, sizep
, incrementp
,
126 CTF_TYPE_LSIZE (t1p
), t1p
->ctt_size
,
127 sizeof (ctf_type_t
), sizeof (ctf_stype_t
),
132 get_ctt_size_v2 (const ctf_dict_t
*fp
, const ctf_type_t
*tp
,
133 ssize_t
*sizep
, ssize_t
*incrementp
)
135 return (get_ctt_size_common (fp
, tp
, sizep
, incrementp
,
136 CTF_TYPE_LSIZE (tp
), tp
->ctt_size
,
137 sizeof (ctf_type_t
), sizeof (ctf_stype_t
),
142 get_vbytes_common (ctf_dict_t
*fp
, unsigned short kind
,
143 ssize_t size _libctf_unused_
, size_t vlen
)
149 return (sizeof (uint32_t));
151 return (sizeof (ctf_slice_t
));
153 return (sizeof (ctf_enum_t
) * vlen
);
163 ctf_set_errno (fp
, ECTF_CORRUPT
);
164 ctf_err_warn (fp
, 0, 0, _("detected invalid CTF kind: %x"), kind
);
170 get_vbytes_v1 (ctf_dict_t
*fp
, unsigned short kind
, ssize_t size
, size_t vlen
)
175 return (sizeof (ctf_array_v1_t
));
177 return (sizeof (unsigned short) * (vlen
+ (vlen
& 1)));
180 if (size
< CTF_LSTRUCT_THRESH_V1
)
181 return (sizeof (ctf_member_v1_t
) * vlen
);
183 return (sizeof (ctf_lmember_v1_t
) * vlen
);
186 return (get_vbytes_common (fp
, kind
, size
, vlen
));
190 get_vbytes_v2 (ctf_dict_t
*fp
, unsigned short kind
, ssize_t size
, size_t vlen
)
195 return (sizeof (ctf_array_t
));
197 return (sizeof (uint32_t) * (vlen
+ (vlen
& 1)));
200 if (size
< CTF_LSTRUCT_THRESH
)
201 return (sizeof (ctf_member_t
) * vlen
);
203 return (sizeof (ctf_lmember_t
) * vlen
);
206 return (get_vbytes_common (fp
, kind
, size
, vlen
));
209 static const ctf_dictops_t ctf_dictops
[] = {
210 {NULL
, NULL
, NULL
, NULL
, NULL
},
212 {get_kind_v1
, get_root_v1
, get_vlen_v1
, get_ctt_size_v1
, get_vbytes_v1
},
213 /* CTF_VERSION_1_UPGRADED_3 */
214 {get_kind_v2
, get_root_v2
, get_vlen_v2
, get_ctt_size_v2
, get_vbytes_v2
},
216 {get_kind_v2
, get_root_v2
, get_vlen_v2
, get_ctt_size_v2
, get_vbytes_v2
},
217 /* CTF_VERSION_3, identical to 2: only new type kinds */
218 {get_kind_v2
, get_root_v2
, get_vlen_v2
, get_ctt_size_v2
, get_vbytes_v2
},
221 /* Initialize the symtab translation table as appropriate for its indexing
222 state. For unindexed symtypetabs, fill each entry with the offset of the CTF
223 type or function data corresponding to each STT_FUNC or STT_OBJECT entry in
224 the symbol table. For indexed symtypetabs, do nothing: the needed
225 initialization for indexed lookups may be quite expensive, so it is done only
226 as needed, when lookups happen. (In particular, the majority of indexed
227 symtypetabs come from the compiler, and all the linker does is iteration over
228 all entries, which doesn't need this initialization.)
230 The SP symbol table section may be NULL if there is no symtab. */
233 init_symtab (ctf_dict_t
*fp
, const ctf_header_t
*hp
, const ctf_sect_t
*sp
)
235 const unsigned char *symp
;
236 int skip_func_info
= 0;
238 uint32_t *xp
= fp
->ctf_sxlate
;
239 uint32_t *xend
= xp
+ fp
->ctf_nsyms
;
241 uint32_t objtoff
= hp
->cth_objtoff
;
242 uint32_t funcoff
= hp
->cth_funcoff
;
244 /* If the CTF_F_NEWFUNCINFO flag is not set, pretend the func info section
245 is empty: this compiler is too old to emit a function info section we
248 if (!(hp
->cth_flags
& CTF_F_NEWFUNCINFO
))
251 if (hp
->cth_objtidxoff
< hp
->cth_funcidxoff
)
252 fp
->ctf_objtidx_names
= (uint32_t *) (fp
->ctf_buf
+ hp
->cth_objtidxoff
);
253 if (hp
->cth_funcidxoff
< hp
->cth_varoff
&& !skip_func_info
)
254 fp
->ctf_funcidx_names
= (uint32_t *) (fp
->ctf_buf
+ hp
->cth_funcidxoff
);
256 /* Don't bother doing the rest if everything is indexed, or if we don't have a
257 symbol table: we will never use it. */
258 if ((fp
->ctf_objtidx_names
&& fp
->ctf_funcidx_names
) || !sp
|| !sp
->cts_data
)
261 /* The CTF data object and function type sections are ordered to match the
262 relative order of the respective symbol types in the symtab, unless there
263 is an index section, in which case the order is arbitrary and the index
264 gives the mapping. If no type information is available for a symbol table
265 entry, a pad is inserted in the CTF section. As a further optimization,
266 anonymous or undefined symbols are omitted from the CTF data. If an
267 index is available for function symbols but not object symbols, or vice
268 versa, we populate the xslate table for the unindexed symbols only. */
270 for (i
= 0, symp
= sp
->cts_data
; xp
< xend
; xp
++, symp
+= sp
->cts_entsize
,
275 switch (sp
->cts_entsize
)
277 case sizeof (Elf64_Sym
):
279 const Elf64_Sym
*symp64
= (Elf64_Sym
*) (uintptr_t) symp
;
280 ctf_elf64_to_link_sym (fp
, &sym
, symp64
, i
);
283 case sizeof (Elf32_Sym
):
285 const Elf32_Sym
*symp32
= (Elf32_Sym
*) (uintptr_t) symp
;
286 ctf_elf32_to_link_sym (fp
, &sym
, symp32
, i
);
293 if (ctf_symtab_skippable (&sym
))
302 if (fp
->ctf_objtidx_names
|| objtoff
>= hp
->cth_funcoff
)
309 objtoff
+= sizeof (uint32_t);
313 if (fp
->ctf_funcidx_names
|| funcoff
>= hp
->cth_objtidxoff
321 funcoff
+= sizeof (uint32_t);
330 ctf_dprintf ("loaded %lu symtab entries\n", fp
->ctf_nsyms
);
334 /* Reset the CTF base pointer and derive the buf pointer from it, initializing
335 everything in the ctf_dict that depends on the base or buf pointers.
337 The original gap between the buf and base pointers, if any -- the original,
338 unconverted CTF header -- is kept, but its contents are not specified and are
342 ctf_set_base (ctf_dict_t
*fp
, const ctf_header_t
*hp
, unsigned char *base
)
344 fp
->ctf_buf
= base
+ (fp
->ctf_buf
- fp
->ctf_base
);
346 fp
->ctf_vars
= (ctf_varent_t
*) ((const char *) fp
->ctf_buf
+
348 fp
->ctf_nvars
= (hp
->cth_typeoff
- hp
->cth_varoff
) / sizeof (ctf_varent_t
);
350 fp
->ctf_str
[CTF_STRTAB_0
].cts_strs
= (const char *) fp
->ctf_buf
352 fp
->ctf_str
[CTF_STRTAB_0
].cts_len
= hp
->cth_strlen
;
354 /* If we have a parent dict name and label, store the relocated string
355 pointers in the CTF dict for easy access later. */
357 /* Note: before conversion, these will be set to values that will be
358 immediately invalidated by the conversion process, but the conversion
359 process will call ctf_set_base() again to fix things up. */
361 if (hp
->cth_parlabel
!= 0)
362 fp
->ctf_parlabel
= ctf_strptr (fp
, hp
->cth_parlabel
);
363 if (hp
->cth_parname
!= 0)
364 fp
->ctf_parname
= ctf_strptr (fp
, hp
->cth_parname
);
365 if (hp
->cth_cuname
!= 0)
366 fp
->ctf_cuname
= ctf_strptr (fp
, hp
->cth_cuname
);
369 ctf_dprintf ("ctf_set_base: CU name %s\n", fp
->ctf_cuname
);
371 ctf_dprintf ("ctf_set_base: parent name %s (label %s)\n",
373 fp
->ctf_parlabel
? fp
->ctf_parlabel
: "<NULL>");
376 /* Set the version of the CTF file. */
378 /* When this is reset, LCTF_* changes behaviour, but there is no guarantee that
379 the variable data list associated with each type has been upgraded: the
380 caller must ensure this has been done in advance. */
383 ctf_set_version (ctf_dict_t
*fp
, ctf_header_t
*cth
, int ctf_version
)
385 fp
->ctf_version
= ctf_version
;
386 cth
->cth_version
= ctf_version
;
387 fp
->ctf_dictops
= &ctf_dictops
[ctf_version
];
391 /* Upgrade the header to CTF_VERSION_3. The upgrade is done in-place. */
393 upgrade_header (ctf_header_t
*hp
)
395 ctf_header_v2_t
*oldhp
= (ctf_header_v2_t
*) hp
;
397 hp
->cth_strlen
= oldhp
->cth_strlen
;
398 hp
->cth_stroff
= oldhp
->cth_stroff
;
399 hp
->cth_typeoff
= oldhp
->cth_typeoff
;
400 hp
->cth_varoff
= oldhp
->cth_varoff
;
401 hp
->cth_funcidxoff
= hp
->cth_varoff
; /* No index sections. */
402 hp
->cth_objtidxoff
= hp
->cth_funcidxoff
;
403 hp
->cth_funcoff
= oldhp
->cth_funcoff
;
404 hp
->cth_objtoff
= oldhp
->cth_objtoff
;
405 hp
->cth_lbloff
= oldhp
->cth_lbloff
;
406 hp
->cth_cuname
= 0; /* No CU name. */
409 /* Upgrade the type table to CTF_VERSION_3 (really CTF_VERSION_1_UPGRADED_3)
412 The upgrade is not done in-place: the ctf_base is moved. ctf_strptr() must
413 not be called before reallocation is complete.
415 Sections not checked here due to nonexistence or nonpopulated state in older
416 formats: objtidx, funcidx.
418 Type kinds not checked here due to nonexistence in older formats:
421 upgrade_types_v1 (ctf_dict_t
*fp
, ctf_header_t
*cth
)
423 const ctf_type_v1_t
*tbuf
;
424 const ctf_type_v1_t
*tend
;
425 unsigned char *ctf_base
, *old_ctf_base
= (unsigned char *) fp
->ctf_dynbase
;
428 ssize_t increase
= 0, size
, increment
, v2increment
, vbytes
, v2bytes
;
429 const ctf_type_v1_t
*tp
;
432 tbuf
= (ctf_type_v1_t
*) (fp
->ctf_buf
+ cth
->cth_typeoff
);
433 tend
= (ctf_type_v1_t
*) (fp
->ctf_buf
+ cth
->cth_stroff
);
435 /* Much like init_types(), this is a two-pass process.
437 First, figure out the new type-section size needed. (It is possible,
438 in theory, for it to be less than the old size, but this is very
439 unlikely. It cannot be so small that cth_typeoff ends up of negative
440 size. We validate this with an assertion below.)
442 We must cater not only for changes in vlen and types sizes but also
443 for changes in 'increment', which happen because v2 places some types
444 into ctf_stype_t where v1 would be forced to use the larger non-stype. */
446 for (tp
= tbuf
; tp
< tend
;
447 tp
= (ctf_type_v1_t
*) ((uintptr_t) tp
+ increment
+ vbytes
))
449 unsigned short kind
= CTF_V1_INFO_KIND (tp
->ctt_info
);
450 unsigned long vlen
= CTF_V1_INFO_VLEN (tp
->ctt_info
);
452 size
= get_ctt_size_v1 (fp
, (const ctf_type_t
*) tp
, NULL
, &increment
);
453 vbytes
= get_vbytes_v1 (fp
, kind
, size
, vlen
);
455 get_ctt_size_v2_unconverted (fp
, (const ctf_type_t
*) tp
, NULL
,
457 v2bytes
= get_vbytes_v2 (fp
, kind
, size
, vlen
);
459 if ((vbytes
< 0) || (size
< 0))
462 increase
+= v2increment
- increment
; /* May be negative. */
463 increase
+= v2bytes
- vbytes
;
466 /* Allocate enough room for the new buffer, then copy everything but the type
467 section into place, and reset the base accordingly. Leave the version
468 number unchanged, so that LCTF_INFO_* still works on the
469 as-yet-untranslated type info. */
471 if ((ctf_base
= malloc (fp
->ctf_size
+ increase
)) == NULL
)
474 /* Start at ctf_buf, not ctf_base, to squeeze out the original header: we
475 never use it and it is unconverted. */
477 memcpy (ctf_base
, fp
->ctf_buf
, cth
->cth_typeoff
);
478 memcpy (ctf_base
+ cth
->cth_stroff
+ increase
,
479 fp
->ctf_buf
+ cth
->cth_stroff
, cth
->cth_strlen
);
481 memset (ctf_base
+ cth
->cth_typeoff
, 0, cth
->cth_stroff
- cth
->cth_typeoff
484 cth
->cth_stroff
+= increase
;
485 fp
->ctf_size
+= increase
;
486 assert (cth
->cth_stroff
>= cth
->cth_typeoff
);
487 fp
->ctf_base
= ctf_base
;
488 fp
->ctf_buf
= ctf_base
;
489 fp
->ctf_dynbase
= ctf_base
;
490 ctf_set_base (fp
, cth
, ctf_base
);
492 t2buf
= (ctf_type_t
*) (fp
->ctf_buf
+ cth
->cth_typeoff
);
494 /* Iterate through all the types again, upgrading them.
496 Everything that hasn't changed can just be outright memcpy()ed.
497 Things that have changed need field-by-field consideration. */
499 for (tp
= tbuf
, t2p
= t2buf
; tp
< tend
;
500 tp
= (ctf_type_v1_t
*) ((uintptr_t) tp
+ increment
+ vbytes
),
501 t2p
= (ctf_type_t
*) ((uintptr_t) t2p
+ v2increment
+ v2bytes
))
503 unsigned short kind
= CTF_V1_INFO_KIND (tp
->ctt_info
);
504 int isroot
= CTF_V1_INFO_ISROOT (tp
->ctt_info
);
505 unsigned long vlen
= CTF_V1_INFO_VLEN (tp
->ctt_info
);
507 void *vdata
, *v2data
;
509 size
= get_ctt_size_v1 (fp
, (const ctf_type_t
*) tp
, NULL
, &increment
);
510 vbytes
= get_vbytes_v1 (fp
, kind
, size
, vlen
);
512 t2p
->ctt_name
= tp
->ctt_name
;
513 t2p
->ctt_info
= CTF_TYPE_INFO (kind
, isroot
, vlen
);
524 t2p
->ctt_type
= tp
->ctt_type
;
533 if ((size_t) size
<= CTF_MAX_SIZE
)
534 t2p
->ctt_size
= size
;
537 t2p
->ctt_lsizehi
= CTF_SIZE_TO_LSIZE_HI (size
);
538 t2p
->ctt_lsizelo
= CTF_SIZE_TO_LSIZE_LO (size
);
543 v2size
= get_ctt_size_v2 (fp
, t2p
, NULL
, &v2increment
);
544 v2bytes
= get_vbytes_v2 (fp
, kind
, v2size
, vlen
);
546 /* Catch out-of-sync get_ctt_size_*(). The count goes wrong if
547 these are not identical (and having them different makes no
548 sense semantically). */
550 assert (size
== v2size
);
552 /* Now the varlen info. */
554 vdata
= (void *) ((uintptr_t) tp
+ increment
);
555 v2data
= (void *) ((uintptr_t) t2p
+ v2increment
);
561 const ctf_array_v1_t
*ap
= (const ctf_array_v1_t
*) vdata
;
562 ctf_array_t
*a2p
= (ctf_array_t
*) v2data
;
564 a2p
->cta_contents
= ap
->cta_contents
;
565 a2p
->cta_index
= ap
->cta_index
;
566 a2p
->cta_nelems
= ap
->cta_nelems
;
573 const ctf_member_v1_t
*m1
= (const ctf_member_v1_t
*) vdata
;
574 const ctf_lmember_v1_t
*lm1
= (const ctf_lmember_v1_t
*) m1
;
575 ctf_member_t
*m2
= (ctf_member_t
*) v2data
;
576 ctf_lmember_t
*lm2
= (ctf_lmember_t
*) m2
;
579 /* We walk all four pointers forward, but only reference the two
580 that are valid for the given size, to avoid quadruplicating all
583 for (i
= vlen
; i
!= 0; i
--, m1
++, lm1
++, m2
++, lm2
++)
586 if (size
< CTF_LSTRUCT_THRESH_V1
)
588 offset
= m1
->ctm_offset
;
589 tmp
.ctm_name
= m1
->ctm_name
;
590 tmp
.ctm_type
= m1
->ctm_type
;
594 offset
= CTF_LMEM_OFFSET (lm1
);
595 tmp
.ctm_name
= lm1
->ctlm_name
;
596 tmp
.ctm_type
= lm1
->ctlm_type
;
598 if (size
< CTF_LSTRUCT_THRESH
)
600 m2
->ctm_name
= tmp
.ctm_name
;
601 m2
->ctm_type
= tmp
.ctm_type
;
602 m2
->ctm_offset
= offset
;
606 lm2
->ctlm_name
= tmp
.ctm_name
;
607 lm2
->ctlm_type
= tmp
.ctm_type
;
608 lm2
->ctlm_offsethi
= CTF_OFFSET_TO_LMEMHI (offset
);
609 lm2
->ctlm_offsetlo
= CTF_OFFSET_TO_LMEMLO (offset
);
617 unsigned short *a1
= (unsigned short *) vdata
;
618 uint32_t *a2
= (uint32_t *) v2data
;
620 for (i
= vlen
; i
!= 0; i
--, a1
++, a2
++)
625 /* Catch out-of-sync get_vbytes_*(). */
626 assert (vbytes
== v2bytes
);
627 memcpy (v2data
, vdata
, vbytes
);
631 /* Verify that the entire region was converted. If not, we are either
632 converting too much, or too little (leading to a buffer overrun either here
633 or at read time, in init_types().) */
635 assert ((size_t) t2p
- (size_t) fp
->ctf_buf
== cth
->cth_stroff
);
637 ctf_set_version (fp
, cth
, CTF_VERSION_1_UPGRADED_3
);
643 /* Upgrade from any earlier version. */
645 upgrade_types (ctf_dict_t
*fp
, ctf_header_t
*cth
)
647 switch (cth
->cth_version
)
649 /* v1 requires a full pass and reformatting. */
651 upgrade_types_v1 (fp
, cth
);
653 /* Already-converted v1 is just like later versions except that its
654 parent/child boundary is unchanged (and much lower). */
656 case CTF_VERSION_1_UPGRADED_3
:
657 fp
->ctf_parmax
= CTF_MAX_PTYPE_V1
;
659 /* v2 is just the same as v3 except for new types and sections:
660 no upgrading required. */
661 case CTF_VERSION_2
: ;
667 /* Initialize the type ID translation table with the byte offset of each type,
668 and initialize the hash tables of each named type. Upgrade the type table to
669 the latest supported representation in the process, if needed, and if this
670 recension of libctf supports upgrading. */
673 init_types (ctf_dict_t
*fp
, ctf_header_t
*cth
)
675 const ctf_type_t
*tbuf
;
676 const ctf_type_t
*tend
;
678 unsigned long pop
[CTF_K_MAX
+ 1] = { 0 };
679 const ctf_type_t
*tp
;
683 /* We determine whether the dict is a child or a parent based on the value of
686 int child
= cth
->cth_parname
!= 0;
687 int nlstructs
= 0, nlunions
= 0;
690 assert (!(fp
->ctf_flags
& LCTF_RDWR
));
692 if (_libctf_unlikely_ (fp
->ctf_version
== CTF_VERSION_1
))
695 if ((err
= upgrade_types (fp
, cth
)) != 0)
696 return err
; /* Upgrade failed. */
699 tbuf
= (ctf_type_t
*) (fp
->ctf_buf
+ cth
->cth_typeoff
);
700 tend
= (ctf_type_t
*) (fp
->ctf_buf
+ cth
->cth_stroff
);
702 /* We make two passes through the entire type section. In this first
703 pass, we count the number of each type and the total number of types. */
705 for (tp
= tbuf
; tp
< tend
; fp
->ctf_typemax
++)
707 unsigned short kind
= LCTF_INFO_KIND (fp
, tp
->ctt_info
);
708 unsigned long vlen
= LCTF_INFO_VLEN (fp
, tp
->ctt_info
);
709 ssize_t size
, increment
, vbytes
;
711 (void) ctf_get_ctt_size (fp
, tp
, &size
, &increment
);
712 vbytes
= LCTF_VBYTES (fp
, kind
, size
, vlen
);
717 /* For forward declarations, ctt_type is the CTF_K_* kind for the tag,
718 so bump that population count too. */
719 if (kind
== CTF_K_FORWARD
)
722 tp
= (ctf_type_t
*) ((uintptr_t) tp
+ increment
+ vbytes
);
728 ctf_dprintf ("CTF dict %p is a child\n", (void *) fp
);
729 fp
->ctf_flags
|= LCTF_CHILD
;
732 ctf_dprintf ("CTF dict %p is a parent\n", (void *) fp
);
734 /* Now that we've counted up the number of each type, we can allocate
735 the hash tables, type translation table, and pointer table. */
737 if ((fp
->ctf_structs
.ctn_readonly
738 = ctf_hash_create (pop
[CTF_K_STRUCT
], ctf_hash_string
,
739 ctf_hash_eq_string
)) == NULL
)
742 if ((fp
->ctf_unions
.ctn_readonly
743 = ctf_hash_create (pop
[CTF_K_UNION
], ctf_hash_string
,
744 ctf_hash_eq_string
)) == NULL
)
747 if ((fp
->ctf_enums
.ctn_readonly
748 = ctf_hash_create (pop
[CTF_K_ENUM
], ctf_hash_string
,
749 ctf_hash_eq_string
)) == NULL
)
752 if ((fp
->ctf_names
.ctn_readonly
753 = ctf_hash_create (pop
[CTF_K_INTEGER
] +
755 pop
[CTF_K_FUNCTION
] +
758 pop
[CTF_K_VOLATILE
] +
762 ctf_hash_eq_string
)) == NULL
)
765 fp
->ctf_txlate
= malloc (sizeof (uint32_t) * (fp
->ctf_typemax
+ 1));
766 fp
->ctf_ptrtab_len
= fp
->ctf_typemax
+ 1;
767 fp
->ctf_ptrtab
= malloc (sizeof (uint32_t) * fp
->ctf_ptrtab_len
);
769 if (fp
->ctf_txlate
== NULL
|| fp
->ctf_ptrtab
== NULL
)
770 return ENOMEM
; /* Memory allocation failed. */
773 *xp
++ = 0; /* Type id 0 is used as a sentinel value. */
775 memset (fp
->ctf_txlate
, 0, sizeof (uint32_t) * (fp
->ctf_typemax
+ 1));
776 memset (fp
->ctf_ptrtab
, 0, sizeof (uint32_t) * (fp
->ctf_typemax
+ 1));
778 /* In the second pass through the types, we fill in each entry of the
779 type and pointer tables and add names to the appropriate hashes. */
781 for (id
= 1, tp
= tbuf
; tp
< tend
; xp
++, id
++)
783 unsigned short kind
= LCTF_INFO_KIND (fp
, tp
->ctt_info
);
784 unsigned short isroot
= LCTF_INFO_ISROOT (fp
, tp
->ctt_info
);
785 unsigned long vlen
= LCTF_INFO_VLEN (fp
, tp
->ctt_info
);
786 ssize_t size
, increment
, vbytes
;
790 (void) ctf_get_ctt_size (fp
, tp
, &size
, &increment
);
791 name
= ctf_strptr (fp
, tp
->ctt_name
);
792 /* Cannot fail: shielded by call in loop above. */
793 vbytes
= LCTF_VBYTES (fp
, kind
, size
, vlen
);
799 /* Names are reused by bit-fields, which are differentiated by their
800 encodings, and so typically we'd record only the first instance of
801 a given intrinsic. However, we replace an existing type with a
802 root-visible version so that we can be sure to find it when
803 checking for conflicting definitions in ctf_add_type(). */
805 if (((ctf_hash_lookup_type (fp
->ctf_names
.ctn_readonly
,
809 err
= ctf_hash_define_type (fp
->ctf_names
.ctn_readonly
, fp
,
810 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
817 /* These kinds have no name, so do not need interning into any
827 err
= ctf_hash_insert_type (fp
->ctf_names
.ctn_readonly
, fp
,
828 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
835 if (size
>= CTF_LSTRUCT_THRESH
)
841 err
= ctf_hash_define_type (fp
->ctf_structs
.ctn_readonly
, fp
,
842 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
851 if (size
>= CTF_LSTRUCT_THRESH
)
857 err
= ctf_hash_define_type (fp
->ctf_unions
.ctn_readonly
, fp
,
858 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
869 err
= ctf_hash_define_type (fp
->ctf_enums
.ctn_readonly
, fp
,
870 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
881 err
= ctf_hash_insert_type (fp
->ctf_names
.ctn_readonly
, fp
,
882 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
890 ctf_names_t
*np
= ctf_name_table (fp
, tp
->ctt_type
);
895 /* Only insert forward tags into the given hash if the type or tag
896 name is not already present. */
897 if (ctf_hash_lookup_type (np
->ctn_readonly
, fp
, name
) == 0)
899 err
= ctf_hash_insert_type (np
->ctn_readonly
, fp
,
900 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
909 /* If the type referenced by the pointer is in this CTF dict, then
910 store the index of the pointer type in fp->ctf_ptrtab[ index of
911 referenced type ]. */
913 if (LCTF_TYPE_ISCHILD (fp
, tp
->ctt_type
) == child
914 && LCTF_TYPE_TO_INDEX (fp
, tp
->ctt_type
) <= fp
->ctf_typemax
)
915 fp
->ctf_ptrtab
[LCTF_TYPE_TO_INDEX (fp
, tp
->ctt_type
)] = id
;
924 err
= ctf_hash_insert_type (fp
->ctf_names
.ctn_readonly
, fp
,
925 LCTF_INDEX_TO_TYPE (fp
, id
, child
),
931 ctf_err_warn (fp
, 0, ECTF_CORRUPT
,
932 _("init_types(): unhandled CTF kind: %x"), kind
);
936 *xp
= (uint32_t) ((uintptr_t) tp
- (uintptr_t) fp
->ctf_buf
);
937 tp
= (ctf_type_t
*) ((uintptr_t) tp
+ increment
+ vbytes
);
940 ctf_dprintf ("%lu total types processed\n", fp
->ctf_typemax
);
941 ctf_dprintf ("%u enum names hashed\n",
942 ctf_hash_size (fp
->ctf_enums
.ctn_readonly
));
943 ctf_dprintf ("%u struct names hashed (%d long)\n",
944 ctf_hash_size (fp
->ctf_structs
.ctn_readonly
), nlstructs
);
945 ctf_dprintf ("%u union names hashed (%d long)\n",
946 ctf_hash_size (fp
->ctf_unions
.ctn_readonly
), nlunions
);
947 ctf_dprintf ("%u base type names hashed\n",
948 ctf_hash_size (fp
->ctf_names
.ctn_readonly
));
950 /* Make an additional pass through the pointer table to find pointers that
951 point to anonymous typedef nodes. If we find one, modify the pointer table
952 so that the pointer is also known to point to the node that is referenced
953 by the anonymous typedef node. */
955 for (id
= 1; id
<= fp
->ctf_typemax
; id
++)
957 if ((dst
= fp
->ctf_ptrtab
[id
]) != 0)
959 tp
= LCTF_INDEX_TO_TYPEPTR (fp
, id
);
961 if (LCTF_INFO_KIND (fp
, tp
->ctt_info
) == CTF_K_TYPEDEF
962 && strcmp (ctf_strptr (fp
, tp
->ctt_name
), "") == 0
963 && LCTF_TYPE_ISCHILD (fp
, tp
->ctt_type
) == child
964 && LCTF_TYPE_TO_INDEX (fp
, tp
->ctt_type
) <= fp
->ctf_typemax
)
965 fp
->ctf_ptrtab
[LCTF_TYPE_TO_INDEX (fp
, tp
->ctt_type
)] = dst
;
972 /* Endianness-flipping routines.
974 We flip everything, mindlessly, even 1-byte entities, so that future
975 expansions do not require changes to this code. */
977 /* < C11? define away static assertions. */
979 #if !defined (__STDC_VERSION__) || __STDC_VERSION__ < 201112L
980 #define _Static_assert(cond, err)
983 /* Swap the endianness of something. */
985 #define swap_thing(x) \
987 _Static_assert (sizeof (x) == 1 || (sizeof (x) % 2 == 0 \
988 && sizeof (x) <= 8), \
989 "Invalid size, update endianness code"); \
990 switch (sizeof (x)) { \
991 case 2: x = bswap_16 (x); break; \
992 case 4: x = bswap_32 (x); break; \
993 case 8: x = bswap_64 (x); break; \
994 case 1: /* Nothing needs doing */ \
999 /* Flip the endianness of the CTF header. */
1002 flip_header (ctf_header_t
*cth
)
1004 swap_thing (cth
->cth_preamble
.ctp_magic
);
1005 swap_thing (cth
->cth_preamble
.ctp_version
);
1006 swap_thing (cth
->cth_preamble
.ctp_flags
);
1007 swap_thing (cth
->cth_parlabel
);
1008 swap_thing (cth
->cth_parname
);
1009 swap_thing (cth
->cth_cuname
);
1010 swap_thing (cth
->cth_objtoff
);
1011 swap_thing (cth
->cth_funcoff
);
1012 swap_thing (cth
->cth_objtidxoff
);
1013 swap_thing (cth
->cth_funcidxoff
);
1014 swap_thing (cth
->cth_varoff
);
1015 swap_thing (cth
->cth_typeoff
);
1016 swap_thing (cth
->cth_stroff
);
1017 swap_thing (cth
->cth_strlen
);
1020 /* Flip the endianness of the label section, an array of ctf_lblent_t. */
1023 flip_lbls (void *start
, size_t len
)
1025 ctf_lblent_t
*lbl
= start
;
1028 for (i
= len
/ sizeof (struct ctf_lblent
); i
> 0; lbl
++, i
--)
1030 swap_thing (lbl
->ctl_label
);
1031 swap_thing (lbl
->ctl_type
);
1035 /* Flip the endianness of the data-object or function sections or their indexes,
1036 all arrays of uint32_t. */
1039 flip_objts (void *start
, size_t len
)
1041 uint32_t *obj
= start
;
1044 for (i
= len
/ sizeof (uint32_t); i
> 0; obj
++, i
--)
1048 /* Flip the endianness of the variable section, an array of ctf_varent_t. */
1051 flip_vars (void *start
, size_t len
)
1053 ctf_varent_t
*var
= start
;
1056 for (i
= len
/ sizeof (struct ctf_varent
); i
> 0; var
++, i
--)
1058 swap_thing (var
->ctv_name
);
1059 swap_thing (var
->ctv_type
);
1063 /* Flip the endianness of the type section, a tagged array of ctf_type or
1064 ctf_stype followed by variable data. */
1067 flip_types (ctf_dict_t
*fp
, void *start
, size_t len
)
1069 ctf_type_t
*t
= start
;
1071 while ((uintptr_t) t
< ((uintptr_t) start
) + len
)
1073 swap_thing (t
->ctt_name
);
1074 swap_thing (t
->ctt_info
);
1075 swap_thing (t
->ctt_size
);
1077 uint32_t kind
= CTF_V2_INFO_KIND (t
->ctt_info
);
1078 size_t size
= t
->ctt_size
;
1079 uint32_t vlen
= CTF_V2_INFO_VLEN (t
->ctt_info
);
1080 size_t vbytes
= get_vbytes_v2 (fp
, kind
, size
, vlen
);
1082 if (_libctf_unlikely_ (size
== CTF_LSIZE_SENT
))
1084 swap_thing (t
->ctt_lsizehi
);
1085 swap_thing (t
->ctt_lsizelo
);
1086 size
= CTF_TYPE_LSIZE (t
);
1087 t
= (ctf_type_t
*) ((uintptr_t) t
+ sizeof (ctf_type_t
));
1090 t
= (ctf_type_t
*) ((uintptr_t) t
+ sizeof (ctf_stype_t
));
1098 case CTF_K_VOLATILE
:
1100 case CTF_K_RESTRICT
:
1101 /* These types have no vlen data to swap. */
1102 assert (vbytes
== 0);
1108 /* These types have a single uint32_t. */
1110 uint32_t *item
= (uint32_t *) t
;
1116 case CTF_K_FUNCTION
:
1118 /* This type has a bunch of uint32_ts. */
1120 uint32_t *item
= (uint32_t *) t
;
1123 for (i
= vlen
; i
> 0; item
++, i
--)
1130 /* This has a single ctf_array_t. */
1132 ctf_array_t
*a
= (ctf_array_t
*) t
;
1134 assert (vbytes
== sizeof (ctf_array_t
));
1135 swap_thing (a
->cta_contents
);
1136 swap_thing (a
->cta_index
);
1137 swap_thing (a
->cta_nelems
);
1144 /* This has a single ctf_slice_t. */
1146 ctf_slice_t
*s
= (ctf_slice_t
*) t
;
1148 assert (vbytes
== sizeof (ctf_slice_t
));
1149 swap_thing (s
->cts_type
);
1150 swap_thing (s
->cts_offset
);
1151 swap_thing (s
->cts_bits
);
1159 /* This has an array of ctf_member or ctf_lmember, depending on
1160 size. We could consider it to be a simple array of uint32_t,
1161 but for safety's sake in case these structures ever acquire
1162 non-uint32_t members, do it member by member. */
1164 if (_libctf_unlikely_ (size
>= CTF_LSTRUCT_THRESH
))
1166 ctf_lmember_t
*lm
= (ctf_lmember_t
*) t
;
1168 for (i
= vlen
; i
> 0; i
--, lm
++)
1170 swap_thing (lm
->ctlm_name
);
1171 swap_thing (lm
->ctlm_offsethi
);
1172 swap_thing (lm
->ctlm_type
);
1173 swap_thing (lm
->ctlm_offsetlo
);
1178 ctf_member_t
*m
= (ctf_member_t
*) t
;
1180 for (i
= vlen
; i
> 0; i
--, m
++)
1182 swap_thing (m
->ctm_name
);
1183 swap_thing (m
->ctm_offset
);
1184 swap_thing (m
->ctm_type
);
1192 /* This has an array of ctf_enum_t. */
1194 ctf_enum_t
*item
= (ctf_enum_t
*) t
;
1197 for (i
= vlen
; i
> 0; item
++, i
--)
1199 swap_thing (item
->cte_name
);
1200 swap_thing (item
->cte_value
);
1205 ctf_err_warn (fp
, 0, ECTF_CORRUPT
,
1206 _("unhandled CTF kind in endianness conversion: %x"),
1208 return ECTF_CORRUPT
;
1211 t
= (ctf_type_t
*) ((uintptr_t) t
+ vbytes
);
1217 /* Flip the endianness of BUF, given the offsets in the (already endian-
1220 All of this stuff happens before the header is fully initialized, so the
1221 LCTF_*() macros cannot be used yet. Since we do not try to endian-convert v1
1222 data, this is no real loss. */
1225 flip_ctf (ctf_dict_t
*fp
, ctf_header_t
*cth
, unsigned char *buf
)
1227 flip_lbls (buf
+ cth
->cth_lbloff
, cth
->cth_objtoff
- cth
->cth_lbloff
);
1228 flip_objts (buf
+ cth
->cth_objtoff
, cth
->cth_funcoff
- cth
->cth_objtoff
);
1229 flip_objts (buf
+ cth
->cth_funcoff
, cth
->cth_objtidxoff
- cth
->cth_funcoff
);
1230 flip_objts (buf
+ cth
->cth_objtidxoff
, cth
->cth_funcidxoff
- cth
->cth_objtidxoff
);
1231 flip_objts (buf
+ cth
->cth_funcidxoff
, cth
->cth_varoff
- cth
->cth_funcidxoff
);
1232 flip_vars (buf
+ cth
->cth_varoff
, cth
->cth_typeoff
- cth
->cth_varoff
);
1233 return flip_types (fp
, buf
+ cth
->cth_typeoff
, cth
->cth_stroff
- cth
->cth_typeoff
);
1236 /* Set up the ctl hashes in a ctf_dict_t. Called by both writable and
1237 non-writable dictionary initialization. */
1238 void ctf_set_ctl_hashes (ctf_dict_t
*fp
)
1240 /* Initialize the ctf_lookup_by_name top-level dictionary. We keep an
1241 array of type name prefixes and the corresponding ctf_hash to use. */
1242 fp
->ctf_lookups
[0].ctl_prefix
= "struct";
1243 fp
->ctf_lookups
[0].ctl_len
= strlen (fp
->ctf_lookups
[0].ctl_prefix
);
1244 fp
->ctf_lookups
[0].ctl_hash
= &fp
->ctf_structs
;
1245 fp
->ctf_lookups
[1].ctl_prefix
= "union";
1246 fp
->ctf_lookups
[1].ctl_len
= strlen (fp
->ctf_lookups
[1].ctl_prefix
);
1247 fp
->ctf_lookups
[1].ctl_hash
= &fp
->ctf_unions
;
1248 fp
->ctf_lookups
[2].ctl_prefix
= "enum";
1249 fp
->ctf_lookups
[2].ctl_len
= strlen (fp
->ctf_lookups
[2].ctl_prefix
);
1250 fp
->ctf_lookups
[2].ctl_hash
= &fp
->ctf_enums
;
1251 fp
->ctf_lookups
[3].ctl_prefix
= _CTF_NULLSTR
;
1252 fp
->ctf_lookups
[3].ctl_len
= strlen (fp
->ctf_lookups
[3].ctl_prefix
);
1253 fp
->ctf_lookups
[3].ctl_hash
= &fp
->ctf_names
;
1254 fp
->ctf_lookups
[4].ctl_prefix
= NULL
;
1255 fp
->ctf_lookups
[4].ctl_len
= 0;
1256 fp
->ctf_lookups
[4].ctl_hash
= NULL
;
1259 /* Open a CTF file, mocking up a suitable ctf_sect. */
1261 ctf_dict_t
*ctf_simple_open (const char *ctfsect
, size_t ctfsect_size
,
1262 const char *symsect
, size_t symsect_size
,
1263 size_t symsect_entsize
,
1264 const char *strsect
, size_t strsect_size
,
1267 return ctf_simple_open_internal (ctfsect
, ctfsect_size
, symsect
, symsect_size
,
1268 symsect_entsize
, strsect
, strsect_size
, NULL
,
1272 /* Open a CTF file, mocking up a suitable ctf_sect and overriding the external
1273 strtab with a synthetic one. */
1275 ctf_dict_t
*ctf_simple_open_internal (const char *ctfsect
, size_t ctfsect_size
,
1276 const char *symsect
, size_t symsect_size
,
1277 size_t symsect_entsize
,
1278 const char *strsect
, size_t strsect_size
,
1279 ctf_dynhash_t
*syn_strtab
, int writable
,
1282 ctf_sect_t skeleton
;
1284 ctf_sect_t ctf_sect
, sym_sect
, str_sect
;
1285 ctf_sect_t
*ctfsectp
= NULL
;
1286 ctf_sect_t
*symsectp
= NULL
;
1287 ctf_sect_t
*strsectp
= NULL
;
1289 skeleton
.cts_name
= _CTF_SECTION
;
1290 skeleton
.cts_entsize
= 1;
1294 memcpy (&ctf_sect
, &skeleton
, sizeof (struct ctf_sect
));
1295 ctf_sect
.cts_data
= ctfsect
;
1296 ctf_sect
.cts_size
= ctfsect_size
;
1297 ctfsectp
= &ctf_sect
;
1302 memcpy (&sym_sect
, &skeleton
, sizeof (struct ctf_sect
));
1303 sym_sect
.cts_data
= symsect
;
1304 sym_sect
.cts_size
= symsect_size
;
1305 sym_sect
.cts_entsize
= symsect_entsize
;
1306 symsectp
= &sym_sect
;
1311 memcpy (&str_sect
, &skeleton
, sizeof (struct ctf_sect
));
1312 str_sect
.cts_data
= strsect
;
1313 str_sect
.cts_size
= strsect_size
;
1314 strsectp
= &str_sect
;
1317 return ctf_bufopen_internal (ctfsectp
, symsectp
, strsectp
, syn_strtab
,
1321 /* Decode the specified CTF buffer and optional symbol table, and create a new
1322 CTF dict representing the symbolic debugging information. This code can
1323 be used directly by the debugger, or it can be used as the engine for
1324 ctf_fdopen() or ctf_open(), below. */
1327 ctf_bufopen (const ctf_sect_t
*ctfsect
, const ctf_sect_t
*symsect
,
1328 const ctf_sect_t
*strsect
, int *errp
)
1330 return ctf_bufopen_internal (ctfsect
, symsect
, strsect
, NULL
, 0, errp
);
1333 /* Like ctf_bufopen, but overriding the external strtab with a synthetic one. */
1336 ctf_bufopen_internal (const ctf_sect_t
*ctfsect
, const ctf_sect_t
*symsect
,
1337 const ctf_sect_t
*strsect
, ctf_dynhash_t
*syn_strtab
,
1338 int writable
, int *errp
)
1340 const ctf_preamble_t
*pp
;
1341 size_t hdrsz
= sizeof (ctf_header_t
);
1344 int foreign_endian
= 0;
1347 libctf_init_debug();
1349 if ((ctfsect
== NULL
) || ((symsect
!= NULL
) &&
1350 ((strsect
== NULL
) && syn_strtab
== NULL
)))
1351 return (ctf_set_open_errno (errp
, EINVAL
));
1353 if (symsect
!= NULL
&& symsect
->cts_entsize
!= sizeof (Elf32_Sym
) &&
1354 symsect
->cts_entsize
!= sizeof (Elf64_Sym
))
1355 return (ctf_set_open_errno (errp
, ECTF_SYMTAB
));
1357 if (symsect
!= NULL
&& symsect
->cts_data
== NULL
)
1358 return (ctf_set_open_errno (errp
, ECTF_SYMBAD
));
1360 if (strsect
!= NULL
&& strsect
->cts_data
== NULL
)
1361 return (ctf_set_open_errno (errp
, ECTF_STRBAD
));
1363 if (ctfsect
->cts_size
< sizeof (ctf_preamble_t
))
1364 return (ctf_set_open_errno (errp
, ECTF_NOCTFBUF
));
1366 pp
= (const ctf_preamble_t
*) ctfsect
->cts_data
;
1368 ctf_dprintf ("ctf_bufopen: magic=0x%x version=%u\n",
1369 pp
->ctp_magic
, pp
->ctp_version
);
1371 /* Validate each part of the CTF header.
1373 First, we validate the preamble (common to all versions). At that point,
1374 we know the endianness and specific header version, and can validate the
1375 version-specific parts including section offsets and alignments.
1377 We specifically do not support foreign-endian old versions. */
1379 if (_libctf_unlikely_ (pp
->ctp_magic
!= CTF_MAGIC
))
1381 if (pp
->ctp_magic
== bswap_16 (CTF_MAGIC
))
1383 if (pp
->ctp_version
!= CTF_VERSION_3
)
1384 return (ctf_set_open_errno (errp
, ECTF_CTFVERS
));
1388 return (ctf_set_open_errno (errp
, ECTF_NOCTFBUF
));
1391 if (_libctf_unlikely_ ((pp
->ctp_version
< CTF_VERSION_1
)
1392 || (pp
->ctp_version
> CTF_VERSION_3
)))
1393 return (ctf_set_open_errno (errp
, ECTF_CTFVERS
));
1395 if ((symsect
!= NULL
) && (pp
->ctp_version
< CTF_VERSION_2
))
1397 /* The symtab can contain function entries which contain embedded ctf
1398 info. We do not support dynamically upgrading such entries (none
1399 should exist in any case, since dwarf2ctf does not create them). */
1401 ctf_err_warn (NULL
, 0, ECTF_NOTSUP
, _("ctf_bufopen: CTF version %d "
1402 "symsect not supported"),
1404 return (ctf_set_open_errno (errp
, ECTF_NOTSUP
));
1407 if (pp
->ctp_version
< CTF_VERSION_3
)
1408 hdrsz
= sizeof (ctf_header_v2_t
);
1410 if (_libctf_unlikely_ (pp
->ctp_flags
> CTF_F_MAX
))
1412 ctf_err_warn (NULL
, 0, ECTF_FLAGS
, _("ctf_bufopen: invalid header "
1414 (unsigned int) pp
->ctp_flags
);
1415 return (ctf_set_open_errno (errp
, ECTF_FLAGS
));
1418 if (ctfsect
->cts_size
< hdrsz
)
1419 return (ctf_set_open_errno (errp
, ECTF_NOCTFBUF
));
1421 if ((fp
= malloc (sizeof (ctf_dict_t
))) == NULL
)
1422 return (ctf_set_open_errno (errp
, ENOMEM
));
1424 memset (fp
, 0, sizeof (ctf_dict_t
));
1427 fp
->ctf_flags
|= LCTF_RDWR
;
1429 if ((fp
->ctf_header
= malloc (sizeof (struct ctf_header
))) == NULL
)
1432 return (ctf_set_open_errno (errp
, ENOMEM
));
1434 hp
= fp
->ctf_header
;
1435 memcpy (hp
, ctfsect
->cts_data
, hdrsz
);
1436 if (pp
->ctp_version
< CTF_VERSION_3
)
1437 upgrade_header (hp
);
1441 fp
->ctf_openflags
= hp
->cth_flags
;
1442 fp
->ctf_size
= hp
->cth_stroff
+ hp
->cth_strlen
;
1444 ctf_dprintf ("ctf_bufopen: uncompressed size=%lu\n",
1445 (unsigned long) fp
->ctf_size
);
1447 if (hp
->cth_lbloff
> fp
->ctf_size
|| hp
->cth_objtoff
> fp
->ctf_size
1448 || hp
->cth_funcoff
> fp
->ctf_size
|| hp
->cth_objtidxoff
> fp
->ctf_size
1449 || hp
->cth_funcidxoff
> fp
->ctf_size
|| hp
->cth_typeoff
> fp
->ctf_size
1450 || hp
->cth_stroff
> fp
->ctf_size
)
1452 ctf_err_warn (NULL
, 0, ECTF_CORRUPT
, _("header offset exceeds CTF size"));
1453 return (ctf_set_open_errno (errp
, ECTF_CORRUPT
));
1456 if (hp
->cth_lbloff
> hp
->cth_objtoff
1457 || hp
->cth_objtoff
> hp
->cth_funcoff
1458 || hp
->cth_funcoff
> hp
->cth_typeoff
1459 || hp
->cth_funcoff
> hp
->cth_objtidxoff
1460 || hp
->cth_objtidxoff
> hp
->cth_funcidxoff
1461 || hp
->cth_funcidxoff
> hp
->cth_varoff
1462 || hp
->cth_varoff
> hp
->cth_typeoff
|| hp
->cth_typeoff
> hp
->cth_stroff
)
1464 ctf_err_warn (NULL
, 0, ECTF_CORRUPT
, _("overlapping CTF sections"));
1465 return (ctf_set_open_errno (errp
, ECTF_CORRUPT
));
1468 if ((hp
->cth_lbloff
& 3) || (hp
->cth_objtoff
& 2)
1469 || (hp
->cth_funcoff
& 2) || (hp
->cth_objtidxoff
& 2)
1470 || (hp
->cth_funcidxoff
& 2) || (hp
->cth_varoff
& 3)
1471 || (hp
->cth_typeoff
& 3))
1473 ctf_err_warn (NULL
, 0, ECTF_CORRUPT
,
1474 _("CTF sections not properly aligned"));
1475 return (ctf_set_open_errno (errp
, ECTF_CORRUPT
));
1478 /* This invariant will be lifted in v4, but for now it is true. */
1480 if ((hp
->cth_funcidxoff
- hp
->cth_objtidxoff
!= 0) &&
1481 (hp
->cth_funcidxoff
- hp
->cth_objtidxoff
1482 != hp
->cth_funcoff
- hp
->cth_objtoff
))
1484 ctf_err_warn (NULL
, 0, ECTF_CORRUPT
,
1485 _("Object index section exists is neither empty nor the "
1486 "same length as the object section: %u versus %u "
1487 "bytes"), hp
->cth_funcoff
- hp
->cth_objtoff
,
1488 hp
->cth_funcidxoff
- hp
->cth_objtidxoff
);
1489 return (ctf_set_open_errno (errp
, ECTF_CORRUPT
));
1492 if ((hp
->cth_varoff
- hp
->cth_funcidxoff
!= 0) &&
1493 (hp
->cth_varoff
- hp
->cth_funcidxoff
1494 != hp
->cth_objtidxoff
- hp
->cth_funcoff
))
1496 ctf_err_warn (NULL
, 0, ECTF_CORRUPT
,
1497 _("Function index section exists is neither empty nor the "
1498 "same length as the function section: %u versus %u "
1499 "bytes"), hp
->cth_objtidxoff
- hp
->cth_funcoff
,
1500 hp
->cth_varoff
- hp
->cth_funcidxoff
);
1501 return (ctf_set_open_errno (errp
, ECTF_CORRUPT
));
1504 /* Once everything is determined to be valid, attempt to decompress the CTF
1505 data buffer if it is compressed, or copy it into new storage if it is not
1506 compressed but needs endian-flipping. Otherwise we just put the data
1507 section's buffer pointer into ctf_buf, below. */
1509 /* Note: if this is a v1 buffer, it will be reallocated and expanded by
1512 if (hp
->cth_flags
& CTF_F_COMPRESS
)
1519 /* We are allocating this ourselves, so we can drop the ctf header
1520 copy in favour of ctf->ctf_header. */
1522 if ((fp
->ctf_base
= malloc (fp
->ctf_size
)) == NULL
)
1527 fp
->ctf_dynbase
= fp
->ctf_base
;
1528 hp
->cth_flags
&= ~CTF_F_COMPRESS
;
1530 src
= (unsigned char *) ctfsect
->cts_data
+ hdrsz
;
1531 srclen
= ctfsect
->cts_size
- hdrsz
;
1532 dstlen
= fp
->ctf_size
;
1533 fp
->ctf_buf
= fp
->ctf_base
;
1535 if ((rc
= uncompress (fp
->ctf_base
, &dstlen
, src
, srclen
)) != Z_OK
)
1537 ctf_err_warn (NULL
, 0, ECTF_DECOMPRESS
, _("zlib inflate err: %s"),
1539 err
= ECTF_DECOMPRESS
;
1543 if ((size_t) dstlen
!= fp
->ctf_size
)
1545 ctf_err_warn (NULL
, 0, ECTF_CORRUPT
,
1546 _("zlib inflate short: got %lu of %lu bytes"),
1547 (unsigned long) dstlen
, (unsigned long) fp
->ctf_size
);
1552 else if (foreign_endian
)
1554 if ((fp
->ctf_base
= malloc (fp
->ctf_size
)) == NULL
)
1559 fp
->ctf_dynbase
= fp
->ctf_base
;
1560 memcpy (fp
->ctf_base
, ((unsigned char *) ctfsect
->cts_data
) + hdrsz
,
1562 fp
->ctf_buf
= fp
->ctf_base
;
1566 /* We are just using the section passed in -- but its header may be an old
1567 version. Point ctf_buf past the old header, and never touch it
1569 fp
->ctf_base
= (unsigned char *) ctfsect
->cts_data
;
1570 fp
->ctf_dynbase
= NULL
;
1571 fp
->ctf_buf
= fp
->ctf_base
+ hdrsz
;
1574 /* Once we have uncompressed and validated the CTF data buffer, we can
1575 proceed with initializing the ctf_dict_t we allocated above.
1577 Nothing that depends on buf or base should be set directly in this function
1578 before the init_types() call, because it may be reallocated during
1579 transparent upgrade if this recension of libctf is so configured: see
1582 ctf_set_version (fp
, hp
, hp
->cth_version
);
1583 ctf_str_create_atoms (fp
);
1584 fp
->ctf_parmax
= CTF_MAX_PTYPE
;
1585 memcpy (&fp
->ctf_data
, ctfsect
, sizeof (ctf_sect_t
));
1587 if (symsect
!= NULL
)
1589 memcpy (&fp
->ctf_symtab
, symsect
, sizeof (ctf_sect_t
));
1590 memcpy (&fp
->ctf_strtab
, strsect
, sizeof (ctf_sect_t
));
1593 if (fp
->ctf_data
.cts_name
!= NULL
)
1594 if ((fp
->ctf_data
.cts_name
= strdup (fp
->ctf_data
.cts_name
)) == NULL
)
1599 if (fp
->ctf_symtab
.cts_name
!= NULL
)
1600 if ((fp
->ctf_symtab
.cts_name
= strdup (fp
->ctf_symtab
.cts_name
)) == NULL
)
1605 if (fp
->ctf_strtab
.cts_name
!= NULL
)
1606 if ((fp
->ctf_strtab
.cts_name
= strdup (fp
->ctf_strtab
.cts_name
)) == NULL
)
1612 if (fp
->ctf_data
.cts_name
== NULL
)
1613 fp
->ctf_data
.cts_name
= _CTF_NULLSTR
;
1614 if (fp
->ctf_symtab
.cts_name
== NULL
)
1615 fp
->ctf_symtab
.cts_name
= _CTF_NULLSTR
;
1616 if (fp
->ctf_strtab
.cts_name
== NULL
)
1617 fp
->ctf_strtab
.cts_name
= _CTF_NULLSTR
;
1619 if (strsect
!= NULL
)
1621 fp
->ctf_str
[CTF_STRTAB_1
].cts_strs
= strsect
->cts_data
;
1622 fp
->ctf_str
[CTF_STRTAB_1
].cts_len
= strsect
->cts_size
;
1624 fp
->ctf_syn_ext_strtab
= syn_strtab
;
1626 if (foreign_endian
&&
1627 (err
= flip_ctf (fp
, hp
, fp
->ctf_buf
)) != 0)
1629 /* We can be certain that flip_ctf() will have endian-flipped everything
1630 other than the types table when we return. In particular the header
1631 is fine, so set it, to allow freeing to use the usual code path. */
1633 ctf_set_base (fp
, hp
, fp
->ctf_base
);
1637 ctf_set_base (fp
, hp
, fp
->ctf_base
);
1639 /* No need to do anything else for dynamic dicts: they do not support symbol
1640 lookups, and the type table is maintained in the dthashes. */
1641 if (fp
->ctf_flags
& LCTF_RDWR
)
1647 if ((err
= init_types (fp
, hp
)) != 0)
1650 /* Allocate and initialize the symtab translation table, pointed to by
1651 ctf_sxlate, and the corresponding index sections. This table may be too
1652 large for the actual size of the object and function info sections: if so,
1653 ctf_nsyms will be adjusted and the excess will never be used. It's
1654 possible to do indexed symbol lookups even without a symbol table, so check
1655 even in that case. */
1657 if (symsect
!= NULL
)
1659 fp
->ctf_nsyms
= symsect
->cts_size
/ symsect
->cts_entsize
;
1660 fp
->ctf_sxlate
= malloc (fp
->ctf_nsyms
* sizeof (uint32_t));
1662 if (fp
->ctf_sxlate
== NULL
)
1669 if ((err
= init_symtab (fp
, hp
, symsect
)) != 0)
1672 ctf_set_ctl_hashes (fp
);
1674 if (symsect
!= NULL
)
1676 if (symsect
->cts_entsize
== sizeof (Elf64_Sym
))
1677 (void) ctf_setmodel (fp
, CTF_MODEL_LP64
);
1679 (void) ctf_setmodel (fp
, CTF_MODEL_ILP32
);
1682 (void) ctf_setmodel (fp
, CTF_MODEL_NATIVE
);
1688 ctf_set_open_errno (errp
, err
);
1689 ctf_err_warn_to_open (fp
);
1690 ctf_dict_close (fp
);
1694 /* Bump the refcount on the specified CTF dict, to allow export of ctf_dict_t's
1695 from iterators that open and close the ctf_dict_t around the loop. (This
1696 does not extend their lifetime beyond that of the ctf_archive_t in which they
1700 ctf_ref (ctf_dict_t
*fp
)
1705 /* Close the specified CTF dict and free associated data structures. Note that
1706 ctf_dict_close() is a reference counted operation: if the specified file is
1707 the parent of other active dict, its reference count will be greater than one
1708 and it will be freed later when no active children exist. */
1711 ctf_dict_close (ctf_dict_t
*fp
)
1713 ctf_dtdef_t
*dtd
, *ntd
;
1714 ctf_dvdef_t
*dvd
, *nvd
;
1715 ctf_in_flight_dynsym_t
*did
, *nid
;
1716 ctf_err_warning_t
*err
, *nerr
;
1719 return; /* Allow ctf_dict_close(NULL) to simplify caller code. */
1721 ctf_dprintf ("ctf_dict_close(%p) refcnt=%u\n", (void *) fp
, fp
->ctf_refcnt
);
1723 if (fp
->ctf_refcnt
> 1)
1729 /* It is possible to recurse back in here, notably if dicts in the
1730 ctf_link_inputs or ctf_link_outputs cite this dict as a parent without
1731 using ctf_import_unref. Do nothing in that case. */
1732 if (fp
->ctf_refcnt
== 0)
1736 free (fp
->ctf_dyncuname
);
1737 free (fp
->ctf_dynparname
);
1738 if (fp
->ctf_parent
&& !fp
->ctf_parent_unreffed
)
1739 ctf_dict_close (fp
->ctf_parent
);
1741 for (dtd
= ctf_list_next (&fp
->ctf_dtdefs
); dtd
!= NULL
; dtd
= ntd
)
1743 ntd
= ctf_list_next (dtd
);
1744 ctf_dtd_delete (fp
, dtd
);
1746 ctf_dynhash_destroy (fp
->ctf_dthash
);
1747 if (fp
->ctf_flags
& LCTF_RDWR
)
1749 ctf_dynhash_destroy (fp
->ctf_structs
.ctn_writable
);
1750 ctf_dynhash_destroy (fp
->ctf_unions
.ctn_writable
);
1751 ctf_dynhash_destroy (fp
->ctf_enums
.ctn_writable
);
1752 ctf_dynhash_destroy (fp
->ctf_names
.ctn_writable
);
1756 ctf_hash_destroy (fp
->ctf_structs
.ctn_readonly
);
1757 ctf_hash_destroy (fp
->ctf_unions
.ctn_readonly
);
1758 ctf_hash_destroy (fp
->ctf_enums
.ctn_readonly
);
1759 ctf_hash_destroy (fp
->ctf_names
.ctn_readonly
);
1762 for (dvd
= ctf_list_next (&fp
->ctf_dvdefs
); dvd
!= NULL
; dvd
= nvd
)
1764 nvd
= ctf_list_next (dvd
);
1765 ctf_dvd_delete (fp
, dvd
);
1767 ctf_dynhash_destroy (fp
->ctf_dvhash
);
1769 free (fp
->ctf_funcidx_sxlate
);
1770 free (fp
->ctf_objtidx_sxlate
);
1771 ctf_dynhash_destroy (fp
->ctf_objthash
);
1772 ctf_dynhash_destroy (fp
->ctf_funchash
);
1773 free (fp
->ctf_dynsymidx
);
1774 ctf_dynhash_destroy (fp
->ctf_dynsyms
);
1775 for (did
= ctf_list_next (&fp
->ctf_in_flight_dynsyms
); did
!= NULL
; did
= nid
)
1777 nid
= ctf_list_next (did
);
1778 ctf_list_delete (&fp
->ctf_in_flight_dynsyms
, did
);
1782 ctf_str_free_atoms (fp
);
1783 free (fp
->ctf_tmp_typeslice
);
1785 if (fp
->ctf_data
.cts_name
!= _CTF_NULLSTR
)
1786 free ((char *) fp
->ctf_data
.cts_name
);
1788 if (fp
->ctf_symtab
.cts_name
!= _CTF_NULLSTR
)
1789 free ((char *) fp
->ctf_symtab
.cts_name
);
1791 if (fp
->ctf_strtab
.cts_name
!= _CTF_NULLSTR
)
1792 free ((char *) fp
->ctf_strtab
.cts_name
);
1793 else if (fp
->ctf_data_mmapped
)
1794 ctf_munmap (fp
->ctf_data_mmapped
, fp
->ctf_data_mmapped_len
);
1796 free (fp
->ctf_dynbase
);
1798 ctf_dynhash_destroy (fp
->ctf_syn_ext_strtab
);
1799 ctf_dynhash_destroy (fp
->ctf_link_inputs
);
1800 ctf_dynhash_destroy (fp
->ctf_link_outputs
);
1801 ctf_dynhash_destroy (fp
->ctf_link_type_mapping
);
1802 ctf_dynhash_destroy (fp
->ctf_link_in_cu_mapping
);
1803 ctf_dynhash_destroy (fp
->ctf_link_out_cu_mapping
);
1804 ctf_dynhash_destroy (fp
->ctf_add_processing
);
1805 ctf_dedup_fini (fp
, NULL
, 0);
1806 ctf_dynset_destroy (fp
->ctf_dedup_atoms_alloc
);
1808 for (err
= ctf_list_next (&fp
->ctf_errs_warnings
); err
!= NULL
; err
= nerr
)
1810 nerr
= ctf_list_next (err
);
1811 ctf_list_delete (&fp
->ctf_errs_warnings
, err
);
1812 free (err
->cew_text
);
1816 free (fp
->ctf_sxlate
);
1817 free (fp
->ctf_txlate
);
1818 free (fp
->ctf_ptrtab
);
1820 free (fp
->ctf_header
);
1824 /* Backward compatibility. */
1826 ctf_file_close (ctf_file_t
*fp
)
1828 ctf_dict_close (fp
);
1831 /* The converse of ctf_open(). ctf_open() disguises whatever it opens as an
1832 archive, so closing one is just like closing an archive. */
1834 ctf_close (ctf_archive_t
*arc
)
1836 ctf_arc_close (arc
);
1839 /* Get the CTF archive from which this ctf_dict_t is derived. */
1841 ctf_get_arc (const ctf_dict_t
*fp
)
1843 return fp
->ctf_archive
;
1846 /* Return the ctfsect out of the core ctf_impl. Useful for freeing the
1847 ctfsect's data * after ctf_dict_close(), which is why we return the actual
1848 structure, not a pointer to it, since that is likely to become a pointer to
1849 freed data before the return value is used under the expected use case of
1850 ctf_getsect()/ ctf_dict_close()/free(). */
1852 ctf_getdatasect (const ctf_dict_t
*fp
)
1854 return fp
->ctf_data
;
1858 ctf_getsymsect (const ctf_dict_t
*fp
)
1860 return fp
->ctf_symtab
;
1864 ctf_getstrsect (const ctf_dict_t
*fp
)
1866 return fp
->ctf_strtab
;
1869 /* Return the CTF handle for the parent CTF dict, if one exists. Otherwise
1870 return NULL to indicate this dict has no imported parent. */
1872 ctf_parent_dict (ctf_dict_t
*fp
)
1874 return fp
->ctf_parent
;
1877 /* Backward compatibility. */
1879 ctf_parent_file (ctf_dict_t
*fp
)
1881 return ctf_parent_dict (fp
);
1884 /* Return the name of the parent CTF dict, if one exists, or NULL otherwise. */
1886 ctf_parent_name (ctf_dict_t
*fp
)
1888 return fp
->ctf_parname
;
1891 /* Set the parent name. It is an error to call this routine without calling
1892 ctf_import() at some point. */
1894 ctf_parent_name_set (ctf_dict_t
*fp
, const char *name
)
1896 if (fp
->ctf_dynparname
!= NULL
)
1897 free (fp
->ctf_dynparname
);
1899 if ((fp
->ctf_dynparname
= strdup (name
)) == NULL
)
1900 return (ctf_set_errno (fp
, ENOMEM
));
1901 fp
->ctf_parname
= fp
->ctf_dynparname
;
1905 /* Return the name of the compilation unit this CTF file applies to. Usually
1906 non-NULL only for non-parent dicts. */
1908 ctf_cuname (ctf_dict_t
*fp
)
1910 return fp
->ctf_cuname
;
1913 /* Set the compilation unit name. */
1915 ctf_cuname_set (ctf_dict_t
*fp
, const char *name
)
1917 if (fp
->ctf_dyncuname
!= NULL
)
1918 free (fp
->ctf_dyncuname
);
1920 if ((fp
->ctf_dyncuname
= strdup (name
)) == NULL
)
1921 return (ctf_set_errno (fp
, ENOMEM
));
1922 fp
->ctf_cuname
= fp
->ctf_dyncuname
;
1926 /* Import the types from the specified parent dict by storing a pointer to it in
1927 ctf_parent and incrementing its reference count. Only one parent is allowed:
1928 if a parent already exists, it is replaced by the new parent. */
1930 ctf_import (ctf_dict_t
*fp
, ctf_dict_t
*pfp
)
1932 if (fp
== NULL
|| fp
== pfp
|| (pfp
!= NULL
&& pfp
->ctf_refcnt
== 0))
1933 return (ctf_set_errno (fp
, EINVAL
));
1935 if (pfp
!= NULL
&& pfp
->ctf_dmodel
!= fp
->ctf_dmodel
)
1936 return (ctf_set_errno (fp
, ECTF_DMODEL
));
1938 if (fp
->ctf_parent
&& !fp
->ctf_parent_unreffed
)
1939 ctf_dict_close (fp
->ctf_parent
);
1940 fp
->ctf_parent
= NULL
;
1946 if (fp
->ctf_parname
== NULL
)
1947 if ((err
= ctf_parent_name_set (fp
, "PARENT")) < 0)
1950 fp
->ctf_flags
|= LCTF_CHILD
;
1952 fp
->ctf_parent_unreffed
= 0;
1955 fp
->ctf_parent
= pfp
;
1959 /* Like ctf_import, but does not increment the refcount on the imported parent
1960 or close it at any point: as a result it can go away at any time and the
1961 caller must do all freeing itself. Used internally to avoid refcount
1964 ctf_import_unref (ctf_dict_t
*fp
, ctf_dict_t
*pfp
)
1966 if (fp
== NULL
|| fp
== pfp
|| (pfp
!= NULL
&& pfp
->ctf_refcnt
== 0))
1967 return (ctf_set_errno (fp
, EINVAL
));
1969 if (pfp
!= NULL
&& pfp
->ctf_dmodel
!= fp
->ctf_dmodel
)
1970 return (ctf_set_errno (fp
, ECTF_DMODEL
));
1972 if (fp
->ctf_parent
&& !fp
->ctf_parent_unreffed
)
1973 ctf_dict_close (fp
->ctf_parent
);
1974 fp
->ctf_parent
= NULL
;
1980 if (fp
->ctf_parname
== NULL
)
1981 if ((err
= ctf_parent_name_set (fp
, "PARENT")) < 0)
1984 fp
->ctf_flags
|= LCTF_CHILD
;
1985 fp
->ctf_parent_unreffed
= 1;
1988 fp
->ctf_parent
= pfp
;
1992 /* Set the data model constant for the CTF dict. */
1994 ctf_setmodel (ctf_dict_t
*fp
, int model
)
1996 const ctf_dmodel_t
*dp
;
1998 for (dp
= _libctf_models
; dp
->ctd_name
!= NULL
; dp
++)
2000 if (dp
->ctd_code
== model
)
2002 fp
->ctf_dmodel
= dp
;
2007 return (ctf_set_errno (fp
, EINVAL
));
2010 /* Return the data model constant for the CTF dict. */
2012 ctf_getmodel (ctf_dict_t
*fp
)
2014 return fp
->ctf_dmodel
->ctd_code
;
2017 /* The caller can hang an arbitrary pointer off each ctf_dict_t using this
2020 ctf_setspecific (ctf_dict_t
*fp
, void *data
)
2022 fp
->ctf_specific
= data
;
2025 /* Retrieve the arbitrary pointer again. */
2027 ctf_getspecific (ctf_dict_t
*fp
)
2029 return fp
->ctf_specific
;