import gdb-1999-09-13 snapshot
authorJason Molenda <jmolenda@apple.com>
Mon, 13 Sep 1999 21:40:00 +0000 (21:40 +0000)
committerJason Molenda <jmolenda@apple.com>
Mon, 13 Sep 1999 21:40:00 +0000 (21:40 +0000)
24 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/config/pa/tm-hppa64.h
gdb/d10v-tdep.c
gdb/event-loop.c
gdb/event-loop.h
gdb/gdbarch.sh
gdb/i387-tdep.c
gdb/m32r-tdep.c
gdb/remote.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/long_long.exp
sim/d10v/ChangeLog
sim/d10v/interp.c
sim/d10v/simops.c
sim/mips/ChangeLog
sim/mips/mips.igen
sim/testsuite/ChangeLog
sim/testsuite/d10v-elf/ChangeLog
sim/testsuite/d10v-elf/Makefile.in
sim/testsuite/d10v-elf/t-ld-st.s [new file with mode: 0644]
sim/testsuite/d10v-elf/t-sac.s [new file with mode: 0644]
sim/testsuite/d10v-elf/t-sachi.s [new file with mode: 0644]
sim/testsuite/d10v-elf/t-slae.s [new file with mode: 0644]

index e3b0c40297c20d7f536f1e50a938118ca4d18a78..4e5e353cd3f332873d1c6e307b13d2c9f06bd3f6 100644 (file)
@@ -1,3 +1,45 @@
+Mon Sep 13 18:54:05 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * gdbarch.sh: Describe each of the fields.
+       
+Mon Sep 13 17:51:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       From 1999-09-12 Jim Blandy <jimb@cris.red-bean.com>:
+       * gdbarch.sh (generating setters): Use sed to generate the proper
+       indentation, not tr; tr's behavior is notoriously unportable.
+
+1999-09-10  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+       * i387-tdep.c (print_387_control_bits): Don't print newline; the
+       callers take care of that.  (Thanks to H.J. Lu.)
+
+1999-09-09  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * d10v-tdep.c (DMEM_START): Set to 0x2000000.
+       (itrace, iuntrace, info itrace, itdisassemble, itracedisplay,
+       itracesource): Add 'i' prefix to commands, so as not to conflict
+       with generic trace commands.
+
+1999-09-09  Fernando Nasser  <fnasser@totem.to.cygnus.com>
+
+       * remote.c (_initialize_remote): Fix the specification of the
+       "remote" prefix to set and show commands.
+
+1999-09-09  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+       * event-loop.c (create_file_event): New function. Creates a gdb
+       event for a given fd.
+       (gdb_wait_for_event): Use create_file_event().  
+       * event-loop.h: export create_file_event().
+
+       * event-loop.c (delete_file_handler): Move the clearing of the
+       mask to later on in the function, because we need it in order to
+       deactivate the correct fd when using select().
+
+       * m32r-tdep.c (decode_prologue): Fix typo. Instructions starting
+       with 0xf are branch instructions.
+       (m32r_scan_prologue): Initialize framesize to 0.
+
 1999-09-07  J.T. Conklin  <jtc@redback.com>
 
        * i386-stub.c (exceptionHook, oldExceptionHook): Removed.
