Lines Matching refs:scn
138 convert_data (Elf_Scn *scn, int eclass,
146 if (((((size_t) (char *) scn->rawdata_base)) & (align - 1)) == 0)
148 scn->data_base = scn->rawdata_base;
151 scn->data_base = malloc (size);
152 if (scn->data_base == NULL)
159 memcpy (scn->data_base, scn->rawdata_base, size);
166 scn->data_base = malloc (size);
167 if (scn->data_base == NULL)
176 if (((((size_t) (char *) scn->rawdata_base)) & (align - 1)) == 0)
177 rawdata_source = scn->rawdata_base;
188 memcpy (rawdata_source, scn->rawdata_base, size);
194 fp (scn->data_base, rawdata_source, size, 0);
196 if (rawdata_source != scn->rawdata_base)
200 scn->data_list.data.d.d_buf = scn->data_base;
201 scn->data_list.data.d.d_size = size;
202 scn->data_list.data.d.d_type = type;
203 scn->data_list.data.d.d_off = scn->rawdata.d.d_off;
204 scn->data_list.data.d.d_align = scn->rawdata.d.d_align;
205 scn->data_list.data.d.d_version = scn->rawdata.d.d_version;
207 scn->data_list.data.s = scn;
214 __libelf_set_rawdata_wrlock (Elf_Scn *scn)
221 Elf *elf = scn->elf;
226 = scn->shdr.e32 ?: __elf32_getshdr_wrlock (scn);
241 = scn->shdr.e64 ?: __elf64_getshdr_wrlock (scn);
315 scn->rawdata_base = scn->rawdata.d.d_buf
333 scn->rawdata_base = scn->rawdata.d.d_buf = malloc (size);
334 if (scn->rawdata.d.d_buf == NULL)
340 ssize_t n = pread_retry (elf->fildes, scn->rawdata.d.d_buf, size,
345 free (scn->rawdata.d.d_buf);
346 scn->rawdata_base = scn->rawdata.d.d_buf = NULL;
360 scn->rawdata.d.d_size = size;
365 scn->rawdata.d.d_type = ELF_T_CHDR;
372 scn->rawdata.d.d_type = __libelf_data_type (ehdr, type, align);
374 scn->rawdata.d.d_off = 0;
400 scn->rawdata.d.d_align = align;
404 scn->rawdata.d.d_version =
407 scn->rawdata.d.d_version =
410 scn->rawdata.s = scn;
412 scn->data_read = 1;
415 scn->flags |= ELF_F_FILEDATA;
422 __libelf_set_rawdata (Elf_Scn *scn)
426 if (scn == NULL)
429 rwlock_wrlock (scn->elf->lock);
430 result = __libelf_set_rawdata_wrlock (scn);
431 rwlock_unlock (scn->elf->lock);
438 __libelf_set_data_list_rdlock (Elf_Scn *scn, int wrlocked)
440 if (scn->rawdata.d.d_buf != NULL && scn->rawdata.d.d_size > 0)
442 Elf *elf = scn->elf;
450 if (scn->data_list_rear != NULL)
455 convert_data (scn, elf->class,
461 scn->rawdata.d.d_size, scn->rawdata.d.d_type);
467 scn->data_list.data.d = scn->rawdata.d;
468 scn->data_list.data.s = scn;
471 scn->data_list_rear = &scn->data_list;
476 __elf_getdata_rdlock (Elf_Scn *scn, Elf_Data *data)
482 if (scn == NULL)
485 if (unlikely (scn->elf->kind != ELF_K_ELF))
492 elf = scn->elf;
506 if (scn->data_list_rear == NULL
509 || unlikely (((Elf_Data_Scn *) data)->s != scn))
516 runp = &scn->data_list;
540 if (scn->data_read == 0)
553 if (scn->data_read == 0 && __libelf_set_rawdata_wrlock (scn) != 0)
561 if (scn->data_list_rear == NULL)
562 __libelf_set_data_list_rdlock (scn, locked);
565 result = &scn->data_list.data.d;
572 elf_getdata (Elf_Scn *scn, Elf_Data *data)
576 if (scn == NULL)
579 rwlock_rdlock (scn->elf->lock);
580 result = __elf_getdata_rdlock (scn, data);
581 rwlock_unlock (scn->elf->lock);