X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmips-tdep.c;h=5a4e26ca752d90ed05655aaabc92762834b76597;hb=3e5d3a5aaf64994809c15f0af12dd9260cf456e3;hp=c7684f860d1842c68856511eab517ccd7ef12dce;hpb=28e7fd62340426746f9c896cbc40c5d374ec47aa;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index c7684f860d..5a4e26ca75 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -787,7 +787,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 @@ -1115,15 +1115,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 +1133,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 +1151,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 +1159,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 +1171,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 +1179,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 +1245,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)) @@ -3273,6 +3273,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) @@ -3581,29 +3582,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; @@ -4020,7 +4013,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; @@ -7625,7 +7618,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]; @@ -7634,18 +7627,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;