Lines Matching defs:ofl
47 ld_find_got_ndx(Alist *alp, Gotref gref, Ofl_desc *ofl, Rel_desc *rdesc)
52 if ((gref == GOT_REF_TLSLD) && ofl->ofl_tlsldgotndx)
53 return (ofl->ofl_tlsldgotndx);
63 ld_calc_got_offset(Rel_desc *rdesc, Ofl_desc *ofl)
65 Os_desc *osp = ofl->ofl_osgot;
80 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, NULL);
107 ld_mach_eflags(Ehdr *ehdr, Ofl_desc *ofl)
109 ofl->ofl_dehdr->e_flags |= ehdr->e_flags;
113 ld_mach_make_dynamic(Ofl_desc *ofl, size_t *cnt)
115 if (!(ofl->ofl_flags & FLG_OF_RELOBJ)) {
119 if (ofl->ofl_pltcnt)
125 ld_mach_update_odynamic(Ofl_desc *ofl, Dyn **dyn)
127 if (((ofl->ofl_flags & FLG_OF_RELOBJ) == 0) && ofl->ofl_pltcnt) {
129 if (ofl->ofl_osgot)
130 (*dyn)->d_un.d_ptr = ofl->ofl_osgot->os_shdr->sh_addr;
138 ld_calc_plt_addr(Sym_desc *sdp, Ofl_desc *ofl)
142 value = (Xword)(ofl->ofl_osplt->os_shdr->sh_addr) +
163 plt_entry(Ofl_desc * ofl, Word rel_off, Sym_desc * sdp)
168 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0;
173 pltent = (uchar_t *)(ofl->ofl_osplt->os_outdata->d_buf) + plt_off;
174 gotent = (uchar_t *)(ofl->ofl_osgot->os_outdata->d_buf) + got_off;
180 *(Word *)gotent = ofl->ofl_osplt->os_shdr->sh_addr + plt_off +
186 if (!(ofl->ofl_flags & FLG_OF_SHAROBJ)) {
191 *(Word *)pltent = (Word)(ofl->ofl_osgot->os_shdr->sh_addr +
225 ld_perform_outreloc(Rel_desc * orsp, Ofl_desc * ofl, Boolean *remain_seen)
243 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, orsp));
252 ld_adj_movereloc(ofl, orsp);
262 if (ofl->ofl_parsyms &&
268 DBG_CALL(Dbg_move_outsctadj(ofl->ofl_lml, psym));
276 osp = ofl->ofl_osgot;
277 roffset = (Word)ld_calc_got_offset(orsp, ofl);
284 osp = ofl->ofl_osplt;
285 roffset = (Word) (ofl->ofl_osgot->os_shdr->sh_addr) +
288 plt_entry(ofl, osp->os_relosdesc->os_szoutrels, sdp);
295 osp = ofl->ofl_isbss->is_osdesc;
307 if (!(ofl->ofl_flags & FLG_OF_RELOBJ))
313 relosp = ofl->ofl_osrel;
336 ndx = ofl->ofl_parexpnndx;
354 if (ld_reloc_targval_set(ofl, orsp, addr, addend) == 0)
362 DBG_CALL(Dbg_reloc_out(ofl, ELF_DBG_LD, SHT_REL, &rea, relosp->os_name,
381 osp = ofl->ofl_osgot;
383 ld_reloc_remain_entry(orsp, osp, ofl, remain_seen);
441 tls_fixups(Ofl_desc *ofl, Rel_desc *arsp)
466 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
491 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
513 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
533 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
538 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
559 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
587 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
617 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
644 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADTLSINS),
710 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADTLSINS),
723 ld_do_activerelocs(Ofl_desc *ofl)
729 ofl_flag_t flags = ofl->ofl_flags;
731 if (aplist_nitems(ofl->ofl_actrels.rc_list) != 0)
732 DBG_CALL(Dbg_reloc_doact_title(ofl->ofl_lml));
737 REL_CACHE_TRAVERSE(&ofl->ofl_actrels, idx, rcbp, arsp) {
754 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, arsp));
781 if ((ret = tls_fixups(ofl, arsp)) == FIX_ERROR)
792 ld_adj_movereloc(ofl, arsp);
818 if (ld_reloc_targval_get(ofl, arsp, raddr,
846 if (ld_reloc_targval_set(ofl,
859 value -= ofl->ofl_tlsphdr->p_vaddr;
875 value = ld_calc_plt_addr(sdp, ofl);
884 !ld_reloc_set_aux_osdesc(ofl, arsp, ofl->ofl_osgot))
903 value = ld_calc_plt_addr(sdp, ofl);
929 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, NULL);
944 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml, ELF_DBG_LD_ACT,
951 if (ofl->ofl_flags1 & FLG_OF1_ENCDIFF)
959 value -= ofl->ofl_osgot->os_shdr->sh_addr;
963 value = (Xword)(ofl->ofl_osgot->os_shdr->sh_addr) -
976 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, NULL);
980 value += ofl->ofl_osgot->os_shdr->sh_addr;
988 GOT_REF_GENERIC, ofl, NULL);
1000 tlsstatsize = S_ROUND(ofl->ofl_tlsphdr->p_memsz,
1029 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_EMPTYSEC),
1043 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml, ELF_DBG_LD_ACT,
1048 if ((((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) >
1049 ofl->ofl_size) || (arsp->rel_roffset >
1054 if (((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) >
1055 ofl->ofl_size)
1060 ld_eprintf(ofl, class, MSG_INTL(MSG_REL_INVALOFFSET),
1065 (uintptr_t)ofl->ofl_nehdr));
1087 if (ld_reloc_targval_set(ofl, arsp, addr, addend) == 0)
1094 if (OFL_DO_RELOC(ofl)) {
1096 ifl_name, OFL_SWAP_RELOC_DATA(ofl, arsp),
1097 ofl->ofl_lml) == 0) {
1098 ofl->ofl_flags |= FLG_OF_FATAL;
1110 ld_add_outrel(Word flags, Rel_desc *rsp, Ofl_desc *ofl)
1121 if (OFL_IS_STATIC_EXEC(ofl))
1142 ofl->ofl_flags1 |= FLG_OF1_BSSOREL;
1144 ofl->ofl_flags1 |= FLG_OF1_TLSOREL;
1151 ofl->ofl_dynshdrcnt++;
1158 if ((orsp = ld_reloc_enter(ofl, &ofl->ofl_outrels, rsp, flags)) == NULL)
1162 ofl->ofl_relocgotsz += (Xword)sizeof (Rel);
1164 ofl->ofl_relocpltsz += (Xword)sizeof (Rel);
1166 ofl->ofl_relocbsssz += (Xword)sizeof (Rel);
1168 ofl->ofl_relocrelsz += (Xword)sizeof (Rel);
1173 ofl->ofl_relocrelcnt++;
1181 ofl->ofl_reloccnt++;
1187 ofl->ofl_flags |= FLG_OF_BLDGOT;
1193 ofl->ofl_dtflags_1 |= DF_1_DISPRELPND;
1195 if (ofl->ofl_flags & FLG_OF_VERBOSE)
1196 ld_disp_errmsg(MSG_INTL(MSG_REL_DISPREL4), orsp, ofl);
1198 DBG_CALL(Dbg_reloc_ors_entry(ofl->ofl_lml, ELF_DBG_LD, SHT_REL,
1207 ld_reloc_local(Rel_desc * rsp, Ofl_desc * ofl)
1209 ofl_flag_t flags = ofl->ofl_flags;
1230 if (ld_add_outrel(NULL, rsp, ofl) == S_ERROR)
1264 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_EXTERNSYM),
1274 return (ld_add_actrel(NULL, rsp, ofl));
1278 ld_reloc_TLS(Boolean local, Rel_desc * rsp, Ofl_desc * ofl)
1282 ofl_flag_t flags = ofl->ofl_flags;
1293 ofl->ofl_dtflags |= DF_STATIC_TLS;
1300 GOT_REF_TLSIE, ofl, NULL)) == NULL) {
1302 if (ld_assign_got_TLS(local, rsp, ofl, sdp,
1313 rsp, ofl) == S_ERROR)
1323 return (ld_add_outrel(NULL, rsp, ofl));
1332 rsp, ofl));
1339 return (ld_add_actrel(FLG_REL_STLS, rsp, ofl));
1342 rsp, ofl));
1351 GOT_REF_TLSLD, ofl, NULL)) == NULL)) {
1353 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSLD,
1358 GOT_REF_TLSGD, ofl, NULL)) == NULL)) {
1360 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSGD,
1375 ofl, MSG_STR_TLSREL)) == (Sym_desc *)S_ERROR)
1381 if (ld_reloc_plt(rsp, ofl) == S_ERROR)
1390 return (ld_add_actrel(FLG_REL_MTLS, rsp, ofl));
1392 return (ld_add_actrel(FLG_REL_DTLS, rsp, ofl));
1397 ld_assign_got_ndx(Alist **alpp, Gotndx *pgnp, Gotref gref, Ofl_desc *ofl,
1412 gn.gn_gotndx = ofl->ofl_gotcnt;
1415 ofl->ofl_gotcnt += gotents;
1418 if (ofl->ofl_tlsldgotndx == NULL) {
1422 ofl->ofl_tlsldgotndx = gnp;
1441 ld_assign_plt_ndx(Sym_desc * sdp, Ofl_desc *ofl)
1443 sdp->sd_aux->sa_PLTndx = 1 + ofl->ofl_pltcnt++;
1444 sdp->sd_aux->sa_PLTGOTndx = ofl->ofl_gotcnt++;
1445 ofl->ofl_flags |= FLG_OF_BLDGOT;
1452 ld_fillin_gotplt(Ofl_desc *ofl)
1454 ofl_flag_t flags = ofl->ofl_flags;
1455 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0;
1457 if (ofl->ofl_osgot) {
1461 SYM_NOHASH, NULL, ofl)) != NULL) {
1464 genptr = ((uchar_t *)ofl->ofl_osgot->os_outdata->d_buf +
1487 if ((flags & FLG_OF_DYNAMIC) && ofl->ofl_osplt) {
1490 pltent = (uchar_t *)ofl->ofl_osplt->os_outdata->d_buf;
1496 *(Word *)pltent = (Word)(ofl->ofl_osgot->os_shdr->
1508 *(Word *)pltent = (Word)(ofl->ofl_osgot->os_shdr->