Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/runtime/memory/mem-win32.c
ViewVC logotype

Annotation of /sml/trunk/src/runtime/memory/mem-win32.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (view) (download) (as text)

1 : monnier 2 /* mem-win32.c
2 :     *
3 :     * COPYRIGHT (c) 1996 Bell Laboratories, Lucent Technologies.
4 :     *
5 :     * A simple memory module built on top of vmem alloc/free.
6 :     * This is currently win32 specific.
7 :     */
8 :    
9 :     #if defined(OPSYS_WIN32)
10 :     #include <windows.h>
11 :     #endif
12 :    
13 :     #include "ml-osdep.h"
14 :     #include "ml-base.h"
15 :     #include "memory.h"
16 :    
17 :     struct mem_obj {
18 :     Word_t *base; /* the base address of the object. */
19 :     Word_t sizeB; /* the object's size (in bytes) */
20 :     Word_t *mapBase; /* base address of the mapped region containing */
21 :     /* the object */
22 :     Addr_t mapSizeB; /* the size of the mapped region containing */
23 :     /* the object */
24 :     };
25 :    
26 :     #define MEM_OBJ_SZB (sizeof(mem_obj_t))
27 :    
28 :     PVT void *alloc_vmem();
29 :     PVT void free_vmem(void *);
30 :    
31 :     #define ALLOC_MEMOBJ() alloc_vmem(MEM_OBJ_SZB)
32 :     #define FREE_MEMOBJ free_vmem
33 :    
34 :     #include "mem-common.ins"
35 :    
36 :     /* alloc_vmem:
37 :     * Allocate some virtual memory.
38 :     */
39 :     PVT void *alloc_vmem(int nb)
40 :     {
41 :     void *p;
42 :    
43 :     p = (void *) VirtualAlloc(NULL,
44 :     nb,
45 :     MEM_COMMIT|MEM_RESERVE,
46 :     PAGE_EXECUTE_READWRITE);
47 :     if (p == NULL) {
48 :     Die("VirtualAlloc failed on request of size %lx\n", nb);
49 :     }
50 :     return p;
51 :     }
52 :    
53 :     /* free_vmem:
54 :     * Return memory to OS.
55 :     */
56 :     PVT void free_vmem (void *p)
57 :     {
58 :     if (!VirtualFree((LPVOID)p,
59 :     0,
60 :     MEM_RELEASE)) {
61 :     Die("unable to VirtualFree memory at %lx\n", p);
62 :     }
63 :    
64 :     }
65 :    
66 :     PVT status_t MapMemory (mem_obj_t *obj, Addr_t szb)
67 :     {
68 :     Addr_t offset, addr;
69 :    
70 :     if ((addr = (Addr_t) alloc_vmem(szb+BIBOP_PAGE_SZB)) == NIL(Addr_t)) {
71 :     return FAILURE;
72 :     }
73 :     obj->mapBase = (Addr_t *) addr;
74 :     obj->mapSizeB = szb+BIBOP_PAGE_SZB;
75 :     obj->sizeB = szb;
76 :     offset = BIBOP_PAGE_SZB - (addr & (BIBOP_PAGE_SZB-1));
77 :     addr += offset;
78 :     obj->base = (Addr_t *) addr;
79 :    
80 :     return SUCCESS;
81 :     }
82 :    
83 :     PVT void UnmapMemory (mem_obj_t *obj)
84 :     {
85 :     free_vmem(obj->mapBase);
86 :     obj->base = obj->mapBase = NULL;
87 :     obj->sizeB = obj->mapSizeB = 0;
88 :     }
89 :    
90 :     /* MEM_InitMemory:
91 :     */
92 :     void MEM_InitMemory ()
93 :     {
94 :     InitMemory();
95 :     } /* MEM_InitMemory */
96 :    
97 :     /* end of mem-vmem.c */
98 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0