diff -urpN src/gdb/m68hc11-tdep.c dev/gdb/m68hc11-tdep.c --- src/gdb/m68hc11-tdep.c 2007-10-17 15:36:44.000000000 +0200 +++ dev/gdb/m68hc11-tdep.c 2007-10-31 09:12:06.000000000 +0100 @@ -146,10 +146,6 @@ struct gdbarch_tdep int elf_flags; }; -#define M6811_TDEP gdbarch_tdep (current_gdbarch) -#define STACK_CORRECTION (M6811_TDEP->stack_correction) -#define USE_PAGE_REGISTER (M6811_TDEP->use_page_register) - struct m68hc11_unwind_cache { /* The previous frame's inner most stack address. Used as this @@ -365,11 +361,13 @@ m68hc11_pseudo_register_write (struct gd } static const char * -m68hc11_register_name (int reg_nr) +m68hc11_register_name (struct gdbarch *gdbarch, int reg_nr) { - if (reg_nr == M68HC12_HARD_PC_REGNUM && USE_PAGE_REGISTER) + if (reg_nr == M68HC12_HARD_PC_REGNUM + && gdbarch_tdep (gdbarch)->use_page_register) return "pc"; - if (reg_nr == HARD_PC_REGNUM && USE_PAGE_REGISTER) + if (reg_nr == HARD_PC_REGNUM + && gdbarch_tdep (gdbarch)->use_page_register) return "ppc"; if (reg_nr < 0) @@ -777,6 +775,7 @@ struct m68hc11_unwind_cache * m68hc11_frame_unwind_cache (struct frame_info *next_frame, void **this_prologue_cache) { + struct gdbarch *gdbarch = get_frame_arch (next_frame); ULONGEST prev_sp; ULONGEST this_base; struct m68hc11_unwind_cache *info; @@ -816,7 +815,7 @@ m68hc11_frame_unwind_cache (struct frame info->saved_regs[HARD_PC_REGNUM].addr = info->sp_offset; this_base = frame_unwind_register_unsigned (next_frame, HARD_SP_REGNUM); prev_sp = this_base + info->sp_offset + 2; - this_base += STACK_CORRECTION; + this_base += gdbarch_tdep (gdbarch)->stack_correction; } else { @@ -824,7 +823,7 @@ m68hc11_frame_unwind_cache (struct frame to before the first saved register giving the SP. */ prev_sp = this_base + info->size + 2; - this_base += STACK_CORRECTION; + this_base += gdbarch_tdep (gdbarch)->stack_correction; if (soft_regs[SOFT_FP_REGNUM].name) info->saved_regs[SOFT_FP_REGNUM].addr = info->size - 2; } @@ -854,8 +853,8 @@ m68hc11_frame_unwind_cache (struct frame /* Adjust all the saved registers so that they contain addresses and not offsets. */ for (i = 0; - i < gdbarch_num_regs (current_gdbarch) - + gdbarch_num_pseudo_regs (current_gdbarch) - 1; + i < gdbarch_num_regs (gdbarch) + + gdbarch_num_pseudo_regs (gdbarch) - 1; i++) if (trad_frame_addr_p (info->saved_regs, i)) { @@ -915,7 +914,7 @@ m68hc11_frame_prev_register (struct fram /* Take into account the 68HC12 specific call (PC + page). */ if (info->return_kind == RETURN_RTC && *addrp >= 0x08000 && *addrp < 0x0c000 - && USE_PAGE_REGISTER) + && gdbarch_tdep (get_frame_arch (next_frame))->use_page_register) { int page_optimized; @@ -1215,7 +1214,7 @@ m68hc11_push_dummy_call (struct gdbarch write_memory (sp, buf, 2); /* Finally, update the stack pointer... */ - sp -= STACK_CORRECTION; + sp -= gdbarch_tdep (gdbarch)->stack_correction; regcache_cooked_write_unsigned (regcache, HARD_SP_REGNUM, sp); /* ...and fake a frame pointer. */ @@ -1395,13 +1394,14 @@ m68hc11_register_reggroup_p (struct gdba || regnum == SOFT_TMP_REGNUM || regnum == SOFT_ZS_REGNUM || regnum == SOFT_XY_REGNUM) - && m68hc11_register_name (regnum))); + && m68hc11_register_name (gdbarch, regnum))); } /* Group to identify gcc soft registers (d1..dN). */ if (group == m68hc11_soft_reggroup) { - return regnum >= SOFT_D1_REGNUM && m68hc11_register_name (regnum); + return regnum >= SOFT_D1_REGNUM + && m68hc11_register_name (gdbarch, regnum); } if (group == m68hc11_hard_reggroup)