Index: lib/libc/gen/elf_utils.c =================================================================== --- lib/libc/gen/elf_utils.c +++ lib/libc/gen/elf_utils.c @@ -47,7 +47,16 @@ for (i = 0; i < phdr_info->dlpi_phnum; i++) { ph = &phdr_info->dlpi_phdr[i]; + /* + * PPC64 ELFv1 ABI is a special case. Since function pointers + * point to function descriptors in the .opd section, we can't + * skip over non-executable sections. + */ +#if defined(__powerpc64__) && (!defined(_CALL_ELF) || _CALL_ELF == 1) + if (ph->p_type != PT_LOAD) +#else if (ph->p_type != PT_LOAD || (ph->p_flags & PF_X) == 0) +#endif continue; if (phdr_info->dlpi_addr + ph->p_vaddr <= (uintptr_t)addr && (uintptr_t)addr + sizeof(addr) < phdr_info->dlpi_addr +