Home | History | Annotate | Download | only in elfcopy

Lines Matching refs:shdr

90 static bool section_belongs_to_header(GElf_Shdr *shdr, GElf_Phdr *phdr);
186 shdr_info[shdridx].shdr.sh_type = SHT_STRTAB;
187 shdr_info[shdridx].shdr.sh_flags = 0;
188 shdr_info[shdridx].shdr.sh_addr = 0;
189 shdr_info[shdridx].shdr.sh_link = SHN_UNDEF;
190 shdr_info[shdridx].shdr.sh_info = SHN_UNDEF;
191 shdr_info[shdridx].shdr.sh_entsize = 0;
193 shdr_info[shdridx].shdr.sh_offset = shdr_info[shdridx].old_shdr.sh_offset;
194 shdr_info[shdridx].shdr.sh_addralign = 1;
210 shdr_info[shdridx].shdr.sh_size = (*shstrtab_data)->d_size;
250 shdr_info[cnt].shdr.sh_addr,
251 shdr_info[cnt].shdr.sh_offset,
252 shdr_info[cnt].shdr.sh_size,
253 shdr_info[cnt].shdr.sh_addralign);
264 shdr_info[cnt].shdr.sh_name);
265 shdr_info[cnt].shdr.sh_name = new_sh_name;
270 if (shdr_info[cnt].shdr.sh_link != 0) {
272 shdr_info[shdr_info[cnt].shdr.sh_link].idx,
273 shdr_info[cnt].shdr.sh_link);
275 shdr_info[cnt].shdr.sh_link =
276 shdr_info[shdr_info[cnt].shdr.sh_link].idx;
280 if (SH_INFO_LINK_P (&shdr_info[cnt].shdr)) {
282 shdr_info[shdr_info[cnt].shdr.sh_info].idx,
283 shdr_info[cnt].shdr.sh_info);
285 shdr_info[cnt].shdr.sh_info =
286 shdr_info[shdr_info[cnt].shdr.sh_info].idx;
297 shdr_info[cnt].shdr.sh_size = shdr_info[cnt].data->d_size;
333 ASSERT(shdr_info[dynamic_idx].shdr.sh_link ==
334 shdr_info[dynsym_idx].shdr.sh_link);
338 if(shdr_info[cnt].shdr.sh_type == SHT_DYNSYM)
571 shdr_info[cnt].shdr.sh_info =
574 else shdr_info[cnt].shdr.sh_info = 0;
596 shdr_info[cnt].shdr.sh_size);
597 shdr_info[cnt].shdr.sh_size = newdata->d_size = destidx * elsize;
606 visited_dynsym = shdr_info[cnt].shdr.sh_type == SHT_DYNSYM;
609 else if (shdr_info[cnt].shdr.sh_type == SHT_DYNAMIC) {
671 shdr_info[cnt].shdr.sh_size);
673 FAILIF(!gelf_update_shdr (scn, &shdr_info[cnt].shdr),
692 if (shdr_info[cnt].shdr.sh_type != SHT_REL &&
693 shdr_info[cnt].shdr.sh_type != SHT_RELA) {
698 if (shdr_info[cnt].shdr.sh_type == SHT_REL ||
699 shdr_info[cnt].shdr.sh_type == SHT_RELA) {
709 alrhough shdr_info[cnt].shdr refers to the updated section
715 shdr_info[shdr_info[cnt].shdr.sh_link].shdr.sh_type;
733 } else if (shdr_info[cnt].shdr.sh_type == SHT_HASH) {
745 FAILIF(shdr_info[cnt].shdr.sh_entsize != sizeof (Elf32_Word),
753 else if (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM)
760 shdr_info[cnt].shdr.
783 FAILIF(new_symstrndx != shdr_info[cnt].shdr.sh_link,
787 shdr_info[cnt].shdr.sh_link);
792 shdr_info[symstrndx].shdr.sh_size = newdata->d_size;
794 &shdr_info[symstrndx].shdr),
802 for (i = 1; i < shdr_info[cnt].shdr.sh_size / elsize; ++i) {
850 FAILIF(shdr_info[cnt].shdr.sh_type == SHT_GNU_versym,
852 FAILIF(shdr_info[cnt].shdr.sh_type == SHT_GROUP,
973 shdr_info[i].shdr.sh_entsize,
974 shdr_info[i].shdr.sh_addralign,
986 shdr_info[i].shdr.sh_entsize);
1136 (shdr_info[cnt].shdr.sh_type == SHT_REL ||
1137 shdr_info[cnt].shdr.sh_type == SHT_RELA))
1226 GElf_Shdr shdr_mem, *shdr = NULL;
1266 shdr = gelf_getshdr (hashscn, &shdr_mem);
1267 ASSERT(shdr->sh_type == SHT_HASH);
1268 shdr->sh_size = (2 + symd->d_size / elsize + nbucket) * sizeof (Elf32_Word);
1270 shdr->sh_size,
1272 hashd->d_size = shdr->sh_size;
1273 (void)gelf_update_shdr (hashscn, shdr);
1281 for (inner = symtab_info->shdr.sh_info;
1323 ASSERT (d->d_size == relsect_info->shdr.sh_size);
1328 relsect_info->shdr.sh_size / relsect_info->shdr.sh_entsize;
1337 d->d_size = old_nrels * relsect_info->shdr.sh_entsize;
1355 if (relsect_info->shdr.sh_type == SHT_REL) {
1372 relsect_info->shdr.sh_info);
1394 relsect_info->shdr.sh_info);
1403 relsect_info->shdr.sh_size,
1404 relsect_info->shdr.sh_entsize * newidx,
1408 d->d_size = relsect_info->shdr.sh_size =
1409 relsect_info->shdr.sh_entsize * newidx;
1413 info[relsect_info->shdr.sh_info].name,
1414 relsect_info->shdr.sh_info,
1415 info[relsect_info->shdr.sh_link].name,
1416 relsect_info->shdr.sh_link);
1420 d->d_size = new_nrels * relsect_info->shdr.sh_entsize;
1433 if (d->d_size != relsect_info->shdr.sh_size) {
1442 relsect_info->shdr.sh_size,
1444 ASSERT((relsect_info->shdr.sh_type == SHT_REL || relsect_info->shdr.sh_type == SHT_RELA) &&
1451 relsect_info->shdr.sh_size / relsect_info->shdr.sh_entsize;
1460 d->d_size = old_nrels * relsect_info->shdr.sh_entsize;
1491 FAILIF(relsect_info->shdr.sh_type == SHT_RELA,
1494 if (relsect_info->shdr.sh_type == SHT_REL) {
1509 /* relsect_info->shdr.sh_link is the index of the associated
1511 sym = gelf_getsymshndx(info[relsect_info->shdr.sh_link].data,
1516 /* info[relsect_info->shdr.sh_link].shdr.sh_link is the index
1520 info[relsect_info->shdr.sh_link].shdr.sh_link,
1570 ASSERT(old_range_info->shdr.sh_addr == old_range_info->shdr.sh_offset);
1574 old_range_info->shdr.sh_addr - old_range_info->old_shdr.sh_addr;
1582 Elf64_Word symtab = relsect_info->shdr.sh_link;
1611 info[symtab].shdr.sh_link,
1635 old_range_info->shdr.sh_addr));
1646 d->d_size = new_nrels * relsect_info->shdr.sh_entsize;
1710 shdr_info[scnidx].shdr.sh_addr,
1714 dyn->d_un.d_ptr = shdr_info[scnidx].shdr.sh_addr;
1762 shdr_info[scnidx].shdr.sh_size contains that new value.
1777 shdr_info[scnidx].shdr.sh_size,
1781 szdyn->d_un.d_val = shdr_info[scnidx].shdr.sh_size;
1814 shdr_info[dynidx].shdr.sh_size/shdr_info[dynidx].shdr.sh_entsize,
1819 cnt < shdr_info[dynidx].shdr.sh_size/shdr_info[dynidx].shdr.sh_entsize;
1837 shdr_info[dynidx].shdr.sh_link,
1855 ASSERT(shdr_info[symtabidx].shdr.sh_link ==
1856 shdr_info[dynidx].shdr.sh_link);
1917 for (cnt = 0; cnt < shdr_info[dynidx].shdr.sh_size / shdr_info[dynidx].shdr.sh_entsize; ++cnt) {
1998 shdr_info[dyn_size_entries[dyn->d_tag]].shdr.sh_size,
2002 shdr_info[dyn_size_entries[dyn->d_tag]].shdr.sh_size;
2030 shdr_info[dynidx].shdr.sh_link,
2041 shdr_info[dynidx].shdr.sh_link,
2094 static bool section_belongs_to_header(GElf_Shdr *shdr, GElf_Phdr *phdr)
2096 if (shdr->sh_size) {
2099 if(shdr->sh_flags & SHF_ALLOC) {
2100 if(shdr->sh_addr >= phdr->p_vaddr
2101 && (shdr->sh_addr + shdr->sh_size
2108 if (shdr->sh_offset >= phdr->p_offset
2109 && (shdr->sh_offset + shdr->sh_size
2151 if ((shdr_info[inner].shdr.sh_flags & SHF_ALLOC)) {
2152 if (SECT_MEM_END(shdr_info[inner].shdr) > *mem_end) {
2153 INFO("(mem_end 0x%llx --> 0x%llx) ", *mem_end, SECT_MEM_END(shdr_info[inner].shdr));
2154 *mem_end = SECT_MEM_END(shdr_info[inner].shdr);
2158 if (shdr_info[inner].shdr.sh_type != SHT_NOBITS) {
2159 if (SECT_FILE_END(shdr_info[inner].shdr) > *file_end) {
2160 INFO("(file_end 0x%llx --> 0x%llx) ", *file_end, SECT_FILE_END(shdr_info[inner].shdr));
2161 *file_end = SECT_FILE_END(shdr_info[inner].shdr);
2165 if (shdr_info[inner].shdr.sh_offset < start) {
2166 start = shdr_info[inner].shdr.sh_offset;
2197 (shdr_info[i].shdr.sh_type == SHT_SYMTAB ||
2198 shdr_info[i].shdr.sh_type == SHT_DYNSYM))
2209 shdr_info[i].shdr.sh_link);
2217 Elf_Scn *symstrscn = elf_getscn(newelf, shdr_info[i].shdr.sh_link);
2240 if (shdr_info[i].shdr.sh_type == SHT_SYMTAB) {
2259 Elf_Scn *symstrscn = elf_getscn(newelf, shdr_info[i].shdr.sh_link);
2266 shdr_info[i].shdr.sh_link,
2335 shdr_info[dynamic_idx].shdr.sh_addr,
2337 shdr_info[dynamic_idx].shdr.sh_size,
2340 shdr_info[dynamic_idx].shdr.sh_addr;
2342 shdr_info[dynamic_idx].shdr.sh_size;
2357 if (shdr_info[scnidx].shdr.sh_addr !=
2365 shdr_info[scnidx].shdr.sh_addr);
2366 sym->st_value = shdr_info[scnidx].shdr.sh_addr;
2376 shdr_info[scnidx].shdr.sh_addr +
2377 shdr_info[scnidx].shdr.sh_size;
2435 shdr_info[scnidx].shdr.sh_offset -
2440 shdr_info[scnidx].shdr.sh_addr -
2459 ASSERT(!(shdr_info[sym->st_shndx].shdr.sh_flags & SHF_ALLOC));
2460 ASSERT(shdr_info[i].shdr.sh_type == SHT_SYMTAB);
2506 ASSERT(((Elf64_Sxword)shdr_info->shdr.sh_offset) + delta >= 0);
2507 shdr_info->shdr.sh_offset += delta;
2508 ASSERT(shdr_info->shdr.sh_addralign);
2517 if (shdr_info->shdr.sh_type != SHT_NOBITS)
2519 Elf64_Off new_offset = shdr_info->shdr.sh_offset;
2520 new_offset += shdr_info->shdr.sh_addralign - 1;
2521 new_offset &= ~((GElf_Off)(shdr_info->shdr.sh_addralign - 1));
2523 ASSERT(shdr_info->shdr.sh_offset == new_offset);
2528 shdr_info->shdr.sh_offset,
2530 shdr_info->shdr.sh_offset ? " (SAME)" : ""));
2534 Note that we compare against the old_shdr.sh_offset because we just modified shdr.sh_offset!
2538 !(shdr_info->shdr.sh_flags & SHF_ALLOC) ||
2539 shdr_info->shdr.sh_type == SHT_NOBITS ||
2540 shdr_info->shdr.sh_addr == shdr_info->old_shdr.sh_offset);
2542 if ((shdr_info->shdr.sh_flags & SHF_ALLOC) == SHF_ALLOC)
2544 ASSERT(shdr_info->shdr.sh_addr);
2545 shdr_info->shdr.sh_addr += delta;
2548 shdr_info->shdr.sh_addr,
2550 shdr_info->shdr.sh_addr ? " (SAME)" : ""));
2556 shdr_info->shdr.sh_size);
2557 FAILIF(!gelf_update_shdr (scn, &shdr_info->shdr),
2580 ((shdr_info[end].shdr.sh_flags & SHF_ALLOC) == SHF_ALLOC) &&
2581 ((shdr_info[end].shdr.sh_type == SHT_PROGBITS) ||
2582 (shdr_info[end].shdr.sh_type == SHT_INIT_ARRAY) ||
2583 (shdr_info[end].shdr.sh_type == SHT_FINI_ARRAY) ||
2584 (shdr_info[end].shdr.sh_type == SHT_PREINIT_ARRAY) ||
2585 /* (shdr_info[end].shdr.sh_type == SHT_NOBITS) || */
2592 (shdr_info[end].shdr.sh_type == SHT_DYNAMIC)))
2609 if (shdr_info->shdr.sh_type != SHT_NOBITS) {
2615 shdr_info->shdr.sh_offset,
2616 shdr_info->shdr.sh_size,
2621 filesz = shdr_info->shdr.sh_size;
2625 if (offset < shdr_info->shdr.sh_offset + filesz) {
2626 offset = shdr_info->shdr.sh_offset + filesz;
2653 Elf64_Sxword delta = offset - shdr_info[start].shdr.sh_offset;
2658 if (adjust_alloc_section_offsets || (shdr_info[start].shdr.sh_flags & SHF_ALLOC) != SHF_ALLOC) {
2716 max_align[si] = shdr_info[si].shdr.sh_addralign;
2937 addralign = shdr_info[si].shdr.sh_addralign;
2939 if (shdr_info[si].shdr.sh_flags & SHF_ALLOC) {
2940 FAILIF ((addralign - 1) & shdr_info[si].shdr.sh_addr,
2943 (long long unsigned) shdr_info[si].shdr.sh_addr,
2948 if (shdr_info[si].shdr.sh_type != SHT_NOBITS) {
2949 FAILIF ((addralign - 1) & shdr_info[si].shdr.sh_offset,
2952 shdr_info[si].shdr.sh_offset,
2963 FAILIF (sections_overlap_p (&shdr_info[si].shdr,
2964 &shdr_info[sj].shdr),
2974 f_size = file_overlap_size (&shdr_info[si].shdr, &phdr_info[pi]);
2975 m_size = mem_overlap_size (&shdr_info[si].shdr, &phdr_info[pi]);
2978 FAILIF (shdr_info[si].shdr.sh_size > phdr_info[pi].p_filesz,
2981 FAILIF (f_size != shdr_info[si].shdr.sh_size,
2987 FAILIF (shdr_info[si].shdr.sh_size > phdr_info[pi].p_memsz,
2990 FAILIF (m_size != shdr_info[si].shdr.sh_size,