Lines Matching defs:ofl

54 ld_find_got_ndx(Alist *alp, Gotref gref, Ofl_desc *ofl, Rel_desc *rdesc)
61 if ((gref == GOT_REF_TLSLD) && ofl->ofl_tlsldgotndx)
62 return (ofl->ofl_tlsldgotndx);
73 ld_calc_got_offset(Rel_desc * rdesc, Ofl_desc * ofl)
75 Os_desc *osp = ofl->ofl_osgot;
90 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, rdesc);
120 ld_mach_eflags(Ehdr *ehdr, Ofl_desc *ofl)
122 Word eflags = ofl->ofl_dehdr->e_flags;
131 ofl->ofl_dehdr->e_machine = EM_SPARC32PLUS;
139 ofl->ofl_dehdr->e_flags |= ehdr->e_flags;
168 ofl->ofl_dehdr->e_flags = eflags;
172 ld_mach_make_dynamic(Ofl_desc *ofl, size_t *cnt)
174 if (!(ofl->ofl_flags & FLG_OF_RELOBJ)) {
178 if (ofl->ofl_pltcnt)
184 ld_mach_update_odynamic(Ofl_desc *ofl, Dyn **dyn)
186 if (((ofl->ofl_flags & FLG_OF_RELOBJ) == 0) && ofl->ofl_pltcnt) {
188 if (ofl->ofl_osplt)
189 (*dyn)->d_un.d_ptr = ofl->ofl_osplt->os_shdr->sh_addr;
199 ld_calc_plt_addr(Sym_desc *sdp, Ofl_desc *ofl)
206 value = (Xword)(ofl->ofl_osplt->os_shdr->sh_addr) +
230 value += (Xword)(ofl->ofl_osplt->os_shdr->sh_addr);
278 plt_far_entry(Ofl_desc *ofl, Xword pltndx, Xword *roffset, Sxword *raddend)
292 farblkcnt = ((ofl->ofl_pltcnt - 1 +
332 lastblkpltndx = (ofl->ofl_pltcnt - 1 + M_PLT_XNumber -
337 pltbuf = (uchar_t *)ofl->ofl_osplt->os_outdata->d_buf;
346 *roffset = pltptroff + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr);
347 *raddend = -(pltoff + 4 + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr));
394 plt_entry(Ofl_desc *ofl, Xword pltndx, Xword *roffset, Sxword *raddend)
398 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0;
406 plt_far_entry(ofl, pltndx, roffset, raddend);
411 pltent = (uchar_t *)ofl->ofl_osplt->os_outdata->d_buf + pltoff;
413 *roffset = pltoff + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr);
504 ld_calc_plt_addr(Sym_desc *sdp, Ofl_desc *ofl)
509 value = (Xword)(ofl->ofl_osplt->os_shdr->sh_addr) +
527 plt_entry(Ofl_desc * ofl, Xword pltndx, Xword *roffset, Sxword *raddend)
531 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0;
534 pltent = (Byte *)ofl->ofl_osplt->os_outdata->d_buf + pltoff;
536 *roffset = pltoff + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr);
584 ld_perform_outreloc(Rel_desc *orsp, Ofl_desc *ofl, Boolean *remain_seen)
594 Word dtflags1 = ofl->ofl_dtflags_1;
595 ofl_flag_t flags = ofl->ofl_flags;
606 relosp = ofl->ofl_osrel;
614 DBG_CALL(Dbg_reloc_out(ofl, ELF_DBG_LD, SHT_RELA, &rea,
632 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, orsp));
641 ld_adj_movereloc(ofl, orsp);
649 if (ofl->ofl_parsyms &&
655 DBG_CALL(Dbg_move_outsctadj(ofl->ofl_lml, psym));
657 if (ofl->ofl_flags & FLG_OF_RELOBJ)
679 osp = ofl->ofl_osgot;
680 roffset = ld_calc_got_offset(orsp, ofl);
683 osp = ofl->ofl_osplt;
684 plt_entry(ofl, sdp->sd_aux->sa_PLTndx, &roffset, &raddend);
690 osp = ofl->ofl_isbss->is_osdesc;
715 if (!(ofl->ofl_flags & FLG_OF_RELOBJ))
721 relosp = ofl->ofl_osrel;
735 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NONALIGN),
764 ndx = ofl->ofl_parexpnndx;
788 DBG_CALL(Dbg_reloc_out(ofl, ELF_DBG_LD, SHT_RELA, &rea, relosp->os_name,
804 ld_reloc_remain_entry(orsp, osp, ofl, remain_seen);
835 tls_fixups(Ofl_desc *ofl, Rel_desc *arsp)
840 int bswap = OFL_SWAP_RELOC_DATA(ofl, arsp);
853 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
860 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
867 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
876 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
893 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
899 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
917 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
936 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
954 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
963 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
975 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
988 gotop_fixups(Ofl_desc *ofl, Rel_desc *arsp)
998 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
1004 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
1018 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH,
1023 bswap = OFL_SWAP_RELOC_DATA(ofl, arsp);
1038 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADGOTFIX),
1047 ld_do_activerelocs(Ofl_desc *ofl)
1053 ofl_flag_t flags = ofl->ofl_flags;
1055 if (aplist_nitems(ofl->ofl_actrels.rc_list) != 0)
1056 DBG_CALL(Dbg_reloc_doact_title(ofl->ofl_lml));
1061 REL_CACHE_TRAVERSE(&ofl->ofl_actrels, idx, rcbp, arsp) {
1076 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, arsp));
1086 if ((ret = tls_fixups(ofl, arsp)) == FIX_ERROR)
1098 if ((ret = gotop_fixups(ofl, arsp)) == FIX_ERROR)
1109 ld_adj_movereloc(ofl, arsp);
1155 value -= ofl->ofl_tlsphdr->p_vaddr;
1171 value = ld_calc_plt_addr(sdp, ofl);
1180 !ld_reloc_set_aux_osdesc(ofl, arsp, ofl->ofl_osgot))
1199 value = ld_calc_plt_addr(sdp, ofl);
1243 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, arsp);
1260 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml,
1267 if (ofl->ofl_flags1 & FLG_OF1_ENCDIFF)
1275 value -= (ofl->ofl_osgot->os_shdr->sh_addr +
1294 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, arsp);
1304 GOT_REF_GENERIC, ofl, arsp);
1319 S_ROUND(ofl->ofl_tlsphdr->p_memsz, M_TLSSTATALIGN);
1338 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_EMPTYSEC),
1352 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml, ELF_DBG_LD_ACT,
1357 if ((((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) >
1358 ofl->ofl_size) || (arsp->rel_roffset >
1363 if (((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) >
1364 ofl->ofl_size)
1369 ld_eprintf(ofl, class, MSG_INTL(MSG_REL_INVALOFFSET),
1374 (uintptr_t)ofl->ofl_nehdr));
1385 if (OFL_DO_RELOC(ofl)) {
1387 ifl_name, OFL_SWAP_RELOC_DATA(ofl, arsp),
1388 ofl->ofl_lml) == 0) {
1389 ofl->ofl_flags |= FLG_OF_FATAL;
1398 ld_add_outrel(Word flags, Rel_desc *rsp, Ofl_desc *ofl)
1410 if (OFL_IS_STATIC_EXEC(ofl))
1418 if (ofl->ofl_flags & FLG_OF_SHAROBJ) {
1426 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_UNRELREL),
1442 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_SHOBJABS44),
1469 ofl->ofl_flags1 |= FLG_OF1_BSSOREL;
1471 ofl->ofl_flags1 |= FLG_OF1_TLSOREL;
1478 ofl->ofl_dynshdrcnt++;
1485 if ((orsp = ld_reloc_enter(ofl, &ofl->ofl_outrels, rsp, flags)) == NULL)
1489 ofl->ofl_relocgotsz += (Xword)sizeof (Rela);
1491 ofl->ofl_relocpltsz += (Xword)sizeof (Rela);
1493 ofl->ofl_relocbsssz += (Xword)sizeof (Rela);
1495 ofl->ofl_relocrelsz += (Xword)sizeof (Rela);
1500 ofl->ofl_relocrelcnt++;
1509 ((ofl->ofl_flags & (FLG_OF_BFLAG | FLG_OF_RELOBJ)) == 0) &&
1511 ofl->ofl_pltpad++;
1521 ofl->ofl_reloccnt++;
1527 ofl->ofl_flags |= FLG_OF_BLDGOT;
1533 ofl->ofl_dtflags_1 |= DF_1_DISPRELPND;
1535 if (ofl->ofl_flags & FLG_OF_VERBOSE)
1536 ld_disp_errmsg(MSG_INTL(MSG_REL_DISPREL4), orsp, ofl);
1538 DBG_CALL(Dbg_reloc_ors_entry(ofl->ofl_lml, ELF_DBG_LD, SHT_RELA,
1555 ld_reloc_register(Rel_desc *rsp, Is_desc *isp, Ofl_desc *ofl)
1557 if (ofl->ofl_flags & FLG_OF_MULDEFS) {
1576 return (ld_add_outrel((rsp->rel_flags | FLG_REL_REG), rsp, ofl));
1583 ld_reloc_local(Rel_desc *rsp, Ofl_desc *ofl)
1585 ofl_flag_t flags = ofl->ofl_flags;
1614 rsp, ofl));
1617 if (ld_add_outrel(FLG_REL_ADVAL, rsp, ofl) == S_ERROR)
1652 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_EXTERNSYM),
1662 return (ld_add_actrel(NULL, rsp, ofl));
1682 ld_reloc_GOTOP(Boolean local, Rel_desc *rsp, Ofl_desc *ofl)
1693 return (ld_reloc_GOT_relative(local, rsp, ofl));
1703 return (ld_add_actrel(FLG_REL_GOTFIX, rsp, ofl));
1707 ld_reloc_TLS(Boolean local, Rel_desc *rsp, Ofl_desc *ofl)
1711 ofl_flag_t flags = ofl->ofl_flags;
1722 ofl->ofl_dtflags |= DF_STATIC_TLS;
1742 GOT_REF_TLSIE, ofl, rsp)) == NULL)) {
1744 if (ld_assign_got_TLS(local, rsp, ofl, sdp,
1754 return (ld_add_actrel(FLG_REL_STLS, rsp, ofl));
1760 rsp, ofl));
1767 return (ld_add_actrel(FLG_REL_STLS, rsp, ofl));
1777 rsp, ofl));
1795 ofl, rsp)) == NULL)) {
1797 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSLD,
1804 ofl, rsp)) == NULL)) {
1806 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSGD,
1820 ofl, MSG_STR_TLSREL)) == (Sym_desc *)S_ERROR)
1826 if (ld_reloc_plt(rsp, ofl) == S_ERROR)
1835 return (ld_add_actrel(FLG_REL_MTLS, rsp, ofl));
1837 return (ld_add_actrel(FLG_REL_DTLS, rsp, ofl));
1854 ld_assign_got(Ofl_desc *ofl, Sym_desc *sdp)
1884 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_ASSIGNGOT),
1893 ld_assign_got_ndx(Alist **alpp, Gotndx *pgnp, Gotref gref, Ofl_desc *ofl,
1961 ofl->ofl_gotcnt += gotents;
1964 if (ofl->ofl_tlsldgotndx == NULL) {
1968 ofl->ofl_tlsldgotndx = gnp;
1994 ld_assign_plt_ndx(Sym_desc * sdp, Ofl_desc *ofl)
1996 sdp->sd_aux->sa_PLTndx = 1 + ofl->ofl_pltcnt++;
2001 ld_allocate_got(Ofl_desc * ofl)
2021 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_SMALLGOT),
2026 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_MIXEDGOT),
2060 NULL, ofl)) != NULL)
2063 NULL, ofl)) != NULL)
2066 if (ofl->ofl_tlsldgotndx) {
2067 ofl->ofl_tlsldgotndx->gn_gotndx = large_index;
2077 ld_fillin_gotplt(Ofl_desc *ofl)
2079 if (ofl->ofl_osgot) {
2083 SYM_NOHASH, NULL, ofl)) != NULL) {
2086 genptr = ((uchar_t *)ofl->ofl_osgot->os_outdata->d_buf +
2091 if (ofl->ofl_flags1 & FLG_OF1_ENCDIFF)