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