X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fosf1-os.c;h=baba3bfd9095862bad120a5137ff0714c446d620;hb=afb24f64fe95ed8ebce578ba7526b8a0a7aa5f14;hp=57ee8c1c8981ded325daf5cb80a302f7c063fab6;hpb=9f10bc102adce15a820027777a03e49a7b7623da;p=sbcl.git diff --git a/src/runtime/osf1-os.c b/src/runtime/osf1-os.c index 57ee8c1..baba3bf 100644 --- a/src/runtime/osf1-os.c +++ b/src/runtime/osf1-os.c @@ -4,9 +4,9 @@ * 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 OSF/1 version, based on the Linux version, itself based - * on the OSF1 version from CMUCL by Sean Hallgren. Now _there's_ + * on the OSF1 version from CMUCL by Sean Hallgren. Now _there's_ * a metacircularity for you ... */ @@ -24,6 +24,7 @@ #include #include #include +#include "sbcl.h" #include "./signal.h" #include "os.h" #include "arch.h" @@ -31,7 +32,6 @@ #include "interrupt.h" #include "interr.h" #include "lispregs.h" -#include "sbcl.h" #include #include #include @@ -51,7 +51,8 @@ size_t os_vm_page_size; -void os_init(void) +void +os_init(char *argv[], char *envp[]) { os_vm_page_size = getpagesize(); } @@ -65,8 +66,8 @@ os_validate(os_vm_address_t addr, os_vm_size_t len) else flags |= MAP_VARIABLE; if((addr=mmap(addr,len,OS_VM_PROT_ALL,flags,-1,0)) == (os_vm_address_t) -1) - perror("mmap"); - + perror("mmap"); + return addr; } @@ -74,7 +75,7 @@ void os_invalidate(os_vm_address_t addr, os_vm_size_t len) { if (munmap(addr,len) == -1) { - perror("munmap"); + perror("munmap"); } } @@ -82,13 +83,13 @@ os_vm_address_t os_map(int fd, int offset, os_vm_address_t addr, os_vm_size_t len) { addr = mmap(addr, len, - OS_VM_PROT_ALL, - MAP_PRIVATE | MAP_FILE | MAP_FIXED, - fd, (off_t) offset); + OS_VM_PROT_ALL, + MAP_PRIVATE | MAP_FILE | MAP_FIXED, + fd, (off_t) offset); if (addr == MAP_FAILED) { - perror("mmap"); - lose("unexpected mmap(..) failure"); + perror("mmap"); + lose("unexpected mmap(..) failure\n"); } return addr; @@ -98,7 +99,7 @@ void os_protect(os_vm_address_t address, os_vm_size_t length, os_vm_prot_t prot) { if (mprotect(address, length, prot) == -1) { - perror("mprotect"); + perror("mprotect"); } } @@ -109,9 +110,9 @@ is_valid_lisp_addr(os_vm_address_t addr) os_vm_address_t newaddr; newaddr=os_trunc_to_page(addr); if((ret=mvalid(newaddr,newaddr-addr+4,OS_VM_PROT_ALL)) == 0) - return TRUE; + return TRUE; else if(errno==EINVAL) - perror("mvalid"); + perror("mvalid"); return FALSE; } @@ -126,21 +127,15 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context) os_context_t *context = arch_os_get_context(&void_context); os_vm_address_t addr = arch_get_bad_addr(signal,info,context); - - if (addr != NULL && - *os_context_register_addr(context,reg_ALLOC) & (1L<<63)){ - /* this is lifted from linux-os.c, so violates OOAO */ - *os_context_register_addr(context,reg_ALLOC) -= (1L<<63); - interrupt_handle_pending(context); - } else if(((addr>=DYNAMIC_0_SPACE_END) && (addr=DYNAMIC_1_SPACE_END) && (addr