• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /*
18  * System utilities.
19  */
20 #ifndef _LIBDEX_SYSUTIL
21 #define _LIBDEX_SYSUTIL
22 
23 #include <sys/types.h>
24 
25 /*
26  * Use this to keep track of mapped segments.
27  */
28 typedef struct MemMapping {
29     void*   addr;           /* start of data */
30     size_t  length;         /* length of data */
31 
32     void*   baseAddr;       /* page-aligned base address */
33     size_t  baseLength;     /* length of mapping */
34 } MemMapping;
35 
36 /*
37  * Copy a map.
38  */
39 void sysCopyMap(MemMapping* dst, const MemMapping* src);
40 
41 /*
42  * Load a file into a new shared memory segment.  All data from the current
43  * offset to the end of the file is pulled in.
44  *
45  * The segment is read-write, allowing VM fixups.  (It should be modified
46  * to support .gz/.zip compressed data.)
47  *
48  * On success, "pMap" is filled in, and zero is returned.
49  */
50 int sysLoadFileInShmem(int fd, MemMapping* pMap);
51 
52 /*
53  * Map a file (from fd's current offset) into a shared,
54  * read-only memory segment.
55  *
56  * On success, "pMap" is filled in, and zero is returned.
57  */
58 int sysMapFileInShmem(int fd, MemMapping* pMap);
59 
60 /*
61  * Like sysMapFileInShmem, but on only part of a file.
62  */
63 int sysMapFileSegmentInShmem(int fd, off_t start, long length,
64     MemMapping* pMap);
65 
66 /*
67  * Create a private anonymous mapping, useful for large allocations.
68  *
69  * On success, "pMap" is filled in, and zero is returned.
70  */
71 int sysCreatePrivateMap(size_t length, MemMapping* pMap);
72 
73 /*
74  * Release the pages associated with a shared memory segment.
75  *
76  * This does not free "pMap"; it just releases the memory.
77  */
78 void sysReleaseShmem(MemMapping* pMap);
79 
80 #endif /*_DALVIK_SYSUTIL*/
81