Lines Matching refs:shdr

95 				GElf_Shdr *shdr, int idx);
302 GElf_Shdr *shdr;
308 shdr = gelf_getshdr (elf_getscn (ebl->elf, idx), &shdr_mem);
309 if (shdr == NULL)
312 ret = elf_strptr (ebl->elf, shstrndx, shdr->sh_name);
432 GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
433 if (shdr != NULL)
436 if (shdr->sh_size == 0)
440 shnum = shdr->sh_size;
449 GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
450 if (shdr != NULL && shdr->sh_link < shnum)
451 shstrndx = shdr->sh_link;
481 GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
482 if (shdr != NULL)
485 if (shdr->sh_info < PN_XNUM)
489 phnum = shdr->sh_info;
564 GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
565 if (shdr == NULL)
571 if (shdr->sh_type != SHT_GROUP)
602 check_symtab (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
615 GElf_Shdr *strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
623 shdr->sh_link, section_name (ebl, shdr->sh_link),
656 if (shdr->sh_entsize != sh_entsize)
660 else if (shdr->sh_info > shdr->sh_size / sh_entsize)
698 for (size_t cnt = 1; cnt < shdr->sh_size / sh_entsize; ++cnt)
717 name = elf_strptr (ebl->elf, shdr->sh_link, sym->st_name);
775 if (cnt < shdr->sh_info)
923 if (cnt >= shdr->sh_info)
930 if (cnt < shdr->sh_info)
1061 && shdr->sh_type == SHT_DYNSYM)
1075 is_rel_dyn (Ebl *ebl, const GElf_Ehdr *ehdr, int idx, const GElf_Shdr *shdr,
1128 if (shdr->sh_entsize != 0
1129 && dyn->d_un.d_val > (shdr->sh_size
1130 / shdr->sh_entsize))
1140 if (reldata != NULL && shdr->sh_entsize != 0)
1142 inner < shdr->sh_size / shdr->sh_entsize;
1182 if (shdr->sh_entsize != 0
1183 && dyn->d_un.d_val > shdr->sh_size / shdr->sh_entsize)
1193 if (reldata != NULL && shdr->sh_entsize != 0)
1195 inner < shdr->sh_size / shdr->sh_entsize;
1249 check_reloc_shdr (Ebl *ebl, const GElf_Ehdr *ehdr, const GElf_Shdr *shdr,
1256 if (shdr->sh_info >= shnum)
1259 else if (shdr->sh_info != 0)
1261 *destshdrp = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_info),
1267 reldyn = is_rel_dyn (ebl, ehdr, idx, shdr, true);
1276 if (shdr->sh_info != 0)
1292 if (shdr->sh_entsize != sh_entsize)
1492 check_rela (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
1506 bool reldyn = check_reloc_shdr (ebl, ehdr, shdr, idx, ELF_T_RELA, &destshdr,
1509 Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
1516 for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt)
1528 check_one_reloc (ebl, ehdr, shdr, idx, cnt, symshdr, symdata,
1543 check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
1557 bool reldyn = check_reloc_shdr (ebl, ehdr, shdr, idx, ELF_T_REL, &destshdr,
1560 Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
1567 for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt)
1579 check_one_reloc (ebl, ehdr, shdr, idx, cnt, symshdr, symdata,
1598 check_dynamic (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
1659 strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &strshdr_mem);
1663 shdr->sh_link, section_name (ebl, shdr->sh_link),
1669 shdr->sh_link, idx, section_name (ebl, idx));
1674 if (shdr->sh_entsize != sh_entsize)
1679 if (shdr->sh_info != 0)
1684 for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt)
1760 shdr->sh_link, section_name (ebl, shdr->sh_link));
1820 shdr->sh_link, section_name (ebl, shdr->sh_link));
1929 check_symtab_shndx (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
1939 Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
1949 idx, section_name (ebl, idx), shdr->sh_link);
1954 if (shdr->sh_entsize != sizeof (Elf32_Word))
1960 && shdr->sh_entsize != 0
1962 && (shdr->sh_size / shdr->sh_entsize
1968 if (shdr->sh_info != 0)
1977 && rshdr->sh_link == shdr->sh_link)
2023 check_sysv_hash (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, int idx,
2029 if (shdr->sh_size < (2ULL + nbucket + nchain) * sizeof (Elf32_Word))
2033 idx, section_name (ebl, idx), (long int) shdr->sh_size,
2052 Elf32_Word *end = (Elf32_Word *) ((char *) data->d_buf + shdr->sh_size);
2077 check_sysv_hash64 (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, int idx,
2083 uint64_t maxwords = shdr->sh_size / sizeof (Elf64_Xword);
2090 idx, section_name (ebl, idx), (long int) shdr->sh_size,
2109 Elf64_Xword *end = (Elf64_Xword *) ((char *) data->d_buf + shdr->sh_size);
2134 check_gnu_hash (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, int idx,
2169 idx, section_name (ebl, idx), (long int) shdr->sh_size,
2182 size_t maxidx = shdr->sh_size / sizeof (Elf32_Word) - (4 + bitmask_words
2189 Elf_Data *symdata = elf_getdata (elf_getscn (ebl->elf, shdr->sh_link), NULL);
2303 check_hash (int tag, Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
2322 GElf_Shdr *symshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
2331 idx, section_name (ebl, idx), shdr->sh_link);
2338 if (shdr->sh_entsize != expect_entsize)
2343 if ((shdr->sh_flags & SHF_ALLOC) == 0)
2347 if (shdr->sh_size < (tag == SHT_GNU_HASH ? 4 : 2) * (expect_entsize ?: 4))
2359 check_sysv_hash64 (ebl, shdr, data, idx, symshdr);
2361 check_sysv_hash (ebl, shdr, data, idx, symshdr);
2365 check_gnu_hash (ebl, shdr, data, idx, symshdr);
2601 check_null (Ebl *ebl, GElf_Shdr *shdr, int idx)
2604 if (extra && shdr->sh_##name != 0) \
2621 check_group (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
2632 Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
2645 if (shdr->sh_info >= symshdr->sh_size / gelf_fsize (ebl->elf, ELF_T_SYM,
2651 if (shdr->sh_flags != 0)
2656 GElf_Sym *sym = gelf_getsym (elf_getdata (symscn, NULL), shdr->sh_info,
2673 && shdr->sh_entsize != elf32_fsize (ELF_T_WORD, 1, EV_CURRENT))
2836 GElf_Shdr *shdr = NULL;
2839 shdr = gelf_getshdr (scn, &shdr_mem);
2840 if (shdr != NULL
2841 && (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA)
2842 && shdr->sh_link == symscnndx)
2851 if (data == NULL || shdr->sh_entsize == 0)
2854 if (shdr->sh_type == SHT_REL)
2855 for (int i = 0; (size_t) i < shdr->sh_size / shdr->sh_entsize; ++i)
2867 for (int i = 0; (size_t) i < shdr->sh_size / shdr->sh_entsize; ++i)
2887 GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, shndx), &shdr_mem);
2888 return shdr != NULL && shdr->sh_type == SHT_NOBITS;
2934 GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
2935 if (shdr == NULL)
2947 Elf_Scn *symscn = elf_getscn (ebl->elf, shdr->sh_link);
2959 shdr->sh_link, section_name (ebl, shdr->sh_link));
2965 if (shdr->sh_entsize != 0 && symshdr->sh_entsize != 0
2966 && (shdr->sh_size / shdr->sh_entsize
2971 shdr->sh_link, section_name (ebl, shdr->sh_link));
2974 if (symdata == NULL || shdr->sh_entsize == 0)
2978 for (int cnt = 1; (size_t) cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
3035 if (!has_copy_reloc (ebl, shdr->sh_link, cnt)
3063 GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
3065 if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC
3066 && data != NULL && shdr->sh_entsize != 0)
3067 for (size_t j = 0; j < shdr->sh_size / shdr->sh_entsize; ++j)
3073 const char *str = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val);
3087 check_verneed (Ebl *ebl, GElf_Shdr *shdr, int idx)
3093 GElf_Shdr *strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
3110 for (Elf64_Word cnt = shdr->sh_info; cnt > 0; )
3136 const char *libname = elf_strptr (ebl->elf, shdr->sh_link,
3164 const char *verstr = elf_strptr (ebl->elf, shdr->sh_link,
3234 check_verdef (Ebl *ebl, GElf_Shdr *shdr, int idx)
3240 GElf_Shdr *strshdr = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
3271 for (Elf64_Word cnt = shdr->sh_info; cnt > 0; )
3318 const char *name = elf_strptr (ebl->elf, shdr->sh_link, aux->vda_name);
3353 name = elf_strptr (ebl->elf, shdr->sh_link, aux->vda_name);
3443 check_attributes (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
3445 if (shdr->sh_size == 0)
3713 GElf_Shdr *shdr = gelf_getshdr (elf_getscn (ebl->elf, 0), &shdr_mem);
3714 if (shdr == NULL)
3718 if (shdr->sh_name != 0)
3720 if (shdr->sh_type != 0)
3722 if (shdr->sh_flags != 0)
3724 if (shdr->sh_addr != 0)
3726 if (shdr->sh_offset != 0)
3728 if (shdr->sh_addralign != 0)
3730 if (shdr->sh_entsize != 0)
3733 if (shdr->sh_size != 0 && ehdr->e_shnum != 0)
3737 if (shdr->sh_link != 0 && ehdr->e_shstrndx != SHN_XINDEX)
3741 if (shdr->sh_info != 0 && ehdr->e_phnum != PN_XNUM)
3757 shdr = gelf_getshdr (scn, &shdr_mem);
3758 if (shdr == NULL)
3766 const char *scnname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name);
3790 if (shdr->sh_type != good_type
3791 && (shdr->sh_type != SHT_NOBITS
3801 ebl_section_type_name (ebl, shdr->sh_type,
3810 if ((shdr->sh_flags & ~EXTRA_SHFLAGS)
3818 section_flags_string (shdr->sh_flags
3824 if ((shdr->sh_flags & special_sections[s].attr)
3826 || ((shdr->sh_flags
3838 section_flags_string (shdr->sh_flags
3852 if ((shdr->sh_flags & SHF_ALLOC) != 0
3857 else if ((shdr->sh_flags & SHF_ALLOC) == 0
3884 if ((shdr->sh_flags & SHF_ALLOC) != 0
3889 else if ((shdr->sh_flags & SHF_ALLOC) == 0
3909 if (shdr->sh_entsize != 0 && shdr->sh_size % shdr->sh_entsize)
3914 if (elf_strptr (ebl->elf, shstrndx, shdr->sh_name) == NULL)
3917 if (shdr->sh_type >= SHT_NUM
3918 && shdr->sh_type != SHT_GNU_ATTRIBUTES
3919 && shdr->sh_type != SHT_GNU_LIBLIST
3920 && shdr->sh_type != SHT_CHECKSUM
3921 && shdr->sh_type != SHT_GNU_verdef
3922 && shdr->sh_type != SHT_GNU_verneed
3923 && shdr->sh_type != SHT_GNU_versym
3924 && ebl_section_type_name (ebl, shdr->sh_type, NULL, 0) == NULL)
3927 (int) shdr->sh_type);
3933 if (shdr->sh_flags & ~(GElf_Xword) ALL_SH_FLAGS)
3935 GElf_Xword sh_flags = shdr->sh_flags & ~(GElf_Xword) ALL_SH_FLAGS;
3959 if (shdr->sh_flags & SHF_TLS)
3962 if (shdr->sh_addr != 0 && !gnuld)
3970 if (shdr->sh_flags & SHF_COMPRESSED)
3972 if (shdr->sh_flags & SHF_ALLOC)
3977 if (shdr->sh_type == SHT_NOBITS)
3989 if (shdr->sh_link >= shnum)
3994 if (SH_INFO_LINK_P (shdr) && shdr->sh_info >= shnum)
3999 if ((shdr->sh_flags & SHF_MERGE) == 0
4000 && (shdr->sh_flags & SHF_STRINGS) != 0
4006 if ((shdr->sh_flags & SHF_MERGE) != 0 && shdr->sh_entsize == 0)
4011 if (shdr->sh_flags & SHF_GROUP)
4014 if (shdr->sh_flags & SHF_EXECINSTR)
4016 switch (shdr->sh_type)
4028 cnt, section_name (ebl, cnt), shdr->sh_type);
4032 if (shdr->sh_flags & SHF_WRITE)
4034 if (is_debuginfo && shdr->sh_type != SHT_NOBITS)
4040 && !ebl_check_special_section (ebl, cnt, shdr,
4048 if (ehdr->e_type != ET_REL && (shdr->sh_flags & SHF_ALLOC) != 0
4060 && (shdr->sh_flags & SHF_TLS) == 0)
4062 && (shdr->sh_flags & SHF_TLS) != 0))
4063 && phdr->p_offset <= shdr->sh_offset
4064 && ((shdr->sh_offset - phdr->p_offset <= phdr->p_filesz
4065 && (shdr->sh_offset - phdr->p_offset < phdr->p_filesz
4066 || shdr->sh_size == 0))
4067 || (shdr->sh_offset - phdr->p_offset < phdr->p_memsz
4068 && shdr->sh_type == SHT_NOBITS)))
4072 < shdr->sh_offset + shdr->sh_size)
4077 if (shdr->sh_type == SHT_NOBITS)
4079 if (shdr->sh_offset < phdr->p_offset + phdr->p_filesz
4098 shdr->sh_offset,
4099 shdr->sh_size,
4102 || databits->d_size != shdr->sh_size);
4118 if (shdr->sh_offset > end ||
4119 (shdr->sh_offset == end && shdr->sh_size != 0))
4125 if (shdr->sh_type != SHT_NOBITS)
4127 if ((shdr->sh_flags & SHF_EXECINSTR) != 0)
4136 if ((shdr->sh_flags & SHF_WRITE) != 0)
4156 if (cnt == shstrndx && shdr->sh_type != SHT_STRTAB)
4161 switch (shdr->sh_type)
4170 check_symtab (ebl, ehdr, shdr, cnt);
4174 check_rela (ebl, ehdr, shdr, cnt);
4178 check_rel (ebl, ehdr, shdr, cnt);
4182 check_dynamic (ebl, ehdr, shdr, cnt);
4186 check_symtab_shndx (ebl, ehdr, shdr, cnt);
4190 check_hash (shdr->sh_type, ebl, ehdr, shdr, cnt);
4195 check_hash (shdr->sh_type, ebl, ehdr, shdr, cnt);
4200 check_null (ebl, shdr, cnt);
4204 check_group (ebl, ehdr, shdr, cnt);
4208 check_note_section (ebl, ehdr, shdr, cnt);
4221 check_verneed (ebl, shdr, cnt);
4225 check_verdef (ebl, shdr, cnt);
4229 check_attributes (ebl, ehdr, shdr, cnt);
4456 check_note_section (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx)
4458 if (shdr->sh_size == 0)
4480 else if (notes_size != shdr->sh_size)
4483 idx, section_name (ebl, idx), shdr->sh_size - notes_size);
4560 GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
4561 if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC)
4563 if (phdr->p_offset != shdr->sh_offset)
4566 if (phdr->p_memsz != shdr->sh_size)
4663 GElf_Shdr *shdr = NULL;
4668 shdr = gelf_getshdr (scn, &shdr_mem);
4669 if (shdr != NULL
4670 && ((is_debuginfo && shdr->sh_type == SHT_NOBITS)
4672 && (shdr->sh_type == SHT_PROGBITS
4673 || shdr->sh_type == SHT_X86_64_UNWIND)))
4674 && elf_strptr (ebl->elf, shstrndx, shdr->sh_name) != NULL
4676 elf_strptr (ebl->elf, shstrndx, shdr->sh_name)))
4680 if (phdr->p_offset != shdr->sh_offset)
4683 if (phdr->p_memsz != shdr->sh_size)
4707 else if (shdr != NULL && (shdr->sh_flags & SHF_ALLOC) == 0)
4714 else if (shdr != NULL && (shdr->sh_flags & SHF_WRITE) != 0)
4722 else if (shdr != NULL && (shdr->sh_flags & SHF_EXECINSTR) != 0)