home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gdb-4.16-base.tgz / gdb-4.16-base.tar / fsf / gdb / sim / ppc / debug.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-22  |  4.4 KB  |  140 lines

  1. /*  This file is part of the program psim.
  2.  
  3.     Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18.  
  19.     */
  20.  
  21.  
  22. #ifndef _DEBUG_C_
  23. #define _DEBUG_C_
  24.  
  25. #include "config.h"
  26. #include "basics.h"
  27.  
  28. #ifdef HAVE_STDLIB_H
  29. #include <stdlib.h>
  30. #endif
  31.  
  32. int ppc_trace[nr_trace_options];
  33.  
  34. typedef struct _trace_option_descriptor {
  35.   trace_options option;
  36.   const char *name;
  37.   const char *description;
  38. } trace_option_descriptor;
  39.  
  40. static trace_option_descriptor trace_description[] = {
  41.   { trace_gdb, "gdb", "calls made by gdb to the sim_calls.c file" },
  42.   { trace_os_emul, "os-emul", "VEA mode sytem calls - like strace" },
  43.   /* decode/issue */
  44.   { trace_semantics, "semantics", "Instruction execution (issue)" },
  45.   { trace_idecode, "idecode", "instruction decode (when miss in icache)" },
  46.   { trace_alu, "alu", "results of integer ALU" },
  47.   { trace_vm, "vm", "OEA address translation" },
  48.   { trace_load_store, "load-store", "transfers between registers and memory" },
  49.   { trace_model, "model", "model specific information" },
  50.   /* devices */
  51.   { trace_device_tree, "device-tree",  },
  52.   { trace_devices, "devices" },
  53.   { trace_pass_device, "pass-device" },
  54.   { trace_console_device, "console-device" },
  55.   { trace_icu_device, "icu-device" },
  56.   { trace_halt_device, "halt-device" },
  57.   { trace_register_device, "register-device", "Device initializing registers" },
  58.   { trace_vm_device, "vm-device" },
  59.   { trace_memory_device, "memory-device" },
  60.   { trace_htab_device, "htab-device" },
  61.   { trace_binary_device, "binary-device" },
  62.   { trace_file_device, "file-device" },
  63.   { trace_core_device, "core-device" },
  64.   { trace_stack_device, "stack-device" },
  65.   /* misc */
  66.   { trace_print_info, "print-info", "Print performance analysis information" },
  67.   { trace_opts, "options", "Print options simulator was compiled with" },
  68.   /*{ trace_tbd, "tbd", "Trace any missing features" },*/
  69.   { trace_print_device_tree, "print-device-tree", "Output the contents of the device tree" },
  70.   { trace_dump_device_tree, "dump-device-tree", "Output the contents of the device tree then exit" },
  71.   /* sentinal */
  72.   { nr_trace_options, NULL },
  73. };
  74.  
  75. extern void
  76. trace_option(const char *option,
  77.          int setting)
  78. {
  79.   if (strcmp(option, "all") == 0) {
  80.     trace_options i;
  81.     for (i = 0; i < nr_trace_options; i++)
  82.       ppc_trace[i] = setting;
  83.   }
  84.   else {
  85.     int i = 0;
  86.     while (trace_description[i].option < nr_trace_options
  87.        && strcmp(option, trace_description[i].name) != 0)
  88.       i++;
  89.     if (trace_description[i].option < nr_trace_options)
  90.       ppc_trace[trace_description[i].option] = setting;
  91.     else {
  92.       i = strtoul(option, 0, 0);
  93.       if (i > 0 && i < nr_trace_options)
  94.     ppc_trace[i] = setting;
  95.       else
  96.     error("Unknown trace option: %s\n", option);
  97.     }
  98.       
  99.   }
  100. }
  101.  
  102.  
  103. extern void
  104. trace_usage(int verbose)
  105. {
  106.   if (verbose) {
  107.     printf_filtered("\n");
  108.     printf_filtered("The following are possible <trace> options:\n");
  109.     printf_filtered("\n");
  110.   }
  111.   if (verbose == 1) {
  112.     int pos;
  113.     int i;
  114.     printf_filtered("  all");
  115.     pos = strlen("all") + 2;
  116.     for (i = 0; trace_description[i].option < nr_trace_options; i++) {
  117.       pos += strlen(trace_description[i].name) + 2;
  118.       if (pos > 75) {
  119.     pos = strlen(trace_description[i].name) + 2;
  120.     printf_filtered("\n");
  121.       }
  122.       printf_filtered("  %s", trace_description[i].name);
  123.     }
  124.     printf_filtered("\n");
  125.   }
  126.   if (verbose > 1) {
  127.     const char *format = "\t%-18s%s\n";
  128.     int i;
  129.     printf_filtered(format, "all", "enable all the trace options");
  130.     for (i = 0; trace_description[i].option < nr_trace_options; i++)
  131.       printf_filtered(format,
  132.               trace_description[i].name,
  133.               (trace_description[i].description
  134.                ? trace_description[i].description
  135.                : ""));
  136.   }
  137. }
  138.  
  139. #endif /* _DEBUG_C_ */
  140.