arch-arm: Do not check MustBeOne flag for TLB requests from the prefetcher
[gem5.git] / src / sim / init.hh
index 76cdcb74ecc243236a0cb9c403429322d2443003..40ff9aea03e11f2f7f44aa54dd1d5aa76c1ae6be 100644 (file)
@@ -1,4 +1,16 @@
 /*
+ * Copyright (c) 2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
  * Copyright (c) 2008 The Hewlett-Packard Development Company
  * All rights reserved.
  *
 #ifndef __SIM_INIT_HH__
 #define __SIM_INIT_HH__
 
+#include "pybind11/pybind11.h"
+
+#include <list>
+#include <map>
+#include <string>
+
+#include <inttypes.h>
+
+#ifndef PyObject_HEAD
+struct _object;
+typedef _object PyObject;
+#endif
+
 /*
  * Data structure describing an embedded python file.
  */
-struct EmbeddedPyModule
+struct EmbeddedPython
 {
     const char *filename;
     const char *abspath;
     const char *modpath;
-    const char *code;
-    const char *code_end;
+    const uint8_t *code;
     int zlen;
-    int mlen;
+    int len;
+
+    EmbeddedPython(const char *filename, const char *abspath,
+                   const char *modpath, const uint8_t *code, int zlen, int len);
+
+    PyObject *getCode() const;
+    bool addModule() const;
+
+    static EmbeddedPython *importer;
+    static PyObject *importerModule;
+    static std::list<EmbeddedPython *> &getList();
+    static int initAll();
+};
+
+class EmbeddedPyBind
+{
+  public:
+    EmbeddedPyBind(const char *_name,
+                   void (*init_func)(pybind11::module &),
+                   const char *_base);
+
+    EmbeddedPyBind(const char *_name,
+                   void (*init_func)(pybind11::module &));
+
+#if PY_MAJOR_VERSION >= 3
+    static PyObject *initAll();
+#else
+    static void initAll();
+#endif
+
+  private:
+    void (*initFunc)(pybind11::module &);
+
+    bool depsReady() const;
+    void init(pybind11::module &m);
+
+    bool registered;
+    const std::string name;
+    const std::string base;
+
+    static std::map<std::string, EmbeddedPyBind *> &getMap();
 };
 
-extern const EmbeddedPyModule embeddedPyImporter;
-extern const EmbeddedPyModule embeddedPyModules[];
+void registerNativeModules();
 
-void initSignals();
-int initM5Python();
 int m5Main(int argc, char **argv);
 
 #endif // __SIM_INIT_HH__