Go to file
Janne Blomqvist 2412750e79 PR libgfortran/83649 Chunk large reads and writes
It turns out that Linux never reads or writes more than 2147479552
bytes in a single syscall. For writes this is not a problem as
libgfortran already contains a loop around write() to handle short
writes. But for reads we cannot do this, since then read will hang if
we have a short read when reading from the terminal.  Also, there are
reports that macOS fails I/O's larger than 2 GB.  Thus, to work around
these issues do large reads/writes in chunks.

The testcase from the PR

program largewr
  integer(kind=1) :: a(2_8**31+1)
  a = 0
  a(size(a, kind=8)) = 1
  open(10, file="largewr.dat", access="stream", form="unformatted")
  write (10) a
  close(10)
  a(size(a, kind=8)) = 2
  open(10, file="largewr.dat", access="stream", form="unformatted")
  read (10) a
  if (a(size(a, kind=8)) == 1) then
    print *, "All is well"
  else
    print *, "Oh no"
  end if
end program largewr

fails on trunk but works with the patch.

Regtested on x86_64-pc-linux-gnu, committed to trunk.

libgfortran/ChangeLog:

2018-01-02  Janne Blomqvist  <jb@gcc.gnu.org>

	PR libgfortran/83649
	* io/unix.c (MAX_CHUNK): New define.
	(raw_read): For reads larger than MAX_CHUNK, loop.
	(raw_write): Write no more than MAX_CHUNK bytes per iteration.

From-SVN: r256074
2018-01-02 15:25:10 +02:00
config
contrib
fixincludes
gcc re PR target/81616 (Update -mtune=generic for the current Intel and AMD processors) 2018-01-02 13:04:19 +00:00
gnattools
gotools
include
INSTALL
intl
libada
libatomic Makefile.am (IFUNC_OPTIONS): Change aarch64 option from -march=armv8.1-a to -march=armv8-a+lse. 2017-12-14 18:30:38 +00:00
libbacktrace
libcc1
libcpp [PATCH, PR83492] Fix selection of aarch64 big-endian shift parameters based on __AARCH64EB__ 2017-12-20 15:07:01 +00:00
libdecnumber
libffi
libgcc Use C version of multi3 for RVE support. 2017-12-12 22:25:06 -08:00
libgfortran PR libgfortran/83649 Chunk large reads and writes 2018-01-02 15:25:10 +02:00
libgo os: pass -s to hostname on AIX 2017-12-16 01:49:54 +00:00
libgomp Prune removed funcs from offload table 2017-12-30 17:02:00 +00:00
libhsail-rt
libiberty re PR lto/83452 (FAIL: gfortran.dg/save_6.f90 -O0 (test for excess errors)) 2018-01-02 08:45:05 +00:00
libitm
libmpx
libobjc
liboffloadmic
libquadmath
libsanitizer
libssp
libstdc++-v3 PR libstdc++/83600 fix end iterator for unready std::match_results 2017-12-27 22:18:08 +00:00
libvtv
lto-plugin
maintainer-scripts
zlib
.dir-locals.el
.gitattributes
.gitignore
ABOUT-NLS
ChangeLog configure.ac: Remove logic adding gdb to noconfigsdirs for or1k. 2017-12-12 14:23:05 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in
config.guess
config.rpath
config.sub
configure configure.ac: Remove logic adding gdb to noconfigsdirs for or1k. 2017-12-12 14:23:05 +00:00
configure.ac configure.ac: Remove logic adding gdb to noconfigsdirs for or1k. 2017-12-12 14:23:05 +00:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.RUNTIME
depcomp
install-sh
libtool-ldflags
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS Updated email in MAINTAINERS file. 2017-12-12 17:40:24 +00:00
Makefile.def
Makefile.in
Makefile.tpl
missing
mkdep
mkinstalldirs
move-if-change
README
symlink-tree
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.