linux.cc revision 11382:654272b82e94
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
9 * licensed hereunder.  You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Authors: Gabe Black
38 */
39
40#include <fcntl.h>
41
42#include "arch/x86/linux/linux.hh"
43
44// open(2) flags translation table
45SyscallFlagTransTable X86Linux64::openFlagTable[] = {
46#ifdef _MSC_VER
47  { X86Linux64::TGT_O_RDONLY,    _O_RDONLY },
48  { X86Linux64::TGT_O_WRONLY,    _O_WRONLY },
49  { X86Linux64::TGT_O_RDWR,      _O_RDWR },
50  { X86Linux64::TGT_O_CREAT,     _O_CREAT },
51  { X86Linux64::TGT_O_EXCL,      _O_EXCL },
52#ifdef _O_NOCTTY
53  { X86Linux64::TGT_O_NOCTTY,    _O_NOCTTY },
54#endif
55  { X86Linux64::TGT_O_TRUNC,     _O_TRUNC },
56  { X86Linux64::TGT_O_APPEND,    _O_APPEND },
57#ifdef _O_NONBLOCK
58  { X86Linux64::TGT_O_NONBLOCK,  _O_NONBLOCK },
59#endif
60#ifdef _O_DSYNC
61  { X86Linux64::TGT_O_DSYNC ,    _O_DSYNC },
62#endif
63  { X86Linux64::TGT_FASYNC,      _O_ASYNC },
64  { X86Linux64::TGT_O_DIRECT,    _O_DIRECT },
65  { X86Linux64::TGT_O_LARGEFILE, _O_LARGEFILE },
66  { X86Linux64::TGT_O_DIRECTORY, _O_DIRECTORY },
67  { X86Linux64::TGT_O_NOFOLLOW,  _O_NOFOLLOW },
68  { X86Linux64::TGT_O_NOATIME,   _O_NOATIME },
69#ifdef _O_CLOEXEC
70  { X86Linux64::TGT_O_CLOEXEC,   _O_CLOEXEC },
71#endif
72#ifdef _O_SYNC
73  { X86Linux64::TGT_O_SYNC,      _O_SYNC },
74#endif
75#ifdef _O_PATH
76  { X86Linux64::TGT_O_PATH ,     _O_PATH },
77#endif
78#else /* !_MSC_VER */
79  { X86Linux64::TGT_O_RDONLY,    O_RDONLY },
80  { X86Linux64::TGT_O_WRONLY,    O_WRONLY },
81  { X86Linux64::TGT_O_RDWR,      O_RDWR },
82  { X86Linux64::TGT_O_CREAT,     O_CREAT },
83  { X86Linux64::TGT_O_EXCL,      O_EXCL },
84  { X86Linux64::TGT_O_NOCTTY,    O_NOCTTY },
85  { X86Linux64::TGT_O_TRUNC,     O_TRUNC },
86  { X86Linux64::TGT_O_APPEND,    O_APPEND },
87  { X86Linux64::TGT_O_NONBLOCK,  O_NONBLOCK },
88#ifdef O_DSYNC
89  { X86Linux64::TGT_O_DSYNC,     O_DSYNC },
90#endif
91  { X86Linux64::TGT_FASYNC,      O_ASYNC },
92  { X86Linux64::TGT_O_DIRECT,    O_DIRECT },
93  { X86Linux64::TGT_O_LARGEFILE, O_LARGEFILE },
94  { X86Linux64::TGT_O_DIRECTORY, O_DIRECTORY },
95  { X86Linux64::TGT_O_NOFOLLOW,  O_NOFOLLOW },
96  { X86Linux64::TGT_O_NOATIME,   O_NOATIME },
97#ifdef O_CLOEXEC
98  { X86Linux64::TGT_O_CLOEXEC,   O_CLOEXEC },
99#endif
100#ifdef O_SYNC
101  { X86Linux64::TGT_O_SYNC,      O_SYNC },
102#endif
103#ifdef O_PATH
104  { X86Linux64::TGT_O_PATH,      O_PATH },
105#endif
106#endif /* _MSC_VER */
107};
108
109const int X86Linux64::NUM_OPEN_FLAGS =
110        sizeof(X86Linux64::openFlagTable) /
111        sizeof(X86Linux64::openFlagTable[0]);
112
113// open(2) flags translation table
114SyscallFlagTransTable X86Linux32::openFlagTable[] = {
115#ifdef _MSC_VER
116  { X86Linux32::TGT_O_RDONLY,    _O_RDONLY },
117  { X86Linux32::TGT_O_WRONLY,    _O_WRONLY },
118  { X86Linux32::TGT_O_RDWR,      _O_RDWR },
119  { X86Linux32::TGT_O_CREAT,     _O_CREAT },
120  { X86Linux32::TGT_O_EXCL,      _O_EXCL },
121#ifdef _O_NOCTTY
122  { X86Linux32::TGT_O_NOCTTY,    _O_NOCTTY },
123#endif
124  { X86Linux32::TGT_O_TRUNC,     _O_TRUNC },
125  { X86Linux32::TGT_O_APPEND,    _O_APPEND },
126#ifdef _O_NONBLOCK
127  { X86Linux32::TGT_O_NONBLOCK,  _O_NONBLOCK },
128#endif
129#ifdef O_DSYNC
130  { X86Linux32::TGT_O_DSYNC,     _O_DSYNC },
131#endif
132  { X86Linux32::TGT_FASYNC,      _O_ASYNC },
133  { X86Linux32::TGT_O_DIRECT,    _O_DIRECT },
134  { X86Linux32::TGT_O_LARGEFILE, _O_LARGEFILE },
135  { X86Linux32::TGT_O_DIRECTORY, _O_DIRECTORY },
136  { X86Linux32::TGT_O_NOFOLLOW,  _O_NOFOLLOW },
137  { X86Linux32::TGT_O_NOATIME,   _O_NOATIME },
138#ifdef _O_CLOEXEC
139  { X86Linux32::TGT_O_CLOEXEC,   _O_CLOEXEC },
140#endif
141#ifdef _O_SYNC
142  { X86Linux32::TGT_O_SYNC,      _O_SYNC },
143#endif
144#ifdef _O_PATH
145  { X86Linux32::TGT_O_PATH,      _O_PATH },
146#endif
147#else /* !_MSC_VER */
148  { X86Linux32::TGT_O_RDONLY,    O_RDONLY },
149  { X86Linux32::TGT_O_WRONLY,    O_WRONLY },
150  { X86Linux32::TGT_O_RDWR,      O_RDWR },
151  { X86Linux32::TGT_O_CREAT,     O_CREAT },
152  { X86Linux32::TGT_O_EXCL,      O_EXCL },
153  { X86Linux32::TGT_O_NOCTTY,    O_NOCTTY },
154  { X86Linux32::TGT_O_TRUNC,     O_TRUNC },
155  { X86Linux32::TGT_O_APPEND,    O_APPEND },
156  { X86Linux32::TGT_O_NONBLOCK,  O_NONBLOCK },
157#ifdef O_DSYNC
158  { X86Linux32::TGT_O_DSYNC,     O_DSYNC },
159#endif
160  { X86Linux32::TGT_FASYNC,      O_ASYNC },
161  { X86Linux32::TGT_O_DIRECT,    O_DIRECT },
162  { X86Linux32::TGT_O_LARGEFILE, O_LARGEFILE },
163  { X86Linux32::TGT_O_DIRECTORY, O_DIRECTORY },
164  { X86Linux32::TGT_O_NOFOLLOW,  O_NOFOLLOW },
165  { X86Linux32::TGT_O_NOATIME,   O_NOATIME },
166#ifdef O_CLOEXEC
167  { X86Linux32::TGT_O_CLOEXEC,   O_CLOEXEC },
168#endif
169#ifdef O_SYNC
170  { X86Linux32::TGT_O_SYNC,      O_SYNC },
171#endif
172#ifdef O_PATH
173  { X86Linux32::TGT_O_PATH,      O_PATH },
174#endif
175#endif /* _MSC_VER */
176};
177
178const int X86Linux32::NUM_OPEN_FLAGS =
179        sizeof(X86Linux32::openFlagTable) /
180        sizeof(X86Linux32::openFlagTable[0]);
181
182