/* OBSOLETE /* Target-machine dependent code for WDC-65816, for GDB. */ /* OBSOLETE Copyright 1995, 1996, 2000, 2001 Free Software Foundation, Inc. */ /* OBSOLETE */ /* OBSOLETE This file is part of GDB. */ /* OBSOLETE */ /* OBSOLETE This program is free software; you can redistribute it and/or modify */ /* OBSOLETE it under the terms of the GNU General Public License as published by */ /* OBSOLETE the Free Software Foundation; either version 2 of the License, or */ /* OBSOLETE (at your option) any later version. */ /* OBSOLETE */ /* OBSOLETE This program is distributed in the hope that it will be useful, */ /* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* OBSOLETE GNU General Public License for more details. */ /* OBSOLETE */ /* OBSOLETE You should have received a copy of the GNU General Public License */ /* OBSOLETE along with this program; if not, write to the Free Software */ /* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, */ /* OBSOLETE Boston, MA 02111-1307, USA. */ */ /* OBSOLETE */ /* OBSOLETE /* */ /* OBSOLETE Contributed by Steve Chamberlain */ /* OBSOLETE sac@cygnus.com */ /* OBSOLETE */ */ /* OBSOLETE */ /* OBSOLETE #include "defs.h" */ /* OBSOLETE #include "frame.h" */ /* OBSOLETE #include "obstack.h" */ /* OBSOLETE #include "symtab.h" */ /* OBSOLETE #include "gdbcmd.h" */ /* OBSOLETE #include "gdbtypes.h" */ /* OBSOLETE #include "dis-asm.h" */ /* OBSOLETE #include "gdbcore.h" */ /* OBSOLETE #include "regcache.h" */ /* OBSOLETE */ /* OBSOLETE /* Return the saved PC from this frame. */ */ /* OBSOLETE */ /* OBSOLETE */ /* OBSOLETE CORE_ADDR */ /* OBSOLETE w65_frame_saved_pc (struct frame_info *frame) */ /* OBSOLETE { */ /* OBSOLETE return (read_memory_integer (frame->frame + 2, 4) & 0xffffff); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE CORE_ADDR */ /* OBSOLETE w65_addr_bits_remove (CORE_ADDR addr) */ /* OBSOLETE { */ /* OBSOLETE return ((addr) & 0xffffff); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE read_memory_pointer (CORE_ADDR x) */ /* OBSOLETE { */ /* OBSOLETE return read_memory_integer (ADDR_BITS_REMOVE (x), 4); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE init_frame_pc (void) */ /* OBSOLETE { */ /* OBSOLETE internal_error (__FILE__, __LINE__, "failed internal consistency check"); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE void */ /* OBSOLETE w65_push_dummy_frame (void) */ /* OBSOLETE { */ /* OBSOLETE internal_error (__FILE__, __LINE__, "failed internal consistency check"); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE /* Put here the code to store, into a struct frame_saved_regs, */ /* OBSOLETE the addresses of the saved registers of frame described by FRAME_INFO. */ /* OBSOLETE This includes special registers such as pc and fp saved in special */ /* OBSOLETE ways in the stack frame. sp is even more special: */ /* OBSOLETE the address we return for it IS the sp for the next frame. */ /* OBSOLETE */ /* OBSOLETE We cache the result of doing this in the frame_cache_obstack, since */ /* OBSOLETE it is fairly expensive. */ */ /* OBSOLETE */ /* OBSOLETE void */ /* OBSOLETE frame_find_saved_regs (struct frame_info *fip, struct frame_saved_regs *fsrp) */ /* OBSOLETE { */ /* OBSOLETE int locals; */ /* OBSOLETE CORE_ADDR pc; */ /* OBSOLETE CORE_ADDR adr; */ /* OBSOLETE int i; */ /* OBSOLETE */ /* OBSOLETE memset (fsrp, 0, sizeof *fsrp); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE int */ /* OBSOLETE saved_pc_after_call (void) */ /* OBSOLETE { */ /* OBSOLETE int sp = read_register (SP_REGNUM); */ /* OBSOLETE int val = read_memory_integer (sp + 1, 4); */ /* OBSOLETE return ADDR_BITS_REMOVE (val); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE */ /* OBSOLETE extract_return_value (struct type *type, char *regbuf, char *valbuf) */ /* OBSOLETE { */ /* OBSOLETE int b; */ /* OBSOLETE int len = TYPE_LENGTH (type); */ /* OBSOLETE */ /* OBSOLETE for (b = 0; b < len; b += 2) */ /* OBSOLETE { */ /* OBSOLETE int todo = len - b; */ /* OBSOLETE if (todo > 2) */ /* OBSOLETE todo = 2; */ /* OBSOLETE memcpy (valbuf + b, regbuf + b, todo); */ /* OBSOLETE } */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE void */ /* OBSOLETE write_return_value (struct type *type, char *valbuf) */ /* OBSOLETE { */ /* OBSOLETE int reg; */ /* OBSOLETE int len; */ /* OBSOLETE for (len = 0; len < TYPE_LENGTH (type); len += 2) */ /* OBSOLETE { */ /* OBSOLETE write_register_bytes (REGISTER_BYTE (len / 2 + 2), valbuf + len, 2); */ /* OBSOLETE } */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE void */ /* OBSOLETE store_struct_return (CORE_ADDR addr, CORE_ADDR sp) */ /* OBSOLETE { */ /* OBSOLETE write_register (2, addr); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE void */ /* OBSOLETE w65_pop_frame (void) */ /* OBSOLETE { */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE init_extra_frame_info (void) */ /* OBSOLETE { */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE pop_frame (void) */ /* OBSOLETE { */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE w65_frame_chain (struct frame_info *thisframe) */ /* OBSOLETE { */ /* OBSOLETE return 0xffff & read_memory_integer ((thisframe)->frame, 2); */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE static int */ /* OBSOLETE gb (int x) */ /* OBSOLETE { */ /* OBSOLETE return read_memory_integer (x, 1) & 0xff; */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE extern CORE_ADDR */ /* OBSOLETE w65_skip_prologue (CORE_ADDR pc) */ /* OBSOLETE { */ /* OBSOLETE CORE_ADDR too_far = pc + 20; */ /* OBSOLETE */ /* OBSOLETE /* looking for bits of the prologue, we can expect to */ /* OBSOLETE see this in a frameful function: */ /* OBSOLETE */ /* OBSOLETE stack adjust: */ /* OBSOLETE */ /* OBSOLETE 3B tsc */ /* OBSOLETE 1A inc a */ /* OBSOLETE 18 clc */ /* OBSOLETE 69E2FF adc #0xffe2 */ /* OBSOLETE 3A dec a */ /* OBSOLETE 1B tcs */ /* OBSOLETE 1A inc a */ /* OBSOLETE */ /* OBSOLETE link: */ /* OBSOLETE */ /* OBSOLETE A500 lda "); */ /* OBSOLETE if ((C | Z) == 1) */ /* OBSOLETE printf_unfiltered ("u<= "); */ /* OBSOLETE if ((C == 0)) */ /* OBSOLETE printf_unfiltered ("u>= "); */ /* OBSOLETE if (C == 1) */ /* OBSOLETE printf_unfiltered ("u< "); */ /* OBSOLETE if (Z == 0) */ /* OBSOLETE printf_unfiltered ("!= "); */ /* OBSOLETE if (Z == 1) */ /* OBSOLETE printf_unfiltered ("== "); */ /* OBSOLETE if ((N ^ V) == 0) */ /* OBSOLETE printf_unfiltered (">= "); */ /* OBSOLETE if ((N ^ V) == 1) */ /* OBSOLETE printf_unfiltered ("< "); */ /* OBSOLETE if ((Z | (N ^ V)) == 0) */ /* OBSOLETE printf_unfiltered ("> "); */ /* OBSOLETE if ((Z | (N ^ V)) == 1) */ /* OBSOLETE printf_unfiltered ("<= "); */ /* OBSOLETE } */ /* OBSOLETE } */ /* OBSOLETE */ /* OBSOLETE void */ /* OBSOLETE _initialize_w65_tdep (void) */ /* OBSOLETE { */ /* OBSOLETE tm_print_insn = print_insn_w65; */ /* OBSOLETE } */