linux.cc (11383:5ac090acd180) linux.cc (11413:3d47d83a48eb)
1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 28 unchanged lines hidden (view full) ---

37 * Authors: Gabe Black
38 */
39
40#include "arch/x86/linux/linux.hh"
41
42#include <fcntl.h>
43#include <sys/mman.h>
44
1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 28 unchanged lines hidden (view full) ---

37 * Authors: Gabe Black
38 */
39
40#include "arch/x86/linux/linux.hh"
41
42#include <fcntl.h>
43#include <sys/mman.h>
44
45// open(2) flags translation table
46SyscallFlagTransTable X86Linux64::openFlagTable[] = {
47#ifdef _MSC_VER
48 { X86Linux64::TGT_O_RDONLY, _O_RDONLY },
49 { X86Linux64::TGT_O_WRONLY, _O_WRONLY },
50 { X86Linux64::TGT_O_RDWR, _O_RDWR },
51 { X86Linux64::TGT_O_CREAT, _O_CREAT },
52 { X86Linux64::TGT_O_EXCL, _O_EXCL },
53#ifdef _O_NOCTTY
54 { X86Linux64::TGT_O_NOCTTY, _O_NOCTTY },
55#endif
56 { X86Linux64::TGT_O_TRUNC, _O_TRUNC },
57 { X86Linux64::TGT_O_APPEND, _O_APPEND },
58#ifdef _O_NONBLOCK
59 { X86Linux64::TGT_O_NONBLOCK, _O_NONBLOCK },
60#endif
61#ifdef _O_DSYNC
62 { X86Linux64::TGT_O_DSYNC , _O_DSYNC },
63#endif
64 { X86Linux64::TGT_FASYNC, _O_ASYNC },
65 { X86Linux64::TGT_O_DIRECT, _O_DIRECT },
66 { X86Linux64::TGT_O_LARGEFILE, _O_LARGEFILE },
67 { X86Linux64::TGT_O_DIRECTORY, _O_DIRECTORY },
68 { X86Linux64::TGT_O_NOFOLLOW, _O_NOFOLLOW },
69 { X86Linux64::TGT_O_NOATIME, _O_NOATIME },
70#ifdef _O_CLOEXEC
71 { X86Linux64::TGT_O_CLOEXEC, _O_CLOEXEC },
72#endif
73#ifdef _O_SYNC
74 { X86Linux64::TGT_O_SYNC, _O_SYNC },
75#endif
76#ifdef _O_PATH
77 { X86Linux64::TGT_O_PATH , _O_PATH },
78#endif
79#else /* !_MSC_VER */
80 { X86Linux64::TGT_O_RDONLY, O_RDONLY },
81 { X86Linux64::TGT_O_WRONLY, O_WRONLY },
82 { X86Linux64::TGT_O_RDWR, O_RDWR },
83 { X86Linux64::TGT_O_CREAT, O_CREAT },
84 { X86Linux64::TGT_O_EXCL, O_EXCL },
85 { X86Linux64::TGT_O_NOCTTY, O_NOCTTY },
86 { X86Linux64::TGT_O_TRUNC, O_TRUNC },
87 { X86Linux64::TGT_O_APPEND, O_APPEND },
88 { X86Linux64::TGT_O_NONBLOCK, O_NONBLOCK },
89#ifdef O_DSYNC
90 { X86Linux64::TGT_O_DSYNC, O_DSYNC },
91#endif
92 { X86Linux64::TGT_FASYNC, O_ASYNC },
93 { X86Linux64::TGT_O_DIRECT, O_DIRECT },
94 { X86Linux64::TGT_O_LARGEFILE, O_LARGEFILE },
95 { X86Linux64::TGT_O_DIRECTORY, O_DIRECTORY },
96 { X86Linux64::TGT_O_NOFOLLOW, O_NOFOLLOW },
97 { X86Linux64::TGT_O_NOATIME, O_NOATIME },
98#ifdef O_CLOEXEC
99 { X86Linux64::TGT_O_CLOEXEC, O_CLOEXEC },
100#endif
101#ifdef O_SYNC
102 { X86Linux64::TGT_O_SYNC, O_SYNC },
103#endif
104#ifdef O_PATH
105 { X86Linux64::TGT_O_PATH, O_PATH },
106#endif
107#endif /* _MSC_VER */
108};
45// true for both X86Linux32 and X86Linux64
46#define TARGET_HAS_MAP_32BIT
109
47
110const int X86Linux64::NUM_OPEN_FLAGS =
111 sizeof(X86Linux64::openFlagTable) /
112 sizeof(X86Linux64::openFlagTable[0]);
48#define TARGET X86Linux32
49#include "kern/linux/flag_tables.hh"
113
50
114// mmap(2) flags translation table
115SyscallFlagTransTable X86Linux64::mmapFlagTable[] = {
116 { X86Linux64::TGT_MAP_SHARED, MAP_SHARED },
117 { X86Linux64::TGT_MAP_PRIVATE, MAP_PRIVATE },
118 { X86Linux64::TGT_MAP_32BIT, MAP_32BIT},
119 { X86Linux64::TGT_MAP_ANON, MAP_ANON },
120 { X86Linux64::TGT_MAP_DENYWRITE, MAP_DENYWRITE },
121 { X86Linux64::TGT_MAP_EXECUTABLE, MAP_EXECUTABLE },
122 { X86Linux64::TGT_MAP_FILE, MAP_FILE },
123 { X86Linux64::TGT_MAP_GROWSDOWN, MAP_GROWSDOWN },
124#ifdef MAP_HUGETLB
125 { X86Linux64::TGT_MAP_HUGETLB, MAP_HUGETLB },
126#endif
127 { X86Linux64::TGT_MAP_LOCKED, MAP_LOCKED },
128 { X86Linux64::TGT_MAP_NONBLOCK, MAP_NONBLOCK },
129 { X86Linux64::TGT_MAP_NORESERVE, MAP_NORESERVE },
130 { X86Linux64::TGT_MAP_POPULATE, MAP_POPULATE },
131#ifdef MAP_STACK
132 { X86Linux64::TGT_MAP_STACK, MAP_STACK },
133#endif
134 { X86Linux64::TGT_MAP_ANONYMOUS, MAP_ANONYMOUS },
135 { X86Linux64::TGT_MAP_FIXED, MAP_FIXED },
136};
137
138const unsigned X86Linux64::NUM_MMAP_FLAGS =
139 sizeof(X86Linux64::mmapFlagTable) /
140 sizeof(X86Linux64::mmapFlagTable[0]);
141
142// open(2) flags translation table
143SyscallFlagTransTable X86Linux32::openFlagTable[] = {
144#ifdef _MSC_VER
145 { X86Linux32::TGT_O_RDONLY, _O_RDONLY },
146 { X86Linux32::TGT_O_WRONLY, _O_WRONLY },
147 { X86Linux32::TGT_O_RDWR, _O_RDWR },
148 { X86Linux32::TGT_O_CREAT, _O_CREAT },
149 { X86Linux32::TGT_O_EXCL, _O_EXCL },
150#ifdef _O_NOCTTY
151 { X86Linux32::TGT_O_NOCTTY, _O_NOCTTY },
152#endif
153 { X86Linux32::TGT_O_TRUNC, _O_TRUNC },
154 { X86Linux32::TGT_O_APPEND, _O_APPEND },
155#ifdef _O_NONBLOCK
156 { X86Linux32::TGT_O_NONBLOCK, _O_NONBLOCK },
157#endif
158#ifdef O_DSYNC
159 { X86Linux32::TGT_O_DSYNC, _O_DSYNC },
160#endif
161 { X86Linux32::TGT_FASYNC, _O_ASYNC },
162 { X86Linux32::TGT_O_DIRECT, _O_DIRECT },
163 { X86Linux32::TGT_O_LARGEFILE, _O_LARGEFILE },
164 { X86Linux32::TGT_O_DIRECTORY, _O_DIRECTORY },
165 { X86Linux32::TGT_O_NOFOLLOW, _O_NOFOLLOW },
166 { X86Linux32::TGT_O_NOATIME, _O_NOATIME },
167#ifdef _O_CLOEXEC
168 { X86Linux32::TGT_O_CLOEXEC, _O_CLOEXEC },
169#endif
170#ifdef _O_SYNC
171 { X86Linux32::TGT_O_SYNC, _O_SYNC },
172#endif
173#ifdef _O_PATH
174 { X86Linux32::TGT_O_PATH, _O_PATH },
175#endif
176#else /* !_MSC_VER */
177 { X86Linux32::TGT_O_RDONLY, O_RDONLY },
178 { X86Linux32::TGT_O_WRONLY, O_WRONLY },
179 { X86Linux32::TGT_O_RDWR, O_RDWR },
180 { X86Linux32::TGT_O_CREAT, O_CREAT },
181 { X86Linux32::TGT_O_EXCL, O_EXCL },
182 { X86Linux32::TGT_O_NOCTTY, O_NOCTTY },
183 { X86Linux32::TGT_O_TRUNC, O_TRUNC },
184 { X86Linux32::TGT_O_APPEND, O_APPEND },
185 { X86Linux32::TGT_O_NONBLOCK, O_NONBLOCK },
186#ifdef O_DSYNC
187 { X86Linux32::TGT_O_DSYNC, O_DSYNC },
188#endif
189 { X86Linux32::TGT_FASYNC, O_ASYNC },
190 { X86Linux32::TGT_O_DIRECT, O_DIRECT },
191 { X86Linux32::TGT_O_LARGEFILE, O_LARGEFILE },
192 { X86Linux32::TGT_O_DIRECTORY, O_DIRECTORY },
193 { X86Linux32::TGT_O_NOFOLLOW, O_NOFOLLOW },
194 { X86Linux32::TGT_O_NOATIME, O_NOATIME },
195#ifdef O_CLOEXEC
196 { X86Linux32::TGT_O_CLOEXEC, O_CLOEXEC },
197#endif
198#ifdef O_SYNC
199 { X86Linux32::TGT_O_SYNC, O_SYNC },
200#endif
201#ifdef O_PATH
202 { X86Linux32::TGT_O_PATH, O_PATH },
203#endif
204#endif /* _MSC_VER */
205};
206
207const int X86Linux32::NUM_OPEN_FLAGS =
208 sizeof(X86Linux32::openFlagTable) /
209 sizeof(X86Linux32::openFlagTable[0]);
210
211// mmap(2) flags translation table
212SyscallFlagTransTable X86Linux32::mmapFlagTable[] = {
213 { X86Linux32::TGT_MAP_SHARED, MAP_SHARED },
214 { X86Linux32::TGT_MAP_PRIVATE, MAP_PRIVATE },
215 { X86Linux32::TGT_MAP_32BIT, MAP_32BIT},
216 { X86Linux32::TGT_MAP_ANON, MAP_ANON },
217 { X86Linux32::TGT_MAP_DENYWRITE, MAP_DENYWRITE },
218 { X86Linux32::TGT_MAP_EXECUTABLE, MAP_EXECUTABLE },
219 { X86Linux32::TGT_MAP_FILE, MAP_FILE },
220 { X86Linux32::TGT_MAP_GROWSDOWN, MAP_GROWSDOWN },
221#ifdef MAP_HUGETLB
222 { X86Linux32::TGT_MAP_HUGETLB, MAP_HUGETLB },
223#endif
224 { X86Linux32::TGT_MAP_LOCKED, MAP_LOCKED },
225 { X86Linux32::TGT_MAP_NONBLOCK, MAP_NONBLOCK },
226 { X86Linux32::TGT_MAP_NORESERVE, MAP_NORESERVE },
227 { X86Linux32::TGT_MAP_POPULATE, MAP_POPULATE },
228#ifdef MAP_STACK
229 { X86Linux32::TGT_MAP_STACK, MAP_STACK },
230#endif
231 { X86Linux32::TGT_MAP_ANONYMOUS, MAP_ANONYMOUS },
232 { X86Linux32::TGT_MAP_FIXED, MAP_FIXED },
233};
234
235const unsigned X86Linux32::NUM_MMAP_FLAGS =
236 sizeof(X86Linux32::mmapFlagTable) /
237 sizeof(X86Linux32::mmapFlagTable[0]);
51#undef TARGET
52#define TARGET X86Linux64
53#include "kern/linux/flag_tables.hh"