Lines Matching refs:obj
67 _rtld_digest_dynamic(const char *execname, Obj_Entry *obj) in _rtld_digest_dynamic() argument
70 Needed_Entry **needed_tail = &obj->needed; in _rtld_digest_dynamic()
81 dbg(("headers: digesting PT_DYNAMIC at %p", obj->dynamic)); in _rtld_digest_dynamic()
82 for (dynp = obj->dynamic; dynp->d_tag != DT_NULL; ++dynp) { in _rtld_digest_dynamic()
87 obj->rel = (const Elf_Rel *) in _rtld_digest_dynamic()
88 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
108 obj->rela = (const Elf_Rela *) in _rtld_digest_dynamic()
109 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
121 obj->relr = (const Elf_Relr *)(obj->relocbase + in _rtld_digest_dynamic()
140 obj->symtab = (const Elf_Sym *) in _rtld_digest_dynamic()
141 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
149 obj->strtab = (const char *) in _rtld_digest_dynamic()
150 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
154 obj->strsize = dynp->d_un.d_val; in _rtld_digest_dynamic()
158 obj->verneed = (const Elf_Verneed *) in _rtld_digest_dynamic()
159 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
163 obj->verneednum = dynp->d_un.d_val; in _rtld_digest_dynamic()
167 obj->verdef = (const Elf_Verdef *) in _rtld_digest_dynamic()
168 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
172 obj->verdefnum = dynp->d_un.d_val; in _rtld_digest_dynamic()
176 obj->versyms = (const Elf_Versym *) in _rtld_digest_dynamic()
177 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
184 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
190 obj->nbuckets = nbuckets; in _rtld_digest_dynamic()
191 obj->nchains = (nchains = hashtab[1]); in _rtld_digest_dynamic()
192 obj->buckets = hashtab + 2; in _rtld_digest_dynamic()
193 obj->chains = obj->buckets + obj->nbuckets; in _rtld_digest_dynamic()
196 if (!obj->buckets || !nbuckets || !nchains) in _rtld_digest_dynamic()
199 obj->sysv_hash = true; in _rtld_digest_dynamic()
205 fast_divide32_prepare(obj->nbuckets, in _rtld_digest_dynamic()
206 &obj->nbuckets_m, in _rtld_digest_dynamic()
207 &obj->nbuckets_s1, in _rtld_digest_dynamic()
208 &obj->nbuckets_s2); in _rtld_digest_dynamic()
219 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
225 obj->nbuckets_gnu = nbuckets; in _rtld_digest_dynamic()
230 … obj->buckets_gnu = (const uint32_t *)(hashtab + 4 + bloom_size32); in _rtld_digest_dynamic()
235 if (!nmw_power2 || !nbuckets || !obj->buckets_gnu) in _rtld_digest_dynamic()
238 obj->gnu_hash = true; in _rtld_digest_dynamic()
240 obj->mask_bm_gnu = nmaskwords - 1; in _rtld_digest_dynamic()
241 obj->symndx_gnu = (symndx = hashtab[1]); in _rtld_digest_dynamic()
242 obj->shift2_gnu = hashtab[3]; in _rtld_digest_dynamic()
243 obj->bloom_gnu = (const Elf_Addr *)(hashtab + 4); in _rtld_digest_dynamic()
244 obj->chains_gnu = obj->buckets_gnu + nbuckets - symndx; in _rtld_digest_dynamic()
251 &obj->nbuckets_m_gnu, in _rtld_digest_dynamic()
252 &obj->nbuckets_s1_gnu, in _rtld_digest_dynamic()
253 &obj->nbuckets_s2_gnu); in _rtld_digest_dynamic()
259 obj->buckets_gnu, obj->nbuckets_gnu, in _rtld_digest_dynamic()
260 obj->chains_gnu, obj->nchains_gnu, in _rtld_digest_dynamic()
261 obj->bloom_gnu, obj->mask_bm_gnu, in _rtld_digest_dynamic()
262 obj->shift2_gnu, obj->symndx_gnu)); in _rtld_digest_dynamic()
271 nep->obj = NULL; in _rtld_digest_dynamic()
280 obj->pltgot = (Elf_Addr *) in _rtld_digest_dynamic()
281 (obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
285 obj->textrel = true; in _rtld_digest_dynamic()
289 obj->symbolic = true; in _rtld_digest_dynamic()
314 obj->init_array = in _rtld_digest_dynamic()
315 (fptr_t *)(obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
317 obj->init_array)); in _rtld_digest_dynamic()
321 obj->init_arraysz = dynp->d_un.d_val / sizeof(fptr_t); in _rtld_digest_dynamic()
323 obj->init_arraysz)); in _rtld_digest_dynamic()
335 obj->fini_array = in _rtld_digest_dynamic()
336 (fptr_t *)(obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
338 obj->fini_array)); in _rtld_digest_dynamic()
342 obj->fini_arraysz = dynp->d_un.d_val / sizeof(fptr_t); in _rtld_digest_dynamic()
344 obj->fini_arraysz)); in _rtld_digest_dynamic()
365 obj->secureplt = (dynp->d_un.d_val != 0); in _rtld_digest_dynamic()
370 obj->local_gotno = dynp->d_un.d_val; in _rtld_digest_dynamic()
374 obj->symtabno = dynp->d_un.d_val; in _rtld_digest_dynamic()
378 obj->gotsym = dynp->d_un.d_val; in _rtld_digest_dynamic()
419 obj->glink = (Elf_Addr)(uintptr_t)obj->relocbase + dynp->d_un.d_ptr; in _rtld_digest_dynamic()
423 obj->gotptr = (Elf_Addr *)(obj->relocbase + dynp->d_un.d_ptr); in _rtld_digest_dynamic()
428 obj->z_now = in _rtld_digest_dynamic()
430 obj->z_nodelete = in _rtld_digest_dynamic()
432 obj->z_initfirst = in _rtld_digest_dynamic()
434 obj->z_noopen = in _rtld_digest_dynamic()
440 obj->rellim = (const Elf_Rel *)((const uint8_t *)obj->rel + relsz); in _rtld_digest_dynamic()
441 obj->relalim = (const Elf_Rela *)((const uint8_t *)obj->rela + relasz); in _rtld_digest_dynamic()
442 obj->relrlim = (const Elf_Relr *)((const uint8_t *)obj->relr + relrsz); in _rtld_digest_dynamic()
444 obj->pltrel = (const Elf_Rel *)(obj->relocbase + pltrel); in _rtld_digest_dynamic()
445 obj->pltrellim = (const Elf_Rel *)(obj->relocbase + pltrel + pltrelsz); in _rtld_digest_dynamic()
446 obj->pltrelalim = 0; in _rtld_digest_dynamic()
449 if (obj->rellim && obj->pltrel && in _rtld_digest_dynamic()
450 obj->rellim > obj->pltrel && in _rtld_digest_dynamic()
451 obj->rellim <= obj->pltrellim) in _rtld_digest_dynamic()
452 obj->rellim = obj->pltrel; in _rtld_digest_dynamic()
454 obj->pltrela = (const Elf_Rela *)(obj->relocbase + pltrel); in _rtld_digest_dynamic()
455 obj->pltrellim = 0; in _rtld_digest_dynamic()
456 obj->pltrelalim = (const Elf_Rela *)(obj->relocbase + pltrel + pltrelsz); in _rtld_digest_dynamic()
459 if (obj->relalim && obj->pltrela && in _rtld_digest_dynamic()
460 obj->relalim > obj->pltrela && in _rtld_digest_dynamic()
461 obj->relalim <= obj->pltrelalim) in _rtld_digest_dynamic()
462 obj->relalim = obj->pltrela; in _rtld_digest_dynamic()
466 if (!obj->sysv_hash && obj->gnu_hash) { in _rtld_digest_dynamic()
470 nbucket = obj->nbuckets_gnu; in _rtld_digest_dynamic()
471 symndx = obj->symndx_gnu; in _rtld_digest_dynamic()
474 Elf_Word bkt = obj->buckets_gnu[i]; in _rtld_digest_dynamic()
477 const uint32_t *hashval = &obj->chains_gnu[bkt]; in _rtld_digest_dynamic()
482 obj->nchains_gnu = (uint32_t)symndx; in _rtld_digest_dynamic()
488 obj->init = (void (*)(void)) in _rtld_digest_dynamic()
489 _rtld_function_descriptor_alloc(obj, NULL, init); in _rtld_digest_dynamic()
491 obj->fini = (void (*)(void)) in _rtld_digest_dynamic()
492 _rtld_function_descriptor_alloc(obj, NULL, fini); in _rtld_digest_dynamic()
495 obj->init = (void (*)(void)) (obj->relocbase + init); in _rtld_digest_dynamic()
497 obj->fini = (void (*)(void)) (obj->relocbase + fini); in _rtld_digest_dynamic()
502 _rtld_add_paths(execname, &obj->rpaths, obj->strtab + in _rtld_digest_dynamic()
506 _rtld_object_add_name(obj, obj->strtab + in _rtld_digest_dynamic()
521 Obj_Entry *obj; in _rtld_digest_phdr() local
528 obj = _rtld_obj_new(); in _rtld_digest_phdr()
534 obj->relocbase = (caddr_t)((uintptr_t)phdr - (uintptr_t)ph->p_vaddr); in _rtld_digest_phdr()
535 obj->phdr = phdr; /* Equivalent to relocbase + p_vaddr. */ in _rtld_digest_phdr()
536 obj->phsize = ph->p_memsz; in _rtld_digest_phdr()
538 obj->phdr, phdr, obj->phsize, obj->relocbase)); in _rtld_digest_phdr()
543 vaddr = (Elf_Addr)(uintptr_t)(obj->relocbase + ph->p_vaddr); in _rtld_digest_phdr()
547 obj->interp = (const char *)(uintptr_t)vaddr; in _rtld_digest_phdr()
554 size = round_up(vaddr + ph->p_memsz) - obj->vaddrbase; in _rtld_digest_phdr()
556 obj->vaddrbase = round_down(vaddr); in _rtld_digest_phdr()
557 obj->mapbase = (caddr_t)(uintptr_t)obj->vaddrbase; in _rtld_digest_phdr()
558 obj->textsize = size; in _rtld_digest_phdr()
559 obj->mapsize = size; in _rtld_digest_phdr()
562 obj->mapsize = MAX(obj->mapsize, size); in _rtld_digest_phdr()
570 obj->dynamic = (Elf_Dyn *)(uintptr_t)vaddr; in _rtld_digest_phdr()
579 obj->relro_page = obj->relocbase + ph->p_vaddr; in _rtld_digest_phdr()
580 obj->relro_size = ph->p_memsz; in _rtld_digest_phdr()
589 obj->tlsindex = 1; in _rtld_digest_phdr()
590 obj->tlssize = ph->p_memsz; in _rtld_digest_phdr()
591 obj->tlsalign = ph->p_align; in _rtld_digest_phdr()
592 obj->tlsinitsize = ph->p_filesz; in _rtld_digest_phdr()
593 obj->tlsinit = (void *)(obj->relocbase + in _rtld_digest_phdr()
602 obj->exidx_start = (void *)(uintptr_t)vaddr; in _rtld_digest_phdr()
603 obj->exidx_sz = ph->p_memsz; in _rtld_digest_phdr()
612 obj->entry = entry; in _rtld_digest_phdr()
613 return obj; in _rtld_digest_phdr()