diff -urpN src/gdb/xtensa-tdep.c dev/gdb/xtensa-tdep.c --- src/gdb/xtensa-tdep.c 2008-05-16 06:17:17.000000000 +0200 +++ dev/gdb/xtensa-tdep.c 2008-05-16 08:09:09.000000000 +0200 @@ -1981,7 +1981,7 @@ call0_classify_opcode (xtensa_isa isa, x static void call0_track_op (xtensa_c0reg_t dst[], xtensa_c0reg_t src[], xtensa_insn_kind opclass, int nods, unsigned odv[], - CORE_ADDR pc, int spreg) + CORE_ADDR pc, int spreg, struct gdbarch *gdbarch) { unsigned litbase, litaddr, litval; @@ -2034,9 +2034,9 @@ call0_track_op (xtensa_c0reg_t dst[], xt /* 2 operands: dst, literal offset. */ gdb_assert (nods == 2); /* litbase = xtensa_get_litbase (pc); can be also used. */ - litbase = (gdbarch_tdep (current_gdbarch)->litbase_regnum == -1) + litbase = (gdbarch_tdep (gdbarch)->litbase_regnum == -1) ? 0 : xtensa_read_register - (gdbarch_tdep (current_gdbarch)->litbase_regnum); + (gdbarch_tdep (gdbarch)->litbase_regnum); litaddr = litbase & 1 ? (litbase & ~1) + (signed)odv[1] : (pc + 3 + (signed)odv[1]) & ~3; @@ -2093,8 +2093,9 @@ call0_track_op (xtensa_c0reg_t dst[], xt because they begin with default assumptions that analysis may change. */ static CORE_ADDR -call0_analyze_prologue (CORE_ADDR start, CORE_ADDR pc, - int nregs, xtensa_c0reg_t rt[], int *call0) +call0_analyze_prologue (CORE_ADDR start, CORE_ADDR pc, int nregs, + xtensa_c0reg_t rt[], int *call0, + struct gdbarch *gdbarch) { CORE_ADDR ia; /* Current insn address in prologue. */ CORE_ADDR ba = 0; /* Current address at base of insn buffer. */ @@ -2285,7 +2286,7 @@ call0_analyze_prologue (CORE_ADDR start, } /* Track register movement and modification for this operation. */ - call0_track_op (rt, rtmp, opclass, nods, odv, ia, 1); + call0_track_op (rt, rtmp, opclass, nods, odv, ia, 1, gdbarch); } } done: @@ -2315,7 +2316,7 @@ call0_frame_cache (struct frame_info *th { body_pc = call0_analyze_prologue (start_pc, pc, C0_NREGS, &cache->c0.c0_rt[0], - &cache->call0); + &cache->call0, gdbarch); } sp = get_frame_register_unsigned @@ -2487,7 +2488,7 @@ xtensa_skip_prologue (struct gdbarch *gd } /* No debug line info. Analyze prologue for Call0 or simply skip ENTRY. */ - body_pc = call0_analyze_prologue(start_pc, 0, 0, NULL, NULL); + body_pc = call0_analyze_prologue(start_pc, 0, 0, NULL, NULL, gdbarch); return body_pc != 0 ? body_pc : start_pc; }