summaryrefslogtreecommitdiff
path: root/src/sim/syscallreturn.hh
diff options
context:
space:
mode:
authorBrandon Potter <brandon.potter@amd.com>2016-11-09 14:27:40 -0600
committerBrandon Potter <brandon.potter@amd.com>2016-11-09 14:27:40 -0600
commit1ced08c85055d5da845ca549c0f5fcea65ee3e08 (patch)
treed0e6b2bbd69b07281a35ac561697a1b145591042 /src/sim/syscallreturn.hh
parent7a8dda49a4ec33be17bbd101ebd68e02562b9c3d (diff)
downloadgem5-1ced08c85055d5da845ca549c0f5fcea65ee3e08.tar.xz
syscall_emul: [patch 2/22] move SyscallDesc into its own .hh and .cc
The class was crammed into syscall_emul.hh which has tons of forward declarations and template definitions. To clean it up a bit, moved the class into separate files and commented the class with doxygen style comments. Also, provided some encapsulation by adding some accessors and a mutator. The syscallreturn.hh file was renamed syscall_return.hh to make it consistent with other similarly named files in the src/sim directory. The DPRINTF_SYSCALL macro was moved into its own header file with the include the Base and Verbose flags as well. --HG-- rename : src/sim/syscallreturn.hh => src/sim/syscall_return.hh
Diffstat (limited to 'src/sim/syscallreturn.hh')
-rw-r--r--src/sim/syscallreturn.hh116
1 files changed, 0 insertions, 116 deletions
diff --git a/src/sim/syscallreturn.hh b/src/sim/syscallreturn.hh
deleted file mode 100644
index fdd740775..000000000
--- a/src/sim/syscallreturn.hh
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Gabe Black
- */
-
-#ifndef __SIM_SYSCALLRETURN_HH__
-#define __SIM_SYSCALLRETURN_HH__
-
-#include "base/types.hh"
-
-/**
- * This class represents the return value from an emulated system call,
- * including any errno setting.
- *
- * On some platforms, the return value and errno are encoded in a
- * single signed integer. A value less than zero but greater than
- * -4096 indicates an error, and the value is the negation of the
- * errno value. Otherwise, the call was successful and the integer is
- * the return value. (Large negative numbers are considered
- * successful to allow syscalls to return pointers to high memory,
- * e.g., stack addresses.) See, for example, Appendix A of the AMD64
- * ABI spec at http://www.x86-64.org/documentation/abi.pdf.
- *
- * Other platforms use a more complex interface, returning a value and
- * an error code in separate registers.
- *
- * This class is designed to support both types of interfaces.
- */
-class SyscallReturn
-{
- public:
-
- /// For simplicity, allow the object to be initialized with a
- /// single signed integer using the same positive=success,
- /// negative=-errno convention described above.
- ///
- /// Typically this constructor is used as a default type
- /// conversion, so a bare integer is used where a SyscallReturn
- /// value is expected, e.g., as the return value from a system
- /// call emulation function ('return 0;' or 'return -EFAULT;').
- SyscallReturn(int64_t v)
- : value(v), retryFlag(false)
- {}
-
- /// Pseudo-constructor to create an instance with the retry flag set.
- static SyscallReturn retry()
- {
- SyscallReturn s(0);
- s.retryFlag = true;
- return s;
- }
-
- ~SyscallReturn() {}
-
- /// Was the system call successful?
- bool successful() const
- {
- return (value >= 0 || value <= -4096);
- }
-
- /// Does the syscall need to be retried?
- bool needsRetry() const { return retryFlag; }
-
- /// The return value
- int64_t returnValue() const
- {
- assert(successful());
- return value;
- }
-
- /// The errno value
- int errnoValue() const
- {
- assert(!successful());
- return -value;
- }
-
- /// The encoded value (as described above)
- int64_t encodedValue() const
- {
- return value;
- }
-
- private:
-
- int64_t value;
-
- bool retryFlag;
-};
-
-#endif