Lines Matching refs:ofl
86 * ofl - Output file descriptor
99 dynsort_dupwarn(Ofl_desc *ofl, Sym *ldynsym, const char *str,
102 int zverbose = (ofl->ofl_flags & FLG_OF_VERBOSE) != 0;
116 ld_eprintf(ofl, ERR_WARNING,
121 DBG_CALL(Dbg_syms_dup_sort_addr(ofl->ofl_lml, secname,
140 update_osym(Ofl_desc *ofl)
220 ofl_flag_t flags = ofl->ofl_flags;
239 ((flags & FLG_OF_STATIC) && ofl->ofl_osversym)) {
240 symtab = (Sym *)ofl->ofl_ossymtab->os_outdata->d_buf;
242 if (ofl->ofl_ossymshndx)
244 (Word *)ofl->ofl_ossymshndx->os_outdata->d_buf;
246 if (OFL_ALLOW_DYNSYM(ofl)) {
247 dynsym = (Sym *)ofl->ofl_osdynsym->os_outdata->d_buf;
253 if (ofl->ofl_osldynsym) {
254 ldynsym = (Sym *)ofl->ofl_osldynsym->os_outdata->d_buf;
256 ldynsym_cnt = 1 + ofl->ofl_dynlocscnt +
257 ofl->ofl_dynscopecnt;
265 if (ofl->ofl_osdynsymsort) { /* .SUNW_dynsymsort */
267 ofl->ofl_osdynsymsort->os_outdata->d_buf;
270 if (ofl->ofl_osdyntlssort) { /* .SUNW_dyntlssort */
272 ofl->ofl_osdyntlssort->os_outdata->d_buf;
280 hashtab = (Word *)(ofl->ofl_oshash->os_outdata->d_buf);
282 hashchain = &hashtab[2 + ofl->ofl_hashbkts];
283 hashtab[0] = ofl->ofl_hashbkts;
284 hashtab[1] = DYNSYM_ALL_CNT(ofl);
285 if (ofl->ofl_osdynshndx)
287 (Word *)ofl->ofl_osdynshndx->os_outdata->d_buf;
288 if (ofl->ofl_osldynshndx)
290 (Word *)ofl->ofl_osldynshndx->os_outdata->d_buf;
309 versym = (Versym *)ofl->ofl_osversym->os_outdata->d_buf;
317 if (ofl->ofl_ossyminfo) {
318 syminfo = ofl->ofl_ossyminfo->os_outdata->d_buf;
326 shstrtab = ofl->ofl_shdrsttab;
327 strtab = ofl->ofl_strtab;
328 dynstr = ofl->ofl_dynstrtab;
330 DBG_CALL(Dbg_syms_sec_title(ofl->ofl_lml));
336 (void) st_setstring(strtab, ofl->ofl_name, &stoff);
350 (void) st_setstring(dynstr, ofl->ofl_name, &stoff);
362 ldynsym_ndx += ofl->ofl_dynscopecnt;
370 if ((ofl->ofl_gottable = gottable =
371 libld_calloc(ofl->ofl_gotcnt, sizeof (Gottable))) == NULL)
380 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) {
428 DBG_CALL(Dbg_syms_sec_entry(ofl->ofl_lml,
475 if (ofl->ofl_regsyms && dynsym) {
478 for (ndx = 0; ndx < ofl->ofl_regsymsno; ndx++) {
481 if ((rsdp = ofl->ofl_regsyms[ndx]) == NULL)
516 ld_eprintf(ofl, ERR_WARNING,
526 ld_eprintf(ofl, ERR_WARNING,
594 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_UPD_NOSEG));
607 symtab_ndx += ofl->ofl_scopecnt;
614 if (ofl->ofl_isparexpn) {
615 osp = ofl->ofl_isparexpn->is_osdesc;
617 ofl->ofl_isparexpn->is_indata->d_off);
620 ofl->ofl_parexpnndx = osp->os_identndx;
627 for (APLIST_TRAVERSE(ofl->ofl_objs, idx1, ifl)) {
645 (*ld_targ.t_mr.mr_assign_got)(ofl, sdp) == S_ERROR)
703 (!(ofl->ofl_flags & FLG_OF_REDLSYM) ||
707 !(ofl->ofl_flags & FLG_OF_REDLSYM);
783 if (ofl->ofl_isparexpn &&
786 sdp->sd_isc = ofl->ofl_isparexpn;
811 (ofl->ofl_tlsphdr)) {
813 ofl->ofl_tlsphdr->p_vaddr;
916 ofl)) != NULL) && (sdp->sd_ref == REF_REL_NEED) && sdp->sd_isc &&
923 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_SYM_NOCRT),
928 ofl)) != NULL) && (sdp->sd_ref == REF_REL_NEED) && sdp->sd_isc &&
935 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_SYM_NOCRT),
942 if (ofl->ofl_isbss) {
943 isc = ofl->ofl_isbss;
957 if ((ld_targ.t_m.m_mach == EM_AMD64) && ofl->ofl_islbss) {
958 osp = ofl->ofl_islbss->is_osdesc;
961 (Off)_elf_getxoff(ofl->ofl_islbss->is_indata);
969 if (ofl->ofl_istlsbss) {
970 osp = ofl->ofl_istlsbss->is_osdesc;
972 (Off)_elf_getxoff(ofl->ofl_istlsbss->is_indata);
977 if ((sorted_syms = libld_calloc(ofl->ofl_globcnt +
978 ofl->ofl_elimcnt + ofl->ofl_scopecnt,
983 ssndx = ofl->ofl_scopecnt + ofl->ofl_elimcnt;
985 DBG_CALL(Dbg_syms_up_title(ofl->ofl_lml));
991 for (sav = avl_first(&ofl->ofl_symavl); sav;
992 sav = AVL_NEXT(&ofl->ofl_symavl, sav)) {
1005 DBG_CALL(Dbg_syms_old(ofl, sdp));
1006 DBG_CALL(Dbg_syms_ignore(ofl, sdp));
1021 if (local || (ofl->ofl_hashbkts == 0)) {
1025 ofl->ofl_hashbkts;
1050 * prepared for that purpose (ofl->ofl_isparexpn).
1062 sdp->sd_isc = ofl->ofl_isparexpn;
1073 sdp->sd_isc = ofl->ofl_isbss;
1084 sdp->sd_isc = ofl->ofl_istlsbss;
1089 symptr->st_value -= ofl->ofl_tlsphdr->p_vaddr;
1103 sdp->sd_isc = ofl->ofl_islbss;
1129 if (dynsym && ofl->ofl_capfamilies) {
1132 for (cav = avl_first(ofl->ofl_capfamilies); cav;
1133 cav = AVL_NEXT(ofl->ofl_capfamilies, cav)) {
1140 DBG_CALL(Dbg_syms_created(ofl->ofl_lml,
1142 DBG_CALL(Dbg_syms_entered(ofl, sdp->sd_sym,
1172 if (ofl->ofl_hashbkts) {
1173 qsort(sorted_syms + ofl->ofl_scopecnt + ofl->ofl_elimcnt,
1174 ofl->ofl_globcnt, sizeof (Sym_s_list),
1178 for (ssndx = 0; ssndx < (ofl->ofl_elimcnt + ofl->ofl_scopecnt +
1179 ofl->ofl_globcnt); ssndx++) {
1200 (*ld_targ.t_mr.mr_assign_got)(ofl, sdp) == S_ERROR)
1292 APlist **alpp = &(ofl->ofl_symdtent);
1460 ofl->ofl_oscapinfo) {
1516 sap->sa_hash % ofl->ofl_hashbkts;
1608 DBG_CALL(Dbg_syms_old(ofl, sdp));
1618 ld_eprintf(ofl, ERR_WARNING,
1632 if (OFL_IS_STATIC_EXEC(ofl) &&
1700 STT_TLS) && (ofl->ofl_tlsphdr))
1702 ofl->ofl_tlsphdr->p_vaddr;
1740 sym->st_value = ofl->
1744 ofl->ofl_osdynamic->os_scn);
1749 if (ofl->ofl_osplt) {
1750 sym->st_value = ofl->
1754 ofl->ofl_osplt->os_scn);
1764 sym->st_value += ofl->
1767 sectndx = elf_ndxscn(ofl->
1788 (*ld_targ.t_mr.mr_calc_plt_addr)(sdp, ofl);
1866 DBG_CALL(Dbg_syms_new(ofl, sym, sdp));
1902 DBG_CALL(Dbg_syms_old(ofl, sdp));
1921 DBG_CALL(Dbg_syms_new(ofl, __sym, sdp));
1927 DBG_CALL(Dbg_got_display(ofl, 0, 0,
1938 Shdr *shdr = ofl->ofl_ossymtab->os_shdr;
1942 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_osstrtab->os_scn);
1944 ofl->ofl_ossymshndx->os_shdr->sh_link =
1945 (Word)elf_ndxscn(ofl->ofl_ossymtab->os_scn);
1956 assert((scopesym_bndx + ofl->ofl_scopecnt) == scopesym_ndx);
1957 assert(shdr->sh_info == SYMTAB_LOC_CNT(ofl));
1958 assert((shdr->sh_info + ofl->ofl_globcnt) == symtab_ndx);
1961 Shdr *shdr = ofl->ofl_osdynsym->os_shdr;
1963 shdr->sh_info = DYNSYM_LOC_CNT(ofl);
1965 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_osdynstr->os_scn);
1967 ofl->ofl_oshash->os_shdr->sh_link =
1969 (Word)elf_ndxscn(ofl->ofl_osdynsym->os_scn);
1971 shdr = ofl->ofl_osdynshndx->os_shdr;
1973 (Word)elf_ndxscn(ofl->ofl_osdynsym->os_scn);
1977 Shdr *shdr = ofl->ofl_osldynsym->os_shdr;
2001 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_osdynstr->os_scn);
2004 shdr = ofl->ofl_osldynshndx->os_shdr;
2006 (Word)elf_ndxscn(ofl->ofl_osldynsym->os_scn);
2018 if (ofl->ofl_osdynsymsort) { /* .SUNW_dynsymsort */
2019 ofl->ofl_osdynsymsort->os_shdr->sh_link =
2020 (Word)elf_ndxscn(ofl->ofl_osldynsym->os_scn);
2021 assert(ofl->ofl_dynsymsortcnt == dynsymsort_ndx);
2027 dynsort_dupwarn(ofl, ldynsym,
2033 if (ofl->ofl_osdyntlssort) { /* .SUNW_dyntlssort */
2034 ofl->ofl_osdyntlssort->os_shdr->sh_link =
2035 (Word)elf_ndxscn(ofl->ofl_osldynsym->os_scn);
2036 assert(ofl->ofl_dyntlssortcnt == dyntlssort_ndx);
2042 dynsort_dupwarn(ofl, ldynsym,
2065 update_odynamic(Ofl_desc *ofl)
2071 Dyn *_dyn = (Dyn *)ofl->ofl_osdynamic->os_outdata->d_buf;
2076 ofl_flag_t flags = ofl->ofl_flags;
2090 if (OFL_IS_STATIC_OBJ(ofl)) {
2091 symosp = ofl->ofl_ossymtab;
2092 strosp = ofl->ofl_osstrtab;
2093 strtbl = ofl->ofl_strtab;
2095 symosp = ofl->ofl_osdynsym;
2096 strosp = ofl->ofl_osdynstr;
2097 strtbl = ofl->ofl_dynstrtab;
2101 ofl->ofl_osdynamic->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn);
2105 for (APLIST_TRAVERSE(ofl->ofl_sos, idx, ifl)) {
2139 if (ofl->ofl_dtsfltrs != NULL) {
2142 for (ALIST_TRAVERSE(ofl->ofl_dtsfltrs, idx, dftp)) {
2157 SYM_NOHASH, 0, ofl)) != NULL) &&
2165 SYM_NOHASH, 0, ofl)) != NULL) &&
2172 if (ofl->ofl_soname) {
2174 (void) st_setstring(strtbl, ofl->ofl_soname, &stoff);
2178 if (ofl->ofl_filtees) {
2184 (void) st_setstring(strtbl, ofl->ofl_filtees, &stoff);
2190 if (ofl->ofl_rpath) {
2191 (void) st_setstring(strtbl, ofl->ofl_rpath, &stoff);
2204 if (ofl->ofl_config) {
2206 (void) st_setstring(strtbl, ofl->ofl_config, &stoff);
2210 if (ofl->ofl_depaudit) {
2212 (void) st_setstring(strtbl, ofl->ofl_depaudit, &stoff);
2216 if (ofl->ofl_audit) {
2218 (void) st_setstring(strtbl, ofl->ofl_audit, &stoff);
2224 dyn->d_un.d_ptr = ofl->ofl_oshash->os_shdr->sh_addr;
2237 * Note, the shdr is set and used in the ofl->ofl_osldynsym case
2249 if (ofl->ofl_osldynsym) {
2250 Shdr *lshdr = ofl->ofl_osldynsym->os_shdr;
2270 if (ofl->ofl_osdynsymsort || ofl->ofl_osdyntlssort) {
2276 if (ofl->ofl_osdynsymsort) {
2277 shdr = ofl->ofl_osdynsymsort->os_shdr;
2288 if (ofl->ofl_osdyntlssort) {
2289 shdr = ofl->ofl_osdyntlssort->os_shdr;
2305 ofl->ofl_checksum = &dyn->d_un.d_val;
2343 shdr = ofl->ofl_osverdef->os_shdr;
2354 shdr = ofl->ofl_osverneed->os_shdr;
2364 if ((flags & FLG_OF_COMREL) && ofl->ofl_relocrelcnt) {
2366 dyn->d_un.d_val = ofl->ofl_relocrelcnt;
2379 if (ofl->ofl_osfiniarray) {
2380 shdr = ofl->ofl_osfiniarray->os_shdr;
2391 if (ofl->ofl_osinitarray) {
2392 shdr = ofl->ofl_osinitarray->os_shdr;
2403 if (ofl->ofl_ospreinitarray) {
2404 shdr = ofl->ofl_ospreinitarray->os_shdr;
2415 if (ofl->ofl_pltcnt) {
2416 shdr = ofl->ofl_osplt->os_relosdesc->os_shdr;
2428 if (ofl->ofl_pltpad) {
2429 shdr = ofl->ofl_osplt->os_shdr;
2432 if (ofl->ofl_pltcnt) {
2435 ofl->ofl_pltcnt * ld_targ.t_m.m_plt_entsize;
2440 dyn->d_un.d_val = ofl->ofl_pltpad *
2444 if (ofl->ofl_relocsz) {
2445 shdr = ofl->ofl_osrelhead->os_shdr;
2451 dyn->d_un.d_ptr = ofl->ofl_relocsz;
2460 if (ofl->ofl_ossyminfo) {
2461 shdr = ofl->ofl_ossyminfo->os_shdr;
2473 if (ofl->ofl_osmove) {
2474 shdr = ofl->ofl_osmove->os_shdr;
2486 if (ofl->ofl_regsymcnt) {
2489 for (ndx = 0; ndx < ofl->ofl_regsymsno; ndx++) {
2490 if ((sdp = ofl->ofl_regsyms[ndx]) == NULL)
2499 for (APLIST_TRAVERSE(ofl->ofl_rtldinfo, idx, sdp)) {
2505 if (((sgp = ofl->ofl_osdynamic->os_sgdesc) != NULL) &&
2506 (sgp->sg_phdr.p_flags & PF_W) && ofl->ofl_osinterp) {
2512 if (ofl->ofl_oscap) {
2514 dyn->d_un.d_val = ofl->ofl_oscap->os_shdr->sh_addr;
2517 if (ofl->ofl_oscapinfo) {
2519 dyn->d_un.d_val = ofl->ofl_oscapinfo->os_shdr->sh_addr;
2522 if (ofl->ofl_oscapchain) {
2523 shdr = ofl->ofl_oscapchain->os_shdr;
2536 if (ofl->ofl_aslr != 0) {
2538 dyn->d_un.d_val = (ofl->ofl_aslr == 1);
2550 dyn->d_un.d_val = ofl->ofl_dtflags;
2565 if (ofl->ofl_flags1 & FLG_OF1_NGLBDIR)
2566 ofl->ofl_dtflags_1 &= ~DF_1_DIRECT;
2567 if (ofl->ofl_flags1 & FLG_OF1_NDIRECT)
2568 ofl->ofl_dtflags_1 |= DF_1_NODIRECT;
2571 dyn->d_un.d_val = ofl->ofl_dtflags_1;
2582 (*ld_targ.t_mr.mr_mach_update_odynamic)(ofl, &dyn);
2594 assert((ofl->ofl_osdynamic->os_shdr->sh_size /
2595 ofl->ofl_osdynamic->os_shdr->sh_entsize) ==
2605 update_overdef(Ofl_desc *ofl)
2617 if (OFL_IS_STATIC_OBJ(ofl)) {
2618 strtbl = ofl->ofl_strtab;
2619 strosp = ofl->ofl_osstrtab;
2621 strtbl = ofl->ofl_dynstrtab;
2622 strosp = ofl->ofl_osdynstr;
2630 for (APLIST_TRAVERSE(ofl->ofl_verdesc, idx1, vdp)) {
2646 sdp = ld_sym_find(vdp->vd_name, vdp->vd_hash, 0, ofl);
2653 _vdf = vdf = (Verdef *)ofl->ofl_osverdef->os_outdata->d_buf;
2659 for (APLIST_TRAVERSE(ofl->ofl_verdesc, idx1, vdp)) {
2719 ofl->ofl_osverdef->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn);
2725 ofl->ofl_osverdef->os_shdr->sh_info = num;
2734 update_oversym(Ofl_desc *ofl)
2743 if (OFL_IS_STATIC_OBJ(ofl))
2744 osp = ofl->ofl_ossymtab;
2746 osp = ofl->ofl_osdynsym;
2749 ofl->ofl_osversym->os_shdr->sh_link = (Word)elf_ndxscn(osp->os_scn);
2756 update_overneed(Ofl_desc *ofl)
2765 _vnd = vnd = (Verneed *)ofl->ofl_osverneed->os_outdata->d_buf;
2770 if (OFL_IS_STATIC_OBJ(ofl)) {
2771 strosp = ofl->ofl_osstrtab;
2772 strtbl = ofl->ofl_strtab;
2774 strosp = ofl->ofl_osdynstr;
2775 strtbl = ofl->ofl_dynstrtab;
2782 for (APLIST_TRAVERSE(ofl->ofl_sos, idx1, ifl)) {
2867 ofl->ofl_osverneed->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn);
2868 ofl->ofl_osverneed->os_shdr->sh_info = num;
2877 update_osyminfo(Ofl_desc *ofl)
2879 Os_desc *symosp, *infosp = ofl->ofl_ossyminfo;
2887 if (ofl->ofl_flags & FLG_OF_RELOBJ) {
2888 symosp = ofl->ofl_ossymtab;
2889 strtab = ofl->ofl_osstrtab->os_outdata->d_buf;
2891 symosp = ofl->ofl_osdynsym;
2892 strtab = ofl->ofl_osdynstr->os_outdata->d_buf;
2897 if (ofl->ofl_osdynamic)
2900 (Word)elf_ndxscn(ofl->ofl_osdynamic->os_scn);
2905 for (APLIST_TRAVERSE(ofl->ofl_symdtent, idx, sdp))
2911 for (ALIST_TRAVERSE(ofl->ofl_symfltrs, idx, sftp)) {
2914 dftp = alist_item(ofl->ofl_dtsfltrs, sftp->sft_idx);
2921 DBG_CALL(Dbg_syminfo_title(ofl->ofl_lml));
2927 if (ofl->ofl_osdynamic)
2928 dyn = ofl->ofl_osdynamic->os_outdata->d_buf;
2935 DBG_CALL(Dbg_syminfo_entry(ofl->ofl_lml, _cnt,
2946 update_oehdr(Ofl_desc * ofl)
2948 Ehdr *ehdr = ofl->ofl_nehdr;
2957 if (ofl->ofl_entry)
2959 ((Sym_desc *)(ofl->ofl_entry))->sd_sym->st_value;
2962 ehdr->e_version = ofl->ofl_dehdr->e_version;
2975 if (ofl->ofl_flags & FLG_OF_OTOSCAP) {
2983 ehdr->e_machine = ofl->ofl_dehdr->e_machine;
2984 ehdr->e_flags = ofl->ofl_dehdr->e_flags;
2994 if (ofl->ofl_flags & FLG_OF_SHAROBJ)
2996 else if (ofl->ofl_flags & FLG_OF_RELOBJ)
3008 expand_move(Ofl_desc *ofl, Sym_desc *sdp, Move *mvp)
3016 osp = ofl->ofl_isparexpn->is_osdesc;
3025 DBG_CALL(Dbg_move_expand(ofl->ofl_lml, mvp,
3063 update_move(Ofl_desc *ofl)
3066 ofl_flag_t flags = ofl->ofl_flags;
3075 if (OFL_ALLOW_DYNSYM(ofl))
3077 ndx = (Word) elf_ndxscn(ofl->ofl_osdynsym->os_scn);
3080 ndx = (Word) elf_ndxscn(ofl->ofl_ossymtab->os_scn);
3085 if (ofl->ofl_osmove) {
3086 ofl->ofl_osmove->os_shdr->sh_link = ndx;
3087 omvp = (Move *)ofl->ofl_osmove->os_outdata->d_buf;
3093 for (APLIST_TRAVERSE(ofl->ofl_parsyms, idx1, sdp)) {
3105 else if (ofl->ofl_flags1 & FLG_OF1_NOPARTI)
3110 DBG_CALL(Dbg_move_parexpn(ofl->ofl_lml,
3114 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 0,
3116 expand_move(ofl, sdp, mdp->md_move);
3124 DBG_CALL(Dbg_move_outmove(ofl->ofl_lml, sdp->sd_name));
3134 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 1, imvp, sdp));
3163 (ofl->ofl_flags & FLG_OF_REDLSYM))
3177 DBG_CALL(Dbg_syms_reduce(ofl,
3180 ofl->ofl_osmove->os_name));
3189 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 0, omvp, sdp));
3201 update_ogroup(Ofl_desc *ofl)
3207 for (APLIST_TRAVERSE(ofl->ofl_osgroups, idx, osp)) {
3224 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_ossymtab->os_scn);
3275 update_oscap(Ofl_desc *ofl)
3287 if (OFL_IS_STATIC_OBJ(ofl)) {
3288 strosp = ofl->ofl_osstrtab;
3289 strtbl = ofl->ofl_strtab;
3291 strosp = ofl->ofl_osdynstr;
3292 strtbl = ofl->ofl_dynstrtab;
3299 if (ofl->ofl_oscapinfo) {
3300 cosp = ofl->ofl_oscap;
3302 (Word)elf_ndxscn(ofl->ofl_oscapinfo->os_scn);
3310 if ((ofl->ofl_flags & FLG_OF_CAPSTRS) == 0)
3313 cosp = ofl->ofl_oscap;
3316 cap = ofl->ofl_oscap->os_outdata->d_buf;
3322 capstr = &ofl->ofl_ocapset.oc_id;
3327 for (ALIST_TRAVERSE(ofl->ofl_ocapset.oc_plat.cl_val, idx1, capstr)) {
3331 for (ALIST_TRAVERSE(ofl->ofl_ocapset.oc_mach.cl_val, idx1, capstr)) {
3340 if (ofl->ofl_capgroups) {
3343 for (APLIST_TRAVERSE(ofl->ofl_capgroups, idx1, cgp)) {
3373 update_oscapinfo(Ofl_desc *ofl)
3384 if (OFL_IS_STATIC_OBJ(ofl))
3385 symosp = ofl->ofl_ossymtab;
3387 symosp = ofl->ofl_osdynsym;
3395 ciosp = ofl->ofl_oscapinfo;
3398 if (OFL_IS_STATIC_OBJ(ofl) == 0) {
3399 ccosp = ofl->ofl_oscapchain;
3464 for (cav = avl_first(ofl->ofl_capfamilies); cav;
3465 cav = AVL_NEXT(ofl->ofl_capfamilies, cav)) {
3548 translate_link(Ofl_desc *ofl, Os_desc *osp, Word link, const char *msg)
3573 ld_eprintf(ofl, ERR_WARNING, msg, ifl->ifl_name,
3613 ld_update_outfile(Ofl_desc *ofl)
3621 Ehdr *ehdr = ofl->ofl_nehdr;
3625 ofl_flag_t flags = ofl->ofl_flags;
3639 if (ofl->ofl_flags & FLG_OF_EXEC) {
3641 if (ofl->ofl_ocapset.oc_sf_1.cm_val & SF1_SUNW_ADDR32)
3652 DBG_CALL(Dbg_seg_title(ofl->ofl_lml));
3653 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) {
3672 if (ofl->ofl_osinterp) {
3676 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3677 ofl->ofl_phdr[phdrndx++] = *phdr;
3682 if (ofl->ofl_osinterp) {
3697 if (ofl->ofl_dtracesym &&
3713 if (ofl->ofl_oscap && (ofl->ofl_flags & FLG_OF_PTCAP) &&
3729 if (OFL_ALLOW_DYNSYM(ofl)) {
3730 Shdr *shdr = ofl->ofl_osdynamic->os_shdr;
3737 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3738 ofl->ofl_phdr[phdrndx++] = *phdr;
3752 if (ofl->ofl_unwindhdr == NULL)
3755 shdr = ofl->ofl_unwindhdr->os_shdr;
3764 ofl->ofl_phdr[phdrndx++] = *phdr;
3776 ofl->ofl_phdr[phdrndx++] = *phdr;
3792 if (ofl->ofl_ostlsseg == NULL)
3803 for (APLIST_TRAVERSE(ofl->ofl_ostlsseg, idx, tlsosp)) {
3839 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3840 ofl->ofl_phdr[phdrndx] = *phdr;
3841 ofl->ofl_tlsphdr = &ofl->ofl_phdr[phdrndx++];
3863 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3864 ofl->ofl_phdr[phdrndx++] = *phdr;
3875 Addr p_s = (ofl->ofl_phdr[i]).p_vaddr;
3878 if ((ofl->ofl_phdr[i]).p_type != PT_LOAD)
3881 p_e = p_s + (ofl->ofl_phdr[i]).p_memsz;
3884 ld_eprintf(ofl, ERR_WARNING,
3886 ofl->ofl_name, EC_ADDR(p_e),
3929 ld_eprintf(ofl, ERR_FATAL,
3949 ((ofl->ofl_osinterp) || (flags & FLG_OF_DYNAMIC)) &&
3950 (!(ofl->ofl_dtflags_1 & DF_1_NOHDR))) {
3982 ld_eprintf(ofl, ERR_WARNING,
3984 ofl->ofl_name, EC_ADDR(vaddr),
3999 ((ofl->ofl_dtflags_1 & DF_1_NOHDR) == 0)) {
4016 if ((ofl->ofl_dtflags_1 & DF_1_NOHDR) == 0) {
4017 if (ofl->ofl_osinterp)
4018 ofl->ofl_phdr[0].p_vaddr =
4028 if ((ofl->ofl_osinterp) ||
4037 if (ofl->ofl_osinterp) {
4038 ofl->ofl_phdr[0].p_vaddr = 0;
4039 ofl->ofl_phdr[0].p_memsz = 0;
4040 ofl->ofl_phdr[0].p_flags = 0;
4054 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
4069 shdr->sh_link = translate_link(ofl, osp,
4073 shdr->sh_info = translate_link(ofl, osp,
4086 DBG_CALL(Dbg_seg_os(ofl, osp, secndx));
4104 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_UPD_LARGSIZE),
4105 ofl->ofl_name, sgp->sg_name,
4118 ofl->ofl_phdr[phdrndx++] = *phdr;
4130 if (ofl->ofl_interp)
4131 (void) strcpy((char *)ofl->ofl_osinterp->os_outdata->d_buf,
4132 ofl->ofl_interp);
4137 update_ostrtab(ofl->ofl_osshstrtab, ofl->ofl_shdrsttab, 0);
4138 update_ostrtab(ofl->ofl_osstrtab, ofl->ofl_strtab, 0);
4139 update_ostrtab(ofl->ofl_osdynstr, ofl->ofl_dynstrtab, DYNSTR_EXTRA_PAD);
4145 if ((etext = update_osym(ofl)) == (Addr)S_ERROR)
4154 Shdr *shdr = ofl->ofl_osinterp->os_shdr;
4161 DBG_CALL(Dbg_seg_entry(ofl, intpsndx, intpsgp));
4162 ofl->ofl_phdr[intppndx] = *phdr;
4171 Sym_desc *sdp = ofl->ofl_dtracesym;
4184 DBG_CALL(Dbg_seg_entry(ofl, dtracesndx, dtracesgp));
4185 ofl->ofl_phdr[dtracepndx] = *phdr;
4194 Shdr *shdr = ofl->ofl_oscap->os_shdr;
4201 DBG_CALL(Dbg_seg_entry(ofl, capsndx, capsgp));
4202 ofl->ofl_phdr[cappndx] = *phdr;
4208 if (update_ogroup(ofl) == S_ERROR)
4214 if (ofl->ofl_osmove || ofl->ofl_isparexpn)
4215 update_move(ofl);
4221 if (update_oehdr(ofl) == S_ERROR)
4225 (update_overdef(ofl) == S_ERROR))
4228 (update_overneed(ofl) == S_ERROR))
4231 update_oversym(ofl);
4234 if (update_odynamic(ofl) == S_ERROR)
4237 if (ofl->ofl_ossyminfo) {
4238 if (update_osyminfo(ofl) == S_ERROR)
4245 if (ofl->ofl_oscap)
4246 update_oscap(ofl);
4247 if (ofl->ofl_oscapinfo)
4248 update_oscapinfo(ofl);
4254 assert((ofl->ofl_osshstrtab == NULL) ||
4255 (*((char *)ofl->ofl_osshstrtab->os_outdata->d_buf) == '\0'));
4256 assert((ofl->ofl_osshstrtab == NULL) ||
4257 (*(((char *)ofl->ofl_osshstrtab->os_outdata->d_buf) +
4258 ofl->ofl_osshstrtab->os_outdata->d_size - 1) == '\0'));
4260 assert((ofl->ofl_osstrtab == NULL) ||
4261 (*((char *)ofl->ofl_osstrtab->os_outdata->d_buf) == '\0'));
4262 assert((ofl->ofl_osstrtab == NULL) ||
4263 (*(((char *)ofl->ofl_osstrtab->os_outdata->d_buf) +
4264 ofl->ofl_osstrtab->os_outdata->d_size - 1) == '\0'));
4266 assert((ofl->ofl_osdynstr == NULL) ||
4267 (*((char *)ofl->ofl_osdynstr->os_outdata->d_buf) == '\0'));
4268 assert((ofl->ofl_osdynstr == NULL) ||
4269 (*(((char *)ofl->ofl_osdynstr->os_outdata->d_buf) +
4270 ofl->ofl_osdynstr->os_outdata->d_size - DYNSTR_EXTRA_PAD - 1) ==
4276 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osshstrtab,
4277 ofl->ofl_shdrsttab));
4278 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osstrtab,
4279 ofl->ofl_strtab));
4280 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osdynstr,
4281 ofl->ofl_dynstrtab));
4288 if ((shscnndx = elf_ndxscn(ofl->ofl_osshstrtab->os_scn)) <
4290 ofl->ofl_nehdr->e_shstrndx =
4301 if ((scn = elf_getscn(ofl->ofl_elf, 0)) == NULL) {
4302 ld_eprintf(ofl, ERR_ELF, MSG_INTL(MSG_ELF_GETSCN),
4303 ofl->ofl_name);
4307 ld_eprintf(ofl, ERR_ELF, MSG_INTL(MSG_ELF_GETSHDR),
4308 ofl->ofl_name);
4311 ofl->ofl_nehdr->e_shstrndx = SHN_XINDEX;