2 * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os.h,v 1.28 2011/09/01 05:18:26 rtoy Exp $
4 * Common interface for os-dependent functions.
13 #define DPRINTF(t,a) { if (t) fprintf a; }
16 #include "Darwin-os.h"
34 #include "FreeBSD-os.h"
37 #include "OpenBSD-os.h"
40 #include "NetBSD-os.h"
56 #define os_context_t struct sigcontext
59 #define HANDLER_ARGS int signal, int code, os_context_t *context
62 #define CODE(code) code
65 #define SAVE_CONTEXT() do {} while(0)
68 #define RESTORE_FPU(context) do {} while (0)
71 #define OS_VM_PROT_ALL (OS_VM_PROT_READ|OS_VM_PROT_WRITE|OS_VM_PROT_EXECUTE)
73 extern os_vm_size_t os_vm_page_size;
75 extern void os_init0(const char *argv[], const char *envp[]);
76 extern void os_init(const char *argv[], const char *envp[]);
77 extern void os_install_interrupt_handlers(void);
79 extern os_vm_address_t os_allocate(os_vm_size_t len);
80 extern os_vm_address_t os_allocate_at(os_vm_address_t addr, os_vm_size_t len);
81 extern os_vm_address_t os_reallocate(os_vm_address_t addr,
82 os_vm_size_t old_len, os_vm_size_t len);
83 extern void os_deallocate(os_vm_address_t addr, os_vm_size_t len);
84 extern void os_zero(os_vm_address_t addr, os_vm_size_t length);
86 extern os_vm_address_t os_validate(os_vm_address_t addr, os_vm_size_t len);
87 extern void os_invalidate(os_vm_address_t addr, os_vm_size_t len);
88 extern os_vm_address_t os_map(int fd, int offset, os_vm_address_t addr,
90 extern void os_flush_icache(os_vm_address_t addr, os_vm_size_t len);
91 extern void os_protect(os_vm_address_t addr, os_vm_size_t len,
93 os_vm_prot_t protection);
94 extern boolean valid_addr(os_vm_address_t test);
96 #define os_trunc_to_page(addr) \
97 (os_vm_address_t)(((long)(addr))&~(os_vm_page_size-1))
98 #define os_round_up_to_page(addr) \
99 os_trunc_to_page((addr)+(os_vm_page_size-1))
101 #define os_trunc_size_to_page(size) \
102 (os_vm_size_t)(((long)(size))&~(os_vm_page_size-1))
103 #define os_round_up_size_to_page(size) \
104 os_trunc_size_to_page((size)+(os_vm_page_size-1))
106 extern void os_foreign_linkage_init(void);
107 extern void *os_dlsym(const char *sym_name, lispobj lib_list);
109 enum stack_zone_t { BOTH_ZONES, YELLOW_ZONE, RED_ZONE };
110 extern int os_stack_grows_down(void);
111 extern void os_guard_control_stack(int zone, int guard);
112 extern int os_control_stack_overflow(void *, os_context_t *);
114 unsigned long *os_sigcontext_reg(ucontext_t *, int);
115 unsigned long *os_sigcontext_pc(ucontext_t *);
116 unsigned char *os_sigcontext_fpu_reg(ucontext_t *, int);
117 unsigned int os_sigcontext_fpu_modes(ucontext_t *);
120 extern boolean os_support_sse2(void);
123 char* convert_lisp_string(char* c_string, void* lisp_string, int len);