Lines Matching refs:ofl
54 ld_find_got_ndx(Alist *alp, Gotref gref, Ofl_desc *ofl, Rel_desc *rdesc) in ld_find_got_ndx() argument
61 if ((gref == GOT_REF_TLSLD) && ofl->ofl_tlsldgotndx) in ld_find_got_ndx()
62 return (ofl->ofl_tlsldgotndx); in ld_find_got_ndx()
73 ld_calc_got_offset(Rel_desc * rdesc, Ofl_desc * ofl) in ld_calc_got_offset() argument
75 Os_desc *osp = ofl->ofl_osgot; in ld_calc_got_offset()
90 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, rdesc); in ld_calc_got_offset()
120 ld_mach_eflags(Ehdr *ehdr, Ofl_desc *ofl) in ld_mach_eflags() argument
122 Word eflags = ofl->ofl_dehdr->e_flags; in ld_mach_eflags()
131 ofl->ofl_dehdr->e_machine = EM_SPARC32PLUS; in ld_mach_eflags()
139 ofl->ofl_dehdr->e_flags |= ehdr->e_flags; in ld_mach_eflags()
168 ofl->ofl_dehdr->e_flags = eflags; in ld_mach_eflags()
172 ld_mach_make_dynamic(Ofl_desc *ofl, size_t *cnt) in ld_mach_make_dynamic() argument
174 if (!(ofl->ofl_flags & FLG_OF_RELOBJ)) { in ld_mach_make_dynamic()
178 if (ofl->ofl_pltcnt) in ld_mach_make_dynamic()
184 ld_mach_update_odynamic(Ofl_desc *ofl, Dyn **dyn) in ld_mach_update_odynamic() argument
186 if (((ofl->ofl_flags & FLG_OF_RELOBJ) == 0) && ofl->ofl_pltcnt) { in ld_mach_update_odynamic()
188 if (ofl->ofl_osplt) in ld_mach_update_odynamic()
189 (*dyn)->d_un.d_ptr = ofl->ofl_osplt->os_shdr->sh_addr; in ld_mach_update_odynamic()
199 ld_calc_plt_addr(Sym_desc *sdp, Ofl_desc *ofl) in ld_calc_plt_addr() argument
206 value = (Xword)(ofl->ofl_osplt->os_shdr->sh_addr) + in ld_calc_plt_addr()
230 value += (Xword)(ofl->ofl_osplt->os_shdr->sh_addr); in ld_calc_plt_addr()
278 plt_far_entry(Ofl_desc *ofl, Xword pltndx, Xword *roffset, Sxword *raddend) in plt_far_entry() argument
292 farblkcnt = ((ofl->ofl_pltcnt - 1 + in plt_far_entry()
332 lastblkpltndx = (ofl->ofl_pltcnt - 1 + M_PLT_XNumber - in plt_far_entry()
337 pltbuf = (uchar_t *)ofl->ofl_osplt->os_outdata->d_buf; in plt_far_entry()
346 *roffset = pltptroff + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr); in plt_far_entry()
347 *raddend = -(pltoff + 4 + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr)); in plt_far_entry()
394 plt_entry(Ofl_desc *ofl, Xword pltndx, Xword *roffset, Sxword *raddend) in plt_entry() argument
398 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0; in plt_entry()
406 plt_far_entry(ofl, pltndx, roffset, raddend); in plt_entry()
411 pltent = (uchar_t *)ofl->ofl_osplt->os_outdata->d_buf + pltoff; in plt_entry()
413 *roffset = pltoff + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr); in plt_entry()
504 ld_calc_plt_addr(Sym_desc *sdp, Ofl_desc *ofl) in ld_calc_plt_addr() argument
509 value = (Xword)(ofl->ofl_osplt->os_shdr->sh_addr) + in ld_calc_plt_addr()
527 plt_entry(Ofl_desc * ofl, Xword pltndx, Xword *roffset, Sxword *raddend) in plt_entry() argument
531 int bswap = (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) != 0; in plt_entry()
534 pltent = (Byte *)ofl->ofl_osplt->os_outdata->d_buf + pltoff; in plt_entry()
536 *roffset = pltoff + (Xword)(ofl->ofl_osplt->os_shdr->sh_addr); in plt_entry()
584 ld_perform_outreloc(Rel_desc *orsp, Ofl_desc *ofl, Boolean *remain_seen) in ld_perform_outreloc() argument
594 Word dtflags1 = ofl->ofl_dtflags_1; in ld_perform_outreloc()
595 ofl_flag_t flags = ofl->ofl_flags; in ld_perform_outreloc()
606 relosp = ofl->ofl_osrel; in ld_perform_outreloc()
614 DBG_CALL(Dbg_reloc_out(ofl, ELF_DBG_LD, SHT_RELA, &rea, in ld_perform_outreloc()
632 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, orsp)); in ld_perform_outreloc()
641 ld_adj_movereloc(ofl, orsp); in ld_perform_outreloc()
649 if (ofl->ofl_parsyms && in ld_perform_outreloc()
655 DBG_CALL(Dbg_move_outsctadj(ofl->ofl_lml, psym)); in ld_perform_outreloc()
657 if (ofl->ofl_flags & FLG_OF_RELOBJ) in ld_perform_outreloc()
679 osp = ofl->ofl_osgot; in ld_perform_outreloc()
680 roffset = ld_calc_got_offset(orsp, ofl); in ld_perform_outreloc()
683 osp = ofl->ofl_osplt; in ld_perform_outreloc()
684 plt_entry(ofl, sdp->sd_aux->sa_PLTndx, &roffset, &raddend); in ld_perform_outreloc()
690 osp = ofl->ofl_isbss->is_osdesc; in ld_perform_outreloc()
715 if (!(ofl->ofl_flags & FLG_OF_RELOBJ)) in ld_perform_outreloc()
721 relosp = ofl->ofl_osrel; in ld_perform_outreloc()
735 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NONALIGN), in ld_perform_outreloc()
764 ndx = ofl->ofl_parexpnndx; in ld_perform_outreloc()
793 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_NOSYMBOL), in ld_perform_outreloc()
794 conv_reloc_type(ofl->ofl_nehdr->e_machine, in ld_perform_outreloc()
806 DBG_CALL(Dbg_reloc_out(ofl, ELF_DBG_LD, SHT_RELA, &rea, relosp->os_name, in ld_perform_outreloc()
824 ld_reloc_remain_entry(orsp, osp, ofl, remain_seen); in ld_perform_outreloc()
855 tls_fixups(Ofl_desc *ofl, Rel_desc *arsp) in tls_fixups() argument
860 int bswap = OFL_SWAP_RELOC_DATA(ofl, arsp); in tls_fixups()
873 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
880 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
887 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
896 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
913 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
919 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
937 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
956 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
974 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
983 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
995 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in tls_fixups()
1008 gotop_fixups(Ofl_desc *ofl, Rel_desc *arsp) in gotop_fixups() argument
1018 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in gotop_fixups()
1024 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in gotop_fixups()
1038 DBG_CALL(Dbg_reloc_transition(ofl->ofl_lml, M_MACH, in gotop_fixups()
1043 bswap = OFL_SWAP_RELOC_DATA(ofl, arsp); in gotop_fixups()
1058 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_BADGOTFIX), in gotop_fixups()
1067 ld_do_activerelocs(Ofl_desc *ofl) in ld_do_activerelocs() argument
1073 ofl_flag_t flags = ofl->ofl_flags; in ld_do_activerelocs()
1075 if (aplist_nitems(ofl->ofl_actrels.rc_list) != 0) in ld_do_activerelocs()
1076 DBG_CALL(Dbg_reloc_doact_title(ofl->ofl_lml)); in ld_do_activerelocs()
1081 REL_CACHE_TRAVERSE(&ofl->ofl_actrels, idx, rcbp, arsp) { in ld_do_activerelocs()
1096 DBG_CALL(Dbg_reloc_discard(ofl->ofl_lml, M_MACH, arsp)); in ld_do_activerelocs()
1106 if ((ret = tls_fixups(ofl, arsp)) == FIX_ERROR) in ld_do_activerelocs()
1118 if ((ret = gotop_fixups(ofl, arsp)) == FIX_ERROR) in ld_do_activerelocs()
1129 ld_adj_movereloc(ofl, arsp); in ld_do_activerelocs()
1175 value -= ofl->ofl_tlsphdr->p_vaddr; in ld_do_activerelocs()
1191 value = ld_calc_plt_addr(sdp, ofl); in ld_do_activerelocs()
1200 !ld_reloc_set_aux_osdesc(ofl, arsp, ofl->ofl_osgot)) in ld_do_activerelocs()
1219 value = ld_calc_plt_addr(sdp, ofl); in ld_do_activerelocs()
1263 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, arsp); in ld_do_activerelocs()
1280 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml, in ld_do_activerelocs()
1287 if (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) in ld_do_activerelocs()
1295 value -= (ofl->ofl_osgot->os_shdr->sh_addr + in ld_do_activerelocs()
1314 gnp = ld_find_got_ndx(sdp->sd_GOTndxs, gref, ofl, arsp); in ld_do_activerelocs()
1324 GOT_REF_GENERIC, ofl, arsp); in ld_do_activerelocs()
1339 S_ROUND(ofl->ofl_tlsphdr->p_memsz, M_TLSSTATALIGN); in ld_do_activerelocs()
1358 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_EMPTYSEC), in ld_do_activerelocs()
1372 DBG_CALL(Dbg_reloc_doact(ofl->ofl_lml, ELF_DBG_LD_ACT, in ld_do_activerelocs()
1377 if ((((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) > in ld_do_activerelocs()
1378 ofl->ofl_size) || (arsp->rel_roffset > in ld_do_activerelocs()
1383 if (((uintptr_t)addr - (uintptr_t)ofl->ofl_nehdr) > in ld_do_activerelocs()
1384 ofl->ofl_size) in ld_do_activerelocs()
1389 ld_eprintf(ofl, class, MSG_INTL(MSG_REL_INVALOFFSET), in ld_do_activerelocs()
1394 (uintptr_t)ofl->ofl_nehdr)); in ld_do_activerelocs()
1405 if (OFL_DO_RELOC(ofl)) { in ld_do_activerelocs()
1407 ifl_name, OFL_SWAP_RELOC_DATA(ofl, arsp), in ld_do_activerelocs()
1408 ofl->ofl_lml) == 0) { in ld_do_activerelocs()
1409 ofl->ofl_flags |= FLG_OF_FATAL; in ld_do_activerelocs()
1418 ld_add_outrel(Word flags, Rel_desc *rsp, Ofl_desc *ofl) in ld_add_outrel() argument
1430 if (OFL_IS_STATIC_EXEC(ofl)) in ld_add_outrel()
1443 if (ld_sym_reducable(ofl, sdp)) in ld_add_outrel()
1452 if (ofl->ofl_flags & FLG_OF_SHAROBJ) { in ld_add_outrel()
1460 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_UNRELREL), in ld_add_outrel()
1476 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_SHOBJABS44), in ld_add_outrel()
1503 ofl->ofl_flags1 |= FLG_OF1_BSSOREL; in ld_add_outrel()
1505 ofl->ofl_flags1 |= FLG_OF1_TLSOREL; in ld_add_outrel()
1512 ofl->ofl_dynshdrcnt++; in ld_add_outrel()
1519 if ((orsp = ld_reloc_enter(ofl, &ofl->ofl_outrels, rsp, flags)) == NULL) in ld_add_outrel()
1523 ofl->ofl_relocgotsz += (Xword)sizeof (Rela); in ld_add_outrel()
1525 ofl->ofl_relocpltsz += (Xword)sizeof (Rela); in ld_add_outrel()
1527 ofl->ofl_relocbsssz += (Xword)sizeof (Rela); in ld_add_outrel()
1529 ofl->ofl_relocrelsz += (Xword)sizeof (Rela); in ld_add_outrel()
1534 ofl->ofl_relocrelcnt++; in ld_add_outrel()
1543 ((ofl->ofl_flags & (FLG_OF_BFLAG | FLG_OF_RELOBJ)) == 0) && in ld_add_outrel()
1545 ofl->ofl_pltpad++; in ld_add_outrel()
1555 ofl->ofl_reloccnt++; in ld_add_outrel()
1561 ofl->ofl_flags |= FLG_OF_BLDGOT; in ld_add_outrel()
1567 ofl->ofl_dtflags_1 |= DF_1_DISPRELPND; in ld_add_outrel()
1569 if (ofl->ofl_flags & FLG_OF_VERBOSE) in ld_add_outrel()
1570 ld_disp_errmsg(MSG_INTL(MSG_REL_DISPREL4), orsp, ofl); in ld_add_outrel()
1572 DBG_CALL(Dbg_reloc_ors_entry(ofl->ofl_lml, ELF_DBG_LD, SHT_RELA, in ld_add_outrel()
1589 ld_reloc_register(Rel_desc *rsp, Is_desc *isp, Ofl_desc *ofl) in ld_reloc_register() argument
1591 if (ofl->ofl_flags & FLG_OF_MULDEFS) { in ld_reloc_register()
1610 return (ld_add_outrel((rsp->rel_flags | FLG_REL_REG), rsp, ofl)); in ld_reloc_register()
1617 ld_reloc_local(Rel_desc *rsp, Ofl_desc *ofl) in ld_reloc_local() argument
1619 ofl_flag_t flags = ofl->ofl_flags; in ld_reloc_local()
1648 rsp, ofl)); in ld_reloc_local()
1651 if (ld_add_outrel(FLG_REL_ADVAL, rsp, ofl) == S_ERROR) in ld_reloc_local()
1686 ld_eprintf(ofl, ERR_WARNING, MSG_INTL(MSG_REL_EXTERNSYM), in ld_reloc_local()
1696 return (ld_add_actrel(0, rsp, ofl)); in ld_reloc_local()
1716 ld_reloc_GOTOP(Boolean local, Rel_desc *rsp, Ofl_desc *ofl) in ld_reloc_GOTOP() argument
1727 return (ld_reloc_GOT_relative(local, rsp, ofl)); in ld_reloc_GOTOP()
1737 return (ld_add_actrel(FLG_REL_GOTFIX, rsp, ofl)); in ld_reloc_GOTOP()
1741 ld_reloc_TLS(Boolean local, Rel_desc *rsp, Ofl_desc *ofl) in ld_reloc_TLS() argument
1745 ofl_flag_t flags = ofl->ofl_flags; in ld_reloc_TLS()
1756 ofl->ofl_dtflags |= DF_STATIC_TLS; in ld_reloc_TLS()
1776 GOT_REF_TLSIE, ofl, rsp)) == NULL)) { in ld_reloc_TLS()
1778 if (ld_assign_got_TLS(local, rsp, ofl, sdp, in ld_reloc_TLS()
1788 return (ld_add_actrel(FLG_REL_STLS, rsp, ofl)); in ld_reloc_TLS()
1794 rsp, ofl)); in ld_reloc_TLS()
1801 return (ld_add_actrel(FLG_REL_STLS, rsp, ofl)); in ld_reloc_TLS()
1811 rsp, ofl)); in ld_reloc_TLS()
1829 ofl, rsp)) == NULL)) { in ld_reloc_TLS()
1831 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSLD, in ld_reloc_TLS()
1838 ofl, rsp)) == NULL)) { in ld_reloc_TLS()
1840 if (ld_assign_got_TLS(local, rsp, ofl, sdp, gnp, GOT_REF_TLSGD, in ld_reloc_TLS()
1854 ofl, MSG_STR_TLSREL)) == (Sym_desc *)S_ERROR) in ld_reloc_TLS()
1860 if (ld_reloc_plt(rsp, ofl) == S_ERROR) in ld_reloc_TLS()
1869 return (ld_add_actrel(FLG_REL_MTLS, rsp, ofl)); in ld_reloc_TLS()
1871 return (ld_add_actrel(FLG_REL_DTLS, rsp, ofl)); in ld_reloc_TLS()
1888 ld_assign_got(Ofl_desc *ofl, Sym_desc *sdp) in ld_assign_got() argument
1918 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_ASSIGNGOT), in ld_assign_got()
1927 ld_assign_got_ndx(Alist **alpp, Gotndx *pgnp, Gotref gref, Ofl_desc *ofl, in ld_assign_got_ndx() argument
1995 ofl->ofl_gotcnt += gotents; in ld_assign_got_ndx()
1998 if (ofl->ofl_tlsldgotndx == NULL) { in ld_assign_got_ndx()
2002 ofl->ofl_tlsldgotndx = gnp; in ld_assign_got_ndx()
2028 ld_assign_plt_ndx(Sym_desc * sdp, Ofl_desc *ofl) in ld_assign_plt_ndx() argument
2030 sdp->sd_aux->sa_PLTndx = 1 + ofl->ofl_pltcnt++; in ld_assign_plt_ndx()
2035 ld_allocate_got(Ofl_desc * ofl) in ld_allocate_got() argument
2055 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_SMALLGOT), in ld_allocate_got()
2060 ld_eprintf(ofl, ERR_FATAL, MSG_INTL(MSG_REL_MIXEDGOT), in ld_allocate_got()
2094 NULL, ofl)) != NULL) in ld_allocate_got()
2097 NULL, ofl)) != NULL) in ld_allocate_got()
2100 if (ofl->ofl_tlsldgotndx) { in ld_allocate_got()
2101 ofl->ofl_tlsldgotndx->gn_gotndx = large_index; in ld_allocate_got()
2111 ld_fillin_gotplt(Ofl_desc *ofl) in ld_fillin_gotplt() argument
2113 if (ofl->ofl_osgot) { in ld_fillin_gotplt()
2117 SYM_NOHASH, NULL, ofl)) != NULL) { in ld_fillin_gotplt()
2120 genptr = ((uchar_t *)ofl->ofl_osgot->os_outdata->d_buf + in ld_fillin_gotplt()
2125 if (ofl->ofl_flags1 & FLG_OF1_ENCDIFF) in ld_fillin_gotplt()