nativetrace.cc revision 11321:02e930db812d
111986Sandreas.sandberg@arm.com/* 212391Sjason@lowepower.com * Copyright (c) 2006-2009 The Regents of The University of Michigan 311986Sandreas.sandberg@arm.com * All rights reserved. 411986Sandreas.sandberg@arm.com * 511986Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 611986Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 711986Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 811986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 911986Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 1011986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 1111986Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 1212391Sjason@lowepower.com * neither the name of the copyright holders nor the names of its 1312391Sjason@lowepower.com * contributors may be used to endorse or promote products derived from 1411986Sandreas.sandberg@arm.com * this software without specific prior written permission. 1511986Sandreas.sandberg@arm.com * 1611986Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712391Sjason@lowepower.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1811986Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1911986Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011986Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111986Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2211986Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2311986Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2411986Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2511986Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2611986Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711986Sandreas.sandberg@arm.com * 2811986Sandreas.sandberg@arm.com * Authors: Gabe Black 2911986Sandreas.sandberg@arm.com */ 3011986Sandreas.sandberg@arm.com 3111986Sandreas.sandberg@arm.com#include "base/socket.hh" 3211986Sandreas.sandberg@arm.com#include "cpu/nativetrace.hh" 3311986Sandreas.sandberg@arm.com#include "cpu/static_inst.hh" 3411986Sandreas.sandberg@arm.com#include "debug/GDBMisc.hh" 3511986Sandreas.sandberg@arm.com#include "params/NativeTrace.hh" 3611986Sandreas.sandberg@arm.com 3711986Sandreas.sandberg@arm.comusing namespace std; 3811986Sandreas.sandberg@arm.com 3911986Sandreas.sandberg@arm.comnamespace Trace { 4011986Sandreas.sandberg@arm.com 4111986Sandreas.sandberg@arm.comNativeTrace::NativeTrace(const Params *p) 4211986Sandreas.sandberg@arm.com : ExeTracer(p) 4311986Sandreas.sandberg@arm.com{ 4411986Sandreas.sandberg@arm.com if (ListenSocket::allDisabled()) 4511986Sandreas.sandberg@arm.com fatal("All listeners are disabled!"); 4611986Sandreas.sandberg@arm.com 4712391Sjason@lowepower.com int port = 8000; 4811986Sandreas.sandberg@arm.com while (!native_listener.listen(port, true)) 4912037Sandreas.sandberg@arm.com { 5012037Sandreas.sandberg@arm.com DPRINTF(GDBMisc, "Can't bind port %d\n", port); 5112037Sandreas.sandberg@arm.com port++; 5212037Sandreas.sandberg@arm.com } 5311986Sandreas.sandberg@arm.com ccprintf(cerr, "Listening for native process on port %d\n", port); 5411986Sandreas.sandberg@arm.com fd = native_listener.accept(); 5511986Sandreas.sandberg@arm.com} 5611986Sandreas.sandberg@arm.com 5711986Sandreas.sandberg@arm.comvoid 5812037Sandreas.sandberg@arm.comTrace::NativeTraceRecord::dump() 5912037Sandreas.sandberg@arm.com{ 6012037Sandreas.sandberg@arm.com //Don't print what happens for each micro-op, just print out 6112037Sandreas.sandberg@arm.com //once at the last op, and for regular instructions. 6211986Sandreas.sandberg@arm.com if (!staticInst->isMicroop() || staticInst->isLastMicroop()) 6312037Sandreas.sandberg@arm.com parent->check(this); 6411986Sandreas.sandberg@arm.com} 6512037Sandreas.sandberg@arm.com 6612037Sandreas.sandberg@arm.com} // namespace Trace 6712037Sandreas.sandberg@arm.com