source: branches/win64/lisp-kernel/memprotect.h @ 8707

Last change on this file since 8707 was 8707, checked in by andreas, 13 years ago
  • Change type of all memory size parameters from int to natural
  • API for memory mapping files, with implementation for UNIX and a cheat for Windows
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.0 KB
Line 
1/*
2   Copyright (C) 1994-2001 Digitool, Inc
3   This file is part of OpenMCL. 
4
5   OpenMCL is licensed under the terms of the Lisp Lesser GNU Public
6   License , known as the LLGPL and distributed with OpenMCL as the
7   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
8   which is distributed with OpenMCL as the file "LGPL".  Where these
9   conflict, the preamble takes precedence. 
10
11   OpenMCL is referenced in the preamble as the "LIBRARY."
12
13   The LLGPL is also available online at
14   http://opensource.franz.com/preamble.html
15*/
16
17#ifndef __memprotect_h__
18#define __memprotect_h__
19
20
21
22#include "lisptypes.h"
23#ifdef PPC
24#include "ppc-constants.h"
25#endif
26#include <signal.h>
27#ifndef WINDOWS
28#include <ucontext.h>
29#endif
30
31#ifdef WINDOWS
32#define MAP_FAILED ((void *)(-1))
33
34#define MEMPROTECT_NONE PAGE_NOACCESS
35#define MEMPROTECT_RO   PAGE_READONLY
36#define MEMPROTECT_RW   PAGE_READWRITE
37#define MEMPROTECT_RX   PAGE_EXECUTE_READ
38#define MEMPROTECT_RWX  PAGE_EXECUTE_READWRITE
39
40#else
41
42#define MEMPROTECT_NONE PROT_NONE
43#define MEMPROTECT_RO   PROT_READ
44#define MEMPROTECT_RW   (PROT_READ|PROT_WRITE)
45#define MEMPROTECT_RX   (PROT_READ|PROT_EXEC)
46#define MEMPROTECT_RWX  (PROT_READ|PROT_WRITE|PROT_EXEC)
47
48
49
50#endif
51
52LogicalAddress
53ReserveMemoryForHeap(LogicalAddress want, natural totalsize);
54
55int
56CommitMemory (LogicalAddress start, natural len);
57
58void
59UnCommitMemory (LogicalAddress start, natural len);
60
61LogicalAddress
62MapMemory(LogicalAddress addr, natural nbytes, int protection);
63
64LogicalAddress
65MapMemoryForStack(natural nbytes);
66
67int
68UnMapMemory(LogicalAddress addr, natural nbytes);
69
70int
71ProtectMemory(LogicalAddress, natural);
72
73int
74UnProtectMemory(LogicalAddress, natural);
75
76int
77MapFile(LogicalAddress addr, natural pos, natural nbytes, int permissions, int fd);
78
79typedef enum {
80  kNotProtected,                /* At least not at the moment. */
81  kVSPsoftguard,
82  kSPsoftguard,
83  kTSPsoftguard,
84  kSPhardguard,                 /* Touch one and die. */
85  kVSPhardguard,
86  kTSPhardguard,
87  kHEAPsoft,                    /* Uninitialized page in the heap */
88  kHEAPhard,                    /* The end-of-the-line in the heap */
89  /* Phony last entry. */
90  kNumProtectionKinds
91  } lisp_protection_kind;
92
93typedef
94struct protected_area {
95  struct protected_area *next;
96  BytePtr start;                /* first byte (page-aligned) that might be protected */
97  BytePtr end;                  /* last byte (page-aligned) that could be protected */
98  unsigned nprot;               /* Might be 0 */
99  unsigned protsize;            /* number of bytes to protect */
100  lisp_protection_kind why;
101} protected_area, *protected_area_ptr;
102
103
104/* Various functions that try to respond to a protection violation */
105typedef 
106  OSStatus (protection_handler)(ExceptionInformation *, protected_area_ptr, BytePtr);
107
108protection_handler
109  do_spurious_wp_fault,
110  do_soft_stack_overflow,
111  do_hard_stack_overflow,
112  do_tenured_space_write,
113  do_heap_soft_probe,
114  do_heap_hard_probe;
115
116extern protection_handler
117  *protection_handlers[];
118
119
120void
121exception_cleanup(void);
122
123
124 
125#endif /* __memprotect_h__ */
Note: See TracBrowser for help on using the repository browser.