+char *
+mn10300_register_name (i)
+ int i;
+{
+ return mn10300_register_names[i];
+}
+
+CORE_ADDR
+mn10300_saved_pc_after_call (fi)
+ struct frame_info *fi;
+{
+ return read_memory_integer (read_register (SP_REGNUM), 4);
+}
+
+void
+mn10300_extract_return_value (type, regbuf, valbuf)
+ struct type *type;
+ char *regbuf;
+ char *valbuf;
+{
+ if (TYPE_CODE (type) == TYPE_CODE_PTR)
+ memcpy (valbuf, regbuf + REGISTER_BYTE (4), TYPE_LENGTH (type));
+ else
+ memcpy (valbuf, regbuf + REGISTER_BYTE (0), TYPE_LENGTH (type));
+}
+
+CORE_ADDR
+mn10300_extract_struct_value_address (regbuf)
+ char *regbuf;
+{
+ return extract_address (regbuf + REGISTER_BYTE (4),
+ REGISTER_RAW_SIZE (4));
+}
+
+void
+mn10300_store_return_value (type, valbuf)
+ struct type *type;
+ char *valbuf;
+{
+ if (TYPE_CODE (type) == TYPE_CODE_PTR)
+ write_register_bytes (REGISTER_BYTE (4), valbuf, TYPE_LENGTH (type));
+ else
+ write_register_bytes (REGISTER_BYTE (0), valbuf, TYPE_LENGTH (type));
+}
+
+static struct frame_info *analyze_dummy_frame PARAMS ((CORE_ADDR, CORE_ADDR));
+static struct frame_info *
+analyze_dummy_frame (pc, frame)
+ CORE_ADDR pc;
+ CORE_ADDR frame;
+{
+ static struct frame_info *dummy = NULL;
+ if (dummy == NULL)
+ {
+ dummy = xmalloc (sizeof (struct frame_info));
+ dummy->saved_regs = xmalloc (SIZEOF_FRAME_SAVED_REGS);
+ dummy->extra_info = xmalloc (sizeof (struct frame_extra_info));
+ }
+ dummy->next = NULL;
+ dummy->prev = NULL;
+ dummy->pc = pc;
+ dummy->frame = frame;
+ dummy->extra_info->status = 0;
+ dummy->extra_info->stack_size = 0;
+ memset (dummy->saved_regs, '\000', SIZEOF_FRAME_SAVED_REGS);
+ mn10300_analyze_prologue (dummy, 0);
+ return dummy;
+}