7ef7af474fcb7d581f02f794b46fd8bfcecc6bf2
[projects/cmucl/cmucl.git] / src / lisp / sparc-validate.h
1 /*
2
3  $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/sparc-validate.h,v 1.21 2005/09/15 18:26:52 rtoy Rel $
4
5  This code was written as part of the CMU Common Lisp project at
6  Carnegie Mellon University, and has been placed in the public domain.
7
8 */
9
10 #ifndef _SPARC_VALIDATE_H_
11 #define _SPARC_VALIDATE_H_
12
13 /*
14  * Address map:
15  *
16  *      0x00000000->0x0f800000  248M C code and stuff(?)
17  *      0x0f800000->0x10000000    8M for linkage table area
18  *      0x10000000->0x20000000  256M Read-Only Space.
19  *      0x20000000->0x28000000  128M Binding stack growing up.
20  *      0x28000000->0x38000000  256M Static Space.
21  *      0x38000000->0x40000000  128M Control stack growing up.
22  *      0x40000000->0x80000000 1024M Dynamic space 1
23  *      0x80000000->0xc0000000 1024M Dynamic space 2
24  *      0xc0000000->0xffffffff 1024M C stack, dynamic libs, etc.      
25  *
26  * With GENCGC:
27  *
28  *      0x00000000->0x0f800000  248M C code and stuff(?)
29  *      0x0f800000->0x10000000    8M for linkage table area
30  *      0x10000000->0x20000000  256M Read-Only Space.
31  *      0x20000000->0x28000000  128M Binding stack growing up.
32  *      0x28000000->0x38000000  256M Static Space.
33  *      0x38000000->0x40000000  128M Control stack growing up.
34  *      0x40000000->0xf0000000 2816M Dynamic space 1
35  *      0xf0000000->0xffffffff 1024M C stack, dynamic libs, etc.      
36  *
37  * But look at the definitions below to see how much is really
38  * allocated.  The numbers above are the maximums allowed.  We might
39  * use less.
40  *
41  * Almost.  We leave a hole of size 32 KB at the end of each of these
42  * spaces.
43  *
44  *
45  * It may be possible to increase the size of the dynamic spaces even
46  * further, but Casper H.S. Dik says shared libraries are loaded
47  * directly under the stack, so we need to leave some space for the C
48  * stack and shared libraries.  He also says the top of stack is
49  * 0xffbf0000 for Ultrasparcs in Solaris 7+, but it's 0xf0000000 for
50  * sun4m (and 4u in S2.6-) 0xe0000000 for sun4d)
51  *
52  * Shared libraries can be mapped anywhere there's room.
53  */
54
55 /* Need this to define the spaces described in Lisp */
56
57 /*#include "internals.h"*/
58
59 /* 128 MB */
60 #define MB_128  (0x08000000)
61 /*
62  *
63  * Note: I'm not sure why, but the sizes must be on a
64  * SPARSE_BLOCK_SIZE (32 KB) boundary.  (See seg_force_resident in
65  * sunos-os.c.  If not, then mapping the holes causes segfaults in
66  * initialization.)
67  *
68  * Sparse block size must be larger than the system page size.
69  */
70
71 #define SPARSE_BLOCK_SIZE (1<<15)
72 #define SPARSE_SIZE_MASK (SPARSE_BLOCK_SIZE-1)
73
74
75 #ifdef LINKAGE_TABLE
76 /*
77  * This space start better match the value of
78  * target-foreign-linkage-space-start defined in sparc/parms.lisp!
79  *
80  * See the notes there!
81  */
82
83 #define FOREIGN_LINKAGE_SPACE_START (LinkageSpaceStart)
84
85 /*
86  * This allows for about 510K symbols (assuming each entry is 16 bytes
87  * long).  Hope that's enough!  Make sure this doesn't overlap the
88  * READ_ONLY_SPACE_START!
89  */
90 #define FOREIGN_LINKAGE_SPACE_SIZE  (0x00800000 - SPARSE_BLOCK_SIZE)    /* 8 MB - 32 KB */
91 #endif
92
93
94 #define READ_ONLY_SPACE_START   (SpaceStart_TargetReadOnly)
95 #define READ_ONLY_SPACE_SIZE    ((2*MB_128) - SPARSE_BLOCK_SIZE)        /* 256 MB - 32 KB, 256 MB max */
96
97 #define BINDING_STACK_START     (0x20000000)
98 #define BINDING_STACK_SIZE      (MB_128 - SPARSE_BLOCK_SIZE)    /* 128 MB - 32 KB, 128 MB max */
99
100 #define STATIC_SPACE_START      (SpaceStart_TargetStatic)
101 #define STATIC_SPACE_SIZE       ((2*MB_128) - SPARSE_BLOCK_SIZE)        /* 256 MB - 32 KB, 256 MB max */
102
103 #define CONTROL_STACK_START     (0x38000000)
104 #define CONTROL_STACK_SIZE      (MB_128 - SPARSE_BLOCK_SIZE)    /* 128 MB - 32 KB, 128 MB max */
105 #define CONTROL_STACK_END       (CONTROL_STACK_START + control_stack_size)
106
107 #define DYNAMIC_0_SPACE_START   (SpaceStart_TargetDynamic)
108
109 /* This isn't used with GENCGC */
110 #define DYNAMIC_1_SPACE_START   (0x80000000)
111
112 /* The default dynamic space to allocate */
113 /*
114  * On Solaris 10, Martin Rydstrom reports that subtracting off
115  * SPARSE_BLOCK_SIZE causes CMUCL not to work (GC lossage).  But
116  * specifying -dynamic-space-size 256 works fine.  I don't understand
117  * how that can be, but we lets not subtract it off.
118  */
119 #if 0
120 #define DEFAULT_DYNAMIC_SPACE_SIZE      (0x10000000 - SPARSE_BLOCK_SIZE)        /* 256 MB - 32 KB */
121 #else
122 #define DEFAULT_DYNAMIC_SPACE_SIZE      (0x10000000)    /* 256 MB */
123 #endif
124
125 /* The maximum dynamic space that we can allocate */
126 #ifdef GENCGC
127 /*
128  * For GENCGC, we can use both dynamic spaces, so we get at least
129  * double the heap size.
130  */
131 #define DYNAMIC_SPACE_SIZE      (0xB0000000 - SPARSE_BLOCK_SIZE)        /* 2816 MB - 32 KB max */
132 #else
133 #define DYNAMIC_SPACE_SIZE      (0x40000000 - SPARSE_BLOCK_SIZE)        /* 1GB - 32 KB max */
134 #endif
135
136 #endif /* _SPARC_VALIDATE_H_ */