process.cc revision 11851
12199SN/A/* 22199SN/A * Copyright (c) 2003-2005 The Regents of The University of Michigan 32199SN/A * All rights reserved. 42199SN/A * 52199SN/A * Redistribution and use in source and binary forms, with or without 62199SN/A * modification, are permitted provided that the following conditions are 72199SN/A * met: redistributions of source code must retain the above copyright 82199SN/A * notice, this list of conditions and the following disclaimer; 92199SN/A * redistributions in binary form must reproduce the above copyright 102199SN/A * notice, this list of conditions and the following disclaimer in the 112199SN/A * documentation and/or other materials provided with the distribution; 122199SN/A * neither the name of the copyright holders nor the names of its 132199SN/A * contributors may be used to endorse or promote products derived from 142199SN/A * this software without specific prior written permission. 152199SN/A * 162199SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172199SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182199SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192199SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202199SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212199SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222199SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232199SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242199SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252199SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262199SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665Ssaidi@eecs.umich.edu * 282665Ssaidi@eecs.umich.edu * Authors: Steve Reinhardt 292665Ssaidi@eecs.umich.edu * Gabe Black 302665Ssaidi@eecs.umich.edu * Ali Saidi 312199SN/A */ 322199SN/A 338229Snate@binkert.org#include "arch/sparc/linux/process.hh" 3411793Sbrandon.potter@amd.com 352561SN/A#include "arch/sparc/isa_traits.hh" 366329Sgblack@eecs.umich.edu#include "arch/sparc/registers.hh" 372199SN/A#include "base/trace.hh" 382680Sktlim@umich.edu#include "cpu/thread_context.hh" 392199SN/A#include "kern/linux/linux.hh" 402199SN/A#include "sim/process.hh" 4111794Sbrandon.potter@amd.com#include "sim/syscall_desc.hh" 422199SN/A#include "sim/syscall_emul.hh" 432199SN/A 442199SN/Ausing namespace std; 452209SN/Ausing namespace SparcISA; 462199SN/A 472199SN/ASyscallDesc* 482458SN/ASparcLinuxProcess::getDesc(int callnum) 492199SN/A{ 505981Sstever@gmail.com if (callnum < 0 || callnum >= Num_Syscall_Descs) 512199SN/A return NULL; 522199SN/A return &syscallDescs[callnum]; 532199SN/A} 544111Sgblack@eecs.umich.edu 554188Sgblack@eecs.umich.eduSyscallDesc* 564188Sgblack@eecs.umich.eduSparcLinuxProcess::getDesc32(int callnum) 574188Sgblack@eecs.umich.edu{ 585981Sstever@gmail.com if (callnum < 0 || callnum >= Num_Syscall32_Descs) 594188Sgblack@eecs.umich.edu return NULL; 604188Sgblack@eecs.umich.edu return &syscall32Descs[callnum]; 614188Sgblack@eecs.umich.edu} 624111Sgblack@eecs.umich.edu 6311851Sbrandon.potter@amd.comSparc32LinuxProcess::Sparc32LinuxProcess(ProcessParams * params, 645154Sgblack@eecs.umich.edu ObjectFile *objFile) 6511851Sbrandon.potter@amd.com : Sparc32Process(params, objFile) 664111Sgblack@eecs.umich.edu{} 674111Sgblack@eecs.umich.edu 684111Sgblack@eecs.umich.eduvoid Sparc32LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) 694111Sgblack@eecs.umich.edu{ 707741Sgblack@eecs.umich.edu switch (trapNum) { 714111Sgblack@eecs.umich.edu case 0x10: //Linux 32 bit syscall trap 724111Sgblack@eecs.umich.edu tc->syscall(tc->readIntReg(1)); 734111Sgblack@eecs.umich.edu break; 744111Sgblack@eecs.umich.edu default: 7511851Sbrandon.potter@amd.com SparcProcess::handleTrap(trapNum, tc); 764111Sgblack@eecs.umich.edu } 774111Sgblack@eecs.umich.edu} 784111Sgblack@eecs.umich.edu 7911851Sbrandon.potter@amd.comSparc64LinuxProcess::Sparc64LinuxProcess(ProcessParams * params, 805154Sgblack@eecs.umich.edu ObjectFile *objFile) 8111851Sbrandon.potter@amd.com : Sparc64Process(params, objFile) 824111Sgblack@eecs.umich.edu{} 834111Sgblack@eecs.umich.edu 844111Sgblack@eecs.umich.eduvoid Sparc64LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) 854111Sgblack@eecs.umich.edu{ 867741Sgblack@eecs.umich.edu switch (trapNum) { 877741Sgblack@eecs.umich.edu // case 0x10: // Linux 32 bit syscall trap 887741Sgblack@eecs.umich.edu case 0x6d: // Linux 64 bit syscall trap 894111Sgblack@eecs.umich.edu tc->syscall(tc->readIntReg(1)); 904111Sgblack@eecs.umich.edu break; 914111Sgblack@eecs.umich.edu default: 9211851Sbrandon.potter@amd.com SparcProcess::handleTrap(trapNum, tc); 934111Sgblack@eecs.umich.edu } 944111Sgblack@eecs.umich.edu} 95