Home | History | Annotate | Download | only in ld.elf_so

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