Home | History | Annotate | Download | only in linker

Lines Matching refs:phdr

73   We will ignore the p_paddr and p_align fields of ElfW(Phdr) for now.
268 if (phdr_num_ < 1 || phdr_num_ > 65536/sizeof(ElfW(Phdr))) {
274 size_t size = phdr_num_ * sizeof(ElfW(Phdr));
276 DL_ERR("\"%s\" has invalid phdr offset/size", name_.c_str());
281 DL_ERR("\"%s\" phdr mmap failed: %s", name_.c_str(), strerror(errno));
285 phdr_table_ = static_cast<ElfW(Phdr)*>(phdr_fragment_.data());
379 size_t phdr_table_get_load_size(const ElfW(Phdr)* phdr_table, size_t phdr_count,
387 const ElfW(Phdr)* phdr = &phdr_table[i];
389 if (phdr->p_type != PT_LOAD) {
394 if (phdr->p_vaddr < min_vaddr) {
395 min_vaddr = phdr->p_vaddr;
398 if (phdr->p_vaddr + phdr->p_memsz > max_vaddr) {
399 max_vaddr = phdr->p_vaddr + phdr->p_memsz;
483 const ElfW(Phdr)* phdr = &phdr_table_[i];
485 if (phdr->p_type != PT_LOAD) {
490 ElfW(Addr) seg_start = phdr->p_vaddr + load_bias_;
491 ElfW(Addr) seg_end = seg_start + phdr->p_memsz;
496 ElfW(Addr) seg_file_end = seg_start + phdr->p_filesz;
499 ElfW(Addr) file_start = phdr->p_offset;
500 ElfW(Addr) file_end = file_start + phdr->p_filesz;
513 name_.c_str(), i, reinterpret_cast<void*>(phdr->p_offset),
514 reinterpret_cast<void*>(phdr->p_filesz),
522 PFLAGS_TO_PROT(phdr->p_flags),
534 if ((phdr->p_flags & PF_W) != 0 && PAGE_OFFSET(seg_file_end) > 0) {
548 PFLAGS_TO_PROT(phdr->p_flags),
567 static int _phdr_table_set_load_prot(const ElfW(Phdr)* phdr_table, size_t phdr_count,
569 const ElfW(Phdr)* phdr = phdr_table;
570 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
572 for (; phdr < phdr_limit; phdr++) {
573 if (phdr->p_type != PT_LOAD || (phdr->p_flags & PF_W) != 0) {
577 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
578 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
580 int prot = PFLAGS_TO_PROT(phdr->p_flags);
607 int phdr_table_protect_segments(const ElfW(Phdr)* phdr_table,
628 int phdr_table_unprotect_segments(const ElfW(Phdr)* phdr_table,
636 static int _phdr_table_set_gnu_relro_prot(const ElfW(Phdr)* phdr_table, size_t phdr_count,
638 const ElfW(Phdr)* phdr = phdr_table;
639 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
641 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
642 if (phdr->p_type != PT_GNU_RELRO) {
662 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
663 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
691 int phdr_table_protect_gnu_relro(const ElfW(Phdr)* phdr_table,
708 int phdr_table_serialize_gnu_relro(const ElfW(Phdr)* phdr_table,
712 const ElfW(Phdr)* phdr = phdr_table;
713 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
716 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
717 if (phdr->p_type != PT_GNU_RELRO) {
721 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
722 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
755 int phdr_table_map_gnu_relro(const ElfW(Phdr)* phdr_table,
775 const ElfW(Phdr)* phdr = phdr_table;
776 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
778 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
779 if (phdr->p_type != PT_GNU_RELRO) {
783 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
784 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
852 int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count,
855 const ElfW(Phdr)* phdr = phdr_table;
856 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
858 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
859 if (phdr->p_type != PT_ARM_EXIDX) {
863 *arm_exidx = reinterpret_cast<ElfW(Addr)*>(load_bias + phdr->p_vaddr);
864 *arm_exidx_count = phdr->p_memsz / 8;
886 void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count,
891 const ElfW(Phdr)& phdr = phdr_table[i];
892 if (phdr.p_type == PT_DYNAMIC) {
893 *dynamic = reinterpret_cast<ElfW(Dyn)*>(load_bias + phdr.p_vaddr);
895 *dynamic_flags = phdr.p_flags;
911 const char* phdr_table_get_interpreter_name(const ElfW(Phdr) * phdr_table, size_t phdr_count,
914 const ElfW(Phdr)& phdr = phdr_table[i];
915 if (phdr.p_type == PT_INTERP) {
916 return reinterpret_cast<const char*>(load_bias + phdr.p_vaddr);
926 const ElfW(Phdr)* phdr_limit = phdr_table_ + phdr_num_;
929 for (const ElfW(Phdr)* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {
930 if (phdr->p_type == PT_PHDR) {
931 return CheckPhdr(load_bias_ + phdr->p_vaddr);
938 for (const ElfW(Phdr)* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {
939 if (phdr->p_type == PT_LOAD) {
940 if (phdr->p_offset == 0) {
941 ElfW(Addr) elf_addr = load_bias_ + phdr->p_vaddr;
950 DL_ERR("can't find loaded phdr for \"%s\"", name_.c_str());
958 const ElfW(Phdr)* phdr_limit = phdr_table_ + phdr_num_;
959 ElfW(Addr) loaded_end = loaded + (phdr_num_ * sizeof(ElfW(Phdr)));
960 for (const ElfW(Phdr)* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {
961 if (phdr->p_type != PT_LOAD) {
964 ElfW(Addr) seg_start = phdr->p_vaddr + load_bias_;
965 ElfW(Addr) seg_end = phdr->p_filesz + seg_start;
967 loaded_phdr_ = reinterpret_cast<const ElfW(Phdr)*>(loaded);
971 DL_ERR("\"%s\" loaded phdr %p not in loadable segment",