@@ -61,7 +103,7 @@ Fri Sep  3 22:29:39 1999  Kevin Buettner  <kevinb@cygnus.com>
 Fri Sep  3 00:47:44 1999  Kevin Buettner  <kevinb@cygnus.com>
 
        [Merged linux/x86 floating point code from Bill Metzenthen,
-       Jim Blandy, Anthony Green, H. J. Liu, and possibly others.  The
+       Jim Blandy, Anthony Green, H. J. Lu, and possibly others.  The
        following remarks are Jim Blandy's.]
 
        * findvar.c (extract_floating): Call TARGET_EXTRACT_FLOATING, if
@@ -368,7 +410,7 @@ Wed Sep  1 09:22:50 1999  Andrew Cagney  <cagney@b1.cygnus.com>
 1999-08-13  Jim Kingdon  <kingdon@redhat.com>
 
        Threads code from gdb 4.18-codefusion-990706
-       [Thanks to Eric Paire, H. J. Liu, Jim Blandy and others]
+       [Thanks to Eric Paire, H. J. Lu, Jim Blandy and others]
        * infrun.c (signal_stop_update, signal_print_update,
        signal_pass_update): new functions.
        * inferior.h: new prototypes for above functions.
index 22edeb9f959ef91cab36a6473298d6466f4b10bc..b1cd01e364f71f18529ed7d882016cabd7fa60f2 100644 (file)
@@ -229,7 +229,7 @@ CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \
 ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
 ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
 
-VERSION = 19990908
+VERSION = 19990913
 DIST=gdb
 
 LINT=/usr/5bin/lint
@@ -1197,7 +1197,7 @@ i386v-nat.o: i386v-nat.c $(floatformat_h) $(defs_h) $(gdbcore_h) \
        $(inferior_h) language.h target.h
 
 i386-linux-nat.o: i386-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
-       $(symtab_h) $(frame_h) $(symfile_h) $(objfiles_h) 
+       $(symtab_h) $(frame_h) symfile.h objfiles.h
 
 i386v4-nat.o: i386v4-nat.c $(defs_h)
 
index 3b1ab448147eefa3605287f4f3617723e3abac87..99049fed27a13411c73792ecc1b2a38e2f0a04b3 100644 (file)
@@ -28,11 +28,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
    gotten working yet.  */
 #define GDB_TARGET_IS_HPPA_20W
 
-/* The low two bits of the IA are the privilege level of the instruction.  */
 #include "pa/tm-hppah.h"
 
 #define HPUX_1100 1
 
+/* The low two bits of the IA are the privilege level of the instruction.  */
 #define ADDR_BITS_REMOVE(addr) ((CORE_ADDR)addr & (CORE_ADDR)~3)
 
 /* Say how long (ordinary) registers are.  This is used in
index e545f21a4eda883facb33f7a210ff5507462b6ff..3c93ea97ebda7fd3e87d4096b9234075f2883705 100644 (file)
@@ -45,7 +45,7 @@ struct frame_extra_info
 /* these are the addresses the D10V-EVA board maps data */
 /* and instruction memory to. */
 
-#define DMEM_START     0x0000000
+#define DMEM_START     0x2000000
 #define IMEM_START     0x1000000
 #define STACK_START    0x0007ffe
 
@@ -1454,25 +1454,25 @@ _initialize_d10v_tdep ()
 
   add_com ("regs", class_vars, show_regs, "Print all registers");
 
-  add_com ("trace", class_support, trace_command,
+  add_com ("itrace", class_support, trace_command,
           "Enable tracing of instruction execution.");
 
-  add_com ("untrace", class_support, untrace_command,
+  add_com ("iuntrace", class_support, untrace_command,
           "Disable tracing of instruction execution.");
 
-  add_com ("tdisassemble", class_vars, tdisassemble_command,
+  add_com ("itdisassemble", class_vars, tdisassemble_command,
           "Disassemble the trace buffer.\n\
 Two optional arguments specify a range of trace buffer entries\n\
 as reported by info trace (NOT addresses!).");
 
-  add_info ("trace", trace_info,
+  add_info ("itrace", trace_info,
            "Display info about the trace data buffer.");
 
-  add_show_from_set (add_set_cmd ("tracedisplay", no_class,
+  add_show_from_set (add_set_cmd ("itracedisplay", no_class,
                                  var_integer, (char *) &trace_display,
                             "Set automatic display of trace.\n", &setlist),
                     &showlist);
-  add_show_from_set (add_set_cmd ("tracesource", no_class,
+  add_show_from_set (add_set_cmd ("itracesource", no_class,
                           var_integer, (char *) &default_trace_show_source,
                      "Set display of source code with trace.\n", &setlist),
                     &showlist);
index 78ecb63e7474e768166ebb408f412a59bd6506f9..261c8383163889445bc5366eeeb3809a334bb721 100644 (file)
@@ -122,6 +122,7 @@ static int async_handler_ready = 0;
 
 static void create_file_handler PARAMS ((int, int, handler_func *, gdb_client_data));
 static void invoke_async_signal_handler PARAMS ((void));
+static void handle_file_event PARAMS ((int));
 static int gdb_wait_for_event PARAMS ((void));
 static int gdb_do_one_event PARAMS ((void));
 static int check_async_ready PARAMS ((void));
@@ -164,6 +165,22 @@ async_queue_event (event_ptr, position)
     }
 }
 
+/* Create a file event, to be enqueued in the event queue for
+   processing. The procedure associated to this event is always
+   handle_file_event, which will in turn invoke the one that was
+   associated to FD when it was registered with the event loop. */
+gdb_event *
+create_file_event (fd)
+     int fd;
+{
+  gdb_event *file_event_ptr;
+
+  file_event_ptr = (gdb_event *) xmalloc (sizeof (gdb_event));
+  file_event_ptr->proc = handle_file_event;
+  file_event_ptr->fd = fd;
+  return (file_event_ptr);
+}
+
 /* Process one event.
    The event can be the next one to be serviced in the event queue,
    or an asynchronous event handler can be invoked in response to
@@ -439,11 +456,6 @@ delete_file_handler (fd)
   if (file_ptr == NULL)
     return;
 
-  /* Deactivate the file descriptor, by clearing its mask, 
-     so that it will not fire again. */
-
-  file_ptr->mask = 0;
-
 #ifdef HAVE_POLL
   /* Create a new poll_fds array by copying every fd's information but the
      one we want to get rid of. */
@@ -500,6 +512,11 @@ delete_file_handler (fd)
     }
 #endif /* HAVE_POLL */
 
+  /* Deactivate the file descriptor, by clearing its mask, 
+     so that it will not fire again. */
+
+  file_ptr->mask = 0;
+
   /* Get rid of the file handler in the file handler list. */
   if (file_ptr == gdb_notifier.first_file_handler)
     gdb_notifier.first_file_handler = file_ptr->next_file;
@@ -634,10 +651,7 @@ gdb_wait_for_event ()
             this fd. */
          if (file_ptr->ready_mask == 0)
            {
-             file_event_ptr =
-               (gdb_event *) xmalloc (sizeof (gdb_event));
-             file_event_ptr->proc = handle_file_event;
-             file_event_ptr->fd = file_ptr->fd;
+             file_event_ptr = create_file_event (file_ptr->fd);
              async_queue_event (file_event_ptr, TAIL);
            }
        }
@@ -671,10 +685,7 @@ gdb_wait_for_event ()
 
       if (file_ptr->ready_mask == 0)
        {
-         file_event_ptr =
-           (gdb_event *) xmalloc (sizeof (gdb_event));
-         file_event_ptr->proc = handle_file_event;
-         file_event_ptr->fd = file_ptr->fd;
+         file_event_ptr = create_file_event (file_ptr->fd);
          async_queue_event (file_event_ptr, TAIL);
        }
       file_ptr->ready_mask = mask;
index 9e046e0e7e49e07cc7245e4024317cc68826adf2..baebccd3b85941a045d2f14cecb4ac933c7cf660 100644 (file)
@@ -231,6 +231,7 @@ extern void mark_async_signal_handler PARAMS ((async_signal_handler *));
 extern async_signal_handler * 
   create_async_signal_handler PARAMS ((handler_func *, gdb_client_data));
 extern void delete_async_signal_handler PARAMS ((async_signal_handler ** async_handler_ptr));
+extern gdb_event *create_file_event PARAMS ((int));
 
 /* Exported functions from event-top.c. 
    FIXME: these should really go into top.h. */
@@ -245,8 +246,10 @@ extern void handle_sigint PARAMS ((int));
 extern void pop_prompt PARAMS ((void));
 extern void push_prompt PARAMS ((char *, char *, char *));
 extern void gdb_readline2 PARAMS ((void));
+extern void mark_async_signal_handler_wrapper (void *);
+extern void async_request_quit (gdb_client_data);
 
-/* Exported variables and functions from event-top.c.
+/* Exported variables from event-top.c.
    FIXME: these should really go into top.h. */
 
 extern int async_command_editing_p;
@@ -257,5 +260,3 @@ extern struct prompts the_prompts;
 extern void (*call_readline) PARAMS ((void));
 extern void (*input_handler) PARAMS ((char *));
 extern int input_fd;
-void mark_async_signal_handler_wrapper (void *);
-void async_request_quit (gdb_client_data);
index 5ad6b65fa6feeda0a6cefbc644e32f0d38607c50..cf9650f8ee4bcc8759c61ccc40b5da2556f9626a 100755 (executable)
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-IFS=:
-
 read="class level macro returntype function formal actual attrib default init init_p fmt print print_p description"
 
+# dump out/verify the doco
+for field in ${read}
+do
+  case ${field} in
+
+    class ) : ;;
+      # # -> line disable
+      # f -> function
+      #   hiding a function
+      # v -> variable
+      #   hiding a variable
+      # i -> set from info
+      #   hiding something from the ``struct info'' object
+
+    level ) : ;;
+
+      # See GDB_MULTI_ARCH description.  Having GDB_MULTI_ARCH >=
+      # LEVEL is a predicate on checking that a given method is
+      # initialized (using INIT_P).
+
+    macro ) : ;;
+
+      # The name of the MACRO that this method is to be accessed by.
+
+    returntype ) : ;;
+
+      # For functions, the return type; for variables, the data type
+
+    function ) : ;;
+
+      # For functions, the member function name; for variables, the
+      # variable name.  Member function names are always prefixed with
+      # ``gdbarch_'' for name-space purity.
+
+    formal ) : ;;
+
+      # The formal argument list.  It is assumed that the formal
+      # argument list includes the actual name of each list element.
+      # A function with no arguments shall have ``void'' as the formal
+      # argument list.
+
+    actual ) : ;;
+
+      # The list of actual arguments.  The arguments specified shall
+      # match the FORMAL list given above.  Functions with out
+      # arguments leave this blank.
+
+    attrib ) : ;;
+
+      # Any GCC attributes that should be attached to the function
+      # declaration.  At present this field is unused.
+
+    default ) : ;;
+
+      # To help with the GDB startup a default static gdbarch object
+      # is created.  DEFAULT is the value to insert into that
+      # array. It defaults to ZERO.
+
+    init ) : ;;
+
+      # Any initial value to assign to the member after it is been
+      # MALLOCed.  Defaults to zero.  
+
+    init_p ) : ;;
+
+      # A predicate equation that tests to see if the code creating
+      # the new architecture has correctly updated this
+      # MEMBER. Default is to check that the value is no longer equal
+      # to INIT.
+
+    fmt ) : ;;
+
+      # printf style format string that can be used to print out the
+      # MEMBER.  The default is to assume "%ld" is safe.  Sometimes
+      # "%s" is useful.  For functions, this is ignored and the
+      # function address is printed.
+
+    print ) : ;;
+
+      # An optional equation that converts the MEMBER into a value
+      # suitable for that FMT.  By default it is assumed that the
+      # member's MACRO cast to long is safe.
+
+    print_p ) : ;;
+
+      # An optional indicator for any predicte to wrap around the
+      # print member code.
+      #   # -> Wrap print up in ``#ifdef MACRO''
+      #   exp -> Wrap print up in ``if (${print_p}) ...
+
+    description ) : ;;
+
+      # Currently unused.
+
+    *) exit 1;;
+  esac
+done
+
+IFS=:
+
 function_list ()
 {
-  # category:
-  #        # -> disable
-  #        f -> function
-  #        v -> variable
-  #        i -> set from info
-  # macro-name
-  # return-type
-  # name
-  # formal argument list
-  # actual argument list
-  # attrib
-  # default exp
-  # init exp
-  # init_p exp
-  # print
-  # description
+  # See below (DOCO) for description of each field
   cat <<EOF |
 i:2:TARGET_ARCHITECTURE:const struct bfd_arch_info *:bfd_arch_info::::&bfd_default_arch_struct:::%s:TARGET_ARCHITECTURE->printable_name:TARGET_ARCHITECTURE != NULL
 #
@@ -983,7 +1066,7 @@ do
        echo ""
        echo "void"
        echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
-        echo "            `echo ${function} | tr '[0-9a-z_]' ' '`  gdbarch_${function}_ftype ${function})"
+        echo "            `echo ${function} | sed -e 's/./ /g'`  gdbarch_${function}_ftype ${function})"
        echo "{"
        echo "  gdbarch->${function} = ${function};"
        echo "}"
@@ -1010,7 +1093,7 @@ do
        echo ""
        echo "void"
        echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
-        echo "            `echo ${function} | tr '[0-9a-z_]' ' '`  ${returntype} ${function})"
+        echo "            `echo ${function} | sed -e 's/./ /g'`  ${returntype} ${function})"
        echo "{"
        echo "  gdbarch->${function} = ${function};"
        echo "}"
index 0621bdf4a48d1e8718a4046e9cb81fe0e778745f..a8fdba7ebed047072058946883a411cd02857906 100644 (file)
@@ -102,7 +102,7 @@ print_387_control_bits (control)
        puts_unfiltered (" LOS");
       puts_unfiltered (";");
     }
