ubsan: microblaze: left shift cannot be represented in type 'int'
[deliverable/binutils-gdb.git] / sim / common / sim-trace.h
index 4ef2584151c4c7ee3597a7d4d37ad1b58af97ee2..369b6ae5428890a7820b3e527d86bc96abd40871 100644 (file)
@@ -1,5 +1,5 @@
 /* Simulator tracing/debugging support.
-   Copyright (C) 1997-2015 Free Software Foundation, Inc.
+   Copyright (C) 1997-2019 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
 
 This file is part of GDB, the GNU debugger.
@@ -22,12 +22,20 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #ifndef SIM_TRACE_H
 #define SIM_TRACE_H
 
+#include "dis-asm.h"
+
 /* Standard traceable entities.  */
 
 enum {
-  /* Trace insn execution.  */
+  /* Trace insn execution.  The port itself is responsible for displaying what
+     it thinks it is decoding.  */
   TRACE_INSN_IDX = 1,
 
+  /* Disassemble code addresses.  Like insn tracing, but relies on the opcode
+     framework for displaying code.  Can be slower, more accurate as to what
+     the binary code actually is, but not how the sim is decoding it.  */
+  TRACE_DISASM_IDX,
+
   /* Trace insn decoding.
      ??? This is more of a simulator debugging operation and might best be
      moved to --debug-decode.  */
@@ -71,6 +79,10 @@ enum {
   /* Trace syscalls.  */
   TRACE_SYSCALL_IDX,
 
+  /* Trace cpu register accesses.  Registers that are part of hardware devices
+     should use the HW_TRACE macros instead.  */
+  TRACE_REGISTER_IDX,
+
   /* Add information useful for debugging the simulator to trace output.  */
   TRACE_DEBUG_IDX,
 
@@ -93,6 +105,7 @@ enum {
    The case choice here is on purpose.  The lowercase parts are args to
    --with-trace.  */
 #define TRACE_insn     (1 << TRACE_INSN_IDX)
+#define TRACE_disasm   (1 << TRACE_DISASM_IDX)
 #define TRACE_decode   (1 << TRACE_DECODE_IDX)
 #define TRACE_extract  (1 << TRACE_EXTRACT_IDX)
 #define TRACE_linenum  (1 << TRACE_LINENUM_IDX)
@@ -105,6 +118,7 @@ enum {
 #define TRACE_vpu      (1 << TRACE_VPU_IDX)
 #define TRACE_branch   (1 << TRACE_BRANCH_IDX)
 #define TRACE_syscall  (1 << TRACE_SYSCALL_IDX)
+#define TRACE_register (1 << TRACE_REGISTER_IDX)
 #define TRACE_debug    (1 << TRACE_DEBUG_IDX)
 
 /* Return non-zero if tracing of idx is enabled (compiled in).  */
@@ -113,6 +127,7 @@ enum {
 /* Preprocessor macros to simplify tests of WITH_TRACE.  */
 #define WITH_TRACE_ANY_P       (WITH_TRACE)
 #define WITH_TRACE_INSN_P      WITH_TRACE_P (TRACE_INSN_IDX)
+#define WITH_TRACE_DISASM_P    WITH_TRACE_P (TRACE_DISASM_IDX)
 #define WITH_TRACE_DECODE_P    WITH_TRACE_P (TRACE_DECODE_IDX)
 #define WITH_TRACE_EXTRACT_P   WITH_TRACE_P (TRACE_EXTRACT_IDX)
 #define WITH_TRACE_LINENUM_P   WITH_TRACE_P (TRACE_LINENUM_IDX)
@@ -125,6 +140,7 @@ enum {
 #define WITH_TRACE_VPU_P       WITH_TRACE_P (TRACE_VPU_IDX)
 #define WITH_TRACE_BRANCH_P    WITH_TRACE_P (TRACE_BRANCH_IDX)
 #define WITH_TRACE_SYSCALL_P   WITH_TRACE_P (TRACE_SYSCALL_IDX)
+#define WITH_TRACE_REGISTER_P  WITH_TRACE_P (TRACE_REGISTER_IDX)
 #define WITH_TRACE_DEBUG_P     WITH_TRACE_P (TRACE_DEBUG_IDX)
 
 /* Tracing install handler.  */
@@ -184,6 +200,19 @@ typedef struct _trace_data {
      ??? Not all cpu's support this.  */
   ADDR_RANGE range;
 #define TRACE_RANGE(t) (& (t)->range)
+
+  /* The bfd used to disassemble code.  Should compare against STATE_PROG_BFD
+     before using the disassembler helper.
+     Meant for use by the internal trace module only.  */
+  struct bfd *dis_bfd;
+
+  /* The function used to actually disassemble code.
+     Meant for use by the internal trace module only.  */
+  disassembler_ftype disassembler;
+
+  /* State used with the disassemble function.
+     Meant for use by the internal trace module only.  */
+  disassemble_info dis_info;
 } TRACE_DATA;
 \f
 /* System tracing support.  */
@@ -198,6 +227,7 @@ typedef struct _trace_data {
 /* Non-zero if --trace-<xxxx> was specified for SD.  */
 #define STRACE_ANY_P(sd)       (WITH_TRACE_ANY_P && (STATE_TRACE_DATA (sd)->trace_any_p))
 #define STRACE_INSN_P(sd)      STRACE_P (sd, TRACE_INSN_IDX)
+#define STRACE_DISASM_P(sd)    STRACE_P (sd, TRACE_DISASM_IDX)
 #define STRACE_DECODE_P(sd)    STRACE_P (sd, TRACE_DECODE_IDX)
 #define STRACE_EXTRACT_P(sd)   STRACE_P (sd, TRACE_EXTRACT_IDX)
 #define STRACE_LINENUM_P(sd)   STRACE_P (sd, TRACE_LINENUM_IDX)
@@ -210,6 +240,7 @@ typedef struct _trace_data {
 #define STRACE_VPU_P(sd)       STRACE_P (sd, TRACE_VPU_IDX)
 #define STRACE_BRANCH_P(sd)    STRACE_P (sd, TRACE_BRANCH_IDX)
 #define STRACE_SYSCALL_P(sd)   STRACE_P (sd, TRACE_SYSCALL_IDX)
+#define STRACE_REGISTER_P(sd)  STRACE_P (sd, TRACE_REGISTER_IDX)
 #define STRACE_DEBUG_P(sd)     STRACE_P (sd, TRACE_DEBUG_IDX)
 
 /* Helper functions for printing messages.  */
@@ -219,6 +250,7 @@ typedef struct _trace_data {
       trace_generic (sd, NULL, idx, fmt, ## args); \
   } while (0)
 #define STRACE_INSN(sd, fmt, args...)          STRACE (sd, TRACE_INSN_IDX, fmt, ## args)
+#define STRACE_DISASM(sd, fmt, args...)                STRACE (sd, TRACE_DISASM_IDX, fmt, ## args)
 #define STRACE_DECODE(sd, fmt, args...)                STRACE (sd, TRACE_DECODE_IDX, fmt, ## args)
 #define STRACE_EXTRACT(sd, fmt, args...)       STRACE (sd, TRACE_EXTRACT_IDX, fmt, ## args)
 #define STRACE_LINENUM(sd, fmt, args...)       STRACE (sd, TRACE_LINENUM_IDX, fmt, ## args)
@@ -231,6 +263,7 @@ typedef struct _trace_data {
 #define STRACE_VPU(sd, fmt, args...)           STRACE (sd, TRACE_VPU_IDX, fmt, ## args)
 #define STRACE_BRANCH(sd, fmt, args...)                STRACE (sd, TRACE_BRANCH_IDX, fmt, ## args)
 #define STRACE_SYSCALL(sd, fmt, args...)       STRACE (sd, TRACE_SYSCALL_IDX, fmt, ## args)
+#define STRACE_REGISTER(sd, fmt, args...)      STRACE (sd, TRACE_REGISTER_IDX, fmt, ## args)
 #define STRACE_DEBUG(sd, fmt, args...)         STRACE (sd, TRACE_DEBUG_IDX, fmt, ## args)
 \f
 /* CPU tracing support.  */
@@ -244,6 +277,7 @@ typedef struct _trace_data {
 /* Non-zero if --trace-<xxxx> was specified for CPU.  */
 #define TRACE_ANY_P(cpu)       (WITH_TRACE_ANY_P && (CPU_TRACE_DATA (cpu)->trace_any_p))
 #define TRACE_INSN_P(cpu)      TRACE_P (cpu, TRACE_INSN_IDX)
+#define TRACE_DISASM_P(cpu)    TRACE_P (cpu, TRACE_DISASM_IDX)
 #define TRACE_DECODE_P(cpu)    TRACE_P (cpu, TRACE_DECODE_IDX)
 #define TRACE_EXTRACT_P(cpu)   TRACE_P (cpu, TRACE_EXTRACT_IDX)
 #define TRACE_LINENUM_P(cpu)   TRACE_P (cpu, TRACE_LINENUM_IDX)
@@ -256,7 +290,9 @@ typedef struct _trace_data {
 #define TRACE_VPU_P(cpu)       TRACE_P (cpu, TRACE_VPU_IDX)
 #define TRACE_BRANCH_P(cpu)    TRACE_P (cpu, TRACE_BRANCH_IDX)
 #define TRACE_SYSCALL_P(cpu)   TRACE_P (cpu, TRACE_SYSCALL_IDX)
+#define TRACE_REGISTER_P(cpu)  TRACE_P (cpu, TRACE_REGISTER_IDX)
 #define TRACE_DEBUG_P(cpu)     TRACE_P (cpu, TRACE_DEBUG_IDX)
+#define TRACE_DISASM_P(cpu)    TRACE_P (cpu, TRACE_DISASM_IDX)
 
 /* Helper functions for printing messages.  */
 #define TRACE(cpu, idx, fmt, args...) \
@@ -277,7 +313,13 @@ typedef struct _trace_data {
 #define TRACE_VPU(cpu, fmt, args...)           TRACE (cpu, TRACE_VPU_IDX, fmt, ## args)
 #define TRACE_BRANCH(cpu, fmt, args...)                TRACE (cpu, TRACE_BRANCH_IDX, fmt, ## args)
 #define TRACE_SYSCALL(cpu, fmt, args...)       TRACE (cpu, TRACE_SYSCALL_IDX, fmt, ## args)
+#define TRACE_REGISTER(cpu, fmt, args...)      TRACE (cpu, TRACE_REGISTER_IDX, fmt, ## args)
 #define TRACE_DEBUG(cpu, fmt, args...)         TRACE (cpu, TRACE_DEBUG_IDX, fmt, ## args)
+#define TRACE_DISASM(cpu, addr) \
+  do { \
+    if (TRACE_DISASM_P (cpu)) \
+      trace_disasm (CPU_STATE (cpu), cpu, addr); \
+  } while (0)
 \f
 /* Tracing functions.  */
 
@@ -303,6 +345,10 @@ extern void trace_generic (SIM_DESC sd,
                           ...)
      __attribute__((format (printf, 4, 5)));
 
+/* Disassemble the specified address.  */
+
+extern void trace_disasm (SIM_DESC sd, sim_cpu *cpu, address_word addr);
+
 typedef enum {
   trace_fmt_invalid,
   trace_fmt_word,
@@ -608,19 +654,6 @@ do { \
 } while (0)
 
 \f
-/* The function trace_one_insn has been replaced by the function pair
-   trace_prefix() + trace_generic() */
-extern void trace_one_insn (SIM_DESC sd,
-                           sim_cpu * cpu,
-                           address_word cia,
-                           int print_linenum_p,
-                           const char *file_name,
-                           int line_nr,
-                           const char *unit,
-                           const char *fmt,
-                           ...)
-     __attribute__((format (printf, 8, 9)));
-
 extern void trace_printf (SIM_DESC, sim_cpu *, const char *, ...)
      __attribute__((format (printf, 3, 4)));
 
@@ -638,10 +671,11 @@ extern void trace_vprintf (SIM_DESC, sim_cpu *, const char *, va_list);
 /* Non-zero if "--debug-insn" specified.  */
 #define DEBUG_INSN_P(cpu) DEBUG_P (cpu, DEBUG_INSN_IDX)
 
-/* GDB also has a debug_printf, so we shadow ours.  */
-#define debug_printf sim_debug_printf
+/* Symbol related helpers.  */
+int trace_load_symbols (SIM_DESC);
+bfd_vma trace_sym_value (SIM_DESC, const char *name);
 
-extern void debug_printf (sim_cpu *, const char *, ...)
+extern void sim_debug_printf (sim_cpu *, const char *, ...)
      __attribute__((format (printf, 2, 3)));
 
 #endif /* SIM_TRACE_H */
This page took 0.026868 seconds and 4 git commands to generate.