The accompanying patch, which is quite extensive, removes all but one deprecated interface in ia64-tdep.c and switches to Andrew's new frame model. At present, this patch is working for gdb-6.0. There is some regression on the main branch but it theoretically should be working the same. I need to do some investigation as to what is causing the failure. I will attempt to describe a brief overview of changes: 1. removal/replacement of deprecated interfaces 2. movement of gr32-gr127, p0-p63, and nat0-nat127 registers to pseudo-register area (these registers are always calculated and they are not raw registers). 3. change in bsp definition - bsp register and cached bsp value are always kept as eof (end-of-frame). What used to be reported to the user as bsp is actually the bof (beginning-of-frame) and a new pseudo-register "bof" value has been created. 4. new frame model - removed/integrated old frame code into new frame model 5. added verification check in examine_prologue to verify cfm register matches the cfm for the prologue being examined. If not, we assume the routine is frameless. This handles a few problematic glibc scenarios whereby a jump is made to a stub which gdb thinks is in the middle of a function. 6. specify ia64 floating-point type and add conversion routines via gdbarch_value_to_register(), and gdbarch_register_to_value(). With the changes, running the gdb.base testsuite (ignoring dump.exp), the results change from: === gdb Summary === # of expected passes 5168 # of unexpected failures 44 # of unexpected successes 2 # of expected failures 12 # of known failures 1 # of unresolved testcases 15 # of unsupported tests 1 to: === gdb Summary === # of expected passes 5197 # of unexpected failures 28 # of unexpected successes 2 # of expected failures 12 # of known failures 1 # of unresolved testcases 1 # of unsupported tests 1 The new code also clears up a major failure in callfuncs.exp that causes an infinite backtrace loop to occur which exhausts memory. 2003-07-30 Jeff Johnston * ia64-tdep.c (pseudo_regs): New enum that lists gr32-gr127, p0-p63, bof, and nat0-nat127 as pseudo-registers. (ia64_frame_cache): New struct used to cache frame info. (ia64_register_reggroup_p): New routine used to override default register grouping so registers without names are still saved and restored. (ia64_dwarf_reg_to_regnum): New routine to map gr32-gr127 to their pseudo values. (ia64_pseudo_register_read): New routine to read pseudo-registers. (ia64_pseudo_register_write): New routine to write pseudo-registers. (ia64_alloc_frame_cache): New routine to create a new ia64_frame_cache. (examine_prologue): Change prototype to add next_frame pointer. Assume frameless until otherwise proven. Verify that the cfm for current frame matches the cfm that should occur for the prologues alloc insn and if equal, mark as not frameless. At end of routine, if not frameless, calculate registers for the previous frame and store in the cache, if a cache is provided. (ia64_skip_prologue): Use new prototype when calling examine_prologue and pass 0 for next_frame. (ia64_store_return_value): Change to use convert_typed_floating() instead of calling ia64_convert_to_raw(). (ia64_extract_return_value): Change to use convert_typed_floating() instead of calling ia64_convert_to_virtual(). (ia64_frame_cache): New routine to support new frame model. (ia64_frame_this_id, ia64_frame_prev_register): Ditto. (ia64_frame_sniffer): Ditto. (ia64_sigtramp_frame_init_saved_regs): Ditto. (ia64_sigtramp_frame_cache, ia64_sigtramp_frame_this_id): Ditto. (ia64_sigtramp_frame_prev_register): Ditto. (ia64_sigtramp_frame_sniffer): Ditto. (ia64_frame_base_address): Ditto. (ia64_extract_struct_value_address): Change to issue error message. (ia64_frame_align): New routine to align sp. (ia64_push_dummy_call): New routine based on ia64_push_arguments(). (ia64_push_arguments): Removed. Logic moved to ia64_push_dummy_call(). (ia64_push_return_address): Ditto. (ia64_unwind_dummy_id): New function. (ia64_unwind_pc): Ditto. (ia64_convert_register_p): Ditto. (ia64_register_to_value): Ditto. (ia64_value_to_register): Ditto. (ia64_pop_frame, ia64_pop_frame_regular): Removed. (ia64_register_byte, ia64_register_raw_size): Ditto. (ia64_register_virtual_size, ia64_register_virtual_byte): Ditto. (ia64_saved_pc_after_call): Ditto. (ia64_frame_chain, ia64_frame_saved_pc): Ditto. (ia64_frame_init_saved_regs, ia64_get_saved_register): Ditto. (ia64_register_convertible, ia64_register_convert_to_virtual): Ditto. (ia64_register_convert_to_raw): Ditto. (ia64_store_struct_return, ia64_call_dummy_words): Ditto. (ia64_init_extra_frame_info): Ditto. (ia64_frame_args_address, ia64_frame_locals_address): Ditto. (ia64_gdbarch_init): Remove registering of deprecated functions that are no longer used. Add registration of new gdbarch functions. Remove registering deprecated_write_sp. Replace set_gdbarch_register_virtual_type() with set_gdbarch_register_type(). Delete set_gdbarch_deprecated_register_convertible(), set_gdbarch_deprecated_register_convert_to_virtual(), and set_gdbarch_deprecated_register_convert_to_raw() calls. Remove set_gdbarch_deprecated_register_size(), set_gdbarch_deprecated_register_bytes(), set_gdbarch_deprecated_register_byte(), set_gdbarch_deprecated_register_raw_size(), set_gdbarch_deprecated_max_register_raw_size(), set_gdbarch_deprecated_register_virtual_size(), and set_gdbarch_deprecated_max_register_virtual_size() calls. Replace set_gdbarch_deprecated_extract_return_value() with set_gdbarch_extract_return_value(). Remove calls to: set_gdbarch_deprecated_saved_pc_after_call(); set_gdbarch_deprecated_frame_chain(), set_gdbarch_deprecated_frame_saved_pc(), set_gdbarch_deprecated_frame_init_saved_regs(), set_gdbarch_deprecated_get_saved_register(), set_gdbarch_deprecated_call_dummy_words(), set_gdbarch_deprecated_sizeof_call_dummy_words(), set_gdbarch_deprecated_init_extra_frame_info(), set_gdbarch_deprecated_frame_args_address(), set_gdbarch_deprecated_frame_locals_address(), and set_gdbarch_deprecated_dummy_write_sp(). Add set_gdbarch_convert_register_p(), set_gdbarch_register_to_value(), set_gdbarch_value_to_register(), set_gdbarch_push_dummy_call(), set_gdbarch_frame_align(), set_gdbarch_unwind_dummy_id(), set_gdbarch_unwind_pc(), frame_unwind_append_sniffer(), frame_unwind_append_sniffer(), frame_base_set_default(),