From 3489d6bc3ae2de7dc3b0c3396d218d634bcc9a36 Mon Sep 17 00:00:00 2001
From: hallgren <hallgren>
Date: Tue, 5 Jul 1994 16:09:34 +0000
Subject: [PATCH] Initial revision

---
 lisp/irix-nm   |   5 ++
 lisp/irix-os.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++
 lisp/irix-os.h |  13 +++++
 3 files changed, 150 insertions(+)
 create mode 100755 lisp/irix-nm
 create mode 100644 lisp/irix-os.c
 create mode 100644 lisp/irix-os.h

diff --git a/lisp/irix-nm b/lisp/irix-nm
new file mode 100755
index 000000000..bcc22d46a
--- /dev/null
+++ b/lisp/irix-nm
@@ -0,0 +1,5 @@
+#!/bin/csh -f
+
+/bin/nm -Bgv $argv | sed -e 's/ (weak)//'
+
+exit 0
diff --git a/lisp/irix-os.c b/lisp/irix-os.c
new file mode 100644
index 000000000..316a1a7d6
--- /dev/null
+++ b/lisp/irix-os.c
@@ -0,0 +1,132 @@
+/*
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/irix-os.c,v 1.1 1994/07/05 16:09:23 hallgren Exp $
+ *
+ * OS-dependent routines.  This file (along with os.h) exports an
+ * OS-independent interface to the operating system VM facilities.
+ * Suprisingly, this interface looks a lot like the Mach interface
+ * (but simpler in some places).  For some operating systems, a subset
+ * of these functions will have to be emulated.
+ *
+ * This is the IRIX version.  By Sean Hallgren.
+ *
+ */
+
+#include <stdio.h>
+#include <sys/file.h>
+#include <errno.h>
+#include "./signal.h"
+#include "os.h"
+#include "arch.h"
+#include "interrupt.h"
+#include "lispregs.h"
+#include <sys/types.h>
+#include <sys/sysinfo.h>
+#include <sys/proc.h>
+
+/* #define DEBUG */
+
+os_vm_size_t os_vm_page_size=(-1);
+
+int zero_fd;
+
+void
+os_init()
+{
+  zero_fd = open("/dev/zero",O_RDONLY);
+  os_vm_page_size=getpagesize();
+}
+
+os_vm_address_t
+os_validate(os_vm_address_t addr, os_vm_size_t len)
+{
+  int flags = MAP_PRIVATE|MAP_AUTORESRV;
+
+#ifdef DEBUG
+  printf("os_validate: addr = %x, len = %x\n",addr,len);
+#endif
+
+  if(addr) flags|=MAP_FIXED;
+
+  if((addr=mmap(addr,len,OS_VM_PROT_ALL,flags,zero_fd,0)) ==
+     (os_vm_address_t) -1)
+    perror("mmap");
+
+  return addr;
+}
+
+void
+os_invalidate(os_vm_address_t addr, os_vm_size_t len)
+{
+#ifdef DEBUG
+  printf("os_invalidate: addr = %x, len = %x\n",addr,len);
+#endif
+
+  if(munmap(addr,len) == -1)
+    perror("munmap");
+}
+
+os_vm_address_t
+os_map(int fd, int offset, os_vm_address_t addr, os_vm_size_t len)
+{
+#ifdef DEBUG
+  printf("os_map: fd = %d, offset = %d, addr = %x, len = %x\n",fd,offset,addr,len);
+#endif
+
+  if((addr=mmap(addr,len,OS_VM_PROT_ALL,MAP_PRIVATE|MAP_FIXED,fd,
+		(off_t) offset)) == (os_vm_address_t) -1)
+    perror("mmap");
+  
+  return addr;
+}
+
+void
+sanctify_for_execution(os_vm_address_t addr, os_vm_size_t len)
+{
+  char* end_addr = addr+len;
+  addr = os_trunc_to_page(addr);
+  len = end_addr - addr;
+
+  if(mprotect(addr,len,OS_VM_PROT_ALL)== -1)
+    perror("mprotect");
+}
+
+void
+os_flush_icache(os_vm_address_t address, os_vm_size_t length)
+{
+  sanctify_for_execution(address,length);
+}
+
+void
+os_protect(os_vm_address_t addr, os_vm_size_t len, os_vm_prot_t prot)
+{
+  if(mprotect(addr, len, prot) == -1)
+    perror("mprotect");
+}
+
+boolean
+valid_addr(os_vm_address_t addr)
+{
+}
+
+static void
+sigbus_handler(int signal, int code, struct sigcontext *context)
+{
+  if(!interrupt_maybe_gc(signal, code, context))
+    interrupt_handle_now(signal, code, context);
+}
+
+static void
+sigsegv_handler(int signal, int code, struct sigcontext *context)
+{
+  if(!interrupt_maybe_gc(signal, code, context))
+    interrupt_handle_now(signal, code, context);
+}
+
+void 
+os_install_interrupt_handlers(void)
+{
+  interrupt_install_low_level_handler(SIGSEGV,sigsegv_handler);
+  interrupt_install_low_level_handler(SIGBUS,sigbus_handler);
+}
+
+
diff --git a/lisp/irix-os.h b/lisp/irix-os.h
new file mode 100644
index 000000000..faf42230a
--- /dev/null
+++ b/lisp/irix-os.h
@@ -0,0 +1,13 @@
+#include <sys/types.h>
+#include <sys/mman.h>
+
+typedef caddr_t os_vm_address_t;
+typedef size_t os_vm_size_t;
+typedef off_t os_vm_offset_t;
+typedef int os_vm_prot_t;
+
+#define OS_VM_PROT_READ PROT_READ
+#define OS_VM_PROT_WRITE PROT_WRITE
+#define OS_VM_PROT_EXECUTE PROT_EXECUTE
+
+#define OS_VM_DEFAULT_PAGESIZE	4096
-- 
GitLab