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).

Reply via email to