syscall_emul: [patch 10/22] refactor fdentry and add fdarray class
[gem5.git] / src / sim / fd_entry.cc
index 72975a7a6686cb512c5e629765bfb1344de453a5..65bf7a81c40b3533b076031927f796a8ce9afef6 100644 (file)
 /*
- * Copyright (c) 2015 Advanced Micro Devices, Inc.
- * Copyright (c) 2001-2005 The Regents of The University of Michigan
+ * Copyright (c) 2016 Advanced Micro Devices, Inc.
+ * All rights reserved.
+ *
+ * For use for simulation and test purposes only
  *
  * 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.
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
  *
- * 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.
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
  *
- * Authors: Nathan Binkert
- *          Steve Reinhardt
+ * 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 HOLDER 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.
+ *
+ * Author: Brandon Potter
  */
 
-#include "base/misc.hh"
-#include "fd_entry.hh"
+#include "sim/fd_entry.hh"
 
-using namespace std;
+#include "sim/serialize.hh"
 
 void
 FDEntry::serialize(CheckpointOut &cp) const
 {
-    SERIALIZE_SCALAR(fd);
-    if (fd != -1) {
-        SERIALIZE_SCALAR(mode);
-        SERIALIZE_SCALAR(flags);
-        SERIALIZE_SCALAR(isPipe);
-        SERIALIZE_SCALAR(readPipeSource);
-        SERIALIZE_SCALAR(fileOffset);
-        SERIALIZE_SCALAR(filename);
-    }
-    if (driver)
-        warn("EmulatedDriver objects do not currently support checkpoints");
+    SERIALIZE_SCALAR(_closeOnExec);
 }
 
 void
 FDEntry::unserialize(CheckpointIn &cp)
 {
-    UNSERIALIZE_SCALAR(fd);
-    if (fd != -1) {
-        UNSERIALIZE_SCALAR(mode);
-        UNSERIALIZE_SCALAR(flags);
-        UNSERIALIZE_SCALAR(isPipe);
-        UNSERIALIZE_SCALAR(readPipeSource);
-        UNSERIALIZE_SCALAR(fileOffset);
-        UNSERIALIZE_SCALAR(filename);
-    }
-    driver = NULL;
+    UNSERIALIZE_SCALAR(_closeOnExec);
 }
 
-bool
-FDEntry::isFree()
+void
+FileFDEntry::serialize(CheckpointOut &cp) const
+{
+    SERIALIZE_SCALAR(_closeOnExec);
+    SERIALIZE_SCALAR(_flags);
+    SERIALIZE_SCALAR(_fileName);
+    SERIALIZE_SCALAR(_fileOffset);
+}
+
+void
+FileFDEntry::unserialize(CheckpointIn &cp)
+{
+    UNSERIALIZE_SCALAR(_closeOnExec);
+    UNSERIALIZE_SCALAR(_flags);
+    UNSERIALIZE_SCALAR(_fileName);
+    UNSERIALIZE_SCALAR(_fileOffset);
+}
+
+void
+PipeFDEntry::serialize(CheckpointOut &cp) const
+{
+    SERIALIZE_SCALAR(_closeOnExec);
+    SERIALIZE_SCALAR(_flags);
+    //SERIALIZE_SCALAR(_pipeEndType);
+}
+
+void
+PipeFDEntry::unserialize(CheckpointIn &cp)
 {
-    return (fd == -1 && driver == NULL);
+    UNSERIALIZE_SCALAR(_closeOnExec);
+    UNSERIALIZE_SCALAR(_flags);
+    //UNSERIALIZE_SCALAR(_pipeEndType);
 }
 
 void
-FDEntry::set(int sim_fd, const string name, int flags, int mode, bool pipe)
+DeviceFDEntry::serialize(CheckpointOut &cp) const
 {
-    fd = sim_fd;
-    filename = name;
-    this->flags = flags;
-    this->mode = mode;
-    isPipe = pipe;
-    fileOffset = 0;
-    readPipeSource = 0;
-    driver = NULL;
+    SERIALIZE_SCALAR(_closeOnExec);
+    //SERIALIZE_SCALAR(_driver);
+    SERIALIZE_SCALAR(_fileName);
 }
 
 void
-FDEntry::reset()
+DeviceFDEntry::unserialize(CheckpointIn &cp)
 {
-    set(-1, "", 0, 0, false);
+    UNSERIALIZE_SCALAR(_closeOnExec);
+    //UNSERIALIZE_SCALAR(_driver);
+    UNSERIALIZE_SCALAR(_fileName);
 }