aboutsummaryrefslogtreecommitdiff
path: root/gdb/m68hc11-tdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/m68hc11-tdep.c')
-rw-r--r--gdb/m68hc11-tdep.c372
1 files changed, 174 insertions, 198 deletions
diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c
index 6625506..9a7f4db 100644
--- a/gdb/m68hc11-tdep.c
+++ b/gdb/m68hc11-tdep.c
@@ -19,7 +19,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
#include "defs.h"
#include "frame.h"
#include "frame-unwind.h"
@@ -32,7 +31,7 @@
#include "gdbcore.h"
#include "value.h"
#include "inferior.h"
-#include "dis-asm.h"
+#include "dis-asm.h"
#include "symfile.h"
#include "objfiles.h"
#include "arch-utils.h"
@@ -57,35 +56,31 @@
MSYMBOL_IS_RTC Tests the "RTC" bit in a minimal symbol.
MSYMBOL_IS_RTI Tests the "RTC" bit in a minimal symbol. */
-#define MSYMBOL_SET_RTC(msym) \
- (msym)->set_target_flag_1 (true)
+#define MSYMBOL_SET_RTC(msym) (msym)->set_target_flag_1 (true)
-#define MSYMBOL_SET_RTI(msym) \
- (msym)->set_target_flag_2 (true)
+#define MSYMBOL_SET_RTI(msym) (msym)->set_target_flag_2 (true)
-#define MSYMBOL_IS_RTC(msym) \
- (msym)->target_flag_1 ()
+#define MSYMBOL_IS_RTC(msym) (msym)->target_flag_1 ()
-#define MSYMBOL_IS_RTI(msym) \
- (msym)->target_flag_2 ()
+#define MSYMBOL_IS_RTI(msym) (msym)->target_flag_2 ()
-enum insn_return_kind {
+enum insn_return_kind
+{
RETURN_RTS,
RETURN_RTC,
RETURN_RTI
};
-
/* Register numbers of various important registers. */
-#define HARD_X_REGNUM 0
-#define HARD_D_REGNUM 1
-#define HARD_Y_REGNUM 2
-#define HARD_SP_REGNUM 3
-#define HARD_PC_REGNUM 4
+#define HARD_X_REGNUM 0
+#define HARD_D_REGNUM 1
+#define HARD_Y_REGNUM 2
+#define HARD_SP_REGNUM 3
+#define HARD_PC_REGNUM 4
-#define HARD_A_REGNUM 5
-#define HARD_B_REGNUM 6
+#define HARD_A_REGNUM 5
+#define HARD_B_REGNUM 6
#define HARD_CCR_REGNUM 7
/* 68HC12 page number register.
@@ -99,49 +94,50 @@ enum insn_return_kind {
/* Z is replaced by X or Y by gcc during machine reorg.
??? There is no way to get it and even know whether
it's in X or Y or in ZS. */
-#define SOFT_Z_REGNUM 8
+#define SOFT_Z_REGNUM 8
/* Soft registers. These registers are special. There are treated
like normal hard registers by gcc and gdb (ie, within dwarf2 info).
They are physically located in memory. */
-#define SOFT_FP_REGNUM 9
-#define SOFT_TMP_REGNUM 10
-#define SOFT_ZS_REGNUM 11
-#define SOFT_XY_REGNUM 12
-#define SOFT_UNUSED_REGNUM 13
-#define SOFT_D1_REGNUM 14
-#define SOFT_D32_REGNUM (SOFT_D1_REGNUM+31)
+#define SOFT_FP_REGNUM 9
+#define SOFT_TMP_REGNUM 10
+#define SOFT_ZS_REGNUM 11
+#define SOFT_XY_REGNUM 12
+#define SOFT_UNUSED_REGNUM 13
+#define SOFT_D1_REGNUM 14
+#define SOFT_D32_REGNUM (SOFT_D1_REGNUM + 31)
#define M68HC11_MAX_SOFT_REGS 32
-#define M68HC11_NUM_REGS (M68HC11_LAST_HARD_REG + 1)
-#define M68HC11_NUM_PSEUDO_REGS (M68HC11_MAX_SOFT_REGS+5)
-#define M68HC11_ALL_REGS (M68HC11_NUM_REGS+M68HC11_NUM_PSEUDO_REGS)
+#define M68HC11_NUM_REGS (M68HC11_LAST_HARD_REG + 1)
+#define M68HC11_NUM_PSEUDO_REGS (M68HC11_MAX_SOFT_REGS + 5)
+#define M68HC11_ALL_REGS (M68HC11_NUM_REGS + M68HC11_NUM_PSEUDO_REGS)
-#define M68HC11_REG_SIZE (2)
+#define M68HC11_REG_SIZE (2)
-#define M68HC12_NUM_REGS (9)
-#define M68HC12_NUM_PSEUDO_REGS ((M68HC11_MAX_SOFT_REGS+5)+1-1)
-#define M68HC12_HARD_PC_REGNUM (SOFT_D32_REGNUM+1)
+#define M68HC12_NUM_REGS (9)
+#define M68HC12_NUM_PSEUDO_REGS ((M68HC11_MAX_SOFT_REGS + 5) + 1 - 1)
+#define M68HC12_HARD_PC_REGNUM (SOFT_D32_REGNUM + 1)
struct insn_sequence;
+
struct m68gc11_gdbarch_tdep : gdbarch_tdep_base
- {
- /* Stack pointer correction value. For 68hc11, the stack pointer points
+{
+ /* Stack pointer correction value. For 68hc11, the stack pointer points
to the next push location. An offset of 1 must be applied to obtain
the address where the last value is saved. For 68hc12, the stack
pointer points to the last value pushed. No offset is necessary. */
- int stack_correction = 0;
+ int stack_correction = 0;
- /* Description of instructions in the prologue. */
- struct insn_sequence *prologue = nullptr;
+ /* Description of instructions in the prologue. */
+ struct insn_sequence *prologue = nullptr;
- /* True if the page memory bank register is available
+ /* True if the page memory bank register is available
and must be used. */
- int use_page_register = 0;
+ int use_page_register = 0;
- /* ELF flags for ABI. */
- int elf_flags = 0;
- };
+ /* ELF flags for ABI. */
+ int elf_flags = 0;
+};
static int
stack_correction (gdbarch *arch)
@@ -178,22 +174,17 @@ struct m68hc11_unwind_cache
/* Table of registers for 68HC11. This includes the hard registers
and the soft registers used by GCC. */
-static const char *
-m68hc11_register_names[] =
-{
- "x", "d", "y", "sp", "pc", "a", "b",
- "ccr", "page", "frame","tmp", "zs", "xy", 0,
- "d1", "d2", "d3", "d4", "d5", "d6", "d7",
- "d8", "d9", "d10", "d11", "d12", "d13", "d14",
- "d15", "d16", "d17", "d18", "d19", "d20", "d21",
- "d22", "d23", "d24", "d25", "d26", "d27", "d28",
- "d29", "d30", "d31", "d32"
-};
-
-struct m68hc11_soft_reg
+static const char *m68hc11_register_names[]
+ = { "x", "d", "y", "sp", "pc", "a", "b", "ccr", "page", "frame",
+ "tmp", "zs", "xy", 0, "d1", "d2", "d3", "d4", "d5", "d6",
+ "d7", "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16",
+ "d17", "d18", "d19", "d20", "d21", "d22", "d23", "d24", "d25", "d26",
+ "d27", "d28", "d29", "d30", "d31", "d32" };
+
+struct m68hc11_soft_reg
{
const char *name;
- CORE_ADDR addr;
+ CORE_ADDR addr;
};
static struct m68hc11_soft_reg soft_regs[M68HC11_ALL_REGS];
@@ -233,21 +224,21 @@ m68hc11_get_register_info (struct m68hc11_soft_reg *reg, const char *name)
/* Initialize the table of soft register addresses according
to the symbol table. */
- static void
+static void
m68hc11_initialize_register_info (void)
{
int i;
if (soft_reg_initialized)
return;
-
+
soft_min_addr = INT_MAX;
soft_max_addr = 0;
for (i = 0; i < M68HC11_ALL_REGS; i++)
{
soft_regs[i].name = 0;
}
-
+
m68hc11_get_register_info (&soft_regs[SOFT_FP_REGNUM], "_.frame");
m68hc11_get_register_info (&soft_regs[SOFT_TMP_REGNUM], "_.tmp");
m68hc11_get_register_info (&soft_regs[SOFT_ZS_REGNUM], "_.z");
@@ -263,8 +254,8 @@ m68hc11_initialize_register_info (void)
}
if (soft_regs[SOFT_FP_REGNUM].name == 0)
- warning (_("No frame soft register found in the symbol table.\n"
- "Stack backtrace will not work."));
+ warning (_ ("No frame soft register found in the symbol table.\n"
+ "Stack backtrace will not work."));
soft_reg_initialized = 1;
}
@@ -274,10 +265,10 @@ static int
m68hc11_which_soft_register (CORE_ADDR addr)
{
int i;
-
+
if (addr < soft_min_addr || addr > soft_max_addr)
return -1;
-
+
for (i = SOFT_FP_REGNUM; i < M68HC11_ALL_REGS; i++)
{
if (soft_regs[i].name && soft_regs[i].addr == addr)
@@ -291,8 +282,8 @@ m68hc11_which_soft_register (CORE_ADDR addr)
fetch into a memory read. */
static enum register_status
m68hc11_pseudo_register_read (struct gdbarch *gdbarch,
- readable_regcache *regcache,
- int regno, gdb_byte *buf)
+ readable_regcache *regcache, int regno,
+ gdb_byte *buf)
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -321,7 +312,7 @@ m68hc11_pseudo_register_read (struct gdbarch *gdbarch,
}
m68hc11_initialize_register_info ();
-
+
/* Fetch a soft register: translate into a memory read. */
if (soft_regs[regno].name)
{
@@ -339,8 +330,8 @@ m68hc11_pseudo_register_read (struct gdbarch *gdbarch,
into a memory write. */
static void
m68hc11_pseudo_register_write (struct gdbarch *gdbarch,
- struct regcache *regcache,
- int regno, const gdb_byte *buf)
+ struct regcache *regcache, int regno,
+ const gdb_byte *buf)
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -367,7 +358,7 @@ m68hc11_pseudo_register_write (struct gdbarch *gdbarch,
regcache_cooked_write_unsigned (regcache, HARD_PC_REGNUM, pc);
return;
}
-
+
m68hc11_initialize_register_info ();
/* Store a soft register: translate into a memory write. */
@@ -402,43 +393,43 @@ m68hc11_register_name (struct gdbarch *gdbarch, int reg_nr)
return m68hc11_register_names[reg_nr];
}
-constexpr gdb_byte m68hc11_break_insn[] = {0x0};
+constexpr gdb_byte m68hc11_break_insn[] = { 0x0 };
typedef BP_MANIPULATION (m68hc11_break_insn) m68hc11_breakpoint;
-
+
/* 68HC11 & 68HC12 prologue analysis. */
#define MAX_CODES 12
/* 68HC11 opcodes. */
#undef M6811_OP_PAGE2
-#define M6811_OP_PAGE2 (0x18)
-#define M6811_OP_LDX (0xde)
+#define M6811_OP_PAGE2 (0x18)
+#define M6811_OP_LDX (0xde)
#define M6811_OP_LDX_EXT (0xfe)
-#define M6811_OP_PSHX (0x3c)
-#define M6811_OP_STS (0x9f)
+#define M6811_OP_PSHX (0x3c)
+#define M6811_OP_STS (0x9f)
#define M6811_OP_STS_EXT (0xbf)
-#define M6811_OP_TSX (0x30)
-#define M6811_OP_XGDX (0x8f)
-#define M6811_OP_ADDD (0xc3)
-#define M6811_OP_TXS (0x35)
-#define M6811_OP_DES (0x34)
+#define M6811_OP_TSX (0x30)
+#define M6811_OP_XGDX (0x8f)
+#define M6811_OP_ADDD (0xc3)
+#define M6811_OP_TXS (0x35)
+#define M6811_OP_DES (0x34)
/* 68HC12 opcodes. */
-#define M6812_OP_PAGE2 (0x18)
-#define M6812_OP_MOVW (0x01)
-#define M6812_PB_PSHW (0xae)
-#define M6812_OP_STS (0x5f)
+#define M6812_OP_PAGE2 (0x18)
+#define M6812_OP_MOVW (0x01)
+#define M6812_PB_PSHW (0xae)
+#define M6812_OP_STS (0x5f)
#define M6812_OP_STS_EXT (0x7f)
-#define M6812_OP_LEAS (0x1b)
-#define M6812_OP_PSHX (0x34)
-#define M6812_OP_PSHY (0x35)
+#define M6812_OP_LEAS (0x1b)
+#define M6812_OP_PSHX (0x34)
+#define M6812_OP_PSHY (0x35)
/* Operand extraction. */
-#define OP_DIRECT (0x100) /* 8-byte direct addressing. */
-#define OP_IMM_LOW (0x200) /* Low part of 16-bit constant/address. */
-#define OP_IMM_HIGH (0x300) /* High part of 16-bit constant/address. */
-#define OP_PBYTE (0x400) /* 68HC12 indexed operand. */
+#define OP_DIRECT (0x100) /* 8-byte direct addressing. */
+#define OP_IMM_LOW (0x200) /* Low part of 16-bit constant/address. */
+#define OP_IMM_HIGH (0x300) /* High part of 16-bit constant/address. */
+#define OP_PBYTE (0x400) /* 68HC12 indexed operand. */
/* Identification of the sequence. */
enum m6811_seq_type
@@ -451,7 +442,8 @@ enum m6811_seq_type
P_LOCAL_N /* Allocate N bytes for locals. */
};
-struct insn_sequence {
+struct insn_sequence
+{
enum m6811_seq_type type;
unsigned length;
unsigned short code[MAX_CODES];
@@ -460,29 +452,32 @@ struct insn_sequence {
/* Sequence of instructions in the 68HC11 function prologue. */
static struct insn_sequence m6811_prologue[] = {
/* Sequences to save a soft-register. */
- { P_SAVE_REG, 3, { M6811_OP_LDX, OP_DIRECT,
- M6811_OP_PSHX } },
- { P_SAVE_REG, 5, { M6811_OP_PAGE2, M6811_OP_LDX, OP_DIRECT,
- M6811_OP_PAGE2, M6811_OP_PSHX } },
- { P_SAVE_REG, 4, { M6811_OP_LDX_EXT, OP_IMM_HIGH, OP_IMM_LOW,
- M6811_OP_PSHX } },
- { P_SAVE_REG, 6, { M6811_OP_PAGE2, M6811_OP_LDX_EXT, OP_IMM_HIGH, OP_IMM_LOW,
- M6811_OP_PAGE2, M6811_OP_PSHX } },
+ { P_SAVE_REG, 3, { M6811_OP_LDX, OP_DIRECT, M6811_OP_PSHX } },
+ { P_SAVE_REG,
+ 5,
+ { M6811_OP_PAGE2, M6811_OP_LDX, OP_DIRECT, M6811_OP_PAGE2,
+ M6811_OP_PSHX } },
+ { P_SAVE_REG,
+ 4,
+ { M6811_OP_LDX_EXT, OP_IMM_HIGH, OP_IMM_LOW, M6811_OP_PSHX } },
+ { P_SAVE_REG,
+ 6,
+ { M6811_OP_PAGE2, M6811_OP_LDX_EXT, OP_IMM_HIGH, OP_IMM_LOW,
+ M6811_OP_PAGE2, M6811_OP_PSHX } },
/* Sequences to allocate local variables. */
- { P_LOCAL_N, 7, { M6811_OP_TSX,
- M6811_OP_XGDX,
- M6811_OP_ADDD, OP_IMM_HIGH, OP_IMM_LOW,
- M6811_OP_XGDX,
- M6811_OP_TXS } },
- { P_LOCAL_N, 11, { M6811_OP_PAGE2, M6811_OP_TSX,
- M6811_OP_PAGE2, M6811_OP_XGDX,
- M6811_OP_ADDD, OP_IMM_HIGH, OP_IMM_LOW,
- M6811_OP_PAGE2, M6811_OP_XGDX,
- M6811_OP_PAGE2, M6811_OP_TXS } },
- { P_LOCAL_1, 1, { M6811_OP_DES } },
- { P_LOCAL_2, 1, { M6811_OP_PSHX } },
- { P_LOCAL_2, 2, { M6811_OP_PAGE2, M6811_OP_PSHX } },
+ { P_LOCAL_N,
+ 7,
+ { M6811_OP_TSX, M6811_OP_XGDX, M6811_OP_ADDD, OP_IMM_HIGH, OP_IMM_LOW,
+ M6811_OP_XGDX, M6811_OP_TXS } },
+ { P_LOCAL_N,
+ 11,
+ { M6811_OP_PAGE2, M6811_OP_TSX, M6811_OP_PAGE2, M6811_OP_XGDX,
+ M6811_OP_ADDD, OP_IMM_HIGH, OP_IMM_LOW, M6811_OP_PAGE2, M6811_OP_XGDX,
+ M6811_OP_PAGE2, M6811_OP_TXS } },
+ { P_LOCAL_1, 1, { M6811_OP_DES } },
+ { P_LOCAL_2, 1, { M6811_OP_PSHX } },
+ { P_LOCAL_2, 2, { M6811_OP_PAGE2, M6811_OP_PSHX } },
/* Initialize the frame pointer. */
{ P_SET_FRAME, 2, { M6811_OP_STS, OP_DIRECT } },
@@ -490,19 +485,18 @@ static struct insn_sequence m6811_prologue[] = {
{ P_LAST, 0, { 0 } }
};
-
/* Sequence of instructions in the 68HC12 function prologue. */
-static struct insn_sequence m6812_prologue[] = {
- { P_SAVE_REG, 5, { M6812_OP_PAGE2, M6812_OP_MOVW, M6812_PB_PSHW,
- OP_IMM_HIGH, OP_IMM_LOW } },
- { P_SET_FRAME, 2, { M6812_OP_STS, OP_DIRECT } },
- { P_SET_FRAME, 3, { M6812_OP_STS_EXT, OP_IMM_HIGH, OP_IMM_LOW } },
- { P_LOCAL_N, 2, { M6812_OP_LEAS, OP_PBYTE } },
- { P_LOCAL_2, 1, { M6812_OP_PSHX } },
- { P_LOCAL_2, 1, { M6812_OP_PSHY } },
- { P_LAST, 0 }
-};
-
+static struct insn_sequence m6812_prologue[]
+ = { { P_SAVE_REG,
+ 5,
+ { M6812_OP_PAGE2, M6812_OP_MOVW, M6812_PB_PSHW, OP_IMM_HIGH,
+ OP_IMM_LOW } },
+ { P_SET_FRAME, 2, { M6812_OP_STS, OP_DIRECT } },
+ { P_SET_FRAME, 3, { M6812_OP_STS_EXT, OP_IMM_HIGH, OP_IMM_LOW } },
+ { P_LOCAL_N, 2, { M6812_OP_LEAS, OP_PBYTE } },
+ { P_LOCAL_2, 1, { M6812_OP_PSHX } },
+ { P_LOCAL_2, 1, { M6812_OP_PSHY } },
+ { P_LAST, 0 } };
/* Analyze the sequence of instructions starting at the given address.
Returns a pointer to the sequence when it is recognized and
@@ -527,17 +521,17 @@ m68hc11_analyze_instruction (struct gdbarch *gdbarch,
{
if (bufsize < j + 1)
{
- buffer[bufsize] = read_memory_unsigned_integer (pc + bufsize,
- 1, byte_order);
+ buffer[bufsize]
+ = read_memory_unsigned_integer (pc + bufsize, 1, byte_order);
bufsize++;
}
/* Continue while we match the opcode. */
if (seq->code[j] == buffer[j])
continue;
-
+
if ((seq->code[j] & 0xf00) == 0)
break;
-
+
/* Extract a sequence parameter (address or constant). */
switch (seq->code[j])
{
@@ -641,7 +635,7 @@ m68hc11_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
m68gc11_gdbarch_tdep *tdep = gdbarch_tdep<m68gc11_gdbarch_tdep> (gdbarch);
seq_table = tdep->prologue;
-
+
/* The 68hc11 stack is as follows:
@@ -831,7 +825,7 @@ m68hc11_frame_unwind_cache (frame_info_ptr this_frame,
this_base += stack_correction (gdbarch);
if (soft_regs[SOFT_FP_REGNUM].name)
info->saved_regs[SOFT_FP_REGNUM].set_addr (info->size - 2);
- }
+ }
if (info->return_kind == RETURN_RTC)
{
@@ -874,8 +868,7 @@ m68hc11_frame_unwind_cache (frame_info_ptr this_frame,
frame. This will be used to create a new GDB frame struct. */
static void
-m68hc11_frame_this_id (frame_info_ptr this_frame,
- void **this_prologue_cache,
+m68hc11_frame_this_id (frame_info_ptr this_frame, void **this_prologue_cache,
struct frame_id *this_id)
{
struct m68hc11_unwind_cache *info
@@ -909,8 +902,7 @@ m68hc11_frame_prev_register (frame_info_ptr this_frame,
value = trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
/* Take into account the 68HC12 specific call (PC + page). */
- if (regnum == HARD_PC_REGNUM
- && info->return_kind == RETURN_RTC
+ if (regnum == HARD_PC_REGNUM && info->return_kind == RETURN_RTC
&& use_page_register (get_frame_arch (this_frame)))
{
CORE_ADDR pc = value_as_long (value);
@@ -936,15 +928,14 @@ m68hc11_frame_prev_register (frame_info_ptr this_frame,
return value;
}
-static const struct frame_unwind m68hc11_frame_unwind = {
- "m68hc11 prologue",
- NORMAL_FRAME,
- default_frame_unwind_stop_reason,
- m68hc11_frame_this_id,
- m68hc11_frame_prev_register,
- NULL,
- default_frame_sniffer
-};
+static const struct frame_unwind m68hc11_frame_unwind
+ = { "m68hc11 prologue",
+ NORMAL_FRAME,
+ default_frame_unwind_stop_reason,
+ m68hc11_frame_this_id,
+ m68hc11_frame_prev_register,
+ NULL,
+ default_frame_sniffer };
static CORE_ADDR
m68hc11_frame_base_address (frame_info_ptr this_frame, void **this_cache)
@@ -971,12 +962,9 @@ m68hc11_frame_args_address (frame_info_ptr this_frame, void **this_cache)
return addr;
}
-static const struct frame_base m68hc11_frame_base = {
- &m68hc11_frame_unwind,
- m68hc11_frame_base_address,
- m68hc11_frame_base_address,
- m68hc11_frame_args_address
-};
+static const struct frame_base m68hc11_frame_base
+ = { &m68hc11_frame_unwind, m68hc11_frame_base_address,
+ m68hc11_frame_base_address, m68hc11_frame_args_address };
/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
frame. The frame ID's base needs to match the TOS value saved by
@@ -993,7 +981,6 @@ m68hc11_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
return frame_id_build (tos, pc);
}
-
/* Get and print the register from the given frame. */
static void
m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
@@ -1024,8 +1011,7 @@ m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
ULONGEST page;
page = get_frame_register_unsigned (frame, HARD_PAGE_REGNUM);
- gdb_printf (file, "0x%02x:%04x ", (unsigned) page,
- (unsigned) rval);
+ gdb_printf (file, "0x%02x:%04x ", (unsigned) page, (unsigned) rval);
}
else
{
@@ -1042,14 +1028,10 @@ m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
int C, Z, N, V;
unsigned char l = rval & 0xff;
- gdb_printf (file, "%c%c%c%c%c%c%c%c ",
- l & M6811_S_BIT ? 'S' : '-',
- l & M6811_X_BIT ? 'X' : '-',
- l & M6811_H_BIT ? 'H' : '-',
- l & M6811_I_BIT ? 'I' : '-',
- l & M6811_N_BIT ? 'N' : '-',
- l & M6811_Z_BIT ? 'Z' : '-',
- l & M6811_V_BIT ? 'V' : '-',
+ gdb_printf (file, "%c%c%c%c%c%c%c%c ", l & M6811_S_BIT ? 'S' : '-',
+ l & M6811_X_BIT ? 'X' : '-', l & M6811_H_BIT ? 'H' : '-',
+ l & M6811_I_BIT ? 'I' : '-', l & M6811_N_BIT ? 'N' : '-',
+ l & M6811_Z_BIT ? 'Z' : '-', l & M6811_V_BIT ? 'V' : '-',
l & M6811_C_BIT ? 'C' : '-');
N = (l & M6811_N_BIT) != 0;
Z = (l & M6811_Z_BIT) != 0;
@@ -1112,7 +1094,7 @@ m68hc11_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
gdb_printf (file, "\nCCR=");
m68hc11_print_register (gdbarch, file, frame, HARD_CCR_REGNUM);
-
+
gdb_printf (file, "\nD=");
m68hc11_print_register (gdbarch, file, frame, HARD_D_REGNUM);
@@ -1121,8 +1103,9 @@ m68hc11_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
gdb_printf (file, " Y=");
m68hc11_print_register (gdbarch, file, frame, HARD_Y_REGNUM);
-
- m68gc11_gdbarch_tdep *tdep = gdbarch_tdep<m68gc11_gdbarch_tdep> (gdbarch);
+
+ m68gc11_gdbarch_tdep *tdep
+ = gdbarch_tdep<m68gc11_gdbarch_tdep> (gdbarch);
if (tdep->use_page_register)
{
@@ -1137,7 +1120,7 @@ m68hc11_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
/* Skip registers which are not defined in the symbol table. */
if (soft_regs[i].name == 0)
continue;
-
+
gdb_printf (file, "D%d=", i - SOFT_D1_REGNUM + 1);
m68hc11_print_register (gdbarch, file, frame, i);
nr++;
@@ -1164,7 +1147,7 @@ m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
struct type *type;
const gdb_byte *val;
gdb_byte buf[2];
-
+
first_stack_argnum = 0;
if (return_method == return_method_struct)
regcache_cooked_write_unsigned (regcache, HARD_D_REGNUM, struct_addr);
@@ -1223,7 +1206,6 @@ m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
return sp + 2;
}
-
/* Return the GDB type object for the "standard" data type
of data in register N. */
@@ -1263,10 +1245,9 @@ m68hc11_store_return_value (struct type *type, struct regcache *regcache,
regcache->raw_write (HARD_D_REGNUM, valbuf + (len - 2));
}
else
- error (_("return of value > 4 is not supported."));
+ error (_ ("return of value > 4 is not supported."));
}
-
/* Given a return value in `regcache' with a type `type',
extract and copy its value into `valbuf'. */
@@ -1288,19 +1269,19 @@ m68hc11_extract_return_value (struct type *type, struct regcache *regcache,
break;
case 3:
- memcpy ((char*) valbuf + 1, buf, 2);
+ memcpy ((char *) valbuf + 1, buf, 2);
regcache->raw_read (HARD_X_REGNUM, buf);
memcpy (valbuf, buf + 1, 1);
break;
case 4:
- memcpy ((char*) valbuf + 2, buf, 2);
+ memcpy ((char *) valbuf + 2, buf, 2);
regcache->raw_read (HARD_X_REGNUM, buf);
memcpy (valbuf, buf, 2);
break;
default:
- error (_("bad size for return value"));
+ error (_ ("bad size for return value"));
}
}
@@ -1311,8 +1292,7 @@ m68hc11_return_value (struct gdbarch *gdbarch, struct value *function,
{
if (valtype->code () == TYPE_CODE_STRUCT
|| valtype->code () == TYPE_CODE_UNION
- || valtype->code () == TYPE_CODE_ARRAY
- || valtype->length () > 4)
+ || valtype->code () == TYPE_CODE_ARRAY || valtype->length () > 4)
return RETURN_VALUE_STRUCT_CONVENTION;
else
{
@@ -1326,19 +1306,18 @@ m68hc11_return_value (struct gdbarch *gdbarch, struct value *function,
/* Test whether the ELF symbol corresponds to a function using rtc or
rti to return. */
-
+
static void
m68hc11_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
{
unsigned char flags;
- flags = ((elf_symbol_type *)sym)->internal_elf_sym.st_other;
+ flags = ((elf_symbol_type *) sym)->internal_elf_sym.st_other;
if (flags & STO_M68HC12_FAR)
MSYMBOL_SET_RTC (msym);
if (flags & STO_M68HC12_INTERRUPT)
MSYMBOL_SET_RTI (msym);
}
-
/* 68HC11/68HC12 register groups.
Identify real hard registers and soft registers used by gcc. */
@@ -1369,10 +1348,8 @@ m68hc11_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
if (group == save_reggroup || group == restore_reggroup)
{
return (regnum <= gdbarch_num_regs (gdbarch)
- || ((regnum == SOFT_FP_REGNUM
- || regnum == SOFT_TMP_REGNUM
- || regnum == SOFT_ZS_REGNUM
- || regnum == SOFT_XY_REGNUM)
+ || ((regnum == SOFT_FP_REGNUM || regnum == SOFT_TMP_REGNUM
+ || regnum == SOFT_ZS_REGNUM || regnum == SOFT_XY_REGNUM)
&& m68hc11_register_name (gdbarch, regnum)));
}
@@ -1386,15 +1363,14 @@ m68hc11_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
if (group == m68hc11_hard_reggroup)
{
return regnum == HARD_PC_REGNUM || regnum == HARD_SP_REGNUM
- || regnum == HARD_X_REGNUM || regnum == HARD_D_REGNUM
- || regnum == HARD_Y_REGNUM || regnum == HARD_CCR_REGNUM;
+ || regnum == HARD_X_REGNUM || regnum == HARD_D_REGNUM
+ || regnum == HARD_Y_REGNUM || regnum == HARD_CCR_REGNUM;
}
return default_register_reggroup_p (gdbarch, regnum, group);
}
static struct gdbarch *
-m68hc11_gdbarch_init (struct gdbarch_info info,
- struct gdbarch_list *arches)
+m68hc11_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
int elf_flags;
@@ -1408,8 +1384,7 @@ m68hc11_gdbarch_init (struct gdbarch_info info,
elf_flags = 0;
/* Try to find a pre-existing architecture. */
- for (arches = gdbarch_list_lookup_by_info (arches, &info);
- arches != NULL;
+ for (arches = gdbarch_list_lookup_by_info (arches, &info); arches != NULL;
arches = gdbarch_list_lookup_by_info (arches->next, &info))
{
m68gc11_gdbarch_tdep *tdep
@@ -1445,14 +1420,15 @@ m68hc11_gdbarch_init (struct gdbarch_info info,
tdep->use_page_register = elf_flags & E_M68HC12_BANKS;
tdep->prologue = m6812_prologue;
set_gdbarch_addr_bit (gdbarch, elf_flags & E_M68HC12_BANKS ? 32 : 16);
- set_gdbarch_num_pseudo_regs (gdbarch,
- elf_flags & E_M68HC12_BANKS
- ? M68HC12_NUM_PSEUDO_REGS
- : M68HC11_NUM_PSEUDO_REGS);
+ set_gdbarch_num_pseudo_regs (gdbarch, elf_flags & E_M68HC12_BANKS
+ ? M68HC12_NUM_PSEUDO_REGS
+ : M68HC11_NUM_PSEUDO_REGS);
set_gdbarch_pc_regnum (gdbarch, elf_flags & E_M68HC12_BANKS
- ? M68HC12_HARD_PC_REGNUM : HARD_PC_REGNUM);
+ ? M68HC12_HARD_PC_REGNUM
+ : HARD_PC_REGNUM);
set_gdbarch_num_regs (gdbarch, elf_flags & E_M68HC12_BANKS
- ? M68HC12_NUM_REGS : M68HC11_NUM_REGS);
+ ? M68HC12_NUM_REGS
+ : M68HC11_NUM_REGS);
break;
default:
@@ -1512,7 +1488,7 @@ m68hc11_gdbarch_init (struct gdbarch_info info,
frame_unwind_append_unwinder (gdbarch, &m68hc11_frame_unwind);
frame_base_set_default (gdbarch, &m68hc11_frame_base);
-
+
/* Methods for saving / extracting a dummy frame's ID. The ID's
stack address must match the SP value returned by
PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
@@ -1528,11 +1504,11 @@ m68hc11_gdbarch_init (struct gdbarch_info info,
}
void _initialize_m68hc11_tdep ();
+
void
_initialize_m68hc11_tdep ()
{
gdbarch_register (bfd_arch_m68hc11, m68hc11_gdbarch_init);
gdbarch_register (bfd_arch_m68hc12, m68hc11_gdbarch_init);
m68hc11_init_reggroups ();
-}
-
+}