Add search to target vector (#if 0'd until after 4.12):
authorJim Kingdon <jkingdon@engr.sgi.com>
Thu, 13 Jan 1994 18:44:06 +0000 (18:44 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Thu, 13 Jan 1994 18:44:06 +0000 (18:44 +0000)
* target.h (to_search, target_search): Add.
* gdbcore.h, core.c (generic_search): Add.
* remote.c (remote_search): Add.
* a29k-tdep.c (init_frame_info): Use target_search to find traceback
tag.

gdb/ChangeLog
gdb/a29k-tdep.c
gdb/core.c

index 5922aa9aa33cb3cc3db0a793c80fd3e2d61db081..1c6866fa0d6bee8a6afa788a8fc1ac6a785a1ef4 100644 (file)
@@ -1,5 +1,12 @@
 Thu Jan 13 10:32:38 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
+       Add search to target vector (#if 0'd until after 4.12):
+       * target.h (to_search, target_search): Add.
+       * gdbcore.h, core.c (generic_search): Add.
+       * remote.c (remote_search): Add.
+       * a29k-tdep.c (init_frame_info): Use target_search to find traceback
+       tag.
+
        * printcmd.c (print_address_symbolic): If set print fast-symbolic-addr
        is on, call find_pc_function rather than relying just on the minimal
        symbols (probably only matters for symbol readers which don't put
index a34b189c3dffbbf3344b0ecf717bcd245d9390b2..7d02b8bcde489df5568fb8212665e84e04362ca5 100644 (file)
@@ -418,10 +418,20 @@ init_frame_info (innermost_frame, fci)
       /* Search backward to find the trace-back tag.  However,
         do not trace back beyond the start of the text segment
         (just as a sanity check to avoid going into never-never land).  */
+#if 1
       while (p >= text_start
             && ((insn = read_memory_integer (p, 4)) & TAGWORD_ZERO_MASK) != 0)
        p -= 4;
-      
+#else /* 0 */
+      char pat[4] = {0, 0, 0, 0};
+      char mask[4];
+      char insn_raw[4];
+      store_unsigned_integer (mask, 4, TAGWORD_ZERO_MASK);
+      /* Enable this once target_search is enabled and tested.  */
+      target_search (4, pat, mask, p, -4, text_start, p+1, &p, &insn_raw);
+      insn = extract_unsigned_integer (insn_raw, 4);
+#endif /* 0 */
+
       if (p < text_start)
        {
          /* Couldn't find the trace-back tag.
index 9126d94ddb6d7eb07413a18c6c19e6e864154c3d..3d399f8fc4adf1df54c134d020d212b9f09033ff 100644 (file)
@@ -234,6 +234,46 @@ read_memory_unsigned_integer (memaddr, len)
   return extract_unsigned_integer (buf, len);
 }
 \f
+#if 0
+/* Enable after 4.12.  It is not tested.  */
+
+/* Search code.  Targets can just make this their search function, or
+   if the protocol has a less general search function, they can call this
+   in the cases it can't handle.  */
+void
+generic_search (len, data, mask, startaddr, increment, lorange, hirange
+               addr_found, data_found)
+     int len;
+     char *data;
+     char *mask;
+     CORE_ADDR startaddr;
+     int increment;
+     CORE_ADDR lorange;
+     CORE_ADDR hirange;
+     CORE_ADDR *addr_found;
+     char *data_found;
+{
+  int i;
+  CORE_ADDR curaddr = startaddr;
+
+  while (curaddr >= lorange && curaddr < hirange)
+    {
+      read_memory (curaddr, data_found, len);
+      for (i = 0; i < len; ++i)
+       if ((data_found[i] & mask[i]) != data[i])
+         goto try_again;
+      /* It matches.  */
+      *addr_found = curaddr;
+      return;
+
+    try_again:
+      curaddr += increment;
+    }
+  *addr_found = (CORE_ADDR)0;
+  return;
+}
+#endif /* 0 */
+\f
 /* The current default bfd target.  Points to storage allocated for
    gnutarget_string.  */
 char *gnutarget;