Index: gdb/mips-tdep.c |
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c |
index 0439989ee2bf0cfdbd767ddefc10b360a59f3547..e3bb078e6c78a5a939b45623017fb774f52259fd 100644 |
--- a/gdb/mips-tdep.c |
+++ b/gdb/mips-tdep.c |
@@ -1,6 +1,6 @@ |
/* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger. |
- Copyright (C) 1988-2012 Free Software Foundation, Inc. |
+ Copyright (C) 1988-2013 Free Software Foundation, Inc. |
Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU |
and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin. |
@@ -21,7 +21,7 @@ |
along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
#include "defs.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#include "gdb_assert.h" |
#include "frame.h" |
#include "inferior.h" |
@@ -177,7 +177,7 @@ const struct register_alias mips_numeric_register_aliases[] = { |
static int mips_fpu_type_auto = 1; |
static enum mips_fpu_type mips_fpu_type = MIPS_DEFAULT_FPU_TYPE; |
-static int mips_debug = 0; |
+static unsigned int mips_debug = 0; |
/* Properties (for struct target_desc) describing the g/G packet |
layout. */ |
@@ -343,8 +343,9 @@ make_compact_addr (CORE_ADDR addr) |
"special", i.e. refers to a MIPS16 or microMIPS function, and sets |
one of the "special" bits in a minimal symbol to mark it accordingly. |
The test checks an ELF-private flag that is valid for true function |
- symbols only; in particular synthetic symbols such as for PLT stubs |
- have no ELF-private part at all. |
+ symbols only; for synthetic symbols such as for PLT stubs that have |
+ no ELF-private part at all the MIPS BFD backend arranges for this |
+ information to be carried in the asymbol's udata field instead. |
msymbol_is_mips16 and msymbol_is_micromips test the "special" bit |
in a minimal symbol. */ |
@@ -353,13 +354,18 @@ static void |
mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym) |
{ |
elf_symbol_type *elfsym = (elf_symbol_type *) sym; |
+ unsigned char st_other; |
- if ((sym->flags & BSF_SYNTHETIC) != 0) |
+ if ((sym->flags & BSF_SYNTHETIC) == 0) |
+ st_other = elfsym->internal_elf_sym.st_other; |
+ else if ((sym->flags & BSF_FUNCTION) != 0) |
+ st_other = sym->udata.i; |
+ else |
return; |
- if (ELF_ST_IS_MICROMIPS (elfsym->internal_elf_sym.st_other)) |
+ if (ELF_ST_IS_MICROMIPS (st_other)) |
MSYMBOL_TARGET_FLAG_2 (msym) = 1; |
- else if (ELF_ST_IS_MIPS16 (elfsym->internal_elf_sym.st_other)) |
+ else if (ELF_ST_IS_MIPS16 (st_other)) |
MSYMBOL_TARGET_FLAG_1 (msym) = 1; |
} |
@@ -787,7 +793,7 @@ static const signed char mips_reg3_to_reg[8] = { 16, 17, 2, 3, 4, 5, 6, 7 }; |
time across a 2400 baud serial line. Allows the user to limit this |
search. */ |
-static unsigned int heuristic_fence_post = 0; |
+static int heuristic_fence_post = 0; |
/* Number of bytes of storage in the actual machine representation for |
register N. NOTE: This defines the pseudo register type so need to |
@@ -1087,7 +1093,7 @@ static void |
show_mask_address (struct ui_file *file, int from_tty, |
struct cmd_list_element *c, const char *value) |
{ |
- struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch); |
+ struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ()); |
deprecated_show_value_hack (file, from_tty, c, value); |
switch (mask_address_var) |
@@ -1115,15 +1121,15 @@ show_mask_address (struct ui_file *file, int from_tty, |
int |
mips_pc_is_mips (CORE_ADDR memaddr) |
{ |
- struct minimal_symbol *sym; |
+ struct bound_minimal_symbol sym; |
/* Flags indicating that this is a MIPS16 or microMIPS function is |
stored by elfread.c in the high bit of the info field. Use this |
to decide if the function is standard MIPS. Otherwise if bit 0 |
of the address is clear, then this is a standard MIPS function. */ |
sym = lookup_minimal_symbol_by_pc (memaddr); |
- if (sym) |
- return msymbol_is_mips (sym); |
+ if (sym.minsym) |
+ return msymbol_is_mips (sym.minsym); |
else |
return is_mips_addr (memaddr); |
} |
@@ -1133,15 +1139,15 @@ mips_pc_is_mips (CORE_ADDR memaddr) |
int |
mips_pc_is_mips16 (struct gdbarch *gdbarch, CORE_ADDR memaddr) |
{ |
- struct minimal_symbol *sym; |
+ struct bound_minimal_symbol sym; |
/* A flag indicating that this is a MIPS16 function is stored by |
elfread.c in the high bit of the info field. Use this to decide |
if the function is MIPS16. Otherwise if bit 0 of the address is |
set, then ELF file flags will tell if this is a MIPS16 function. */ |
sym = lookup_minimal_symbol_by_pc (memaddr); |
- if (sym) |
- return msymbol_is_mips16 (sym); |
+ if (sym.minsym) |
+ return msymbol_is_mips16 (sym.minsym); |
else |
return is_mips16_addr (gdbarch, memaddr); |
} |
@@ -1151,7 +1157,7 @@ mips_pc_is_mips16 (struct gdbarch *gdbarch, CORE_ADDR memaddr) |
int |
mips_pc_is_micromips (struct gdbarch *gdbarch, CORE_ADDR memaddr) |
{ |
- struct minimal_symbol *sym; |
+ struct bound_minimal_symbol sym; |
/* A flag indicating that this is a microMIPS function is stored by |
elfread.c in the high bit of the info field. Use this to decide |
@@ -1159,8 +1165,8 @@ mips_pc_is_micromips (struct gdbarch *gdbarch, CORE_ADDR memaddr) |
is set, then ELF file flags will tell if this is a microMIPS |
function. */ |
sym = lookup_minimal_symbol_by_pc (memaddr); |
- if (sym) |
- return msymbol_is_micromips (sym); |
+ if (sym.minsym) |
+ return msymbol_is_micromips (sym.minsym); |
else |
return is_micromips_addr (gdbarch, memaddr); |
} |
@@ -1171,7 +1177,7 @@ mips_pc_is_micromips (struct gdbarch *gdbarch, CORE_ADDR memaddr) |
static enum mips_isa |
mips_pc_isa (struct gdbarch *gdbarch, CORE_ADDR memaddr) |
{ |
- struct minimal_symbol *sym; |
+ struct bound_minimal_symbol sym; |
/* A flag indicating that this is a MIPS16 or a microMIPS function |
is stored by elfread.c in the high bit of the info field. Use |
@@ -1179,11 +1185,11 @@ mips_pc_isa (struct gdbarch *gdbarch, CORE_ADDR memaddr) |
MIPS. Otherwise if bit 0 of the address is set, then ELF file |
flags will tell if this is a MIPS16 or a microMIPS function. */ |
sym = lookup_minimal_symbol_by_pc (memaddr); |
- if (sym) |
+ if (sym.minsym) |
{ |
- if (msymbol_is_micromips (sym)) |
+ if (msymbol_is_micromips (sym.minsym)) |
return ISA_MICROMIPS; |
- else if (msymbol_is_mips16 (sym)) |
+ else if (msymbol_is_mips16 (sym.minsym)) |
return ISA_MIPS16; |
else |
return ISA_MIPS; |
@@ -1245,7 +1251,7 @@ static CORE_ADDR |
mips_read_pc (struct regcache *regcache) |
{ |
int regnum = gdbarch_pc_regnum (get_regcache_arch (regcache)); |
- ULONGEST pc; |
+ LONGEST pc; |
regcache_cooked_read_signed (regcache, regnum, &pc); |
if (is_compact_addr (pc)) |
@@ -1466,8 +1472,38 @@ mips32_bc1_pc (struct gdbarch *gdbarch, struct frame_info *frame, |
return pc; |
} |
+/* Return nonzero if the gdbarch is an Octeon series. */ |
+ |
+static int |
+is_octeon (struct gdbarch *gdbarch) |
+{ |
+ const struct bfd_arch_info *info = gdbarch_bfd_arch_info (gdbarch); |
+ |
+ return (info->mach == bfd_mach_mips_octeon |
+ || info->mach == bfd_mach_mips_octeonp |
+ || info->mach == bfd_mach_mips_octeon2); |
+} |
+ |
+/* Return true if the OP represents the Octeon's BBIT instruction. */ |
+ |
+static int |
+is_octeon_bbit_op (int op, struct gdbarch *gdbarch) |
+{ |
+ if (!is_octeon (gdbarch)) |
+ return 0; |
+ /* BBIT0 is encoded as LWC2: 110 010. */ |
+ /* BBIT032 is encoded as LDC2: 110 110. */ |
+ /* BBIT1 is encoded as SWC2: 111 010. */ |
+ /* BBIT132 is encoded as SDC2: 111 110. */ |
+ if (op == 50 || op == 54 || op == 58 || op == 62) |
+ return 1; |
+ return 0; |
+} |
+ |
+ |
/* Determine where to set a single step breakpoint while considering |
branch prediction. */ |
+ |
static CORE_ADDR |
mips32_next_pc (struct frame_info *frame, CORE_ADDR pc) |
{ |
@@ -1475,14 +1511,14 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc) |
unsigned long inst; |
int op; |
inst = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL); |
+ op = itype_op (inst); |
if ((inst & 0xe0000000) != 0) /* Not a special, jump or branch |
instruction. */ |
{ |
- if (itype_op (inst) >> 2 == 5) |
+ if (op >> 2 == 5) |
/* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */ |
{ |
- op = (itype_op (inst) & 0x03); |
- switch (op) |
+ switch (op & 0x03) |
{ |
case 0: /* BEQL */ |
goto equal_branch; |
@@ -1496,18 +1532,18 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc) |
pc += 4; |
} |
} |
- else if (itype_op (inst) == 17 && itype_rs (inst) == 8) |
+ else if (op == 17 && itype_rs (inst) == 8) |
/* BC1F, BC1FL, BC1T, BC1TL: 010001 01000 */ |
pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 1); |
- else if (itype_op (inst) == 17 && itype_rs (inst) == 9 |
+ else if (op == 17 && itype_rs (inst) == 9 |
&& (itype_rt (inst) & 2) == 0) |
/* BC1ANY2F, BC1ANY2T: 010001 01001 xxx0x */ |
pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 2); |
- else if (itype_op (inst) == 17 && itype_rs (inst) == 10 |
+ else if (op == 17 && itype_rs (inst) == 10 |
&& (itype_rt (inst) & 2) == 0) |
/* BC1ANY4F, BC1ANY4T: 010001 01010 xxx0x */ |
pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 4); |
- else if (itype_op (inst) == 29) |
+ else if (op == 29) |
/* JALX: 011101 */ |
/* The new PC will be alternate mode. */ |
{ |
@@ -1517,6 +1553,25 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc) |
/* Add 1 to indicate 16-bit mode -- invert ISA mode. */ |
pc = ((pc + 4) & ~(CORE_ADDR) 0x0fffffff) + reg + 1; |
} |
+ else if (is_octeon_bbit_op (op, gdbarch)) |
+ { |
+ int bit, branch_if; |
+ |
+ branch_if = op == 58 || op == 62; |
+ bit = itype_rt (inst); |
+ |
+ /* Take into account the *32 instructions. */ |
+ if (op == 54 || op == 62) |
+ bit += 32; |
+ |
+ if (((get_frame_register_signed (frame, |
+ itype_rs (inst)) >> bit) & 1) |
+ == branch_if) |
+ pc += mips32_relative_offset (inst) + 4; |
+ else |
+ pc += 8; /* After the delay slot. */ |
+ } |
+ |
else |
pc += 4; /* Not a branch, next instruction is easy. */ |
} |
@@ -1524,7 +1579,7 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc) |
{ /* This gets way messy. */ |
/* Further subdivide into SPECIAL, REGIMM and other. */ |
- switch (op = itype_op (inst) & 0x07) /* Extract bits 28,27,26. */ |
+ switch (op & 0x07) /* Extract bits 28,27,26. */ |
{ |
case 0: /* SPECIAL */ |
op = rtype_funct (inst); |
@@ -1987,7 +2042,8 @@ fetch_mips_16 (struct gdbarch *gdbarch, CORE_ADDR pc) |
{ |
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
gdb_byte buf[8]; |
- pc &= 0xfffffffe; /* Clear the low order bit. */ |
+ |
+ pc = unmake_compact_addr (pc); /* Clear the low order bit. */ |
target_read_memory (pc, buf, 2); |
return extract_unsigned_integer (buf, 2, byte_order); |
} |
@@ -2187,7 +2243,7 @@ mips16_next_pc (struct frame_info *frame, CORE_ADDR pc) |
/* The mips_next_pc function supports single_step when the remote |
target monitor or stub is not developed enough to do a single_step. |
It works by decoding the current instruction and predicting where a |
- branch will go. This isnt hard because all the data is available. |
+ branch will go. This isn't hard because all the data is available. |
The MIPS32, MIPS16 and microMIPS variants are quite different. */ |
static CORE_ADDR |
mips_next_pc (struct frame_info *frame, CORE_ADDR pc) |
@@ -2856,7 +2912,7 @@ micromips_scan_prologue (struct gdbarch *gdbarch, |
break; |
/* LUI $v1 is used for larger $sp adjustments. */ |
- /* Discard LUI $gp is used for PIC code. */ |
+ /* Discard LUI $gp used for PIC code. */ |
case 0x10: /* POOL32I: bits 010000 */ |
if (b5s5_op (insn >> 16) == 0xd |
/* LUI: bits 010000 001101 */ |
@@ -3224,6 +3280,7 @@ restart: |
frame_reg = 30; |
frame_addr = get_frame_register_signed |
(this_frame, gdbarch_num_regs (gdbarch) + 30); |
+ frame_offset = 0; |
alloca_adjust = (unsigned) (frame_addr - (sp + low_word)); |
if (alloca_adjust > 0) |
@@ -3532,29 +3589,21 @@ mips_stub_frame_sniffer (const struct frame_unwind *self, |
gdb_byte dummy[4]; |
struct obj_section *s; |
CORE_ADDR pc = get_frame_address_in_block (this_frame); |
- struct minimal_symbol *msym; |
+ struct bound_minimal_symbol msym; |
/* Use the stub unwinder for unreadable code. */ |
if (target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0) |
return 1; |
- if (in_plt_section (pc, NULL)) |
- return 1; |
- |
- /* Binutils for MIPS puts lazy resolution stubs into .MIPS.stubs. */ |
- s = find_pc_section (pc); |
- |
- if (s != NULL |
- && strcmp (bfd_get_section_name (s->objfile->obfd, s->the_bfd_section), |
- ".MIPS.stubs") == 0) |
+ if (in_plt_section (pc) || in_mips_stubs_section (pc)) |
return 1; |
/* Calling a PIC function from a non-PIC function passes through a |
stub. The stub for foo is named ".pic.foo". */ |
msym = lookup_minimal_symbol_by_pc (pc); |
- if (msym != NULL |
- && SYMBOL_LINKAGE_NAME (msym) != NULL |
- && strncmp (SYMBOL_LINKAGE_NAME (msym), ".pic.", 5) == 0) |
+ if (msym.minsym != NULL |
+ && SYMBOL_LINKAGE_NAME (msym.minsym) != NULL |
+ && strncmp (SYMBOL_LINKAGE_NAME (msym.minsym), ".pic.", 5) == 0) |
return 1; |
return 0; |
@@ -3747,7 +3796,8 @@ micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch, |
const int atomic_sequence_length = 16; /* Instruction sequence length. */ |
int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */ |
CORE_ADDR breaks[2] = {-1, -1}; |
- CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination. */ |
+ CORE_ADDR branch_bp = 0; /* Breakpoint at branch instruction's |
+ destination. */ |
CORE_ADDR loc = pc; |
int sc_found = 0; |
ULONGEST insn; |
@@ -3893,7 +3943,7 @@ micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch, |
/* Effectively inserts the breakpoints. */ |
for (index = 0; index <= last_breakpoint; index++) |
- insert_single_step_breakpoint (gdbarch, aspace, breaks[index]); |
+ insert_single_step_breakpoint (gdbarch, aspace, breaks[index]); |
return 1; |
} |
@@ -3970,7 +4020,7 @@ heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc) |
if (start_pc == 0) |
return 0; |
- if (heuristic_fence_post == UINT_MAX || fence < VM_MIN_ADDRESS) |
+ if (heuristic_fence_post == -1 || fence < VM_MIN_ADDRESS) |
fence = VM_MIN_ADDRESS; |
instlen = mips_pc_is_mips (pc) ? MIPS_INSN32_SIZE : MIPS_INSN16_SIZE; |
@@ -5125,13 +5175,12 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function, |
for (argnum = 0; argnum < nargs; argnum++) |
{ |
struct type *arg_type = check_typedef (value_type (args[argnum])); |
- int arglen = TYPE_LENGTH (arg_type); |
/* Align to double-word if necessary. */ |
if (mips_type_needs_double_align (arg_type)) |
len = align_up (len, MIPS32_REGSIZE * 2); |
/* Allocate space on the stack. */ |
- len += align_up (arglen, MIPS32_REGSIZE); |
+ len += align_up (TYPE_LENGTH (arg_type), MIPS32_REGSIZE); |
} |
sp -= align_up (len, 16); |
@@ -5654,10 +5703,9 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, |
for (argnum = 0; argnum < nargs; argnum++) |
{ |
struct type *arg_type = check_typedef (value_type (args[argnum])); |
- int arglen = TYPE_LENGTH (arg_type); |
/* Allocate space on the stack. */ |
- len += align_up (arglen, MIPS64_REGSIZE); |
+ len += align_up (TYPE_LENGTH (arg_type), MIPS64_REGSIZE); |
} |
sp -= align_up (len, 16); |
@@ -5985,7 +6033,7 @@ mips_read_fp_register_single (struct frame_info *frame, int regno, |
int raw_size = register_size (gdbarch, regno); |
gdb_byte *raw_buffer = alloca (raw_size); |
- if (!frame_register_read (frame, regno, raw_buffer)) |
+ if (!deprecated_frame_register_read (frame, regno, raw_buffer)) |
error (_("can't read register %d (%s)"), |
regno, gdbarch_register_name (gdbarch, regno)); |
if (raw_size == 8) |
@@ -6022,7 +6070,7 @@ mips_read_fp_register_double (struct frame_info *frame, int regno, |
{ |
/* We have a 64-bit value for this register, and we should use |
all 64 bits. */ |
- if (!frame_register_read (frame, regno, rare_buffer)) |
+ if (!deprecated_frame_register_read (frame, regno, rare_buffer)) |
error (_("can't read register %d (%s)"), |
regno, gdbarch_register_name (gdbarch, regno)); |
} |
@@ -6255,7 +6303,7 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame, |
break; /* End row: large register. */ |
/* OK: get the data in raw format. */ |
- if (!frame_register_read (frame, regnum, raw_buffer)) |
+ if (!deprecated_frame_register_read (frame, regnum, raw_buffer)) |
error (_("can't read register %d (%s)"), |
regnum, gdbarch_register_name (gdbarch, regnum)); |
/* pad small registers */ |
@@ -6605,7 +6653,7 @@ show_mipsfpu_command (char *args, int from_tty) |
{ |
char *fpu; |
- if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_mips) |
+ if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_mips) |
{ |
printf_unfiltered |
("The MIPS floating-point coprocessor is unknown " |
@@ -6613,7 +6661,7 @@ show_mipsfpu_command (char *args, int from_tty) |
return; |
} |
- switch (MIPS_FPU_TYPE (target_gdbarch)) |
+ switch (MIPS_FPU_TYPE (target_gdbarch ())) |
{ |
case MIPS_FPU_SINGLE: |
fpu = "single-precision"; |
@@ -6946,7 +6994,8 @@ mips32_instruction_has_delay_slot (struct gdbarch *gdbarch, CORE_ADDR addr) |
{ |
rs = itype_rs (inst); |
rt = itype_rt (inst); |
- return (op >> 2 == 5 /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */ |
+ return (is_octeon_bbit_op (op, gdbarch) |
+ || op >> 2 == 5 /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */ |
|| op == 29 /* JALX: bits 011101 */ |
|| (op == 17 |
&& (rs == 8 |
@@ -7576,7 +7625,7 @@ mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc) |
{ |
struct gdbarch *gdbarch = get_frame_arch (frame); |
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
- struct minimal_symbol *msym; |
+ struct bound_minimal_symbol msym; |
int i; |
gdb_byte stub_code[16]; |
int32_t stub_words[4]; |
@@ -7585,18 +7634,18 @@ mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc) |
instructions inserted before foo or a three instruction sequence |
which jumps to foo. */ |
msym = lookup_minimal_symbol_by_pc (pc); |
- if (msym == NULL |
- || SYMBOL_VALUE_ADDRESS (msym) != pc |
- || SYMBOL_LINKAGE_NAME (msym) == NULL |
- || strncmp (SYMBOL_LINKAGE_NAME (msym), ".pic.", 5) != 0) |
+ if (msym.minsym == NULL |
+ || SYMBOL_VALUE_ADDRESS (msym.minsym) != pc |
+ || SYMBOL_LINKAGE_NAME (msym.minsym) == NULL |
+ || strncmp (SYMBOL_LINKAGE_NAME (msym.minsym), ".pic.", 5) != 0) |
return 0; |
/* A two-instruction header. */ |
- if (MSYMBOL_SIZE (msym) == 8) |
+ if (MSYMBOL_SIZE (msym.minsym) == 8) |
return pc + 8; |
/* A three-instruction (plus delay slot) trampoline. */ |
- if (MSYMBOL_SIZE (msym) == 16) |
+ if (MSYMBOL_SIZE (msym.minsym) == 16) |
{ |
if (target_read_memory (pc, stub_code, 16) != 0) |
return 0; |
@@ -7861,7 +7910,7 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
int i, num_regs; |
enum mips_fpu_type fpu_type; |
struct tdesc_arch_data *tdesc_data = NULL; |
- int elf_fpu_type = 0; |
+ int elf_fpu_type = Val_GNU_MIPS_ABI_FP_ANY; |
const char **reg_names; |
struct mips_regnum mips_regnum, *regnum; |
enum mips_isa mips_isa; |
@@ -8186,17 +8235,17 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
if (!mips_fpu_type_auto) |
fpu_type = mips_fpu_type; |
- else if (elf_fpu_type != 0) |
+ else if (elf_fpu_type != Val_GNU_MIPS_ABI_FP_ANY) |
{ |
switch (elf_fpu_type) |
{ |
- case 1: |
+ case Val_GNU_MIPS_ABI_FP_DOUBLE: |
fpu_type = MIPS_FPU_DOUBLE; |
break; |
- case 2: |
+ case Val_GNU_MIPS_ABI_FP_SINGLE: |
fpu_type = MIPS_FPU_SINGLE; |
break; |
- case 3: |
+ case Val_GNU_MIPS_ABI_FP_SOFT: |
default: |
/* Soft float or unknown. */ |
fpu_type = MIPS_FPU_NONE; |
@@ -8633,7 +8682,7 @@ show_mips_abi (struct ui_file *file, |
struct cmd_list_element *ignored_cmd, |
const char *ignored_value) |
{ |
- if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_mips) |
+ if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_mips) |
fprintf_filtered |
(file, |
"The MIPS ABI is unknown because the current architecture " |
@@ -8641,7 +8690,7 @@ show_mips_abi (struct ui_file *file, |
else |
{ |
enum mips_abi global_abi = global_mips_abi (); |
- enum mips_abi actual_abi = mips_abi (target_gdbarch); |
+ enum mips_abi actual_abi = mips_abi (target_gdbarch ()); |
const char *actual_abi_str = mips_abi_strings[actual_abi]; |
if (global_abi == MIPS_ABI_UNKNOWN) |
@@ -8879,13 +8928,13 @@ that would transfer 32 bits for some registers (e.g. SR, FSR) and\n\ |
&setlist, &showlist); |
/* Debug this files internals. */ |
- add_setshow_zinteger_cmd ("mips", class_maintenance, |
- &mips_debug, _("\ |
+ add_setshow_zuinteger_cmd ("mips", class_maintenance, |
+ &mips_debug, _("\ |
Set mips debugging."), _("\ |
Show mips debugging."), _("\ |
When non-zero, mips specific debugging is enabled."), |
- NULL, |
- NULL, /* FIXME: i18n: Mips debugging is |
- currently %s. */ |
- &setdebuglist, &showdebuglist); |
+ NULL, |
+ NULL, /* FIXME: i18n: Mips debugging is |
+ currently %s. */ |
+ &setdebuglist, &showdebuglist); |
} |