Lines Matching defs:object

63 _dl_handle_nodelete(elf_object_t *object)
68 * XXX It would be better if we tracked inter-object dependencies
72 if (object->obj_flags & DF_1_NODELETE &&
73 (object->load_object->status & STAT_NODELETE) == 0) {
74 DL_DEB(("objname %s is nodelete\n", object->load_name));
75 object->load_object->opencount++;
76 object->load_object->status |= STAT_NODELETE;
81 * Add a new dynamic object to the object list.
84 _dl_add_object(elf_object_t *object)
86 _dl_handle_nodelete(object);
89 * if this is a new object, prev will be NULL
90 * != NULL if an object already in the list
94 if (object->prev != NULL)
97 if (_dl_objects == NULL) { /* First object ? */
98 _dl_last_object = _dl_objects = object;
101 _dl_last_object->next = object;
102 object->prev = _dl_last_object;
103 _dl_last_object = object;
104 if (object->obj_type != OBJTYPE_LDR) /* see above */
138 _dl_origin_subst_path(elf_object_t *object, const char *origin_path,
226 * Determine origin_path from object load_name. The origin_path argument
231 _dl_origin_path(elf_object_t *object, char *origin_path)
236 if (_dl___realpath(object->load_name, origin_path) < 0)
252 _dl_origin_subst(elf_object_t *object)
257 if (_dl_origin_path(object, origin_path) != 0)
261 if (object->runpath != NULL) {
262 for (pp = object->runpath; *pp != NULL; pp++)
263 _dl_origin_subst_path(object, origin_path, pp);
265 if (object->rpath != NULL) {
266 for (pp = object->rpath; *pp != NULL; pp++)
267 _dl_origin_subst_path(object, origin_path, pp);
272 * Initialize a new dynamic object.
278 elf_object_t *object;
284 object = _dl_calloc(1, sizeof(elf_object_t));
285 if (object == NULL)
287 object->prev = object->next = NULL;
289 object->load_dyn = dynp;
292 object->Dyn.info[dynp->d_tag] = dynp->d_un.d_val;
295 object->Dyn.info[dynp->d_tag + DT_NUM - DT_LOPROC] =
298 object->dyn.textrel = 1;
300 object->dyn.symbolic = 1;
302 object->obj_flags |= DF_1_NOW;
304 object->obj_flags |= dynp->d_un.d_val;
306 object->dyn.flags |= dynp->d_un.d_val;
308 object->dyn.symbolic = 1;
310 object->dyn.textrel = 1;
312 object->obj_flags |= DF_1_ORIGIN;
314 object->obj_flags |= DF_1_NOW;
317 object->relacount = dynp->d_un.d_val;
319 object->relcount = dynp->d_un.d_val;
324 DL_DEB((" flags %s = 0x%x\n", objname, object->obj_flags));
325 object->obj_type = objtype;
329 * no loading object, object is the loading object,
332 _dl_loading_object = object;
335 if ((object->obj_flags & DF_1_NOOPEN) != 0 &&
338 _dl_free(object);
347 if (object->Dyn.info[DT_PLTGOT])
348 object->Dyn.info[DT_PLTGOT] += obase;
349 if (object->Dyn.info[DT_STRTAB])
350 object->Dyn.info[DT_STRTAB] += obase;
351 if (object->Dyn.info[DT_SYMTAB])
352 object->Dyn.info[DT_SYMTAB] += obase;
353 if (object->Dyn.info[DT_RELA])
354 object->Dyn.info[DT_RELA] += obase;
355 if (object->Dyn.info[DT_SONAME])
356 object->Dyn.info[DT_SONAME] += object->Dyn.info[DT_STRTAB];
357 if (object->Dyn.info[DT_RPATH])
358 object->Dyn.info[DT_RPATH] += object->Dyn.info[DT_STRTAB];
359 if (object->Dyn.info[DT_RUNPATH])
360 object->Dyn.info[DT_RUNPATH] += object->Dyn.info[DT_STRTAB];
361 if (object->Dyn.info[DT_REL])
362 object->Dyn.info[DT_REL] += obase;
363 if (object->Dyn.info[DT_INIT])
364 object->Dyn.info[DT_INIT] += obase;
365 if (object->Dyn.info[DT_FINI])
366 object->Dyn.info[DT_FINI] += obase;
367 if (object->Dyn.info[DT_JMPREL])
368 object->Dyn.info[DT_JMPREL] += obase;
369 if (object->Dyn.info[DT_INIT_ARRAY])
370 object->Dyn.info[DT_INIT_ARRAY] += obase;
371 if (object->Dyn.info[DT_FINI_ARRAY])
372 object->Dyn.info[DT_FINI_ARRAY] += obase;
373 if (object->Dyn.info[DT_PREINIT_ARRAY])
374 object->Dyn.info[DT_PREINIT_ARRAY] += obase;
375 if (object->Dyn.info[DT_RELR])
376 object->Dyn.info[DT_RELR] += obase;
388 object->nbuckets = nbuckets;
389 object->symndx_gnu = symndx;
390 object->mask_bm_gnu = nmaskwords - 1;
391 object->shift2_gnu = hashtab[3];
392 object->bloom_gnu = (Elf_Addr *)(hashtab + 4);
393 object->buckets_gnu = hashtab + 4 + bloom_size32;
394 object->chains_gnu = object->buckets_gnu + nbuckets
402 if (object->Dyn.info[DT_HASH] == 0) {
406 Elf_Word bkt = object->buckets_gnu[n];
410 hashval = &object->chains_gnu[bkt];
415 object->nchains = symndx;
417 object->status |= STAT_GNU_HASH;
420 if (object->Dyn.info[DT_HASH] != 0) {
422 (Elf_Hash_Word *)(object->Dyn.info[DT_HASH] + obase);
424 object->nchains = hashtab[1];
425 if (object->nbuckets == 0) {
426 object->nbuckets = hashtab[0];
427 object->buckets_elf = hashtab + 2;
428 object->chains_elf = object->buckets_elf +
429 object->nbuckets;
433 object->phdrp = phdrp;
434 object->phdrc = phdrc;
435 object->load_base = lbase;
436 object->obj_base = obase;
437 object->load_name = _dl_strdup(objname);
438 if (object->load_name == NULL)
440 object->load_object = _dl_loading_object;
441 if (object->load_object == object)
442 DL_DEB(("head %s\n", object->load_name));
443 DL_DEB(("obj %s has %s as head\n", object->load_name,
445 object->refcount = 0;
446 object->opencount = 0; /* # dlopen() & exe */
447 object->grprefcount = 0;
449 object->dev = 0;
450 object->inode = 0;
451 object->grpsym_gen = 0;
452 TAILQ_INIT(&object->grpref_list);
454 if (object->dyn.runpath)
455 object->runpath = _dl_split_path(object->dyn.runpath);
461 if (object->dyn.rpath && (object->runpath == NULL ||
463 object->rpath = _dl_split_path(object->dyn.rpath);
464 if ((object->obj_flags & DF_1_ORIGIN) && _dl_trust)
465 _dl_origin_subst(object);
467 _dl_trace_object_setup(object);
469 return (object);
519 _dl_remove_object(elf_object_t *object)
521 object->prev->next = object->next;
522 if (object->next)
523 object->next->prev = object->prev;
525 if (_dl_last_object == object)
526 _dl_last_object = object->prev;
529 object->next = free_objects;
530 free_objects = object;
577 /* done with this object, but need to check other objects */
672 /* weak definition in the specified object is good enough */