Lines Matching refs:ofl
47 remove_local(Ofl_desc *ofl, Sym_desc *sdp, int allow_ldynsym) in remove_local() argument
54 if ((ofl->ofl_flags & FLG_OF_REDLSYM) == 0) { in remove_local()
55 ofl->ofl_locscnt--; in remove_local()
57 err = st_delstring(ofl->ofl_strtab, sdp->sd_name); in remove_local()
61 ofl->ofl_dynlocscnt--; in remove_local()
63 err = st_delstring(ofl->ofl_dynstrtab, sdp->sd_name); in remove_local()
73 remove_scoped(Ofl_desc *ofl, Sym_desc *sdp, int allow_ldynsym) in remove_scoped() argument
80 ofl->ofl_scopecnt--; in remove_scoped()
81 ofl->ofl_elimcnt++; in remove_scoped()
83 err = st_delstring(ofl->ofl_strtab, sdp->sd_name); in remove_scoped()
87 ofl->ofl_dynscopecnt--; in remove_scoped()
89 err = st_delstring(ofl->ofl_dynstrtab, sdp->sd_name); in remove_scoped()
98 ignore_sym(Ofl_desc *ofl, Ifl_desc *ifl, Sym_desc *sdp, int allow_ldynsym) in ignore_sym() argument
123 DBG_CALL(Dbg_syms_discarded(ofl->ofl_lml, sdp)); in ignore_sym()
125 remove_local(ofl, sdp, allow_ldynsym); in ignore_sym()
142 DBG_CALL(Dbg_syms_discarded(ofl->ofl_lml, sdp)); in ignore_sym()
144 remove_scoped(ofl, sdp, allow_ldynsym); in ignore_sym()
156 DBG_CALL(Dbg_syms_discarded(ofl->ofl_lml, sdp)); in ignore_sym()
159 remove_local(ofl, sdp, allow_ldynsym); in ignore_sym()
161 remove_scoped(ofl, sdp, allow_ldynsym); in ignore_sym()
207 adjust_os_count(Ofl_desc *ofl) in adjust_os_count() argument
214 if ((ofl->ofl_flags & FLG_OF_ADJOSCNT) == 0) in adjust_os_count()
222 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) { in adjust_os_count()
247 ofl->ofl_shdrcnt--; in adjust_os_count()
248 err = st_delstring(ofl->ofl_shdrsttab, in adjust_os_count()
274 ignore_section_processing(Ofl_desc *ofl) in ignore_section_processing() argument
282 int allow_ldynsym = OFL_ALLOW_LDYNSYM(ofl); in ignore_section_processing()
285 for (APLIST_TRAVERSE(ofl->ofl_objs, idx1, ifl)) { in ignore_section_processing()
292 DBG_CALL(Dbg_unused_file(ofl->ofl_lml, in ignore_section_processing()
294 if (((ofl->ofl_flags1 & FLG_OF1_IGNPRC) == 0) || in ignore_section_processing()
345 ignore_sym(ofl, ifl, sdp, allow_ldynsym); in ignore_section_processing()
352 if ((ofl->ofl_flags1 & FLG_OF1_IGNPRC) == 0) in ignore_section_processing()
359 REL_CACHE_TRAVERSE(&ofl->ofl_outrels, idx1, rcbp, rsp) { in ignore_section_processing()
388 ofl->ofl_reloccntsub++; in ignore_section_processing()
391 ofl->ofl_relocrelcnt--; in ignore_section_processing()
398 ofl->ofl_flags |= FLG_OF_ADJOSCNT; in ignore_section_processing()
429 new_section(Ofl_desc *ofl, Word shtype, const char *shname, Xword entcnt, in new_section() argument
492 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
530 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
572 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
577 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
583 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
594 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
600 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
612 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
622 ofl->ofl_flags |= FLG_OF_OSABI; in new_section()
645 data->d_version = ofl->ofl_dehdr->e_version; in new_section()
694 new_section_from_template(Ofl_desc *ofl, Is_desc *tmpl_isp, size_t size, in new_section_from_template() argument
709 data->d_version = ofl->ofl_dehdr->e_version; in new_section_from_template()
746 ld_make_bss(Ofl_desc *ofl, Xword size, Xword align, uint_t ident) in ld_make_bss() argument
752 Xword rsize = (Xword)ofl->ofl_relocbsssz; in ld_make_bss()
759 if (new_section(ofl, SHT_NOBITS, NULL, 0, in ld_make_bss()
771 ofl->ofl_istlsbss = isec; in ld_make_bss()
776 ofl->ofl_isbss = isec; in ld_make_bss()
782 ofl->ofl_islbss = isec; in ld_make_bss()
791 if ((osp = ld_place_section(ofl, isec, NULL, ident, NULL)) == in ld_make_bss()
807 if (ofl->ofl_flags1 & flagtotest) { in ld_make_bss()
808 ofl->ofl_dynshdrcnt++; in ld_make_bss()
822 make_array(Ofl_desc *ofl, Word shtype, const char *sectname, APlist *alp) in make_array() argument
842 if (new_section(ofl, shtype, sectname, entcount, &isec, &shdr, &data) == in make_array()
849 if (ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_array, NULL) == in make_array()
855 if ((ofl->ofl_osinitarray == NULL) && (shtype == SHT_INIT_ARRAY)) in make_array()
856 ofl->ofl_osinitarray = osp; in make_array()
857 if ((ofl->ofl_ospreinitarray == NULL) && (shtype == SHT_PREINIT_ARRAY)) in make_array()
858 ofl->ofl_ospreinitarray = osp; in make_array()
859 else if ((ofl->ofl_osfiniarray == NULL) && (shtype == SHT_FINI_ARRAY)) in make_array()
860 ofl->ofl_osfiniarray = osp; in make_array()
886 DBG_CALL(Dbg_reloc_generate(ofl->ofl_lml, osp, in make_array()
891 if (ld_process_sym_reloc(ofl, &reld, (Rel *)&reloc, isec, in make_array()
908 make_comment(Ofl_desc *ofl) in make_comment() argument
914 if (new_section(ofl, SHT_PROGBITS, MSG_ORIG(MSG_SCN_COMMENT), 0, in make_comment()
918 data->d_buf = (void *)ofl->ofl_sgsid; in make_comment()
919 data->d_size = strlen(ofl->ofl_sgsid) + 1; in make_comment()
926 return ((uintptr_t)ld_place_section(ofl, isec, NULL, in make_comment()
939 make_dynamic(Ofl_desc *ofl) in make_dynamic() argument
951 ofl_flag_t flags = ofl->ofl_flags; in make_dynamic()
958 if (OFL_IS_STATIC_OBJ(ofl)) in make_dynamic()
959 strtbl = ofl->ofl_strtab; in make_dynamic()
961 strtbl = ofl->ofl_dynstrtab; in make_dynamic()
968 if (new_section(ofl, SHT_DYNAMIC, MSG_ORIG(MSG_SCN_DYNAMIC), 0, in make_dynamic()
985 if (ofl->ofl_osinterp) in make_dynamic()
988 osp = ofl->ofl_osdynamic = in make_dynamic()
989 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_dynamic, NULL); in make_dynamic()
994 for (APLIST_TRAVERSE(ofl->ofl_sos, idx, ifl)) { in make_dynamic()
1010 DBG_CALL(Dbg_util_nl(ofl->ofl_lml, DBG_NL_STD)); in make_dynamic()
1011 DBG_CALL(Dbg_unused_file(ofl->ofl_lml, ifl->ifl_soname, in make_dynamic()
1021 if (OFL_GUIDANCE(ofl, FLG_OFG_NO_UNUSED) && in make_dynamic()
1023 ld_eprintf(ofl, ERR_GUIDANCE, in make_dynamic()
1048 ofl->ofl_dtflags_1 |= DF_1_ORIGIN; in make_dynamic()
1049 ofl->ofl_dtflags |= DF_ORIGIN; in make_dynamic()
1054 DBG_CALL(Dbg_util_nl(ofl->ofl_lml, DBG_NL_STD)); in make_dynamic()
1060 cnt += alist_nitems(ofl->ofl_dtsfltrs); in make_dynamic()
1066 SYM_NOHASH, NULL, ofl)) != NULL) && in make_dynamic()
1073 SYM_NOHASH, NULL, ofl)) != NULL) && in make_dynamic()
1084 if (ofl->ofl_soname) { in make_dynamic()
1086 if (st_insert(strtbl, ofl->ofl_soname) == -1) in make_dynamic()
1089 if (ofl->ofl_filtees) { in make_dynamic()
1091 if (st_insert(strtbl, ofl->ofl_filtees) == -1) in make_dynamic()
1098 if (strstr(ofl->ofl_filtees, in make_dynamic()
1100 ofl->ofl_dtflags_1 |= DF_1_ORIGIN; in make_dynamic()
1101 ofl->ofl_dtflags |= DF_ORIGIN; in make_dynamic()
1106 if (ofl->ofl_rpath) { in make_dynamic()
1108 if (st_insert(strtbl, ofl->ofl_rpath) == -1) in make_dynamic()
1115 if (strstr(ofl->ofl_rpath, MSG_ORIG(MSG_STR_ORIGIN))) { in make_dynamic()
1116 ofl->ofl_dtflags_1 |= DF_1_ORIGIN; in make_dynamic()
1117 ofl->ofl_dtflags |= DF_ORIGIN; in make_dynamic()
1125 if (ofl->ofl_config) { in make_dynamic()
1127 if (st_insert(strtbl, ofl->ofl_config) == -1) in make_dynamic()
1134 if (strstr(ofl->ofl_config, MSG_ORIG(MSG_STR_ORIGIN))) { in make_dynamic()
1135 ofl->ofl_dtflags_1 |= DF_1_ORIGIN; in make_dynamic()
1136 ofl->ofl_dtflags |= DF_ORIGIN; in make_dynamic()
1139 if (ofl->ofl_depaudit) { in make_dynamic()
1141 if (st_insert(strtbl, ofl->ofl_depaudit) == -1) in make_dynamic()
1144 if (ofl->ofl_audit) { in make_dynamic()
1146 if (st_insert(strtbl, ofl->ofl_audit) == -1) in make_dynamic()
1161 if (OFL_ALLOW_LDYNSYM(ofl)) in make_dynamic()
1164 if ((ofl->ofl_dynsymsortcnt > 0) || in make_dynamic()
1165 (ofl->ofl_dyntlssortcnt > 0)) in make_dynamic()
1168 if (ofl->ofl_dynsymsortcnt > 0) in make_dynamic()
1171 if (ofl->ofl_dyntlssortcnt > 0) in make_dynamic()
1182 if ((flags & FLG_OF_COMREL) && ofl->ofl_relocrelcnt) in make_dynamic()
1188 if (ofl->ofl_osfiniarray) /* DT_FINI_ARRAY */ in make_dynamic()
1191 if (ofl->ofl_osinitarray) /* DT_INIT_ARRAY */ in make_dynamic()
1194 if (ofl->ofl_ospreinitarray) /* DT_PREINIT_ARRAY & */ in make_dynamic()
1201 if (ofl->ofl_pltcnt) in make_dynamic()
1207 if (ofl->ofl_pltpad) in make_dynamic()
1214 if (ofl->ofl_relocsz) in make_dynamic()
1228 if (ofl->ofl_osmove) in make_dynamic()
1234 cnt += ofl->ofl_regsymcnt; in make_dynamic()
1240 for (APLIST_TRAVERSE(ofl->ofl_rtldinfo, idx, sdp)) in make_dynamic()
1248 (sgp->sg_phdr.p_flags & PF_W) && ofl->ofl_osinterp) in make_dynamic()
1255 if (ofl->ofl_oscap) in make_dynamic()
1262 if (ofl->ofl_oscapinfo) in make_dynamic()
1270 if (ofl->ofl_oscapchain) in make_dynamic()
1276 if (ofl->ofl_aslr != 0) /* DT_SUNW_ASLR */ in make_dynamic()
1281 if (ofl->ofl_flags & FLG_OF_KMOD) in make_dynamic()
1287 (*ld_targ.t_mr.mr_mach_make_dynamic)(ofl, &cnt); in make_dynamic()
1321 ofl->ofl_flags |= FLG_OF_OSABI; in make_dynamic()
1323 return ((uintptr_t)ofl->ofl_osdynamic); in make_dynamic()
1330 ld_make_got(Ofl_desc *ofl) in ld_make_got() argument
1335 size_t size = (size_t)ofl->ofl_gotcnt * ld_targ.t_m.m_got_entsize; in ld_make_got()
1336 size_t rsize = (size_t)ofl->ofl_relocgotsz; in ld_make_got()
1338 if (new_section(ofl, SHT_PROGBITS, MSG_ORIG(MSG_SCN_GOT), 0, in ld_make_got()
1348 ofl->ofl_osgot = ld_place_section(ofl, isec, NULL, in ld_make_got()
1350 if (ofl->ofl_osgot == (Os_desc *)S_ERROR) in ld_make_got()
1353 ofl->ofl_osgot->os_szoutrels = (Xword)rsize; in ld_make_got()
1362 make_interp(Ofl_desc *ofl) in make_interp() argument
1367 const char *iname = ofl->ofl_interp; in make_interp()
1373 if (ofl->ofl_flags1 & FLG_OF1_NOINTRP) in make_interp()
1384 if (((ofl->ofl_flags & (FLG_OF_DYNAMIC | FLG_OF_EXEC | in make_interp()
1393 iname = ofl->ofl_interp = ld_targ.t_m.m_def_interp; in make_interp()
1397 if (new_section(ofl, SHT_PROGBITS, MSG_ORIG(MSG_SCN_INTERP), 0, in make_interp()
1405 ofl->ofl_osinterp = in make_interp()
1406 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_interp, NULL); in make_interp()
1407 return ((uintptr_t)ofl->ofl_osinterp); in make_interp()
1417 make_sym_sec(Ofl_desc *ofl, const char *sectname, Word stype, int ident) in make_sym_sec() argument
1427 if (new_section(ofl, stype, sectname, 0, &isec, &shdr, &data) == in make_sym_sec()
1431 return (ld_place_section(ofl, isec, NULL, ident, NULL)); in make_sym_sec()
1612 make_cap(Ofl_desc *ofl, Word shtype, const char *shname, int ident) in make_cap() argument
1621 Objcapset *ocapset = &ofl->ofl_ocapset; in make_cap()
1630 if (OFL_IS_STATIC_OBJ(ofl)) in make_cap()
1631 strtbl = ofl->ofl_strtab; in make_cap()
1633 strtbl = ofl->ofl_dynstrtab; in make_cap()
1640 if ((ofl->ofl_flags & FLG_OF_OTOSCAP) && (ofl->ofl_capsymcnt == 0)) in make_cap()
1641 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_CAP_NOSYMSFOUND)); in make_cap()
1648 if ((ofl->ofl_flags & FLG_OF_OTOSCAP) && ofl->ofl_capsymcnt && in make_cap()
1649 (ofl->ofl_capfamilies == NULL)) { in make_cap()
1650 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_CAP_NOSYMSFOUND)); in make_cap()
1651 ld_cap_move_symtoobj(ofl); in make_cap()
1652 ofl->ofl_capsymcnt = 0; in make_cap()
1653 ofl->ofl_capgroups = NULL; in make_cap()
1654 ofl->ofl_flags &= ~FLG_OF_OTOSCAP; in make_cap()
1660 capstr_value(ofl->ofl_lml, CA_SUNW_PLAT, &ocapset->oc_plat, &title); in make_cap()
1661 capstr_value(ofl->ofl_lml, CA_SUNW_MACH, &ocapset->oc_mach, &title); in make_cap()
1662 capmask_value(ofl->ofl_lml, CA_SUNW_HW_3, &ocapset->oc_hw_3, &title); in make_cap()
1663 capmask_value(ofl->ofl_lml, CA_SUNW_HW_2, &ocapset->oc_hw_2, &title); in make_cap()
1664 capmask_value(ofl->ofl_lml, CA_SUNW_HW_1, &ocapset->oc_hw_1, &title); in make_cap()
1665 capmask_value(ofl->ofl_lml, CA_SUNW_SF_1, &ocapset->oc_sf_1, &title); in make_cap()
1701 if (ofl->ofl_capsymcnt) { in make_cap()
1708 size += ofl->ofl_capsymcnt; in make_cap()
1714 if (new_section(ofl, shtype, shname, size, &isec, in make_cap()
1729 ofl->ofl_flags |= FLG_OF_CAPSTRS; in make_cap()
1736 ofl->ofl_flags |= (FLG_OF_PTCAP | FLG_OF_CAPSTRS); in make_cap()
1751 ofl->ofl_flags |= (FLG_OF_PTCAP | FLG_OF_CAPSTRS); in make_cap()
1766 ofl->ofl_flags |= FLG_OF_PTCAP; in make_cap()
1770 ofl->ofl_flags |= FLG_OF_PTCAP; in make_cap()
1774 ofl->ofl_flags |= FLG_OF_PTCAP; in make_cap()
1778 ofl->ofl_flags |= FLG_OF_PTCAP; in make_cap()
1786 if (ofl->ofl_capgroups) { in make_cap()
1789 for (APLIST_TRAVERSE(ofl->ofl_capgroups, idx1, cgp)) { in make_cap()
1797 ofl->ofl_flags |= FLG_OF_CAPSTRS; in make_cap()
1812 ofl->ofl_flags |= FLG_OF_CAPSTRS; in make_cap()
1831 ofl->ofl_flags |= FLG_OF_CAPSTRS; in make_cap()
1872 if (((ofl->ofl_flags & FLG_OF_PTCAP) == 0) || in make_cap()
1881 ld_eprintf(ofl, ERR_WARNING, in make_cap()
1893 if (ofl->ofl_flags & FLG_OF_CAPSTRS) in make_cap()
1899 if ((ofl->ofl_oscap = ld_place_section(ofl, isec, in make_cap()
1908 if (ofl->ofl_capfamilies) { in make_cap()
1909 if ((ofl->ofl_oscapinfo = make_sym_sec(ofl, in make_cap()
1918 if (ofl->ofl_capchaincnt && in make_cap()
1919 ((ofl->ofl_flags & FLG_OF_RELOBJ) == 0)) { in make_cap()
1920 if (new_section(ofl, SHT_SUNW_capchain, in make_cap()
1922 ofl->ofl_capchaincnt, &isec, &shdr, in make_cap()
1926 ofl->ofl_oscapchain = ld_place_section(ofl, isec, in make_cap()
1928 if (ofl->ofl_oscapchain == (Os_desc *)S_ERROR) in make_cap()
1941 make_plt(Ofl_desc *ofl) in make_plt() argument
1947 (((size_t)ofl->ofl_pltcnt + (size_t)ofl->ofl_pltpad) * in make_plt()
1949 size_t rsize = (size_t)ofl->ofl_relocpltsz; in make_plt()
1957 if (new_section(ofl, SHT_PROGBITS, MSG_ORIG(MSG_SCN_PLT), 0, in make_plt()
1969 ofl->ofl_osplt = ld_place_section(ofl, isec, NULL, in make_plt()
1971 if (ofl->ofl_osplt == (Os_desc *)S_ERROR) in make_plt()
1974 ofl->ofl_osplt->os_szoutrels = (Xword)rsize; in make_plt()
1985 make_hash(Ofl_desc *ofl) in make_hash() argument
1991 Word nsyms = ofl->ofl_globcnt; in make_hash()
1998 if (new_section(ofl, SHT_HASH, MSG_ORIG(MSG_SCN_HASH), 0, in make_hash()
2006 ofl->ofl_oshash = in make_hash()
2007 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_hash, NULL); in make_hash()
2008 if (ofl->ofl_oshash == (Os_desc *)S_ERROR) in make_hash()
2014 ofl->ofl_hashbkts = findprime(nsyms); in make_hash()
2024 cnt = 2 + ofl->ofl_hashbkts + DYNSYM_ALL_CNT(ofl); in make_hash()
2043 make_symtab(Ofl_desc *ofl) in make_symtab() argument
2056 if (new_section(ofl, SHT_SYMTAB, MSG_ORIG(MSG_SCN_SYMTAB), 0, in make_symtab()
2064 if ((ofl->ofl_ossymtab = ld_place_section(ofl, isec, NULL, in make_symtab()
2073 if ((ofl->ofl_shdrcnt + 1) >= SHN_LORESERVE) { in make_symtab()
2077 if (new_section(ofl, SHT_SYMTAB_SHNDX, in make_symtab()
2082 if ((ofl->ofl_ossymshndx = ld_place_section(ofl, xisec, NULL, in make_symtab()
2091 symcnt = (size_t)(1 + SYMTAB_ALL_CNT(ofl)); in make_symtab()
2124 make_dynsym(Ofl_desc *ofl) in make_dynsym() argument
2147 allow_ldynsym = OFL_ALLOW_LDYNSYM(ofl); in make_dynsym()
2153 if (allow_ldynsym && new_section(ofl, SHT_SUNW_LDYNSYM, in make_dynsym()
2157 if (new_section(ofl, SHT_DYNSYM, MSG_ORIG(MSG_SCN_DYNSYM), 0, in make_dynsym()
2166 ((ofl->ofl_osldynsym = ld_place_section(ofl, lisec, NULL, in make_dynsym()
2169 ofl->ofl_osdynsym = in make_dynsym()
2170 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_dynsym, NULL); in make_dynsym()
2171 if (ofl->ofl_osdynsym == (Os_desc *)S_ERROR) in make_dynsym()
2174 cnt = DYNSYM_ALL_CNT(ofl); in make_dynsym()
2190 cnt = 1 + ofl->ofl_dynlocscnt + ofl->ofl_dynscopecnt; in make_dynsym()
2206 make_dynsort(Ofl_desc *ofl) in make_dynsort() argument
2213 if (!OFL_ALLOW_LDYNSYM(ofl)) in make_dynsort()
2217 if (ofl->ofl_dynsymsortcnt > 0) { in make_dynsort()
2218 if (new_section(ofl, SHT_SUNW_symsort, in make_dynsort()
2219 MSG_ORIG(MSG_SCN_DYNSYMSORT), ofl->ofl_dynsymsortcnt, in make_dynsort()
2223 if ((ofl->ofl_osdynsymsort = ld_place_section(ofl, isec, NULL, in make_dynsort()
2229 if (ofl->ofl_dyntlssortcnt > 0) { in make_dynsort()
2230 if (new_section(ofl, SHT_SUNW_tlssort, in make_dynsort()
2232 ofl->ofl_dyntlssortcnt, &isec, &shdr, &data) == S_ERROR) in make_dynsort()
2235 if ((ofl->ofl_osdyntlssort = ld_place_section(ofl, isec, NULL, in make_dynsort()
2249 make_dyn_shndx(Ofl_desc *ofl, const char *shname, Os_desc *symtab, in make_dyn_shndx() argument
2260 if (new_section(ofl, SHT_SYMTAB_SHNDX, shname, in make_dyn_shndx()
2265 if ((*ret_os = ld_place_section(ofl, isec, NULL, in make_dyn_shndx()
2278 make_dynsym_shndx(Ofl_desc *ofl) in make_dynsym_shndx() argument
2284 if (OFL_ALLOW_LDYNSYM(ofl)) { in make_dynsym_shndx()
2285 if (make_dyn_shndx(ofl, MSG_ORIG(MSG_SCN_LDYNSYM_SHNDX), in make_dynsym_shndx()
2286 ofl->ofl_osldynsym, &ofl->ofl_osldynshndx) == S_ERROR) in make_dynsym_shndx()
2291 if (make_dyn_shndx(ofl, MSG_ORIG(MSG_SCN_DYNSYM_SHNDX), in make_dynsym_shndx()
2292 ofl->ofl_osdynsym, &ofl->ofl_osdynshndx) == S_ERROR) in make_dynsym_shndx()
2303 make_shstrtab(Ofl_desc *ofl) in make_shstrtab() argument
2310 if (new_section(ofl, SHT_STRTAB, MSG_ORIG(MSG_SCN_SHSTRTAB), in make_shstrtab()
2318 ofl->ofl_osshstrtab = in make_shstrtab()
2319 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_note, NULL); in make_shstrtab()
2320 if (ofl->ofl_osshstrtab == (Os_desc *)S_ERROR) in make_shstrtab()
2323 size = st_getstrtab_sz(ofl->ofl_shdrsttab); in make_shstrtab()
2336 make_strtab(Ofl_desc *ofl) in make_strtab() argument
2348 if (st_insert(ofl->ofl_strtab, ofl->ofl_name) == -1) in make_strtab()
2351 size = st_getstrtab_sz(ofl->ofl_strtab); in make_strtab()
2354 if (new_section(ofl, SHT_STRTAB, MSG_ORIG(MSG_SCN_STRTAB), in make_strtab()
2362 ofl->ofl_osstrtab = in make_strtab()
2363 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_strtab, NULL); in make_strtab()
2364 return ((uintptr_t)ofl->ofl_osstrtab); in make_strtab()
2371 make_dynstr(Ofl_desc *ofl) in make_dynstr() argument
2382 if (OFL_ALLOW_LDYNSYM(ofl)) { in make_dynstr()
2383 if (st_insert(ofl->ofl_dynstrtab, ofl->ofl_name) == -1) in make_dynstr()
2385 ofl->ofl_dynscopecnt++; in make_dynstr()
2392 if (ofl->ofl_regsyms) { in make_dynstr()
2395 for (ndx = 0; ndx < ofl->ofl_regsymsno; ndx++) { in make_dynstr()
2398 if ((sdp = ofl->ofl_regsyms[ndx]) == NULL) in make_dynstr()
2408 if (st_insert(ofl->ofl_dynstrtab, sdp->sd_name) == -1) in make_dynstr()
2416 if (ofl->ofl_dtsfltrs != NULL) { in make_dynstr()
2420 for (ALIST_TRAVERSE(ofl->ofl_dtsfltrs, idx, dftp)) in make_dynstr()
2421 if (st_insert(ofl->ofl_dynstrtab, dftp->dft_str) == -1) in make_dynstr()
2425 size = st_getstrtab_sz(ofl->ofl_dynstrtab); in make_dynstr()
2428 if (new_section(ofl, SHT_STRTAB, MSG_ORIG(MSG_SCN_DYNSTR), in make_dynstr()
2433 if (!(ofl->ofl_flags & FLG_OF_RELOBJ)) in make_dynstr()
2441 ofl->ofl_osdynstr = in make_dynstr()
2442 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_dynstr, NULL); in make_dynstr()
2443 return ((uintptr_t)ofl->ofl_osdynstr); in make_dynstr()
2454 make_reloc(Ofl_desc *ofl, Os_desc *osp) in make_reloc() argument
2485 } else if (ofl->ofl_flags & FLG_OF_COMREL) { in make_reloc()
2486 size = (ofl->ofl_reloccnt - ofl->ofl_reloccntsub) * relsize; in make_reloc()
2490 size = ofl->ofl_relocrelsz; in make_reloc()
2500 ofl->ofl_relocsz += (Xword)size; in make_reloc()
2502 if (new_section(ofl, ld_targ.t_m.m_rel_sht_type, sectname, 0, &isec, in make_reloc()
2509 if (OFL_ALLOW_DYNSYM(ofl) && (sh_flags & SHF_ALLOC)) in make_reloc()
2520 rosp = ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_rel, NULL); in make_reloc()
2552 ofl->ofl_osrel = rosp; in make_reloc()
2558 if (ofl->ofl_osrelhead == (Os_desc *)0) in make_reloc()
2559 ofl->ofl_osrelhead = rosp; in make_reloc()
2568 make_verneed(Ofl_desc *ofl) in make_verneed() argument
2578 if (new_section(ofl, SHT_SUNW_verneed, MSG_ORIG(MSG_SCN_SUNWVERSION), in make_verneed()
2583 data->d_size = ofl->ofl_verneedsz; in make_verneed()
2584 shdr->sh_size = (Xword)ofl->ofl_verneedsz; in make_verneed()
2586 ofl->ofl_osverneed = in make_verneed()
2587 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_version, NULL); in make_verneed()
2588 return ((uintptr_t)ofl->ofl_osverneed); in make_verneed()
2598 make_verdef(Ofl_desc *ofl) in make_verdef() argument
2611 vdp = (Ver_desc *)ofl->ofl_verdesc->apl_data[0]; in make_verdef()
2613 if (OFL_IS_STATIC_OBJ(ofl)) in make_verdef()
2614 strtab = ofl->ofl_strtab; in make_verdef()
2616 strtab = ofl->ofl_dynstrtab; in make_verdef()
2625 if (new_section(ofl, SHT_SUNW_verdef, MSG_ORIG(MSG_SCN_SUNWVERSION), in make_verdef()
2630 data->d_size = ofl->ofl_verdefsz; in make_verdef()
2631 shdr->sh_size = (Xword)ofl->ofl_verdefsz; in make_verdef()
2633 ofl->ofl_osverdef = in make_verdef()
2634 ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_version, NULL); in make_verdef()
2635 return ((uintptr_t)ofl->ofl_osverdef); in make_verdef()
2642 ld_make_parexpn_data(Ofl_desc *ofl, size_t size, Xword align) in ld_make_parexpn_data() argument
2649 if (new_section(ofl, SHT_PROGBITS, MSG_ORIG(MSG_SCN_DATA), 0, in ld_make_parexpn_data()
2669 ofl->ofl_isparexpn = isec; in ld_make_parexpn_data()
2670 osp = ld_place_section(ofl, isec, NULL, ld_targ.t_id.id_data, NULL); in ld_make_parexpn_data()
2675 ofl->ofl_dynshdrcnt++; in ld_make_parexpn_data()
2685 ld_make_sunwmove(Ofl_desc *ofl, int mv_nums) in ld_make_sunwmove() argument
2695 if (new_section(ofl, SHT_SUNW_move, MSG_ORIG(MSG_SCN_SUNWMOVE), in ld_make_sunwmove()
2705 for (APLIST_TRAVERSE(ofl->ofl_parsyms, idx, sdp)) { in ld_make_sunwmove()
2716 if ((ofl->ofl_osmove = ld_place_section(ofl, isec, NULL, 0, NULL)) == in ld_make_sunwmove()
2729 strmerge_get_reloc_str(Ofl_desc *ofl, Rel_desc *rsp) in strmerge_get_reloc_str() argument
2757 if (ld_reloc_targval_get(ofl, rsp, addr, &str_off) == 0) in strmerge_get_reloc_str()
2779 ld_gather_strmerge(Ofl_desc *ofl, Rel_cache *cache) in ld_gather_strmerge() argument
2828 name = strmerge_get_reloc_str(ofl, rsp); in ld_gather_strmerge()
2897 ld_strmerge_sec(Ofl_desc *ofl, Os_desc *osp) in ld_strmerge_sec() argument
2958 if (new_section_from_template(ofl, isp, data_size, in ld_strmerge_sec()
2983 if (ld_place_section(ofl, mstrsec, NULL, osp->os_identndx, NULL) == in ld_strmerge_sec()
3006 name = strmerge_get_reloc_str(ofl, rsp); in ld_strmerge_sec()
3108 DBG_CALL(Dbg_sec_discarded(ofl->ofl_lml, isp, mstrsec)); in ld_strmerge_sec()
3112 DBG_CALL(Dbg_sec_genstr_compress(ofl->ofl_lml, osp->os_name, data_size, in ld_strmerge_sec()
3152 ld_make_strmerge(Ofl_desc *ofl) in ld_make_strmerge() argument
3157 if (ld_gather_strmerge(ofl, &ofl->ofl_actrels) == S_ERROR) in ld_make_strmerge()
3159 if (ld_gather_strmerge(ofl, &ofl->ofl_outrels) == S_ERROR) in ld_make_strmerge()
3162 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) { in ld_make_strmerge()
3167 if (ld_strmerge_sec(ofl, osp) == S_ERROR) in ld_make_strmerge()
3201 ld_make_sections(Ofl_desc *ofl) in ld_make_sections() argument
3203 ofl_flag_t flags = ofl->ofl_flags; in ld_make_sections()
3210 if (make_comment(ofl) == S_ERROR) in ld_make_sections()
3213 if (make_interp(ofl) == S_ERROR) in ld_make_sections()
3219 if (make_cap(ofl, SHT_SUNW_cap, MSG_ORIG(MSG_SCN_SUNWCAP), in ld_make_sections()
3226 if (make_array(ofl, SHT_INIT_ARRAY, MSG_ORIG(MSG_SCN_INITARRAY), in ld_make_sections()
3227 ofl->ofl_initarray) == S_ERROR) in ld_make_sections()
3230 if (make_array(ofl, SHT_FINI_ARRAY, MSG_ORIG(MSG_SCN_FINIARRAY), in ld_make_sections()
3231 ofl->ofl_finiarray) == S_ERROR) in ld_make_sections()
3234 if (make_array(ofl, SHT_PREINIT_ARRAY, MSG_ORIG(MSG_SCN_PREINITARRAY), in ld_make_sections()
3235 ofl->ofl_preiarray) == S_ERROR) in ld_make_sections()
3244 if ((ofl->ofl_pltcnt) || (ofl->ofl_pltpad)) in ld_make_sections()
3245 if (make_plt(ofl) == S_ERROR) in ld_make_sections()
3253 if (DBG_ENABLED || (ofl->ofl_flags1 & FLG_OF1_IGNPRC)) { in ld_make_sections()
3254 if (ignore_section_processing(ofl) == S_ERROR) in ld_make_sections()
3263 if (ofl->ofl_flags & FLG_OF_ADJOSCNT) in ld_make_sections()
3264 adjust_os_count(ofl); in ld_make_sections()
3278 if ((ofl->ofl_flags1 & FLG_OF1_NCSTTAB) == 0) { in ld_make_sections()
3279 if (ld_make_strmerge(ofl) == S_ERROR) in ld_make_sections()
3288 (make_verneed(ofl) == S_ERROR)) in ld_make_sections()
3291 (make_verdef(ofl) == S_ERROR)) in ld_make_sections()
3294 ((ofl->ofl_osversym = make_sym_sec(ofl, in ld_make_sections()
3304 if ((ofl->ofl_ossyminfo = make_sym_sec(ofl, in ld_make_sections()
3315 if (ofl->ofl_reloccnt) { in ld_make_sections()
3316 if (make_reloc(ofl, NULL) == S_ERROR) in ld_make_sections()
3330 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) { in ld_make_sections()
3336 (osp != ofl->ofl_osplt)) { in ld_make_sections()
3337 if (make_reloc(ofl, osp) == S_ERROR) in ld_make_sections()
3348 if (ofl->ofl_relocrelsz) { in ld_make_sections()
3349 if (make_reloc(ofl, NULL) == S_ERROR) in ld_make_sections()
3359 if (ofl->ofl_osplt && ofl->ofl_relocpltsz) { in ld_make_sections()
3360 if (make_reloc(ofl, ofl->ofl_osplt) == S_ERROR) in ld_make_sections()
3368 if (make_dynamic(ofl) == S_ERROR) in ld_make_sections()
3376 if (make_hash(ofl) == S_ERROR) in ld_make_sections()
3378 if (make_dynstr(ofl) == S_ERROR) in ld_make_sections()
3380 if (make_dynsym(ofl) == S_ERROR) in ld_make_sections()
3382 if (ld_unwind_make_hdr(ofl) == S_ERROR) in ld_make_sections()
3384 if (make_dynsort(ofl) == S_ERROR) in ld_make_sections()
3390 ((flags & FLG_OF_STATIC) && ofl->ofl_osversym)) { in ld_make_sections()
3395 if (ofl->ofl_osdynsym && in ld_make_sections()
3396 ((ofl->ofl_shdrcnt + 3) >= SHN_LORESERVE)) { in ld_make_sections()
3397 if (make_dynsym_shndx(ofl) == S_ERROR) in ld_make_sections()
3401 if (make_strtab(ofl) == S_ERROR) in ld_make_sections()
3403 if (make_symtab(ofl) == S_ERROR) in ld_make_sections()
3410 if (ofl->ofl_osdynsym && in ld_make_sections()
3411 ((ofl->ofl_shdrcnt + 1) >= SHN_LORESERVE)) { in ld_make_sections()
3412 if (make_dynsym_shndx(ofl) == S_ERROR) in ld_make_sections()
3417 if (make_shstrtab(ofl) == S_ERROR) in ld_make_sections()
3425 if (ofl->ofl_osversym || ofl->ofl_ossyminfo) { in ld_make_sections()
3430 if (OFL_IS_STATIC_OBJ(ofl)) in ld_make_sections()
3431 osp = ofl->ofl_ossymtab; in ld_make_sections()
3433 osp = ofl->ofl_osdynsym; in ld_make_sections()
3438 if (ofl->ofl_osversym) in ld_make_sections()
3439 update_data_size(ofl->ofl_osversym, cnt); in ld_make_sections()
3441 if (ofl->ofl_ossyminfo) in ld_make_sections()
3442 update_data_size(ofl->ofl_ossyminfo, cnt); in ld_make_sections()
3450 if (ofl->ofl_oscapinfo) { in ld_make_sections()
3459 if (OFL_IS_STATIC_OBJ(ofl)) in ld_make_sections()
3460 cnt = SYMTAB_ALL_CNT(ofl); in ld_make_sections()
3462 cnt = DYNSYM_ALL_CNT(ofl); in ld_make_sections()
3464 update_data_size(ofl->ofl_oscapinfo, cnt); in ld_make_sections()
3474 ld_make_data(Ofl_desc *ofl, size_t size) in ld_make_data() argument
3480 if (new_section(ofl, SHT_PROGBITS, MSG_ORIG(MSG_SCN_DATA), 0, in ld_make_data()
3488 if (aplist_append(&ofl->ofl_mapdata, isec, AL_CNT_OFL_MAPSECS) == NULL) in ld_make_data()
3499 ld_make_text(Ofl_desc *ofl, size_t size) in ld_make_text() argument
3512 if (new_section(ofl, SHT_PROGBITS, MSG_ORIG(MSG_SCN_TEXT), 0, in ld_make_text()
3539 if (aplist_append(&ofl->ofl_maptext, isec, AL_CNT_OFL_MAPSECS) == NULL) in ld_make_text()
3546 ld_comdat_validate(Ofl_desc *ofl, Ifl_desc *ifl) in ld_comdat_validate() argument
3575 ((gr = ld_get_group(ofl, isp)) != NULL) && in ld_comdat_validate()
3585 ld_eprintf(ofl, ERR_FATAL, in ld_comdat_validate()