Lines Matching refs:ofl

99 dynsort_dupwarn(Ofl_desc *ofl, Sym *ldynsym, const char *str,  in dynsort_dupwarn()  argument
102 int zverbose = (ofl->ofl_flags & FLG_OF_VERBOSE) != 0; in dynsort_dupwarn()
116 ld_eprintf(ofl, ERR_WARNING, in dynsort_dupwarn()
121 DBG_CALL(Dbg_syms_dup_sort_addr(ofl->ofl_lml, secname, in dynsort_dupwarn()
140 update_osym(Ofl_desc *ofl) in update_osym() argument
220 ofl_flag_t flags = ofl->ofl_flags; in update_osym()
239 ((flags & FLG_OF_STATIC) && ofl->ofl_osversym)) { in update_osym()
240 symtab = (Sym *)ofl->ofl_ossymtab->os_outdata->d_buf; in update_osym()
242 if (ofl->ofl_ossymshndx) in update_osym()
244 (Word *)ofl->ofl_ossymshndx->os_outdata->d_buf; in update_osym()
246 if (OFL_ALLOW_DYNSYM(ofl)) { in update_osym()
247 dynsym = (Sym *)ofl->ofl_osdynsym->os_outdata->d_buf; in update_osym()
253 if (ofl->ofl_osldynsym) { in update_osym()
254 ldynsym = (Sym *)ofl->ofl_osldynsym->os_outdata->d_buf; in update_osym()
256 ldynsym_cnt = 1 + ofl->ofl_dynlocscnt + in update_osym()
257 ofl->ofl_dynscopecnt; in update_osym()
265 if (ofl->ofl_osdynsymsort) { /* .SUNW_dynsymsort */ in update_osym()
267 ofl->ofl_osdynsymsort->os_outdata->d_buf; in update_osym()
270 if (ofl->ofl_osdyntlssort) { /* .SUNW_dyntlssort */ in update_osym()
272 ofl->ofl_osdyntlssort->os_outdata->d_buf; in update_osym()
280 hashtab = (Word *)(ofl->ofl_oshash->os_outdata->d_buf); in update_osym()
282 hashchain = &hashtab[2 + ofl->ofl_hashbkts]; in update_osym()
283 hashtab[0] = ofl->ofl_hashbkts; in update_osym()
284 hashtab[1] = DYNSYM_ALL_CNT(ofl); in update_osym()
285 if (ofl->ofl_osdynshndx) in update_osym()
287 (Word *)ofl->ofl_osdynshndx->os_outdata->d_buf; in update_osym()
288 if (ofl->ofl_osldynshndx) in update_osym()
290 (Word *)ofl->ofl_osldynshndx->os_outdata->d_buf; in update_osym()
309 versym = (Versym *)ofl->ofl_osversym->os_outdata->d_buf; in update_osym()
317 if (ofl->ofl_ossyminfo) { in update_osym()
318 syminfo = ofl->ofl_ossyminfo->os_outdata->d_buf; in update_osym()
326 shstrtab = ofl->ofl_shdrsttab; in update_osym()
327 strtab = ofl->ofl_strtab; in update_osym()
328 dynstr = ofl->ofl_dynstrtab; in update_osym()
330 DBG_CALL(Dbg_syms_sec_title(ofl->ofl_lml)); in update_osym()
336 (void) st_setstring(strtab, ofl->ofl_name, &stoff); in update_osym()
350 (void) st_setstring(dynstr, ofl->ofl_name, &stoff); in update_osym()
362 ldynsym_ndx += ofl->ofl_dynscopecnt; in update_osym()
370 if ((ofl->ofl_gottable = gottable = in update_osym()
371 libld_calloc(ofl->ofl_gotcnt, sizeof (Gottable))) == NULL) in update_osym()
380 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) { in update_osym()
428 DBG_CALL(Dbg_syms_sec_entry(ofl->ofl_lml, in update_osym()
475 if (ofl->ofl_regsyms && dynsym) { in update_osym()
478 for (ndx = 0; ndx < ofl->ofl_regsymsno; ndx++) { in update_osym()
481 if ((rsdp = ofl->ofl_regsyms[ndx]) == NULL) in update_osym()
516 ld_eprintf(ofl, ERR_WARNING, in update_osym()
526 ld_eprintf(ofl, ERR_WARNING, in update_osym()
594 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_UPD_NOSEG)); in update_osym()
607 symtab_ndx += ofl->ofl_scopecnt; in update_osym()
614 if (ofl->ofl_isparexpn) { in update_osym()
615 osp = ofl->ofl_isparexpn->is_osdesc; in update_osym()
617 ofl->ofl_isparexpn->is_indata->d_off); in update_osym()
620 ofl->ofl_parexpnndx = osp->os_identndx; in update_osym()
627 for (APLIST_TRAVERSE(ofl->ofl_objs, idx1, ifl)) { in update_osym()
645 (*ld_targ.t_mr.mr_assign_got)(ofl, sdp) == S_ERROR) in update_osym()
703 (!(ofl->ofl_flags & FLG_OF_REDLSYM) || in update_osym()
707 !(ofl->ofl_flags & FLG_OF_REDLSYM); in update_osym()
783 if (ofl->ofl_isparexpn && in update_osym()
786 sdp->sd_isc = ofl->ofl_isparexpn; in update_osym()
811 (ofl->ofl_tlsphdr)) { in update_osym()
813 ofl->ofl_tlsphdr->p_vaddr; in update_osym()
916 ofl)) != NULL) && (sdp->sd_ref == REF_REL_NEED) && sdp->sd_isc && in update_osym()
923 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_SYM_NOCRT), in update_osym()
928 ofl)) != NULL) && (sdp->sd_ref == REF_REL_NEED) && sdp->sd_isc && in update_osym()
935 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_SYM_NOCRT), in update_osym()
942 if (ofl->ofl_isbss) { in update_osym()
943 isc = ofl->ofl_isbss; in update_osym()
957 if ((ld_targ.t_m.m_mach == EM_AMD64) && ofl->ofl_islbss) { in update_osym()
958 osp = ofl->ofl_islbss->is_osdesc; in update_osym()
961 (Off)_elf_getxoff(ofl->ofl_islbss->is_indata); in update_osym()
969 if (ofl->ofl_istlsbss) { in update_osym()
970 osp = ofl->ofl_istlsbss->is_osdesc; in update_osym()
972 (Off)_elf_getxoff(ofl->ofl_istlsbss->is_indata); in update_osym()
977 if ((sorted_syms = libld_calloc(ofl->ofl_globcnt + in update_osym()
978 ofl->ofl_elimcnt + ofl->ofl_scopecnt, in update_osym()
983 ssndx = ofl->ofl_scopecnt + ofl->ofl_elimcnt; in update_osym()
985 DBG_CALL(Dbg_syms_up_title(ofl->ofl_lml)); in update_osym()
991 for (sav = avl_first(&ofl->ofl_symavl); sav; in update_osym()
992 sav = AVL_NEXT(&ofl->ofl_symavl, sav)) { in update_osym()
1005 DBG_CALL(Dbg_syms_old(ofl, sdp)); in update_osym()
1006 DBG_CALL(Dbg_syms_ignore(ofl, sdp)); in update_osym()
1021 if (local || (ofl->ofl_hashbkts == 0)) { in update_osym()
1025 ofl->ofl_hashbkts; in update_osym()
1062 sdp->sd_isc = ofl->ofl_isparexpn; in update_osym()
1073 sdp->sd_isc = ofl->ofl_isbss; in update_osym()
1084 sdp->sd_isc = ofl->ofl_istlsbss; in update_osym()
1089 symptr->st_value -= ofl->ofl_tlsphdr->p_vaddr; in update_osym()
1103 sdp->sd_isc = ofl->ofl_islbss; in update_osym()
1129 if (dynsym && ofl->ofl_capfamilies) { in update_osym()
1132 for (cav = avl_first(ofl->ofl_capfamilies); cav; in update_osym()
1133 cav = AVL_NEXT(ofl->ofl_capfamilies, cav)) { in update_osym()
1140 DBG_CALL(Dbg_syms_created(ofl->ofl_lml, in update_osym()
1142 DBG_CALL(Dbg_syms_entered(ofl, sdp->sd_sym, in update_osym()
1172 if (ofl->ofl_hashbkts) { in update_osym()
1173 qsort(sorted_syms + ofl->ofl_scopecnt + ofl->ofl_elimcnt, in update_osym()
1174 ofl->ofl_globcnt, sizeof (Sym_s_list), in update_osym()
1178 for (ssndx = 0; ssndx < (ofl->ofl_elimcnt + ofl->ofl_scopecnt + in update_osym()
1179 ofl->ofl_globcnt); ssndx++) { in update_osym()
1200 (*ld_targ.t_mr.mr_assign_got)(ofl, sdp) == S_ERROR) in update_osym()
1292 APlist **alpp = &(ofl->ofl_symdtent); in update_osym()
1460 ofl->ofl_oscapinfo) { in update_osym()
1516 sap->sa_hash % ofl->ofl_hashbkts; in update_osym()
1608 DBG_CALL(Dbg_syms_old(ofl, sdp)); in update_osym()
1618 ld_eprintf(ofl, ERR_WARNING, in update_osym()
1632 if (OFL_IS_STATIC_EXEC(ofl) && in update_osym()
1700 STT_TLS) && (ofl->ofl_tlsphdr)) in update_osym()
1702 ofl->ofl_tlsphdr->p_vaddr; in update_osym()
1740 sym->st_value = ofl-> in update_osym()
1744 ofl->ofl_osdynamic->os_scn); in update_osym()
1749 if (ofl->ofl_osplt) { in update_osym()
1750 sym->st_value = ofl-> in update_osym()
1754 ofl->ofl_osplt->os_scn); in update_osym()
1764 sym->st_value += ofl-> in update_osym()
1767 sectndx = elf_ndxscn(ofl-> in update_osym()
1788 (*ld_targ.t_mr.mr_calc_plt_addr)(sdp, ofl); in update_osym()
1866 DBG_CALL(Dbg_syms_new(ofl, sym, sdp)); in update_osym()
1902 DBG_CALL(Dbg_syms_old(ofl, sdp)); in update_osym()
1921 DBG_CALL(Dbg_syms_new(ofl, __sym, sdp)); in update_osym()
1927 DBG_CALL(Dbg_got_display(ofl, 0, 0, in update_osym()
1938 Shdr *shdr = ofl->ofl_ossymtab->os_shdr; in update_osym()
1942 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_osstrtab->os_scn); in update_osym()
1944 ofl->ofl_ossymshndx->os_shdr->sh_link = in update_osym()
1945 (Word)elf_ndxscn(ofl->ofl_ossymtab->os_scn); in update_osym()
1956 assert((scopesym_bndx + ofl->ofl_scopecnt) == scopesym_ndx); in update_osym()
1957 assert(shdr->sh_info == SYMTAB_LOC_CNT(ofl)); in update_osym()
1958 assert((shdr->sh_info + ofl->ofl_globcnt) == symtab_ndx); in update_osym()
1961 Shdr *shdr = ofl->ofl_osdynsym->os_shdr; in update_osym()
1963 shdr->sh_info = DYNSYM_LOC_CNT(ofl); in update_osym()
1965 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_osdynstr->os_scn); in update_osym()
1967 ofl->ofl_oshash->os_shdr->sh_link = in update_osym()
1969 (Word)elf_ndxscn(ofl->ofl_osdynsym->os_scn); in update_osym()
1971 shdr = ofl->ofl_osdynshndx->os_shdr; in update_osym()
1973 (Word)elf_ndxscn(ofl->ofl_osdynsym->os_scn); in update_osym()
1977 Shdr *shdr = ofl->ofl_osldynsym->os_shdr; in update_osym()
2001 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_osdynstr->os_scn); in update_osym()
2004 shdr = ofl->ofl_osldynshndx->os_shdr; in update_osym()
2006 (Word)elf_ndxscn(ofl->ofl_osldynsym->os_scn); in update_osym()
2018 if (ofl->ofl_osdynsymsort) { /* .SUNW_dynsymsort */ in update_osym()
2019 ofl->ofl_osdynsymsort->os_shdr->sh_link = in update_osym()
2020 (Word)elf_ndxscn(ofl->ofl_osldynsym->os_scn); in update_osym()
2021 assert(ofl->ofl_dynsymsortcnt == dynsymsort_ndx); in update_osym()
2027 dynsort_dupwarn(ofl, ldynsym, in update_osym()
2033 if (ofl->ofl_osdyntlssort) { /* .SUNW_dyntlssort */ in update_osym()
2034 ofl->ofl_osdyntlssort->os_shdr->sh_link = in update_osym()
2035 (Word)elf_ndxscn(ofl->ofl_osldynsym->os_scn); in update_osym()
2036 assert(ofl->ofl_dyntlssortcnt == dyntlssort_ndx); in update_osym()
2042 dynsort_dupwarn(ofl, ldynsym, in update_osym()
2065 update_odynamic(Ofl_desc *ofl) in update_odynamic() argument
2071 Dyn *_dyn = (Dyn *)ofl->ofl_osdynamic->os_outdata->d_buf; in update_odynamic()
2076 ofl_flag_t flags = ofl->ofl_flags; in update_odynamic()
2090 if (OFL_IS_STATIC_OBJ(ofl)) { in update_odynamic()
2091 symosp = ofl->ofl_ossymtab; in update_odynamic()
2092 strosp = ofl->ofl_osstrtab; in update_odynamic()
2093 strtbl = ofl->ofl_strtab; in update_odynamic()
2095 symosp = ofl->ofl_osdynsym; in update_odynamic()
2096 strosp = ofl->ofl_osdynstr; in update_odynamic()
2097 strtbl = ofl->ofl_dynstrtab; in update_odynamic()
2101 ofl->ofl_osdynamic->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn); in update_odynamic()
2105 for (APLIST_TRAVERSE(ofl->ofl_sos, idx, ifl)) { in update_odynamic()
2139 if (ofl->ofl_dtsfltrs != NULL) { in update_odynamic()
2142 for (ALIST_TRAVERSE(ofl->ofl_dtsfltrs, idx, dftp)) { in update_odynamic()
2157 SYM_NOHASH, 0, ofl)) != NULL) && in update_odynamic()
2165 SYM_NOHASH, 0, ofl)) != NULL) && in update_odynamic()
2172 if (ofl->ofl_soname) { in update_odynamic()
2174 (void) st_setstring(strtbl, ofl->ofl_soname, &stoff); in update_odynamic()
2178 if (ofl->ofl_filtees) { in update_odynamic()
2184 (void) st_setstring(strtbl, ofl->ofl_filtees, &stoff); in update_odynamic()
2190 if (ofl->ofl_rpath) { in update_odynamic()
2191 (void) st_setstring(strtbl, ofl->ofl_rpath, &stoff); in update_odynamic()
2204 if (ofl->ofl_config) { in update_odynamic()
2206 (void) st_setstring(strtbl, ofl->ofl_config, &stoff); in update_odynamic()
2210 if (ofl->ofl_depaudit) { in update_odynamic()
2212 (void) st_setstring(strtbl, ofl->ofl_depaudit, &stoff); in update_odynamic()
2216 if (ofl->ofl_audit) { in update_odynamic()
2218 (void) st_setstring(strtbl, ofl->ofl_audit, &stoff); in update_odynamic()
2224 dyn->d_un.d_ptr = ofl->ofl_oshash->os_shdr->sh_addr; in update_odynamic()
2249 if (ofl->ofl_osldynsym) { in update_odynamic()
2250 Shdr *lshdr = ofl->ofl_osldynsym->os_shdr; in update_odynamic()
2270 if (ofl->ofl_osdynsymsort || ofl->ofl_osdyntlssort) { in update_odynamic()
2276 if (ofl->ofl_osdynsymsort) { in update_odynamic()
2277 shdr = ofl->ofl_osdynsymsort->os_shdr; in update_odynamic()
2288 if (ofl->ofl_osdyntlssort) { in update_odynamic()
2289 shdr = ofl->ofl_osdyntlssort->os_shdr; in update_odynamic()
2305 ofl->ofl_checksum = &dyn->d_un.d_val; in update_odynamic()
2343 shdr = ofl->ofl_osverdef->os_shdr; in update_odynamic()
2354 shdr = ofl->ofl_osverneed->os_shdr; in update_odynamic()
2364 if ((flags & FLG_OF_COMREL) && ofl->ofl_relocrelcnt) { in update_odynamic()
2366 dyn->d_un.d_val = ofl->ofl_relocrelcnt; in update_odynamic()
2379 if (ofl->ofl_osfiniarray) { in update_odynamic()
2380 shdr = ofl->ofl_osfiniarray->os_shdr; in update_odynamic()
2391 if (ofl->ofl_osinitarray) { in update_odynamic()
2392 shdr = ofl->ofl_osinitarray->os_shdr; in update_odynamic()
2403 if (ofl->ofl_ospreinitarray) { in update_odynamic()
2404 shdr = ofl->ofl_ospreinitarray->os_shdr; in update_odynamic()
2415 if (ofl->ofl_pltcnt) { in update_odynamic()
2416 shdr = ofl->ofl_osplt->os_relosdesc->os_shdr; in update_odynamic()
2428 if (ofl->ofl_pltpad) { in update_odynamic()
2429 shdr = ofl->ofl_osplt->os_shdr; in update_odynamic()
2432 if (ofl->ofl_pltcnt) { in update_odynamic()
2435 ofl->ofl_pltcnt * ld_targ.t_m.m_plt_entsize; in update_odynamic()
2440 dyn->d_un.d_val = ofl->ofl_pltpad * in update_odynamic()
2444 if (ofl->ofl_relocsz) { in update_odynamic()
2445 shdr = ofl->ofl_osrelhead->os_shdr; in update_odynamic()
2451 dyn->d_un.d_ptr = ofl->ofl_relocsz; in update_odynamic()
2460 if (ofl->ofl_ossyminfo) { in update_odynamic()
2461 shdr = ofl->ofl_ossyminfo->os_shdr; in update_odynamic()
2473 if (ofl->ofl_osmove) { in update_odynamic()
2474 shdr = ofl->ofl_osmove->os_shdr; in update_odynamic()
2486 if (ofl->ofl_regsymcnt) { in update_odynamic()
2489 for (ndx = 0; ndx < ofl->ofl_regsymsno; ndx++) { in update_odynamic()
2490 if ((sdp = ofl->ofl_regsyms[ndx]) == NULL) in update_odynamic()
2499 for (APLIST_TRAVERSE(ofl->ofl_rtldinfo, idx, sdp)) { in update_odynamic()
2505 if (((sgp = ofl->ofl_osdynamic->os_sgdesc) != NULL) && in update_odynamic()
2506 (sgp->sg_phdr.p_flags & PF_W) && ofl->ofl_osinterp) { in update_odynamic()
2512 if (ofl->ofl_oscap) { in update_odynamic()
2514 dyn->d_un.d_val = ofl->ofl_oscap->os_shdr->sh_addr; in update_odynamic()
2517 if (ofl->ofl_oscapinfo) { in update_odynamic()
2519 dyn->d_un.d_val = ofl->ofl_oscapinfo->os_shdr->sh_addr; in update_odynamic()
2522 if (ofl->ofl_oscapchain) { in update_odynamic()
2523 shdr = ofl->ofl_oscapchain->os_shdr; in update_odynamic()
2543 dyn->d_un.d_val = ofl->ofl_dtflags; in update_odynamic()
2558 if (ofl->ofl_flags1 & FLG_OF1_NGLBDIR) in update_odynamic()
2559 ofl->ofl_dtflags_1 &= ~DF_1_DIRECT; in update_odynamic()
2560 if (ofl->ofl_flags1 & FLG_OF1_NDIRECT) in update_odynamic()
2561 ofl->ofl_dtflags_1 |= DF_1_NODIRECT; in update_odynamic()
2564 dyn->d_un.d_val = ofl->ofl_dtflags_1; in update_odynamic()
2575 (*ld_targ.t_mr.mr_mach_update_odynamic)(ofl, &dyn); in update_odynamic()
2587 assert((ofl->ofl_osdynamic->os_shdr->sh_size / in update_odynamic()
2588 ofl->ofl_osdynamic->os_shdr->sh_entsize) == in update_odynamic()
2598 update_overdef(Ofl_desc *ofl) in update_overdef() argument
2610 if (OFL_IS_STATIC_OBJ(ofl)) { in update_overdef()
2611 strtbl = ofl->ofl_strtab; in update_overdef()
2612 strosp = ofl->ofl_osstrtab; in update_overdef()
2614 strtbl = ofl->ofl_dynstrtab; in update_overdef()
2615 strosp = ofl->ofl_osdynstr; in update_overdef()
2623 for (APLIST_TRAVERSE(ofl->ofl_verdesc, idx1, vdp)) { in update_overdef()
2639 sdp = ld_sym_find(vdp->vd_name, vdp->vd_hash, 0, ofl); in update_overdef()
2646 _vdf = vdf = (Verdef *)ofl->ofl_osverdef->os_outdata->d_buf; in update_overdef()
2652 for (APLIST_TRAVERSE(ofl->ofl_verdesc, idx1, vdp)) { in update_overdef()
2712 ofl->ofl_osverdef->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn); in update_overdef()
2718 ofl->ofl_osverdef->os_shdr->sh_info = num; in update_overdef()
2727 update_oversym(Ofl_desc *ofl) in update_oversym() argument
2736 if (OFL_IS_STATIC_OBJ(ofl)) in update_oversym()
2737 osp = ofl->ofl_ossymtab; in update_oversym()
2739 osp = ofl->ofl_osdynsym; in update_oversym()
2742 ofl->ofl_osversym->os_shdr->sh_link = (Word)elf_ndxscn(osp->os_scn); in update_oversym()
2749 update_overneed(Ofl_desc *ofl) in update_overneed() argument
2758 _vnd = vnd = (Verneed *)ofl->ofl_osverneed->os_outdata->d_buf; in update_overneed()
2763 if (OFL_IS_STATIC_OBJ(ofl)) { in update_overneed()
2764 strosp = ofl->ofl_osstrtab; in update_overneed()
2765 strtbl = ofl->ofl_strtab; in update_overneed()
2767 strosp = ofl->ofl_osdynstr; in update_overneed()
2768 strtbl = ofl->ofl_dynstrtab; in update_overneed()
2775 for (APLIST_TRAVERSE(ofl->ofl_sos, idx1, ifl)) { in update_overneed()
2860 ofl->ofl_osverneed->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn); in update_overneed()
2861 ofl->ofl_osverneed->os_shdr->sh_info = num; in update_overneed()
2870 update_osyminfo(Ofl_desc *ofl) in update_osyminfo() argument
2872 Os_desc *symosp, *infosp = ofl->ofl_ossyminfo; in update_osyminfo()
2880 if (ofl->ofl_flags & FLG_OF_RELOBJ) { in update_osyminfo()
2881 symosp = ofl->ofl_ossymtab; in update_osyminfo()
2882 strtab = ofl->ofl_osstrtab->os_outdata->d_buf; in update_osyminfo()
2884 symosp = ofl->ofl_osdynsym; in update_osyminfo()
2885 strtab = ofl->ofl_osdynstr->os_outdata->d_buf; in update_osyminfo()
2890 if (ofl->ofl_osdynamic) in update_osyminfo()
2893 (Word)elf_ndxscn(ofl->ofl_osdynamic->os_scn); in update_osyminfo()
2898 for (APLIST_TRAVERSE(ofl->ofl_symdtent, idx, sdp)) in update_osyminfo()
2904 for (ALIST_TRAVERSE(ofl->ofl_symfltrs, idx, sftp)) { in update_osyminfo()
2907 dftp = alist_item(ofl->ofl_dtsfltrs, sftp->sft_idx); in update_osyminfo()
2914 DBG_CALL(Dbg_syminfo_title(ofl->ofl_lml)); in update_osyminfo()
2920 if (ofl->ofl_osdynamic) in update_osyminfo()
2921 dyn = ofl->ofl_osdynamic->os_outdata->d_buf; in update_osyminfo()
2928 DBG_CALL(Dbg_syminfo_entry(ofl->ofl_lml, _cnt, in update_osyminfo()
2939 update_oehdr(Ofl_desc * ofl) in update_oehdr() argument
2941 Ehdr *ehdr = ofl->ofl_nehdr; in update_oehdr()
2950 if (ofl->ofl_entry) in update_oehdr()
2952 ((Sym_desc *)(ofl->ofl_entry))->sd_sym->st_value; in update_oehdr()
2955 ehdr->e_version = ofl->ofl_dehdr->e_version; in update_oehdr()
2968 if (ofl->ofl_flags & FLG_OF_OTOSCAP) { in update_oehdr()
2976 ehdr->e_machine = ofl->ofl_dehdr->e_machine; in update_oehdr()
2977 ehdr->e_flags = ofl->ofl_dehdr->e_flags; in update_oehdr()
2987 if (ofl->ofl_flags & FLG_OF_SHAROBJ) in update_oehdr()
2989 else if (ofl->ofl_flags & FLG_OF_RELOBJ) in update_oehdr()
3001 expand_move(Ofl_desc *ofl, Sym_desc *sdp, Move *mvp) in expand_move() argument
3009 osp = ofl->ofl_isparexpn->is_osdesc; in expand_move()
3018 DBG_CALL(Dbg_move_expand(ofl->ofl_lml, mvp, in expand_move()
3056 update_move(Ofl_desc *ofl) in update_move() argument
3059 ofl_flag_t flags = ofl->ofl_flags; in update_move()
3068 if (OFL_ALLOW_DYNSYM(ofl)) in update_move()
3070 ndx = (Word) elf_ndxscn(ofl->ofl_osdynsym->os_scn); in update_move()
3073 ndx = (Word) elf_ndxscn(ofl->ofl_ossymtab->os_scn); in update_move()
3078 if (ofl->ofl_osmove) { in update_move()
3079 ofl->ofl_osmove->os_shdr->sh_link = ndx; in update_move()
3080 omvp = (Move *)ofl->ofl_osmove->os_outdata->d_buf; in update_move()
3086 for (APLIST_TRAVERSE(ofl->ofl_parsyms, idx1, sdp)) { in update_move()
3098 else if (ofl->ofl_flags1 & FLG_OF1_NOPARTI) in update_move()
3103 DBG_CALL(Dbg_move_parexpn(ofl->ofl_lml, in update_move()
3107 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 0, in update_move()
3109 expand_move(ofl, sdp, mdp->md_move); in update_move()
3117 DBG_CALL(Dbg_move_outmove(ofl->ofl_lml, sdp->sd_name)); in update_move()
3127 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 1, imvp, sdp)); in update_move()
3156 (ofl->ofl_flags & FLG_OF_REDLSYM)) in update_move()
3170 DBG_CALL(Dbg_syms_reduce(ofl, in update_move()
3173 ofl->ofl_osmove->os_name)); in update_move()
3182 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 0, omvp, sdp)); in update_move()
3194 update_ogroup(Ofl_desc *ofl) in update_ogroup() argument
3200 for (APLIST_TRAVERSE(ofl->ofl_osgroups, idx, osp)) { in update_ogroup()
3217 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_ossymtab->os_scn); in update_ogroup()
3268 update_oscap(Ofl_desc *ofl) in update_oscap() argument
3280 if (OFL_IS_STATIC_OBJ(ofl)) { in update_oscap()
3281 strosp = ofl->ofl_osstrtab; in update_oscap()
3282 strtbl = ofl->ofl_strtab; in update_oscap()
3284 strosp = ofl->ofl_osdynstr; in update_oscap()
3285 strtbl = ofl->ofl_dynstrtab; in update_oscap()
3292 if (ofl->ofl_oscapinfo) { in update_oscap()
3293 cosp = ofl->ofl_oscap; in update_oscap()
3295 (Word)elf_ndxscn(ofl->ofl_oscapinfo->os_scn); in update_oscap()
3303 if ((ofl->ofl_flags & FLG_OF_CAPSTRS) == 0) in update_oscap()
3306 cosp = ofl->ofl_oscap; in update_oscap()
3309 cap = ofl->ofl_oscap->os_outdata->d_buf; in update_oscap()
3315 capstr = &ofl->ofl_ocapset.oc_id; in update_oscap()
3320 for (ALIST_TRAVERSE(ofl->ofl_ocapset.oc_plat.cl_val, idx1, capstr)) { in update_oscap()
3324 for (ALIST_TRAVERSE(ofl->ofl_ocapset.oc_mach.cl_val, idx1, capstr)) { in update_oscap()
3333 if (ofl->ofl_capgroups) { in update_oscap()
3336 for (APLIST_TRAVERSE(ofl->ofl_capgroups, idx1, cgp)) { in update_oscap()
3366 update_oscapinfo(Ofl_desc *ofl) in update_oscapinfo() argument
3377 if (OFL_IS_STATIC_OBJ(ofl)) in update_oscapinfo()
3378 symosp = ofl->ofl_ossymtab; in update_oscapinfo()
3380 symosp = ofl->ofl_osdynsym; in update_oscapinfo()
3388 ciosp = ofl->ofl_oscapinfo; in update_oscapinfo()
3391 if (OFL_IS_STATIC_OBJ(ofl) == 0) { in update_oscapinfo()
3392 ccosp = ofl->ofl_oscapchain; in update_oscapinfo()
3457 for (cav = avl_first(ofl->ofl_capfamilies); cav; in update_oscapinfo()
3458 cav = AVL_NEXT(ofl->ofl_capfamilies, cav)) { in update_oscapinfo()
3541 translate_link(Ofl_desc *ofl, Os_desc *osp, Word link, const char *msg) in translate_link() argument
3566 ld_eprintf(ofl, ERR_WARNING, msg, ifl->ifl_name, in translate_link()
3606 ld_update_outfile(Ofl_desc *ofl) in ld_update_outfile() argument
3614 Ehdr *ehdr = ofl->ofl_nehdr; in ld_update_outfile()
3618 ofl_flag_t flags = ofl->ofl_flags; in ld_update_outfile()
3632 if (ofl->ofl_flags & FLG_OF_EXEC) { in ld_update_outfile()
3634 if (ofl->ofl_ocapset.oc_sf_1.cm_val & SF1_SUNW_ADDR32) in ld_update_outfile()
3645 DBG_CALL(Dbg_seg_title(ofl->ofl_lml)); in ld_update_outfile()
3646 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) { in ld_update_outfile()
3665 if (ofl->ofl_osinterp) { in ld_update_outfile()
3669 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp)); in ld_update_outfile()
3670 ofl->ofl_phdr[phdrndx++] = *phdr; in ld_update_outfile()
3675 if (ofl->ofl_osinterp) { in ld_update_outfile()
3690 if (ofl->ofl_dtracesym && in ld_update_outfile()
3706 if (ofl->ofl_oscap && (ofl->ofl_flags & FLG_OF_PTCAP) && in ld_update_outfile()
3722 if (OFL_ALLOW_DYNSYM(ofl)) { in ld_update_outfile()
3723 Shdr *shdr = ofl->ofl_osdynamic->os_shdr; in ld_update_outfile()
3730 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp)); in ld_update_outfile()
3731 ofl->ofl_phdr[phdrndx++] = *phdr; in ld_update_outfile()
3745 if (ofl->ofl_unwindhdr == NULL) in ld_update_outfile()
3748 shdr = ofl->ofl_unwindhdr->os_shdr; in ld_update_outfile()
3757 ofl->ofl_phdr[phdrndx++] = *phdr; in ld_update_outfile()
3769 ofl->ofl_phdr[phdrndx++] = *phdr; in ld_update_outfile()
3785 if (ofl->ofl_ostlsseg == NULL) in ld_update_outfile()
3796 for (APLIST_TRAVERSE(ofl->ofl_ostlsseg, idx, tlsosp)) { in ld_update_outfile()
3832 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp)); in ld_update_outfile()
3833 ofl->ofl_phdr[phdrndx] = *phdr; in ld_update_outfile()
3834 ofl->ofl_tlsphdr = &ofl->ofl_phdr[phdrndx++]; in ld_update_outfile()
3856 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp)); in ld_update_outfile()
3857 ofl->ofl_phdr[phdrndx++] = *phdr; in ld_update_outfile()
3868 Addr p_s = (ofl->ofl_phdr[i]).p_vaddr; in ld_update_outfile()
3871 if ((ofl->ofl_phdr[i]).p_type != PT_LOAD) in ld_update_outfile()
3874 p_e = p_s + (ofl->ofl_phdr[i]).p_memsz; in ld_update_outfile()
3877 ld_eprintf(ofl, ERR_WARNING, in ld_update_outfile()
3879 ofl->ofl_name, EC_ADDR(p_e), in ld_update_outfile()
3922 ld_eprintf(ofl, ERR_FATAL, in ld_update_outfile()
3942 ((ofl->ofl_osinterp) || (flags & FLG_OF_DYNAMIC)) && in ld_update_outfile()
3943 (!(ofl->ofl_dtflags_1 & DF_1_NOHDR))) { in ld_update_outfile()
3975 ld_eprintf(ofl, ERR_WARNING, in ld_update_outfile()
3977 ofl->ofl_name, EC_ADDR(vaddr), in ld_update_outfile()
3992 ((ofl->ofl_dtflags_1 & DF_1_NOHDR) == 0)) { in ld_update_outfile()
4009 if ((ofl->ofl_dtflags_1 & DF_1_NOHDR) == 0) { in ld_update_outfile()
4010 if (ofl->ofl_osinterp) in ld_update_outfile()
4011 ofl->ofl_phdr[0].p_vaddr = in ld_update_outfile()
4021 if ((ofl->ofl_osinterp) || in ld_update_outfile()
4030 if (ofl->ofl_osinterp) { in ld_update_outfile()
4031 ofl->ofl_phdr[0].p_vaddr = 0; in ld_update_outfile()
4032 ofl->ofl_phdr[0].p_memsz = 0; in ld_update_outfile()
4033 ofl->ofl_phdr[0].p_flags = 0; in ld_update_outfile()
4047 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp)); in ld_update_outfile()
4062 shdr->sh_link = translate_link(ofl, osp, in ld_update_outfile()
4066 shdr->sh_info = translate_link(ofl, osp, in ld_update_outfile()
4079 DBG_CALL(Dbg_seg_os(ofl, osp, secndx)); in ld_update_outfile()
4097 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_UPD_LARGSIZE), in ld_update_outfile()
4098 ofl->ofl_name, sgp->sg_name, in ld_update_outfile()
4111 ofl->ofl_phdr[phdrndx++] = *phdr; in ld_update_outfile()
4123 if (ofl->ofl_interp) in ld_update_outfile()
4124 (void) strcpy((char *)ofl->ofl_osinterp->os_outdata->d_buf, in ld_update_outfile()
4125 ofl->ofl_interp); in ld_update_outfile()
4130 update_ostrtab(ofl->ofl_osshstrtab, ofl->ofl_shdrsttab, 0); in ld_update_outfile()
4131 update_ostrtab(ofl->ofl_osstrtab, ofl->ofl_strtab, 0); in ld_update_outfile()
4132 update_ostrtab(ofl->ofl_osdynstr, ofl->ofl_dynstrtab, DYNSTR_EXTRA_PAD); in ld_update_outfile()
4138 if ((etext = update_osym(ofl)) == (Addr)S_ERROR) in ld_update_outfile()
4147 Shdr *shdr = ofl->ofl_osinterp->os_shdr; in ld_update_outfile()
4154 DBG_CALL(Dbg_seg_entry(ofl, intpsndx, intpsgp)); in ld_update_outfile()
4155 ofl->ofl_phdr[intppndx] = *phdr; in ld_update_outfile()
4164 Sym_desc *sdp = ofl->ofl_dtracesym; in ld_update_outfile()
4177 DBG_CALL(Dbg_seg_entry(ofl, dtracesndx, dtracesgp)); in ld_update_outfile()
4178 ofl->ofl_phdr[dtracepndx] = *phdr; in ld_update_outfile()
4187 Shdr *shdr = ofl->ofl_oscap->os_shdr; in ld_update_outfile()
4194 DBG_CALL(Dbg_seg_entry(ofl, capsndx, capsgp)); in ld_update_outfile()
4195 ofl->ofl_phdr[cappndx] = *phdr; in ld_update_outfile()
4201 if (update_ogroup(ofl) == S_ERROR) in ld_update_outfile()
4207 if (ofl->ofl_osmove || ofl->ofl_isparexpn) in ld_update_outfile()
4208 update_move(ofl); in ld_update_outfile()
4214 if (update_oehdr(ofl) == S_ERROR) in ld_update_outfile()
4218 (update_overdef(ofl) == S_ERROR)) in ld_update_outfile()
4221 (update_overneed(ofl) == S_ERROR)) in ld_update_outfile()
4224 update_oversym(ofl); in ld_update_outfile()
4227 if (update_odynamic(ofl) == S_ERROR) in ld_update_outfile()
4230 if (ofl->ofl_ossyminfo) { in ld_update_outfile()
4231 if (update_osyminfo(ofl) == S_ERROR) in ld_update_outfile()
4238 if (ofl->ofl_oscap) in ld_update_outfile()
4239 update_oscap(ofl); in ld_update_outfile()
4240 if (ofl->ofl_oscapinfo) in ld_update_outfile()
4241 update_oscapinfo(ofl); in ld_update_outfile()
4247 assert((ofl->ofl_osshstrtab == NULL) || in ld_update_outfile()
4248 (*((char *)ofl->ofl_osshstrtab->os_outdata->d_buf) == '\0')); in ld_update_outfile()
4249 assert((ofl->ofl_osshstrtab == NULL) || in ld_update_outfile()
4250 (*(((char *)ofl->ofl_osshstrtab->os_outdata->d_buf) + in ld_update_outfile()
4251 ofl->ofl_osshstrtab->os_outdata->d_size - 1) == '\0')); in ld_update_outfile()
4253 assert((ofl->ofl_osstrtab == NULL) || in ld_update_outfile()
4254 (*((char *)ofl->ofl_osstrtab->os_outdata->d_buf) == '\0')); in ld_update_outfile()
4255 assert((ofl->ofl_osstrtab == NULL) || in ld_update_outfile()
4256 (*(((char *)ofl->ofl_osstrtab->os_outdata->d_buf) + in ld_update_outfile()
4257 ofl->ofl_osstrtab->os_outdata->d_size - 1) == '\0')); in ld_update_outfile()
4259 assert((ofl->ofl_osdynstr == NULL) || in ld_update_outfile()
4260 (*((char *)ofl->ofl_osdynstr->os_outdata->d_buf) == '\0')); in ld_update_outfile()
4261 assert((ofl->ofl_osdynstr == NULL) || in ld_update_outfile()
4262 (*(((char *)ofl->ofl_osdynstr->os_outdata->d_buf) + in ld_update_outfile()
4263 ofl->ofl_osdynstr->os_outdata->d_size - DYNSTR_EXTRA_PAD - 1) == in ld_update_outfile()
4269 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osshstrtab, in ld_update_outfile()
4270 ofl->ofl_shdrsttab)); in ld_update_outfile()
4271 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osstrtab, in ld_update_outfile()
4272 ofl->ofl_strtab)); in ld_update_outfile()
4273 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osdynstr, in ld_update_outfile()
4274 ofl->ofl_dynstrtab)); in ld_update_outfile()
4281 if ((shscnndx = elf_ndxscn(ofl->ofl_osshstrtab->os_scn)) < in ld_update_outfile()
4283 ofl->ofl_nehdr->e_shstrndx = in ld_update_outfile()
4294 if ((scn = elf_getscn(ofl->ofl_elf, 0)) == NULL) { in ld_update_outfile()
4295 ld_eprintf(ofl, ERR_ELF, MSG_INTL(MSG_ELF_GETSCN), in ld_update_outfile()
4296 ofl->ofl_name); in ld_update_outfile()
4300 ld_eprintf(ofl, ERR_ELF, MSG_INTL(MSG_ELF_GETSHDR), in ld_update_outfile()
4301 ofl->ofl_name); in ld_update_outfile()
4304 ofl->ofl_nehdr->e_shstrndx = SHN_XINDEX; in ld_update_outfile()