Lines Matching refs:arc
36 static ctf_dict_t *ctf_dict_open_by_offset (const struct ctf_archive *arc,
47 static int ctf_arc_import_parent (const ctf_archive_t *arc, ctf_dict_t *fp,
339 ctf_dict. Closes ARC and/or FP on error. Arrange to free the SYMSECT or
344 struct ctf_archive *arc,
356 ctf_arc_close_internal (arc);
364 arci->ctfi_archive = arc;
382 ctf_arc_symsect_endianness (ctf_archive_t *arc, int little_endian)
384 arc->ctfi_symsect_little_endian = !!little_endian;
385 if (!arc->ctfi_is_archive)
386 ctf_symsect_endianness (arc->ctfi_dict, arc->ctfi_symsect_little_endian);
401 struct ctf_archive *arc = (struct ctf_archive *) ctfsect->cts_data;
402 return (const ctf_preamble_t *) ((char *) arc + le64toh (arc->ctfa_ctfs)
416 struct ctf_archive *arc = NULL;
433 arc = (struct ctf_archive *) ctfsect->cts_data;
444 return ctf_new_archive_internal (is_archive, 0, arc, fp, symsect, strsect,
456 struct ctf_archive *arc; /* (Actually the whole file.) */
470 if ((arc = arc_mmap_file (fd, s.st_size)) == NULL)
476 if (le64toh (arc->ctfa_magic) != CTFA_MAGIC)
486 arc->ctfa_magic = s.st_size;
492 return arc;
495 arc_mmap_unmap (arc, s.st_size, NULL);
507 ctf_arc_close_internal (struct ctf_archive *arc)
509 if (arc == NULL)
513 arc_mmap_unmap (arc, arc->ctfa_magic, NULL);
518 ctf_arc_close (ctf_archive_t *arc)
520 if (arc == NULL)
523 if (arc->ctfi_is_archive)
525 if (arc->ctfi_unmap_on_close)
526 ctf_arc_close_internal (arc->ctfi_archive);
529 ctf_dict_close (arc->ctfi_dict);
530 free (arc->ctfi_symdicts);
531 free (arc->ctfi_symnamedicts);
532 ctf_dynhash_destroy (arc->ctfi_dicts);
533 if (arc->ctfi_free_symsect)
534 free ((void *) arc->ctfi_symsect.cts_data);
535 if (arc->ctfi_free_strsect)
536 free ((void *) arc->ctfi_strsect.cts_data);
537 free (arc->ctfi_data);
538 if (arc->ctfi_bfd_close)
539 arc->ctfi_bfd_close (arc);
540 free (arc);
546 arc,
560 modent = (ctf_archive_modent_t *) ((char *) arc
563 search_nametbl = (const char *) arc + le64toh (arc->ctfa_names);
564 modent = bsearch_r (name, modent, le64toh (arc->ctfa_ndicts),
577 return ctf_dict_open_by_offset (arc, symsect, strsect,
589 ctf_dict_open_sections (const ctf_archive_t *arc,
598 if (arc->ctfi_is_archive)
601 ret = ctf_dict_open_internal (arc->ctfi_archive, symsect, strsect,
602 name, arc->ctfi_symsect_little_endian,
606 ret->ctf_archive = (ctf_archive_t *) arc;
607 if (ctf_arc_import_parent (arc, ret, errp) < 0)
622 arc->ctfi_dict->ctf_archive = (ctf_archive_t *) arc;
625 arc->ctfi_dict->ctf_refcnt++;
626 return arc->ctfi_dict;
634 ctf_dict_open (const ctf_archive_t *arc, const char *name, int *errp)
636 const ctf_sect_t *symsect = &arc->ctfi_symsect;
637 const ctf_sect_t *strsect = &arc->ctfi_strsect;
644 return ctf_dict_open_sections (arc, symsect, strsect, name, errp);
657 ctf_dict_open_cached (ctf_archive_t *arc, const char *name, int *errp)
663 if (arc->ctfi_dicts
664 && ((fp = ctf_dynhash_lookup (arc->ctfi_dicts, name)) != NULL))
671 fp = ctf_dict_open (arc, name, errp);
677 if (arc->ctfi_dicts == NULL)
678 if ((arc->ctfi_dicts
683 if (ctf_dynhash_insert (arc->ctfi_dicts, dupname, fp) < 0)
687 if (arc->ctfi_crossdict_cache == NULL)
688 arc->ctfi_crossdict_cache = fp;
716 ctf_dict_open_by_offset (const struct ctf_archive *arc,
728 offset += le64toh (arc->ctfa_ctfs);
731 ctfsect.cts_size = le64toh (*((uint64_t *) ((char *) arc + offset)));
733 ctfsect.cts_data = (void *) ((char *) arc + offset + sizeof (uint64_t));
737 ctf_setmodel (fp, le64toh (arc->ctfa_model));
746 ctf_arc_open_by_name (const ctf_archive_t *arc, const char *name,
749 return ctf_dict_open (arc, name, errp);
753 ctf_arc_open_by_name_sections (const ctf_archive_t *arc,
759 return ctf_dict_open_sections (arc, symsect, strsect, name, errp);
767 ctf_arc_import_parent (const ctf_archive_t *arc, ctf_dict_t *fp, int *errp)
772 ctf_dict_t *parent = ctf_dict_open_cached ((ctf_archive_t *) arc,
1022 ctf_arc_lookup_enumerator_next (ctf_archive_t *arc, const char *name,
1035 so this is quite safe and means we don't have to track the arc and fp
1046 i->cu.ctn_arc = arc;
1056 if (arc != i->cu.ctn_arc)
1083 *dict = ctf_archive_next (arc, &i->ctn_next, NULL, 0, &err);
1125 ctf_archive_raw_iter_internal (const struct ctf_archive *arc,
1133 modent = (ctf_archive_modent_t *) ((char *) arc
1135 nametbl = (((const char *) arc) + le64toh (arc->ctfa_names));
1137 for (i = 0; i < le64toh (arc->ctfa_ndicts); i++)
1143 fp = ((char *) arc + le64toh (arc->ctfa_ctfs)
1157 ctf_archive_raw_iter (const ctf_archive_t *arc,
1160 if (arc->ctfi_is_archive)
1161 return ctf_archive_raw_iter_internal (arc->ctfi_archive, func, data);
1169 ctf_archive_iter (const ctf_archive_t *arc, ctf_archive_member_f *func,
1177 while ((fp = ctf_archive_next (arc, &i, &name, 0, &err)) != NULL)
1212 struct ctf_archive *arc;
1261 arc = wrapper->ctfi_archive;
1269 if ((!wrapper->ctfi_is_archive) || (i->ctn_n >= le64toh (arc->ctfa_ndicts)))
1278 modent = (ctf_archive_modent_t *) ((char *) arc
1280 nametbl = (((const char *) arc) + le64toh (arc->ctfa_names));
1310 void *arc;
1311 if ((arc = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE,
1314 return arc;