Move the FPU save/restore stuff from os.h to arch.h
[projects/cmucl/cmucl.git] / src / lisp / os.h
CommitLineData
62957726 1/*
dafb9e03 2 * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os.h,v 1.28 2011/09/01 05:18:26 rtoy Exp $
62957726 3 *
4 * Common interface for os-dependent functions.
5 *
6 */
7
e67c0397 8#ifndef _OS_H_
9#define _OS_H_
62957726 10
11#include "lisp.h"
12
0a3b5441 13#define DPRINTF(t,a) { if (t) fprintf a; }
14
eb44537a 15#ifdef DARWIN
16#include "Darwin-os.h"
17#else
62957726 18#ifdef MACH
19#include "mach-os.h"
20#else
21#ifdef sun
22#include "sunos-os.h"
28d03d3d 23#else
24#ifdef hpux
25#include "hpux-os.h"
6f4a04e5 26#else
27#ifdef osf1
28#include "osf1-os.h"
cdac17ab 29#else
30#ifdef irix
31#include "irix-os.h"
5ced0fdf 32#else
33#ifdef __FreeBSD__
34#include "FreeBSD-os.h"
35#else
195461c1 36#ifdef __OpenBSD__
37#include "OpenBSD-os.h"
38#else
4ea11535 39#ifdef __NetBSD__
40#include "NetBSD-os.h"
41#else
5ced0fdf 42#ifdef __linux__
43#include "Linux-os.h"
44#endif
45#endif
cdac17ab 46#endif
6f4a04e5 47#endif
28d03d3d 48#endif
62957726 49#endif
50#endif
195461c1 51#endif
4ea11535 52#endif
eb44537a 53#endif
62957726 54
9a8c1c2f 55#ifndef os_context_t
5d2cd5df 56#define os_context_t struct sigcontext
57#endif
571df509 58#ifndef HANDLER_ARGS
5d2cd5df 59#define HANDLER_ARGS int signal, int code, os_context_t *context
571df509 60#endif
61#ifndef CODE
62#define CODE(code) code
63#endif
571df509 64#ifndef SAVE_CONTEXT
65#define SAVE_CONTEXT() do {} while(0)
66#endif
44eba57f 67#ifndef RESTORE_FPU
68#define RESTORE_FPU(context) do {} while (0)
69#endif
571df509 70
62957726 71#define OS_VM_PROT_ALL (OS_VM_PROT_READ|OS_VM_PROT_WRITE|OS_VM_PROT_EXECUTE)
72
73extern os_vm_size_t os_vm_page_size;
74
dafb9e03 75extern void os_init0(const char *argv[], const char *envp[]);
0f0aed07 76extern void os_init(const char *argv[], const char *envp[]);
62957726 77extern void os_install_interrupt_handlers(void);
78
79extern os_vm_address_t os_allocate(os_vm_size_t len);
80extern os_vm_address_t os_allocate_at(os_vm_address_t addr, os_vm_size_t len);
81extern os_vm_address_t os_reallocate(os_vm_address_t addr,
9a8c1c2f 82 os_vm_size_t old_len, os_vm_size_t len);
62957726 83extern void os_deallocate(os_vm_address_t addr, os_vm_size_t len);
84extern void os_zero(os_vm_address_t addr, os_vm_size_t length);
85
86extern os_vm_address_t os_validate(os_vm_address_t addr, os_vm_size_t len);
87extern void os_invalidate(os_vm_address_t addr, os_vm_size_t len);
88extern os_vm_address_t os_map(int fd, int offset, os_vm_address_t addr,
89 os_vm_size_t len);
90extern void os_flush_icache(os_vm_address_t addr, os_vm_size_t len);
91extern void os_protect(os_vm_address_t addr, os_vm_size_t len,
9a8c1c2f 92
62957726 93 os_vm_prot_t protection);
94extern boolean valid_addr(os_vm_address_t test);
95
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))
100
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))
105
bf84be07 106extern void os_foreign_linkage_init(void);
9a8c1c2f 107extern void *os_dlsym(const char *sym_name, lispobj lib_list);
bf84be07 108
9a8c1c2f 109enum stack_zone_t { BOTH_ZONES, YELLOW_ZONE, RED_ZONE };
110extern int os_stack_grows_down(void);
111extern void os_guard_control_stack(int zone, int guard);
112extern int os_control_stack_overflow(void *, os_context_t *);
670d643f 113
9495c516 114unsigned long *os_sigcontext_reg(ucontext_t *, int);
115unsigned long *os_sigcontext_pc(ucontext_t *);
116unsigned char *os_sigcontext_fpu_reg(ucontext_t *, int);
b17a70c7 117unsigned int os_sigcontext_fpu_modes(ucontext_t *);
9495c516 118
68e8e5d1 119char* convert_lisp_string(char* c_string, void* lisp_string, int len);
120
e67c0397 121#endif /* _OS_H_ */