[gem5-dev] Change in gem5/gem5[master]: systemc: Hook up sc_main.

2018-07-23 Thread Gabe Black (Gerrit)
Gabe Black has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/10824 )


Change subject: systemc: Hook up sc_main.
..

systemc: Hook up sc_main.

sc_main is exported as a python method on the SystemC_Kernel class and
takes a series of string arguments. The internal c++ implementation
converts those arguments into the standard argc and argv and uses them
to call the standard SystemC version of that function.

A weak SystemC version of sc_main is provided so that systemc will
compile with or without a simulation provided version of that
function. The weak version just complains and dies.

Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
Reviewed-on: https://gem5-review.googlesource.com/10824
Reviewed-by: Jason Lowe-Power 
Maintainer: Gabe Black 
---
M src/systemc/SConscript
M src/systemc/SystemC.py
A src/systemc/sc_main.cc
A src/systemc/sc_main.hh
4 files changed, 175 insertions(+), 0 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Gabe Black: Looks good to me, approved



diff --git a/src/systemc/SConscript b/src/systemc/SConscript
index 3677a60..6e6742f 100644
--- a/src/systemc/SConscript
+++ b/src/systemc/SConscript
@@ -32,5 +32,6 @@

 Source('kernel.cc')

+Source('sc_main.cc')
 Source('sc_module_name.cc')
 Source('sc_object.cc')
diff --git a/src/systemc/SystemC.py b/src/systemc/SystemC.py
index 8eb6c22..bc04ed6 100644
--- a/src/systemc/SystemC.py
+++ b/src/systemc/SystemC.py
@@ -36,6 +36,11 @@
 cxx_class = 'SystemC::Kernel'
 cxx_header = 'systemc/kernel.hh'

+def sc_main(self, *args):
+'''Call the systemc sc_main function with the given string args'''
+from _m5.systemc import sc_main
+sc_main(*args)
+
 # This class represents systemc sc_object instances in python config  
files. It
 # inherits from SimObject in python, but the c++ version,  
sc_core::sc_object,

 # doesn't inherit from gem5's c++ SimObject class.
diff --git a/src/systemc/sc_main.cc b/src/systemc/sc_main.cc
new file mode 100644
index 000..88d51ba
--- /dev/null
+++ b/src/systemc/sc_main.cc
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * 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
+ */
+
+#include "systemc/sc_main.hh"
+
+#include 
+
+#include "base/logging.hh"
+#include "python/pybind11/pybind.hh"
+#include "sim/init.hh"
+
+// A default version of this function in case one isn't otherwise defined.
+// This ensures everything will link properly whether or not the user  
defined
+// a custom sc_main function. If they didn't but still try to call it,  
throw