-  printf_unfiltered ("\n");
+
   if (control & 0xe080)
     warning ("\nreserved bits on: %s",
             local_hex_string (control & 0xe080));
index a4a791bb8473c70be38146e11a61007cb40f6522..cb5d9c32e860778e541ae6c0788484e63af12c5c 100644 (file)
@@ -250,7 +250,7 @@ decode_prologue (start_pc, scan_limit,
       /* End of prolog if any of these are branch instructions */
       if ((op1 == 0x7000)
          || (op1 == 0xb000)
-         || (op1 == 0x7000))
+         || (op1 == 0xf000))
        {
          after_prologue = current_pc;
          insn_debug (("Done: branch\n"));
@@ -350,7 +350,7 @@ m32r_scan_prologue (fi, fsr)
 {
   struct symtab_and_line sal;
   CORE_ADDR prologue_start, prologue_end, current_pc;
-  unsigned long framesize;
+  unsigned long framesize = 0;
 
   /* this code essentially duplicates skip_prologue, 
      but we need the start address below.  */
index 1275e51e322f93887ed40452ee88d8d7b232addf..56ce7795a66d6459f6e1a4e5a633aff8d270e3cb 100644 (file)
@@ -5149,13 +5149,13 @@ _initialize_remote ()
 Remote protocol specific variables\n\
 Configure various remote-protocol specific variables such as\n\
 the packets being used",
-                 &remote_set_cmdlist, "remote ",
+                 &remote_set_cmdlist, "set remote ",
                  0/*allow-unknown*/, &setlist);
   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, "\
 Remote protocol specific variables\n\
 Configure various remote-protocol specific variables such as\n\
 the packets being used",
-                 &remote_show_cmdlist, "remote ",
+                 &remote_show_cmdlist, "show remote ",
                  0/*allow-unknown*/, &showlist);
 
   add_cmd ("compare-sections", class_obscure, compare_sections_command,
index 15dd281334a43fc018add1fa5b0805146756b0f9..7198d6e9f01ecdc0dda726b8818db45adb1e2cb5 100644 (file)
@@ -1,3 +1,8 @@
+1999-09-09  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * long_long.exp: Add variations of test cases that work for
+       targets with 16-bit ints and 32-bit doubles.
+
 1999-09-08  Stan Shebs  <shebs@andros.cygnus.com>
 
        * break.c (main): Compare a possibly-uninitialized argc with an
index b779434d2eeae1dacfe88bf4ea24557cfd646d11..651daffc986e903a79626eae4ecfbf41bb9a616e 100644 (file)
@@ -69,6 +69,28 @@ gdb_expect {
     default    { fail "(timeout) getting target endian" }
 }
 
+# Detect targets with 2-byte integers.  Yes, it's not general to assume
+# that all others have 4-byte ints, but don't worry about it until one
+# actually exists.
+
+set sizeof_int 4
+send_gdb "print sizeof(int)\n"
+gdb_expect {
+    -re ".* = 2.*$gdb_prompt $" { set sizeof_int 2 }
+    -re ".*$gdb_prompt $" { }
+    default { }
+}
+
+# Detect targets with 4-byte doubles.
+
+set sizeof_double 8
+send_gdb "print sizeof(double)\n"
+gdb_expect {
+    -re ".* = 4.*$gdb_prompt $" { set sizeof_double 4 }
+    -re ".*$gdb_prompt $" { }
+    default { }
+}
+
 gdb_test "n 4"   ".*38.*" "get to known place"
 
 # Check the hack for long long prints.
@@ -96,17 +118,39 @@ gdb_test "p/o oct" ".*.*"
 gdb_test "p/t oct" ".*1010011100101110111001010011100101110111000001010011100101110111.*"
 gdb_test "p/a oct" ".*0x.*77053977.*"
 gdb_test "p/c oct" ".*'w'.*"
-gdb_test "p/f oct" ".*-5.9822653797615723e-120.*"
+
+if { $sizeof_double == 8 } {
+
+    gdb_test "p/f oct" ".*-5.9822653797615723e-120.*"
+
+} else {
+
+    gdb_test "p/f oct" ".*-2.42716126e-15.*"
+}
 
 if { $target_bigendian_p } {
 
-    gdb_test "p/d *(int *)&oct" ".*-1490098887.*"
-    gdb_test "p/u *(int *)&oct" ".*2804868409.*"
-    gdb_test "p/o *(int *)&oct" ".*024713562471.*"
-    gdb_test "p/t *(int *)&oct" ".*10100111001011101110010100111001.*"
-    gdb_test "p/a *(int *)&oct" ".*0xf*a72ee539.*"
-    gdb_test "p/c *(int *)&oct" ".*57 '9'.*"
-    gdb_test "p/f *(int *)&oct" ".*-2.42716126e-15.*"
+    if { $sizeof_int == 4 } {
+
+       gdb_test "p/d *(int *)&oct" ".*-1490098887.*"
+       gdb_test "p/u *(int *)&oct" ".*2804868409.*"
+       gdb_test "p/o *(int *)&oct" ".*024713562471.*"
+       gdb_test "p/t *(int *)&oct" ".*10100111001011101110010100111001.*"
+       gdb_test "p/a *(int *)&oct" ".*0xf*a72ee539.*"
+       gdb_test "p/c *(int *)&oct" ".*57 '9'.*"
+       gdb_test "p/f *(int *)&oct" ".*-2.42716126e-15.*"
+
+    } else {
+
+       gdb_test "p/d *(int *)&oct" ".*-22738.*"
+       gdb_test "p/u *(int *)&oct" ".*42798.*"
+       gdb_test "p/o *(int *)&oct" ".*0123456.*"
+       gdb_test "p/t *(int *)&oct" ".*1010011100101110.*"
+       gdb_test "p/a *(int *)&oct" ".*0xffffa72e.*"
+       gdb_test "p/c *(int *)&oct" ".*46 '.'.*"
+       gdb_test "p/f *(int *)&oct" ".*-22738.*"
+
+    }
 
     gdb_test "p/d *(short *)&oct" ".*-22738.*"
     gdb_test "p/u *(short *)&oct" ".*42798.*"
@@ -126,7 +170,11 @@ if { $target_bigendian_p } {
     gdb_test "x/c &oct" ".*-89 .*"
     # FIXME GDB's output is correct, but this longer match fails.
     # gdb_test "x/c &oct" ".*-89 '\\\\247'.*"
-    gdb_test "x/f &oct" ".*-5.9822653797615723e-120.*"
+    if { $sizeof_double == 8 } {
+       gdb_test "x/f &oct" ".*-5.9822653797615723e-120.*"
+    } else {
+       gdb_test "x/f &oct" ".*-2.42716126e-15.*"
+    }
 
     # FIXME Fill in the results for all the following tests.  (But be careful
     # about looking at locations with unspecified contents!)
index 410aedff12d5c3f305393f7eb2a49eeebf2da0ad..0695db23b277b1374c2613382ff0e2865f6b7a3f 100644 (file)
@@ -1,3 +1,25 @@
+Wed Sep  8 19:34:55 MDT 1999   Diego Novillo <dnovillo@cygnus.com>
+
+       * simops.c (op_types): Added new memory indirect type OP_MEMREF3.
+       (trace_input_func): Added support for OP_MEMREF3.
+       (OP_32010000): New instruction ld.
+       (OP_33010000): New instruction ld2w.
+       (OP_5209): New instruction sac.
+       (OP_4209): New instruction sachi.
+       (OP_3220): New instruction slae.
+       (OP_36010000): New instruction st.
+       (OP_37010000): New instruction st2w.
+
+1999-09-09  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * interp.c (old_segment_mapping): New global.
+       (xfer_mem): Change the default segment mapping to be the way
+       that Mitsubishi prefers, but use the previous mapping if
+       old_segment_mapping is true.
+       (sim_open): Add an option -oldseg to get the old mapping.
+       (sim_create_inferior): Init mapping registers based on the
+       value of old_segment_mapping.
+
 1999-09-07  Nick Clifton  <nickc@cygnus.com>
 
        * simops.c (OP_6601): Do not write back decremented address if
index 4602ed2b58c530a87145abf839b0cc6e55f4128b..bd1639147fed565c5d00eca93c623298c6c85bca 100644 (file)
@@ -16,6 +16,11 @@ enum _leftright { LEFT_FIRST, RIGHT_FIRST };
 static char *myname;
 static SIM_OPEN_KIND sim_kind;
 int d10v_debug;
+
+/* Set this to true to get the previous segment layout. */
+
+int old_segment_mapping;
+
 host_callback *d10v_callback;
 unsigned long ins_type_counters[ (int)INS_MAX ];
 
@@ -375,17 +380,53 @@ xfer_mem (SIM_ADDR addr,
     }
 #endif
 
-  /* to access data, we use the following mapping 
-      0x00xxxxxx: Logical data address segment        (DMAP translated memory)
-      0x01xxxxxx: Logical instruction address segment (IMAP translated memory)
-      0x10xxxxxx: Physical data memory segment        (On-chip data memory)
-      0x11xxxxxx: Physical instruction memory segment (On-chip insn memory)
-      0x12xxxxxx: Phisical unified memory segment     (Unified memory)
+  /* To access data, we use the following mappings:
+
+     0x00xxxxxx: Physical unified memory segment     (Unified memory)
+     0x01xxxxxx: Physical instruction memory segment (On-chip insn memory)
+     0x02xxxxxx: Physical data memory segment        (On-chip data memory)
+     0x10xxxxxx: Logical data address segment        (DMAP translated memory)
+     0x11xxxxxx: Logical instruction address segment (IMAP translated memory)
+
+     Alternatively, the "old segment mapping" is still available by setting
+     old_segment_mapping to 1.  It looks like this:
+
+     0x00xxxxxx: Logical data address segment        (DMAP translated memory)
+     0x01xxxxxx: Logical instruction address segment (IMAP translated memory)
+     0x10xxxxxx: Physical data memory segment        (On-chip data memory)
+     0x11xxxxxx: Physical instruction memory segment (On-chip insn memory)
+     0x12xxxxxx: Physical unified memory segment     (Unified memory)
+
    */
 
+  /* However, if we've asked to use the previous generation of segment
+     mapping, rearrange the segments as follows. */
+
+  if (old_segment_mapping)
+    {
+      switch (segment)
+       {
+       case 0x00: /* DMAP translated memory */
+         segment = 0x10;
+         break;
+       case 0x01: /* IMAP translated memory */
+         segment = 0x11;
+         break;
+       case 0x10: /* On-chip data memory */
+         segment = 0x02;
+         break;
+       case 0x11: /* On-chip insn memory */
+         segment = 0x01;
+         break;
+       case 0x12: /* Unified memory */
+         segment = 0x00;
+         break;
+       }
+    }
+
   switch (segment)
     {
-    case 0x00: /* DMAP translated memory */
+    case 0x10: /* DMAP translated memory */
       {
        int byte;
        for (byte = 0; byte < size; byte++)
@@ -401,7 +442,7 @@ xfer_mem (SIM_ADDR addr,
        return byte;
       }
 
-    case 0x01: /* IMAP translated memory */
+    case 0x11: /* IMAP translated memory */
       {
        int byte;
        for (byte = 0; byte < size; byte++)
@@ -417,7 +458,7 @@ xfer_mem (SIM_ADDR addr,
        return byte;
       }
 
-    case 0x10: /* On-chip data memory */
+    case 0x02: /* On-chip data memory */
       {
        addr &= ((1 << DMEM_SIZE) - 1);
        if ((addr + size) > (1 << DMEM_SIZE))
@@ -430,7 +471,7 @@ xfer_mem (SIM_ADDR addr,
        break;
       }
 
-    case 0x11: /* On-chip insn memory */
+    case 0x01: /* On-chip insn memory */
       {
        addr &= ((1 << IMEM_SIZE) - 1);
        if ((addr + size) > (1 << IMEM_SIZE))
@@ -443,7 +484,7 @@ xfer_mem (SIM_ADDR addr,
        break;
       }
 
-    case 0x12: /* Unified memory */
+    case 0x00: /* Unified memory */
       {
        int startsegment, startoffset;  /* Segment and offset within segment where xfer starts */
        int endsegment, endoffset;      /* Segment and offset within segment where xfer ends */
@@ -484,12 +525,23 @@ xfer_mem (SIM_ADDR addr,
     default:
       {
        (*d10v_callback->printf_filtered) (d10v_callback, "ERROR: address 0x%lx is not in valid range\n", (long) addr);
-       (*d10v_callback->printf_filtered) (d10v_callback, "0x00xxxxxx:  Logical data address segment            (DMAP translated memory)\n");
-       (*d10v_callback->printf_filtered) (d10v_callback, "0x01xxxxxx:  Logical instruction address segment     (IMAP translated memory)\n");
-       (*d10v_callback->printf_filtered) (d10v_callback, "0x10xxxxxx:  Physical data memory segment            (On-chip data memory)\n");
-       (*d10v_callback->printf_filtered) (d10v_callback, "0x11xxxxxx:  Physical instruction memory segment     (On-chip insn memory)\n");
-       (*d10v_callback->printf_filtered) (d10v_callback, "0x12xxxxxx:  Phisical unified memory segment         (Unified memory)\n");
-       return (0);
+       if (old_segment_mapping)
+         {
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x00xxxxxx:  Logical data address segment            (DMAP translated memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x01xxxxxx:  Logical instruction address segment     (IMAP translated memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x10xxxxxx:  Physical data memory segment            (On-chip data memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x11xxxxxx:  Physical instruction memory segment     (On-chip insn memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x12xxxxxx:  Phisical unified memory segment         (Unified memory)\n");
+         }
+       else
+         {
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x00xxxxxx:  Physical unified memory segment             (Unified memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x01xxxxxx:  Physical instruction memory segment (On-chip insn memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x02xxxxxx:  Physical data memory segment                (On-chip data memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x10xxxxxx:  Logical data address segment                (DMAP translated memory)\n");
+           (*d10v_callback->printf_filtered) (d10v_callback, "0x11xxxxxx:  Logical instruction address segment (IMAP translated memory)\n");
+         }
+       return (0);
       }
     }
 
@@ -544,14 +596,17 @@ sim_open (kind, callback, abfd, argv)
   sim_kind = kind;
   d10v_callback = callback;
   myname = argv[0];
+  old_segment_mapping = 0;
 
   for (p = argv + 1; *p; ++p)
     {
+      if (strcmp (*p, "-oldseg") == 0)
+       old_segment_mapping = 1;
 #ifdef DEBUG
-      if (strcmp (*p, "-t") == 0)
+      else if (strcmp (*p, "-t") == 0)
        d10v_debug = DEBUG;
-      else
 #endif
+      else
        (*d10v_callback->printf_filtered) (d10v_callback, "ERROR: unsupported option(s): %s\n",*p);
     }
   
@@ -969,7 +1024,7 @@ sim_create_inferior (sd, abfd, argv, env)
 
   /* cpu resets imap0 to 0 and imap1 to 0x7f, but D10V-EVA board */
   /* resets imap0 and imap1 to 0x1000. */
-  if (1)
+  if (old_segment_mapping)
     {
       SET_IMAP0 (0x0000);
       SET_IMAP1 (0x007f);
index 54cc6fe411225f2261fdf38d7a106f915094d606..22bdd91e104c62340e36287e1540c514cd463360 100644 (file)
@@ -34,6 +34,7 @@ enum op_types {
   OP_CONSTANT4,
   OP_MEMREF,
   OP_MEMREF2,
+  OP_MEMREF3,
   OP_POSTDEC,
   OP_POSTINC,
   OP_PREDEC,
@@ -307,6 +308,12 @@ trace_input_func (name, in1, in2, in3)
          comma = ",";
          break;
 
+       case OP_MEMREF3:
+         sprintf (p, "%s@%d", comma, OP[i]);
+         p += strlen (p);
+         comma = ",";
+         break;
+
        case OP_POSTINC:
          sprintf (p, "%s@r%d+", comma, OP[i]);
          p += strlen (p);
@@ -380,6 +387,10 @@ trace_input_func (name, in1, in2, in3)
                                                 (uint16) GPR (OP[i]));
              break;
 
+           case OP_MEMREF3:
+             (*d10v_callback->printf_filtered) (d10v_callback, "%*s0x%.4x", SIZE_VALUES-6, "", (uint16) OP[i]);
+             break;
+
            case OP_DREG:
              tmp = (long)((((uint32) GPR (OP[i])) << 16) | ((uint32) GPR (OP[i] + 1)));
              (*d10v_callback->printf_filtered) (d10v_callback, "%*s0x%.8lx", SIZE_VALUES-10, "", tmp);
@@ -1312,6 +1323,18 @@ OP_6000 ()
   trace_output_16 (tmp);
 }
 
+/* ld */
+void
+OP_32010000 ()
+{
+  uint16 tmp;
+  
+  trace_input ("ld", OP_REG_OUTPUT, OP_MEMREF3, OP_VOID);
+  tmp = RW (OP[1]);
+  SET_GPR (OP[0], tmp);
+  trace_output_16 (tmp);
+}
+
 /* ld2w */
 void
 OP_31000000 ()
@@ -1364,6 +1387,18 @@ OP_6200 ()
   trace_output_32 (tmp);
 }
 
+/* ld2w */
+void
+OP_33010000 ()
+{
+  int32 tmp;
+  
+  trace_input ("ld2w", OP_REG_OUTPUT, OP_MEMREF3, OP_VOID);
+  tmp = RLW (OP[1]);
+  SET_GPR32 (OP[0], tmp);
+  trace_output_32 (tmp);
+}
+
 /* ldb */
 void
 OP_38000000 ()
@@ -2207,6 +2242,74 @@ OP_5F40 ()
   trace_output_void ();
 }
 
+
+/* sac */
+void OP_5209 ()
+{
+  int64 tmp;
+
+  trace_input ("sac", OP_REG_OUTPUT, OP_ACCUM, OP_VOID);
+
+  tmp = SEXT40(ACC (OP[1]));
+
+  SET_PSW_F1 (PSW_F0);
+
+  if (tmp > SEXT40(MAX32))
+    {
+      tmp = (MAX32);
+      SET_PSW_F0 (1);
+    }
+  else if (tmp < SEXT40(MIN32))
+    {
+      tmp = 0x80000000;
+      SET_PSW_F0 (1);
+    }
+  else
+    {
+      tmp = (tmp & MASK32);
+      SET_PSW_F0 (0);
+    }
+
+  SET_GPR32 (OP[0], tmp);
+
+  trace_output_40 (tmp);
+}
+
+
+/* sachi */
+void
+OP_4209 ()
+{
+  int64 tmp;
+
+  trace_input ("sachi", OP_REG_OUTPUT, OP_ACCUM, OP_VOID);
+
+  tmp = SEXT40(ACC (OP[1]));
+
+  SET_PSW_F1 (PSW_F0);
+
+  if (tmp > SEXT40(MAX32))
+    {
+      tmp = 0x7fff;
+      SET_PSW_F0 (1);
+    }
+  else if (tmp < SEXT40(MIN32))
+    {
+      tmp = 0x8000;
+      SET_PSW_F0 (1);
+    }
+  else
+    {
+      tmp >>= 16;
+      SET_PSW_F0 (0);
+    }
+
+  SET_GPR (OP[0], tmp);
+
+  trace_output_16 (OP[0]);
+}
+
+
 /* sadd */
 void
 OP_1223 ()
@@ -2252,6 +2355,59 @@ OP_4613 ()
   trace_output_16 (tmp);
 }
 
+/* slae */
+void
+OP_3220 ()
+{
+  int64 tmp;
+  int16 reg;
+
+  trace_input ("slae", OP_ACCUM, OP_REG, OP_VOID);
+
+  reg = SEXT16( GPR (OP[1]));
+
+  if (reg >= 17 || reg <= -17)
+    {
+      (*d10v_callback->printf_filtered) (d10v_callback, "ERROR: shift value %d too large.\n", reg);
+      State.exception = SIGILL;
+      return;
+    }
+
+  tmp = SEXT40 (ACC (OP[0]));
+
+  if (PSW_ST && (tmp < SEXT40 (MIN32) || tmp > SEXT40 (MAX32)))
+    {
+      (*d10v_callback->printf_filtered) (d10v_callback, "ERROR: value to shift 0x%x out of range.\n", tmp);
+      State.exception = SIGILL;
+      return;
+    }
+
+  if (reg >= 0 && reg <= 16)
+    {
+      tmp = SEXT56 ((SEXT56 (tmp)) << (GPR (OP[1])));
+      if (PSW_ST)
+       {
+         if (tmp > SEXT40(MAX32))
+           tmp = (MAX32);
+         else if (tmp < SEXT40(MIN32))
+           tmp = (MIN32);
+         else
+           tmp = (tmp & MASK40);
+       }
+      else
+       tmp = (tmp & MASK40);
+    }
+  else
+    {
+      tmp = (SEXT40 (ACC (OP[0]))) >> (-GPR (OP[1]));
+    }
+
+  SET_ACC(OP[0], tmp);
+
+  trace_output_40(tmp);
+}
+
+
 /* sleep */
 void
 OP_5FC0 ()
@@ -2535,6 +2691,15 @@ OP_6C01 ()
   trace_output_void ();
 }
 
+/* st */
+void
+OP_36010000 ()
+{
+  trace_input ("st", OP_REG, OP_MEMREF3, OP_VOID);
+  SW (OP[1], GPR (OP[0]));
+  trace_output_void ();
+}
+
 /* st2w */
 void
 OP_35000000 ()
@@ -2601,6 +2766,16 @@ OP_6E01 ()
   trace_output_void ();
 }
 
+/* st2w */
+void
+OP_37010000 ()
+{
+  trace_input ("st2w", OP_DREG, OP_MEMREF3, OP_VOID);
+  SW (OP [1] + 0, GPR (OP[0] + 0));
+  SW (OP [1] + 2, GPR (OP[0] + 1));
+  trace_output_void ();
+}
+
 /* stb */
 void
 OP_3C000000 ()
index 52a2d86393a90f36987e78b38a1ff58c868edeeb..c12ec658e0d71d26d38529d71de00fd07d6ab44b 100644 (file)
@@ -1,3 +1,7 @@
+Thu Sep  9 15:12:08 1999  Geoffrey Keating  <geoffk@cygnus.com>
+
+       * mips.igen (MULT): Correct previous mis-applied patch.
+
 Tue Sep  7 13:34:54 1999  Geoffrey Keating  <geoffk@cygnus.com>
 
        * mips.igen (delayslot32): Handle sequence like
index 17748febcfc40a0c266b05c60efa6faaa7ea49c2..6d92d4aa506d872be96050f203c36acf5597c38f 100644 (file)
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr4100:
 {
-  do_multu (SD_, RS, RT, RD);
+  do_multu (SD_, RS, RT, 0);
 }
 
 000000,5.RS,5.RT,5.RD,00000011001:SPECIAL:32::MULTU
 *vr5000:
 *r3900:
 {
-  do_multu (SD_, RS, RT, 0);
+  do_multu (SD_, RS, RT, RD);
 }
 
 
index ca3bde29732dbdf43e8c8749d002315d80664b09..e876e1f8f679dfbc9eebe0bf8c97dbc0881d3c15 100644 (file)
@@ -1,32 +1,14 @@
-1999-09-06  Doug Evans  <devans@casey.cygnus.com>
-
-       * sim/arm/testutils.inc: Testsuite utilities.
-       * sim/arm/adc.cgs: New testcase.
-
 Thu Sep  2 18:15:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * configure: Regenerated to track ../common/aclocal.m4 changes.
 
 1999-08-30  Doug Evans  <devans@casey.cygnus.com>
 
-       * sim/arm/thumb/allthumb.exp: New driver for thumb testcases.
-       * sim/arm/allinsn.exp: New driver for arm testcases.
-
        * lib/sim-defs.exp (run_sim_test): Rename all_machs arg to
        requested_machs, now is list of machs to run tests for.
        Delete locals AS,ASFLAGS,LD,LDFLAGS.  Use target_assemble
        and target_link instead.
 
-1999-07-16  Ben Elliston  <bje@cygnus.com>
-
-       * sim/arm/misaligned1.ms: New test case.
-       * sim/arm/misaligned2.ms: Likewise.
-       * sim/arm/misaligned3.ms: Likewise.
-
-1999-07-16  Ben Elliston  <bje@cygnus.com>
-
-       * sim/arm/misc.exp: Enable basic tests.
-
 1999-04-21  Doug Evans  <devans@casey.cygnus.com>
 
        * sim/m32r/nop.cgs: Add missing nop insn.
index b3b7f8cfac90959a777971430e2fa20c181611ee..723f88ae74381d688a760d0b3efcf8bebca34ad7 100644 (file)
@@ -1,3 +1,10 @@
+Wed Sep  8 19:34:55 MDT 1999   Diego Novillo <dnovillo@cygnus.com>
+
+       * t-ld-st.s: New file.
+       * t-sac.s: New file.
+       * t-sachi.s: New file.
+       * t-slae.s: New file.
+
 1999-01-13  Jason Molenda  (jsm@bugshack.cygnus.com)
 
        * t-sadd.s: New file.
index 09d59ac75656ac4091565fddb61110df027b6c39..b170f377d7462aeb660cc946f72edb884d2265a0 100644 (file)
@@ -41,6 +41,7 @@ TESTS = \
        exit47.ko \
        hello.hi \
        t-dbt.ok \
+       t-ld-st.ok \
        t-mac.ok \
        t-mvtac.ok \
        t-mvtc.ok \
@@ -51,7 +52,10 @@ TESTS = \
        t-rdt.ok \
        t-rep.ok \
        t-rte.ok \
+       t-sac.ok \
+       t-sachi.ok \
        t-sadd.ok \
+       t-slae.ok \
        t-sp.ok \
        t-sub2w.ok \
        t-sub.ok \
diff --git a/sim/testsuite/d10v-elf/t-ld-st.s b/sim/testsuite/d10v-elf/t-ld-st.s
new file mode 100644 (file)
index 0000000..ec9f202
--- /dev/null
@@ -0,0 +1,32 @@
+.include "t-macros.i"
+
+       start
+
+       ; Test ld and st
+       ld r4, @foo
+       check 1 r4 0xdead
+
+       ldi r4, #0x2152
+       st r4, @foo
+       ld r4, @foo
+       check 2 r4 0x2152
+
+       ; Test ld2w and st2w
+       ldi r4, #0xdead
+       st r4, @foo
+       ld2w r4, @foo
+       check2w2 3 r4 0xdead 0xf000
+
+       ldi r4, #0x2112
+       ldi r5, #0x1984
+       st2w r4, @foo
+       ld2w r4, @foo
+       check2w2 4 r4 0x2112 0x1984
+
+       .data
+       .align 2
+foo:   .short 0xdead
+bar:   .short 0xf000
+       .text
+
+       exit0
diff --git a/sim/testsuite/d10v-elf/t-sac.s b/sim/testsuite/d10v-elf/t-sac.s
new file mode 100644 (file)
index 0000000..7042be0
--- /dev/null
@@ -0,0 +1,23 @@
+.include "t-macros.i"
+
+       start
+
+test_sac_1:
+       loadacc2 a0 0x00 0xAFFF 0x0000
+       sac r4, a0
+       check 1 r4 0x7FFF
+       check 2 r5 0xFFFF
+
+test_sac_2:
+       loadacc2 a0 0xFF 0x7000 0x0000
+       sac r4, a0
+       check 3 r4 0x8000
+       check 4 r5 0x0000
+
+test_sac_3:
+       loadacc2 a0 0x00 0x1000 0xA000
+       sac r4, a0
+       check 5 r4 0x1000
+       check 6 r5 0xA000
+
+       exit0
diff --git a/sim/testsuite/d10v-elf/t-sachi.s b/sim/testsuite/d10v-elf/t-sachi.s
new file mode 100644 (file)
index 0000000..7774ee0
--- /dev/null
@@ -0,0 +1,22 @@
+.include "t-macros.i"
+
+       start
+
+test_sachi_1:
+       loadacc2 a0 0x00 0xAFFF 0x0000
+       sachi r4, a0
+       check 1 r4 0x7FFF
+
+
+test_sachi_2:
+       loadacc2 a0 0xFF 0x8000 0x1000
+       sachi r4, a0
+       check 2 r4 0x8000
+
+
+test_sachi_3:
+       loadacc2 a0 0x00 0x1000 0xA000
+       sachi r4, a0
+       check 3 r4 0x1000
+
+       exit0
diff --git a/sim/testsuite/d10v-elf/t-slae.s b/sim/testsuite/d10v-elf/t-slae.s
new file mode 100644 (file)
index 0000000..6d8422d
--- /dev/null
@@ -0,0 +1,39 @@
+.include "t-macros.i"
+
+       start
+
+test_slae_1:
+       loadpsw2 PSW_ST|PSW_FX
+       loadacc2 a0 0x00 0x0AFF 0xF000
+       ldi r0, 4
+       slae a0, r0
+       checkacc2 1 a0 0x00 0x7FFF 0xFFFF
+
+test_slae_2:
+       loadpsw2 PSW_ST|PSW_FX
+       loadacc2 a0 0xFF 0xF700 0x1000
+       ldi r0, 4
+       slae a0, r0
+       checkacc2 2 a0 0xFF 0x8000 0x0000
+
+test_slae_3:
+       loadpsw2 PSW_ST|PSW_FX
+       loadacc2 a0 0x00 0x0010 0xA000
+       ldi r0, 4
+       slae a0, r0
+       checkacc2 3 a0 0x00 0x010A 0x0000
+
+test_slae_4:
+       loadpsw2 0
+       loadacc2 a0 0x00 0x0010 0xA000
+       ldi r0, 4
+       slae a0, r0
+       checkacc2 4 a0 0x00 0x010A 0x0000
+
+test_slae_5:
+       loadacc2 a0 0x00 0x0010 0xA000
+       ldi r0, -4
+       slae a0, r0
+       checkacc2 4 a0 0x00 0x0001 0x0A00
+
+       exit0