File indexing completed on 2024-05-18 08:29:41
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef _CTF_API_H
0025 #define _CTF_API_H
0026
0027 #include <sys/types.h>
0028 #include <ctf.h>
0029 #include <zlib.h>
0030
0031 #ifdef __cplusplus
0032 extern "C"
0033 {
0034 #endif
0035
0036
0037
0038
0039
0040
0041
0042
0043 typedef struct ctf_dict ctf_dict_t;
0044 typedef struct ctf_archive_internal ctf_archive_t;
0045 typedef unsigned long ctf_id_t;
0046
0047
0048
0049
0050 struct bfd;
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061 typedef struct ctf_sect
0062 {
0063 const char *cts_name;
0064 const void *cts_data;
0065 size_t cts_size;
0066 size_t cts_entsize;
0067 } ctf_sect_t;
0068
0069
0070
0071
0072
0073
0074 typedef struct ctf_link_sym
0075 {
0076
0077
0078
0079
0080 const char *st_name;
0081 size_t st_nameidx;
0082 int st_nameidx_set;
0083 uint32_t st_symidx;
0084 uint32_t st_shndx;
0085 uint32_t st_type;
0086 uint32_t st_value;
0087 } ctf_link_sym_t;
0088
0089
0090
0091
0092 #define CTF_LINK_SHARE_UNCONFLICTED 0x0
0093
0094
0095 #define CTF_LINK_SHARE_DUPLICATED 0x1
0096
0097
0098
0099 #define CTF_LINK_NONDEDUP 0x2
0100
0101
0102
0103 #define CTF_LINK_EMPTY_CU_MAPPINGS 0x4
0104
0105
0106 #define CTF_LINK_OMIT_VARIABLES_SECTION 0x8
0107
0108
0109
0110
0111
0112
0113
0114
0115 #define CTF_LINK_NO_FILTER_REPORTED_SYMS 0x10
0116
0117
0118
0119 typedef enum ctf_sect_names
0120 {
0121 CTF_SECT_HEADER,
0122 CTF_SECT_LABEL,
0123 CTF_SECT_OBJT,
0124 CTF_SECT_OBJTIDX = CTF_SECT_OBJT,
0125 CTF_SECT_FUNC,
0126 CTF_SECT_FUNCIDX = CTF_SECT_FUNC,
0127 CTF_SECT_VAR,
0128 CTF_SECT_TYPE,
0129 CTF_SECT_STR
0130 } ctf_sect_names_t;
0131
0132
0133
0134
0135
0136 typedef struct ctf_encoding
0137 {
0138 uint32_t cte_format;
0139 uint32_t cte_offset;
0140 uint32_t cte_bits;
0141 } ctf_encoding_t;
0142
0143 typedef struct ctf_membinfo
0144 {
0145 ctf_id_t ctm_type;
0146 unsigned long ctm_offset;
0147 } ctf_membinfo_t;
0148
0149 typedef struct ctf_arinfo
0150 {
0151 ctf_id_t ctr_contents;
0152 ctf_id_t ctr_index;
0153 uint32_t ctr_nelems;
0154 } ctf_arinfo_t;
0155
0156 typedef struct ctf_funcinfo
0157 {
0158 ctf_id_t ctc_return;
0159 uint32_t ctc_argc;
0160 uint32_t ctc_flags;
0161 } ctf_funcinfo_t;
0162
0163 typedef struct ctf_lblinfo
0164 {
0165 ctf_id_t ctb_type;
0166 } ctf_lblinfo_t;
0167
0168 typedef struct ctf_snapshot_id
0169 {
0170 unsigned long dtd_id;
0171 unsigned long snapshot_id;
0172 } ctf_snapshot_id_t;
0173
0174 #define CTF_FUNC_VARARG 0x1
0175
0176
0177
0178
0179 #define CTF_ERR ((ctf_id_t) -1L)
0180
0181
0182
0183
0184
0185
0186 #define _CTF_ERRORS \
0187 _CTF_FIRST (ECTF_FMT, "File is not in CTF or ELF format.") \
0188 _CTF_ITEM (ECTF_BFDERR, "BFD error.") \
0189 _CTF_ITEM (ECTF_CTFVERS, "CTF dict version is too new for libctf.") \
0190 _CTF_ITEM (ECTF_BFD_AMBIGUOUS, "Ambiguous BFD target.") \
0191 _CTF_ITEM (ECTF_SYMTAB, "Symbol table uses invalid entry size.") \
0192 _CTF_ITEM (ECTF_SYMBAD, "Symbol table data buffer is not valid.") \
0193 _CTF_ITEM (ECTF_STRBAD, "String table data buffer is not valid.") \
0194 _CTF_ITEM (ECTF_CORRUPT, "File data structure corruption detected.") \
0195 _CTF_ITEM (ECTF_NOCTFDATA, "File does not contain CTF data.") \
0196 _CTF_ITEM (ECTF_NOCTFBUF, "Buffer does not contain CTF data.") \
0197 _CTF_ITEM (ECTF_NOSYMTAB, "Symbol table information is not available.") \
0198 _CTF_ITEM (ECTF_NOPARENT, "The parent CTF dictionary is unavailable.") \
0199 _CTF_ITEM (ECTF_DMODEL, "Data model mismatch.") \
0200 _CTF_ITEM (ECTF_LINKADDEDLATE, "File added to link too late.") \
0201 _CTF_ITEM (ECTF_ZALLOC, "Failed to allocate (de)compression buffer.") \
0202 _CTF_ITEM (ECTF_DECOMPRESS, "Failed to decompress CTF data.") \
0203 _CTF_ITEM (ECTF_STRTAB, "External string table is not available.") \
0204 _CTF_ITEM (ECTF_BADNAME, "String name offset is corrupt.") \
0205 _CTF_ITEM (ECTF_BADID, "Invalid type identifier.") \
0206 _CTF_ITEM (ECTF_NOTSOU, "Type is not a struct or union.") \
0207 _CTF_ITEM (ECTF_NOTENUM, "Type is not an enum.") \
0208 _CTF_ITEM (ECTF_NOTSUE, "Type is not a struct, union, or enum.") \
0209 _CTF_ITEM (ECTF_NOTINTFP, "Type is not an integer, float, or enum.") \
0210 _CTF_ITEM (ECTF_NOTARRAY, "Type is not an array.") \
0211 _CTF_ITEM (ECTF_NOTREF, "Type does not reference another type.") \
0212 _CTF_ITEM (ECTF_NAMELEN, "Buffer is too small to hold type name.") \
0213 _CTF_ITEM (ECTF_NOTYPE, "No type found corresponding to name.") \
0214 _CTF_ITEM (ECTF_SYNTAX, "Syntax error in type name.") \
0215 _CTF_ITEM (ECTF_NOTFUNC, "Symbol table entry or type is not a function.") \
0216 _CTF_ITEM (ECTF_NOFUNCDAT, "No function information available for function.") \
0217 _CTF_ITEM (ECTF_NOTDATA, "Symbol table entry does not refer to a data object.") \
0218 _CTF_ITEM (ECTF_NOTYPEDAT, "No type information available for symbol.") \
0219 _CTF_ITEM (ECTF_NOLABEL, "No label found corresponding to name.") \
0220 _CTF_ITEM (ECTF_NOLABELDATA, "File does not contain any labels.") \
0221 _CTF_ITEM (ECTF_NOTSUP, "Feature not supported.") \
0222 _CTF_ITEM (ECTF_NOENUMNAM, "Enum element name not found.") \
0223 _CTF_ITEM (ECTF_NOMEMBNAM, "Member name not found.") \
0224 _CTF_ITEM (ECTF_RDONLY, "CTF container is read-only.") \
0225 _CTF_ITEM (ECTF_DTFULL, "CTF type is full (no more members allowed).") \
0226 _CTF_ITEM (ECTF_FULL, "CTF container is full.") \
0227 _CTF_ITEM (ECTF_DUPLICATE, "Duplicate member or variable name.") \
0228 _CTF_ITEM (ECTF_CONFLICT, "Conflicting type is already defined.") \
0229 _CTF_ITEM (ECTF_OVERROLLBACK, "Attempt to roll back past a ctf_update.") \
0230 _CTF_ITEM (ECTF_COMPRESS, "Failed to compress CTF data.") \
0231 _CTF_ITEM (ECTF_ARCREATE, "Error creating CTF archive.") \
0232 _CTF_ITEM (ECTF_ARNNAME, "Name not found in CTF archive.") \
0233 _CTF_ITEM (ECTF_SLICEOVERFLOW, "Overflow of type bitness or offset in slice.") \
0234 _CTF_ITEM (ECTF_DUMPSECTUNKNOWN, "Unknown section number in dump.") \
0235 _CTF_ITEM (ECTF_DUMPSECTCHANGED, "Section changed in middle of dump.") \
0236 _CTF_ITEM (ECTF_NOTYET, "Feature not yet implemented.") \
0237 _CTF_ITEM (ECTF_INTERNAL, "Internal error: assertion failure.") \
0238 _CTF_ITEM (ECTF_NONREPRESENTABLE, "Type not representable in CTF.") \
0239 _CTF_ITEM (ECTF_NEXT_END, "End of iteration.") \
0240 _CTF_ITEM (ECTF_NEXT_WRONGFUN, "Wrong iteration function called.") \
0241 _CTF_ITEM (ECTF_NEXT_WRONGFP, "Iteration entity changed in mid-iterate.") \
0242 _CTF_ITEM (ECTF_FLAGS, "CTF header contains flags unknown to libctf.") \
0243 _CTF_ITEM (ECTF_NEEDSBFD, "This feature needs a libctf with BFD support.") \
0244 _CTF_ITEM (ECTF_INCOMPLETE, "Type is not a complete type.") \
0245 _CTF_ITEM (ECTF_NONAME, "Type name must not be empty.")
0246
0247 #define ECTF_BASE 1000
0248
0249 enum
0250 {
0251 #define _CTF_FIRST(NAME, STR) NAME = ECTF_BASE
0252 #define _CTF_ITEM(NAME, STR) , NAME
0253 _CTF_ERRORS
0254 #undef _CTF_ITEM
0255 #undef _CTF_FIRST
0256 };
0257
0258 #define ECTF_NERR (ECTF_NONAME - ECTF_BASE + 1)
0259
0260
0261
0262 #define CTF_MODEL_ILP32 1
0263 #define CTF_MODEL_LP64 2
0264 #ifdef _LP64
0265 # define CTF_MODEL_NATIVE CTF_MODEL_LP64
0266 #else
0267 # define CTF_MODEL_NATIVE CTF_MODEL_ILP32
0268 #endif
0269
0270
0271
0272
0273
0274
0275 #define CTF_ADD_NONROOT 0
0276 #define CTF_ADD_ROOT 1
0277
0278
0279
0280 #define CTF_MN_RECURSE 0x1
0281
0282
0283
0284
0285
0286 typedef int ctf_visit_f (const char *name, ctf_id_t type, unsigned long offset,
0287 int depth, void *arg);
0288 typedef int ctf_member_f (const char *name, ctf_id_t membtype,
0289 unsigned long offset, void *arg);
0290 typedef int ctf_enum_f (const char *name, int val, void *arg);
0291 typedef int ctf_variable_f (const char *name, ctf_id_t type, void *arg);
0292 typedef int ctf_type_f (ctf_id_t type, void *arg);
0293 typedef int ctf_type_all_f (ctf_id_t type, int flag, void *arg);
0294 typedef int ctf_label_f (const char *name, const ctf_lblinfo_t *info,
0295 void *arg);
0296 typedef int ctf_archive_member_f (ctf_dict_t *fp, const char *name, void *arg);
0297 typedef int ctf_archive_raw_member_f (const char *name, const void *content,
0298 size_t len, void *arg);
0299 typedef char *ctf_dump_decorate_f (ctf_sect_names_t sect,
0300 char *line, void *arg);
0301
0302 typedef struct ctf_dump_state ctf_dump_state_t;
0303
0304
0305
0306
0307
0308 typedef struct ctf_next ctf_next_t;
0309 extern ctf_next_t *ctf_next_create (void);
0310 extern void ctf_next_destroy (ctf_next_t *);
0311 extern ctf_next_t *ctf_next_copy (ctf_next_t *);
0312
0313
0314
0315
0316
0317
0318
0319 extern ctf_archive_t *ctf_bfdopen (struct bfd *, int *);
0320 extern ctf_archive_t *ctf_bfdopen_ctfsect (struct bfd *, const ctf_sect_t *,
0321 int *);
0322 extern ctf_archive_t *ctf_fdopen (int fd, const char *filename,
0323 const char *target, int *errp);
0324 extern ctf_archive_t *ctf_open (const char *filename,
0325 const char *target, int *errp);
0326 extern void ctf_close (ctf_archive_t *);
0327 extern ctf_sect_t ctf_getdatasect (const ctf_dict_t *);
0328 extern ctf_sect_t ctf_getsymsect (const ctf_dict_t *);
0329 extern ctf_sect_t ctf_getstrsect (const ctf_dict_t *);
0330 extern void ctf_symsect_endianness (ctf_dict_t *, int little_endian);
0331 extern ctf_archive_t *ctf_get_arc (const ctf_dict_t *);
0332 extern ctf_archive_t *ctf_arc_open (const char *, int *);
0333 extern ctf_archive_t *ctf_arc_bufopen (const ctf_sect_t *,
0334 const ctf_sect_t *,
0335 const ctf_sect_t *,
0336 int *);
0337 extern void ctf_arc_symsect_endianness (ctf_archive_t *, int little_endian);
0338 extern void ctf_arc_close (ctf_archive_t *);
0339 extern ctf_dict_t *ctf_arc_lookup_symbol (ctf_archive_t *,
0340 unsigned long symidx,
0341 ctf_id_t *, int *errp);
0342 extern ctf_dict_t *ctf_arc_lookup_symbol_name (ctf_archive_t *,
0343 const char *name,
0344 ctf_id_t *, int *errp);
0345 extern void ctf_arc_flush_caches (ctf_archive_t *);
0346 extern ctf_dict_t *ctf_dict_open (const ctf_archive_t *,
0347 const char *, int *);
0348 extern ctf_dict_t *ctf_dict_open_sections (const ctf_archive_t *,
0349 const ctf_sect_t *,
0350 const ctf_sect_t *,
0351 const char *, int *);
0352 extern size_t ctf_archive_count (const ctf_archive_t *);
0353
0354
0355
0356
0357 extern ctf_dict_t *ctf_simple_open (const char *, size_t, const char *, size_t,
0358 size_t, const char *, size_t, int *);
0359 extern ctf_dict_t *ctf_bufopen (const ctf_sect_t *, const ctf_sect_t *,
0360 const ctf_sect_t *, int *);
0361 extern void ctf_ref (ctf_dict_t *);
0362 extern void ctf_dict_close (ctf_dict_t *);
0363
0364 extern int ctf_arc_write (const char *, ctf_dict_t **, size_t,
0365 const char **, size_t);
0366 extern int ctf_arc_write_fd (int, ctf_dict_t **, size_t, const char **,
0367 size_t);
0368
0369 extern const char *ctf_cuname (ctf_dict_t *);
0370 extern int ctf_cuname_set (ctf_dict_t *, const char *);
0371 extern ctf_dict_t *ctf_parent_dict (ctf_dict_t *);
0372 extern const char *ctf_parent_name (ctf_dict_t *);
0373 extern int ctf_parent_name_set (ctf_dict_t *, const char *);
0374 extern int ctf_type_isparent (ctf_dict_t *, ctf_id_t);
0375 extern int ctf_type_ischild (ctf_dict_t *, ctf_id_t);
0376
0377 extern int ctf_import (ctf_dict_t *, ctf_dict_t *);
0378 extern int ctf_setmodel (ctf_dict_t *, int);
0379 extern int ctf_getmodel (ctf_dict_t *);
0380
0381 extern void ctf_setspecific (ctf_dict_t *, void *);
0382 extern void *ctf_getspecific (ctf_dict_t *);
0383
0384 extern int ctf_errno (ctf_dict_t *);
0385 extern const char *ctf_errmsg (int);
0386 extern int ctf_version (int);
0387
0388 extern int ctf_func_info (ctf_dict_t *, unsigned long, ctf_funcinfo_t *);
0389 extern int ctf_func_args (ctf_dict_t *, unsigned long, uint32_t, ctf_id_t *);
0390 extern int ctf_func_type_info (ctf_dict_t *, ctf_id_t, ctf_funcinfo_t *);
0391 extern int ctf_func_type_args (ctf_dict_t *, ctf_id_t, uint32_t, ctf_id_t *);
0392
0393 extern ctf_id_t ctf_lookup_by_name (ctf_dict_t *, const char *);
0394 extern ctf_id_t ctf_lookup_by_symbol (ctf_dict_t *, unsigned long);
0395 extern ctf_id_t ctf_lookup_by_symbol_name (ctf_dict_t *, const char *);
0396 extern ctf_id_t ctf_symbol_next (ctf_dict_t *, ctf_next_t **,
0397 const char **name, int functions);
0398 extern ctf_id_t ctf_lookup_variable (ctf_dict_t *, const char *);
0399
0400 extern ctf_id_t ctf_type_resolve (ctf_dict_t *, ctf_id_t);
0401 extern char *ctf_type_aname (ctf_dict_t *, ctf_id_t);
0402 extern char *ctf_type_aname_raw (ctf_dict_t *, ctf_id_t);
0403 extern ssize_t ctf_type_lname (ctf_dict_t *, ctf_id_t, char *, size_t);
0404 extern char *ctf_type_name (ctf_dict_t *, ctf_id_t, char *, size_t);
0405 extern const char *ctf_type_name_raw (ctf_dict_t *, ctf_id_t);
0406 extern ssize_t ctf_type_size (ctf_dict_t *, ctf_id_t);
0407 extern ssize_t ctf_type_align (ctf_dict_t *, ctf_id_t);
0408 extern int ctf_type_kind (ctf_dict_t *, ctf_id_t);
0409 extern int ctf_type_kind_forwarded (ctf_dict_t *, ctf_id_t);
0410 extern ctf_id_t ctf_type_reference (ctf_dict_t *, ctf_id_t);
0411 extern ctf_id_t ctf_type_pointer (ctf_dict_t *, ctf_id_t);
0412 extern int ctf_type_encoding (ctf_dict_t *, ctf_id_t, ctf_encoding_t *);
0413 extern int ctf_type_visit (ctf_dict_t *, ctf_id_t, ctf_visit_f *, void *);
0414 extern int ctf_type_cmp (ctf_dict_t *, ctf_id_t, ctf_dict_t *, ctf_id_t);
0415 extern int ctf_type_compat (ctf_dict_t *, ctf_id_t, ctf_dict_t *, ctf_id_t);
0416
0417 extern int ctf_member_info (ctf_dict_t *, ctf_id_t, const char *,
0418 ctf_membinfo_t *);
0419 extern int ctf_array_info (ctf_dict_t *, ctf_id_t, ctf_arinfo_t *);
0420
0421 extern const char *ctf_enum_name (ctf_dict_t *, ctf_id_t, int);
0422 extern int ctf_enum_value (ctf_dict_t *, ctf_id_t, const char *, int *);
0423
0424 extern void ctf_label_set (ctf_dict_t *, const char *);
0425 extern const char *ctf_label_get (ctf_dict_t *);
0426
0427 extern const char *ctf_label_topmost (ctf_dict_t *);
0428 extern int ctf_label_info (ctf_dict_t *, const char *, ctf_lblinfo_t *);
0429
0430 extern int ctf_member_count (ctf_dict_t *, ctf_id_t);
0431 extern int ctf_member_iter (ctf_dict_t *, ctf_id_t, ctf_member_f *, void *);
0432 extern ssize_t ctf_member_next (ctf_dict_t *, ctf_id_t, ctf_next_t **,
0433 const char **name, ctf_id_t *membtype,
0434 int flags);
0435 extern int ctf_enum_iter (ctf_dict_t *, ctf_id_t, ctf_enum_f *, void *);
0436 extern const char *ctf_enum_next (ctf_dict_t *, ctf_id_t, ctf_next_t **,
0437 int *);
0438 extern int ctf_type_iter (ctf_dict_t *, ctf_type_f *, void *);
0439 extern int ctf_type_iter_all (ctf_dict_t *, ctf_type_all_f *, void *);
0440 extern ctf_id_t ctf_type_next (ctf_dict_t *, ctf_next_t **,
0441 int *flag, int want_hidden);
0442 extern int ctf_label_iter (ctf_dict_t *, ctf_label_f *, void *);
0443 extern int ctf_label_next (ctf_dict_t *, ctf_next_t **, const char **);
0444 extern int ctf_variable_iter (ctf_dict_t *, ctf_variable_f *, void *);
0445 extern ctf_id_t ctf_variable_next (ctf_dict_t *, ctf_next_t **,
0446 const char **);
0447 extern int ctf_archive_iter (const ctf_archive_t *, ctf_archive_member_f *,
0448 void *);
0449 extern ctf_dict_t *ctf_archive_next (const ctf_archive_t *, ctf_next_t **,
0450 const char **, int skip_parent, int *errp);
0451
0452
0453
0454
0455
0456 extern int ctf_archive_raw_iter (const ctf_archive_t *,
0457 ctf_archive_raw_member_f *, void *);
0458 extern char *ctf_dump (ctf_dict_t *, ctf_dump_state_t **state,
0459 ctf_sect_names_t sect, ctf_dump_decorate_f *,
0460 void *arg);
0461
0462
0463
0464
0465 extern char *ctf_errwarning_next (ctf_dict_t *, ctf_next_t **,
0466 int *is_warning, int *errp);
0467
0468 extern ctf_id_t ctf_add_array (ctf_dict_t *, uint32_t,
0469 const ctf_arinfo_t *);
0470 extern ctf_id_t ctf_add_const (ctf_dict_t *, uint32_t, ctf_id_t);
0471 extern ctf_id_t ctf_add_enum_encoded (ctf_dict_t *, uint32_t, const char *,
0472 const ctf_encoding_t *);
0473 extern ctf_id_t ctf_add_enum (ctf_dict_t *, uint32_t, const char *);
0474 extern ctf_id_t ctf_add_float (ctf_dict_t *, uint32_t,
0475 const char *, const ctf_encoding_t *);
0476 extern ctf_id_t ctf_add_forward (ctf_dict_t *, uint32_t, const char *,
0477 uint32_t);
0478 extern ctf_id_t ctf_add_function (ctf_dict_t *, uint32_t,
0479 const ctf_funcinfo_t *, const ctf_id_t *);
0480 extern ctf_id_t ctf_add_integer (ctf_dict_t *, uint32_t, const char *,
0481 const ctf_encoding_t *);
0482 extern ctf_id_t ctf_add_slice (ctf_dict_t *, uint32_t, ctf_id_t, const ctf_encoding_t *);
0483 extern ctf_id_t ctf_add_pointer (ctf_dict_t *, uint32_t, ctf_id_t);
0484 extern ctf_id_t ctf_add_type (ctf_dict_t *, ctf_dict_t *, ctf_id_t);
0485 extern ctf_id_t ctf_add_typedef (ctf_dict_t *, uint32_t, const char *,
0486 ctf_id_t);
0487 extern ctf_id_t ctf_add_restrict (ctf_dict_t *, uint32_t, ctf_id_t);
0488 extern ctf_id_t ctf_add_struct (ctf_dict_t *, uint32_t, const char *);
0489 extern ctf_id_t ctf_add_union (ctf_dict_t *, uint32_t, const char *);
0490 extern ctf_id_t ctf_add_struct_sized (ctf_dict_t *, uint32_t, const char *,
0491 size_t);
0492 extern ctf_id_t ctf_add_union_sized (ctf_dict_t *, uint32_t, const char *,
0493 size_t);
0494 extern ctf_id_t ctf_add_unknown (ctf_dict_t *, uint32_t, const char *);
0495 extern ctf_id_t ctf_add_volatile (ctf_dict_t *, uint32_t, ctf_id_t);
0496
0497 extern int ctf_add_enumerator (ctf_dict_t *, ctf_id_t, const char *, int);
0498 extern int ctf_add_member (ctf_dict_t *, ctf_id_t, const char *, ctf_id_t);
0499 extern int ctf_add_member_offset (ctf_dict_t *, ctf_id_t, const char *,
0500 ctf_id_t, unsigned long);
0501 extern int ctf_add_member_encoded (ctf_dict_t *, ctf_id_t, const char *,
0502 ctf_id_t, unsigned long,
0503 const ctf_encoding_t);
0504
0505 extern int ctf_add_variable (ctf_dict_t *, const char *, ctf_id_t);
0506
0507 extern int ctf_add_objt_sym (ctf_dict_t *, const char *, ctf_id_t);
0508 extern int ctf_add_func_sym (ctf_dict_t *, const char *, ctf_id_t);
0509
0510 extern int ctf_set_array (ctf_dict_t *, ctf_id_t, const ctf_arinfo_t *);
0511
0512 extern ctf_dict_t *ctf_create (int *);
0513 extern int ctf_update (ctf_dict_t *);
0514 extern ctf_snapshot_id_t ctf_snapshot (ctf_dict_t *);
0515 extern int ctf_rollback (ctf_dict_t *, ctf_snapshot_id_t);
0516 extern int ctf_discard (ctf_dict_t *);
0517 extern int ctf_write (ctf_dict_t *, int);
0518 extern int ctf_gzwrite (ctf_dict_t *fp, gzFile fd);
0519 extern int ctf_compress_write (ctf_dict_t * fp, int fd);
0520 extern unsigned char *ctf_write_mem (ctf_dict_t *, size_t *, size_t threshold);
0521
0522 extern int ctf_link_add_ctf (ctf_dict_t *, ctf_archive_t *, const char *);
0523
0524
0525 typedef int ctf_link_variable_filter_f (ctf_dict_t *, const char *, ctf_id_t,
0526 void *);
0527 extern int ctf_link_set_variable_filter (ctf_dict_t *,
0528 ctf_link_variable_filter_f *, void *);
0529 extern int ctf_link (ctf_dict_t *, int flags);
0530 typedef const char *ctf_link_strtab_string_f (uint32_t *offset, void *arg);
0531 extern int ctf_link_add_strtab (ctf_dict_t *, ctf_link_strtab_string_f *,
0532 void *);
0533 extern int ctf_link_add_linker_symbol (ctf_dict_t *, ctf_link_sym_t *);
0534 extern int ctf_link_shuffle_syms (ctf_dict_t *);
0535 extern unsigned char *ctf_link_write (ctf_dict_t *, size_t *size,
0536 size_t threshold);
0537
0538
0539
0540
0541 extern int ctf_link_add_cu_mapping (ctf_dict_t *, const char *from,
0542 const char *to);
0543 typedef char *ctf_link_memb_name_changer_f (ctf_dict_t *,
0544 const char *, void *);
0545 extern void ctf_link_set_memb_name_changer
0546 (ctf_dict_t *, ctf_link_memb_name_changer_f *, void *);
0547
0548 extern void ctf_setdebug (int debug);
0549 extern int ctf_getdebug (void);
0550
0551
0552
0553 struct ctf_file;
0554 typedef struct ctf_dict ctf_file_t;
0555 extern void ctf_file_close (ctf_file_t *);
0556 extern ctf_dict_t *ctf_parent_file (ctf_dict_t *);
0557 extern ctf_dict_t *ctf_arc_open_by_name (const ctf_archive_t *,
0558 const char *, int *);
0559 extern ctf_dict_t *ctf_arc_open_by_name_sections (const ctf_archive_t *,
0560 const ctf_sect_t *,
0561 const ctf_sect_t *,
0562 const char *, int *);
0563
0564 #ifdef __cplusplus
0565 }
0566 #endif
0567
0568 #endif