Home | History | Annotate | Download | only in linker

Lines Matching refs:Phdr

76   We will ignore the p_paddr and p_align fields of ElfW(Phdr) for now.
300 // check DYNSYM and DYNAMIC sections and phdr/shdr - none of them can be
318 if (phdr_num_ < 1 || phdr_num_ > 65536/sizeof(ElfW(Phdr))) {
324 size_t size = phdr_num_ * sizeof(ElfW(Phdr));
325 if (!CheckFileRange(header_.e_phoff, size, alignof(ElfW(Phdr)))) {
326 DL_ERR_AND_LOG("\"%s\" has invalid phdr offset/size: %zu/%zu",
334 DL_ERR("\"%s\" phdr mmap failed: %s", name_.c_str(), strerror(errno));
338 phdr_table_ = static_cast<ElfW(Phdr)*>(phdr_fragment_.data());
383 // Make sure dynamic_shdr offset and size matches PT_DYNAMIC phdr
387 const ElfW(Phdr)* phdr = &phdr_table_[i];
388 if (phdr->p_type == PT_DYNAMIC) {
389 pt_dynamic_offset = phdr->p_offset;
390 pt_dynamic_filesz = phdr->p_filesz;
485 size_t phdr_table_get_load_size(const ElfW(Phdr)* phdr_table, size_t phdr_count,
493 const ElfW(Phdr)* phdr = &phdr_table[i];
495 if (phdr->p_type != PT_LOAD) {
500 if (phdr->p_vaddr < min_vaddr) {
501 min_vaddr = phdr->p_vaddr;
504 if (phdr->p_vaddr + phdr->p_memsz > max_vaddr) {
505 max_vaddr = phdr->p_vaddr + phdr->p_memsz;
598 const ElfW(Phdr)* phdr = &phdr_table_[i];
600 if (phdr->p_type != PT_LOAD) {
605 ElfW(Addr) seg_start = phdr->p_vaddr + load_bias_;
606 ElfW(Addr) seg_end = seg_start + phdr->p_memsz;
611 ElfW(Addr) seg_file_end = seg_start + phdr->p_filesz;
614 ElfW(Addr) file_start = phdr->p_offset;
615 ElfW(Addr) file_end = file_start + phdr->p_filesz;
628 name_.c_str(), i, reinterpret_cast<void*>(phdr->p_offset),
629 reinterpret_cast<void*>(phdr->p_filesz),
635 int prot = PFLAGS_TO_PROT(phdr->p_flags);
663 if ((phdr->p_flags & PF_W) != 0 && PAGE_OFFSET(seg_file_end) > 0) {
677 PFLAGS_TO_PROT(phdr->p_flags),
696 static int _phdr_table_set_load_prot(const ElfW(Phdr)* phdr_table, size_t phdr_count,
698 const ElfW(Phdr)* phdr = phdr_table;
699 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
701 for (; phdr < phdr_limit; phdr++) {
702 if (phdr->p_type != PT_LOAD || (phdr->p_flags & PF_W) != 0) {
706 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
707 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
709 int prot = PFLAGS_TO_PROT(phdr->p_flags);
736 int phdr_table_protect_segments(const ElfW(Phdr)* phdr_table,
757 int phdr_table_unprotect_segments(const ElfW(Phdr)* phdr_table,
765 static int _phdr_table_set_gnu_relro_prot(const ElfW(Phdr)* phdr_table, size_t phdr_count,
767 const ElfW(Phdr)* phdr = phdr_table;
768 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
770 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
771 if (phdr->p_type != PT_GNU_RELRO) {
791 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
792 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
820 int phdr_table_protect_gnu_relro(const ElfW(Phdr)* phdr_table,
838 int phdr_table_serialize_gnu_relro(const ElfW(Phdr)* phdr_table,
843 const ElfW(Phdr)* phdr = phdr_table;
844 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
846 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
847 if (phdr->p_type != PT_GNU_RELRO) {
851 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
852 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
886 int phdr_table_map_gnu_relro(const ElfW(Phdr)* phdr_table,
906 const ElfW(Phdr)* phdr = phdr_table;
907 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
909 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
910 if (phdr->p_type != PT_GNU_RELRO) {
914 ElfW(Addr) seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;
915 ElfW(Addr) seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;
983 int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count,
986 const ElfW(Phdr)* phdr = phdr_table;
987 const ElfW(Phdr)* phdr_limit = phdr + phdr_count;
989 for (phdr = phdr_table; phdr < phdr_limit; phdr++) {
990 if (phdr->p_type != PT_ARM_EXIDX) {
994 *arm_exidx = reinterpret_cast<ElfW(Addr)*>(load_bias + phdr->p_vaddr);
995 *arm_exidx_count = phdr->p_memsz / 8;
1017 void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count,
1022 const ElfW(Phdr)& phdr = phdr_table[i];
1023 if (phdr.p_type == PT_DYNAMIC) {
1024 *dynamic = reinterpret_cast<ElfW(Dyn)*>(load_bias + phdr.p_vaddr);
1026 *dynamic_flags = phdr.p_flags;
1042 const char* phdr_table_get_interpreter_name(const ElfW(Phdr) * phdr_table, size_t phdr_count,
1045 const ElfW(Phdr)& phdr = phdr_table[i];
1046 if (phdr.p_type == PT_INTERP) {
1047 return reinterpret_cast<const char*>(load_bias + phdr.p_vaddr);
1057 const ElfW(Phdr)* phdr_limit = phdr_table_ + phdr_num_;
1060 for (const ElfW(Phdr)* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {
1061 if (phdr->p_type == PT_PHDR) {
1062 return CheckPhdr(load_bias_ + phdr->p_vaddr);
1069 for (const ElfW(Phdr)* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {
1070 if (phdr->p_type == PT_LOAD) {
1071 if (phdr->p_offset == 0) {
1072 ElfW(Addr) elf_addr = load_bias_ + phdr->p_vaddr;
1081 DL_ERR("can't find loaded phdr for \"%s\"", name_.c_str());
1089 const ElfW(Phdr)* phdr_limit = phdr_table_ + phdr_num_;
1090 ElfW(Addr) loaded_end = loaded + (phdr_num_ * sizeof(ElfW(Phdr)));
1091 for (const ElfW(Phdr)* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {
1092 if (phdr->p_type != PT_LOAD) {
1095 ElfW(Addr) seg_start = phdr->p_vaddr + load_bias_;
1096 ElfW(Addr) seg_end = phdr->p_filesz + seg_start;
1098 loaded_phdr_ = reinterpret_cast<const ElfW(Phdr)*>(loaded);
1102 DL_ERR("\"%s\" loaded phdr %p not in loadable segment",