https://gcc.gnu.org/g:2531cb1d20d9c5b8a5390816a10a018c59506250
commit r15-7210-g2531cb1d20d9c5b8a5390816a10a018c59506250 Author: Gaius Mulley <gaiusm...@gmail.com> Date: Sat Jan 25 18:22:35 2025 +0000 PR modula2/118010 libc.def lseek procedure off_t bugfix This patch fixes calls to lseek from m2 sources. The new data type SYSTEM.COFF_T is used instead of SYSTEM.CCSIZE_T. gcc/m2/ChangeLog: PR modula2/118010 * gm2-libs-log/FileSystem.mod (doModeChange): Replace LONGINT with COFF_T. (SetPos): Use COFF_T for the return value and offset type when calling lseek. * gm2-libs/FIO.mod (SetPositionFromBeginning): Convert pos to COFF_T. (SetPositionFromEnd): Ditto. * mc-boot/GFIO.cc: Rebuild. * mc-boot/Glibc.h: Ditto. * pge-boot/GFIO.cc: Ditto. * pge-boot/Glibc.h: Ditto. Signed-off-by: Gaius Mulley <gaiusm...@gmail.com> Diff: --- gcc/m2/gm2-libs-log/FileSystem.mod | 12 ++++++------ gcc/m2/gm2-libs/FIO.mod | 6 +++--- gcc/m2/mc-boot/GFIO.cc | 4 ++-- gcc/m2/mc-boot/Glibc.h | 2 +- gcc/m2/pge-boot/GFIO.cc | 5 ++--- gcc/m2/pge-boot/Glibc.h | 2 +- 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/gcc/m2/gm2-libs-log/FileSystem.mod b/gcc/m2/gm2-libs-log/FileSystem.mod index b1e9c59a8958..fbbc42229adb 100644 --- a/gcc/m2/gm2-libs-log/FileSystem.mod +++ b/gcc/m2/gm2-libs-log/FileSystem.mod @@ -28,7 +28,7 @@ IMPLEMENTATION MODULE FileSystem ; FROM M2RTS IMPORT InstallTerminationProcedure ; FROM Storage IMPORT ALLOCATE ; -FROM SYSTEM IMPORT ADR ; +FROM SYSTEM IMPORT ADR, COFF_T ; IMPORT SFIO, libc, wrapc ; FROM DynamicStrings IMPORT InitString, ConCat, ConCatChar, KillString, string ; FROM FormatStrings IMPORT Sprintf2 ; @@ -415,7 +415,7 @@ END Again ; PROCEDURE doModeChange (VAR f: File; mode: Flag) ; VAR - r: INTEGER ; + r: COFF_T ; BEGIN WITH f DO IF NOT (mode IN flags) @@ -441,7 +441,7 @@ BEGIN END ; INCL (flags, opened) ; r := libc.lseek (fio, - VAL (LONGINT, lowpos) + VAL (LONGINT, highpos) * VAL (LONGINT, MAX (CARDINAL)), + VAL (COFF_T, lowpos) + VAL (COFF_T, highpos) * VAL (COFF_T, MAX (CARDINAL)), SEEK_SET) END END @@ -514,11 +514,11 @@ END Reset ; PROCEDURE SetPos (VAR f: File; high, low: CARDINAL) ; VAR - r: INTEGER ; + r: COFF_T ; BEGIN WITH f DO - r := libc.lseek(fio, VAL(LONGCARD, low) + - (VAL(LONGCARD, MAX(CARDINAL)) * VAL(LONGCARD, high)), + r := libc.lseek(fio, VAL(COFF_T, low) + + (VAL(COFF_T, MAX(CARDINAL)) * VAL(COFF_T, high)), SEEK_SET) ; highpos := high ; lowpos := low ; diff --git a/gcc/m2/gm2-libs/FIO.mod b/gcc/m2/gm2-libs/FIO.mod index 55be703c5372..8fa43e4b1c6f 100644 --- a/gcc/m2/gm2-libs/FIO.mod +++ b/gcc/m2/gm2-libs/FIO.mod @@ -36,7 +36,7 @@ IMPLEMENTATION MODULE FIO ; provides a simple buffered file input/output library. *) -FROM SYSTEM IMPORT ADR, TSIZE, WORD, CSSIZE_T ; +FROM SYSTEM IMPORT ADR, TSIZE, WORD, COFF_T ; FROM ASCII IMPORT nl, nul, tab ; FROM StrLib IMPORT StrLen, StrConCat, StrCopy ; FROM Storage IMPORT ALLOCATE, DEALLOCATE ; @@ -1446,7 +1446,7 @@ BEGIN filled := 0 END END ; - offset := lseek (unixfd, VAL (CSSIZE_T, pos), SeekSet ()) ; + offset := lseek (unixfd, VAL (COFF_T, pos), SeekSet ()) ; IF (offset>=0) AND (pos=offset) THEN abspos := pos @@ -1495,7 +1495,7 @@ BEGIN filled := 0 END END ; - offset := lseek (unixfd, VAL (CSSIZE_T, pos), SeekEnd ()) ; + offset := lseek (unixfd, VAL (COFF_T, pos), SeekEnd ()) ; IF offset>=0 THEN abspos := offset ; diff --git a/gcc/m2/mc-boot/GFIO.cc b/gcc/m2/mc-boot/GFIO.cc index 440919af5338..5d223c941bf3 100644 --- a/gcc/m2/mc-boot/GFIO.cc +++ b/gcc/m2/mc-boot/GFIO.cc @@ -2088,7 +2088,7 @@ extern "C" void FIO_SetPositionFromBeginning (FIO_File f, long int pos) fd->buffer->position = 0; fd->buffer->filled = 0; } - offset = static_cast<long int> (libc_lseek (fd->unixfd, (ssize_t ) (pos), wrapc_SeekSet ())); + offset = static_cast<long int> (libc_lseek (fd->unixfd, (off_t ) (pos), wrapc_SeekSet ())); if ((offset >= 0) && (pos == offset)) { fd->abspos = pos; @@ -2137,7 +2137,7 @@ extern "C" void FIO_SetPositionFromEnd (FIO_File f, long int pos) fd->buffer->position = 0; fd->buffer->filled = 0; } - offset = static_cast<long int> (libc_lseek (fd->unixfd, (ssize_t ) (pos), wrapc_SeekEnd ())); + offset = static_cast<long int> (libc_lseek (fd->unixfd, (off_t ) (pos), wrapc_SeekEnd ())); if (offset >= 0) { fd->abspos = offset; diff --git a/gcc/m2/mc-boot/Glibc.h b/gcc/m2/mc-boot/Glibc.h index cdf441f07741..af06eda8276c 100644 --- a/gcc/m2/mc-boot/Glibc.h +++ b/gcc/m2/mc-boot/Glibc.h @@ -204,7 +204,7 @@ EXTERN int libc_creat (void * filename, unsigned int mode); off_t lseek(int fildes, off_t offset, int whence); */ -EXTERN ssize_t libc_lseek (int fd, ssize_t offset, int whence); +EXTERN off_t libc_lseek (int fd, off_t offset, int whence); /* perror - writes errno and string. (ARRAY OF CHAR is translated onto ADDRESS). diff --git a/gcc/m2/pge-boot/GFIO.cc b/gcc/m2/pge-boot/GFIO.cc index e34e3eff32cf..e22a3bcdce2a 100644 --- a/gcc/m2/pge-boot/GFIO.cc +++ b/gcc/m2/pge-boot/GFIO.cc @@ -47,7 +47,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see # include "GStorage.h" # include "Gmcrts.h" #include <unistd.h> -# include <sys/types.h> #if defined(__cplusplus) # undef NULL # define NULL 0 @@ -2091,7 +2090,7 @@ extern "C" void FIO_SetPositionFromBeginning (FIO_File f, long int pos) fd->buffer->position = 0; fd->buffer->filled = 0; } - offset = static_cast<long int> (libc_lseek (fd->unixfd, (ssize_t ) (pos), wrapc_SeekSet ())); + offset = static_cast<long int> (libc_lseek (fd->unixfd, (off_t ) (pos), wrapc_SeekSet ())); if ((offset >= 0) && (pos == offset)) { fd->abspos = pos; @@ -2140,7 +2139,7 @@ extern "C" void FIO_SetPositionFromEnd (FIO_File f, long int pos) fd->buffer->position = 0; fd->buffer->filled = 0; } - offset = static_cast<long int> (libc_lseek (fd->unixfd, (ssize_t ) (pos), wrapc_SeekEnd ())); + offset = static_cast<long int> (libc_lseek (fd->unixfd, (off_t ) (pos), wrapc_SeekEnd ())); if (offset >= 0) { fd->abspos = offset; diff --git a/gcc/m2/pge-boot/Glibc.h b/gcc/m2/pge-boot/Glibc.h index ad7deb54d530..6c670c7742d0 100644 --- a/gcc/m2/pge-boot/Glibc.h +++ b/gcc/m2/pge-boot/Glibc.h @@ -203,7 +203,7 @@ EXTERN int libc_creat (void * filename, unsigned int mode); off_t lseek(int fildes, off_t offset, int whence); */ -EXTERN off_t libc_lseek (int fd, ssize_t offset, int whence); +EXTERN off_t libc_lseek (int fd, off_t offset, int whence); /* perror - writes errno and string. (ARRAY OF CHAR is translated onto ADDRESS).