+// an error and die.
+[[gnu::weak]] int
+sc_main(int argc, char *argv[])
+{
+// If python attempts to call sc_main but no sc_main was defined...
+fatal("sc_main called but not defined.\n");
+}
+
+namespace sc_core
+{
+
+namespace
+{
+
+bool scMainCalled = false;
+
+int _argc = 0;
+char **_argv = NULL;
+
+// This wrapper adapts the python version of sc_main to the c++ version.
+void
+sc_main(pybind11::args args)
+{
+panic_if(scMainCalled, "sc_main called more than once.");
+
+_argc = args.size();
+_argv = new char *[_argc];
+
+// Initialize all the _argvs to NULL so we can delete [] them
+// unconditionally.
+for (int idx = 0; idx < _argc; idx++)
+_argv[idx] = NULL;
+
+// Attempt to convert all the arguments to strings. If that fails,  
clean

+// up after ourselves. Also don't count this 

[gem5-dev] Change in gem5/gem5[master]: systemc: Hook up sc_main.

2018-06-16 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Matthias Jung, Giacomo Travaglini, Andreas Sandberg,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/10824

to look at the new patch set (#4).

Change subject: systemc: Hook up sc_main.
..

systemc: Hook up sc_main.

sc_main is exported as a python method on the SystemC_Kernel class and
takes a series of string arguments. The internal c++ implementation
converts those arguments into the standard argc and argv and uses them
to call the standard SystemC version of that function.

A weak SystemC version of sc_main is provided so that systemc will
compile with or without a simulation provided version of that
function. The weak version just complains and dies.

Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
---
M src/systemc/SConscript
M src/systemc/SystemC.py
A src/systemc/sc_main.cc
A src/systemc/sc_main.hh
4 files changed, 175 insertions(+), 0 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/10824
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
Gerrit-Change-Number: 10824
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Matthias Jung 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: systemc: Hook up sc_main.

2018-06-15 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Matthias Jung, Andreas Sandberg,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/10824

to look at the new patch set (#3).

Change subject: systemc: Hook up sc_main.
..

systemc: Hook up sc_main.

sc_main is exported as a python method on the SystemC_Kernel class and
takes a series of string arguments. The internal c++ implementation
converts those arguments into the standard argc and argv and uses them
to call the standard SystemC version of that function.

A weak SystemC version of sc_main is provided so that systemc will
compile with or without a simulation provided version of that
function. The weak version just complains and dies.

Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
---
M src/systemc/SConscript
M src/systemc/SystemC.py
A src/systemc/sc_main.cc
A src/systemc/sc_main.hh
4 files changed, 175 insertions(+), 0 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/10824
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
Gerrit-Change-Number: 10824
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Matthias Jung 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: systemc: Hook up sc_main.

2018-06-07 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Matthias Jung, Andreas Sandberg,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/10824

to look at the new patch set (#2).

Change subject: systemc: Hook up sc_main.
..

systemc: Hook up sc_main.

sc_main is exported as a python method on the SystemC_Kernel class and
takes a series of string arguments. The internal c++ implementation
converts those arguments into the standard argc and argv and uses them
to call the standard SystemC version of that function.

A weak SystemC version of sc_main is provided so that systemc will
compile with or without a simulation provided version of that
function. The weak version just complains and dies.

Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
---
M src/systemc/SConscript
M src/systemc/SystemC.py
A src/systemc/sc_main.cc
A src/systemc/sc_main.hh
4 files changed, 174 insertions(+), 0 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/10824
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
Gerrit-Change-Number: 10824
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Matthias Jung 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: systemc: Hook up sc_main.

2018-06-06 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/10824



Change subject: systemc: Hook up sc_main.
..

systemc: Hook up sc_main.

sc_main is exported as a python method on the SystemC_Kernel class and
takes a series of string arguments. The internal c++ implementation
converts those arguments into the standard argc and argv and uses them
to call the standard SystemC version of that function.

A weak SystemC version of sc_main is provided so that systemc will
compile with or without a simulation provided version of that
function. The weak version just complains and dies.

Change-Id: Iad735536c37c8bc85d06cf24779f607ae4309b8b
---
M src/systemc/SConscript
M src/systemc/SystemC.py
A src/systemc/sc_main.cc
A src/systemc/sc_main.hh
4 files changed, 174 insertions(+), 0 deletions(-)



diff --git a/src/systemc/SConscript b/src/systemc/SConscript
index 3677a60..6e6742f 100644
--- a/src/systemc/SConscript
+++ b/src/systemc/SConscript
@@ -32,5 +32,6 @@

 Source('kernel.cc')

+Source('sc_main.cc')
 Source('sc_module_name.cc')
 Source('sc_object.cc')
diff --git a/src/systemc/SystemC.py b/src/systemc/SystemC.py
index cc7c368..d63d4bb 100644
--- a/src/systemc/SystemC.py
+++ b/src/systemc/SystemC.py
@@ -32,6 +32,10 @@
 cxx_class = 'SystemC::Kernel'
 cxx_header = 'systemc/kernel.hh'

+def sc_main(self, *args):
+from _m5.systemc import sc_main
+sc_main(*args)
+
 class SystemC_ScObject(SimObject):
 type = 'SystemC_ScObject'
 abstract = True
diff --git a/src/systemc/sc_main.cc b/src/systemc/sc_main.cc
new file mode 100644
index 000..88d51ba
--- /dev/null
+++ b/src/systemc/sc_main.cc
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * 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
+ */
+
+#include "systemc/sc_main.hh"
+
+#include 
+
+#include "base/logging.hh"
+#include "python/pybind11/pybind.hh"
+#include "sim/init.hh"
+
+// A default version of this function in case one isn't otherwise defined.
+// This ensures everything will link properly whether or not the user  
defined
+// a custom sc_main function. If they didn't but still try to call it,  
throw

+// an error and die.
+[[gnu::weak]] int
+sc_main(int argc, char *argv[])
+{
+// If python attempts to call sc_main but no sc_main was defined...
+fatal("sc_main called but not defined.\n");
+}
+
+namespace sc_core
+{
+
+namespace
+{
+
+bool scMainCalled = false;
+
+int _argc = 0;
+char **_argv = NULL;
+
+// This wrapper adapts the python version of sc_main to the c++ version.
+void
+sc_main(pybind11::args args)
+{
+panic_if(scMainCalled, "sc_main called more than once.");
+
+_argc = args.size();
+_argv = new char *[_argc];
+
+// Initialize all the _argvs to NULL so we can delete [] them
+// unconditionally.
+for (int idx = 0; idx < _argc; idx++)
+_argv[idx] = NULL;
+
+// Attempt to convert all the arguments to strings. If that fails,  
clean

+// up after ourselves. Also don't count this as a call to sc_main since
+// we never got to the c++ version of that function.
+try {
+for (int idx = 0; idx < _argc; idx++) {
+std::string arg = args[idx].cast();
+_argv[idx] = new char[arg.length() + 1];
+strcpy(_argv[idx], arg.c_str());
+}
+} catch (...) {
+// If that didn't work for some reason (probably a conversion  
error)

+// blow