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