Re: [PATCH] nvptx: Add _ssize_t as _READ_WRITE_RETURN_TYPE in newlib/libc/include/sys/config.h

Arijit Kumar Das <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CALDPgrsm9_1YmojYtOHZCAL-beMtwt32qM8GW7qepmx89KbENQ@mail.gmail.com>
Hi Thomas!

Here's the updated version and (hopefully) this one's done as you instructed :-)

Best regards,
Arijit


From b7ed7f8883053fd84c77a87e69ed757b55551b5f Mon Sep 17 00:00:00 2001
From: Arijit Kumar Das <[email protected]>
Date: Thu, 17 Jul 2025 16:21:16 +0530
Subject: [PATCH] nvptx: Change 'read' and 'write' to 'ssize_t' return type

This commit changes the return type of the read() and write() syscalls for
nvptx to ssize_t. This would allow large files to be handled properly by
these syscalls in situations where the read/write buffer length exceeds
INT_MAX, for example. This also makes the syscall signatures fully complaint
with their current POSIX specifications.

We additionally define two macros: '_READ_WRITE_RETURN_TYPE' as _ssize_t and
'_READ_WRITE_BUFSIZE_TYPE' as __size_t in libc/include/sys/config.h under
__nvptx__ for consistency.

Signed-off-by: Arijit Kumar Das <[email protected]>
---
 newlib/libc/include/sys/config.h  | 5 +++++
 newlib/libc/machine/nvptx/misc.c  | 2 +-
 newlib/libc/machine/nvptx/write.c | 3 ++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h
index 4c9acc55c..c3cd51e86 100644
--- a/newlib/libc/include/sys/config.h
+++ b/newlib/libc/include/sys/config.h
@@ -12,6 +12,11 @@
 #define __DYNAMIC_REENT__
 #endif

+#ifdef __nvptx__
+#define _READ_WRITE_RETURN_TYPE _ssize_t
+#define _READ_WRITE_BUFSIZE_TYPE __size_t
+#endif
+
 /* exceptions first */
 #if defined(__H8500__) || defined(__W65__)
 #define __SMALL_BITFIELDS
diff --git a/newlib/libc/machine/nvptx/misc.c b/newlib/libc/machine/nvptx/misc.c
index 56e66b9f3..829921ec2 100644
--- a/newlib/libc/machine/nvptx/misc.c
+++ b/newlib/libc/machine/nvptx/misc.c
@@ -62,7 +62,7 @@ open (const char *pathname, int flags, ...) {
   return -1;
 }

-int
+ssize_t
 read(int fd, void *buf, size_t count) {
   return 0;
 }
diff --git a/newlib/libc/machine/nvptx/write.c
b/newlib/libc/machine/nvptx/write.c
index 0544dd05e..38f086893 100644
--- a/newlib/libc/machine/nvptx/write.c
+++ b/newlib/libc/machine/nvptx/write.c
@@ -18,7 +18,8 @@
 #include <unistd.h>
 #include <errno.h>

