diff options
Diffstat (limited to 'gdb/m68k-tdep.c')
-rw-r--r-- | gdb/m68k-tdep.c | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c index 213431f..507af65 100644 --- a/gdb/m68k-tdep.c +++ b/gdb/m68k-tdep.c @@ -495,6 +495,7 @@ m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function, CORE_ADDR struct_addr) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); gdb_byte buf[4]; int i; @@ -522,17 +523,17 @@ m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function, /* Store struct value address. */ if (struct_return) { - store_unsigned_integer (buf, 4, struct_addr); + store_unsigned_integer (buf, 4, byte_order, struct_addr); regcache_cooked_write (regcache, tdep->struct_value_regnum, buf); } /* Store return address. */ sp -= 4; - store_unsigned_integer (buf, 4, bp_addr); + store_unsigned_integer (buf, 4, byte_order, bp_addr); write_memory (sp, buf, 4); /* Finally, update the stack pointer... */ - store_unsigned_integer (buf, 4, sp); + store_unsigned_integer (buf, 4, byte_order, sp); regcache_cooked_write (regcache, M68K_SP_REGNUM, buf); /* ...and fake a frame pointer. */ @@ -613,15 +614,17 @@ m68k_alloc_frame_cache (void) Otherwise, return PC. */ static CORE_ADDR -m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc, +m68k_analyze_frame_setup (struct gdbarch *gdbarch, + CORE_ADDR pc, CORE_ADDR current_pc, struct m68k_frame_cache *cache) { + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int op; if (pc >= current_pc) return current_pc; - op = read_memory_unsigned_integer (pc, 2); + op = read_memory_unsigned_integer (pc, 2, byte_order); if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP) { @@ -631,14 +634,14 @@ m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc, { /* link.w %fp, #-N */ /* link.w %fp, #0; adda.l #-N, %sp */ - cache->locals = -read_memory_integer (pc + 2, 2); + cache->locals = -read_memory_integer (pc + 2, 2, byte_order); if (pc + 4 < current_pc && cache->locals == 0) { - op = read_memory_unsigned_integer (pc + 4, 2); + op = read_memory_unsigned_integer (pc + 4, 2, byte_order); if (op == P_ADDAL_SP) { - cache->locals = read_memory_integer (pc + 6, 4); + cache->locals = read_memory_integer (pc + 6, 4, byte_order); return pc + 10; } } @@ -648,7 +651,7 @@ m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc, else if (op == P_LINKL_FP) { /* link.l %fp, #-N */ - cache->locals = -read_memory_integer (pc + 2, 4); + cache->locals = -read_memory_integer (pc + 2, 4, byte_order); return pc + 6; } else @@ -658,7 +661,7 @@ m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc, if (pc + 2 < current_pc) { - op = read_memory_unsigned_integer (pc + 2, 2); + op = read_memory_unsigned_integer (pc + 2, 2, byte_order); if (op == P_MOVEAL_SP_FP) { @@ -677,7 +680,7 @@ m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc, cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9; if (pc + 2 < current_pc) { - op = read_memory_unsigned_integer (pc + 2, 2); + op = read_memory_unsigned_integer (pc + 2, 2, byte_order); if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP) { cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9; @@ -690,13 +693,13 @@ m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc, { /* adda.w #-N,%sp */ /* lea (-N,%sp),%sp */ - cache->locals = -read_memory_integer (pc + 2, 2); + cache->locals = -read_memory_integer (pc + 2, 2, byte_order); return pc + 4; } else if (op == P_ADDAL_SP) { /* adda.l #-N,%sp */ - cache->locals = -read_memory_integer (pc + 2, 4); + cache->locals = -read_memory_integer (pc + 2, 4, byte_order); return pc + 6; } @@ -713,6 +716,8 @@ m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR current_pc, struct m68k_frame_cache *cache) { + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + if (cache->locals >= 0) { CORE_ADDR offset; @@ -722,12 +727,12 @@ m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc, offset = -4 - cache->locals; while (pc < current_pc) { - op = read_memory_unsigned_integer (pc, 2); + op = read_memory_unsigned_integer (pc, 2, byte_order); if (op == P_FMOVEMX_SP && gdbarch_tdep (gdbarch)->fpregs_present) { /* fmovem.x REGS,-(%sp) */ - op = read_memory_unsigned_integer (pc + 2, 2); + op = read_memory_unsigned_integer (pc + 2, 2, byte_order); if ((op & 0xff00) == 0xe000) { mask = op & 0xff; @@ -755,7 +760,7 @@ m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc, else if (op == P_MOVEML_SP) { /* movem.l REGS,-(%sp) */ - mask = read_memory_unsigned_integer (pc + 2, 2); + mask = read_memory_unsigned_integer (pc + 2, 2, byte_order); for (i = 0; i < 16; i++, mask >>= 1) { if (mask & 1) @@ -811,15 +816,16 @@ static CORE_ADDR m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR current_pc, struct m68k_frame_cache *cache) { + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); unsigned int op; - pc = m68k_analyze_frame_setup (pc, current_pc, cache); + pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache); pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache); if (pc >= current_pc) return current_pc; /* Check for GOT setup. */ - op = read_memory_unsigned_integer (pc, 4); + op = read_memory_unsigned_integer (pc, 4, byte_order); if (op == P_LEA_PC_A5) { /* lea (%pc,N),%a5 */ @@ -859,6 +865,8 @@ m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) static struct m68k_frame_cache * m68k_frame_cache (struct frame_info *this_frame, void **this_cache) { + struct gdbarch *gdbarch = get_frame_arch (this_frame); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct m68k_frame_cache *cache; gdb_byte buf[4]; int i; @@ -879,7 +887,7 @@ m68k_frame_cache (struct frame_info *this_frame, void **this_cache) in progress when the signal occurred. */ get_frame_register (this_frame, M68K_FP_REGNUM, buf); - cache->base = extract_unsigned_integer (buf, 4); + cache->base = extract_unsigned_integer (buf, 4, byte_order); if (cache->base == 0) return cache; @@ -902,7 +910,8 @@ m68k_frame_cache (struct frame_info *this_frame, void **this_cache) functions this might work too. */ get_frame_register (this_frame, M68K_SP_REGNUM, buf); - cache->base = extract_unsigned_integer (buf, 4) + cache->sp_offset; + cache->base = extract_unsigned_integer (buf, 4, byte_order) + + cache->sp_offset; } /* Now that we have the base address for the stack frame we can @@ -998,7 +1007,8 @@ m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) gdb_byte *buf; CORE_ADDR sp, jb_addr; struct gdbarch *gdbarch = get_frame_arch (frame); - struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame)); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); if (tdep->jb_pc < 0) { @@ -1015,14 +1025,15 @@ m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) return 0; jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch) - / TARGET_CHAR_BIT); + / TARGET_CHAR_BIT, byte_order); if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf, - gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT)) + gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT), + byte_order) return 0; *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch) - / TARGET_CHAR_BIT); + / TARGET_CHAR_BIT, byte_order); return 1; } |