From: Gabe Black Date: Wed, 21 Oct 2020 00:44:44 +0000 (-0700) Subject: x86: Create an SEWorkload for x86 linux. X-Git-Tag: develop-gem5-snapshot~579 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4e6339acd2eccf77089b4708f3a5c4f7a1deeba3;p=gem5.git x86: Create an SEWorkload for x86 linux. This doesn't do anything interesting yet, but soon it will take over system call duties from the x86 linux processes. Change-Id: Ic126fc80def0b458de51d3a9c96120c58e5a75ad Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/33902 Reviewed-by: Gabe Black Reviewed-by: Alexandru DuČ›u Maintainer: Gabe Black Tested-by: kokoro --- diff --git a/src/arch/x86/SConscript b/src/arch/x86/SConscript index 828fcc97c..678bdffc7 100644 --- a/src/arch/x86/SConscript +++ b/src/arch/x86/SConscript @@ -56,6 +56,7 @@ if env['TARGET_ISA'] == 'x86': Source('insts/static_inst.cc') Source('interrupts.cc') Source('isa.cc') + Source('linux/se_workload.cc') Source('linux/fs_workload.cc') Source('linux/linux.cc') Source('linux/process.cc') @@ -70,6 +71,7 @@ if env['TARGET_ISA'] == 'x86': Source('types.cc') Source('utility.cc') + SimObject('X86SeWorkload.py') SimObject('X86FsWorkload.py') SimObject('X86ISA.py') SimObject('X86LocalApic.py') diff --git a/src/arch/x86/X86SeWorkload.py b/src/arch/x86/X86SeWorkload.py new file mode 100644 index 000000000..0dfec53d5 --- /dev/null +++ b/src/arch/x86/X86SeWorkload.py @@ -0,0 +1,38 @@ +# Copyright 2020 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. + +from m5.params import * + +from m5.objects.Workload import SEWorkload + +class X86EmuLinux(SEWorkload): + type = 'X86EmuLinux' + cxx_header = "arch/x86/linux/se_workload.hh" + cxx_class = 'X86ISA::EmuLinux' + + @classmethod + def _is_compatible_with(cls, obj): + return obj.get_arch() in ('x86_64', 'i386') and \ + obj.get_op_sys() in ('linux', 'unknown') diff --git a/src/arch/x86/linux/se_workload.cc b/src/arch/x86/linux/se_workload.cc new file mode 100644 index 000000000..2f6dd6397 --- /dev/null +++ b/src/arch/x86/linux/se_workload.cc @@ -0,0 +1,51 @@ +/* + * Copyright 2020 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. + */ + +#include "arch/x86/linux/se_workload.hh" + +#include "cpu/thread_context.hh" +#include "sim/process.hh" + +namespace X86ISA +{ + +EmuLinux::EmuLinux(const Params &p) : SEWorkload(p), _params(p) +{} + +void +EmuLinux::syscall(ThreadContext *tc) +{ + tc->getProcessPtr()->syscall(tc); +} + +} // namespace X86ISA + +X86ISA::EmuLinux * +X86EmuLinuxParams::create() const +{ + return new X86ISA::EmuLinux(*this); +} diff --git a/src/arch/x86/linux/se_workload.hh b/src/arch/x86/linux/se_workload.hh new file mode 100644 index 000000000..d1dca672e --- /dev/null +++ b/src/arch/x86/linux/se_workload.hh @@ -0,0 +1,57 @@ +/* + * Copyright 2020 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. + */ + +#ifndef __ARCH_X86_LINUX_SE_WORKLOAD_HH__ +#define __ARCH_X86_LINUX_SE_WORKLOAD_HH__ + +#include "params/X86EmuLinux.hh" +#include "sim/se_workload.hh" + +namespace X86ISA +{ + +class EmuLinux : public SEWorkload +{ + public: + using Params = X86EmuLinuxParams; + + protected: + const Params &_params; + + public: + const Params ¶ms() const { return _params; } + + EmuLinux(const Params &p); + + Loader::Arch getArch() const override { return Loader::X86_64; } + + void syscall(ThreadContext *tc) override; +}; + +} // namespace X86ISA + +#endif // __ARCH_X86_LINUX_SE_WORKLOAD_HH__