Lines Matching refs:obj

166 reloc_nonplt_object(Obj_Entry *obj_rtld __unused, Obj_Entry *obj,  in reloc_nonplt_object()  argument
185 def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj, in reloc_nonplt_object()
208 obj->non_plt_gnu_ifunc = true; in reloc_nonplt_object()
216 obj->path); in reloc_nonplt_object()
230 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_nonplt_object()
259 "Thread Local Storage", obj->path); in reloc_nonplt_object()
273 symval = (Elf_Addr)(obj->relocbase + rela->r_addend); in reloc_nonplt_object()
288 if (!obj->mainprog) { in reloc_nonplt_object()
291 obj->path); in reloc_nonplt_object()
299 obj->irelative = true; in reloc_nonplt_object()
309 " in non-PLT relocations\n", obj->path, in reloc_nonplt_object()
321 reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld, int flags, in reloc_non_plt() argument
334 if (obj != obj_rtld) { in reloc_non_plt()
335 cache = calloc(obj->dynsymcount, sizeof(SymCache)); in reloc_non_plt()
345 relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize); in reloc_non_plt()
346 for (rela = obj->rela; rela < relalim; rela++) { in reloc_non_plt()
347 if (reloc_nonplt_object(obj_rtld, obj, rela, cache, flags, in reloc_non_plt()
360 for (phdr = obj->phdr; in reloc_non_plt()
361 (const char *)phdr < (const char *)obj->phdr + obj->phsize; in reloc_non_plt()
364 __syncicache(obj->relocbase + phdr->p_vaddr, in reloc_non_plt()
376 reloc_plt_object(Obj_Entry *obj, const Elf_Rela *rela) in reloc_plt_object() argument
378 Elf_Word *where = (Elf_Word *)(obj->relocbase + rela->r_offset); in reloc_plt_object()
381 int N = obj->pltrelasize / sizeof(Elf_Rela); in reloc_plt_object()
384 reloff = rela - obj->pltrela; in reloc_plt_object()
389 if (obj->gotptr != NULL) { in reloc_plt_object()
390 *where += (Elf_Addr)obj->relocbase; in reloc_plt_object()
394 pltlongresolve = obj->pltgot + 5; in reloc_plt_object()
408 jmptab = obj->pltgot + JMPTAB_BASE(N); in reloc_plt_object()
434 reloc_plt(Obj_Entry *obj, int flags __unused, RtldLockState *lockstate __unused) in reloc_plt() argument
438 int N = obj->pltrelasize / sizeof(Elf_Rela); in reloc_plt()
440 if (obj->pltrelasize != 0) { in reloc_plt()
442 relalim = (const Elf_Rela *)((const char *)obj->pltrela + in reloc_plt()
443 obj->pltrelasize); in reloc_plt()
444 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_plt()
447 obj->irelative = true; in reloc_plt()
458 if (reloc_plt_object(obj, rela) < 0) { in reloc_plt()
468 if (obj->pltgot != NULL && obj->gotptr == NULL) in reloc_plt()
469 __syncicache(obj->pltgot, JMPTAB_BASE(N)*4); in reloc_plt()
478 reloc_jmpslots(Obj_Entry *obj, int flags, RtldLockState *lockstate) in reloc_jmpslots() argument
487 relalim = (const Elf_Rela *)((const char *)obj->pltrela + in reloc_jmpslots()
488 obj->pltrelasize); in reloc_jmpslots()
489 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_jmpslots()
494 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_jmpslots()
495 def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj, in reloc_jmpslots()
510 obj->gnu_ifunc = true; in reloc_jmpslots()
513 reloc_jmpslot(where, target, defobj, obj, in reloc_jmpslots()
518 obj->jmpslots_done = true; in reloc_jmpslots()
529 const Obj_Entry *defobj __unused, const Obj_Entry *obj, const Elf_Rel *rel) in reloc_jmpslot() argument
544 if (obj->gotptr != NULL) { in reloc_jmpslot()
545 assert(wherep >= (Elf_Word *)obj->pltgot); in reloc_jmpslot()
547 (Elf_Word *)obj->pltgot + obj->pltrelasize); in reloc_jmpslot()
572 int N = obj->pltrelasize / sizeof(Elf_Rela); in reloc_jmpslot()
573 int reloff = rela - obj->pltrela; in reloc_jmpslot()
578 pltcall = obj->pltgot; in reloc_jmpslot()
583 jmptab = obj->pltgot + JMPTAB_BASE(N); in reloc_jmpslot()
606 reloc_iresolve(Obj_Entry *obj, in reloc_iresolve() argument
617 if (!obj->irelative) in reloc_iresolve()
620 relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize); in reloc_iresolve()
621 for (rela = obj->rela; rela < relalim; rela++) { in reloc_iresolve()
623 ptr = (Elf_Addr *)(obj->relocbase + rela->r_addend); in reloc_iresolve()
624 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_iresolve()
637 relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize); in reloc_iresolve()
638 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_iresolve()
640 ptr = (Elf_Addr *)(obj->relocbase + rela->r_addend); in reloc_iresolve()
641 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_iresolve()
651 obj->irelative = false; in reloc_iresolve()
656 reloc_iresolve_nonplt(Obj_Entry *obj __unused, in reloc_iresolve_nonplt()
663 reloc_gnu_ifunc(Obj_Entry *obj __unused, int flags __unused, in reloc_gnu_ifunc()
672 if (!obj->gnu_ifunc) in reloc_gnu_ifunc()
674 relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize); in reloc_gnu_ifunc()
675 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_gnu_ifunc()
677 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_gnu_ifunc()
678 def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj, in reloc_gnu_ifunc()
687 reloc_jmpslot(where, target, defobj, obj, in reloc_gnu_ifunc()
691 obj->gnu_ifunc = false; in reloc_gnu_ifunc()
703 init_pltgot(Obj_Entry *obj) in init_pltgot() argument
707 int N = obj->pltrelasize / sizeof(Elf_Rela); in init_pltgot()
709 pltcall = obj->pltgot; in init_pltgot()
716 if (obj->gotptr != NULL) { in init_pltgot()
717 obj->gotptr[1] = (Elf_Addr)_rtld_bind_secureplt_start; in init_pltgot()
718 obj->gotptr[2] = (Elf_Addr)obj; in init_pltgot()
720 obj->path, obj->gotptr, in init_pltgot()
721 (void *)obj->gotptr[1], (void *)obj->gotptr[2]); in init_pltgot()
752 jmptab = obj->pltgot + JMPTAB_BASE(N); in init_pltgot()
765 pltlongresolve = obj->pltgot + 5; in init_pltgot()
776 pltresolve[3] |= _ppc_ha(obj); in init_pltgot()
777 pltresolve[4] |= _ppc_la(obj); in init_pltgot()