process.cc revision 11793
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" 412199SN/A#include "sim/syscall_emul.hh" 422199SN/A 432199SN/Ausing namespace std; 442209SN/Ausing namespace SparcISA; 452199SN/A 462199SN/ASyscallDesc* 472458SN/ASparcLinuxProcess::getDesc(int callnum) 482199SN/A{ 495981Sstever@gmail.com if (callnum < 0 || callnum >= Num_Syscall_Descs) 502199SN/A return NULL; 512199SN/A return &syscallDescs[callnum]; 522199SN/A} 534111Sgblack@eecs.umich.edu 544188Sgblack@eecs.umich.eduSyscallDesc* 554188Sgblack@eecs.umich.eduSparcLinuxProcess::getDesc32(int callnum) 564188Sgblack@eecs.umich.edu{ 575981Sstever@gmail.com if (callnum < 0 || callnum >= Num_Syscall32_Descs) 584188Sgblack@eecs.umich.edu return NULL; 594188Sgblack@eecs.umich.edu return &syscall32Descs[callnum]; 604188Sgblack@eecs.umich.edu} 614111Sgblack@eecs.umich.edu 625154Sgblack@eecs.umich.eduSparc32LinuxProcess::Sparc32LinuxProcess(LiveProcessParams * params, 635154Sgblack@eecs.umich.edu ObjectFile *objFile) 645154Sgblack@eecs.umich.edu : Sparc32LiveProcess(params, objFile) 654111Sgblack@eecs.umich.edu{} 664111Sgblack@eecs.umich.edu 674111Sgblack@eecs.umich.eduvoid Sparc32LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) 684111Sgblack@eecs.umich.edu{ 697741Sgblack@eecs.umich.edu switch (trapNum) { 704111Sgblack@eecs.umich.edu case 0x10: //Linux 32 bit syscall trap 714111Sgblack@eecs.umich.edu tc->syscall(tc->readIntReg(1)); 724111Sgblack@eecs.umich.edu break; 734111Sgblack@eecs.umich.edu default: 744111Sgblack@eecs.umich.edu SparcLiveProcess::handleTrap(trapNum, tc); 754111Sgblack@eecs.umich.edu } 764111Sgblack@eecs.umich.edu} 774111Sgblack@eecs.umich.edu 785154Sgblack@eecs.umich.eduSparc64LinuxProcess::Sparc64LinuxProcess(LiveProcessParams * params, 795154Sgblack@eecs.umich.edu ObjectFile *objFile) 805154Sgblack@eecs.umich.edu : Sparc64LiveProcess(params, objFile) 814111Sgblack@eecs.umich.edu{} 824111Sgblack@eecs.umich.edu 834111Sgblack@eecs.umich.eduvoid Sparc64LinuxProcess::handleTrap(int trapNum, ThreadContext *tc) 844111Sgblack@eecs.umich.edu{ 857741Sgblack@eecs.umich.edu switch (trapNum) { 867741Sgblack@eecs.umich.edu // case 0x10: // Linux 32 bit syscall trap 877741Sgblack@eecs.umich.edu case 0x6d: // Linux 64 bit syscall trap 884111Sgblack@eecs.umich.edu tc->syscall(tc->readIntReg(1)); 894111Sgblack@eecs.umich.edu break; 904111Sgblack@eecs.umich.edu default: 914111Sgblack@eecs.umich.edu SparcLiveProcess::handleTrap(trapNum, tc); 924111Sgblack@eecs.umich.edu } 934111Sgblack@eecs.umich.edu} 94