aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaius Mulley <gaiusmod2@gmail.com>2024-08-16 12:41:11 +0100
committerGaius Mulley <gaiusmod2@gmail.com>2024-08-16 12:41:11 +0100
commit9cdde72d1cefdf2ffff52ad2eec1ff465dccb3ab (patch)
tree8ad254373721a44066808e7095c9d0563819a98f
parent2f90f3850eaf9d703d9eb63d5f0347158aa11027 (diff)
downloadgcc-9cdde72d1cefdf2ffff52ad2eec1ff465dccb3ab.zip
gcc-9cdde72d1cefdf2ffff52ad2eec1ff465dccb3ab.tar.gz
gcc-9cdde72d1cefdf2ffff52ad2eec1ff465dccb3ab.tar.bz2
PR modula2/116378 m2 bootstrap fails on x86_64-darwin
This patch fixes m2 bootstrap failure on x86_64-darwin. libc_open is defined with three parameters the last of which is an int for portability (rather than a vararg). This avoids portability problems by promoting mode_t to an int. In the future it could be tidied up by using the m2 optarg extension. gcc/m2/ChangeLog: PR modula2/116378 * gm2-libs-iso/TermFile.mod (termOpen): Add third argument for open. * gm2-libs/libc.def (open): Remove vararg and use INTEGER for mode parameter three. * mc-boot-ch/Glibc.c (tracedb_open): Replace mode_t with int. (libc_open): Rewrite without varargs. * mc-boot/Glibc.h (libc_open): Replace varargs with int mode. * pge-boot/Glibc.cc (libc_open): Rewrite. * pge-boot/Glibc.h (libc_open): Replace varargs with int mode. gcc/testsuite/ChangeLog: PR modula2/116378 * gm2/extensions/run/pass/testopen.mod: Add third argument for open. * gm2/isolib/run/pass/openlibc.mod: Ditto. * gm2/pim/run/pass/testaddr3.mod: Ditto. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
-rw-r--r--gcc/m2/gm2-libs-iso/TermFile.mod2
-rw-r--r--gcc/m2/gm2-libs/libc.def2
-rw-r--r--gcc/m2/mc-boot-ch/Glibc.c8
-rw-r--r--gcc/m2/mc-boot/Glibc.h2
-rw-r--r--gcc/m2/pge-boot/Glibc.cc9
-rw-r--r--gcc/m2/pge-boot/Glibc.h2
-rw-r--r--gcc/testsuite/gm2/extensions/run/pass/testopen.mod2
-rw-r--r--gcc/testsuite/gm2/isolib/run/pass/openlibc.mod2
-rw-r--r--gcc/testsuite/gm2/pim/run/pass/testaddr3.mod2
9 files changed, 11 insertions, 20 deletions
diff --git a/gcc/m2/gm2-libs-iso/TermFile.mod b/gcc/m2/gm2-libs-iso/TermFile.mod
index a3ad58c..3347bdd 100644
--- a/gcc/m2/gm2-libs-iso/TermFile.mod
+++ b/gcc/m2/gm2-libs-iso/TermFile.mod
@@ -503,7 +503,7 @@ BEGIN
THEN
fd := libc.open(ADR("/dev/tty"), O_WRONLY, 0600B)
ELSE
- fd := libc.open(ADR("/dev/tty"), O_RDONLY)
+ fd := libc.open(ADR("/dev/tty"), O_RDONLY, 0)
END ;
IF tcgetattr(fd, new)=0
THEN
diff --git a/gcc/m2/gm2-libs/libc.def b/gcc/m2/gm2-libs/libc.def
index f28f8b5..a314b59 100644
--- a/gcc/m2/gm2-libs/libc.def
+++ b/gcc/m2/gm2-libs/libc.def
@@ -211,7 +211,7 @@ PROCEDURE close (d: INTEGER) : [ INTEGER ] ;
open - open the file, filename with flag and mode.
*)
-PROCEDURE open (filename: ADDRESS; oflag: INTEGER; ...) : INTEGER ;
+PROCEDURE open (filename: ADDRESS; oflag: INTEGER; mode: INTEGER) : INTEGER ;
(*
diff --git a/gcc/m2/mc-boot-ch/Glibc.c b/gcc/m2/mc-boot-ch/Glibc.c
index 492f17f..5ad1711 100644
--- a/gcc/m2/mc-boot-ch/Glibc.c
+++ b/gcc/m2/mc-boot-ch/Glibc.c
@@ -67,7 +67,7 @@ tracedb (const char *format, ...)
static
void
-tracedb_open (const void *p, int flags, mode_t mode)
+tracedb_open (const void *p, int flags, int mode)
{
#if defined(BUILD_MC_LIBC_TRACE)
bool item_written = false;
@@ -343,15 +343,11 @@ libc_creat (char *p, mode_t mode)
EXTERN
int
-libc_open (void *p, int oflag, ...)
+libc_open (void *p, int oflag, int mode)
{
- va_list arg;
- va_start (arg, oflag);
- mode_t mode = va_arg (arg, mode_t);
tracedb_open (p, oflag, mode);
int result = open (reinterpret_cast <char *> (p), oflag, mode);
tracedb_result (result);
- va_end (arg);
return result;
}
diff --git a/gcc/m2/mc-boot/Glibc.h b/gcc/m2/mc-boot/Glibc.h
index 2f7fac4..9572323 100644
--- a/gcc/m2/mc-boot/Glibc.h
+++ b/gcc/m2/mc-boot/Glibc.h
@@ -178,7 +178,7 @@ EXTERN int libc_close (int d);
open - open the file, filename with flag and mode.
*/
-EXTERN int libc_open (void * filename, int oflag, ...);
+EXTERN int libc_open (void * filename, int oflag, int mode);
/*
creat - creates a new file
diff --git a/gcc/m2/pge-boot/Glibc.cc b/gcc/m2/pge-boot/Glibc.cc
index a63b328..7ea40d0 100644
--- a/gcc/m2/pge-boot/Glibc.cc
+++ b/gcc/m2/pge-boot/Glibc.cc
@@ -224,14 +224,9 @@ libc_creat (char *p, mode_t mode)
EXTERN
int
-libc_open (void *p, int oflag, ...)
+libc_open (void *p, int oflag, int mode)
{
- va_list arg;
- va_start (arg, oflag);
- mode_t mode = va_arg (arg, mode_t);
- int result = open (reinterpret_cast <char *> (p), oflag, mode);
- va_end (arg);
- return result;
+ return open (reinterpret_cast <char *> (p), oflag, mode);
}
EXTERN
diff --git a/gcc/m2/pge-boot/Glibc.h b/gcc/m2/pge-boot/Glibc.h
index a555893..0a5481e 100644
--- a/gcc/m2/pge-boot/Glibc.h
+++ b/gcc/m2/pge-boot/Glibc.h
@@ -178,7 +178,7 @@ EXTERN int libc_close (int d);
open - open the file, filename with flag and mode.
*/
-EXTERN int libc_open (void * filename, int oflag, ...);
+EXTERN int libc_open (void * filename, int oflag, int mode);
/*
creat - creates a new file
diff --git a/gcc/testsuite/gm2/extensions/run/pass/testopen.mod b/gcc/testsuite/gm2/extensions/run/pass/testopen.mod
index a36d2e0..56dd6f6 100644
--- a/gcc/testsuite/gm2/extensions/run/pass/testopen.mod
+++ b/gcc/testsuite/gm2/extensions/run/pass/testopen.mod
@@ -24,7 +24,7 @@ PROCEDURE foo ;
VAR
fd: INTEGER ;
BEGIN
- fd := open(ADR("/dev/tty"), 0)
+ fd := open(ADR("/dev/tty"), 0, 0)
END foo ;
BEGIN
diff --git a/gcc/testsuite/gm2/isolib/run/pass/openlibc.mod b/gcc/testsuite/gm2/isolib/run/pass/openlibc.mod
index b9a9d04..510bb36 100644
--- a/gcc/testsuite/gm2/isolib/run/pass/openlibc.mod
+++ b/gcc/testsuite/gm2/isolib/run/pass/openlibc.mod
@@ -26,6 +26,6 @@ CONST
VAR
fd: INTEGER ;
BEGIN
- fd := libc.open(ADR("/dev/tty"), O_RDONLY) ;
+ fd := libc.open(ADR("/dev/tty"), O_RDONLY, 0) ;
libc.printf("fd = %d\n", fd)
END openlibc.
diff --git a/gcc/testsuite/gm2/pim/run/pass/testaddr3.mod b/gcc/testsuite/gm2/pim/run/pass/testaddr3.mod
index b31d0a4..d85f65b 100644
--- a/gcc/testsuite/gm2/pim/run/pass/testaddr3.mod
+++ b/gcc/testsuite/gm2/pim/run/pass/testaddr3.mod
@@ -23,5 +23,5 @@ FROM libc IMPORT open ;
VAR
fd: INTEGER ;
BEGIN
- fd := open(ADR(__FILE__), 0)
+ fd := open(ADR(__FILE__), 0, 0)
END testaddr3.