+ /* Process each program header. */
+ for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
+ if (! bfd_section_from_phdr (abfd, i_phdrp + phindex, (int) phindex))
+ goto fail;
+
+ /* Check for core truncation. */
+ {
+ bfd_size_type high = 0;
+ struct stat statbuf;
+ for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
+ {
+ Elf_Internal_Phdr *p = i_phdrp + phindex;
+ if (p->p_filesz)
+ {
+ bfd_size_type current = p->p_offset + p->p_filesz;
+ if (high < current)
+ high = current;
+ }
+ }
+ if (bfd_stat (abfd, &statbuf) == 0)
+ {
+ if ((bfd_size_type) statbuf.st_size < high)
+ {
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("warning: %pB is truncated: expected core file "
+ "size >= %" PRIu64 ", found: %" PRIu64),
+ abfd, (uint64_t) high, (uint64_t) statbuf.st_size);
+ }
+ }
+ }
+
+ /* Save the entry point from the ELF header. */
+ bfd_get_start_address (abfd) = i_ehdrp->e_entry;