OLD | NEW |
1 /* Target dependent code for CRIS, for GDB, the GNU debugger. | 1 /* Target dependent code for CRIS, for GDB, the GNU debugger. |
2 | 2 |
3 Copyright (C) 2001-2012 Free Software Foundation, Inc. | 3 Copyright (C) 2001-2012 Free Software Foundation, Inc. |
4 | 4 |
5 Contributed by Axis Communications AB. | 5 Contributed by Axis Communications AB. |
6 Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg. | 6 Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg. |
7 | 7 |
8 This file is part of GDB. | 8 This file is part of GDB. |
9 | 9 |
10 This program is free software; you can redistribute it and/or modify | 10 This program is free software; you can redistribute it and/or modify |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 | 144 |
145 /* CRIS version, set via the user command 'set cris-version'. Affects | 145 /* CRIS version, set via the user command 'set cris-version'. Affects |
146 register names and sizes. */ | 146 register names and sizes. */ |
147 static int usr_cmd_cris_version; | 147 static int usr_cmd_cris_version; |
148 | 148 |
149 /* Indicates whether to trust the above variable. */ | 149 /* Indicates whether to trust the above variable. */ |
150 static int usr_cmd_cris_version_valid = 0; | 150 static int usr_cmd_cris_version_valid = 0; |
151 | 151 |
152 static const char cris_mode_normal[] = "normal"; | 152 static const char cris_mode_normal[] = "normal"; |
153 static const char cris_mode_guru[] = "guru"; | 153 static const char cris_mode_guru[] = "guru"; |
154 static const char *cris_modes[] = { | 154 static const char *const cris_modes[] = { |
155 cris_mode_normal, | 155 cris_mode_normal, |
156 cris_mode_guru, | 156 cris_mode_guru, |
157 0 | 157 0 |
158 }; | 158 }; |
159 | 159 |
160 /* CRIS mode, set via the user command 'set cris-mode'. Affects | 160 /* CRIS mode, set via the user command 'set cris-mode'. Affects |
161 type of break instruction among other things. */ | 161 type of break instruction among other things. */ |
162 static const char *usr_cmd_cris_mode = cris_mode_normal; | 162 static const char *usr_cmd_cris_mode = cris_mode_normal; |
163 | 163 |
164 /* Whether to make use of Dwarf-2 CFI (default on). */ | 164 /* Whether to make use of Dwarf-2 CFI (default on). */ |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 }; | 315 }; |
316 | 316 |
317 static struct cris_unwind_cache * | 317 static struct cris_unwind_cache * |
318 cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame, | 318 cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame, |
319 void **this_cache) | 319 void **this_cache) |
320 { | 320 { |
321 struct gdbarch *gdbarch = get_frame_arch (this_frame); | 321 struct gdbarch *gdbarch = get_frame_arch (this_frame); |
322 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | 322 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); |
323 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); | 323 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
324 struct cris_unwind_cache *info; | 324 struct cris_unwind_cache *info; |
325 CORE_ADDR pc; | |
326 CORE_ADDR sp; | |
327 CORE_ADDR addr; | 325 CORE_ADDR addr; |
328 char buf[4]; | 326 char buf[4]; |
329 int i; | 327 int i; |
330 | 328 |
331 if ((*this_cache)) | 329 if ((*this_cache)) |
332 return (*this_cache); | 330 return (*this_cache); |
333 | 331 |
334 info = FRAME_OBSTACK_ZALLOC (struct cris_unwind_cache); | 332 info = FRAME_OBSTACK_ZALLOC (struct cris_unwind_cache); |
335 (*this_cache) = info; | 333 (*this_cache) = info; |
336 info->saved_regs = trad_frame_alloc_saved_regs (this_frame); | 334 info->saved_regs = trad_frame_alloc_saved_regs (this_frame); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 if (erp & 0x1) | 468 if (erp & 0x1) |
471 { | 469 { |
472 /* In delay slot - check if there's a breakpoint at the preceding | 470 /* In delay slot - check if there's a breakpoint at the preceding |
473 instruction. */ | 471 instruction. */ |
474 if (breakpoint_here_p (get_frame_address_space (this_frame), erp & ~0x1)) | 472 if (breakpoint_here_p (get_frame_address_space (this_frame), erp & ~0x1)) |
475 ret = 1; | 473 ret = 1; |
476 } | 474 } |
477 return ret; | 475 return ret; |
478 } | 476 } |
479 | 477 |
480 /* Hardware watchpoint support. */ | |
481 | |
482 /* We support 6 hardware data watchpoints, but cannot trigger on execute | |
483 (any combination of read/write is fine). */ | |
484 | |
485 int | |
486 cris_can_use_hardware_watchpoint (int type, int count, int other) | |
487 { | |
488 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch); | |
489 | |
490 /* No bookkeeping is done here; it is handled by the remote debug agent. */ | |
491 | |
492 if (tdep->cris_version != 32) | |
493 return 0; | |
494 else | |
495 /* CRISv32: Six data watchpoints, one for instructions. */ | |
496 return (((type == bp_read_watchpoint || type == bp_access_watchpoint | |
497 || type == bp_hardware_watchpoint) && count <= 6) | |
498 || (type == bp_hardware_breakpoint && count <= 1)); | |
499 } | |
500 | |
501 /* The CRISv32 hardware data watchpoints work by specifying ranges, | |
502 which have no alignment or length restrictions. */ | |
503 | |
504 int | |
505 cris_region_ok_for_watchpoint (CORE_ADDR addr, int len) | |
506 { | |
507 return 1; | |
508 } | |
509 | |
510 /* If the inferior has some watchpoint that triggered, return the | |
511 address associated with that watchpoint. Otherwise, return | |
512 zero. */ | |
513 | |
514 CORE_ADDR | |
515 cris_stopped_data_address (void) | |
516 { | |
517 CORE_ADDR eda; | |
518 eda = get_frame_register_unsigned (get_current_frame (), EDA_REGNUM); | |
519 return eda; | |
520 } | |
521 | |
522 /* The instruction environment needed to find single-step breakpoints. */ | 478 /* The instruction environment needed to find single-step breakpoints. */ |
523 | 479 |
524 typedef | 480 typedef |
525 struct instruction_environment | 481 struct instruction_environment |
526 { | 482 { |
527 unsigned long reg[NUM_GENREGS]; | 483 unsigned long reg[NUM_GENREGS]; |
528 unsigned long preg[NUM_SPECREGS]; | 484 unsigned long preg[NUM_SPECREGS]; |
529 unsigned long branch_break_address; | 485 unsigned long branch_break_address; |
530 unsigned long delay_slot_pc; | 486 unsigned long delay_slot_pc; |
531 unsigned long prefix_value; | 487 unsigned long prefix_value; |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 includes special registers such as pc and fp saved in special ways | 702 includes special registers such as pc and fp saved in special ways |
747 in the stack frame. sp is even more special: the address we return | 703 in the stack frame. sp is even more special: the address we return |
748 for it IS the sp for the next frame. */ | 704 for it IS the sp for the next frame. */ |
749 | 705 |
750 static struct cris_unwind_cache * | 706 static struct cris_unwind_cache * |
751 cris_frame_unwind_cache (struct frame_info *this_frame, | 707 cris_frame_unwind_cache (struct frame_info *this_frame, |
752 void **this_prologue_cache) | 708 void **this_prologue_cache) |
753 { | 709 { |
754 struct gdbarch *gdbarch = get_frame_arch (this_frame); | 710 struct gdbarch *gdbarch = get_frame_arch (this_frame); |
755 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | 711 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); |
756 CORE_ADDR pc; | |
757 struct cris_unwind_cache *info; | 712 struct cris_unwind_cache *info; |
758 int i; | |
759 | 713 |
760 if ((*this_prologue_cache)) | 714 if ((*this_prologue_cache)) |
761 return (*this_prologue_cache); | 715 return (*this_prologue_cache); |
762 | 716 |
763 info = FRAME_OBSTACK_ZALLOC (struct cris_unwind_cache); | 717 info = FRAME_OBSTACK_ZALLOC (struct cris_unwind_cache); |
764 (*this_prologue_cache) = info; | 718 (*this_prologue_cache) = info; |
765 info->saved_regs = trad_frame_alloc_saved_regs (this_frame); | 719 info->saved_regs = trad_frame_alloc_saved_regs (this_frame); |
766 | 720 |
767 /* Zero all fields. */ | 721 /* Zero all fields. */ |
768 info->prev_sp = 0; | 722 info->prev_sp = 0; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 return sp; | 812 return sp; |
859 } | 813 } |
860 | 814 |
861 static CORE_ADDR | 815 static CORE_ADDR |
862 cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function, | 816 cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function, |
863 struct regcache *regcache, CORE_ADDR bp_addr, | 817 struct regcache *regcache, CORE_ADDR bp_addr, |
864 int nargs, struct value **args, CORE_ADDR sp, | 818 int nargs, struct value **args, CORE_ADDR sp, |
865 int struct_return, CORE_ADDR struct_addr) | 819 int struct_return, CORE_ADDR struct_addr) |
866 { | 820 { |
867 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); | 821 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
868 int stack_alloc; | |
869 int stack_offset; | 822 int stack_offset; |
870 int argreg; | 823 int argreg; |
871 int argnum; | 824 int argnum; |
872 | 825 |
873 CORE_ADDR regval; | |
874 | |
875 /* The function's arguments and memory allocated by gdb for the arguments to | 826 /* The function's arguments and memory allocated by gdb for the arguments to |
876 point at reside in separate areas on the stack. | 827 point at reside in separate areas on the stack. |
877 Both frame pointers grow toward higher addresses. */ | 828 Both frame pointers grow toward higher addresses. */ |
878 CORE_ADDR fp_arg; | 829 CORE_ADDR fp_arg; |
879 CORE_ADDR fp_mem; | 830 CORE_ADDR fp_mem; |
880 | 831 |
881 struct stack_item *si = NULL; | 832 struct stack_item *si = NULL; |
882 | 833 |
883 /* Push the return address. */ | 834 /* Push the return address. */ |
884 regcache_cooked_write_unsigned (regcache, SRP_REGNUM, bp_addr); | 835 regcache_cooked_write_unsigned (regcache, SRP_REGNUM, bp_addr); |
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1898 regcache_cooked_read_unsigned (regcache, ARG2_REGNUM, &val); | 1849 regcache_cooked_read_unsigned (regcache, ARG2_REGNUM, &val); |
1899 store_unsigned_integer ((char *)valbuf + 4, len - 4, byte_order, val); | 1850 store_unsigned_integer ((char *)valbuf + 4, len - 4, byte_order, val); |
1900 } | 1851 } |
1901 else | 1852 else |
1902 error (_("cris_extract_return_value: type length too large")); | 1853 error (_("cris_extract_return_value: type length too large")); |
1903 } | 1854 } |
1904 | 1855 |
1905 /* Handle the CRIS return value convention. */ | 1856 /* Handle the CRIS return value convention. */ |
1906 | 1857 |
1907 static enum return_value_convention | 1858 static enum return_value_convention |
1908 cris_return_value (struct gdbarch *gdbarch, struct type *func_type, | 1859 cris_return_value (struct gdbarch *gdbarch, struct value *function, |
1909 struct type *type, struct regcache *regcache, | 1860 struct type *type, struct regcache *regcache, |
1910 gdb_byte *readbuf, const gdb_byte *writebuf) | 1861 gdb_byte *readbuf, const gdb_byte *writebuf) |
1911 { | 1862 { |
1912 if (TYPE_CODE (type) == TYPE_CODE_STRUCT | 1863 if (TYPE_CODE (type) == TYPE_CODE_STRUCT |
1913 || TYPE_CODE (type) == TYPE_CODE_UNION | 1864 || TYPE_CODE (type) == TYPE_CODE_UNION |
1914 || TYPE_LENGTH (type) > 8) | 1865 || TYPE_LENGTH (type) > 8) |
1915 /* Structs, unions, and anything larger than 8 bytes (2 registers) | 1866 /* Structs, unions, and anything larger than 8 bytes (2 registers) |
1916 goes on the stack. */ | 1867 goes on the stack. */ |
1917 return RETURN_VALUE_STRUCT_CONVENTION; | 1868 return RETURN_VALUE_STRUCT_CONVENTION; |
1918 | 1869 |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2224 static unsigned long get_data_from_address (unsigned short *inst, | 2175 static unsigned long get_data_from_address (unsigned short *inst, |
2225 CORE_ADDR address, | 2176 CORE_ADDR address, |
2226 enum bfd_endian byte_order); | 2177 enum bfd_endian byte_order); |
2227 | 2178 |
2228 /* Calculates the prefix value for the general case of offset addressing | 2179 /* Calculates the prefix value for the general case of offset addressing |
2229 mode. */ | 2180 mode. */ |
2230 | 2181 |
2231 static void | 2182 static void |
2232 bdap_prefix (unsigned short inst, inst_env_type *inst_env) | 2183 bdap_prefix (unsigned short inst, inst_env_type *inst_env) |
2233 { | 2184 { |
2234 | |
2235 long offset; | |
2236 | |
2237 /* It's invalid to be in a delay slot. */ | 2185 /* It's invalid to be in a delay slot. */ |
2238 if (inst_env->slot_needed || inst_env->prefix_found) | 2186 if (inst_env->slot_needed || inst_env->prefix_found) |
2239 { | 2187 { |
2240 inst_env->invalid = 1; | 2188 inst_env->invalid = 1; |
2241 return; | 2189 return; |
2242 } | 2190 } |
2243 | 2191 |
2244 /* The calculation of prefix_value used to be after process_autoincrement, | 2192 /* The calculation of prefix_value used to be after process_autoincrement, |
2245 but that fails for an instruction such as jsr [$r0+12] which is encoded | 2193 but that fails for an instruction such as jsr [$r0+12] which is encoded |
2246 as 5f0d 0c00 30b9 when compiled with -fpic. Since PC is operand1 it | 2194 as 5f0d 0c00 30b9 when compiled with -fpic. Since PC is operand1 it |
(...skipping 1984 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4231 set_solib_svr4_fetch_link_map_offsets | 4179 set_solib_svr4_fetch_link_map_offsets |
4232 (gdbarch, svr4_ilp32_fetch_link_map_offsets); | 4180 (gdbarch, svr4_ilp32_fetch_link_map_offsets); |
4233 | 4181 |
4234 /* FIXME: cagney/2003-08-27: It should be possible to select a CRIS | 4182 /* FIXME: cagney/2003-08-27: It should be possible to select a CRIS |
4235 disassembler, even when there is no BFD. Does something like | 4183 disassembler, even when there is no BFD. Does something like |
4236 "gdb; target remote; disassmeble *0x123" work? */ | 4184 "gdb; target remote; disassmeble *0x123" work? */ |
4237 set_gdbarch_print_insn (gdbarch, cris_delayed_get_disassembler); | 4185 set_gdbarch_print_insn (gdbarch, cris_delayed_get_disassembler); |
4238 | 4186 |
4239 return gdbarch; | 4187 return gdbarch; |
4240 } | 4188 } |
OLD | NEW |