gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
syscall_desc.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012-2013, 2015 ARM Limited
3  * Copyright (c) 2015-2016 Advanced Micro Devices, Inc.
4  * All rights reserved
5  *
6  * The license below extends only to copyright in the software and shall
7  * not be construed as granting a license to any other intellectual
8  * property including but not limited to intellectual property relating
9  * to a hardware implementation of the functionality of the software
10  * licensed hereunder. You may use the software subject to the license
11  * terms below provided that you ensure that this notice is replicated
12  * unmodified and in its entirety in all distributions of the software,
13  * modified or unmodified, in source code or in binary form.
14  *
15  * Copyright (c) 2003-2005 The Regents of The University of Michigan
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: Steve Reinhardt
42  * Kevin Lim
43  * Brandon Potter
44  */
45 
46 #ifndef __SIM_SYSCALL_DESC_HH__
47 #define __SIM_SYSCALL_DESC_HH__
48 
49 #include <string>
50 
51 #include "base/types.hh"
52 
53 class Process;
54 class SyscallReturn;
55 class ThreadContext;
56 
63 class SyscallDesc {
64  public:
68 
69  SyscallDesc(const char *name, SyscallExecutor sys_exec, int flags = 0)
70  : _name(name), executor(sys_exec), _flags(flags), _warned(false)
71  {
72  }
73 
75  enum Flags {
84  /* X2 = 4, // Remove these comments when the next field is added; */
85  /* X3 = 8, // point is to make it obvious that this defines vector */
86  };
87 
96  void doSyscall(int callnum, Process *proc, ThreadContext *tc,
97  Fault *fault);
98 
104  bool needWarning();
105 
106  bool warnOnce() const { return (_flags & WarnOnce); }
107 
108  std::string name() { return _name; }
109 
110  int getFlags() const { return _flags; }
111 
112  void setFlags(int flags) { _flags = flags; }
113 
114  private:
116  std::string _name;
117 
120 
126  int _flags;
127 
129  bool _warned;
130 };
131 
132 #endif // __SIM_SYSCALL_DESC_HH__
void doSyscall(int callnum, Process *proc, ThreadContext *tc, Fault *fault)
Interface for invoking the system call funcion pointer.
Definition: syscall_desc.cc:49
bool warnOnce() const
std::string name()
SyscallReturn(* SyscallExecutor)(SyscallDesc *, int num, Process *, ThreadContext *)
Typedef the function pointer here to clean up code below.
Definition: syscall_desc.hh:66
ThreadContext is the external interface to all thread state for anything outside of the CPU...
SyscallExecutor executor
Mechanism for ISAs to connect to the emul function definitions.
Definition: flags.hh:35
std::string _name
System call name (e.g., open, mmap, clone, socket, etc.)
Warn only once for unimplemented system calls.
Definition: syscall_desc.hh:83
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
This class provides the wrapper interface for the system call implementations which are defined in th...
Definition: syscall_desc.hh:63
bool _warned
Set if WarnOnce is specified in flags AFTER first call.
int _flags
Holds values set with the preceding enum; note that this has been used primarily for features that ar...
SyscallDesc(const char *name, SyscallExecutor sys_exec, int flags=0)
Definition: syscall_desc.hh:69
Do not set return registers according to executor return value.
Definition: syscall_desc.hh:81
This class represents the return value from an emulated system call, including any errno setting...
bool needWarning()
Return false if WarnOnce is set and a warning has already been issued.
Definition: syscall_desc.cc:90
std::shared_ptr< FaultBase > Fault
Definition: types.hh:184
int getFlags() const
void setFlags(int flags)

Generated on Fri Jun 9 2017 13:03:51 for gem5 by doxygen 1.8.6