1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-15 15:57:13 +00:00

450 Commits

Author SHA1 Message Date
Blake McBride
03c0d429f1 Don't close a file that hasn't been opened 2021-01-03 12:16:02 -06:00
Nick Briggs
c097563730
The error() function may return under exceptional circumstances (#97)
There are a few places where error() was called that in practice would never
be returned from, however since it was coded with the possibility of returning
all call sites must be consistent with that.

	modified:   ../src/car-cdr.c
	modified:   ../src/gchtfind.c
	modified:   ../src/hardrtn.c
2021-01-02 13:36:14 -08:00
Bruce Mitchener
a1e0e750d4
Remove F_SETSIG (#164)
* Remove F_SETSIG call from Linux on X11 display.

Presumably, this was added to be like the `I_SETSIG` call on Solaris.
But it is the only `F_SETSIG` done on Linux and there isn't an
equivalent on the other platforms that we support as it is a GNU
extension.

Also, `F_SETSIG` with an argument of `0`, as here, means to send
the `SIGIO` signal, which is what is done by default.

From the man page:

    F_SETSIG (int)

    Set the signal sent when input or output becomes possible
    to the value given in arg. A value of zero means to send
    the default SIGIO signal. Any other value (including SIGIO)
    is the signal to send instead, and in this case additional
    info is available to the signal handler if installed with
    SA_SIGINFO.

    By using F_SETSIG with a nonzero value, and setting
    SA_SIGINFO for the signal handler (see sigaction(2)),
    extra information about I/O events is passed to the
    handler in a siginfo_t structure. If the si_code field
    indicates the source is SI_SIGIO, the si_fd field gives
    the file descriptor associated with the event. Otherwise,
    there is no indication which file descriptors are
    pending, and you should use the usual mechanisms
    (select(2), poll(2), read(2) with O_NONBLOCK set etc.)
    to determine which file descriptors are available for I/O.

We aren't setting a non-zero value and we aren't establishing signal
handlers via `sigaction` with `SA_SIGINFO` set, so this shouldn't
be doing anything important for us.

* Stop setting _GNU_SOURCE for GNU libc extensions.

We were previously doing this to get access to the
`F_SETSIG` flag for `fcntl`, but this isn't being
used any longer.
2021-01-02 21:21:16 +00:00
Larry Masinter
33a67a80e9
Merge pull request #163 from waywardmonkeys/use-posix-pseudoterminals
Switch to using POSIX pseudoterminals.
2021-01-01 23:30:30 -08:00
Bruce Mitchener
a271917a61 Switch to using POSIX pseudoterminals.
Previously, we were using SysV pseudo-terminals on Solaris and BSD
pseudo-terminals on other Unix platforms. BSD pseudo-terminals have
been deprecated on Linux and are no longer available in some kernel
configurations.

The POSIX API is basically the same as the SysV API, apart from using
`posix_openpt` instead of `open` with `/dev/ptmx`.

Closes interlisp/medley#121.
2021-01-02 12:57:23 +07:00
Larry Masinter
67d6a799db
Merge pull request #158 from Interlisp/unwind-int-unsigned-ptr-confusion
Correct handling of return value of N_OP_unwind()
2021-01-01 14:29:44 -08:00
Nick Briggs
12c5f3231e Correct handling of return value of N_OP_unwind()
The return value of N_OP_unwind is really of type LispPTR *, however it was
declared as UNSIGNED (effectively uintptr_t) so that the ERROR_EXIT macro
could be used to return an error indication (-1, =UINT_MAX). The call site
checked for the error condition with (int)result < 0, not accounting for the
case where a native pointer may have the high-order bit set.

We correct this problem by declaring the return type as LispPTR *,
and expand the ERROR_EXIT macro in place substituting (LispPTR *)(-1)
as the error return value, and at the single call site check for equality
with that same value.

The test case was executing the opcode tester on a Raspberry Pi or
a BeagleBone Black/Debian 10.3 where the non-error result was > 0xB0000000

  	modified:   inc/inlineC.h
        modified:   inc/unwinddefs.h
        modified:   src/unwind.c
2021-01-01 14:08:41 -08:00
Bruce Mitchener
fc3908f19a
Fix typos. (#157) 2021-01-01 08:55:24 -08:00
Bruce Mitchener
b31ac48ed0
timer.c: Clean up / simplify includes. (#155) 2021-01-01 05:01:32 +00:00
Bruce Mitchener
848177aa95
The SYSVONLY flag is no longer used or needed. (#153)
Welcome to the world of being mostly POSIX!
2020-12-31 17:13:05 -08:00
Bruce Mitchener
d717946929
Cleanup byteswap.c a bit (#154)
* Remove word_swap_longword.

This was the same as `swapx` and not used except in one place which
now uses `swapx` instead.

* Remove assembly versions of swapx, byte_swap_word, word_swap_page.

`swapx` and `byte_swap_word` were defined as:

```
extern inline const unsigned int swapx (unsigned int word)
{
   asm("roll  $16,%0" : "=g" (word) : "0" (word));
   return(word);
}

extern inline const unsigned short byte_swap_word (unsigned short word)
{
   asm("rolw  $8,%0" : "=r" (word) : "0" (word));

   return(word);
}
```

But the generated code from the C version is:

```
(lldb) disassemble -n swapx
ldex`swapx:
ldex[0x10002e0d0] <+0>:  pushq  %rbp
ldex[0x10002e0d1] <+1>:  movq   %rsp, %rbp
ldex[0x10002e0d4] <+4>:  movl   %edi, %eax
ldex[0x10002e0d6] <+6>:  roll   $0x10, %eax
ldex[0x10002e0d9] <+9>:  popq   %rbp
ldex[0x10002e0da] <+10>: retq

(lldb) disassemble -n byte_swap_word
ldex`byte_swap_word:
ldex[0x10002e0e0] <+0>:  pushq  %rbp
ldex[0x10002e0e1] <+1>:  movq   %rsp, %rbp
ldex[0x10002e0e4] <+4>:  rolw   $0x8, %di
ldex[0x10002e0e8] <+8>:  movzwl %di, %eax
ldex[0x10002e0eb] <+11>: popq   %rbp
ldex[0x10002e0ec] <+12>: retq
```

So we don't really stand to gain by re-enabling this old assembler code.

We would gain from switching to C99 or C11 and improving our
inlining.

* Remove 386 asm version of bit_reverse_region.

This is implemented in C and the code isn't actually set up to
allow using the assembler version.
2020-12-31 10:29:19 -08:00
Bruce Mitchener
ca3f27db1f
Use setsid on all Unix platforms. (#152)
Previously, we used `TIOCNOTTY` on some platforms (FreeBSD, macOS)
and `setsid` on Linux and Solaris. The correct modern way to do
this is to use `setsid` and the BSDs support this, so let's just
do that.
2020-12-31 09:44:36 -08:00
Nick Briggs
d28334bd24
Fix makefile fragment for linux on arm (#147)
* Update comments describing configuration this makefile fragment supports.

* Remove extra compiler options for suggested gcc build

* Remove unnecessary -m32 option for suggested clang build

* switch default compiler from clang to gcc
2020-12-30 22:18:28 -08:00
Bruce Mitchener
0bbdf606b6
Cygwin doesn't have O_ASYNC, so fix compilation. (#151)
It looks like Cygwin doesn't actually support signal-based I/O,
so while this compiles, it won't be correct and will need
addressing in another way.
2020-12-30 21:47:50 -08:00
Bruce Mitchener
a47119f006
killpg is POSIX, so we can rely on it now. (#150)
This removes some usages of the SYSVONLY flag and lets us assume
the existence of `killpg`. It also updates a bit of code to accurately
populate the `pgrp` variable using `tcgetpgrp` rather than an ioctl.
2020-12-30 21:39:42 -08:00
Bruce Mitchener
f1647df8b1
Default to NOETHER, only enable on Solaris. (#149)
* Default to NOETHER, only enable on Solaris.

* DOS: NOETHER controlled by inc/version.h

We set NOETHER by default on DOS, so no need for it here in the
build system.
2020-12-31 01:33:58 +00:00
Bruce Mitchener
6adb79840d
Update fcntl F_SETFL usage. (#144)
This changes from `FASYNC` to `O_ASYNC`, `FNDELAY` to `O_NONBLOCK`,
and `O_NDELAY` to `O_NONBLOCK`. These are the modern names.

`O_NONBLOCK` is part of the POSIX standard. However, `O_ASYNC` is
specific to Linux and BSD. It is not available on Solaris, where
we still need to use `FASYNC`. Also, the behavior of having I/O
trigger a `SIGIO` signal is not in POSIX, since the `SIGIO` signal
is not in POSIX. Instead, it is only the behavior of having `SIGURG`
being signalled for out of band data that is specified.

We also takes this opportunity to collapse some multi-line calls
to get the flags, store it into a temp, and then set them, to
just doing it in one line, skipping the stored temporary value.

We also change one instance of `65535 - FNDELAY` to `~O_NONBLOCK`.

Closes interlisp/medley#85.
2020-12-31 01:28:34 +00:00
Bruce Mitchener
3b1bdd225f
REGISTER is for floats. (#148)
According to `inc/version.h`, `REGISTER` is for floats which may
or may not be able to be in registers due to the `FPTEST` macro
implementation. We shouldn't be using it here for non-float
data.
2020-12-31 00:16:03 +00:00
Bruce Mitchener
7f7952cbad
Remove USETIMEFN define. (#143)
In the past, we didn't use `gettimeofday()` on all non-DOS platforms
because it wasn't available, so we had to fall back to `time()`.
Those days are long gone and we have `gettimeofday()` on all non-DOS
platforms.

This also removes some code that used `times()` when it used `time()`.
This leaves us using `getrusage()` on all non-DOS platforms. This,
much like `gettimeofday()`, is now available everywhere. Not all of
the fields used here are guaranteed by POSIX, but the ones used
here shouldn't be an issue for now.
2020-12-30 14:38:58 -08:00
Bruce Mitchener
7a74d6e66f
Control VM config via RELEASE. (#136)
When `RELEASE` is set, then `inc/version.h` configures some
defines appropriately, including `BIGATOMS`, `BIGVM`, and
`NEWCDRCODING`. There's no need to manage it directly on
the compiler command line.
2020-12-30 14:32:31 -08:00
Bruce Mitchener
3eb8d36a49
README: Add discussion of platform support. (#146) 2020-12-30 09:59:22 -08:00
Larry Masinter
c395b816d8
Merge pull request #145 from Interlisp/add-code-of-conduct-1
Create CODE_OF_CONDUCT.md
2020-12-29 15:42:04 -08:00
Larry Masinter
fef8be9f5c
Create CODE_OF_CONDUCT.md
as per Discussion#111
2020-12-29 11:00:24 -08:00
Bruce Mitchener
3e2a2d76ec
fcntl(..., F_SETFL, ...) return value only signals error. (#141)
The return value of `fcntl` when passed `F_SETFL` isn't guaranteed
to return the flags passed in as its return value. It will be `-1`
in the event of an error, but no other value is to be relied upon.

Fortunately, we weren't relying upon the value apart from
occasionally checking for an error.

This is as it is specified in https://pubs.opengroup.org/onlinepubs/7908799/xsh/fcntl.html

Closes interlisp/medley#87.
2020-12-28 17:59:27 -08:00
Bruce Mitchener
01926fc232
NEW_STORAGE is no longer new. (#135)
* Always follow NEW_STORAGE code paths.

This removes the code paths for the pre-NEW_STORAGE code.

* Remove NEW_STORAGE from build system.

The code no longer refers to `NEW_STORAGE`, so we can remove
this from the build system.
2020-12-28 10:10:43 -08:00
Bruce Mitchener
14402131e7
Reduce number of -Wshorten-64-to-32 warnings. (#138) 2020-12-28 00:19:26 -08:00
Bruce Mitchener
999851e60c
Use SEEK_SET for third arg to *seek() functions. (#139)
Instead of sometimes passing `0` to `lseek` and friends, we should
use the standard symbolic constant `SEEK_SET`.
2020-12-28 00:18:41 -08:00
Bruce Mitchener
a986b1e57a
Remove unused fptovp_scratch variable. (#140) 2020-12-28 00:10:23 -08:00
Bruce Mitchener
023cf609f2
init_Xcursor takes Window, not int for window. (#137)
`Window` is an X11 typedef for `unsigned long` (via `XID`). We should
pass it as that, not an `int`, to avoid 64 bit conversion issues.
2020-12-28 07:19:30 +00:00
Bruce Mitchener
0880b2f3dd
Remove UNSAFE flag. (#134)
This flag was for SunOS 3 and 4 on sun3 hardware (68k).

It enabled some unsafe optimizations via assembler. This hasn't
actually been built since the DOS port (since the header for this
was renamed, but the code in `xc.c` wasn't updated).

The optimizations here made assumptions that were specific to the
68k hardware and register allocation. They aren't likely to be
of much use moving forward, and we've got plenty of safe performance
improvements from the last 30 years of hardware advances.
2020-12-26 20:53:47 +00:00
Bruce Mitchener
e295a34484
Remove inlnMIPS.h. (#133)
We removed support for MIPs platforms, so this code is unused.
2020-12-26 10:43:35 -08:00
Larry Masinter
100b0968cf Merge branch 'master' of https://github.com/interlisp/maiko into cygwin3 2020-12-25 11:15:18 -08:00
Nick Briggs
ac48a9bf9d
Fix typo in environment variable name that broke interprocess communications (issue Interlisp/medley#106) (#132) 2020-12-24 10:02:20 -08:00
Larry Masinter
db281a361c Merge branch 'master' of https://github.com/interlisp/maiko into cygwin3 2020-12-24 17:17:29 +00:00
Bruce Mitchener
bf2855be58
Use the real gethostid on Solaris. (#121)
* Use the real gethostid on Solaris.

Solaris has this, so we might as well use it like we do on other
platforms. This value is used in response to queries from it from
Lisp.

* Improve undefining of HAS_GETHOSTID.

Enable it on Solaris in `inc/version.h`. This file already
disables it on DOS, so no need to do so again in `src/initsout.c`.
2020-12-23 19:55:58 -08:00
Larry Masinter
e452a97e22 setup for cygwin (compiles but crashes) 2020-12-24 01:55:27 +00:00
Larry Masinter
e801373222 X11 definitions moved for MacPorts X11 2020-12-23 11:01:10 -08:00
Bruce Mitchener
3ef2d12115
Use memset instead of bzero. (#131) 2020-12-23 10:34:27 -08:00
Bruce Mitchener
985f2c43fe
Remove prototypes for getenv. Use stdlib.h. (#122)
This also removes some casts to `char *` that were present but
not needed, since `getenv()` is defined to return `char *`.
2020-12-23 15:44:16 +00:00
Bruce Mitchener
530aa4ce6d
Simplify including sun/fbio.h. (#130)
Both sides of this #ifdef were the same, so just collapse it.

This code isn't actually relevant any longer, but this removes
an OS-specific #ifdef, making inspection of platform specific
code a bit easier.
2020-12-23 15:34:14 +00:00
Bruce Mitchener
16019c24eb
Don't use dirent's d_reclen as if it were d_namlen. (#128)
This code was treating the `d_reclen` incorrectly from some of the
original old porting work. It is not the same as `d_namlen` and
`d_namlen` is not widely supported or standard. It should be using
`strlen(d_name)`.

This addresses an issue mentioned in interlisp/medley#103.
2020-12-22 23:26:56 -08:00
Bruce Mitchener
72948ae0fd
Clean up medleyfp.h. (#127)
* Include <ieeefp.h> for Solaris.
* Remove sections for sparc and Sun i386 for non-Solaris.
* Have Linux use the same code as FreeBSD and macOS.
* Make the FreeBSD / Linux / macOS code path the default, if nothing
  special is defined since it is the modern way.
* Remove fpstatus_() usage from the ancient days.
2020-12-22 23:23:26 -08:00
Bruce Mitchener
0c8ae869b9
Remove comment reference to SIGNED_CHARS define. (#126)
None exists or is used, so no need to discuss it.
2020-12-22 23:17:28 -08:00
Bruce Mitchener
9aeac67592
Only include stropts.h on Solaris. (#125) 2020-12-22 23:09:42 -08:00
Bruce Mitchener
1b9a90add6
Remove XWINDOWS define from FreeBSD, Linux, and macOS builds. (#124)
The right define is `XWINDOW` which is already defined via the
build system.
2020-12-22 23:08:00 -08:00
Bruce Mitchener
4ef79b54a5
Remove unused prototype for getpass(). (#123)
This function wasn't actually used here, which is good since it
is long deprecated.
2020-12-22 23:06:14 -08:00
Bruce Mitchener
a6ef508a7c
Remove ToMem macro. (#120)
We can always use `memcpy` to copy from a `hostent` struct to a
`sockaddr_in` struct as they will not be overlapping.
2020-12-22 22:57:40 -08:00
Bruce Mitchener
8b67b6b75a
Remove call to ieee_handler(). (#119)
When `FLTINT` is defined (which is currently only on SunOS), if
`OS5` was not defined, then it tried to use `ieee_handler` which
doesn't exist on Linux and friends. If we were to enable `FLTINT`
on more platforms, then we'd want to always be using more modern
signal handling and not `ieee_handler`.
2020-12-22 22:57:19 -08:00
Bruce Mitchener
33369268c1
Include termios as <termios.h>, not <sys/...>. (#118)
termios is available via `<termios.h>` on all supported platforms,
so variants of `<sys/termio.h>` and `<sys/termios.h>` are no
longer needed.
2020-12-22 22:56:54 -08:00
Larry Masinter
973db49422 Add a simple test.vm that runs opcode tests (fails on pi) 2020-12-22 12:39:17 -08:00