One step closer.
[binutils-gdb.git] / gdb / h8300-tdep.c
index 21dde42e5a1199c8bc9293114562439f4875adda..50a0092406617855c3f34b44e9c587e89043a510 100644 (file)
@@ -1,10 +1,30 @@
+#include <stdio.h>
+#include "defs.h"
+
+/* an easy to debug H8 stack frame looks like:
+0x6df2 push    r2
+0x6df3 push    r3
+0x6df6 push    r6
+0x     mov.w   r7,r6
+       subs    stuff,sp  mov.w #x,r5
+                         subs  r5,sp
+
+ */
+#define IS_PUSH(x) ((x & 0xff00)==0x6d00)
+CORE_ADDR h8300_skip_prologue(start_pc)
+CORE_ADDR start_pc;
 
-h8300_skip_prologue()
 {
+  /* Skip past all push insns */
+  short int w;
   
-  printf("skip prologue\n");
-  
-  abort();
+  w = read_memory_integer(start_pc, 2);
+  while (IS_PUSH(w)) 
+  {
+    start_pc+=2;  
+    w = read_memory_integer(start_pc, 2);
+  }
+return start_pc;  
   
 }
 
@@ -14,19 +34,26 @@ h8300_pop_frame()
   
 }
 
-print_insn()
+int
+print_insn(memaddr, stream)
+CORE_ADDR memaddr;
+FILE *stream;
 {
-  printf("print insn\n");
-  
+  /* Nothing is bigger than 8 bytes */
+  char   data[8];
+  read_memory (memaddr, data, sizeof(data));
+  return print_insn_h8300(memaddr,  data   , stream);
+     
+     
 }
-
-
-
-FRAME_CHAIN()
-{
-  
-  printf("Frame chain\n");
-  
-}
-
-
+     
+     
+     
+     FRAME_CHAIN()
+     {
+     
+     printf("Frame chain\n");
+     
+     }
+     
+