| 62957726 |
1 | /* |
| 62957726 |
2 | * Common interface for os-dependent functions. |
| 3 | * |
| 4 | */ |
| 5 | |
| e67c0397 |
6 | #ifndef _OS_H_ |
| 7 | #define _OS_H_ |
| 62957726 |
8 | |
| 9 | #include "lisp.h" |
| 10 | |
| 0a3b5441 |
11 | #define DPRINTF(t,a) { if (t) fprintf a; } |
| 12 | |
| eb44537a |
13 | #ifdef DARWIN |
| 14 | #include "Darwin-os.h" |
| 15 | #else |
| 62957726 |
16 | #ifdef MACH |
| 17 | #include "mach-os.h" |
| 18 | #else |
| 19 | #ifdef sun |
| 20 | #include "sunos-os.h" |
| 28d03d3d |
21 | #else |
| 22 | #ifdef hpux |
| 23 | #include "hpux-os.h" |
| 6f4a04e5 |
24 | #else |
| 25 | #ifdef osf1 |
| 26 | #include "osf1-os.h" |
| cdac17ab |
27 | #else |
| 28 | #ifdef irix |
| 29 | #include "irix-os.h" |
| 5ced0fdf |
30 | #else |
| 31 | #ifdef __FreeBSD__ |
| 32 | #include "FreeBSD-os.h" |
| 33 | #else |
| 195461c1 |
34 | #ifdef __OpenBSD__ |
| 35 | #include "OpenBSD-os.h" |
| 36 | #else |
| 4ea11535 |
37 | #ifdef __NetBSD__ |
| 38 | #include "NetBSD-os.h" |
| 39 | #else |
| 5ced0fdf |
40 | #ifdef __linux__ |
| 41 | #include "Linux-os.h" |
| 42 | #endif |
| 43 | #endif |
| cdac17ab |
44 | #endif |
| 6f4a04e5 |
45 | #endif |
| 28d03d3d |
46 | #endif |
| 62957726 |
47 | #endif |
| 48 | #endif |
| 195461c1 |
49 | #endif |
| 4ea11535 |
50 | #endif |
| eb44537a |
51 | #endif |
| 62957726 |
52 | |
| 9a8c1c2f |
53 | #ifndef os_context_t |
| 5d2cd5df |
54 | #define os_context_t struct sigcontext |
| 55 | #endif |
| 571df509 |
56 | #ifndef HANDLER_ARGS |
| 5d2cd5df |
57 | #define HANDLER_ARGS int signal, int code, os_context_t *context |
| 571df509 |
58 | #endif |
| 59 | #ifndef CODE |
| 60 | #define CODE(code) code |
| 61 | #endif |
| 571df509 |
62 | #ifndef SAVE_CONTEXT |
| 63 | #define SAVE_CONTEXT() do {} while(0) |
| 64 | #endif |
| 44eba57f |
65 | #ifndef RESTORE_FPU |
| 66 | #define RESTORE_FPU(context) do {} while (0) |
| 67 | #endif |
| 571df509 |
68 | |
| 62957726 |
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 | |
| dafb9e03 |
73 | extern void os_init0(const char *argv[], const char *envp[]); |
| 0f0aed07 |
74 | extern void os_init(const char *argv[], const char *envp[]); |
| 62957726 |
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, |
| 9a8c1c2f |
80 | os_vm_size_t old_len, os_vm_size_t len); |
| 62957726 |
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, |
| 9a8c1c2f |
90 | |
| 62957726 |
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 | |
| bf84be07 |
104 | extern void os_foreign_linkage_init(void); |
| 9a8c1c2f |
105 | extern void *os_dlsym(const char *sym_name, lispobj lib_list); |
| bf84be07 |
106 | |
| 9a8c1c2f |
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 *); |
| 670d643f |
111 | |
| 9495c516 |
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); |
| b17a70c7 |
115 | unsigned int os_sigcontext_fpu_modes(ucontext_t *); |
| 9495c516 |
116 | |
| 68e8e5d1 |
117 | char* convert_lisp_string(char* c_string, void* lisp_string, int len); |
| 118 | |
| e67c0397 |
119 | #endif /* _OS_H_ */ |