Lines Matching refs:obj
56 init_pltgot(Obj_Entry *obj) in init_pltgot() argument
59 if (obj->pltgot != NULL) { in init_pltgot()
60 obj->pltgot[1] = (Elf_Addr) obj; in init_pltgot()
61 obj->pltgot[2] = (Elf_Addr) &_rtld_bind_start; in init_pltgot()
142 reloc_tlsdesc(const Obj_Entry *obj, const Elf_Rela *rela, Elf_Addr *where, in reloc_tlsdesc() argument
152 def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj, flags, in reloc_tlsdesc()
157 obj = defobj; in reloc_tlsdesc()
167 if (obj->tlsoffset != 0) { in reloc_tlsdesc()
170 where[1] = obj->tlsoffset + offs; in reloc_tlsdesc()
174 where[1] = reloc_tlsdesc_alloc(obj->tlsindex, offs); in reloc_tlsdesc()
182 reloc_plt(Obj_Entry *obj, int flags, RtldLockState *lockstate) in reloc_plt() argument
187 relalim = (const Elf_Rela *)((const char *)obj->pltrela + in reloc_plt()
188 obj->pltrelasize); in reloc_plt()
189 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_plt()
192 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_plt()
196 *where += (Elf_Addr)obj->relocbase; in reloc_plt()
199 reloc_tlsdesc(obj, rela, where, SYMLOOK_IN_PLT | flags, in reloc_plt()
203 obj->irelative = true; in reloc_plt()
221 reloc_jmpslots(Obj_Entry *obj, int flags, RtldLockState *lockstate) in reloc_jmpslots() argument
228 if (obj->jmpslots_done) in reloc_jmpslots()
231 relalim = (const Elf_Rela *)((const char *)obj->pltrela + in reloc_jmpslots()
232 obj->pltrelasize); in reloc_jmpslots()
233 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_jmpslots()
236 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_jmpslots()
239 def = find_symdef(ELF_R_SYM(rela->r_info), obj, in reloc_jmpslots()
244 obj->gnu_ifunc = true; in reloc_jmpslots()
248 reloc_jmpslot(where, target, defobj, obj, in reloc_jmpslots()
253 obj->jmpslots_done = true; in reloc_jmpslots()
259 reloc_iresolve_one(Obj_Entry *obj, const Elf_Rela *rela, in reloc_iresolve_one() argument
264 ptr = (Elf_Addr *)(obj->relocbase + rela->r_addend); in reloc_iresolve_one()
265 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_iresolve_one()
273 reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) in reloc_iresolve() argument
278 if (!obj->irelative) in reloc_iresolve()
280 obj->irelative = false; in reloc_iresolve()
281 relalim = (const Elf_Rela *)((const char *)obj->pltrela + in reloc_iresolve()
282 obj->pltrelasize); in reloc_iresolve()
283 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_iresolve()
285 reloc_iresolve_one(obj, rela, lockstate); in reloc_iresolve()
291 reloc_iresolve_nonplt(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) in reloc_iresolve_nonplt() argument
296 if (!obj->irelative_nonplt) in reloc_iresolve_nonplt()
298 obj->irelative_nonplt = false; in reloc_iresolve_nonplt()
299 relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize); in reloc_iresolve_nonplt()
300 for (rela = obj->rela; rela < relalim; rela++) { in reloc_iresolve_nonplt()
302 reloc_iresolve_one(obj, rela, lockstate); in reloc_iresolve_nonplt()
308 reloc_gnu_ifunc(Obj_Entry *obj, int flags, in reloc_gnu_ifunc() argument
317 if (!obj->gnu_ifunc) in reloc_gnu_ifunc()
319 relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize); in reloc_gnu_ifunc()
320 for (rela = obj->pltrela; rela < relalim; rela++) { in reloc_gnu_ifunc()
322 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_gnu_ifunc()
323 def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj, in reloc_gnu_ifunc()
332 reloc_jmpslot(where, target, defobj, obj, in reloc_gnu_ifunc()
336 obj->gnu_ifunc = false; in reloc_gnu_ifunc()
342 const Obj_Entry *defobj __unused, const Obj_Entry *obj __unused, in reloc_jmpslot()
364 reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld, int flags, in reloc_non_plt() argument
378 if (obj == obj_rtld) in reloc_non_plt()
381 cache = calloc(obj->dynsymcount, sizeof(SymCache)); in reloc_non_plt()
384 relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize); in reloc_non_plt()
385 for (rela = obj->rela; rela < relalim; rela++) { in reloc_non_plt()
396 def = find_symdef(ELF_R_SYM(rela->r_info), obj, in reloc_non_plt()
415 obj->non_plt_gnu_ifunc = true; in reloc_non_plt()
423 obj->path); in reloc_non_plt()
438 where = (Elf_Addr *)(obj->relocbase + rela->r_offset); in reloc_non_plt()
452 if (!obj->mainprog) { in reloc_non_plt()
454 "relocation in shared library", obj->path); in reloc_non_plt()
459 reloc_tlsdesc(obj, rela, where, flags, lockstate); in reloc_non_plt()
475 "Thread Local Storage", obj->path); in reloc_non_plt()
496 *where = (Elf_Addr)(obj->relocbase + rela->r_addend); in reloc_non_plt()
501 obj->irelative_nonplt = true; in reloc_non_plt()
505 obj->path, ELF_R_TYPE(rela->r_info)); in reloc_non_plt()