Home | History | Annotate | Download | only in src

Lines Matching refs:fileinfo

70 static int ld_generic_file_close (struct usedfiles *fileinfo,
72 static int ld_generic_file_process (int fd, struct usedfiles *fileinfo,
106 static int file_process2 (struct usedfiles *fileinfo);
135 print_file_name (FILE *s, struct usedfiles *fileinfo, int first_level,
140 if (fileinfo->archive_file != NULL)
142 npar = print_file_name (s, fileinfo->archive_file, 0, 0) + 1;
144 fputs_unlocked (fileinfo->rfname, s);
151 fputs_unlocked (fileinfo->rfname, s);
172 struct usedfiles *file = scninfo->fileinfo;
345 open_along_path2 (struct usedfiles *fileinfo, struct pathelement *path)
347 const char *fname = fileinfo->fname;
365 if (fileinfo->file_type == archive_file_type)
396 assert (fileinfo->file_type == dso_file_type
397 || fileinfo->file_type == dso_needed_file_type);
412 fileinfo->fd = fd;
416 if (unlikely (check_for_duplicate (fileinfo) != 0))
420 fileinfo->rfname = obstack_strdup (&ld_state.smem, rfname);
423 printf (fileinfo->file_type == archive_file_type
465 open_along_path (struct usedfiles *fileinfo)
467 const char *fname = fileinfo->fname;
470 if (fileinfo->file_type == relocatable_file_type)
473 fileinfo->fd = open (fname, O_RDONLY);
475 if (likely (fileinfo->fd != -1))
479 print_file_name (stdout, fileinfo, 1, 1);
481 return check_for_duplicate (fileinfo);
491 err = open_along_path2 (fileinfo, ld_state.ld_library_path1);
495 err = open_along_path2 (fileinfo,
496 fileinfo->file_type == archive_file_type
502 err = open_along_path2 (fileinfo, ld_state.ld_library_path2);
507 if (fileinfo->file_type == dso_file_type)
508 err = open_along_path2 (fileinfo, ld_state.runpath_link);
512 err = open_along_path2 (fileinfo, ld_state.default_paths);
518 && (err != EAGAIN || fileinfo->file_type == relocatable_file_type))
519 error (0, err, gettext ("cannot open %s"), fileinfo->fname);
527 struct usedfiles *fileinfo, struct symbol *oldp)
534 size_t newgrpid = fileinfo->scninfo[shndx].grpid;
539 assert (SCNINFO_SHDR (fileinfo->scninfo[newgrpid].shdr).sh_type
544 if (! fileinfo->scninfo[newgrpid].comdat_group
548 if (strcmp (fileinfo->scninfo[newgrpid].symbols->name,
558 check_type_and_size (const XElf_Sym *sym, struct usedfiles *fileinfo,
581 fileinfo->rfname);
589 (uint64_t) sym->st_size, fileinfo->rfname);
595 struct usedfiles *fileinfo, struct symbol *oldp)
599 bool new_in_dso = FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_DYN;
613 check_type_and_size (sym, fileinfo, oldp);
636 && matching_group_comdat_scn (sym, shndx, fileinfo, oldp))
649 && ! old_in_dso && fileinfo->file_type == relocatable_file_type)
659 if (elf_getshnum (fileinfo->elf, &shnum) < 0)
666 scnname = elf_strptr (fileinfo->elf,
667 fileinfo->shstrndx,
668 SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_name);
675 print_file_name (stderr, fileinfo, 1, 0);
706 else if (old_in_dso && fileinfo->file_type == relocatable_file_type
738 if (old_in_dso && fileinfo->file_type == relocatable_file_type)
757 oldp->file = fileinfo;
761 if (likely (fileinfo->file_type == relocatable_file_type))
771 mark_section_used (&fileinfo->scninfo[shndx], shndx, &ignore);
804 find_section_group (struct usedfiles *fileinfo, Elf32_Word shndx,
809 for (runp = fileinfo->groups; runp != NULL; runp = runp->next)
820 fileinfo->fname, elf_errmsg (-1));
842 fileinfo->fname,
843 elf_strptr (fileinfo->elf, fileinfo->shstrndx,
844 SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_name));
852 mark_section_group (struct usedfiles *fileinfo, Elf32_Word shndx,
860 struct scninfo *grpscn = find_section_group (fileinfo, shndx, &data);
882 XElf_Shdr *shdr = &SCNINFO_SHDR (fileinfo->scninfo[idx].shdr);
884 if (fileinfo->scninfo[idx].grpid != grpscn->grpid)
887 fileinfo->fname, (int) idx,
888 elf_strptr (fileinfo->elf, fileinfo->shstrndx, shdr->sh_name));
893 elf_strptr (fileinfo->elf, fileinfo->shstrndx,
898 elf_strptr (fileinfo->elf,
899 fileinfo->shstrndx,
900 SCNINFO_SHDR (fileinfo->scninfo[shdr->sh_info].shdr).sh_name)))))
904 mark_section_used (&fileinfo->scninfo[idx], idx, &ignore);
944 mark_section_used (&scninfo->fileinfo->scninfo[shdr->sh_link],
952 mark_section_used (&scninfo->fileinfo->scninfo[shdr->sh_info],
958 mark_section_group (scninfo->fileinfo, shndx, grpscnp);
967 add_section (struct usedfiles *fileinfo, struct scninfo *scninfo)
989 && strcmp (elf_strptr (fileinfo->elf,
990 fileinfo->shstrndx,
992 && (fileinfo->status != in_archive || !ld_state.gc_sections))
999 grpscn = find_section_group (fileinfo, elf_ndxscn (scninfo->scn),
1004 search.name = elf_strptr (fileinfo->elf, fileinfo->shstrndx, shdr->sh_name);
1044 = find_section_group (runp->fileinfo,
1098 add_relocatable_file (struct usedfiles *fileinfo, GElf_Word secttype)
1117 assert (fileinfo->elf != NULL);
1120 if (unlikely (elf_getshnum (fileinfo->elf, &scncnt) < 0))
1125 fileinfo->scninfo = (struct scninfo *)
1136 fileinfo->scninfo[cnt].scn = elf_getscn (fileinfo->elf, cnt);
1141 if (fileinfo->scninfo[cnt].shdr == NULL)
1143 if (fileinfo->scninfo[cnt].shdr.sh_type == SHT_NULL)
1147 shdr = xelf_getshdr (fileinfo->scninfo[cnt].scn,
1148 fileinfo->scninfo[cnt].shdr);
1150 xelf_getshdr_copy (fileinfo->scninfo[cnt].scn, shdr,
1151 fileinfo->scninfo[cnt].shdr);
1157 fileinfo->rfname, __FILE__, __LINE__);
1162 shdr = &SCNINFO_SHDR (fileinfo->scninfo[cnt].shdr);
1164 Elf_Data *data = elf_getdata (fileinfo->scninfo[cnt].scn, NULL);
1172 fileinfo->scninfo[cnt].fileinfo = fileinfo;
1179 assert (fileinfo->symtabdata == NULL);
1180 fileinfo->symtabdata = data;
1181 fileinfo->nsymtab = shdr->sh_size / shdr->sh_entsize;
1182 fileinfo->nlocalsymbols = shdr->sh_info;
1183 fileinfo->symstridx = shdr->sh_link;
1187 assert (fileinfo->dynsymtabdata == NULL);
1188 fileinfo->dynsymtabdata = data;
1189 fileinfo->ndynsymtab = shdr->sh_size / shdr->sh_entsize;
1190 fileinfo->dynsymstridx = shdr->sh_link;
1207 fileinfo->xndxdata = xndxdata = data;
1212 fileinfo->versymdata = versymdata = data;
1219 fileinfo->verdefdata = verdefdata = data;
1223 fileinfo->nverdef = nversions = shdr->sh_info;
1226 fileinfo->verdefused = (XElf_Versym *)
1229 fileinfo->verdefent = (struct Ebl_Strent **)
1236 fileinfo->verneeddata = verneeddata = data;
1240 assert (fileinfo->dynscn == NULL);
1241 fileinfo->dynscn = fileinfo->scninfo[cnt].scn;
1249 if (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_REL)
1252 fileinfo->fname);
1254 fileinfo->scninfo[cnt].next = fileinfo->groups;
1255 fileinfo->scninfo[cnt].grpid = cnt;
1256 fileinfo->groups = &fileinfo->scninfo[cnt];
1260 fileinfo->scninfo[cnt].symbols = (struct symbol *)
1263 symscn = elf_getscn (fileinfo->elf, shdr->sh_link);
1276 struct symbol *symbol = fileinfo->scninfo[cnt].symbols;
1282 xelf_getshdr (elf_getscn (fileinfo->elf, sym->st_shndx),
1285 symbol->name = elf_strptr (fileinfo->elf,
1286 FILEINFO_EHDR (fileinfo->ehdr).e_shstrndx,
1293 symbol->name = elf_strptr (fileinfo->elf,
1298 symbol->file = fileinfo;
1301 if (fileinfo->scninfo[cnt].symbols->name == NULL)
1304 fileinfo->fname,
1305 elf_ndxscn (fileinfo->scninfo[cnt].scn),
1306 elf_strptr (fileinfo->elf, fileinfo->shstrndx,
1316 fileinfo->fname, elf_ndxscn (fileinfo->scninfo[cnt].scn),
1317 elf_strptr (fileinfo->elf, fileinfo->shstrndx,
1323 fileinfo->scninfo[cnt].comdat_group = true;
1330 fileinfo->fname,
1331 inner, elf_ndxscn (fileinfo->scninfo[cnt].scn),
1332 elf_strptr (fileinfo->elf, fileinfo->shstrndx,
1336 fileinfo->scninfo[grpdata[inner]].grpid = cnt;
1342 assert (fileinfo->scninfo[cnt].used == false);
1351 fileinfo->fname,
1352 elf_strptr (fileinfo->elf, fileinfo->shstrndx,
1359 else if (likely (fileinfo->file_type == relocatable_file_type)
1373 && strcmp (elf_strptr (fileinfo->elf, fileinfo->shstrndx,
1378 add_section (fileinfo, &fileinfo->scninfo[cnt]);
1384 if (fileinfo->file_type == relocatable_file_type
1396 fileinfo->has_merge_sections = has_merge_sections;
1399 fileinfo->symref = (struct symbol **)
1414 fileinfo->rfname, __FILE__, __LINE__);
1423 fileinfo->rfname, __FILE__, __LINE__);
1429 && ((SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_flags
1442 newp->file = fileinfo;
1444 fileinfo->symref[cnt] = newp;
1446 if (fileinfo->scninfo[shndx].symbols == NULL)
1447 fileinfo->scninfo[shndx].symbols = newp->next_in_scn
1452 = fileinfo->scninfo[shndx].symbols->next_in_scn;
1453 fileinfo->scninfo[shndx].symbols
1454 = fileinfo->scninfo[shndx].symbols->next_in_scn = newp;
1465 fileinfo->symref = (struct symbol **)
1482 fileinfo->rfname, __FILE__, __LINE__);
1491 fileinfo->rfname, __FILE__, __LINE__);
1501 && fileinfo->scninfo[shndx].unused_comdat)
1522 search.name = elf_strptr (fileinfo->elf, symstridx, sym->st_name);
1536 && fileinfo->file_type != relocatable_file_type)
1554 newp->file = fileinfo;
1592 fileinfo->symref[cnt] = newp;
1604 else if (unlikely (check_definition (sym, shndx, cnt, fileinfo, oldp)
1612 newp = fileinfo->symref[cnt] = oldp;
1622 assert (elf_getshnum (fileinfo->elf, &shnum) == 0);
1627 mark_section_used (&fileinfo->scninfo[shndx], shndx, &ignore);
1631 if (SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_flags
1634 if (fileinfo->scninfo[shndx].symbols == NULL)
1635 fileinfo->scninfo[shndx].symbols = newp->next_in_scn
1640 = fileinfo->scninfo[shndx].symbols->next_in_scn;
1641 fileinfo->scninfo[shndx].symbols
1642 = fileinfo->scninfo[shndx].symbols->next_in_scn = newp;
1649 if (likely (fileinfo->file_type == relocatable_file_type))
1652 ld_state.relfiles = fileinfo->next = fileinfo;
1655 fileinfo->next = ld_state.relfiles->next;
1656 ld_state.relfiles = ld_state.relfiles->next = fileinfo;
1660 ld_state.nsymtab += fileinfo->nsymtab;
1661 ld_state.nlocalsymbols += fileinfo->nlocalsymbols;
1663 else if (likely (fileinfo->file_type == dso_file_type))
1665 CSNGL_LIST_ADD_REAR (ld_state.dsofiles, fileinfo);
1668 if (fileinfo->lazyload)
1723 open_elf (struct usedfiles *fileinfo, Elf *elf)
1737 fileinfo->status = closed;
1740 if (fileinfo->fd != -1)
1742 ldin = fdopen (fileinfo->fd, "r");
1754 fileinfo->rfname, __FILE__, __LINE__);
1768 fileinfo->rfname);
1775 ldin_fname = fileinfo->rfname;
1779 if (fileinfo->fd != -1 && !fileinfo->fd_passed)
1782 close (fileinfo->fd);
1783 fileinfo->fd = -1;
1793 fileinfo->elf = NULL;
1818 fileinfo->elf = elf;
1821 fileinfo->status = opened;
1828 add_whole_archive (struct usedfiles *fileinfo)
1834 while ((arelf = elf_begin (fileinfo->fd, cmd, fileinfo->elf)) != NULL)
1848 newp->archive_file = fileinfo;
1874 extract_from_archive (struct usedfiles *fileinfo)
1879 if (fileinfo->archive_seq == 0)
1882 fileinfo->archive_seq = ++archive_seq;
1895 syms = elf_getarsym (fileinfo->elf, &nsyms);
1900 fileinfo->rfname, elf_errmsg (-1));
1903 fileinfo->status = closed;
1931 if (unlikely (elf_rand (fileinfo->elf, syms[cnt].as_off)
1937 arelf = elf_begin (fileinfo->fd, ELF_C_READ_MMAP_PRIVATE,
1938 fileinfo->elf);
1949 newp->archive_file = fileinfo;
1973 assert (fileinfo->archive_seq != 0);
1974 ld_state.last_archive_used = fileinfo->archive_seq;
1984 file_process2 (struct usedfiles *fileinfo)
1988 if (likely (elf_kind (fileinfo->elf) == ELF_K_ELF))
1992 if (likely (fileinfo->ehdr == NULL))
1994 if (likely (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_NONE))
1999 ehdr = xelf_getehdr (fileinfo->elf, fileinfo->ehdr);
2001 xelf_getehdr_copy (fileinfo->elf, ehdr, fileinfo->ehdr);
2006 fileinfo->rfname, __FILE__, __LINE__);
2007 fileinfo->status = closed;
2011 if (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_REL
2012 && unlikely (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_DYN))
2018 print_file_name (stderr, fileinfo, 1, 0);
2022 FILEINFO_EHDR (fileinfo->ehdr).e_type,
2024 fileinfo->status = closed;
2029 if (FILEINFO_EHDR (fileinfo->ehdr).e_machine
2034 fileinfo->rfname,
2036 fileinfo->status = closed;
2041 if (unlikely (elf_getshstrndx (fileinfo->elf, &fileinfo->shstrndx)
2046 fileinfo->rfname, elf_errmsg (-1));
2047 fileinfo->status = closed;
2053 if (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_REL)
2057 res = add_relocatable_file (fileinfo, SHT_SYMTAB);
2061 bool has_l_name = fileinfo->file_type == archive_file_type;
2063 assert (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_DYN);
2067 if (fileinfo->file_type != dso_needed_file_type)
2068 fileinfo->file_type = dso_file_type;
2075 fileinfo->fname);
2081 res = add_relocatable_file (fileinfo, SHT_DYNSYM);
2084 assert (fileinfo->dynscn != NULL);
2089 xelf_getshdr (fileinfo->dynscn, dynshdr);
2091 Elf_Data *dyndata = elf_getdata (fileinfo->dynscn, NULL);
2107 newp = ld_new_inputfile (elf_strptr (fileinfo->elf,
2121 fileinfo->soname = elf_strptr (fileinfo->elf,
2137 size_t len = strlen (fileinfo->fname) + 7;
2141 strcpy (stpcpy (stpcpy (newp, "lib"), fileinfo->fname), ".so");
2143 fileinfo->soname = newp;
2147 else if (likely (elf_kind (fileinfo->elf) == ELF_K_AR))
2152 res = add_whole_archive (fileinfo);
2158 error (0, 0, gettext ("input file '%s' ignored"), fileinfo->fname);
2166 ld_state.group_start_archive = fileinfo;
2169 ld_state.archives = fileinfo;
2172 ld_state.tailarchives->next = fileinfo;
2173 ld_state.tailarchives = fileinfo;
2177 res = extract_from_archive (fileinfo);
2194 ld_generic_file_process (int fd, struct usedfiles *fileinfo,
2200 *nextp = fileinfo->next;
2203 if (unlikely (fileinfo->group_start))
2206 fileinfo->group_start = false;
2210 if (likely (fileinfo->status == not_opened))
2217 int err = open_along_path (fileinfo);
2226 fileinfo->fd = fd;
2229 fileinfo->fd_passed = fd_passed;
2237 res = open_elf (fileinfo, elf_begin (fileinfo->fd,
2238 is_dso_p (fileinfo->fd)
2246 if (likely (fileinfo->status != closed))
2247 res = file_process2 (fileinfo);
2250 if (unlikely (fileinfo->group_backref != NULL))
2254 if (ld_state.last_archive_used > fileinfo->group_backref->archive_seq)
2256 *nextp = fileinfo->group_backref;
2276 while (runp != fileinfo->next);
2282 *nextp = fileinfo->next = NULL;
2285 else if (unlikely (fileinfo->group_end))
2304 if (ld_state.tailarchives != fileinfo)
2314 fileinfo->group_end = false;
2396 ld_generic_file_close (struct usedfiles *fileinfo, struct ld_state *statep)
2399 elf_end (fileinfo->elf);
2403 if (!fileinfo->fd_passed && fileinfo->fd != -1)
2404 close (fileinfo->fd);
2407 if (fileinfo->fname != fileinfo->rfname)
2408 free ((char *) fileinfo->rfname);
2867 const char *brfname = basename (runp->fileinfo->rfname);
3211 here_groupidx = runp->fileinfo->scninfo[runp->grpid].outscnndx;
3240 elf_strptr (runp->fileinfo->elf,
3241 runp->fileinfo->shstrndx,
3246 = runp->fileinfo->scninfo[runp->grpid].symbols;
3273 if (runp->fileinfo->scninfo[runp->grpid].outscnndx == 0)
3274 runp->fileinfo->scninfo[runp->grpid].outscnndx = here_groupidx;
3276 assert (runp->fileinfo->scninfo[runp->grpid].outscnndx
6886 rellist->scninfo->fileinfo->scninfo[SCNINFO_SHDR (rellist->scninfo->shdr).sh_info].outscnndx;