gem5
v24.0.0.0
Loading...
Searching...
No Matches
python
embedded.cc
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012, 2017 ARM Limited
3
* All rights reserved
4
*
5
* The license below extends only to copyright in the software and shall
6
* not be construed as granting a license to any other intellectual
7
* property including but not limited to intellectual property relating
8
* to a hardware implementation of the functionality of the software
9
* licensed hereunder. You may use the software subject to the license
10
* terms below provided that you ensure that this notice is replicated
11
* unmodified and in its entirety in all distributions of the software,
12
* modified or unmodified, in source code or in binary form.
13
*
14
* Copyright (c) 2000-2005 The Regents of The University of Michigan
15
* Copyright (c) 2008 The Hewlett-Packard Development Company
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
42
#include "pybind11/embed.h"
43
44
#include "
python/embedded.hh
"
45
46
#include <zlib.h>
47
48
#include <cstdlib>
49
#include <iostream>
50
#include <list>
51
52
namespace
py = pybind11;
53
54
namespace
gem5
55
{
56
57
EmbeddedPython::EmbeddedPython
(
const
char
*abspath,
const
char
*modpath,
58
const
unsigned
char
*code,
int
zlen,
int
len
)
59
: abspath(abspath), modpath(modpath), code(code), zlen(zlen),
len
(
len
)
60
{
61
getList
().push_back(
this
);
62
}
63
64
std::list<EmbeddedPython *>
&
65
EmbeddedPython::getList
()
66
{
67
static
std::list<EmbeddedPython *>
the_list;
68
return
the_list;
69
}
70
71
/*
72
* Uncompress and unmarshal the code object stored in the
73
* EmbeddedPython
74
*/
75
py::object
76
EmbeddedPython::getCode
()
const
77
{
78
Bytef marshalled[
len
];
79
uLongf unzlen =
len
;
80
int
ret = uncompress(marshalled, &unzlen, (
const
Bytef *)
code
,
zlen
);
81
if
(ret != Z_OK) {
82
std::cerr <<
"Could not uncompress code: "
<< zError(ret) << std::endl;
83
std::abort();
84
}
85
assert(unzlen == (uLongf)
len
);
86
87
auto
marshal = py::module_::import(
"marshal"
);
88
return
marshal.attr(
"loads"
)(py::bytes((
char
*)marshalled,
len
));
89
}
90
91
bool
92
EmbeddedPython::addModule
()
const
93
{
94
auto
importer = py::module_::import(
"importer"
);
95
importer.attr(
"add_module"
)(
abspath
,
modpath
,
getCode
());
96
return
true
;
97
}
98
99
/*
100
* Load and initialize all of the python parts of M5.
101
*/
102
int
103
EmbeddedPython::initAll
()
104
{
105
// Load the embedded python files into the embedded python importer.
106
for
(
auto
*embedded:
getList
()) {
107
if
(!embedded->addModule())
108
return
1;
109
}
110
return
0;
111
}
112
113
}
// namespace gem5
std::list
STL list class.
Definition
stl.hh:51
embedded.hh
gem5::ArmISA::len
Bitfield< 18, 16 > len
Definition
misc_types.hh:529
gem5
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition
binary32.hh:36
gem5::EmbeddedPython::abspath
const char * abspath
Definition
embedded.hh:58
gem5::EmbeddedPython::getList
static std::list< EmbeddedPython * > & getList()
Definition
embedded.cc:65
gem5::EmbeddedPython::getCode
pybind11::object getCode() const
Definition
embedded.cc:76
gem5::EmbeddedPython::addModule
bool addModule() const
Definition
embedded.cc:92
gem5::EmbeddedPython::EmbeddedPython
EmbeddedPython(const char *abspath, const char *modpath, const uint8_t *code, int zlen, int len)
Definition
embedded.cc:57
gem5::EmbeddedPython::len
int len
Definition
embedded.hh:62
gem5::EmbeddedPython::modpath
const char * modpath
Definition
embedded.hh:59
gem5::EmbeddedPython::initAll
static int initAll()
Definition
embedded.cc:103
gem5::EmbeddedPython::zlen
int zlen
Definition
embedded.hh:61
gem5::EmbeddedPython::code
const uint8_t * code
Definition
embedded.hh:60
Generated on Tue Jun 18 2024 16:24:05 for gem5 by
doxygen
1.11.0