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;
2543 dyn->d_un.d_val = ofl->ofl_dtflags;
2558 if (ofl->ofl_flags1 & FLG_OF1_NGLBDIR)
2559 ofl->ofl_dtflags_1 &= ~DF_1_DIRECT;
2560 if (ofl->ofl_flags1 & FLG_OF1_NDIRECT)
2561 ofl->ofl_dtflags_1 |= DF_1_NODIRECT;
2564 dyn->d_un.d_val = ofl->ofl_dtflags_1;
2575 (*ld_targ.t_mr.mr_mach_update_odynamic)(ofl, &dyn);
2587 assert((ofl->ofl_osdynamic->os_shdr->sh_size /
2588 ofl->ofl_osdynamic->os_shdr->sh_entsize) ==
2598 update_overdef(Ofl_desc *ofl)
2610 if (OFL_IS_STATIC_OBJ(ofl)) {
2611 strtbl = ofl->ofl_strtab;
2612 strosp = ofl->ofl_osstrtab;
2614 strtbl = ofl->ofl_dynstrtab;
2615 strosp = ofl->ofl_osdynstr;
2623 for (APLIST_TRAVERSE(ofl->ofl_verdesc, idx1, vdp)) {
2639 sdp = ld_sym_find(vdp->vd_name, vdp->vd_hash, 0, ofl);
2646 _vdf = vdf = (Verdef *)ofl->ofl_osverdef->os_outdata->d_buf;
2652 for (APLIST_TRAVERSE(ofl->ofl_verdesc, idx1, vdp)) {
2712 ofl->ofl_osverdef->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn);
2718 ofl->ofl_osverdef->os_shdr->sh_info = num;
2727 update_oversym(Ofl_desc *ofl)
2736 if (OFL_IS_STATIC_OBJ(ofl))
2737 osp = ofl->ofl_ossymtab;
2739 osp = ofl->ofl_osdynsym;
2742 ofl->ofl_osversym->os_shdr->sh_link = (Word)elf_ndxscn(osp->os_scn);
2749 update_overneed(Ofl_desc *ofl)
2758 _vnd = vnd = (Verneed *)ofl->ofl_osverneed->os_outdata->d_buf;
2763 if (OFL_IS_STATIC_OBJ(ofl)) {
2764 strosp = ofl->ofl_osstrtab;
2765 strtbl = ofl->ofl_strtab;
2767 strosp = ofl->ofl_osdynstr;
2768 strtbl = ofl->ofl_dynstrtab;
2775 for (APLIST_TRAVERSE(ofl->ofl_sos, idx1, ifl)) {
2860 ofl->ofl_osverneed->os_shdr->sh_link = (Word)elf_ndxscn(strosp->os_scn);
2861 ofl->ofl_osverneed->os_shdr->sh_info = num;
2870 update_osyminfo(Ofl_desc *ofl)
2872 Os_desc *symosp, *infosp = ofl->ofl_ossyminfo;
2880 if (ofl->ofl_flags & FLG_OF_RELOBJ) {
2881 symosp = ofl->ofl_ossymtab;
2882 strtab = ofl->ofl_osstrtab->os_outdata->d_buf;
2884 symosp = ofl->ofl_osdynsym;
2885 strtab = ofl->ofl_osdynstr->os_outdata->d_buf;
2890 if (ofl->ofl_osdynamic)
2893 (Word)elf_ndxscn(ofl->ofl_osdynamic->os_scn);
2898 for (APLIST_TRAVERSE(ofl->ofl_symdtent, idx, sdp))
2904 for (ALIST_TRAVERSE(ofl->ofl_symfltrs, idx, sftp)) {
2907 dftp = alist_item(ofl->ofl_dtsfltrs, sftp->sft_idx);
2914 DBG_CALL(Dbg_syminfo_title(ofl->ofl_lml));
2920 if (ofl->ofl_osdynamic)
2921 dyn = ofl->ofl_osdynamic->os_outdata->d_buf;
2928 DBG_CALL(Dbg_syminfo_entry(ofl->ofl_lml, _cnt,
2939 update_oehdr(Ofl_desc * ofl)
2941 Ehdr *ehdr = ofl->ofl_nehdr;
2950 if (ofl->ofl_entry)
2952 ((Sym_desc *)(ofl->ofl_entry))->sd_sym->st_value;
2955 ehdr->e_version = ofl->ofl_dehdr->e_version;
2968 if (ofl->ofl_flags & FLG_OF_OTOSCAP) {
2976 ehdr->e_machine = ofl->ofl_dehdr->e_machine;
2977 ehdr->e_flags = ofl->ofl_dehdr->e_flags;
2987 if (ofl->ofl_flags & FLG_OF_SHAROBJ)
2989 else if (ofl->ofl_flags & FLG_OF_RELOBJ)
3001 expand_move(Ofl_desc *ofl, Sym_desc *sdp, Move *mvp)
3009 osp = ofl->ofl_isparexpn->is_osdesc;
3018 DBG_CALL(Dbg_move_expand(ofl->ofl_lml, mvp,
3056 update_move(Ofl_desc *ofl)
3059 ofl_flag_t flags = ofl->ofl_flags;
3068 if (OFL_ALLOW_DYNSYM(ofl))
3070 ndx = (Word) elf_ndxscn(ofl->ofl_osdynsym->os_scn);
3073 ndx = (Word) elf_ndxscn(ofl->ofl_ossymtab->os_scn);
3078 if (ofl->ofl_osmove) {
3079 ofl->ofl_osmove->os_shdr->sh_link = ndx;
3080 omvp = (Move *)ofl->ofl_osmove->os_outdata->d_buf;
3086 for (APLIST_TRAVERSE(ofl->ofl_parsyms, idx1, sdp)) {
3098 else if (ofl->ofl_flags1 & FLG_OF1_NOPARTI)
3103 DBG_CALL(Dbg_move_parexpn(ofl->ofl_lml,
3107 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 0,
3109 expand_move(ofl, sdp, mdp->md_move);
3117 DBG_CALL(Dbg_move_outmove(ofl->ofl_lml, sdp->sd_name));
3127 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 1, imvp, sdp));
3156 (ofl->ofl_flags & FLG_OF_REDLSYM))
3170 DBG_CALL(Dbg_syms_reduce(ofl,
3173 ofl->ofl_osmove->os_name));
3182 DBG_CALL(Dbg_move_entry1(ofl->ofl_lml, 0, omvp, sdp));
3194 update_ogroup(Ofl_desc *ofl)
3200 for (APLIST_TRAVERSE(ofl->ofl_osgroups, idx, osp)) {
3217 shdr->sh_link = (Word)elf_ndxscn(ofl->ofl_ossymtab->os_scn);
3268 update_oscap(Ofl_desc *ofl)
3280 if (OFL_IS_STATIC_OBJ(ofl)) {
3281 strosp = ofl->ofl_osstrtab;
3282 strtbl = ofl->ofl_strtab;
3284 strosp = ofl->ofl_osdynstr;
3285 strtbl = ofl->ofl_dynstrtab;
3292 if (ofl->ofl_oscapinfo) {
3293 cosp = ofl->ofl_oscap;
3295 (Word)elf_ndxscn(ofl->ofl_oscapinfo->os_scn);
3303 if ((ofl->ofl_flags & FLG_OF_CAPSTRS) == 0)
3306 cosp = ofl->ofl_oscap;
3309 cap = ofl->ofl_oscap->os_outdata->d_buf;
3315 capstr = &ofl->ofl_ocapset.oc_id;
3320 for (ALIST_TRAVERSE(ofl->ofl_ocapset.oc_plat.cl_val, idx1, capstr)) {
3324 for (ALIST_TRAVERSE(ofl->ofl_ocapset.oc_mach.cl_val, idx1, capstr)) {
3333 if (ofl->ofl_capgroups) {
3336 for (APLIST_TRAVERSE(ofl->ofl_capgroups, idx1, cgp)) {
3366 update_oscapinfo(Ofl_desc *ofl)
3377 if (OFL_IS_STATIC_OBJ(ofl))
3378 symosp = ofl->ofl_ossymtab;
3380 symosp = ofl->ofl_osdynsym;
3388 ciosp = ofl->ofl_oscapinfo;
3391 if (OFL_IS_STATIC_OBJ(ofl) == 0) {
3392 ccosp = ofl->ofl_oscapchain;
3457 for (cav = avl_first(ofl->ofl_capfamilies); cav;
3458 cav = AVL_NEXT(ofl->ofl_capfamilies, cav)) {
3541 translate_link(Ofl_desc *ofl, Os_desc *osp, Word link, const char *msg)
3566 ld_eprintf(ofl, ERR_WARNING, msg, ifl->ifl_name,
3606 ld_update_outfile(Ofl_desc *ofl)
3614 Ehdr *ehdr = ofl->ofl_nehdr;
3618 ofl_flag_t flags = ofl->ofl_flags;
3632 if (ofl->ofl_flags & FLG_OF_EXEC) {
3634 if (ofl->ofl_ocapset.oc_sf_1.cm_val & SF1_SUNW_ADDR32)
3645 DBG_CALL(Dbg_seg_title(ofl->ofl_lml));
3646 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) {
3665 if (ofl->ofl_osinterp) {
3669 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3670 ofl->ofl_phdr[phdrndx++] = *phdr;
3675 if (ofl->ofl_osinterp) {
3690 if (ofl->ofl_dtracesym &&
3706 if (ofl->ofl_oscap && (ofl->ofl_flags & FLG_OF_PTCAP) &&
3722 if (OFL_ALLOW_DYNSYM(ofl)) {
3723 Shdr *shdr = ofl->ofl_osdynamic->os_shdr;
3730 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3731 ofl->ofl_phdr[phdrndx++] = *phdr;
3745 if (ofl->ofl_unwindhdr == NULL)
3748 shdr = ofl->ofl_unwindhdr->os_shdr;
3757 ofl->ofl_phdr[phdrndx++] = *phdr;
3769 ofl->ofl_phdr[phdrndx++] = *phdr;
3785 if (ofl->ofl_ostlsseg == NULL)
3796 for (APLIST_TRAVERSE(ofl->ofl_ostlsseg, idx, tlsosp)) {
3832 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3833 ofl->ofl_phdr[phdrndx] = *phdr;
3834 ofl->ofl_tlsphdr = &ofl->ofl_phdr[phdrndx++];
3856 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
3857 ofl->ofl_phdr[phdrndx++] = *phdr;
3868 Addr p_s = (ofl->ofl_phdr[i]).p_vaddr;
3871 if ((ofl->ofl_phdr[i]).p_type != PT_LOAD)
3874 p_e = p_s + (ofl->ofl_phdr[i]).p_memsz;
3877 ld_eprintf(ofl, ERR_WARNING,
3879 ofl->ofl_name, EC_ADDR(p_e),
3922 ld_eprintf(ofl, ERR_FATAL,
3942 ((ofl->ofl_osinterp) || (flags & FLG_OF_DYNAMIC)) &&
3943 (!(ofl->ofl_dtflags_1 & DF_1_NOHDR))) {
3975 ld_eprintf(ofl, ERR_WARNING,
3977 ofl->ofl_name, EC_ADDR(vaddr),
3992 ((ofl->ofl_dtflags_1 & DF_1_NOHDR) == 0)) {
4009 if ((ofl->ofl_dtflags_1 & DF_1_NOHDR) == 0) {
4010 if (ofl->ofl_osinterp)
4011 ofl->ofl_phdr[0].p_vaddr =
4021 if ((ofl->ofl_osinterp) ||
4030 if (ofl->ofl_osinterp) {
4031 ofl->ofl_phdr[0].p_vaddr = 0;
4032 ofl->ofl_phdr[0].p_memsz = 0;
4033 ofl->ofl_phdr[0].p_flags = 0;
4047 DBG_CALL(Dbg_seg_entry(ofl, segndx, sgp));
4062 shdr->sh_link = translate_link(ofl, osp,
4066 shdr->sh_info = translate_link(ofl, osp,
4079 DBG_CALL(Dbg_seg_os(ofl, osp, secndx));
4097 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_UPD_LARGSIZE),
4098 ofl->ofl_name, sgp->sg_name,
4111 ofl->ofl_phdr[phdrndx++] = *phdr;
4123 if (ofl->ofl_interp)
4124 (void) strcpy((char *)ofl->ofl_osinterp->os_outdata->d_buf,
4125 ofl->ofl_interp);
4130 update_ostrtab(ofl->ofl_osshstrtab, ofl->ofl_shdrsttab, 0);
4131 update_ostrtab(ofl->ofl_osstrtab, ofl->ofl_strtab, 0);
4132 update_ostrtab(ofl->ofl_osdynstr, ofl->ofl_dynstrtab, DYNSTR_EXTRA_PAD);
4138 if ((etext = update_osym(ofl)) == (Addr)S_ERROR)
4147 Shdr *shdr = ofl->ofl_osinterp->os_shdr;
4154 DBG_CALL(Dbg_seg_entry(ofl, intpsndx, intpsgp));
4155 ofl->ofl_phdr[intppndx] = *phdr;
4164 Sym_desc *sdp = ofl->ofl_dtracesym;
4177 DBG_CALL(Dbg_seg_entry(ofl, dtracesndx, dtracesgp));
4178 ofl->ofl_phdr[dtracepndx] = *phdr;
4187 Shdr *shdr = ofl->ofl_oscap->os_shdr;
4194 DBG_CALL(Dbg_seg_entry(ofl, capsndx, capsgp));
4195 ofl->ofl_phdr[cappndx] = *phdr;
4201 if (update_ogroup(ofl) == S_ERROR)
4207 if (ofl->ofl_osmove || ofl->ofl_isparexpn)
4208 update_move(ofl);
4214 if (update_oehdr(ofl) == S_ERROR)
4218 (update_overdef(ofl) == S_ERROR))
4221 (update_overneed(ofl) == S_ERROR))
4224 update_oversym(ofl);
4227 if (update_odynamic(ofl) == S_ERROR)
4230 if (ofl->ofl_ossyminfo) {
4231 if (update_osyminfo(ofl) == S_ERROR)
4238 if (ofl->ofl_oscap)
4239 update_oscap(ofl);
4240 if (ofl->ofl_oscapinfo)
4241 update_oscapinfo(ofl);
4247 assert((ofl->ofl_osshstrtab == NULL) ||
4248 (*((char *)ofl->ofl_osshstrtab->os_outdata->d_buf) == '\0'));
4249 assert((ofl->ofl_osshstrtab == NULL) ||
4250 (*(((char *)ofl->ofl_osshstrtab->os_outdata->d_buf) +
4251 ofl->ofl_osshstrtab->os_outdata->d_size - 1) == '\0'));
4253 assert((ofl->ofl_osstrtab == NULL) ||
4254 (*((char *)ofl->ofl_osstrtab->os_outdata->d_buf) == '\0'));
4255 assert((ofl->ofl_osstrtab == NULL) ||
4256 (*(((char *)ofl->ofl_osstrtab->os_outdata->d_buf) +
4257 ofl->ofl_osstrtab->os_outdata->d_size - 1) == '\0'));
4259 assert((ofl->ofl_osdynstr == NULL) ||
4260 (*((char *)ofl->ofl_osdynstr->os_outdata->d_buf) == '\0'));
4261 assert((ofl->ofl_osdynstr == NULL) ||
4262 (*(((char *)ofl->ofl_osdynstr->os_outdata->d_buf) +
4263 ofl->ofl_osdynstr->os_outdata->d_size - DYNSTR_EXTRA_PAD - 1) ==
4269 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osshstrtab,
4270 ofl->ofl_shdrsttab));
4271 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osstrtab,
4272 ofl->ofl_strtab));
4273 DBG_CALL(Dbg_sec_strtab(ofl->ofl_lml, ofl->ofl_osdynstr,
4274 ofl->ofl_dynstrtab));
4281 if ((shscnndx = elf_ndxscn(ofl->ofl_osshstrtab->os_scn)) <
4283 ofl->ofl_nehdr->e_shstrndx =
4294 if ((scn = elf_getscn(ofl->ofl_elf, 0)) == NULL) {
4295 ld_eprintf(ofl, ERR_ELF, MSG_INTL(MSG_ELF_GETSCN),
4296 ofl->ofl_name);
4300 ld_eprintf(ofl, ERR_ELF, MSG_INTL(MSG_ELF_GETSHDR),
4301 ofl->ofl_name);
4304 ofl->ofl_nehdr->e_shstrndx = SHN_XINDEX;