source: trunk/source/lisp-kernel/memprotect.h @ 14233

Last change on this file since 14233 was 14233, checked in by gb, 9 years ago

Don't use the (Linux-specific ?) MAP_GROWSDOWN mmap option when allocating
stacks; it doesn't do what we thought it did and using it seems to trigger
a bug in some 2.6.32 Linux kernels. See ticket:731, which this change might
fix.

  • 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) 2009 Clozure Associates
3   Copyright (C) 1994-2001 Digitool, Inc
4   This file is part of Clozure CL. 
5
6   Clozure CL is licensed under the terms of the Lisp Lesser GNU Public
7   License , known as the LLGPL and distributed with Clozure CL as the
8   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
9   which is distributed with Clozure CL as the file "LGPL".  Where these
10   conflict, the preamble takes precedence. 
11
12   Clozure CL is referenced in the preamble as the "LIBRARY."
13
14   The LLGPL is also available online at
15   http://opensource.franz.com/preamble.html
16*/
17
18#ifndef __memprotect_h__
19#define __memprotect_h__
20
21
22
23#include <signal.h>
24#ifndef WINDOWS
25#ifdef DARWIN
26#include <sys/ucontext.h>
27#else
28#include <ucontext.h>
29#endif
30#endif
31
32#ifdef WINDOWS
33#define MAP_FAILED ((void *)(-1))
34
35#define MEMPROTECT_NONE PAGE_NOACCESS
36#define MEMPROTECT_RO   PAGE_READONLY
37#define MEMPROTECT_RW   PAGE_READWRITE
38#define MEMPROTECT_RX   PAGE_EXECUTE_READ
39#define MEMPROTECT_RWX  PAGE_EXECUTE_READWRITE
40
41#else
42
43#define MEMPROTECT_NONE PROT_NONE
44#define MEMPROTECT_RO   PROT_READ
45#define MEMPROTECT_RW   (PROT_READ|PROT_WRITE)
46#define MEMPROTECT_RX   (PROT_READ|PROT_EXEC)
47#define MEMPROTECT_RWX  (PROT_READ|PROT_WRITE|PROT_EXEC)
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.