Lines Matching refs:ld_state
68 static const char **ld_generic_lib_extensions (struct ld_state *)
71 struct ld_state *statep);
73 struct ld_state *statep,
75 static void ld_generic_generate_sections (struct ld_state *statep);
76 static void ld_generic_create_sections (struct ld_state *statep);
77 static int ld_generic_flag_unresolved (struct ld_state *statep);
78 static int ld_generic_open_outfile (struct ld_state *statep, int machine,
80 static int ld_generic_create_outfile (struct ld_state *statep);
81 static void ld_generic_relocate_section (struct ld_state *statep,
85 static int ld_generic_finalize (struct ld_state *statep);
86 static bool ld_generic_special_section_number_p (struct ld_state *statep,
88 static bool ld_generic_section_type_p (struct ld_state *statep,
90 static XElf_Xword ld_generic_dynamic_section_flags (struct ld_state *statep);
91 static void ld_generic_initialize_plt (struct ld_state *statep, Elf_Scn *scn);
92 static void ld_generic_initialize_pltrel (struct ld_state *statep,
94 static void ld_generic_initialize_got (struct ld_state *statep, Elf_Scn *scn);
95 static void ld_generic_initialize_gotplt (struct ld_state *statep,
97 static void ld_generic_finalize_plt (struct ld_state *statep, size_t nsym,
100 static int ld_generic_rel_type (struct ld_state *statep);
101 static void ld_generic_count_relocations (struct ld_state *statep,
103 static void ld_generic_create_relocations (struct ld_state *statep,
164 return (ld_state.file_type == dso_file_type || ld_state.nplt > 0 in dynamically_linked_p()
165 || ld_state.ngot > 0); in dynamically_linked_p()
191 ld_state.nodefs = true; in ld_prepare_state()
195 ld_state.add_ld_comment = true; in ld_prepare_state()
199 ld_state.nextveridx = 2; in ld_prepare_state()
202 ld_symbol_tab_init (&ld_state.symbol_tab, 1027); in ld_prepare_state()
203 ld_section_tab_init (&ld_state.section_tab, 67); in ld_prepare_state()
204 ld_version_str_tab_init (&ld_state.version_str_tab, 67); in ld_prepare_state()
207 ld_state.shstrtab = ebl_strtabinit (true); in ld_prepare_state()
208 if (ld_state.shstrtab == NULL) in ld_prepare_state()
213 ld_state.callbacks.lib_extensions = ld_generic_lib_extensions; in ld_prepare_state()
214 ld_state.callbacks.file_process = ld_generic_file_process; in ld_prepare_state()
215 ld_state.callbacks.file_close = ld_generic_file_close; in ld_prepare_state()
216 ld_state.callbacks.generate_sections = ld_generic_generate_sections; in ld_prepare_state()
217 ld_state.callbacks.create_sections = ld_generic_create_sections; in ld_prepare_state()
218 ld_state.callbacks.flag_unresolved = ld_generic_flag_unresolved; in ld_prepare_state()
219 ld_state.callbacks.open_outfile = ld_generic_open_outfile; in ld_prepare_state()
220 ld_state.callbacks.create_outfile = ld_generic_create_outfile; in ld_prepare_state()
221 ld_state.callbacks.relocate_section = ld_generic_relocate_section; in ld_prepare_state()
222 ld_state.callbacks.finalize = ld_generic_finalize; in ld_prepare_state()
223 ld_state.callbacks.special_section_number_p = in ld_prepare_state()
225 ld_state.callbacks.section_type_p = ld_generic_section_type_p; in ld_prepare_state()
226 ld_state.callbacks.dynamic_section_flags = ld_generic_dynamic_section_flags; in ld_prepare_state()
227 ld_state.callbacks.initialize_plt = ld_generic_initialize_plt; in ld_prepare_state()
228 ld_state.callbacks.initialize_pltrel = ld_generic_initialize_pltrel; in ld_prepare_state()
229 ld_state.callbacks.initialize_got = ld_generic_initialize_got; in ld_prepare_state()
230 ld_state.callbacks.initialize_gotplt = ld_generic_initialize_gotplt; in ld_prepare_state()
231 ld_state.callbacks.finalize_plt = ld_generic_finalize_plt; in ld_prepare_state()
232 ld_state.callbacks.rel_type = ld_generic_rel_type; in ld_prepare_state()
233 ld_state.callbacks.count_relocations = ld_generic_count_relocations; in ld_prepare_state()
234 ld_state.callbacks.create_relocations = ld_generic_create_relocations; in ld_prepare_state()
241 emulation = ebl_backend_name (ld_state.ebl); in ld_prepare_state()
261 int (*initfct) (struct ld_state *) in ld_prepare_state()
262 = (int (*) (struct ld_state *)) dlsym (h, initname); in ld_prepare_state()
270 ld_state.ldlib = h; in ld_prepare_state()
273 return initfct (&ld_state); in ld_prepare_state()
278 extern int INIT_FCT_NAME(BASE_ELF_NAME) (struct ld_state *); in ld_prepare_state()
279 return INIT_FCT_NAME(BASE_ELF_NAME) (&ld_state); in ld_prepare_state()
337 return (check_for_duplicate2 (newp, ld_state.relfiles) in check_for_duplicate()
338 || check_for_duplicate2 (newp, ld_state.dsofiles) in check_for_duplicate()
339 || check_for_duplicate2 (newp, ld_state.needed)); in check_for_duplicate()
367 const char **exts = (ld_state.statically in open_along_path2()
369 : LIB_EXTENSION (&ld_state)); in open_along_path2()
420 fileinfo->rfname = obstack_strdup (&ld_state.smem, rfname); in open_along_path2()
422 if (unlikely (ld_state.trace_files)) in open_along_path2()
478 if (unlikely (ld_state.trace_files)) in open_along_path()
491 err = open_along_path2 (fileinfo, ld_state.ld_library_path1); in open_along_path()
497 ? ld_state.paths : ld_state.rpath_link); in open_along_path()
502 err = open_along_path2 (fileinfo, ld_state.ld_library_path2); in open_along_path()
508 err = open_along_path2 (fileinfo, ld_state.runpath_link); in open_along_path()
512 err = open_along_path2 (fileinfo, ld_state.default_paths); in open_along_path()
576 ebl_symbol_type_name (ld_state.ebl, oldp->type, in check_type_and_size()
579 ebl_symbol_type_name (ld_state.ebl, XELF_ST_TYPE (sym->st_info), in check_type_and_size()
622 --ld_state.nunresolved; in check_definition()
624 --ld_state.nunresolved_nonweak; in check_definition()
625 CDBL_LIST_DEL (ld_state.unresolved, oldp); in check_definition()
629 CDBL_LIST_DEL (ld_state.common_syms, oldp); in check_definition()
648 && (!ld_state.muldefs || verbose) in check_definition()
671 scnname = ebl_section_name (ld_state.ebl, shndx, 0, buf, sizeof (buf), in check_definition()
680 ebl_symbol_type_name (ld_state.ebl, XELF_ST_TYPE (sym->st_info), in check_definition()
695 scnname = ebl_section_name (ld_state.ebl, oldp->scndx, oldp->scndx, in check_definition()
703 if (likely (!ld_state.muldefs)) in check_definition()
714 CDBL_LIST_ADD_REAR (ld_state.from_dso, oldp); in check_definition()
715 ++ld_state.nfrom_dso; in check_definition()
720 ++ld_state.nplt; in check_definition()
722 ++ld_state.ngot; in check_definition()
740 CDBL_LIST_DEL (ld_state.from_dso, oldp); in check_definition()
741 --ld_state.nfrom_dso; in check_definition()
744 --ld_state.nplt; in check_definition()
746 --ld_state.ngot; in check_definition()
778 CDBL_LIST_ADD_REAR (ld_state.from_dso, oldp); in check_definition()
779 ++ld_state.nfrom_dso; in check_definition()
784 ++ld_state.nplt; in check_definition()
786 ++ld_state.ngot; in check_definition()
795 CDBL_LIST_ADD_REAR (ld_state.common_syms, oldp); in check_definition()
890 if (ld_state.strip == strip_none in mark_section_group()
892 || (!ebl_debugscn_p (ld_state.ebl, in mark_section_group()
897 || !ebl_debugscn_p (ld_state.ebl, in mark_section_group()
956 if (unlikely (shdr->sh_flags & SHF_GROUP) && ld_state.gc_sections) in mark_section_used()
985 && (ld_state.strip == strip_none in add_section()
992 && (fileinfo->status != in_archive || !ld_state.gc_sections)) in add_section()
1013 queued = ld_section_tab_find (&ld_state.section_tab, hval, &search); in add_section()
1068 queued->flags = ebl_sh_flags_combine (ld_state.ebl, queued->flags, in add_section()
1089 ld_state.need_tls |= (shdr->sh_flags & SHF_TLS) != 0; in add_section()
1092 ld_section_tab_insert (&ld_state.section_tab, hval, queued); in add_section()
1126 obstack_calloc (&ld_state.smem, scncnt * sizeof (struct scninfo)); in add_relocatable_file()
1227 obstack_calloc (&ld_state.smem, in add_relocatable_file()
1230 obstack_alloc (&ld_state.smem, in add_relocatable_file()
1261 obstack_calloc (&ld_state.smem, sizeof (struct symbol)); in add_relocatable_file()
1344 else if (! SECTION_TYPE_P (&ld_state, shdr->sh_type) in add_relocatable_file()
1386 && ld_state.execstack != execstack_false_force) in add_relocatable_file()
1387 ld_state.execstack = execstack_true; in add_relocatable_file()
1400 obstack_calloc (&ld_state.smem, in add_relocatable_file()
1438 obstack_calloc (&ld_state.smem, sizeof (struct symbol)); in add_relocatable_file()
1466 obstack_calloc (&ld_state.smem, ((nsymbols - nlocalsymbols) in add_relocatable_file()
1539 struct symbol *oldp = ld_symbol_tab_find (&ld_state.symbol_tab, in add_relocatable_file()
1545 newp = (struct symbol *) obstack_alloc (&ld_state.smem, in add_relocatable_file()
1573 CDBL_LIST_ADD_REAR (ld_state.unresolved, newp); in add_relocatable_file()
1574 ++ld_state.nunresolved; in add_relocatable_file()
1576 ++ld_state.nunresolved_nonweak; in add_relocatable_file()
1583 CDBL_LIST_ADD_REAR (ld_state.common_syms, newp); in add_relocatable_file()
1587 if (unlikely (ld_symbol_tab_insert (&ld_state.symbol_tab, in add_relocatable_file()
1600 ld_state.init_symbol = newp; in add_relocatable_file()
1602 ld_state.fini_symbol = newp; in add_relocatable_file()
1651 if (unlikely (ld_state.relfiles == NULL)) in add_relocatable_file()
1652 ld_state.relfiles = fileinfo->next = fileinfo; in add_relocatable_file()
1655 fileinfo->next = ld_state.relfiles->next; in add_relocatable_file()
1656 ld_state.relfiles = ld_state.relfiles->next = fileinfo; in add_relocatable_file()
1660 ld_state.nsymtab += fileinfo->nsymtab; in add_relocatable_file()
1661 ld_state.nlocalsymbols += fileinfo->nlocalsymbols; in add_relocatable_file()
1665 CSNGL_LIST_ADD_REAR (ld_state.dsofiles, fileinfo); in add_relocatable_file()
1666 ++ld_state.ndsofiles; in add_relocatable_file()
1674 ++ld_state.ndsofiles; in add_relocatable_file()
1705 res |= FILE_PROCESS (-1, curp, &ld_state, &curp); in ld_handle_filename_list()
1772 ld_state.srcfiles = NULL; in open_elf()
1797 fnames = ld_state.srcfiles; in open_elf()
1808 ld_state.srcfiles = NULL; in open_elf()
1850 if (unlikely (ld_state.trace_files)) in add_whole_archive()
1885 assert (ld_state.extract_rule == defaultextract in extract_from_archive()
1886 || ld_state.extract_rule == weakextract); in extract_from_archive()
1887 if ((likely (ld_state.extract_rule == defaultextract) in extract_from_archive()
1888 ? ld_state.nunresolved_nonweak : ld_state.nunresolved) == 0) in extract_from_archive()
1921 struct symbol *sym = ld_symbol_tab_find (&ld_state.symbol_tab, in extract_from_archive()
1946 newp = ld_new_inputfile (obstack_strdup (&ld_state.smem, in extract_from_archive()
1951 if (unlikely (ld_state.trace_files)) in extract_from_archive()
1974 ld_state.last_archive_used = fileinfo->archive_seq; in extract_from_archive()
2021 ebl_object_type_name (ld_state.ebl, in file_process2()
2030 != ebl_get_elfmachine (ld_state.ebl)) in file_process2()
2035 ebl_backend_name (ld_state.ebl)); in file_process2()
2071 if (ld_state.file_type == relocatable_file_type) in file_process2()
2115 CSNGL_LIST_ADD_REAR (ld_state.needed, newp); in file_process2()
2140 newp = (char *) obstack_alloc (&ld_state.smem, len); in file_process2()
2149 if (unlikely (ld_state.extract_rule == allextract)) in file_process2()
2153 else if (ld_state.file_type == relocatable_file_type) in file_process2()
2164 if (ld_state.group_start_requested in file_process2()
2165 && ld_state.group_start_archive == NULL) in file_process2()
2166 ld_state.group_start_archive = fileinfo; in file_process2()
2168 if (ld_state.archives == NULL) in file_process2()
2169 ld_state.archives = fileinfo; in file_process2()
2171 if (ld_state.tailarchives != NULL) in file_process2()
2172 ld_state.tailarchives->next = fileinfo; in file_process2()
2173 ld_state.tailarchives = fileinfo; in file_process2()
2195 struct ld_state *statep, struct usedfiles **nextp) in ld_generic_file_process()
2205 ld_state.group_start_requested = true; in ld_generic_file_process()
2254 if (ld_state.last_archive_used > fileinfo->group_backref->archive_seq) in ld_generic_file_process()
2257 ld_state.last_archive_used = 0; in ld_generic_file_process()
2264 struct usedfiles *runp = ld_state.archives; in ld_generic_file_process()
2279 ld_state.archives = NULL; in ld_generic_file_process()
2291 if (ld_state.group_start_requested) in ld_generic_file_process()
2293 if (ld_state.group_start_archive != ld_state.tailarchives) in ld_generic_file_process()
2296 *nextp = ld_state.tailarchives->group_backref = in ld_generic_file_process()
2297 ld_state.group_start_archive; in ld_generic_file_process()
2298 ld_state.last_archive_used = 0; in ld_generic_file_process()
2304 if (ld_state.tailarchives != fileinfo) in ld_generic_file_process()
2306 *nextp = ld_state.group_start_archive; in ld_generic_file_process()
2307 ld_state.last_archive_used = 0; in ld_generic_file_process()
2312 ld_state.group_start_requested = false; in ld_generic_file_process()
2313 ld_state.group_start_archive = NULL; in ld_generic_file_process()
2325 ld_generic_lib_extensions (struct ld_state *statep __attribute__ ((__unused__))) in ld_generic_lib_extensions()
2338 ld_generic_flag_unresolved (struct ld_state *statep) in ld_generic_flag_unresolved()
2342 if (ld_state.nunresolved_nonweak > 0) in ld_generic_flag_unresolved()
2348 s = first = ld_state.unresolved->next; in ld_generic_flag_unresolved()
2359 ld_state.need_got = true; in ld_generic_flag_unresolved()
2363 ld_state.got_symbol = s; in ld_generic_flag_unresolved()
2365 ld_state.dyn_symbol = s; in ld_generic_flag_unresolved()
2367 else if (ld_state.file_type != dso_file_type || !ld_state.nodefs) in ld_generic_flag_unresolved()
2396 ld_generic_file_close (struct usedfiles *fileinfo, struct ld_state *statep) in ld_generic_file_close()
2420 newp = (struct scnhead *) obstack_calloc (&ld_state.smem, in new_generated_scn()
2424 newp->nameent = ebl_strtabadd (ld_state.shstrtab, name, 0); in new_generated_scn()
2434 ld_section_tab_insert (&ld_state.section_tab, elf_hash (name), newp); in new_generated_scn()
2441 ld_generic_generate_sections (struct ld_state *statep) in ld_generic_generate_sections()
2444 int rel_type = REL_TYPE (&ld_state) == DT_REL ? SHT_REL : SHT_RELA; in ld_generic_generate_sections()
2468 if (ld_state.interp != NULL || ld_state.file_type != dso_file_type) in ld_generic_generate_sections()
2474 DYNAMIC_SECTION_FLAGS (&ld_state), in ld_generic_generate_sections()
2475 xelf_fsize (ld_state.outelf, ELF_T_DYN, 1), in ld_generic_generate_sections()
2476 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)); in ld_generic_generate_sections()
2481 ld_state.need_dynsym = true; in ld_generic_generate_sections()
2483 xelf_fsize (ld_state.outelf, ELF_T_SYM, 1), in ld_generic_generate_sections()
2484 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)); in ld_generic_generate_sections()
2499 if (ld_state.nplt > 0) in ld_generic_generate_sections()
2506 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1), in ld_generic_generate_sections()
2507 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)); in ld_generic_generate_sections()
2513 ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1) in ld_generic_generate_sections()
2514 : xelf_fsize (ld_state.outelf, ELF_T_RELA, 1), in ld_generic_generate_sections()
2515 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)); in ld_generic_generate_sections()
2520 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1), in ld_generic_generate_sections()
2521 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)); in ld_generic_generate_sections()
2525 if (ld_state.from_dso != NULL) in ld_generic_generate_sections()
2527 struct symbol *srunp = ld_state.from_dso; in ld_generic_generate_sections()
2562 ++ld_state.nverdeffile; in ld_generic_generate_sections()
2563 ++ld_state.nverdefused; in ld_generic_generate_sections()
2567 while ((srunp = srunp->next) != ld_state.from_dso); in ld_generic_generate_sections()
2574 xelf_fsize (ld_state.outelf, ELF_T_WORD, 1)); in ld_generic_generate_sections()
2580 if (ld_state.ndsofiles > 0) in ld_generic_generate_sections()
2582 struct usedfiles *frunp = ld_state.dsofiles; in ld_generic_generate_sections()
2597 while ((frunp = frunp->next) != ld_state.dsofiles); in ld_generic_generate_sections()
2603 xelf_fsize (ld_state.outelf, ELF_T_HALF, 1), in ld_generic_generate_sections()
2604 xelf_fsize (ld_state.outelf, ELF_T_HALF, 1)); in ld_generic_generate_sections()
2607 ld_state.ndynamic = (7 + (ld_state.runpath != NULL in ld_generic_generate_sections()
2608 || ld_state.rpath != NULL) in ld_generic_generate_sections()
2610 + (ld_state.init_symbol != NULL ? 1 : 0) in ld_generic_generate_sections()
2611 + (ld_state.fini_symbol != NULL ? 1 : 0) in ld_generic_generate_sections()
2614 + (ld_state.nplt > 0 ? 4 : 0) in ld_generic_generate_sections()
2615 + (ld_state.relsize_total > 0 ? 3 : 0)); in ld_generic_generate_sections()
2620 ld_state.need_symtab = (ld_state.file_type == relocatable_file_type in ld_generic_generate_sections()
2621 || ld_state.strip == strip_none); in ld_generic_generate_sections()
2624 if (ld_state.need_got) in ld_generic_generate_sections()
2628 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1), in ld_generic_generate_sections()
2629 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)); in ld_generic_generate_sections()
2632 if (ld_state.relsize_total > 0) in ld_generic_generate_sections()
2635 ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1) in ld_generic_generate_sections()
2636 : xelf_fsize (ld_state.outelf, ELF_T_RELA, 1), in ld_generic_generate_sections()
2637 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)); in ld_generic_generate_sections()
2646 if (status != 0 && ld_state.tempfname != NULL) in remove_tempfile()
2647 unlink (ld_state.tempfname); in remove_tempfile()
2654 ld_generic_open_outfile (struct ld_state *statep, int machine, int klass, in ld_generic_open_outfile()
2661 if (ld_state.outfname == NULL) in ld_generic_open_outfile()
2662 ld_state.outfname = "a.out"; in ld_generic_open_outfile()
2664 size_t outfname_len = strlen (ld_state.outfname); in ld_generic_open_outfile()
2665 char *tempfname = (char *) obstack_alloc (&ld_state.smem, in ld_generic_open_outfile()
2667 ld_state.tempfname = tempfname; in ld_generic_open_outfile()
2673 strcpy (mempcpy (tempfname, ld_state.outfname, outfname_len), ".XXXXXX"); in ld_generic_open_outfile()
2681 ld_state.file_type == relocatable_file_type in ld_generic_open_outfile()
2689 ld_state.outfd = fd; in ld_generic_open_outfile()
2696 Elf *elf = ld_state.outelf = elf_begin (fd, in ld_generic_open_outfile()
2721 if (ld_state.file_type == executable_file_type) in ld_generic_open_outfile()
2723 else if (ld_state.file_type == dso_file_type) in ld_generic_open_outfile()
2727 assert (ld_state.file_type == relocatable_file_type); in ld_generic_open_outfile()
2753 struct symbol *runp = ld_state.from_dso; in compute_copy_reloc_offset()
2781 while ((runp = runp->next) != ld_state.from_dso); in compute_copy_reloc_offset()
2792 struct symbol *runp = ld_state.common_syms; in compute_common_symbol_offset()
2813 while ((runp = runp->next) != ld_state.common_syms); in compute_common_symbol_offset()
2852 ++ld_state.nnotesections; in match_section()
2854 ld_state.allsections[ld_state.nallsections++] = (*scnhead); in match_section()
2910 newp = (struct scnhead *) obstack_calloc (&ld_state.smem, in match_section()
2927 ++ld_state.nnotesections; in match_section()
2929 ld_state.allsections[ld_state.nallsections++] = newp; in match_section()
2936 queued = ld_state.allsections[ld_state.nallsections - 1]; in match_section()
2950 queued->flags = ebl_sh_flags_combine (ld_state.ebl, in match_section()
2969 struct scnhead *temp[ld_state.nallsections]; in sort_sections_lscript()
2972 memcpy (temp, ld_state.allsections, in sort_sections_lscript()
2973 ld_state.nallsections * sizeof (temp[0])); in sort_sections_lscript()
2974 size_t nallsections = ld_state.nallsections; in sort_sections_lscript()
2977 struct output_segment *segment = ld_state.output_segments->next; in sort_sections_lscript()
2978 ld_state.output_segments->next = NULL; in sort_sections_lscript()
2979 ld_state.output_segments = segment; in sort_sections_lscript()
2984 ld_state.nallsections = 0; in sort_sections_lscript()
3013 last_writable = ld_state.nallsections - 1; in sort_sections_lscript()
3020 if (ld_state.ncopy > 0 || ld_state.common_syms != NULL) in sort_sections_lscript()
3025 if (ld_state.allsections[last_writable]->type != SHT_NOBITS) in sort_sections_lscript()
3031 memmove (&ld_state.allsections[last_writable + 1], in sort_sections_lscript()
3032 &ld_state.allsections[last_writable], in sort_sections_lscript()
3033 (ld_state.nallsections - last_writable) in sort_sections_lscript()
3034 * sizeof (ld_state.allsections[0])); in sort_sections_lscript()
3036 ld_state.allsections[last_writable] = (struct scnhead *) in sort_sections_lscript()
3037 obstack_calloc (&ld_state.smem, sizeof (struct scnhead)); in sort_sections_lscript()
3040 ld_state.allsections[last_writable]->name = ".bss"; in sort_sections_lscript()
3042 ld_state.allsections[last_writable]->type = SHT_NOBITS; in sort_sections_lscript()
3044 ld_state.allsections[last_writable]->segment_nr in sort_sections_lscript()
3045 = ld_state.allsections[last_writable - 1]->segment_nr; in sort_sections_lscript()
3050 if (ld_state.ncopy > 0) in sort_sections_lscript()
3054 obstack_calloc (&ld_state.smem, sizeof (*si) + sizeof (XElf_Shdr)); in sort_sections_lscript()
3057 struct scninfo *si = (struct scninfo *) obstack_calloc (&ld_state.smem, in sort_sections_lscript()
3067 ld_state.copy_section = si; in sort_sections_lscript()
3069 if (likely (ld_state.allsections[last_writable]->last != NULL)) in sort_sections_lscript()
3071 si->next = ld_state.allsections[last_writable]->last->next; in sort_sections_lscript()
3072 ld_state.allsections[last_writable]->last->next = si; in sort_sections_lscript()
3073 ld_state.allsections[last_writable]->last = si; in sort_sections_lscript()
3076 ld_state.allsections[last_writable]->last = si->next = si; in sort_sections_lscript()
3080 if (ld_state.common_syms != NULL) in sort_sections_lscript()
3084 obstack_calloc (&ld_state.smem, sizeof (*si) + sizeof (XElf_Shdr)); in sort_sections_lscript()
3087 struct scninfo *si = (struct scninfo *) obstack_calloc (&ld_state.smem, in sort_sections_lscript()
3097 ld_state.common_section = si; in sort_sections_lscript()
3099 if (likely (ld_state.allsections[last_writable]->last != NULL)) in sort_sections_lscript()
3101 si->next = ld_state.allsections[last_writable]->last->next; in sort_sections_lscript()
3102 ld_state.allsections[last_writable]->last->next = si; in sort_sections_lscript()
3103 ld_state.allsections[last_writable]->last = si; in sort_sections_lscript()
3106 ld_state.allsections[last_writable]->last = si->next = si; in sort_sections_lscript()
3127 ld_generic_create_sections (struct ld_state *statep) in ld_generic_create_sections()
3135 if (ld_state.file_type != relocatable_file_type) in ld_generic_create_sections()
3140 for (cnt = 0; cnt < ld_state.nallsections; ++cnt) in ld_generic_create_sections()
3141 if ((ld_state.allsections[cnt]->type == SHT_REL in ld_generic_create_sections()
3142 || ld_state.allsections[cnt]->type == SHT_RELA) in ld_generic_create_sections()
3145 && ld_state.allsections[cnt]->last != NULL) in ld_generic_create_sections()
3148 list = ld_state.allsections[cnt]->last; in ld_generic_create_sections()
3153 list->next = ld_state.allsections[cnt]->last->next; in ld_generic_create_sections()
3154 ld_state.allsections[cnt]->last->next = first; in ld_generic_create_sections()
3155 list = ld_state.allsections[cnt]->last; in ld_generic_create_sections()
3159 ld_state.allsections[cnt] = NULL; in ld_generic_create_sections()
3161 ld_state.rellist = list; in ld_generic_create_sections()
3163 if (ld_state.output_segments == NULL) in ld_generic_create_sections()
3172 for (cnt = 0; cnt < ld_state.nallsections; ++cnt) in ld_generic_create_sections()
3174 struct scnhead *head = ld_state.allsections[cnt]; in ld_generic_create_sections()
3187 if (ld_state.file_type == relocatable_file_type in ld_generic_create_sections()
3220 scn = elf_newscn (ld_state.outelf); in ld_generic_create_sections()
3231 here_group->next = ld_state.groups; in ld_generic_create_sections()
3239 = ebl_strtabadd (ld_state.shstrtab, in ld_generic_create_sections()
3248 ld_state.groups = here_group; in ld_generic_create_sections()
3253 here_group = ld_state.groups; in ld_generic_create_sections()
3285 head->nameent = ebl_strtabadd (ld_state.shstrtab, head->name, 0); in ld_generic_create_sections()
3289 scn = elf_newscn (ld_state.outelf); in ld_generic_create_sections()
3312 ld_state.dynsymscnidx = elf_ndxscn (scn); in ld_generic_create_sections()
3316 groups = ld_state.groups; in ld_generic_create_sections()
3324 scn = elf_getscn (ld_state.outelf, groups->outscnidx); in ld_generic_create_sections()
3364 bool result = ld_state.default_bind_local; in reduce_symbol_p()
3391 verp = ld_version_str_tab_find (&ld_state.version_str_tab, in reduce_symbol_p()
3427 xelf_getshdr (elf_getscn (ld_state.outelf, 1), shdr); in eval_expression()
3435 val = ld_state.pagesize; in eval_expression()
3585 if (ld_state.is_system_library) in optimal_bucket_size()
3631 if (ld_state.entry != NULL) in find_entry_point()
3633 struct symbol search = { .name = ld_state.entry }; in find_entry_point()
3636 syment = ld_symbol_tab_find (&ld_state.symbol_tab, in find_entry_point()
3637 elf_hash (ld_state.entry), &search); in find_entry_point()
3641 Elf_Data *data = elf_getdata (elf_getscn (ld_state.outelf, in find_entry_point()
3642 ld_state.symscnidx), NULL); in find_entry_point()
3648 xelf_getsym (data, ld_state.dblindirect[syment->outsymidx], sym); in find_entry_point()
3650 if (sym == NULL && ld_state.need_dynsym && syment->outdynsymidx != 0) in find_entry_point()
3653 data = elf_getdata (elf_getscn (ld_state.outelf, in find_entry_point()
3654 ld_state.dynsymscnidx), NULL); in find_entry_point()
3667 assert (ld_state.need_symtab); in find_entry_point()
3668 assert (ld_state.symscnidx != 0); in find_entry_point()
3681 if (ld_state.file_type == executable_file_type) in find_entry_point()
3683 if (ld_state.entry != NULL) in find_entry_point()
3686 ld_state.entry, in find_entry_point()
3687 xelf_getclass (ld_state.outelf) == ELFCLASS32 ? 10 : 18, in find_entry_point()
3692 xelf_getclass (ld_state.outelf) == ELFCLASS32 ? 10 : 18, in find_entry_point()
3704 assert (ld_state.file_type != relocatable_file_type); in fillin_special_symbol()
3729 Elf_Data *data = elf_getdata (elf_getscn (ld_state.outelf, scnidx), in fillin_special_symbol()
3734 assert (elf_getdata (elf_getscn (ld_state.outelf, scnidx), data) in fillin_special_symbol()
3791 runp->verdefused[def->vd_ndx] = ld_state.nextveridx++; in allocate_version_names()
3807 size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1); in create_verneed_data()
3808 size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1); in create_verneed_data()
3912 optimal_gnu_hash_size (gnuhashcodes, nsym_dyn, ld_state.optlevel, in create_gnu_hash()
3916 Elf_Scn *hashscn = elf_getscn (ld_state.outelf, ld_state.gnuhashscnidx); in create_gnu_hash()
3924 shdr->sh_link = ld_state.dynsymscnidx; in create_gnu_hash()
3927 hashdata->d_size = (xelf_fsize (ld_state.outelf, ELF_T_ADDR, in create_gnu_hash()
3939 gnu_buckets = &gnu_bitmask[xelf_fsize (ld_state.outelf, ELF_T_ADDR, in create_gnu_hash()
3970 bool bm32 = (xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1) in create_gnu_hash()
4065 nbucket = optimal_bucket_size (hashcodes, nsym_dyn, ld_state.optlevel); in create_hash()
4067 Elf_Scn *hashscn = elf_getscn (ld_state.outelf, ld_state.hashscnidx); in create_hash()
4075 shdr->sh_link = ld_state.dynsymscnidx; in create_hash()
4127 if (strcmp (ld_state.build_id, "md5") == 0 in create_build_id_section()
4128 || strcmp (ld_state.build_id, "uuid") == 0) in create_build_id_section()
4130 else if (strcmp (ld_state.build_id, "sha1") == 0) in create_build_id_section()
4134 assert (ld_state.build_id[0] == '0' && ld_state.build_id[1] == 'x'); in create_build_id_section()
4137 d->d_size += strlen (ld_state.build_id) / 2; in create_build_id_section()
4151 (void) elf_getshstrndx (ld_state.outelf, &shstrndx); in compute_hash_sum()
4153 const char *ident = elf_getident (ld_state.outelf, NULL); in compute_hash_sum()
4161 while ((scn = elf_nextscn (ld_state.outelf, scn)) != NULL) in compute_hash_sum()
4168 if (SECTION_STRIP_P (shdr, elf_strptr (ld_state.outelf, shstrndx, in compute_hash_sum()
4189 if (gelf_xlatetof (ld_state.outelf, data, data, ident[EI_DATA]) in compute_hash_sum()
4198 if (gelf_xlatetom (ld_state.outelf, data, data, ident[EI_DATA]) in compute_hash_sum()
4212 Elf_Data *d = elf_getdata (elf_getscn (ld_state.outelf, in compute_build_id()
4213 ld_state.buildidscnidx), NULL); in compute_build_id()
4221 if (strcmp (ld_state.build_id, "sha1") == 0) in compute_build_id()
4237 else if (strcmp (ld_state.build_id, "md5") == 0) in compute_build_id()
4253 else if (strcmp (ld_state.build_id, "uuid") == 0) in compute_build_id()
4269 const char *cp = ld_state.build_id + 2; in compute_build_id()
4304 ld_generic_create_outfile (struct ld_state *statep) in ld_generic_create_outfile()
4349 if (ld_state.need_symtab) in ld_generic_create_outfile()
4353 symscn = elf_newscn (ld_state.outelf); in ld_generic_create_outfile()
4354 ld_state.symscnidx = elf_ndxscn (symscn); in ld_generic_create_outfile()
4364 nsym_allocated = (1 + ld_state.nsymtab + ld_state.nplt + ld_state.ngot in ld_generic_create_outfile()
4365 + ld_state.nusedsections + ld_state.nlscript_syms); in ld_generic_create_outfile()
4366 symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, in ld_generic_create_outfile()
4371 if (unlikely (ld_state.nusedsections >= SHN_LORESERVE)) in ld_generic_create_outfile()
4373 xndxscn = elf_newscn (ld_state.outelf); in ld_generic_create_outfile()
4374 ld_state.xndxscnidx = elf_ndxscn (xndxscn); in ld_generic_create_outfile()
4387 xndxdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_WORD, in ld_generic_create_outfile()
4391 xelf_fsize (ld_state.outelf, ELF_T_WORD, in ld_generic_create_outfile()
4400 assert (ld_state.need_dynsym); in ld_generic_create_outfile()
4404 symscn = elf_getscn (ld_state.outelf, ld_state.dynsymscnidx); in ld_generic_create_outfile()
4415 nsym_allocated = (1 + ld_state.nsymtab + ld_state.nplt + ld_state.ngot in ld_generic_create_outfile()
4416 - ld_state.nlocalsymbols + ld_state.nlscript_syms); in ld_generic_create_outfile()
4417 symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, in ld_generic_create_outfile()
4423 xelf_fsize (ld_state.outelf, ELF_T_SYM, 1)); in ld_generic_create_outfile()
4426 symdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1); in ld_generic_create_outfile()
4437 for (cnt = 0; cnt < ld_state.nallsections; ++cnt) in ld_generic_create_outfile()
4439 struct scnhead *head = ld_state.allsections[cnt]; in ld_generic_create_outfile()
4450 scn = elf_getscn (ld_state.outelf, head->scnidx); in ld_generic_create_outfile()
4461 const char *interp = ld_state.interp ?: "/lib/ld.so.1"; in ld_generic_create_outfile()
4472 ld_state.interpscnidx = head->scnidx; in ld_generic_create_outfile()
4480 ld_state.gotscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4483 INITIALIZE_GOT (&ld_state, scn); in ld_generic_create_outfile()
4491 ld_state.gotpltscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4494 INITIALIZE_GOTPLT (&ld_state, scn); in ld_generic_create_outfile()
4509 outdata->d_size = ld_state.relsize_total; in ld_generic_create_outfile()
4511 outdata->d_type = (REL_TYPE (&ld_state) == DT_REL in ld_generic_create_outfile()
4514 outdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1); in ld_generic_create_outfile()
4517 ld_state.reldynscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4528 if (ld_state.dt_flags != 0) in ld_generic_create_outfile()
4529 ++ld_state.ndynamic; in ld_generic_create_outfile()
4530 if (ld_state.dt_flags_1 != 0) in ld_generic_create_outfile()
4531 ++ld_state.ndynamic; in ld_generic_create_outfile()
4532 if (ld_state.dt_feature_1 != 0) in ld_generic_create_outfile()
4533 ++ld_state.ndynamic; in ld_generic_create_outfile()
4542 outdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_DYN, in ld_generic_create_outfile()
4543 ld_state.ndynamic); in ld_generic_create_outfile()
4547 outdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1); in ld_generic_create_outfile()
4550 ld_state.dynamicscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4558 assert (ld_state.dynsymscnidx == elf_ndxscn (scn)); in ld_generic_create_outfile()
4566 ld_state.dynstrscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4575 if (ld_state.ndsofiles > 0) in ld_generic_create_outfile()
4577 struct usedfiles *frunp = ld_state.dsofiles; in ld_generic_create_outfile()
4583 while ((frunp = frunp->next) != ld_state.dsofiles); in ld_generic_create_outfile()
4590 if (ld_state.runpath != NULL || ld_state.rpath != NULL) in ld_generic_create_outfile()
4599 if (ld_state.runpath != NULL) in ld_generic_create_outfile()
4601 startp = ld_state.runpath; in ld_generic_create_outfile()
4606 startp = ld_state.rpath; in ld_generic_create_outfile()
4614 cp = str = (char *) obstack_alloc (&ld_state.smem, len); in ld_generic_create_outfile()
4626 ld_state.rxxpath_strent = ebl_strtabadd (dynstrtab, str, len); in ld_generic_create_outfile()
4627 ld_state.rxxpath_tag = tag; in ld_generic_create_outfile()
4636 ld_state.hashscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4644 ld_state.gnuhashscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4652 ld_state.pltscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4655 INITIALIZE_PLT (&ld_state, scn); in ld_generic_create_outfile()
4663 ld_state.pltrelscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4666 INITIALIZE_PLTREL (&ld_state, scn); in ld_generic_create_outfile()
4674 ld_state.versymscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4682 ld_state.verneedscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4690 ld_state.buildidscnidx = elf_ndxscn (scn); in ld_generic_create_outfile()
4702 if (ld_state.need_symtab) in ld_generic_create_outfile()
4749 if (ld_state.file_type == relocatable_file_type) in ld_generic_create_outfile()
4776 data->d_size = xelf_fsize (ld_state.outelf, type, head->relsize); in ld_generic_create_outfile()
4779 data->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1); in ld_generic_create_outfile()
5121 if (ld_state.add_ld_comment in ld_generic_create_outfile()
5168 if (ld_state.got_symbol != NULL) in ld_generic_create_outfile()
5172 fillin_special_symbol (ld_state.got_symbol, ld_state.gotpltscnidx, in ld_generic_create_outfile()
5177 if (ld_state.dyn_symbol != NULL) in ld_generic_create_outfile()
5180 fillin_special_symbol (ld_state.dyn_symbol, ld_state.dynamicscnidx, in ld_generic_create_outfile()
5186 if (ld_state.lscript_syms != NULL) in ld_generic_create_outfile()
5188 struct symbol *rsym = ld_state.lscript_syms; in ld_generic_create_outfile()
5198 file = ld_state.relfiles->next; in ld_generic_create_outfile()
5199 symdata = elf_getdata (elf_getscn (ld_state.outelf, ld_state.symscnidx), in ld_generic_create_outfile()
5210 assert (ld_state.file_type != relocatable_file_type in ld_generic_create_outfile()
5223 for (cnt = ld_state.need_symtab ? 1 : file->nlocalsymbols; cnt < maxcnt; in ld_generic_create_outfile()
5236 if (ld_state.need_symtab) in ld_generic_create_outfile()
5245 < ld_state.nallsections); in ld_generic_create_outfile()
5246 file->symindirect[cnt] = ld_state.allsections[file->scninfo[xndx].allsectionsidx]->scnsymidx; in ld_generic_create_outfile()
5254 if ((ld_state.strip >= strip_all || !ld_state.need_symtab) in ld_generic_create_outfile()
5275 if (!ld_state.export_all_dynamic && !ld_state.need_symtab) in ld_generic_create_outfile()
5299 if (!ld_state.need_symtab) in ld_generic_create_outfile()
5340 sym->st_value = (ld_state.common_section->offset in ld_generic_create_outfile()
5342 assert (ld_state.common_section->outscnndx < SHN_LORESERVE); in ld_generic_create_outfile()
5343 sym->st_shndx = ld_state.common_section->outscnndx; in ld_generic_create_outfile()
5349 if (SPECIAL_SECTION_NUMBER_P (&ld_state, sym->st_shndx)) in ld_generic_create_outfile()
5359 && (ld_state.strip < strip_everything in ld_generic_create_outfile()
5400 = ld_symbol_tab_find (&ld_state.symbol_tab, in ld_generic_create_outfile()
5426 while ((file = file->next) != ld_state.relfiles->next); in ld_generic_create_outfile()
5432 if (ld_state.verneedscnidx != 0) in ld_generic_create_outfile()
5440 runp = ld_state.dsofiles->next; in ld_generic_create_outfile()
5443 while ((runp = runp->next) != ld_state.dsofiles->next); in ld_generic_create_outfile()
5445 if (ld_state.needed != NULL) in ld_generic_create_outfile()
5447 runp = ld_state.needed->next; in ld_generic_create_outfile()
5450 while ((runp = runp->next) != ld_state.needed->next); in ld_generic_create_outfile()
5455 if (ld_state.default_bind_local || ld_state.version_str_tab.filled > 0) in ld_generic_create_outfile()
5482 if (ld_state.strip == strip_everything) in ld_generic_create_outfile()
5511 if (ld_state.from_dso != NULL) in ld_generic_create_outfile()
5514 size_t plt_base = nsym + ld_state.nfrom_dso - ld_state.nplt; in ld_generic_create_outfile()
5518 assert (ld_state.nfrom_dso >= ld_state.nplt); in ld_generic_create_outfile()
5519 runp = ld_state.from_dso; in ld_generic_create_outfile()
5566 char *newp = (char *) obstack_alloc (&ld_state.smem, namelen); in ld_generic_create_outfile()
5580 while ((runp = runp->next) != ld_state.from_dso); in ld_generic_create_outfile()
5583 assert (plt_idx == ld_state.nplt); in ld_generic_create_outfile()
5589 symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym); in ld_generic_create_outfile()
5591 xndxdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_WORD, nsym); in ld_generic_create_outfile()
5594 strscn = elf_newscn (ld_state.outelf); in ld_generic_create_outfile()
5595 ld_state.strscnidx = elf_ndxscn (strscn); in ld_generic_create_outfile()
5635 ld_state.dblindirect = dblindirect in ld_generic_create_outfile()
5658 && (ld_state.need_symtab || ld_state.export_all_dynamic)) in ld_generic_create_outfile()
5736 if (ld_state.versymscnidx != 0) in ld_generic_create_outfile()
5741 versymscn = elf_getscn (ld_state.outelf, ld_state.versymscnidx); in ld_generic_create_outfile()
5748 versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF, in ld_generic_create_outfile()
5751 versymdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_HALF, 1); in ld_generic_create_outfile()
5761 if (unlikely (!ld_state.need_symtab)) in ld_generic_create_outfile()
5765 size_t reduce = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym_local - 1); in ld_generic_create_outfile()
5807 else if (ld_state.need_dynsym) in ld_generic_create_outfile()
5812 dynsymscn = elf_getscn (ld_state.outelf, ld_state.dynsymscnidx); in ld_generic_create_outfile()
5815 dynstrdata = elf_newdata (elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
5816 ld_state.dynstrscnidx)); in ld_generic_create_outfile()
5823 dynsymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, in ld_generic_create_outfile()
5826 xelf_fsize (ld_state.outelf, ELF_T_SYM, 1)); in ld_generic_create_outfile()
5829 dynsymdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1); in ld_generic_create_outfile()
5833 hashcodes = (Elf32_Word *) xcalloc (__builtin_popcount ((int) ld_state.hash_style) in ld_generic_create_outfile()
5867 || (!ld_state.export_all_dynamic in ld_generic_create_outfile()
5889 if (ld_state.file_type != relocatable_file_type) in ld_generic_create_outfile()
5894 assert (ld_state.hashscnidx != 0 || ld_state.gnuhashscnidx != 0); in ld_generic_create_outfile()
5939 versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF, in ld_generic_create_outfile()
5946 shdr->sh_link = ld_state.dynsymscnidx; in ld_generic_create_outfile()
5952 if (ld_state.file_type != relocatable_file_type) in ld_generic_create_outfile()
5979 if (ld_state.verneedscnidx != 0) in ld_generic_create_outfile()
5984 size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1); in ld_generic_create_outfile()
5985 size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1); in ld_generic_create_outfile()
5989 verneedscn = elf_getscn (ld_state.outelf, ld_state.verneedscnidx); in ld_generic_create_outfile()
5997 verneeddata->d_size = (ld_state.nverdeffile * verneed_size in ld_generic_create_outfile()
5998 + ld_state.nverdefused * vernaux_size); in ld_generic_create_outfile()
6001 verneeddata->d_align = xelf_fsize (ld_state.outelf, ELF_T_WORD, 1); in ld_generic_create_outfile()
6005 ntotal = ld_state.nverdeffile; in ld_generic_create_outfile()
6006 runp = ld_state.dsofiles->next; in ld_generic_create_outfile()
6013 while (ntotal > 0 && runp != ld_state.dsofiles->next); in ld_generic_create_outfile()
6017 runp = ld_state.needed->next; in ld_generic_create_outfile()
6024 while (ntotal > 0 && runp != ld_state.needed->next); in ld_generic_create_outfile()
6030 shdr->sh_link = ld_state.dynstrscnidx; in ld_generic_create_outfile()
6031 shdr->sh_info = ld_state.nverdeffile; in ld_generic_create_outfile()
6036 dynsymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym_dyn); in ld_generic_create_outfile()
6038 versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF, in ld_generic_create_outfile()
6046 shdr->sh_link = ld_state.dynstrscnidx; in ld_generic_create_outfile()
6055 ld_state.ndynsym = nsym_dyn; in ld_generic_create_outfile()
6058 symscn = elf_getscn (ld_state.outelf, ld_state.symscnidx); in ld_generic_create_outfile()
6066 shdr->sh_link = ld_state.strscnidx; in ld_generic_create_outfile()
6068 shdr->sh_entsize = xelf_fsize (ld_state.outelf, ELF_T_SYM, 1); in ld_generic_create_outfile()
6074 if (ld_state.symscnidx != 0) in ld_generic_create_outfile()
6075 symtab_ent = ebl_strtabadd (ld_state.shstrtab, ".symtab", 8); in ld_generic_create_outfile()
6076 if (ld_state.xndxscnidx != 0) in ld_generic_create_outfile()
6077 xndx_ent = ebl_strtabadd (ld_state.shstrtab, ".symtab_shndx", 14); in ld_generic_create_outfile()
6078 if (ld_state.strscnidx != 0) in ld_generic_create_outfile()
6079 strtab_ent = ebl_strtabadd (ld_state.shstrtab, ".strtab", 8); in ld_generic_create_outfile()
6090 shstrtab_scn = elf_newscn (ld_state.outelf); in ld_generic_create_outfile()
6098 shstrtab_ent = ebl_strtabadd (ld_state.shstrtab, ".shstrtab", 10); in ld_generic_create_outfile()
6109 ebl_strtabfinalize (ld_state.shstrtab, data); in ld_generic_create_outfile()
6112 for (cnt = 0; cnt < ld_state.nallsections; ++cnt) in ld_generic_create_outfile()
6113 if (ld_state.allsections[cnt]->scnidx != 0) in ld_generic_create_outfile()
6117 scn = elf_getscn (ld_state.outelf, ld_state.allsections[cnt]->scnidx); in ld_generic_create_outfile()
6122 shdr->sh_name = ebl_strtaboffset (ld_state.allsections[cnt]->nameent); in ld_generic_create_outfile()
6132 Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.symscnidx); in ld_generic_create_outfile()
6144 Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.xndxscnidx); in ld_generic_create_outfile()
6156 Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.strscnidx); in ld_generic_create_outfile()
6184 groups = ld_state.groups; in ld_generic_create_outfile()
6187 Elf_Scn *scn = elf_getscn (ld_state.outelf, groups->outscnidx); in ld_generic_create_outfile()
6194 shdr->sh_link = ld_state.symscnidx; in ld_generic_create_outfile()
6207 shdr->sh_info = ld_state.dblindirect[si]; in ld_generic_create_outfile()
6217 if (ld_state.file_type != relocatable_file_type) in ld_generic_create_outfile()
6231 struct output_segment *segment = ld_state.output_segments; in ld_generic_create_outfile()
6239 nphdr += ld_state.nnotesections; in ld_generic_create_outfile()
6248 if (ld_state.interp != NULL || ld_state.file_type != dso_file_type) in ld_generic_create_outfile()
6253 if (ld_state.need_tls) in ld_generic_create_outfile()
6258 if (xelf_newphdr (ld_state.outelf, nphdr) == 0) in ld_generic_create_outfile()
6266 if (elf_update (ld_state.outelf, ELF_C_NULL) == -1) in ld_generic_create_outfile()
6274 Elf_Scn *scn = elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6275 ld_state.allsections[nsec]->scnidx); in ld_generic_create_outfile()
6293 if (ld_state.interp != NULL in ld_generic_create_outfile()
6294 || ld_state.file_type != dso_file_type) in ld_generic_create_outfile()
6298 segment = ld_state.output_segments; in ld_generic_create_outfile()
6307 segment->align = ld_state.pagesize; in ld_generic_create_outfile()
6315 if (ld_state.allsections[nsec]->name in ld_generic_create_outfile()
6328 isect = first = ld_state.allsections[nsec]->last; in ld_generic_create_outfile()
6341 ld_state.allsections[nsec]->addr = addr; in ld_generic_create_outfile()
6363 if (segment == ld_state.output_segments) in ld_generic_create_outfile()
6402 if (++nsec >= ld_state.nallsections) in ld_generic_create_outfile()
6405 scn = elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6406 ld_state.allsections[nsec]->scnidx); in ld_generic_create_outfile()
6453 xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr); in ld_generic_create_outfile()
6464 (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr); in ld_generic_create_outfile()
6472 xelf_getehdr (ld_state.outelf, ehdr); in ld_generic_create_outfile()
6476 if (ld_state.need_tls) in ld_generic_create_outfile()
6478 xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr); in ld_generic_create_outfile()
6487 ld_state.tls_tcb = tls_end; in ld_generic_create_outfile()
6488 ld_state.tls_start = tls_start; in ld_generic_create_outfile()
6490 (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr); in ld_generic_create_outfile()
6495 xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr); in ld_generic_create_outfile()
6503 | (ld_state.execstack == execstack_true ? PF_X : 0)); in ld_generic_create_outfile()
6504 phdr->p_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1); in ld_generic_create_outfile()
6506 (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr); in ld_generic_create_outfile()
6512 if (ld_state.need_symtab) in ld_generic_create_outfile()
6529 sym->st_value += ld_state.allsections[shndx - 1]->addr; in ld_generic_create_outfile()
6537 if (ld_state.need_dynsym) in ld_generic_create_outfile()
6549 sym->st_value += ld_state.allsections[sym->st_shndx - 1]->addr; in ld_generic_create_outfile()
6563 while ((se = ld_symbol_tab_iterate (&ld_state.symbol_tab, &p)) != NULL) in ld_generic_create_outfile()
6593 if (ld_state.reldynscnidx != 0) in ld_generic_create_outfile()
6595 assert (ld_state.dynsymscnidx != 0); in ld_generic_create_outfile()
6596 scn = elf_getscn (ld_state.outelf, ld_state.reldynscnidx); in ld_generic_create_outfile()
6600 shdr->sh_link = ld_state.dynsymscnidx; in ld_generic_create_outfile()
6611 if (ld_state.interp != NULL || ld_state.file_type != dso_file_type) in ld_generic_create_outfile()
6613 assert (ld_state.interpscnidx != 0); in ld_generic_create_outfile()
6614 xelf_getshdr (elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6615 ld_state.interpscnidx), shdr); in ld_generic_create_outfile()
6618 xelf_getphdr_ptr (ld_state.outelf, idx, phdr); in ld_generic_create_outfile()
6621 phdr->p_vaddr = ld_state.output_segments->addr + phdr->p_offset; in ld_generic_create_outfile()
6626 phdr->p_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1); in ld_generic_create_outfile()
6628 (void) xelf_update_phdr (ld_state.outelf, idx, phdr); in ld_generic_create_outfile()
6632 xelf_getphdr_ptr (ld_state.outelf, idx, phdr); in ld_generic_create_outfile()
6642 (void) xelf_update_phdr (ld_state.outelf, idx, phdr); in ld_generic_create_outfile()
6648 assert (ld_state.dynamicscnidx); in ld_generic_create_outfile()
6649 outscn = elf_getscn (ld_state.outelf, ld_state.dynamicscnidx); in ld_generic_create_outfile()
6653 xelf_getphdr_ptr (ld_state.outelf, idx, phdr); in ld_generic_create_outfile()
6663 (void) xelf_update_phdr (ld_state.outelf, idx, phdr); in ld_generic_create_outfile()
6666 assert (ld_state.dynstrscnidx != 0); in ld_generic_create_outfile()
6667 shdr->sh_link = ld_state.dynstrscnidx; in ld_generic_create_outfile()
6675 if (ld_state.ndsofiles > 0) in ld_generic_create_outfile()
6677 struct usedfiles *runp = ld_state.dsofiles->next; in ld_generic_create_outfile()
6684 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6687 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6691 while ((runp = runp->next) != ld_state.dsofiles->next); in ld_generic_create_outfile()
6695 if (ld_state.rxxpath_strent != NULL) in ld_generic_create_outfile()
6696 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6697 ld_state.rxxpath_tag, in ld_generic_create_outfile()
6698 ebl_strtaboffset (ld_state.rxxpath_strent)); in ld_generic_create_outfile()
6702 if (ld_state.init_symbol != NULL) in ld_generic_create_outfile()
6706 if (ld_state.need_symtab) in ld_generic_create_outfile()
6708 dblindirect[ld_state.init_symbol->outsymidx], in ld_generic_create_outfile()
6711 xelf_getsym (dynsymdata, ld_state.init_symbol->outdynsymidx, in ld_generic_create_outfile()
6715 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6718 if (ld_state.fini_symbol != NULL) in ld_generic_create_outfile()
6722 if (ld_state.need_symtab) in ld_generic_create_outfile()
6724 dblindirect[ld_state.fini_symbol->outsymidx], in ld_generic_create_outfile()
6727 xelf_getsym (dynsymdata, ld_state.fini_symbol->outdynsymidx, in ld_generic_create_outfile()
6731 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6737 xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.hashscnidx), in ld_generic_create_outfile()
6740 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_HASH, in ld_generic_create_outfile()
6744 assert (ld_state.dynsymscnidx != 0); in ld_generic_create_outfile()
6745 xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.dynsymscnidx), in ld_generic_create_outfile()
6748 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_SYMTAB, in ld_generic_create_outfile()
6751 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_SYMENT, in ld_generic_create_outfile()
6752 xelf_fsize (ld_state.outelf, ELF_T_SYM, 1)); in ld_generic_create_outfile()
6755 xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.dynstrscnidx), in ld_generic_create_outfile()
6758 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_STRTAB, in ld_generic_create_outfile()
6761 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_STRSZ, in ld_generic_create_outfile()
6765 if (ld_state.nplt > 0) in ld_generic_create_outfile()
6768 xelf_getshdr (elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6769 ld_state.gotpltscnidx), shdr); in ld_generic_create_outfile()
6771 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6776 xelf_getshdr (elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6777 ld_state.pltrelscnidx), shdr); in ld_generic_create_outfile()
6779 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6782 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6785 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6789 if (ld_state.relsize_total > 0) in ld_generic_create_outfile()
6792 xelf_getshdr (elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6793 ld_state.reldynscnidx), shdr); in ld_generic_create_outfile()
6795 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6802 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6808 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6811 ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1) in ld_generic_create_outfile()
6812 : xelf_fsize (ld_state.outelf, ELF_T_RELA, in ld_generic_create_outfile()
6816 if (ld_state.verneedscnidx != 0) in ld_generic_create_outfile()
6818 xelf_getshdr (elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6819 ld_state.verneedscnidx), shdr); in ld_generic_create_outfile()
6821 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6824 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6825 DT_VERNEEDNUM, ld_state.nverdeffile); in ld_generic_create_outfile()
6828 if (ld_state.versymscnidx != 0) in ld_generic_create_outfile()
6830 xelf_getshdr (elf_getscn (ld_state.outelf, in ld_generic_create_outfile()
6831 ld_state.versymscnidx), shdr); in ld_generic_create_outfile()
6833 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6838 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_DEBUG, 0); in ld_generic_create_outfile()
6839 assert (ld_state.ndynamic_filled < ld_state.ndynamic); in ld_generic_create_outfile()
6842 if (ld_state.dt_flags != 0) in ld_generic_create_outfile()
6843 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_FLAGS, in ld_generic_create_outfile()
6844 ld_state.dt_flags); in ld_generic_create_outfile()
6847 if (ld_state.dt_flags_1 != 0) in ld_generic_create_outfile()
6848 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6849 DT_FLAGS_1, ld_state.dt_flags_1); in ld_generic_create_outfile()
6852 if (ld_state.dt_feature_1 != 0) in ld_generic_create_outfile()
6853 new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, in ld_generic_create_outfile()
6854 DT_FEATURE_1, ld_state.dt_feature_1); in ld_generic_create_outfile()
6856 assert (ld_state.ndynamic_filled <= ld_state.ndynamic); in ld_generic_create_outfile()
6871 assert (ld_state.file_type == relocatable_file_type); in ld_generic_create_outfile()
6874 outscn = elf_getscn (ld_state.outelf, rellist->scnidx); in ld_generic_create_outfile()
6880 shdr->sh_link = ld_state.symscnidx; in ld_generic_create_outfile()
6900 if (ld_state.rellist != NULL) in ld_generic_create_outfile()
6902 assert (ld_state.file_type != relocatable_file_type); in ld_generic_create_outfile()
6909 xelf_getehdr (ld_state.outelf, ehdr); in ld_generic_create_outfile()
6920 Elf_Scn *scn = elf_getscn (ld_state.outelf, 0); in ld_generic_create_outfile()
6935 if (ld_state.file_type != relocatable_file_type) in ld_generic_create_outfile()
6939 if (unlikely (xelf_update_ehdr (ld_state.outelf, ehdr) == 0)) in ld_generic_create_outfile()
6946 free (ld_state.dblindirect); in ld_generic_create_outfile()
6954 if (ld_state.build_id != NULL) in ld_generic_create_outfile()
6968 ld_generic_relocate_section (struct ld_state *statep, Elf_Scn *outscn, in ld_generic_relocate_section()
6980 ld_generic_finalize (struct ld_state *statep) in ld_generic_finalize()
6983 if (elf_update (ld_state.outelf, ELF_C_WRITE) == -1) in ld_generic_finalize()
6988 if (elf_end (ld_state.outelf) != 0) in ld_generic_finalize()
6994 if (fstat (ld_state.outfd, &temp_st) != 0) in ld_generic_finalize()
6999 if (rename (ld_state.tempfname, ld_state.outfname) != 0) in ld_generic_finalize()
7005 if (stat (ld_state.outfname, &new_st) != 0 in ld_generic_finalize()
7010 unlink (ld_state.outfname); in ld_generic_finalize()
7016 (void) close (ld_state.outfd); in ld_generic_finalize()
7019 ld_state.tempfname = NULL; in ld_generic_finalize()
7026 ld_generic_special_section_number_p (struct ld_state *statep, size_t number) in ld_generic_special_section_number_p()
7034 ld_generic_section_type_p (struct ld_state *statep, GElf_Word type) in ld_generic_section_type_p()
7050 ld_generic_dynamic_section_flags (struct ld_state *statep) in ld_generic_dynamic_section_flags()
7059 ld_generic_initialize_plt (struct ld_state *statep, Elf_Scn *scn) in ld_generic_initialize_plt()
7070 ld_generic_initialize_pltrel (struct ld_state *statep, Elf_Scn *scn) in ld_generic_initialize_pltrel()
7081 ld_generic_initialize_got (struct ld_state *statep, Elf_Scn *scn) in ld_generic_initialize_got()
7092 ld_generic_initialize_gotplt (struct ld_state *statep, Elf_Scn *scn) in ld_generic_initialize_gotplt()
7103 ld_generic_finalize_plt (struct ld_state *statep, size_t nsym, size_t nsym_dyn, in ld_generic_finalize_plt()
7111 ld_generic_rel_type (struct ld_state *statep) in ld_generic_rel_type()
7124 ld_generic_count_relocations (struct ld_state *statep, struct scninfo *scninfo) in ld_generic_count_relocations()
7135 ld_generic_create_relocations (struct ld_state *statep, in ld_generic_create_relocations()