diff options
author | Gaius Mulley <gaiusmod2@gmail.com> | 2024-08-16 12:41:11 +0100 |
---|---|---|
committer | Gaius Mulley <gaiusmod2@gmail.com> | 2024-08-16 12:41:11 +0100 |
commit | 9cdde72d1cefdf2ffff52ad2eec1ff465dccb3ab (patch) | |
tree | 8ad254373721a44066808e7095c9d0563819a98f | |
parent | 2f90f3850eaf9d703d9eb63d5f0347158aa11027 (diff) | |
download | gcc-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.mod | 2 | ||||
-rw-r--r-- | gcc/m2/gm2-libs/libc.def | 2 | ||||
-rw-r--r-- | gcc/m2/mc-boot-ch/Glibc.c | 8 | ||||
-rw-r--r-- | gcc/m2/mc-boot/Glibc.h | 2 | ||||
-rw-r--r-- | gcc/m2/pge-boot/Glibc.cc | 9 | ||||
-rw-r--r-- | gcc/m2/pge-boot/Glibc.h | 2 | ||||
-rw-r--r-- | gcc/testsuite/gm2/extensions/run/pass/testopen.mod | 2 | ||||
-rw-r--r-- | gcc/testsuite/gm2/isolib/run/pass/openlibc.mod | 2 | ||||
-rw-r--r-- | gcc/testsuite/gm2/pim/run/pass/testaddr3.mod | 2 |
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. |