init_signals.cc revision 10453
110453SAndrew.Bardsley@arm.com/* 210453SAndrew.Bardsley@arm.com * Copyright (c) 2012 ARM Limited 310453SAndrew.Bardsley@arm.com * All rights reserved 410453SAndrew.Bardsley@arm.com * 510453SAndrew.Bardsley@arm.com * The license below extends only to copyright in the software and shall 610453SAndrew.Bardsley@arm.com * not be construed as granting a license to any other intellectual 710453SAndrew.Bardsley@arm.com * property including but not limited to intellectual property relating 810453SAndrew.Bardsley@arm.com * to a hardware implementation of the functionality of the software 910453SAndrew.Bardsley@arm.com * licensed hereunder. You may use the software subject to the license 1010453SAndrew.Bardsley@arm.com * terms below provided that you ensure that this notice is replicated 1110453SAndrew.Bardsley@arm.com * unmodified and in its entirety in all distributions of the software, 1210453SAndrew.Bardsley@arm.com * modified or unmodified, in source code or in binary form. 1310453SAndrew.Bardsley@arm.com * 1410453SAndrew.Bardsley@arm.com * Copyright (c) 2000-2005 The Regents of The University of Michigan 1510453SAndrew.Bardsley@arm.com * Copyright (c) 2008 The Hewlett-Packard Development Company 1610453SAndrew.Bardsley@arm.com * All rights reserved. 1710453SAndrew.Bardsley@arm.com * 1810453SAndrew.Bardsley@arm.com * Redistribution and use in source and binary forms, with or without 1910453SAndrew.Bardsley@arm.com * modification, are permitted provided that the following conditions are 2010453SAndrew.Bardsley@arm.com * met: redistributions of source code must retain the above copyright 2110453SAndrew.Bardsley@arm.com * notice, this list of conditions and the following disclaimer; 2210453SAndrew.Bardsley@arm.com * redistributions in binary form must reproduce the above copyright 2310453SAndrew.Bardsley@arm.com * notice, this list of conditions and the following disclaimer in the 2410453SAndrew.Bardsley@arm.com * documentation and/or other materials provided with the distribution; 2510453SAndrew.Bardsley@arm.com * neither the name of the copyright holders nor the names of its 2610453SAndrew.Bardsley@arm.com * contributors may be used to endorse or promote products derived from 2710453SAndrew.Bardsley@arm.com * this software without specific prior written permission. 2810453SAndrew.Bardsley@arm.com * 2910453SAndrew.Bardsley@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3010453SAndrew.Bardsley@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3110453SAndrew.Bardsley@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 3210453SAndrew.Bardsley@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3310453SAndrew.Bardsley@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3410453SAndrew.Bardsley@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3510453SAndrew.Bardsley@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3610453SAndrew.Bardsley@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3710453SAndrew.Bardsley@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3810453SAndrew.Bardsley@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3910453SAndrew.Bardsley@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4010453SAndrew.Bardsley@arm.com * 4110453SAndrew.Bardsley@arm.com * Authors: Nathan Binkert 4210453SAndrew.Bardsley@arm.com */ 4310453SAndrew.Bardsley@arm.com 4410453SAndrew.Bardsley@arm.com#include <csignal> 4510453SAndrew.Bardsley@arm.com#include <iostream> 4610453SAndrew.Bardsley@arm.com#include <string> 4710453SAndrew.Bardsley@arm.com 4810453SAndrew.Bardsley@arm.com#include "base/cprintf.hh" 4910453SAndrew.Bardsley@arm.com#include "sim/async.hh" 5010453SAndrew.Bardsley@arm.com#include "sim/core.hh" 5110453SAndrew.Bardsley@arm.com#include "sim/init_signals.hh" 5210453SAndrew.Bardsley@arm.com 5310453SAndrew.Bardsley@arm.comusing namespace std; 5410453SAndrew.Bardsley@arm.com 5510453SAndrew.Bardsley@arm.com/// Stats signal handler. 5610453SAndrew.Bardsley@arm.comvoid 5710453SAndrew.Bardsley@arm.comdumpStatsHandler(int sigtype) 5810453SAndrew.Bardsley@arm.com{ 5910453SAndrew.Bardsley@arm.com async_event = true; 6010453SAndrew.Bardsley@arm.com async_statdump = true; 6110453SAndrew.Bardsley@arm.com} 6210453SAndrew.Bardsley@arm.com 6310453SAndrew.Bardsley@arm.comvoid 6410453SAndrew.Bardsley@arm.comdumprstStatsHandler(int sigtype) 6510453SAndrew.Bardsley@arm.com{ 6610453SAndrew.Bardsley@arm.com async_event = true; 6710453SAndrew.Bardsley@arm.com async_statdump = true; 6810453SAndrew.Bardsley@arm.com async_statreset = true; 6910453SAndrew.Bardsley@arm.com} 7010453SAndrew.Bardsley@arm.com 7110453SAndrew.Bardsley@arm.com/// Exit signal handler. 7210453SAndrew.Bardsley@arm.comvoid 7310453SAndrew.Bardsley@arm.comexitNowHandler(int sigtype) 7410453SAndrew.Bardsley@arm.com{ 7510453SAndrew.Bardsley@arm.com async_event = true; 7610453SAndrew.Bardsley@arm.com async_exit = true; 7710453SAndrew.Bardsley@arm.com} 7810453SAndrew.Bardsley@arm.com 7910453SAndrew.Bardsley@arm.com/// Abort signal handler. 8010453SAndrew.Bardsley@arm.comvoid 8110453SAndrew.Bardsley@arm.comabortHandler(int sigtype) 8210453SAndrew.Bardsley@arm.com{ 8310453SAndrew.Bardsley@arm.com ccprintf(cerr, "Program aborted at cycle %d\n", curTick()); 8410453SAndrew.Bardsley@arm.com} 8510453SAndrew.Bardsley@arm.com 8610453SAndrew.Bardsley@arm.com// Handle SIGIO 8710453SAndrew.Bardsley@arm.comstatic void 8810453SAndrew.Bardsley@arm.comioHandler(int sigtype) 8910453SAndrew.Bardsley@arm.com{ 9010453SAndrew.Bardsley@arm.com async_event = true; 9110453SAndrew.Bardsley@arm.com async_io = true; 9210453SAndrew.Bardsley@arm.com} 9310453SAndrew.Bardsley@arm.com 9410453SAndrew.Bardsley@arm.comstatic void 9510453SAndrew.Bardsley@arm.cominstallSignalHandler(int signal, void (*handler)(int sigtype)) 9610453SAndrew.Bardsley@arm.com{ 9710453SAndrew.Bardsley@arm.com struct sigaction sa; 9810453SAndrew.Bardsley@arm.com 9910453SAndrew.Bardsley@arm.com memset(&sa, 0, sizeof(sa)); 10010453SAndrew.Bardsley@arm.com sigemptyset(&sa.sa_mask); 10110453SAndrew.Bardsley@arm.com sa.sa_handler = handler; 10210453SAndrew.Bardsley@arm.com sa.sa_flags = SA_RESTART; 10310453SAndrew.Bardsley@arm.com 10410453SAndrew.Bardsley@arm.com if (sigaction(signal, &sa, NULL) == -1) 10510453SAndrew.Bardsley@arm.com panic("Failed to setup handler for signal %i\n", signal); 10610453SAndrew.Bardsley@arm.com} 10710453SAndrew.Bardsley@arm.com 10810453SAndrew.Bardsley@arm.com/* 10910453SAndrew.Bardsley@arm.com * M5 can do several special things when various signals are sent. 11010453SAndrew.Bardsley@arm.com * None are mandatory. 11110453SAndrew.Bardsley@arm.com */ 11210453SAndrew.Bardsley@arm.comvoid 11310453SAndrew.Bardsley@arm.cominitSignals() 11410453SAndrew.Bardsley@arm.com{ 11510453SAndrew.Bardsley@arm.com // Floating point exceptions may happen on misspeculated paths, so 11610453SAndrew.Bardsley@arm.com // ignore them 11710453SAndrew.Bardsley@arm.com signal(SIGFPE, SIG_IGN); 11810453SAndrew.Bardsley@arm.com 11910453SAndrew.Bardsley@arm.com // We use SIGTRAP sometimes for debugging 12010453SAndrew.Bardsley@arm.com signal(SIGTRAP, SIG_IGN); 12110453SAndrew.Bardsley@arm.com 12210453SAndrew.Bardsley@arm.com // Dump intermediate stats 12310453SAndrew.Bardsley@arm.com installSignalHandler(SIGUSR1, dumpStatsHandler); 12410453SAndrew.Bardsley@arm.com 12510453SAndrew.Bardsley@arm.com // Dump intermediate stats and reset them 12610453SAndrew.Bardsley@arm.com installSignalHandler(SIGUSR2, dumprstStatsHandler); 12710453SAndrew.Bardsley@arm.com 12810453SAndrew.Bardsley@arm.com // Exit cleanly on Interrupt (Ctrl-C) 12910453SAndrew.Bardsley@arm.com installSignalHandler(SIGINT, exitNowHandler); 13010453SAndrew.Bardsley@arm.com 13110453SAndrew.Bardsley@arm.com // Print out cycle number on abort 13210453SAndrew.Bardsley@arm.com installSignalHandler(SIGABRT, abortHandler); 13310453SAndrew.Bardsley@arm.com 13410453SAndrew.Bardsley@arm.com // Install a SIGIO handler to handle asynchronous file IO. See the 13510453SAndrew.Bardsley@arm.com // PollQueue class. 13610453SAndrew.Bardsley@arm.com installSignalHandler(SIGIO, ioHandler); 13710453SAndrew.Bardsley@arm.com} 13810453SAndrew.Bardsley@arm.com 139