tracechild.hh revision 3115
15299Sgblack@eecs.umich.edu/* 25450Sgblack@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan 35299Sgblack@eecs.umich.edu * All rights reserved. 45299Sgblack@eecs.umich.edu * 57087Snate@binkert.org * Redistribution and use in source and binary forms, with or without 67087Snate@binkert.org * modification, are permitted provided that the following conditions are 77087Snate@binkert.org * met: redistributions of source code must retain the above copyright 87087Snate@binkert.org * notice, this list of conditions and the following disclaimer; 97087Snate@binkert.org * redistributions in binary form must reproduce the above copyright 107087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 117087Snate@binkert.org * documentation and/or other materials provided with the distribution; 127087Snate@binkert.org * neither the name of the copyright holders nor the names of its 135299Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 147087Snate@binkert.org * this software without specific prior written permission. 157087Snate@binkert.org * 167087Snate@binkert.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177087Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187087Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197087Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207087Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217087Snate@binkert.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225299Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237087Snate@binkert.org * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245299Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255299Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265299Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275299Sgblack@eecs.umich.edu * 285299Sgblack@eecs.umich.edu * Authors: Gabe Black 295299Sgblack@eecs.umich.edu */ 305299Sgblack@eecs.umich.edu 315299Sgblack@eecs.umich.edu#ifndef REGSTATE_I386_HH 325299Sgblack@eecs.umich.edu#define REGSTATE_I386_HH 335299Sgblack@eecs.umich.edu 345299Sgblack@eecs.umich.edu#include <linux/user.h> 355299Sgblack@eecs.umich.edu#include <sys/types.h> 365299Sgblack@eecs.umich.edu#include <sys/ptrace.h> 375299Sgblack@eecs.umich.edu#include <assert.h> 385299Sgblack@eecs.umich.edu#include <string> 395299Sgblack@eecs.umich.edu 405299Sgblack@eecs.umich.edu#include "tracechild.hh" 4111793Sbrandon.potter@amd.com 4211793Sbrandon.potter@amd.comclass I386TraceChild : public TraceChild 4311793Sbrandon.potter@amd.com{ 447629Sgblack@eecs.umich.edupublic: 455299Sgblack@eecs.umich.edu enum RegNum 465303Sgblack@eecs.umich.edu { 478706Sandreas.hansson@arm.com //GPRs 485299Sgblack@eecs.umich.edu EAX, EBX, ECX, EDX, 497737Sgblack@eecs.umich.edu //Index registers 505299Sgblack@eecs.umich.edu ESI, EDI, 515299Sgblack@eecs.umich.edu //Base pointer and stack pointer 525299Sgblack@eecs.umich.edu EBP, ESP, 535299Sgblack@eecs.umich.edu //Segmentation registers 545299Sgblack@eecs.umich.edu CS, DS, ES, FS, GS, SS, 555450Sgblack@eecs.umich.edu //PC 565299Sgblack@eecs.umich.edu EIP, 575299Sgblack@eecs.umich.edu numregs 585299Sgblack@eecs.umich.edu }; 595299Sgblack@eecs.umich.eduprivate: 605299Sgblack@eecs.umich.edu char printBuffer [256]; 615299Sgblack@eecs.umich.edu static char * regNames[numregs]; 625299Sgblack@eecs.umich.edu int64_t getRegs(user_regs_struct & myregs, int num); 635299Sgblack@eecs.umich.edu user_regs_struct regs; 647532Ssteve.reinhardt@amd.com user_regs_struct oldregs; 655299Sgblack@eecs.umich.edu bool regDiffSinceUpdate[numregs]; 667532Ssteve.reinhardt@amd.com 675303Sgblack@eecs.umich.eduprotected: 685303Sgblack@eecs.umich.edu bool update(int pid); 695303Sgblack@eecs.umich.edu 705303Sgblack@eecs.umich.edupublic: 715303Sgblack@eecs.umich.edu 725303Sgblack@eecs.umich.edu I386TraceChild(); 735303Sgblack@eecs.umich.edu 745303Sgblack@eecs.umich.edu int getNumRegs() 755303Sgblack@eecs.umich.edu { 765303Sgblack@eecs.umich.edu return numregs; 775303Sgblack@eecs.umich.edu } 785303Sgblack@eecs.umich.edu 795303Sgblack@eecs.umich.edu bool diffSinceUpdate(int num) 805303Sgblack@eecs.umich.edu { 815303Sgblack@eecs.umich.edu assert(num < numregs && num >= 0); 825303Sgblack@eecs.umich.edu return regDiffSinceUpdate[num]; 8314010Sgabeblack@google.com } 848852Sandreas.hansson@arm.com 855303Sgblack@eecs.umich.edu std::string getRegName(int num) 865303Sgblack@eecs.umich.edu { 875303Sgblack@eecs.umich.edu assert(num < numregs && num >= 0); 885303Sgblack@eecs.umich.edu return regNames[num]; 895303Sgblack@eecs.umich.edu } 9014010Sgabeblack@google.com 918852Sandreas.hansson@arm.com int64_t getRegVal(int num); 925303Sgblack@eecs.umich.edu int64_t getOldRegVal(int num); 935303Sgblack@eecs.umich.edu uint64_t getPC() {return getRegVal(EIP);} 945303Sgblack@eecs.umich.edu uint64_t getSP() {return getRegVal(ESP);} 955303Sgblack@eecs.umich.edu std::ostream & outputStartState(std::ostream & output) 965303Sgblack@eecs.umich.edu { 975303Sgblack@eecs.umich.edu output << "Printing i386 initial state not yet implemented" 985303Sgblack@eecs.umich.edu << std::endl; 995303Sgblack@eecs.umich.edu return output; 1005303Sgblack@eecs.umich.edu } 1015303Sgblack@eecs.umich.edu 1025303Sgblack@eecs.umich.edu char * printReg(int num); 1035303Sgblack@eecs.umich.edu}; 1045303Sgblack@eecs.umich.edu 1055303Sgblack@eecs.umich.edu#endif 1065303Sgblack@eecs.umich.edu