m5.c revision 4090:08bd6439b907
12568SN/A/* 28922Swilliam.wang@arm.com * Copyright (c) 2003-2005 The Regents of The University of Michigan 38713Sandreas.hansson@arm.com * All rights reserved. 48713Sandreas.hansson@arm.com * 58713Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 68713Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 78713Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 88713Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 98713Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 108713Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 118713Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 128713Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 138713Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 142568SN/A * this software without specific prior written permission. 152568SN/A * 162568SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172568SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182568SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192568SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202568SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212568SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222568SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232568SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242568SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252568SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262568SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272568SN/A * 282568SN/A * Authors: Nathan Binkert 292568SN/A */ 302568SN/A 312568SN/A#include <inttypes.h> 322568SN/A#include <stdio.h> 332568SN/A#include <stdlib.h> 342568SN/A#include <string.h> 352568SN/A#include <unistd.h> 362568SN/A 372568SN/A#include "m5op.h" 382568SN/A 392665Ssaidi@eecs.umich.educhar *progname; 402665Ssaidi@eecs.umich.edu 412665Ssaidi@eecs.umich.eduvoid 428713Sandreas.hansson@arm.comusage() 432568SN/A{ 442568SN/A printf("usage: m5 initparam\n" 452568SN/A " m5 sw99param\n" 462982Sstever@eecs.umich.edu " m5 exit [delay]\n" 478713Sandreas.hansson@arm.com " m5 resetstats [delay [period]]\n" 488713Sandreas.hansson@arm.com " m5 dumpstats [delay [period]]\n" 492568SN/A " m5 dumpresetstats [delay [period]]\n" 502568SN/A " m5 checkpoint [delay [period]]\n" 512568SN/A " m5 readfile\n" 528232Snate@binkert.org "\n" 532568SN/A "All times in nanoseconds!\n"); 544762Snate@binkert.org exit(1); 552568SN/A} 568713Sandreas.hansson@arm.com 578713Sandreas.hansson@arm.com#define COMPARE(X) (strcmp(X, command) == 0) 588851Sandreas.hansson@arm.com 598713Sandreas.hansson@arm.comint 608713Sandreas.hansson@arm.commain(int argc, char *argv[]) 618713Sandreas.hansson@arm.com{ 628922Swilliam.wang@arm.com char *command; 638713Sandreas.hansson@arm.com uint64_t param; 648713Sandreas.hansson@arm.com uint64_t arg1 = 0; 658713Sandreas.hansson@arm.com uint64_t arg2 = 0; 668851Sandreas.hansson@arm.com 678713Sandreas.hansson@arm.com progname = argv[0]; 688713Sandreas.hansson@arm.com if (argc < 2) 698713Sandreas.hansson@arm.com usage(); 708713Sandreas.hansson@arm.com 718713Sandreas.hansson@arm.com command = argv[1]; 728851Sandreas.hansson@arm.com 738713Sandreas.hansson@arm.com if (COMPARE("initparam")) { 748922Swilliam.wang@arm.com if (argc != 2) 758851Sandreas.hansson@arm.com usage(); 768851Sandreas.hansson@arm.com 772643Sstever@eecs.umich.edu printf("%ld", m5_initparam()); 782643Sstever@eecs.umich.edu return 0; 792643Sstever@eecs.umich.edu } 804435Ssaidi@eecs.umich.edu 815034Smilesck@eecs.umich.edu if (COMPARE("sw99param")) { 828851Sandreas.hansson@arm.com if (argc != 2) 838713Sandreas.hansson@arm.com usage(); 848851Sandreas.hansson@arm.com 854435Ssaidi@eecs.umich.edu param = m5_initparam(); 862643Sstever@eecs.umich.edu // run-time, rampup-time, rampdown-time, warmup-time, connections 874432Ssaidi@eecs.umich.edu printf("%d %d %d %d %d", (param >> 48) & 0xfff, 884432Ssaidi@eecs.umich.edu (param >> 36) & 0xfff, (param >> 24) & 0xfff, 892643Sstever@eecs.umich.edu (param >> 12) & 0xfff, (param >> 0) & 0xfff); 902643Sstever@eecs.umich.edu 918922Swilliam.wang@arm.com return 0; 928922Swilliam.wang@arm.com } 938922Swilliam.wang@arm.com 948922Swilliam.wang@arm.com if (COMPARE("exit")) { 958922Swilliam.wang@arm.com switch (argc) { 968922Swilliam.wang@arm.com case 3: 978922Swilliam.wang@arm.com arg1 = strtoul(argv[2], NULL, 0); 988922Swilliam.wang@arm.com case 2: 998922Swilliam.wang@arm.com m5_exit(arg1); 1008922Swilliam.wang@arm.com return 0; 1018922Swilliam.wang@arm.com 1028922Swilliam.wang@arm.com default: 1032643Sstever@eecs.umich.edu usage(); 1048713Sandreas.hansson@arm.com } 1058922Swilliam.wang@arm.com } 1068922Swilliam.wang@arm.com 1078922Swilliam.wang@arm.com if (COMPARE("resetstats")) { 1088922Swilliam.wang@arm.com switch (argc) { 1092643Sstever@eecs.umich.edu case 4: 1102643Sstever@eecs.umich.edu arg2 = strtoul(argv[3], NULL, 0); 1112568SN/A case 3: 1122568SN/A arg1 = strtoul(argv[2], NULL, 0); 1132568SN/A case 2: 1148713Sandreas.hansson@arm.com m5_reset_stats(arg1, arg2); 1158713Sandreas.hansson@arm.com return 0; 1164432Ssaidi@eecs.umich.edu 1174432Ssaidi@eecs.umich.edu default: 1188713Sandreas.hansson@arm.com usage(); 1198713Sandreas.hansson@arm.com } 1206764SBrad.Beckmann@amd.com } 1218713Sandreas.hansson@arm.com 1228713Sandreas.hansson@arm.com if (COMPARE("dumpstats")) { 1238713Sandreas.hansson@arm.com switch (argc) { 1248713Sandreas.hansson@arm.com case 4: 1252568SN/A arg2 = strtoul(argv[3], NULL, 0); 1262568SN/A case 3: 1274433Ssaidi@eecs.umich.edu arg1 = strtoul(argv[2], NULL, 0); 1288713Sandreas.hansson@arm.com case 2: 1294433Ssaidi@eecs.umich.edu m5_dump_stats(arg1, arg2); 1308713Sandreas.hansson@arm.com return 0; 1314435Ssaidi@eecs.umich.edu 1324435Ssaidi@eecs.umich.edu default: 1334435Ssaidi@eecs.umich.edu usage(); 1348713Sandreas.hansson@arm.com } 1354435Ssaidi@eecs.umich.edu } 1368713Sandreas.hansson@arm.com 1374433Ssaidi@eecs.umich.edu if (COMPARE("dumpresetstats")) { 1382568SN/A switch (argc) { 1392568SN/A case 4: 1408975Sandreas.hansson@arm.com arg2 = strtoul(argv[3], NULL, 0); 1412568SN/A case 3: 1428713Sandreas.hansson@arm.com arg1 = strtoul(argv[2], NULL, 0); 1438713Sandreas.hansson@arm.com case 2: 1448949Sandreas.hansson@arm.com m5_dumpreset_stats(arg1, arg2); 1458949Sandreas.hansson@arm.com return 0; 1462643Sstever@eecs.umich.edu 1478713Sandreas.hansson@arm.com default: 1484450Ssaidi@eecs.umich.edu usage(); 1498851Sandreas.hansson@arm.com } 1508713Sandreas.hansson@arm.com } 1518713Sandreas.hansson@arm.com 1528713Sandreas.hansson@arm.com if (COMPARE("readfile")) { 1538713Sandreas.hansson@arm.com char buf[256*1024]; 1548713Sandreas.hansson@arm.com int offset = 0; 1558975Sandreas.hansson@arm.com int len; 1568713Sandreas.hansson@arm.com 1578949Sandreas.hansson@arm.com if (argc != 2) 1588949Sandreas.hansson@arm.com usage(); 1598713Sandreas.hansson@arm.com 1608713Sandreas.hansson@arm.com while ((len = m5_readfile(buf, sizeof(buf), offset)) > 0) { 1618713Sandreas.hansson@arm.com write(STDOUT_FILENO, buf, len); 1628713Sandreas.hansson@arm.com offset += len; 1638851Sandreas.hansson@arm.com } 1648713Sandreas.hansson@arm.com 1654433Ssaidi@eecs.umich.edu return 0; 1664433Ssaidi@eecs.umich.edu } 1673662Srdreslin@umich.edu 1684433Ssaidi@eecs.umich.edu if (COMPARE("checkpoint")) { 1695562Snate@binkert.org switch (argc) { 1704435Ssaidi@eecs.umich.edu case 4: 1718713Sandreas.hansson@arm.com arg2 = strtoul(argv[3], NULL, 0); 1728713Sandreas.hansson@arm.com case 3: 1738713Sandreas.hansson@arm.com arg1 = strtoul(argv[2], NULL, 0); 1748713Sandreas.hansson@arm.com case 2: 1758713Sandreas.hansson@arm.com m5_checkpoint(arg1, arg2); 1764433Ssaidi@eecs.umich.edu return 0; 1774433Ssaidi@eecs.umich.edu 1784433Ssaidi@eecs.umich.edu default: 1794433Ssaidi@eecs.umich.edu usage(); 1808713Sandreas.hansson@arm.com } 1814433Ssaidi@eecs.umich.edu 1824433Ssaidi@eecs.umich.edu return 0; 1835562Snate@binkert.org } 1844433Ssaidi@eecs.umich.edu 1858851Sandreas.hansson@arm.com if (COMPARE("loadsymbol")) { 1864433Ssaidi@eecs.umich.edu m5_loadsymbol(arg1); 1874433Ssaidi@eecs.umich.edu return 0; 1882657Ssaidi@eecs.umich.edu } 1892657Ssaidi@eecs.umich.edu if (COMPARE("readfile")) { 1904433Ssaidi@eecs.umich.edu char buf[256*1024]; 1918713Sandreas.hansson@arm.com int offset = 0; 1924433Ssaidi@eecs.umich.edu int len; 1934433Ssaidi@eecs.umich.edu 1944986Ssaidi@eecs.umich.edu if (argc != 2) 1954870Sstever@eecs.umich.edu usage(); 1962657Ssaidi@eecs.umich.edu 1978713Sandreas.hansson@arm.com while ((len = m5_readfile(buf, sizeof(buf), offset)) > 0) { 1988713Sandreas.hansson@arm.com write(STDOUT_FILENO, buf, len); 1998713Sandreas.hansson@arm.com offset += len; 2008713Sandreas.hansson@arm.com } 2018713Sandreas.hansson@arm.com 2028713Sandreas.hansson@arm.com return 0; 2038713Sandreas.hansson@arm.com } 2047823Ssteve.reinhardt@amd.com 2059029Sandreas.hansson@arm.com usage(); 2064435Ssaidi@eecs.umich.edu} 2074435Ssaidi@eecs.umich.edu