Lines Matching refs:obj
67 _rtld_digest_dynamic(const char *execname, Obj_Entry *obj)
70 Needed_Entry **needed_tail = &obj->needed;
81 dbg(("headers: digesting PT_DYNAMIC at %p", obj->dynamic));
82 for (dynp = obj->dynamic; dynp->d_tag != DT_NULL; ++dynp) {
87 obj->rel = (const Elf_Rel *)
88 (obj->relocbase + dynp->d_un.d_ptr);
108 obj->rela = (const Elf_Rela *)
109 (obj->relocbase + dynp->d_un.d_ptr);
127 obj->symtab = (const Elf_Sym *)
128 (obj->relocbase + dynp->d_un.d_ptr);
136 obj->strtab = (const char *)
137 (obj->relocbase + dynp->d_un.d_ptr);
141 obj->strsize = dynp->d_un.d_val;
145 obj->verneed = (const Elf_Verneed *)
146 (obj->relocbase + dynp->d_un.d_ptr);
150 obj->verneednum = dynp->d_un.d_val;
154 obj->verdef = (const Elf_Verdef *)
155 (obj->relocbase + dynp->d_un.d_ptr);
159 obj->verdefnum = dynp->d_un.d_val;
163 obj->versyms = (const Elf_Versym *)
164 (obj->relocbase + dynp->d_un.d_ptr);
171 (obj->relocbase + dynp->d_un.d_ptr);
177 obj->nbuckets = nbuckets;
178 obj->nchains = (nchains = hashtab[1]);
179 obj->buckets = hashtab + 2;
180 obj->chains = obj->buckets + obj->nbuckets;
183 if (!obj->buckets || !nbuckets || !nchains)
186 obj->sysv_hash = true;
192 fast_divide32_prepare(obj->nbuckets,
193 &obj->nbuckets_m,
194 &obj->nbuckets_s1,
195 &obj->nbuckets_s2);
206 (obj->relocbase + dynp->d_un.d_ptr);
212 obj->nbuckets_gnu = nbuckets;
217 obj->buckets_gnu = (const uint32_t *)(hashtab + 4 + bloom_size32);
222 if (!nmw_power2 || !nbuckets || !obj->buckets_gnu)
225 obj->gnu_hash = true;
227 obj->mask_bm_gnu = nmaskwords - 1;
228 obj->symndx_gnu = (symndx = hashtab[1]);
229 obj->shift2_gnu = hashtab[3];
230 obj->bloom_gnu = (const Elf_Addr *)(hashtab + 4);
231 obj->chains_gnu = obj->buckets_gnu + nbuckets - symndx;
238 &obj->nbuckets_m_gnu,
239 &obj->nbuckets_s1_gnu,
240 &obj->nbuckets_s2_gnu);
246 obj->buckets_gnu, obj->nbuckets_gnu,
247 obj->chains_gnu, obj->nchains_gnu,
248 obj->bloom_gnu, obj->mask_bm_gnu,
249 obj->shift2_gnu, obj->symndx_gnu));
258 nep->obj = NULL;
267 obj->pltgot = (Elf_Addr *)
268 (obj->relocbase + dynp->d_un.d_ptr);
272 obj->textrel = true;
276 obj->symbolic = true;
301 obj->init_array =
302 (fptr_t *)(obj->relocbase + dynp->d_un.d_ptr);
304 obj->init_array));
308 obj->init_arraysz = dynp->d_un.d_val / sizeof(fptr_t);
310 obj->init_arraysz));
322 obj->fini_array =
323 (fptr_t *)(obj->relocbase + dynp->d_un.d_ptr);
325 obj->fini_array));
329 obj->fini_arraysz = dynp->d_un.d_val / sizeof(fptr_t);
331 obj->fini_arraysz));
350 obj->local_gotno = dynp->d_un.d_val;
354 obj->symtabno = dynp->d_un.d_val;
358 obj->gotsym = dynp->d_un.d_val;
371 obj->glink = (Elf_Addr)(uintptr_t)obj->relocbase + dynp->d_un.d_ptr;
375 obj->gotptr = (Elf_Addr *)(obj->relocbase + dynp->d_un.d_ptr);
380 obj->z_now =
382 obj->z_nodelete =
384 obj->z_initfirst =
386 obj->z_noopen =
392 obj->rellim = (const Elf_Rel *)((const uint8_t *)obj->rel + relsz);
393 obj->relalim = (const Elf_Rela *)((const uint8_t *)obj->rela + relasz);
395 obj->pltrel = (const Elf_Rel *)(obj->relocbase + pltrel);
396 obj->pltrellim = (const Elf_Rel *)(obj->relocbase + pltrel + pltrelsz);
397 obj->pltrelalim = 0;
400 if (obj->rellim && obj->pltrel &&
401 obj->rellim > obj->pltrel &&
402 obj->rellim <= obj->pltrellim)
403 obj->rellim = obj->pltrel;
405 obj->pltrela = (const Elf_Rela *)(obj->relocbase + pltrel);
406 obj->pltrellim = 0;
407 obj->pltrelalim = (const Elf_Rela *)(obj->relocbase + pltrel + pltrelsz);
410 if (obj->relalim && obj->pltrela &&
411 obj->relalim > obj->pltrela &&
412 obj->relalim <= obj->pltrelalim)
413 obj->relalim = obj->pltrela;
417 if (!obj->sysv_hash && obj->gnu_hash) {
421 nbucket = obj->nbuckets_gnu;
422 symndx = obj->symndx_gnu;
425 Elf_Word bkt = obj->buckets_gnu[i];
428 const uint32_t *hashval = &obj->chains_gnu[bkt];
433 obj->nchains_gnu = (uint32_t)symndx;
439 obj->init = (void (*)(void))
440 _rtld_function_descriptor_alloc(obj, NULL, init);
442 obj->fini = (void (*)(void))
443 _rtld_function_descriptor_alloc(obj, NULL, fini);
446 obj->init = (void (*)(void)) (obj->relocbase + init);
448 obj->fini = (void (*)(void)) (obj->relocbase + fini);
453 _rtld_add_paths(execname, &obj->rpaths, obj->strtab +
457 _rtld_object_add_name(obj, obj->strtab +
472 Obj_Entry *obj;
479 obj = _rtld_obj_new();
485 obj->relocbase = (caddr_t)((uintptr_t)phdr - (uintptr_t)ph->p_vaddr);
486 obj->phdr = phdr; /* Equivalent to relocbase + p_vaddr. */
487 obj->phsize = ph->p_memsz;
489 obj->phdr, phdr, obj->phsize, obj->relocbase));
494 vaddr = (Elf_Addr)(uintptr_t)(obj->relocbase + ph->p_vaddr);
498 obj->interp = (const char *)(uintptr_t)vaddr;
505 size = round_up(vaddr + ph->p_memsz) - obj->vaddrbase;
507 obj->vaddrbase = round_down(vaddr);
508 obj->mapbase = (caddr_t)(uintptr_t)obj->vaddrbase;
509 obj->textsize = size;
510 obj->mapsize = size;
513 obj->mapsize = MAX(obj->mapsize, size);
521 obj->dynamic = (Elf_Dyn *)(uintptr_t)vaddr;
530 obj->relro_page = obj->relocbase + ph->p_vaddr;
531 obj->relro_size = ph->p_memsz;
540 obj->tlsindex = 1;
541 obj->tlssize = ph->p_memsz;
542 obj->tlsalign = ph->p_align;
543 obj->tlsinitsize = ph->p_filesz;
544 obj->tlsinit = (void *)(obj->relocbase +
553 obj->exidx_start = (void *)(uintptr_t)vaddr;
554 obj->exidx_sz = ph->p_memsz;
563 obj->entry = entry;
564 return obj;