-_READ_WRITE_RETURN_TYPE write (int fd, const void *buf, size_t count)
+ssize_t
+write (int fd, const void *buf, size_t count)
 {
   size_t i;
   char *b = (char *)buf;
-- 
2.39.5

On Thu, Jul 17, 2025 at 1:49 PM Thomas Schwinge <[email protected]> wrote:
>
> Hi Arijit!
>
> On 2025-07-17T01:27:41+0530, Arijit Kumar Das <[email protected]> wrote:
> > Here's the final commit. I hope it's okay :-)
>
> Almost.  ;-)
>
> > From 3089acec0f3b5606bffcbca3b6864023ccd2afa3 Mon Sep 17 00:00:00 2001
> > From: Arijit Kumar Das <[email protected]>
> > Date: Thu, 17 Jul 2025 01:01:03 +0530
> > Subject: [PATCH] [nvptx]: Use _READ_WRITE_RETURN_TYPE for return type and
> >  _READ_WRITE_BUFSIZE_TYPE for count in read() and write()
>
> The important thing about this commit is the changes of types.  I'd say:
>
>     nvptx: Change 'read' and 'write' to 'ssize_t' return type, and 'size_t count'
>
> Your following text is just textually describing the commit:
>
> > - Changed the return type of read() from int to _READ_WRITE_RETURN_TYPE as per conventions.
> > - Changed the 'count' parameter of read() and write() to _READ_WRITE_BUFSIZE_TYPE.
> > - Defined both of the above macros in libc/include/sys/config.h under __nvptx__.
> > - _READ_WRITE_RETURN_TYPE defined as _ssize_t (ssize_t).
> > - _READ_WRITE_BUFSIZE_TYPE defined as __size_t (size_t).
>
> ..., so I personally wouldn't include that.  Instead, you could add some
> rationale, perhaps:
>
>     ... to match their specification in POSIX, and enable large files.
>
> > Signed-off-by: Arijit Kumar Das <[email protected]>
> > ---
> >  newlib/libc/include/sys/config.h  | 5 +++++
> >  newlib/libc/machine/nvptx/misc.c  | 4 ++--
> >  newlib/libc/machine/nvptx/write.c | 3 ++-
> >  3 files changed, 9 insertions(+), 3 deletions(-)
>
> > --- a/newlib/libc/include/sys/config.h
> > +++ b/newlib/libc/include/sys/config.h
> > @@ -12,6 +12,11 @@
> >  #define __DYNAMIC_REENT__
> >  #endif
> >
> > +#ifdef __nvptx__
> > +#define _READ_WRITE_RETURN_TYPE _ssize_t
> > +#define _READ_WRITE_BUFSIZE_TYPE __size_t
> > +#endif
> > +
> >  /* exceptions first */
> >  #if defined(__H8500__) || defined(__W65__)
> >  #define __SMALL_BITFIELDS
>
> ACK.
>
> But for the following two nvptx-specific implementation files:
>
> > --- a/newlib/libc/machine/nvptx/misc.c
> > +++ b/newlib/libc/machine/nvptx/misc.c
>
> > -int
> > -read(int fd, void *buf, size_t count) {
> > +_READ_WRITE_RETURN_TYPE
> > +read(int fd, void *buf, _READ_WRITE_BUFSIZE_TYPE count) {
>
> > --- a/newlib/libc/machine/nvptx/write.c
> > +++ b/newlib/libc/machine/nvptx/write.c
>
> > -_READ_WRITE_RETURN_TYPE write (int fd, const void *buf, size_t count)
> > +_READ_WRITE_RETURN_TYPE
> > +write (int fd, const void *buf, _READ_WRITE_BUFSIZE_TYPE count)
> >  {
>
> ..., I'd like you to use the actual types.  So, please here replace
> '_READ_WRITE_RETURN_TYPE' with 'ssize_t', and revert back
> '_READ_WRITE_BUFSIZE_TYPE' to 'size_t'.
>
>
> Grüße
>  Thomas
0001-nvptx-Change-read-and-write-to-ssize_t-return-type-a.patch (text/x-patch, 2.2 KB)
From b7ed7f8883053fd84c77a87e69ed757b55551b5f Mon Sep 17 00:00:00 2001
From: Arijit Kumar Das <[email protected]>
Date: Thu, 17 Jul 2025 16:21:16 +0530
Subject: [PATCH] nvptx: Change 'read' and 'write' to 'ssize_t' return type

This commit changes the return type of the read() and write() syscalls for
nvptx to ssize_t. This would allow large files to be handled properly by
these syscalls in situations where the read/write buffer length exceeds
INT_MAX, for example. This also makes the syscall signatures fully complaint
with their current POSIX specifications.

We additionally define two macros: '_READ_WRITE_RETURN_TYPE' as _ssize_t and
'_READ_WRITE_BUFSIZE_TYPE' as __size_t in libc/include/sys/config.h under
__nvptx__ for consistency.

Signed-off-by: Arijit Kumar Das <[email protected]>
---
 newlib/libc/include/sys/config.h  | 5 +++++
 newlib/libc/machine/nvptx/misc.c  | 2 +-
 newlib/libc/machine/nvptx/write.c | 3 ++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h
index 4c9acc55c..c3cd51e86 100644
--- a/newlib/libc/include/sys/config.h
+++ b/newlib/libc/include/sys/config.h
@@ -12,6 +12,11 @@
 #define __DYNAMIC_REENT__
 #endif
 
+#ifdef __nvptx__
+#define _READ_WRITE_RETURN_TYPE _ssize_t
+#define _READ_WRITE_BUFSIZE_TYPE __size_t
+#endif
+
 /* exceptions first */
 #if defined(__H8500__) || defined(__W65__)
 #define __SMALL_BITFIELDS
diff --git a/newlib/libc/machine/nvptx/misc.c b/newlib/libc/machine/nvptx/misc.c
index 56e66b9f3..829921ec2 100644
--- a/newlib/libc/machine/nvptx/misc.c
+++ b/newlib/libc/machine/nvptx/misc.c
@@ -62,7 +62,7 @@ open (const char *pathname, int flags, ...) {
   return -1;
 }
 
-int
+ssize_t
 read(int fd, void *buf, size_t count) {
   return 0;
 }
diff --git a/newlib/libc/machine/nvptx/write.c b/newlib/libc/machine/nvptx/write.c
index 0544dd05e..38f086893 100644
--- a/newlib/libc/machine/nvptx/write.c
+++ b/newlib/libc/machine/nvptx/write.c
@@ -18,7 +18,8 @@
 #include <unistd.h>
 #include <errno.h>
 
-_READ_WRITE_RETURN_TYPE write (int fd, const void *buf, size_t count)
+ssize_t
+write (int fd, const void *buf, size_t count)
 {
   size_t i;
   char *b = (char *)buf;
-- 
2.39.5
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.