Lines Matching refs:ofl
47 ld_find_got_ndx(Alist *alp, Gotref gref, Ofl_desc *ofl, Rel_desc *rdesc) in ld_find_got_ndx() argument
52 if ((gref == GOT_REF_TLSLD) && ofl->ofl_tlsldgotndx) in ld_find_got_ndx()
53 return (ofl->ofl_tlsldgotndx); in ld_find_got_ndx()
63 ld_calc_got_offset(Rel_desc *rdesc, Ofl_desc *ofl) in ld_calc_got_offset() argument
65 Os_desc *osp = ofl->ofl_osgot; in ld_calc_got_offset()
80 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, NULL); in ld_calc_got_offset()
107 ld_mach_eflags(Ehdr *ehdr, Ofl_desc *ofl) in ld_mach_eflags() argument
109 ofl->ofl_dehdr->e_flags |= ehdr->e_flags; in ld_mach_eflags()
113 ld_mach_make_dynamic(Ofl_desc *ofl, size_t *cnt) in ld_mach_make_dynamic() argument
115 if (!(ofl->ofl_flags & FLG_OF_RELOBJ)) { in ld_mach_make_dynamic()
119 if (ofl->ofl_pltcnt) in ld_mach_make_dynamic()
125 ld_mach_update_odynamic(Ofl_desc *ofl, Dyn **dyn) in ld_mach_update_odynamic() argument
127 if (((ofl->ofl_flags & FLG_OF_RELOBJ) == 0) && ofl->ofl_pltcnt) { in ld_mach_update_odynamic()
129 if (ofl->ofl_osgot) in ld_mach_update_odynamic()
130 (*dyn)->d_un.d_ptr = ofl->ofl_osgot->os_shdr->sh_addr; in ld_mach_update_odynamic()
138 ld_calc_plt_addr(Sym_desc *sdp, Ofl_desc *ofl) in ld_calc_plt_addr() argument
142 value = (Xword)(ofl->ofl_osplt->os_shdr->sh_addr) + in ld_calc_plt_addr()
163 plt_entry(Ofl_desc * ofl, Word rel_off, Sym_desc * sdp) in plt_entry() argument
168 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0; in plt_entry()
173 pltent = (uchar_t *)(ofl->ofl_osplt->os_outdata->d_buf) + plt_off; in plt_entry()
174 gotent = (uchar_t *)(ofl->ofl_osgot->os_outdata->d_buf) + got_off; in plt_entry()
180 *(Word *)gotent = ofl->ofl_osplt->os_shdr->sh_addr + plt_off + in plt_entry()
186 if (!(ofl->ofl_flags & FLG_OF_SHAROBJ)) { in plt_entry()
191 *(Word *)pltent = (Word)(ofl->ofl_osgot->os_shdr->sh_addr + in plt_entry()
225 ld_perform_outreloc(Rel_desc * orsp, Ofl_desc * ofl, Boolean *remain_seen) in ld_perform_outreloc() argument
243 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, orsp)); in ld_perform_outreloc()
252 ld_adj_movereloc(ofl, orsp); in ld_perform_outreloc()
262 if (ofl->ofl_parsyms && in ld_perform_outreloc()
268 DBG_CALL(Dbg_move_outsctadj(ofl->ofl_lml, psym)); in ld_perform_outreloc()
276 osp = ofl->ofl_osgot; in ld_perform_outreloc()
277 roffset = (Word)ld_calc_got_offset(orsp, ofl); in ld_perform_outreloc()
284 osp = ofl->ofl_osplt; in ld_perform_outreloc()
285 roffset = (Word) (ofl->ofl_osgot->os_shdr->sh_addr) + in ld_perform_outreloc()
288 plt_entry(ofl, osp->os_relosdesc->os_szoutrels, sdp); in ld_perform_outreloc()
295 osp = ofl->ofl_isbss->is_osdesc; in ld_perform_outreloc()
307 if (!(ofl->ofl_flags & FLG_OF_RELOBJ)) in ld_perform_outreloc()
313 relosp = ofl->ofl_osrel; in ld_perform_outreloc()
336 ndx = ofl->ofl_parexpnndx; in ld_perform_outreloc()
354 if (ld_reloc_targval_set(ofl, orsp, addr, addend) == 0) in ld_perform_outreloc()
364 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NOSYMBOL), in ld_perform_outreloc()
365 conv_reloc_type(ofl->ofl_nehdr->e_machine, in ld_perform_outreloc()
375 DBG_CALL(Dbg_reloc_out(ofl, ELF_DBG_LD, SHT_REL, &rea, relosp->os_name, in ld_perform_outreloc()
396 osp = ofl->ofl_osgot; in ld_perform_outreloc()
398 ld_reloc_remain_entry(orsp, osp, ofl, remain_seen); in ld_perform_outreloc()
467 tls_fixups(Ofl_desc *ofl, Rel_desc *arsp) in tls_fixups() argument
492 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
517 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
539 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
560 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
565 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
579 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
616 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
646 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
673 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADTLSINS), in tls_fixups()
739 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADTLSINS), in tls_fixups()
752 ld_do_activerelocs(Ofl_desc *ofl) in ld_do_activerelocs() argument
758 ofl_flag_t flags = ofl->ofl_flags; in ld_do_activerelocs()
760 if (aplist_nitems(ofl->ofl_actrels.rc_list) != 0) in ld_do_activerelocs()
761 DBG_CALL(Dbg_reloc_doact_title(ofl->ofl_lml)); in ld_do_activerelocs()
766 REL_CACHE_TRAVERSE(&ofl->ofl_actrels, idx, rcbp, arsp) { in ld_do_activerelocs()
783 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, arsp)); in ld_do_activerelocs()
810 if ((ret = tls_fixups(ofl, arsp)) == FIX_ERROR) in ld_do_activerelocs()
821 ld_adj_movereloc(ofl, arsp); in ld_do_activerelocs()
847 if (ld_reloc_targval_get(ofl, arsp, raddr, in ld_do_activerelocs()
875 if (ld_reloc_targval_set(ofl, in ld_do_activerelocs()
888 value -= ofl->ofl_tlsphdr->p_vaddr; in ld_do_activerelocs()
904 value = ld_calc_plt_addr(sdp, ofl); in ld_do_activerelocs()
913 !ld_reloc_set_aux_osdesc(ofl, arsp, ofl->ofl_osgot)) in ld_do_activerelocs()
932 value = ld_calc_plt_addr(sdp, ofl); in ld_do_activerelocs()
958 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, NULL); in ld_do_activerelocs()
973 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml, ELF_DBG_LD_ACT, in ld_do_activerelocs()
980 if (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) in ld_do_activerelocs()
988 value -= ofl->ofl_osgot->os_shdr->sh_addr; in ld_do_activerelocs()
992 value = (Xword)(ofl->ofl_osgot->os_shdr->sh_addr) - in ld_do_activerelocs()
1005 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, NULL); in ld_do_activerelocs()
1009 value += ofl->ofl_osgot->os_shdr->sh_addr; in ld_do_activerelocs()
1017 GOT_REF_GENERIC, ofl, NULL); in ld_do_activerelocs()
1029 tlsstatsize = S_ROUND(ofl->ofl_tlsphdr->p_memsz, in ld_do_activerelocs()
1058 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_EMPTYSEC), in ld_do_activerelocs()
1072 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml, ELF_DBG_LD_ACT, in ld_do_activerelocs()
1077 if ((((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) > in ld_do_activerelocs()
1078 ofl->ofl_size) || (arsp->rel_roffset > in ld_do_activerelocs()
1083 if (((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) > in ld_do_activerelocs()
1084 ofl->ofl_size) in ld_do_activerelocs()
1089 ld_eprintf(ofl, class, MSG_INTL(MSG_REL_INVALOFFSET), in ld_do_activerelocs()
1094 (uintptr_t)ofl->ofl_nehdr)); in ld_do_activerelocs()
1116 if (ld_reloc_targval_set(ofl, arsp, addr, addend) == 0) in ld_do_activerelocs()
1123 if (OFL_DO_RELOC(ofl)) { in ld_do_activerelocs()
1125 ifl_name, OFL_SWAP_RELOC_DATA(ofl, arsp), in ld_do_activerelocs()
1126 ofl->ofl_lml) == 0) { in ld_do_activerelocs()
1127 ofl->ofl_flags |= FLG_OF_FATAL; in ld_do_activerelocs()
1139 ld_add_outrel(Word flags, Rel_desc *rsp, Ofl_desc *ofl) in ld_add_outrel() argument
1150 if (OFL_IS_STATIC_EXEC(ofl)) in ld_add_outrel()
1162 if (ld_sym_reducable(ofl, sdp)) in ld_add_outrel()
1184 ofl->ofl_flags1 |= FLG_OF1_BSSOREL; in ld_add_outrel()
1186 ofl->ofl_flags1 |= FLG_OF1_TLSOREL; in ld_add_outrel()
1193 ofl->ofl_dynshdrcnt++; in ld_add_outrel()
1200 if ((orsp = ld_reloc_enter(ofl, &ofl->ofl_outrels, rsp, flags)) == NULL) in ld_add_outrel()
1204 ofl->ofl_relocgotsz += (Xword)sizeof (Rel); in ld_add_outrel()
1206 ofl->ofl_relocpltsz += (Xword)sizeof (Rel); in ld_add_outrel()
1208 ofl->ofl_relocbsssz += (Xword)sizeof (Rel); in ld_add_outrel()
1210 ofl->ofl_relocrelsz += (Xword)sizeof (Rel); in ld_add_outrel()
1215 ofl->ofl_relocrelcnt++; in ld_add_outrel()
1223 ofl->ofl_reloccnt++; in ld_add_outrel()
1229 ofl->ofl_flags |= FLG_OF_BLDGOT; in ld_add_outrel()
1235 ofl->ofl_dtflags_1 |= DF_1_DISPRELPND; in ld_add_outrel()
1237 if (ofl->ofl_flags & FLG_OF_VERBOSE) in ld_add_outrel()
1238 ld_disp_errmsg(MSG_INTL(MSG_REL_DISPREL4), orsp, ofl); in ld_add_outrel()
1240 DBG_CALL(Dbg_reloc_ors_entry(ofl->ofl_lml, ELF_DBG_LD, SHT_REL, in ld_add_outrel()
1249 ld_reloc_local(Rel_desc * rsp, Ofl_desc * ofl) in ld_reloc_local() argument
1251 ofl_flag_t flags = ofl->ofl_flags; in ld_reloc_local()
1272 if (ld_add_outrel(0, rsp, ofl) == S_ERROR) in ld_reloc_local()
1306 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_EXTERNSYM), in ld_reloc_local()
1316 return (ld_add_actrel(0, rsp, ofl)); in ld_reloc_local()
1320 ld_reloc_TLS(Boolean local, Rel_desc * rsp, Ofl_desc * ofl) in ld_reloc_TLS() argument
1324 ofl_flag_t flags = ofl->ofl_flags; in ld_reloc_TLS()
1335 ofl->ofl_dtflags |= DF_STATIC_TLS; in ld_reloc_TLS()
1342 GOT_REF_TLSIE, ofl, NULL)) == NULL) { in ld_reloc_TLS()
1344 if (ld_assign_got_TLS(local, rsp, ofl, sdp, in ld_reloc_TLS()
1355 rsp, ofl) == S_ERROR) in ld_reloc_TLS()
1365 return (ld_add_outrel(0, rsp, ofl)); in ld_reloc_TLS()
1374 rsp, ofl)); in ld_reloc_TLS()
1381 return (ld_add_actrel(FLG_REL_STLS, rsp, ofl)); in ld_reloc_TLS()
1384 rsp, ofl)); in ld_reloc_TLS()
1393 GOT_REF_TLSLD, ofl, NULL)) == NULL)) { in ld_reloc_TLS()
1395 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSLD, in ld_reloc_TLS()
1400 GOT_REF_TLSGD, ofl, NULL)) == NULL)) { in ld_reloc_TLS()
1402 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSGD, in ld_reloc_TLS()
1417 ofl, MSG_STR_TLSREL)) == (Sym_desc *)S_ERROR) in ld_reloc_TLS()
1423 if (ld_reloc_plt(rsp, ofl) == S_ERROR) in ld_reloc_TLS()
1432 return (ld_add_actrel(FLG_REL_MTLS, rsp, ofl)); in ld_reloc_TLS()
1434 return (ld_add_actrel(FLG_REL_DTLS, rsp, ofl)); in ld_reloc_TLS()
1439 ld_assign_got_ndx(Alist **alpp, Gotndx *pgnp, Gotref gref, Ofl_desc *ofl, in ld_assign_got_ndx() argument
1454 gn.gn_gotndx = ofl->ofl_gotcnt; in ld_assign_got_ndx()
1457 ofl->ofl_gotcnt += gotents; in ld_assign_got_ndx()
1460 if (ofl->ofl_tlsldgotndx == NULL) { in ld_assign_got_ndx()
1464 ofl->ofl_tlsldgotndx = gnp; in ld_assign_got_ndx()
1483 ld_assign_plt_ndx(Sym_desc * sdp, Ofl_desc *ofl) in ld_assign_plt_ndx() argument
1485 sdp->sd_aux->sa_PLTndx = 1 + ofl->ofl_pltcnt++; in ld_assign_plt_ndx()
1486 sdp->sd_aux->sa_PLTGOTndx = ofl->ofl_gotcnt++; in ld_assign_plt_ndx()
1487 ofl->ofl_flags |= FLG_OF_BLDGOT; in ld_assign_plt_ndx()
1494 ld_fillin_gotplt(Ofl_desc *ofl) in ld_fillin_gotplt() argument
1496 ofl_flag_t flags = ofl->ofl_flags; in ld_fillin_gotplt()
1497 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0; in ld_fillin_gotplt()
1499 if (ofl->ofl_osgot) { in ld_fillin_gotplt()
1503 SYM_NOHASH, NULL, ofl)) != NULL) { in ld_fillin_gotplt()
1506 genptr = ((uchar_t *)ofl->ofl_osgot->os_outdata->d_buf + in ld_fillin_gotplt()
1529 if ((flags & FLG_OF_DYNAMIC) && ofl->ofl_osplt) { in ld_fillin_gotplt()
1532 pltent = (uchar_t *)ofl->ofl_osplt->os_outdata->d_buf; in ld_fillin_gotplt()
1538 *(Word *)pltent = (Word)(ofl->ofl_osgot->os_shdr-> in ld_fillin_gotplt()
1550 *(Word *)pltent = (Word)(ofl->ofl_osgot->os_shdr-> in ld_fillin_gotplt()