Home | History | Annotate | Download | only in libelf

Lines Matching refs:scn

139 convert_data (Elf_Scn *scn, int version __attribute__ ((unused)), int eclass,
146 if (((((size_t) (char *) scn->rawdata_base)) & (align - 1)) == 0)
148 scn->data_base = scn->rawdata_base;
151 scn->data_base = (char *) malloc (size);
152 if (scn->data_base == NULL)
159 memcpy (scn->data_base, scn->rawdata_base, size);
166 scn->data_base = (char *) malloc (size);
167 if (scn->data_base == NULL)
177 ((((size_t) (char *) scn->rawdata_base)) & (align - 1)) == 0)
178 rawdata_source = scn->rawdata_base;
189 memcpy (rawdata_source, scn->rawdata_base, size);
199 fp (scn->data_base, rawdata_source, size, 0);
201 if (rawdata_source != scn->rawdata_base)
205 scn->data_list.data.d.d_buf = scn->data_base;
206 scn->data_list.data.d.d_size = size;
207 scn->data_list.data.d.d_type = type;
208 scn->data_list.data.d.d_off = scn->rawdata.d.d_off;
209 scn->data_list.data.d.d_align = scn->rawdata.d.d_align;
210 scn->data_list.data.d.d_version = scn->rawdata.d.d_version;
212 scn->data_list.data.s = scn;
219 __libelf_set_rawdata_wrlock (Elf_Scn *scn)
226 Elf *elf = scn->elf;
231 = scn->shdr.e32 ?: __elf32_getshdr_wrlock (scn);
246 = scn->shdr.e64 ?: __elf64_getshdr_wrlock (scn);
310 scn->rawdata_base = scn->rawdata.d.d_buf
317 scn->rawdata_base = scn->rawdata.d.d_buf
319 if (scn->rawdata.d.d_buf == NULL)
325 ssize_t n = pread_retry (elf->fildes, scn->rawdata.d.d_buf, size,
330 free (scn->rawdata.d.d_buf);
331 scn->rawdata_base = scn->rawdata.d.d_buf = NULL;
345 scn->rawdata.d.d_size = size;
350 scn->rawdata.d.d_type = ELF_T_CHDR;
352 scn->rawdata.d.d_type = __libelf_data_type (elf, type);
353 scn->rawdata.d.d_off = 0;
368 scn->rawdata.d.d_align = align;
372 scn->rawdata.d.d_version =
375 scn->rawdata.d.d_version =
378 scn->rawdata.s = scn;
380 scn->data_read = 1;
383 scn->flags |= ELF_F_FILEDATA;
390 __libelf_set_rawdata (Elf_Scn *scn)
394 if (scn == NULL)
397 rwlock_wrlock (scn->elf->lock);
398 result = __libelf_set_rawdata_wrlock (scn);
399 rwlock_unlock (scn->elf->lock);
406 __libelf_set_data_list_rdlock (Elf_Scn *scn, int wrlocked)
408 if (scn->rawdata.d.d_buf != NULL && scn->rawdata.d.d_size > 0)
410 Elf *elf = scn->elf;
418 if (scn->data_list_rear != NULL)
423 convert_data (scn, __libelf_version, elf->class,
429 scn->rawdata.d.d_size, scn->rawdata.d.d_type);
435 scn->data_list.data.d = scn->rawdata.d;
436 scn->data_list.data.s = scn;
439 scn->data_list_rear = &scn->data_list;
444 __elf_getdata_rdlock (Elf_Scn *scn, Elf_Data *data)
450 if (scn == NULL)
453 if (unlikely (scn->elf->kind != ELF_K_ELF))
460 elf = scn->elf;
474 if (scn->data_list_rear == NULL
477 || unlikely (((Elf_Data_Scn *) data)->s != scn))
484 runp = &scn->data_list;
508 if (scn->data_read == 0)
521 if (scn->data_read == 0 && __libelf_set_rawdata_wrlock (scn) != 0)
529 if (scn->data_list_rear == NULL)
530 __libelf_set_data_list_rdlock (scn, locked);
533 result = &scn->data_list.data.d;
540 elf_getdata (Elf_Scn *scn, Elf_Data *data)
544 if (scn == NULL)
547 rwlock_rdlock (scn->elf->lock);
548 scn, data);
549 rwlock_unlock (scn->elf->lock);