+ filename_and_size_t * filename_and_sizep;
+ bfd_size_type *filesizep;
+ bfd_size_type sectsize;
+ void *mem;
+
+ if ((sect->flags & DATA_FLAGS) != DATA_FLAGS)
+ return;
+
+ sectsize = bfd_get_section_size (sect);
+
+ if (sectsize <= 0)
+ return;
+
+ /* Get the size of the file. This might have been cached for us. */
+ filename_and_sizep = (filename_and_size_t *) arg;
+ filesizep = & filename_and_sizep->filesize;
+
+ if (*filesizep == 0)
+ {
+ struct stat st;
+
+ if (bfd_stat (abfd, &st))
+ return;
+
+ /* Cache the result so that we do not repeatedly stat this file. */
+ *filesizep = st.st_size;
+ }
+
+ /* Compare the size of the section against the size of the file.
+ If the section is bigger then the file must be corrupt and
+ we should not try dumping it. */
+ if (sectsize >= *filesizep)
+ return;
+
+ mem = xmalloc (sectsize);