Lines Matching refs:ofl

91 is_disp_copied(Ofl_desc *ofl, Copy_rel *crp)
106 (ofl->ofl_flags & FLG_OF_VERBOSE))
107 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_DISPREL2),
164 ld_eprintf(ofl, ERR_WARNING,
194 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_DISPREL1),
234 Ofl_desc *ofl)
285 ((ofl->ofl_flags & (FLG_OF_AUTOLCL | FLG_OF_AUTOELM)) &&
336 ld_disp_errmsg(const char *msg, Rel_desc *rsp, Ofl_desc *ofl)
343 if ((sdp = disp_scansyms(ifl, rsp, 0, 1, ofl)) != 0)
348 ld_eprintf(ofl, ERR_WARNING, msg,
378 disp_inspect(Ofl_desc *ofl, Rel_desc *rld, Boolean rlocal)
458 (void) disp_scansyms(ifl, rld, rlocal, 0, ofl);
467 * ofl - Output file descriptor
469 * One of &ofl->ofl_actrels or &ofl->ofl_outrels.
475 ld_add_rel_cache(Ofl_desc *ofl, Rel_cache *rcp)
510 if ((alloc_cnt == 0) && (ofl->ofl_relocincnt > REL_CACHEBUF_ALLOC)) {
511 Boolean is_rel = (ofl->ofl_flags & FLG_OF_RELOBJ) != 0;
513 if (((rcp == &ofl->ofl_actrels) && !is_rel) ||
514 ((rcp == &ofl->ofl_outrels) && is_rel))
515 nelts = ofl->ofl_relocincnt;
540 * ofl - Output file descriptor
549 ld_add_rel_aux(Ofl_desc *ofl, Rel_desc *rdesc)
558 if (ofl->ofl_relaux) {
559 racp = ofl->ofl_relaux->apl_data[
560 ofl->ofl_relaux->apl_nitems - 1];
574 (aplist_append(&ofl->ofl_relaux, racp, AL_CNT_OFL_RELS) ==
594 * ofl - Output file descriptor
604 ld_reloc_enter(Ofl_desc *ofl, Rel_cache *rcp, Rel_desc *rdesc, Word flags)
615 rcbp = ld_add_rel_cache(ofl, rcp);
626 if (!ld_add_rel_aux(ofl, arsp))
727 if (!ld_add_rel_aux(ofl, rdesc)) \
734 ld_reloc_set_aux_osdesc(Ofl_desc *ofl, Rel_desc *rdesc, Os_desc *osp)
742 ld_reloc_set_aux_usym(Ofl_desc *ofl, Rel_desc *rdesc, Sym_desc *sdp)
795 ld_add_actrel(Word flags, Rel_desc *rsp, Ofl_desc *ofl)
799 if ((arsp = ld_reloc_enter(ofl, &ofl->ofl_actrels, rsp, flags)) == NULL)
810 ofl->ofl_flags |= FLG_OF_BLDGOT;
816 ofl->ofl_dtflags_1 |= DF_1_DISPRELDNE;
818 if (ofl->ofl_flags & FLG_OF_VERBOSE)
819 ld_disp_errmsg(MSG_INTL(MSG_REL_DISPREL3), arsp, ofl);
822 DBG_CALL(Dbg_reloc_ars_entry(ofl->ofl_lml, ELF_DBG_LD,
848 ld_reloc_GOT_relative(Boolean local, Rel_desc *rsp, Ofl_desc *ofl)
851 ofl_flag_t flags = ofl->ofl_flags;
860 GOT_REF_GENERIC, ofl, rsp)) == 0) {
864 GOT_REF_GENERIC, ofl, rsp, sdp) == S_ERROR)
894 rsp, ofl) == S_ERROR)
901 rsp, ofl) == S_ERROR)
907 ofl) == S_ERROR)
913 rsp, ofl) == S_ERROR)
919 GOT_REF_GENERIC, ofl, rsp, sdp) == S_ERROR)
926 return (ld_add_actrel(NULL, rsp, ofl));
933 ld_reloc_plt(Rel_desc *rsp, Ofl_desc *ofl)
943 if ((ofl->ofl_flags & FLG_OF_EXEC) &&
946 return (ld_add_actrel(FLG_REL_TLSFIX, rsp, ofl));
954 if ((ofl->ofl_flags & FLG_OF_EXEC) &&
957 return (ld_add_actrel(FLG_REL_TLSFIX, rsp, ofl));
971 (*ld_targ.t_mr.mr_assign_plt_ndx)(sdp, ofl);
985 if ((*ld_targ.t_mr.mr_add_outrel)(FLG_REL_PLT, rsp, ofl) ==
994 if ((ofl->ofl_flags & FLG_OF_SHAROBJ) &&
999 if ((*ld_targ.t_mr.mr_add_outrel)(FLG_REL_ADVAL, rsp, ofl) ==
1005 return (ld_add_actrel(NULL, rsp, ofl));
1028 reloc_exec(Rel_desc *rsp, Ofl_desc *ofl)
1039 return (ld_reloc_plt(rsp, ofl));
1045 if ((ofl->ofl_flags1 & FLG_OF1_ABSEXEC) == 0)
1046 return ((*ld_targ.t_mr.mr_add_outrel)(NULL, rsp, ofl));
1053 return (ld_add_actrel(NULL, rsp, ofl));
1067 return (ld_add_actrel(NULL, rsp, ofl));
1069 return ((*ld_targ.t_mr.mr_add_outrel)(NULL, rsp, ofl));
1081 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_UNEXPSYM),
1086 return ((*ld_targ.t_mr.mr_add_outrel)(NULL, rsp, ofl));
1136 !ld_reloc_set_aux_usym(ofl, rsp, _sdp))
1156 DBG_CALL(Dbg_syms_copy_reloc(ofl, sdp, 0));
1252 if (alist_append(&ofl->ofl_copyrels, &cr, sizeof (Copy_rel),
1257 if ((*ld_targ.t_mr.mr_add_outrel)(FLG_REL_BSS, rsp, ofl) ==
1274 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_COPY),
1279 DBG_CALL(Dbg_syms_copy_reloc(ofl, _sdp,
1282 return (ld_add_actrel(NULL, rsp, ofl));
1291 reloc_generic(Rel_desc *rsp, Ofl_desc *ofl)
1296 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_UNEXPREL),
1304 if (ofl->ofl_flags & FLG_OF_SHAROBJ)
1305 return ((*ld_targ.t_mr.mr_add_outrel)(NULL, rsp, ofl));
1310 return (ld_add_actrel(NULL, rsp, ofl));
1319 reloc_relobj(Boolean local, Rel_desc *rsp, Ofl_desc *ofl)
1337 return (ld_add_actrel(NULL, rsp, ofl));
1344 if (local && (((ofl->ofl_flags & FLG_OF_REDLSYM) &&
1347 (ofl->ofl_flags & FLG_OF_PROCRED)))) {
1355 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_PICREDLOC),
1385 if (ld_add_actrel(NULL, rsp, ofl) == S_ERROR)
1388 return ((*ld_targ.t_mr.mr_add_outrel)(oflags, rsp, ofl));
1397 reloc_TLS(Boolean local, Rel_desc *rsp, Ofl_desc *ofl)
1400 ofl_flag_t flags = ofl->ofl_flags;
1410 if (OFL_IS_STATIC_EXEC(ofl)) {
1411 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_TLSSTAT),
1422 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_TLSBADSYM),
1436 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_TLSBND),
1457 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_TLSLE),
1464 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_TLSIE),
1470 return ((*ld_targ.t_mr.mr_reloc_TLS)(local, rsp, ofl));
1474 ld_process_sym_reloc(Ofl_desc *ofl, Rel_desc *reld, Rel *reloc, Is_desc *isp,
1478 ofl_flag_t flags = ofl->ofl_flags;
1484 DBG_CALL(Dbg_reloc_in(ofl->ofl_lml, ELF_DBG_LD, ld_targ.t_m.m_mach,
1503 if (!ld_reloc_set_aux_usym(ofl, reld, sdp))
1523 !ld_reloc_set_aux_usym(ofl, reld, _sdp))
1594 if ((ofl->ofl_flags & FLG_OF_SHAROBJ) &&
1598 if (disp_inspect(ofl, reld, local) == S_ERROR)
1611 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADGOTBASED),
1629 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADTLS),
1642 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NOREG));
1645 return ((*ld_targ.t_mr.mr_reloc_register)(reld, isp, ofl));
1649 return (reloc_relobj(local, reld, ofl));
1652 return (reloc_TLS(local, reld, ofl));
1659 return ((*ld_targ.t_mr.mr_reloc_GOTOP)(local, reld, ofl));
1663 return (ld_reloc_GOT_relative(local, reld, ofl));
1666 return ((*ld_targ.t_mr.mr_reloc_local)(reld, ofl));
1671 return (ld_reloc_plt(reld, ofl));
1676 return ((*ld_targ.t_mr.mr_add_outrel)(NULL, reld, ofl));
1679 return (reloc_exec(reld, ofl));
1684 return (reloc_generic(reld, ofl));
1701 * ofl->ofl_sr_cache as an optimization to speed following calls
1738 sloppy_comdat_reloc(Ofl_desc *ofl, Rel_desc *reld, Sym_desc *sdp,
1775 if (sdp == ofl->ofl_sr_cache.sr_osdp) {
1776 *reject = ofl->ofl_sr_cache.sr_rej;
1777 return (ofl->ofl_sr_cache.sr_rsdp);
1780 ofl->ofl_sr_cache.sr_osdp = sdp;
1809 *reject = ofl->ofl_sr_cache.sr_rej = RLXREL_REJ_SECTION;
1810 return (ofl->ofl_sr_cache.sr_rsdp = NULL);
1847 if (ofl->ofl_flags & FLG_OF_VERBOSE) {
1849 ld_eprintf(ofl, ERR_WARNING,
1860 ld_eprintf(ofl, ERR_WARNING,
1871 DBG_CALL(Dbg_reloc_sloppycomdat(ofl->ofl_lml, rep_sdp));
1872 *reject = ofl->ofl_sr_cache.sr_rej = RLXREL_REJ_NONE;
1873 return (ofl->ofl_sr_cache.sr_rsdp = rep_sdp);
1877 *reject = ofl->ofl_sr_cache.sr_rej = RLXREL_REJ_SYMBOL;
1878 return (ofl->ofl_sr_cache.sr_rsdp = NULL);
1885 process_reld(Ofl_desc *ofl, Is_desc *isp, Rel_desc *reld, Word rsndx,
1897 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_INVALRELT),
1903 ofl->ofl_entrelscnt++;
1912 DBG_CALL(Dbg_reloc_in(ofl->ofl_lml, ELF_DBG_LD,
1917 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NOREG));
1920 return ((*ld_targ.t_mr.mr_reloc_register)(reld, isp, ofl));
1948 DBG_CALL(Dbg_reloc_in(ofl->ofl_lml, ELF_DBG_LD,
1952 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_NULL),
1957 if (((ofl->ofl_flags & FLG_OF_RELOBJ) == 0) &&
1959 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NOTSUP),
1971 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NOSYMBOL),
1997 if ((ofl->ofl_flags1 & FLG_OF1_RLXREL) &&
2000 ((nsdp = sloppy_comdat_reloc(ofl, reld,
2020 if (((ofl->ofl_flags & FLG_OF_VERBOSE) != 0) ||
2023 ld_eprintf(ofl, ERR_WARNING,
2037 nsdp = ld_sym_find(sdp->sd_name, SYM_NOHASH, NULL, ofl);
2040 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_SYMDISC),
2062 ld_sym_adjust_vis(sdp, ofl);
2078 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_RELINVSEC),
2094 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_UNKNWSYM),
2110 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_UNSUPSIZE),
2120 return (ld_process_sym_reloc(ofl, reld, reloc, isp, isp->is_name,
2125 reloc_section(Ofl_desc *ofl, Is_desc *isect, Is_desc *rsect, Os_desc *osect)
2159 if ((ofl->ofl_flags & FLG_OF_RELOBJ) ||
2166 DBG_CALL(Dbg_reloc_proc(ofl->ofl_lml, osect, isect, rsect));
2193 if (process_reld(ofl, rsect, &reld, rsndx, reloc) == S_ERROR)
2200 reloc_segments(int wr_flag, Ofl_desc *ofl)
2206 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) {
2235 if (reloc_section(ofl, isp, risp, osp) ==
2247 ofl->ofl_flags |= FLG_OF_TEXTREL;
2248 ofl->ofl_dtflags |= DF_TEXTREL;
2295 process_movereloc(Ofl_desc *ofl, Is_desc *rsect)
2354 rel_aux.ra_osdesc = ofl->ofl_isparexpn->is_osdesc;
2355 reld.rel_isdesc = ofl->ofl_isparexpn;
2366 if (process_reld(ofl,
2375 rel_aux.ra_osdesc = ofl->ofl_osmove;
2376 reld.rel_isdesc = ld_os_first_isdesc(ofl->ofl_osmove);
2378 if (process_reld(ofl,
2393 reloc_movesections(Ofl_desc *ofl)
2402 for (APLIST_TRAVERSE(ofl->ofl_ismoverel, idx, risp)) {
2403 if (process_movereloc(ofl, risp) == S_ERROR)
2418 ld_reloc_init(Ofl_desc *ofl)
2424 DBG_CALL(Dbg_basic_collect(ofl->ofl_lml));
2431 if (ld_sym_spec(ofl) == S_ERROR)
2434 ofl->ofl_gotcnt = ld_targ.t_m.m_got_xnumber;
2446 if (reloc_segments(0, ofl) == S_ERROR)
2449 if (reloc_segments(PF_W, ofl) == S_ERROR)
2456 for (APLIST_TRAVERSE(ofl->ofl_extrarels, idx, isp)) {
2457 if (reloc_section(ofl, NULL, isp, NULL) == S_ERROR)
2465 if (reloc_movesections(ofl) == S_ERROR)
2472 if (ofl->ofl_copyrels) {
2475 for (ALIST_TRAVERSE(ofl->ofl_copyrels, idx, crp)) {
2482 is_disp_copied(ofl, crp);
2491 if (((ofl->ofl_flags & FLG_OF_RELOBJ) == 0) &&
2492 ((ofl->ofl_flags & FLG_OF_BLDGOT) ||
2494 SYM_NOHASH, NULL, ofl)) != NULL) ||
2496 SYM_NOHASH, NULL, ofl)) != NULL)) &&
2498 if (ld_make_got(ofl) == S_ERROR)
2503 ((*ld_targ.t_mr.mr_allocate_got)(ofl) == S_ERROR))
2560 do_sorted_outrelocs(Ofl_desc *ofl)
2572 ofl->ofl_reloccnt))) == NULL)
2587 REL_CACHE_TRAVERSE(&ofl->ofl_outrels, idx, rcbp, orsp) {
2589 DBG_CALL(Dbg_reloc_dooutrel(ofl->ofl_lml,
2600 (orsp, ofl, &remain_seen) == S_ERROR)
2619 (*ld_targ.t_mr.mr_calc_got_offset)(orsp, ofl);
2635 qsort(sorted_list, (size_t)ofl->ofl_reloccnt, sizeof (Reloc_list),
2642 for (index = 0; index < ofl->ofl_reloccnt; index++) {
2644 (sorted_list[index].rl_rsp, ofl, &remain_seen) == S_ERROR)
2649 if (remain_seen && OFL_GUIDANCE(ofl, FLG_OFG_NO_TEXT))
2650 ld_eprintf(ofl, ERR_GUIDANCE, MSG_INTL(MSG_GUIDE_TEXT));
2660 ld_reloc_process(Ofl_desc *ofl)
2665 ofl_flag_t flags = ofl->ofl_flags;
2668 DBG_CALL(Dbg_basic_relocate(ofl->ofl_lml));
2674 if (OFL_ALLOW_DYNSYM(ofl))
2676 ndx = (Word)elf_ndxscn(ofl->ofl_osdynsym->os_scn);
2679 ndx = (Word)elf_ndxscn(ofl->ofl_ossymtab->os_scn);
2685 ofl->ofl_relocpltsz = 0;
2686 ofl->ofl_relocgotsz = 0;
2687 ofl->ofl_relocbsssz = 0;
2693 if (do_sorted_outrelocs(ofl) == S_ERROR)
2696 if ((*ld_targ.t_mr.mr_do_activerelocs)(ofl) == S_ERROR)
2709 for (APLIST_TRAVERSE(ofl->ofl_segs, idx1, sgp)) {
2728 if ((osp = ofl->ofl_osrel) != NULL) {
2739 if ((osp = ofl->ofl_osrelhead) != NULL) {
2744 if (((osp = ofl->ofl_osplt) != NULL) && osp->os_relosdesc) {
2760 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_REMAIN_3));
2769 if ((*ld_targ.t_mr.mr_fillin_gotplt)(ofl) == S_ERROR)
2777 if ((osp = ofl->ofl_osgot) != NULL)
2778 DBG_CALL(Dbg_got_display(ofl, osp->os_shdr->sh_addr, 1,
2803 ld_reloc_remain_entry(Rel_desc *orsp, Os_desc *osp, Ofl_desc *ofl,
2810 if (ofl->ofl_flags1 & FLG_OF1_TEXTOFF)
2826 if (((ofl->ofl_flags & FLG_OF_PURETXT) == 0) &&
2836 const char *str1 = (ofl->ofl_flags & FLG_OF_PURETXT) ?
2839 ld_eprintf(ofl, ERR_NONE, MSG_INTL(MSG_REL_REMAIN_FMT_1), str1,
2846 ld_eprintf(ofl, ERR_NONE, MSG_INTL(MSG_REL_REMAIN_2),
2855 ld_assign_got_TLS(Boolean local, Rel_desc *rsp, Ofl_desc *ofl, Sym_desc *sdp,
2861 gref, ofl, rsp, sdp) == S_ERROR)
2869 if ((*ld_targ.t_mr.mr_add_outrel)(rflags, rsp, ofl) == S_ERROR)
2879 if (ld_add_actrel(rflags, rsp, ofl) == S_ERROR)
2888 if (ld_add_actrel(rflags, rsp, ofl) == S_ERROR)
2891 if ((*ld_targ.t_mr.mr_add_outrel)(rflags, rsp, ofl) ==
2927 ld_adj_movereloc(Ofl_desc *ofl, Rel_desc *arsp)
2939 DBG_CALL(Dbg_move_adjmovereloc(ofl->ofl_lml, arsp->rel_roffset,
2948 ofl->ofl_isparexpn->is_osdesc->os_shdr->sh_addr;
2949 DBG_CALL(Dbg_move_adjexpandreloc(ofl->ofl_lml,
2986 ld_swap_reloc_data(Ofl_desc *ofl, Rel_desc *rsp)
2996 if ((ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0) {
3027 * ofl - Output file descriptor
3037 ld_reloc_targval_get(Ofl_desc *ofl, Rel_desc *rsp, uchar_t *data, Xword *value)
3053 if (OFL_SWAP_RELOC_DATA(ofl, rsp)) {
3066 if (OFL_SWAP_RELOC_DATA(ofl, rsp)) {
3077 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_UNSUPSZ),
3092 * ofl - Output file descriptor
3102 ld_reloc_targval_set(Ofl_desc *ofl, Rel_desc *rsp, uchar_t *data, Xword value)
3118 if (OFL_SWAP_RELOC_DATA(ofl, rsp)) {
3130 if (OFL_SWAP_RELOC_DATA(ofl, rsp)) {
3140 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_UNSUPSZ),