aboutsummaryrefslogtreecommitdiff
path: root/gdb/sparc-tdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/sparc-tdep.c')
-rw-r--r--gdb/sparc-tdep.c321
1 files changed, 140 insertions, 181 deletions
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index bd3dc94..83cf1e1 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -73,16 +73,17 @@ struct regset;
#define X_A(i) (((i) >> 29) & 1)
#define X_COND(i) (((i) >> 25) & 0xf)
#define X_OP2(i) (((i) >> 22) & 0x7)
-#define X_IMM22(i) ((i) & 0x3fffff)
+#define X_IMM22(i) ((i) &0x3fffff)
#define X_OP3(i) (((i) >> 19) & 0x3f)
#define X_RS1(i) (((i) >> 14) & 0x1f)
-#define X_RS2(i) ((i) & 0x1f)
+#define X_RS2(i) ((i) &0x1f)
#define X_I(i) (((i) >> 13) & 1)
/* Sign extension macros. */
#define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
-#define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
-#define X_DISP10(i) ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
-#define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
+#define X_DISP19(i) ((((i) &0x7ffff) ^ 0x40000) - 0x40000)
+#define X_DISP10(i) \
+ ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
+#define X_SIMM13(i) ((((i) &0x1fff) ^ 0x1000) - 0x1000)
/* Macros to identify some instructions. */
/* RETURN (RETT in V8) */
#define X_RETTURN(i) ((X_OP (i) == 0x2) && (X_OP3 (i) == 0x39))
@@ -106,7 +107,6 @@ sparc_fetch_instruction (CORE_ADDR pc)
insn = (insn << 8) | buf[i];
return insn;
}
-
/* Return non-zero if the instruction corresponding to PC is an "unimp"
instruction. */
@@ -115,7 +115,7 @@ static int
sparc_is_unimp_insn (CORE_ADDR pc)
{
const unsigned long insn = sparc_fetch_instruction (pc);
-
+
return ((insn & 0xc1c00000) == 0);
}
@@ -198,7 +198,6 @@ sparc_fetch_wcookie (struct gdbarch *gdbarch)
return extract_unsigned_integer (buf, len, byte_order);
}
-
/* The functions on this page are intended to be used to classify
function arguments. */
@@ -351,30 +350,22 @@ sparc_arg_by_memory_p (const struct type *type)
}
/* Register information. */
-#define SPARC32_FPU_REGISTERS \
- "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
- "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
- "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
- "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
+#define SPARC32_FPU_REGISTERS \
+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", \
+ "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20", "f21", \
+ "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
#define SPARC32_CP0_REGISTERS \
"y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
-static const char * const sparc_core_register_names[] = {
- SPARC_CORE_REGISTERS
-};
-static const char * const sparc32_fpu_register_names[] = {
- SPARC32_FPU_REGISTERS
-};
-static const char * const sparc32_cp0_register_names[] = {
- SPARC32_CP0_REGISTERS
-};
+static const char *const sparc_core_register_names[]
+ = { SPARC_CORE_REGISTERS };
+static const char *const sparc32_fpu_register_names[]
+ = { SPARC32_FPU_REGISTERS };
+static const char *const sparc32_cp0_register_names[]
+ = { SPARC32_CP0_REGISTERS };
-static const char * const sparc32_register_names[] =
-{
- SPARC_CORE_REGISTERS,
- SPARC32_FPU_REGISTERS,
- SPARC32_CP0_REGISTERS
-};
+static const char *const sparc32_register_names[]
+ = { SPARC_CORE_REGISTERS, SPARC32_FPU_REGISTERS, SPARC32_CP0_REGISTERS };
/* Total number of registers. */
#define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
@@ -382,11 +373,9 @@ static const char * const sparc32_register_names[] =
/* We provide the aliases %d0..%d30 for the floating registers as
"psuedo" registers. */
-static const char * const sparc32_pseudo_register_names[] =
-{
- "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
- "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
-};
+static const char *const sparc32_pseudo_register_names[]
+ = { "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
+ "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30" };
/* Total number of pseudo registers. */
#define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
@@ -415,7 +404,7 @@ sparc32_register_name (struct gdbarch *gdbarch, int regnum)
return sparc32_pseudo_register_name (gdbarch, regnum);
}
-
+
/* Construct types for ISA-specific registers. */
static struct type *
@@ -484,7 +473,7 @@ sparc32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
if (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM)
return builtin_type (gdbarch)->builtin_double;
- internal_error (_("sparc32_pseudo_register_type: bad register number %d"),
+ internal_error (_ ("sparc32_pseudo_register_type: bad register number %d"),
regnum);
}
@@ -520,8 +509,8 @@ sparc32_register_type (struct gdbarch *gdbarch, int regnum)
static enum register_status
sparc32_pseudo_register_read (struct gdbarch *gdbarch,
- readable_regcache *regcache,
- int regnum, gdb_byte *buf)
+ readable_regcache *regcache, int regnum,
+ gdb_byte *buf)
{
enum register_status status;
@@ -537,8 +526,8 @@ sparc32_pseudo_register_read (struct gdbarch *gdbarch,
static void
sparc32_pseudo_register_write (struct gdbarch *gdbarch,
- struct regcache *regcache,
- int regnum, const gdb_byte *buf)
+ struct regcache *regcache, int regnum,
+ const gdb_byte *buf)
{
regnum -= gdbarch_num_regs (gdbarch);
gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
@@ -547,7 +536,7 @@ sparc32_pseudo_register_write (struct gdbarch *gdbarch,
regcache->raw_write (regnum, buf);
regcache->raw_write (regnum + 1, buf + 4);
}
-
+
/* Implement the stack_frame_destroyed_p gdbarch method. */
int
@@ -570,7 +559,6 @@ sparc_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
return X_RETTURN (insn);
}
-
static CORE_ADDR
sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
@@ -581,11 +569,9 @@ sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
static CORE_ADDR
sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
- CORE_ADDR funcaddr,
- struct value **args, int nargs,
- struct type *value_type,
- CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
- struct regcache *regcache)
+ CORE_ADDR funcaddr, struct value **args, int nargs,
+ struct type *value_type, CORE_ADDR *real_pc,
+ CORE_ADDR *bp_addr, struct regcache *regcache)
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -713,8 +699,8 @@ sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
function_call_return_method return_method,
CORE_ADDR struct_addr)
{
- CORE_ADDR call_pc = (return_method == return_method_struct
- ? (bp_addr - 12) : (bp_addr - 8));
+ CORE_ADDR call_pc
+ = (return_method == return_method_struct ? (bp_addr - 12) : (bp_addr - 8));
/* Set return address. */
regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, call_pc);
@@ -734,7 +720,6 @@ sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
return sp;
}
-
/* Use the program counter to determine the contents and size of a
breakpoint instruction. Return a pointer to a string of bytes that
@@ -744,7 +729,6 @@ sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
constexpr gdb_byte sparc_break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
typedef BP_MANIPULATION (sparc_break_insn) sparc_breakpoint;
-
/* Allocate and initialize a frame cache. */
@@ -773,7 +757,7 @@ sparc_alloc_frame_cache (void)
of each function prologue when compiling with -fstack-check. If one of
such sequences starts at START_PC, then return the address of the
instruction immediately past this sequence. Otherwise, return START_PC. */
-
+
static CORE_ADDR
sparc_skip_stack_check (const CORE_ADDR start_pc)
{
@@ -819,7 +803,7 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
}
/* sub %sp, %g1, %g1 */
- if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
+ if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I (insn)
&& X_RD (insn) == 1 && X_RS1 (insn) == 14 && X_RS2 (insn) == 1))
return start_pc;
@@ -839,7 +823,7 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
clr [%g1 - some immediate] */
/* clr [%g1 - some immediate] */
- if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
+ if (X_OP (insn) == 3 && X_OP3 (insn) == 0x4 && X_I (insn)
&& X_RS1 (insn) == 1 && X_RD (insn) == 0)
{
/* Valid stack-check sequence, return the new PC. */
@@ -855,35 +839,35 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
clr [%g1 - some immediate] */
/* clr [%g1] */
- else if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
- && X_RS1 (insn) == 1 && X_RD (insn) == 0)
+ else if (X_OP (insn) == 3 && X_OP3 (insn) == 0x4 && !X_I (insn)
+ && X_RS1 (insn) == 1 && X_RD (insn) == 0)
{
while (1)
{
/* add %g1, -<some immediate>, %g1 */
insn = sparc_fetch_instruction (pc);
pc = pc + 4;
- if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
+ if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0 && X_I (insn)
&& X_RS1 (insn) == 1 && X_RD (insn) == 1))
break;
/* clr [%g1] */
insn = sparc_fetch_instruction (pc);
pc = pc + 4;
- if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
+ if (!(X_OP (insn) == 3 && X_OP3 (insn) == 0x4 && !X_I (insn)
&& X_RD (insn) == 0 && X_RS1 (insn) == 1))
return start_pc;
}
/* clr [%g1 - some immediate] */
- if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
+ if (!(X_OP (insn) == 3 && X_OP3 (insn) == 0x4 && X_I (insn)
&& X_RS1 (insn) == 1 && X_RD (insn) == 0))
return start_pc;
/* We found a valid stack-check sequence, return the new PC. */
return pc;
}
-
+
/* Third sequence: A probing loop.
[first three instructions above]
sub %g1, %g4, %g4
@@ -900,14 +884,14 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
if (probing_loop)
{
/* sub %g1, %g4, %g4 */
- if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
+ if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I (insn)
&& X_RD (insn) == 4 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
return start_pc;
/* cmp %g1, %g4 */
insn = sparc_fetch_instruction (pc);
pc = pc + 4;
- if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x14 && !X_I(insn)
+ if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x14 && !X_I (insn)
&& X_RD (insn) == 0 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
return start_pc;
@@ -920,7 +904,7 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
/* add %g1, -<some immediate>, %g1 */
insn = sparc_fetch_instruction (pc);
pc = pc + 4;
- if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
+ if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0 && X_I (insn)
&& X_RS1 (insn) == 1 && X_RD (insn) == 1))
return start_pc;
@@ -933,9 +917,8 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
/* clr [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
insn = sparc_fetch_instruction (pc);
pc = pc + 4;
- if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4
- && X_RD (insn) == 0 && X_RS1 (insn) == 1
- && (!X_I(insn) || X_SIMM13 (insn) == 0)))
+ if (!(X_OP (insn) == 3 && X_OP3 (insn) == 0x4 && X_RD (insn) == 0
+ && X_RS1 (insn) == 1 && (!X_I (insn) || X_SIMM13 (insn) == 0)))
return start_pc;
/* We found a valid stack-check sequence, return the new PC. */
@@ -943,7 +926,7 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
/* optional: clr [%g4 - some immediate] */
insn = sparc_fetch_instruction (pc);
pc = pc + 4;
- if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
+ if (!(X_OP (insn) == 3 && X_OP3 (insn) == 0x4 && X_I (insn)
&& X_RS1 (insn) == 4 && X_RD (insn) == 0))
return pc - 4;
else
@@ -1020,9 +1003,10 @@ sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
/* Recognize stores into the corresponding stack slots. */
if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
&& ((X_I (insn)
- && X_SIMM13 (insn) == (X_OP3 (insn) == 0xe
- ? (regnum - SPARC_L0_REGNUM) * 8 + BIAS
- : (regnum - SPARC_L0_REGNUM) * 4))
+ && X_SIMM13 (insn)
+ == (X_OP3 (insn) == 0xe
+ ? (regnum - SPARC_L0_REGNUM) * 8 + BIAS
+ : (regnum - SPARC_L0_REGNUM) * 4))
|| (!X_I (insn) && regnum == SPARC_L0_REGNUM)))
{
cache->saved_regs_mask |= (1 << (regnum - SPARC_L0_REGNUM));
@@ -1062,10 +1046,8 @@ sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
}
/* Check for an arithmetic operation on %sp. */
- if (X_OP (insn) == 2
- && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
- && X_RS1 (insn) == SPARC_SP_REGNUM
- && X_RD (insn) == SPARC_SP_REGNUM)
+ if (X_OP (insn) == 2 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
+ && X_RS1 (insn) == SPARC_SP_REGNUM && X_RD (insn) == SPARC_SP_REGNUM)
{
if (X_I (insn))
{
@@ -1078,10 +1060,8 @@ sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
insn = sparc_fetch_instruction (pc + offset);
/* Check for an arithmetic operation that sets up the frame. */
- if (X_OP (insn) == 2
- && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
- && X_RS1 (insn) == SPARC_SP_REGNUM
- && X_RD (insn) == SPARC_FP_REGNUM)
+ if (X_OP (insn) == 2 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
+ && X_RS1 (insn) == SPARC_SP_REGNUM && X_RD (insn) == SPARC_FP_REGNUM)
{
cache->frameless_p = 0;
cache->frame_offset = 0;
@@ -1094,15 +1074,12 @@ sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
}
/* Check for a move (or) operation that copies the return register. */
- if (X_OP (insn) == 2
- && X_OP3 (insn) == 0x2
- && !X_I (insn)
- && X_RS1 (insn) == SPARC_G0_REGNUM
- && X_RS2 (insn) == SPARC_O7_REGNUM
+ if (X_OP (insn) == 2 && X_OP3 (insn) == 0x2 && !X_I (insn)
+ && X_RS1 (insn) == SPARC_G0_REGNUM && X_RS2 (insn) == SPARC_O7_REGNUM
&& X_RD (insn) == SPARC_I7_REGNUM)
{
- cache->copied_regs_mask |= 0x80;
- offset += 4;
+ cache->copied_regs_mask |= 0x80;
+ offset += 4;
}
return pc + offset;
@@ -1149,8 +1126,8 @@ sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
/* Recognize instructions that store incoming arguments into the
corresponding stack slots. */
- if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04
- && X_I (insn) && X_RS1 (insn) == SPARC_FP_REGNUM)
+ if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04 && X_I (insn)
+ && X_RS1 (insn) == SPARC_FP_REGNUM)
{
int regnum = X_RD (insn);
@@ -1202,15 +1179,13 @@ sparc_frame_cache (frame_info_ptr this_frame, void **this_cache)
/* This function is frameless, so %fp (%i6) holds the frame
pointer for our calling frame. Use %sp (%o6) as this frame's
base address. */
- cache->base =
- get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
+ cache->base = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
}
else
{
/* For normal frames, %fp (%i6) holds the frame pointer, the
base address for the current stack frame. */
- cache->base =
- get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
+ cache->base = get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
}
cache->base += cache->frame_offset;
@@ -1263,8 +1238,8 @@ sparc32_frame_cache (frame_info_ptr this_frame, void **this_cache)
an "unimp" instruction. If it is, then it is a struct-return
function. */
CORE_ADDR pc;
- int regnum =
- (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
+ int regnum
+ = (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
pc = get_frame_register_unsigned (this_frame, regnum) + 8;
if (sparc_is_unimp_insn (pc))
@@ -1278,8 +1253,8 @@ static void
sparc32_frame_this_id (frame_info_ptr this_frame, void **this_cache,
struct frame_id *this_id)
{
- struct sparc_frame_cache *cache =
- sparc32_frame_cache (this_frame, this_cache);
+ struct sparc_frame_cache *cache
+ = sparc32_frame_cache (this_frame, this_cache);
/* This marks the outermost frame. */
if (cache->base == 0)
@@ -1289,12 +1264,12 @@ sparc32_frame_this_id (frame_info_ptr this_frame, void **this_cache,
}
static struct value *
-sparc32_frame_prev_register (frame_info_ptr this_frame,
- void **this_cache, int regnum)
+sparc32_frame_prev_register (frame_info_ptr this_frame, void **this_cache,
+ int regnum)
{
struct gdbarch *gdbarch = get_frame_arch (this_frame);
- struct sparc_frame_cache *cache =
- sparc32_frame_cache (this_frame, this_cache);
+ struct sparc_frame_cache *cache
+ = sparc32_frame_cache (this_frame, this_cache);
if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
{
@@ -1306,8 +1281,8 @@ sparc32_frame_prev_register (frame_info_ptr this_frame,
if (cache->struct_return_p)
pc += 4;
- regnum =
- (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
+ regnum
+ = (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
pc += get_frame_register_unsigned (this_frame, regnum) + 8;
return frame_unwind_got_constant (this_frame, regnum, pc);
}
@@ -1346,34 +1321,27 @@ sparc32_frame_prev_register (frame_info_ptr this_frame,
return frame_unwind_got_register (this_frame, regnum, regnum);
}
-static const struct frame_unwind sparc32_frame_unwind =
-{
- "sparc32 prologue",
- NORMAL_FRAME,
- default_frame_unwind_stop_reason,
- sparc32_frame_this_id,
- sparc32_frame_prev_register,
- NULL,
- default_frame_sniffer
-};
-
+static const struct frame_unwind sparc32_frame_unwind
+ = { "sparc32 prologue",
+ NORMAL_FRAME,
+ default_frame_unwind_stop_reason,
+ sparc32_frame_this_id,
+ sparc32_frame_prev_register,
+ NULL,
+ default_frame_sniffer };
static CORE_ADDR
sparc32_frame_base_address (frame_info_ptr this_frame, void **this_cache)
{
- struct sparc_frame_cache *cache =
- sparc32_frame_cache (this_frame, this_cache);
+ struct sparc_frame_cache *cache
+ = sparc32_frame_cache (this_frame, this_cache);
return cache->base;
}
-static const struct frame_base sparc32_frame_base =
-{
- &sparc32_frame_unwind,
- sparc32_frame_base_address,
- sparc32_frame_base_address,
- sparc32_frame_base_address
-};
+static const struct frame_base sparc32_frame_base
+ = { &sparc32_frame_unwind, sparc32_frame_base_address,
+ sparc32_frame_base_address, sparc32_frame_base_address };
static struct frame_id
sparc_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
@@ -1385,7 +1353,6 @@ sparc_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
sp += BIAS;
return frame_id_build (sp, get_frame_pc (this_frame));
}
-
/* Extract a function return value of TYPE from REGCACHE, and copy
that into VALBUF. */
@@ -1618,19 +1585,18 @@ sparc_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op,
return true;
}
-
/* The SPARC Architecture doesn't have hardware single-step support,
and most operating systems don't implement it either, so we provide
software single-step mechanism. */
static CORE_ADDR
-sparc_analyze_control_transfer (struct regcache *regcache,
- CORE_ADDR pc, CORE_ADDR *npc)
+sparc_analyze_control_transfer (struct regcache *regcache, CORE_ADDR pc,
+ CORE_ADDR *npc)
{
unsigned long insn = sparc_fetch_instruction (pc);
int conditional_p = X_COND (insn) & 0x7;
int branch_p = 0, fused_p = 0;
- long offset = 0; /* Must be signed for sign-extend. */
+ long offset = 0; /* Must be signed for sign-extend. */
if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
{
@@ -1765,7 +1731,6 @@ sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
}
-
/* Iterate over core file register note sections. */
@@ -1782,15 +1747,13 @@ sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, tdep->fpregset,
NULL, cb_data);
}
-
static int
validate_tdesc_registers (const struct target_desc *tdesc,
struct tdesc_arch_data *tdesc_data,
const char *feature_name,
- const char * const register_names[],
- unsigned int registers_num,
- unsigned int reg_start)
+ const char *const register_names[],
+ unsigned int registers_num, unsigned int reg_start)
{
int valid_p = 1;
const struct tdesc_feature *feature;
@@ -1800,8 +1763,7 @@ validate_tdesc_registers (const struct target_desc *tdesc,
return 0;
for (unsigned int i = 0; i < registers_num; i++)
- valid_p &= tdesc_numbered_register (feature, tdesc_data,
- reg_start + i,
+ valid_p &= tdesc_numbered_register (feature, tdesc_data, reg_start + i,
register_names[i]);
return valid_p;
@@ -1847,9 +1809,9 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
/* Register numbers of various important registers. */
- set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
+ set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
- set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
+ set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
/* Call dummy code. */
set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
@@ -1858,8 +1820,8 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
set_gdbarch_return_value_as_value (gdbarch, sparc32_return_value);
- set_gdbarch_stabs_argument_has_addr
- (gdbarch, sparc32_stabs_argument_has_addr);
+ set_gdbarch_stabs_argument_has_addr (gdbarch,
+ sparc32_stabs_argument_has_addr);
set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
@@ -1899,22 +1861,23 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Validate that the descriptor provides the mandatory registers
and allocate their numbers. */
- valid_p &= validate_tdesc_registers (tdesc, tdesc_data.get (),
- "org.gnu.gdb.sparc.cpu",
- sparc_core_register_names,
- ARRAY_SIZE (sparc_core_register_names),
- SPARC_G0_REGNUM);
- valid_p &= validate_tdesc_registers (tdesc, tdesc_data.get (),
- "org.gnu.gdb.sparc.fpu",
- tdep->fpu_register_names,
- tdep->fpu_registers_num,
- SPARC_F0_REGNUM);
+ valid_p
+ &= validate_tdesc_registers (tdesc, tdesc_data.get (),
+ "org.gnu.gdb.sparc.cpu",
+ sparc_core_register_names,
+ ARRAY_SIZE (sparc_core_register_names),
+ SPARC_G0_REGNUM);
+ valid_p
+ &= validate_tdesc_registers (tdesc, tdesc_data.get (),
+ "org.gnu.gdb.sparc.fpu",
+ tdep->fpu_register_names,
+ tdep->fpu_registers_num, SPARC_F0_REGNUM);
valid_p &= validate_tdesc_registers (tdesc, tdesc_data.get (),
"org.gnu.gdb.sparc.cp0",
tdep->cp0_register_names,
tdep->cp0_registers_num,
SPARC_F0_REGNUM
- + tdep->fpu_registers_num);
+ + tdep->fpu_registers_num);
if (!valid_p)
return NULL;
@@ -1925,14 +1888,14 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* If we have register sets, enable the generic core file support. */
if (tdep->gregset)
- set_gdbarch_iterate_over_regset_sections
- (gdbarch, sparc_iterate_over_regset_sections);
+ set_gdbarch_iterate_over_regset_sections (
+ gdbarch, sparc_iterate_over_regset_sections);
register_sparc_ravenscar_ops (gdbarch);
return gdbarch;
}
-
+
/* Helper functions for dealing with register windows. */
void
@@ -2012,8 +1975,8 @@ sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
}
void
-sparc_collect_rwindow (const struct regcache *regcache,
- CORE_ADDR sp, int regnum)
+sparc_collect_rwindow (const struct regcache *regcache, CORE_ADDR sp,
+ int regnum)
{
struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -2087,8 +2050,8 @@ sparc_collect_rwindow (const struct regcache *regcache,
void
sparc32_supply_gregset (const struct sparc_gregmap *gregmap,
- struct regcache *regcache,
- int regnum, const void *gregs)
+ struct regcache *regcache, int regnum,
+ const void *gregs)
{
const gdb_byte *regs = (const gdb_byte *) gregs;
gdb_byte zero[4] = { 0 };
@@ -2148,8 +2111,8 @@ sparc32_supply_gregset (const struct sparc_gregmap *gregmap,
void
sparc32_collect_gregset (const struct sparc_gregmap *gregmap,
- const struct regcache *regcache,
- int regnum, void *gregs)
+ const struct regcache *regcache, int regnum,
+ void *gregs)
{
gdb_byte *regs = (gdb_byte *) gregs;
int i;
@@ -2199,8 +2162,8 @@ sparc32_collect_gregset (const struct sparc_gregmap *gregmap,
void
sparc32_supply_fpregset (const struct sparc_fpregmap *fpregmap,
- struct regcache *regcache,
- int regnum, const void *fpregs)
+ struct regcache *regcache, int regnum,
+ const void *fpregs)
{
const gdb_byte *regs = (const gdb_byte *) fpregs;
int i;
@@ -2218,8 +2181,8 @@ sparc32_supply_fpregset (const struct sparc_fpregmap *fpregmap,
void
sparc32_collect_fpregset (const struct sparc_fpregmap *fpregmap,
- const struct regcache *regcache,
- int regnum, void *fpregs)
+ const struct regcache *regcache, int regnum,
+ void *fpregs)
{
gdb_byte *regs = (gdb_byte *) fpregs;
int i;
@@ -2232,39 +2195,35 @@ sparc32_collect_fpregset (const struct sparc_fpregmap *fpregmap,
}
if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
- regcache->raw_collect (SPARC32_FSR_REGNUM,
- regs + fpregmap->r_fsr_offset);
+ regcache->raw_collect (SPARC32_FSR_REGNUM, regs + fpregmap->r_fsr_offset);
}
-
/* SunOS 4. */
/* From <machine/reg.h>. */
-const struct sparc_gregmap sparc32_sunos4_gregmap =
-{
- 0 * 4, /* %psr */
- 1 * 4, /* %pc */
- 2 * 4, /* %npc */
- 3 * 4, /* %y */
- -1, /* %wim */
- -1, /* %tbr */
- 4 * 4, /* %g1 */
- -1 /* %l0 */
+const struct sparc_gregmap sparc32_sunos4_gregmap = {
+ 0 * 4, /* %psr */
+ 1 * 4, /* %pc */
+ 2 * 4, /* %npc */
+ 3 * 4, /* %y */
+ -1, /* %wim */
+ -1, /* %tbr */
+ 4 * 4, /* %g1 */
+ -1 /* %l0 */
};
-const struct sparc_fpregmap sparc32_sunos4_fpregmap =
-{
- 0 * 4, /* %f0 */
- 33 * 4, /* %fsr */
+const struct sparc_fpregmap sparc32_sunos4_fpregmap = {
+ 0 * 4, /* %f0 */
+ 33 * 4, /* %fsr */
};
-const struct sparc_fpregmap sparc32_bsd_fpregmap =
-{
- 0 * 4, /* %f0 */
- 32 * 4, /* %fsr */
+const struct sparc_fpregmap sparc32_bsd_fpregmap = {
+ 0 * 4, /* %f0 */
+ 32 * 4, /* %fsr */
};
void _initialize_sparc_tdep ();
+
void
_initialize_sparc_tdep ()
{