111988Sandreas.sandberg@arm.com/* 211988Sandreas.sandberg@arm.com * Copyright (c) 2017 ARM Limited 311988Sandreas.sandberg@arm.com * All rights reserved 411988Sandreas.sandberg@arm.com * 511988Sandreas.sandberg@arm.com * The license below extends only to copyright in the software and shall 611988Sandreas.sandberg@arm.com * not be construed as granting a license to any other intellectual 711988Sandreas.sandberg@arm.com * property including but not limited to intellectual property relating 811988Sandreas.sandberg@arm.com * to a hardware implementation of the functionality of the software 911988Sandreas.sandberg@arm.com * licensed hereunder. You may use the software subject to the license 1011988Sandreas.sandberg@arm.com * terms below provided that you ensure that this notice is replicated 1111988Sandreas.sandberg@arm.com * unmodified and in its entirety in all distributions of the software, 1211988Sandreas.sandberg@arm.com * modified or unmodified, in source code or in binary form. 1311988Sandreas.sandberg@arm.com * 1411988Sandreas.sandberg@arm.com * Copyright (c) 2006 The Regents of The University of Michigan 1511988Sandreas.sandberg@arm.com * Copyright (c) 2010 The Hewlett-Packard Development Company 1611988Sandreas.sandberg@arm.com * All rights reserved. 1711988Sandreas.sandberg@arm.com * 1811988Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 1911988Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 2011988Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 2111988Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 2211988Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 2311988Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 2411988Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 2511988Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its 2611988Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from 2711988Sandreas.sandberg@arm.com * this software without specific prior written permission. 2811988Sandreas.sandberg@arm.com * 2911988Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3011988Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3111988Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 3211988Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3311988Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3411988Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3511988Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3611988Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3711988Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3811988Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3911988Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4011988Sandreas.sandberg@arm.com * 4111988Sandreas.sandberg@arm.com * Authors: Nathan Binkert 4211988Sandreas.sandberg@arm.com * Andreas Sandberg 4311988Sandreas.sandberg@arm.com */ 4411988Sandreas.sandberg@arm.com 4511988Sandreas.sandberg@arm.com#include "pybind11/pybind11.h" 4611988Sandreas.sandberg@arm.com#include "pybind11/stl.h" 4711988Sandreas.sandberg@arm.com 4811988Sandreas.sandberg@arm.com#include <map> 4911988Sandreas.sandberg@arm.com#include <vector> 5011988Sandreas.sandberg@arm.com 5111988Sandreas.sandberg@arm.com#include "base/debug.hh" 5211988Sandreas.sandberg@arm.com#include "base/output.hh" 5311988Sandreas.sandberg@arm.com#include "base/trace.hh" 5411988Sandreas.sandberg@arm.com#include "sim/debug.hh" 5511988Sandreas.sandberg@arm.com 5611988Sandreas.sandberg@arm.comnamespace py = pybind11; 5711988Sandreas.sandberg@arm.com 5811988Sandreas.sandberg@arm.comnamespace Debug { 5911988Sandreas.sandberg@arm.comextern int allFlagsVersion; 6011988Sandreas.sandberg@arm.com} 6111988Sandreas.sandberg@arm.com 6211988Sandreas.sandberg@arm.comstatic void 6311988Sandreas.sandberg@arm.comoutput(const char *filename) 6411988Sandreas.sandberg@arm.com{ 6511988Sandreas.sandberg@arm.com OutputStream *file_stream = simout.find(filename); 6611988Sandreas.sandberg@arm.com 6711988Sandreas.sandberg@arm.com if (!file_stream) 6811988Sandreas.sandberg@arm.com file_stream = simout.create(filename); 6911988Sandreas.sandberg@arm.com 7011988Sandreas.sandberg@arm.com Trace::setDebugLogger(new Trace::OstreamLogger(*file_stream->stream())); 7111988Sandreas.sandberg@arm.com} 7211988Sandreas.sandberg@arm.com 7311988Sandreas.sandberg@arm.comstatic void 7411988Sandreas.sandberg@arm.comignore(const char *expr) 7511988Sandreas.sandberg@arm.com{ 7611988Sandreas.sandberg@arm.com ObjectMatch ignore(expr); 7711988Sandreas.sandberg@arm.com 7813804Sisaac.sanchez@bsc.es Trace::getDebugLogger()->addIgnore(ignore); 7911988Sandreas.sandberg@arm.com} 8011988Sandreas.sandberg@arm.com 8111988Sandreas.sandberg@arm.comvoid 8211988Sandreas.sandberg@arm.compybind_init_debug(py::module &m_native) 8311988Sandreas.sandberg@arm.com{ 8411988Sandreas.sandberg@arm.com py::module m_debug = m_native.def_submodule("debug"); 8511988Sandreas.sandberg@arm.com 8611988Sandreas.sandberg@arm.com m_debug 8711988Sandreas.sandberg@arm.com .def("getAllFlagsVersion", []() { return Debug::allFlagsVersion; }) 8811988Sandreas.sandberg@arm.com .def("allFlags", &Debug::allFlags, py::return_value_policy::reference) 8911988Sandreas.sandberg@arm.com .def("findFlag", &Debug::findFlag) 9011988Sandreas.sandberg@arm.com .def("setDebugFlag", &setDebugFlag) 9111988Sandreas.sandberg@arm.com .def("clearDebugFlag", &clearDebugFlag) 9211988Sandreas.sandberg@arm.com .def("dumpDebugFlags", &dumpDebugFlags) 9311988Sandreas.sandberg@arm.com 9411988Sandreas.sandberg@arm.com .def("schedBreak", &schedBreak) 9511988Sandreas.sandberg@arm.com .def("setRemoteGDBPort", &setRemoteGDBPort) 9611988Sandreas.sandberg@arm.com ; 9711988Sandreas.sandberg@arm.com 9811988Sandreas.sandberg@arm.com py::class_<Debug::Flag> c_flag(m_debug, "Flag"); 9911988Sandreas.sandberg@arm.com c_flag 10011988Sandreas.sandberg@arm.com .def("name", &Debug::Flag::name) 10111988Sandreas.sandberg@arm.com .def("desc", &Debug::Flag::desc) 10211988Sandreas.sandberg@arm.com .def("kids", &Debug::Flag::kids) 10311988Sandreas.sandberg@arm.com .def("enable", &Debug::Flag::enable) 10411988Sandreas.sandberg@arm.com .def("disable", &Debug::Flag::disable) 10511988Sandreas.sandberg@arm.com .def("sync", &Debug::Flag::sync) 10611988Sandreas.sandberg@arm.com ; 10711988Sandreas.sandberg@arm.com 10811988Sandreas.sandberg@arm.com py::class_<Debug::SimpleFlag>(m_debug, "SimpleFlag", c_flag); 10911988Sandreas.sandberg@arm.com py::class_<Debug::CompoundFlag>(m_debug, "CompoundFlag", c_flag); 11011988Sandreas.sandberg@arm.com 11111988Sandreas.sandberg@arm.com 11211988Sandreas.sandberg@arm.com py::module m_trace = m_native.def_submodule("trace"); 11311988Sandreas.sandberg@arm.com m_trace 11411988Sandreas.sandberg@arm.com .def("output", &output) 11511988Sandreas.sandberg@arm.com .def("ignore", &ignore) 11611988Sandreas.sandberg@arm.com .def("enable", &Trace::enable) 11711988Sandreas.sandberg@arm.com .def("disable", &Trace::disable) 11811988Sandreas.sandberg@arm.com ; 11911988Sandreas.sandberg@arm.com} 120