Clean up RCS ids
[projects/cmucl/cmucl.git] / src / lisp / os.h
1 /*
2  * Common interface for os-dependent functions.
3  *
4  */
5
6 #ifndef _OS_H_
7 #define _OS_H_
8
9 #include "lisp.h"
10
11 #define DPRINTF(t,a) { if (t) fprintf a; }
12
13 #ifdef DARWIN
14 #include "Darwin-os.h"
15 #else
16 #ifdef MACH
17 #include "mach-os.h"
18 #else
19 #ifdef sun
20 #include "sunos-os.h"
21 #else
22 #ifdef hpux
23 #include "hpux-os.h"
24 #else
25 #ifdef osf1
26 #include "osf1-os.h"
27 #else
28 #ifdef irix
29 #include "irix-os.h"
30 #else
31 #ifdef __FreeBSD__
32 #include "FreeBSD-os.h"
33 #else
34 #ifdef __OpenBSD__
35 #include "OpenBSD-os.h"
36 #else
37 #ifdef __NetBSD__
38 #include "NetBSD-os.h"
39 #else
40 #ifdef __linux__
41 #include "Linux-os.h"
42 #endif
43 #endif
44 #endif
45 #endif
46 #endif
47 #endif
48 #endif
49 #endif
50 #endif
51 #endif
52
53 #ifndef os_context_t
54 #define os_context_t struct sigcontext
55 #endif
56 #ifndef HANDLER_ARGS
57 #define HANDLER_ARGS int signal, int code, os_context_t *context
58 #endif
59 #ifndef CODE
60 #define CODE(code)  code
61 #endif
62 #ifndef SAVE_CONTEXT
63 #define SAVE_CONTEXT() do {} while(0)
64 #endif
65 #ifndef RESTORE_FPU
66 #define RESTORE_FPU(context) do {} while (0)
67 #endif
68
69 #define OS_VM_PROT_ALL (OS_VM_PROT_READ|OS_VM_PROT_WRITE|OS_VM_PROT_EXECUTE)
70
71 extern os_vm_size_t os_vm_page_size;
72
73 extern void os_init0(const char *argv[], const char *envp[]);
74 extern void os_init(const char *argv[], const char *envp[]);
75 extern void os_install_interrupt_handlers(void);
76
77 extern os_vm_address_t os_allocate(os_vm_size_t len);
78 extern os_vm_address_t os_allocate_at(os_vm_address_t addr, os_vm_size_t len);
79 extern os_vm_address_t os_reallocate(os_vm_address_t addr,
80                                      os_vm_size_t old_len, os_vm_size_t len);
81 extern void os_deallocate(os_vm_address_t addr, os_vm_size_t len);
82 extern void os_zero(os_vm_address_t addr, os_vm_size_t length);
83
84 extern os_vm_address_t os_validate(os_vm_address_t addr, os_vm_size_t len);
85 extern void os_invalidate(os_vm_address_t addr, os_vm_size_t len);
86 extern os_vm_address_t os_map(int fd, int offset, os_vm_address_t addr,
87                               os_vm_size_t len);
88 extern void os_flush_icache(os_vm_address_t addr, os_vm_size_t len);
89 extern void os_protect(os_vm_address_t addr, os_vm_size_t len,
90
91                        os_vm_prot_t protection);
92 extern boolean valid_addr(os_vm_address_t test);
93
94 #define os_trunc_to_page(addr) \
95     (os_vm_address_t)(((long)(addr))&~(os_vm_page_size-1))
96 #define os_round_up_to_page(addr) \
97     os_trunc_to_page((addr)+(os_vm_page_size-1))
98
99 #define os_trunc_size_to_page(size) \
100     (os_vm_size_t)(((long)(size))&~(os_vm_page_size-1))
101 #define os_round_up_size_to_page(size) \
102     os_trunc_size_to_page((size)+(os_vm_page_size-1))
103
104 extern void os_foreign_linkage_init(void);
105 extern void *os_dlsym(const char *sym_name, lispobj lib_list);
106
107 enum stack_zone_t { BOTH_ZONES, YELLOW_ZONE, RED_ZONE };
108 extern int os_stack_grows_down(void);
109 extern void os_guard_control_stack(int zone, int guard);
110 extern int os_control_stack_overflow(void *, os_context_t *);
111
112 unsigned long *os_sigcontext_reg(ucontext_t *, int);
113 unsigned long *os_sigcontext_pc(ucontext_t *);
114 unsigned char *os_sigcontext_fpu_reg(ucontext_t *, int);
115 unsigned int os_sigcontext_fpu_modes(ucontext_t *);
116
117 char* convert_lisp_string(char* c_string, void* lisp_string, int len);
118
119 #endif /* _OS_H_ */