changeset 97eebddaae84 in /z/repo/gem5 details: http://repo.gem5.org/gem5?cmd=changeset;node=97eebddaae84 description: syscall_emul: [patch 2/22] move SyscallDesc into its own .hh and .cc
The class was crammed into syscall_emul.hh which has tons of forward declarations and template definitions. To clean it up a bit, moved the class into separate files and commented the class with doxygen style comments. Also, provided some encapsulation by adding some accessors and a mutator. The syscallreturn.hh file was renamed syscall_return.hh to make it consistent with other similarly named files in the src/sim directory. The DPRINTF_SYSCALL macro was moved into its own header file with the include the Base and Verbose flags as well. diffstat: src/arch/alpha/linux/process.cc | 1 + src/arch/arm/freebsd/process.cc | 1 + src/arch/arm/linux/process.cc | 1 + src/arch/mips/linux/process.cc | 1 + src/arch/power/linux/process.cc | 1 + src/arch/riscv/linux/process.cc | 1 + src/arch/sparc/linux/process.cc | 1 + src/arch/sparc/linux/syscalls.cc | 1 + src/arch/sparc/solaris/process.cc | 1 + src/arch/x86/linux/process.cc | 5 +- src/arch/x86/process.cc | 2 +- src/sim/SConscript | 1 + src/sim/process.cc | 2 +- src/sim/process.hh | 2 +- src/sim/syscall_debug_macros.hh | 63 +++++++++++++++++++ src/sim/syscall_desc.cc | 88 ++++++++++++++++++++++++++ src/sim/syscall_desc.hh | 125 ++++++++++++++++++++++++++++++++++++++ src/sim/syscall_emul.cc | 56 +--------------- src/sim/syscall_emul.hh | 53 +--------------- src/sim/syscall_return.hh | 116 +++++++++++++++++++++++++++++++++++ src/sim/syscallreturn.hh | 116 ----------------------------------- 21 files changed, 417 insertions(+), 221 deletions(-) diffs (truncated from 860 to 300 lines): diff -r ef606668d247 -r 97eebddaae84 src/arch/alpha/linux/process.cc --- a/src/arch/alpha/linux/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/alpha/linux/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -38,6 +38,7 @@ #include "debug/SyscallVerbose.hh" #include "kern/linux/linux.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" using namespace std; diff -r ef606668d247 -r 97eebddaae84 src/arch/arm/freebsd/process.cc --- a/src/arch/arm/freebsd/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/arm/freebsd/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -45,6 +45,7 @@ #include "cpu/thread_context.hh" #include "kern/freebsd/freebsd.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" #include "sim/system.hh" diff -r ef606668d247 -r 97eebddaae84 src/arch/arm/linux/process.cc --- a/src/arch/arm/linux/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/arm/linux/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -52,6 +52,7 @@ #include "cpu/thread_context.hh" #include "kern/linux/linux.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" #include "sim/system.hh" diff -r ef606668d247 -r 97eebddaae84 src/arch/mips/linux/process.cc --- a/src/arch/mips/linux/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/mips/linux/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -40,6 +40,7 @@ #include "kern/linux/linux.hh" #include "sim/eventq.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" #include "sim/system.hh" diff -r ef606668d247 -r 97eebddaae84 src/arch/power/linux/process.cc --- a/src/arch/power/linux/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/power/linux/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -40,6 +40,7 @@ #include "cpu/thread_context.hh" #include "kern/linux/linux.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" #include "sim/system.hh" diff -r ef606668d247 -r 97eebddaae84 src/arch/riscv/linux/process.cc --- a/src/arch/riscv/linux/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/riscv/linux/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -44,6 +44,7 @@ #include "kern/linux/linux.hh" #include "sim/eventq.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" #include "sim/system.hh" diff -r ef606668d247 -r 97eebddaae84 src/arch/sparc/linux/process.cc --- a/src/arch/sparc/linux/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/sparc/linux/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -38,6 +38,7 @@ #include "cpu/thread_context.hh" #include "kern/linux/linux.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" using namespace std; diff -r ef606668d247 -r 97eebddaae84 src/arch/sparc/linux/syscalls.cc --- a/src/arch/sparc/linux/syscalls.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/sparc/linux/syscalls.cc Wed Nov 09 14:27:40 2016 -0600 @@ -29,6 +29,7 @@ */ #include "arch/sparc/linux/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" class LiveProcess; diff -r ef606668d247 -r 97eebddaae84 src/arch/sparc/solaris/process.cc --- a/src/arch/sparc/solaris/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/sparc/solaris/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -36,6 +36,7 @@ #include "cpu/thread_context.hh" #include "kern/solaris/solaris.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" using namespace std; diff -r ef606668d247 -r 97eebddaae84 src/arch/x86/linux/process.cc --- a/src/arch/x86/linux/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/x86/linux/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -46,6 +46,7 @@ #include "cpu/thread_context.hh" #include "kern/linux/linux.hh" #include "sim/process.hh" +#include "sim/syscall_desc.hh" #include "sim/syscall_emul.hh" using namespace std; @@ -159,7 +160,7 @@ return -EFAULT; if (!gdt.copyIn(tc->getMemProxy())) - panic("Failed to copy in GDT for %s.\n", desc->name); + panic("Failed to copy in GDT for %s.\n", desc->name()); if (userDesc->entry_number == (uint32_t)(-1)) { // Find a free TLS entry. @@ -213,7 +214,7 @@ if (!userDesc.copyOut(tc->getMemProxy())) return -EFAULT; if (!gdt.copyOut(tc->getMemProxy())) - panic("Failed to copy out GDT for %s.\n", desc->name); + panic("Failed to copy out GDT for %s.\n", desc->name()); return 0; } diff -r ef606668d247 -r 97eebddaae84 src/arch/x86/process.cc --- a/src/arch/x86/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/arch/x86/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -58,7 +58,7 @@ #include "mem/multi_level_page_table.hh" #include "mem/page_table.hh" #include "sim/process_impl.hh" -#include "sim/syscall_emul.hh" +#include "sim/syscall_desc.hh" #include "sim/system.hh" using namespace std; diff -r ef606668d247 -r 97eebddaae84 src/sim/SConscript --- a/src/sim/SConscript Wed Nov 09 14:27:37 2016 -0600 +++ b/src/sim/SConscript Wed Nov 09 14:27:40 2016 -0600 @@ -80,6 +80,7 @@ Source('fd_entry.cc') Source('pseudo_inst.cc') Source('syscall_emul.cc') + Source('syscall_desc.cc') DebugFlag('Checkpoint') DebugFlag('Config') diff -r ef606668d247 -r 97eebddaae84 src/sim/process.cc --- a/src/sim/process.cc Wed Nov 09 14:27:37 2016 -0600 +++ b/src/sim/process.cc Wed Nov 09 14:27:40 2016 -0600 @@ -66,7 +66,7 @@ #include "sim/debug.hh" #include "sim/process_impl.hh" #include "sim/stats.hh" -#include "sim/syscall_emul.hh" +#include "sim/syscall_desc.hh" #include "sim/system.hh" #if THE_ISA == ALPHA_ISA diff -r ef606668d247 -r 97eebddaae84 src/sim/process.hh --- a/src/sim/process.hh Wed Nov 09 14:27:37 2016 -0600 +++ b/src/sim/process.hh Wed Nov 09 14:27:40 2016 -0600 @@ -44,7 +44,7 @@ #include "mem/se_translating_port_proxy.hh" #include "sim/fd_entry.hh" #include "sim/sim_object.hh" -#include "sim/syscallreturn.hh" +#include "sim/syscall_return.hh" class PageTable; struct ProcessParams; diff -r ef606668d247 -r 97eebddaae84 src/sim/syscall_debug_macros.hh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/sim/syscall_debug_macros.hh Wed Nov 09 14:27:40 2016 -0600 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2012-2013, 2015 ARM Limited + * Copyright (c) 2015-2016 Advanced Micro Devices, Inc. + * 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) 2003-2005 The Regents of The University of Michigan + * All rights reserved. + * + * 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: Steve Reinhardt + * Kevin Lim + * Brandon Potter + */ + +#ifndef __SIM_SYSCALL_DEBUG_MACROS_HH__ +#define __SIM_SYSCALL_DEBUG_MACROS_HH__ + +#include "debug/SyscallBase.hh" +#include "debug/SyscallVerbose.hh" + +/** + * This macro is intended to help with readability. + * FLAGEXT specifies to which flag to assign the message: SyscallBase, + * SyscallVerbose, etc..; notice that 'Syscall' is already prepended. + * FMT is the message to be appended to the header information. The header + * information contains the cpuid and thread id. + */ +#define DPRINTF_SYSCALL(FLAGEXT, FMT, ...) \ + DPRINTFS(Syscall##FLAGEXT, tc->getCpuPtr(), "T%d : syscall " FMT, \ + tc->threadId(), __VA_ARGS__) + +#endif // __SIM_SYSCALL_DEBUG_MACROS_HH__ diff -r ef606668d247 -r 97eebddaae84 src/sim/syscall_desc.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/sim/syscall_desc.cc Wed Nov 09 14:27:40 2016 -0600 @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2016 Advanced Micro Devices, Inc. + * Copyright (c) 2003-2005 The Regents of The University of Michigan + * All rights reserved. + * + * 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: Steve Reinhardt + * Ali Saidi + * Brandon Potter + */ + +#include "sim/syscall_desc.hh" + +#include "base/trace.hh" +#include "config/the_isa.hh" +#include "cpu/base.hh" +#include "cpu/thread_context.hh" +#include "sim/process.hh" +#include "sim/syscall_debug_macros.hh" +#include "sim/syscall_return.hh" + +void +SyscallDesc::doSyscall(int callnum, LiveProcess *process, ThreadContext *tc) +{ + TheISA::IntReg arg[6] M5_VAR_USED; + + /** + * Step through the first six parameters for the system call and + * retrieve their values. Note that index is incremented as a + * side-effect of the calling method. + */ + for (int index = 0; index < 6; ) _______________________________________________ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev