Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Side by Side Diff: gdb/arm-tdep.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/arm-tdep.h ('k') | gdb/arm-wince-tdep.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
None
OLDNEW
1 /* Common target dependent code for GDB on ARM systems. 1 /* Common target dependent code for GDB on ARM systems.
2 2
3 Copyright (C) 1988-1989, 1991-1993, 1995-1996, 1998-2012 Free 3 Copyright (C) 1988-1989, 1991-1993, 1995-1996, 1998-2012 Free
4 Software Foundation, Inc. 4 Software Foundation, Inc.
5 5
6 This file is part of GDB. 6 This file is part of GDB.
7 7
8 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or 10 the Free Software Foundation; either version 3 of the License, or
(...skipping 22 matching lines...) Expand all
33 #include "value.h" 33 #include "value.h"
34 #include "arch-utils.h" 34 #include "arch-utils.h"
35 #include "osabi.h" 35 #include "osabi.h"
36 #include "frame-unwind.h" 36 #include "frame-unwind.h"
37 #include "frame-base.h" 37 #include "frame-base.h"
38 #include "trad-frame.h" 38 #include "trad-frame.h"
39 #include "objfiles.h" 39 #include "objfiles.h"
40 #include "dwarf2-frame.h" 40 #include "dwarf2-frame.h"
41 #include "gdbtypes.h" 41 #include "gdbtypes.h"
42 #include "prologue-value.h" 42 #include "prologue-value.h"
43 #include "remote.h"
43 #include "target-descriptions.h" 44 #include "target-descriptions.h"
44 #include "user-regs.h" 45 #include "user-regs.h"
45 #include "observer.h" 46 #include "observer.h"
46 47
47 #include "arm-tdep.h" 48 #include "arm-tdep.h"
48 #include "gdb/sim-arm.h" 49 #include "gdb/sim-arm.h"
49 50
50 #include "elf-bfd.h" 51 #include "elf-bfd.h"
51 #include "coff/internal.h" 52 #include "coff/internal.h"
52 #include "elf/arm.h" 53 #include "elf/arm.h"
53 54
54 #include "gdb_assert.h" 55 #include "gdb_assert.h"
55 #include "vec.h" 56 #include "vec.h"
56 57
58 #include "record.h"
59
57 #include "features/arm-with-m.c" 60 #include "features/arm-with-m.c"
61 #include "features/arm-with-m-fpa-layout.c"
62 #include "features/arm-with-m-vfp-d16.c"
58 #include "features/arm-with-iwmmxt.c" 63 #include "features/arm-with-iwmmxt.c"
59 #include "features/arm-with-vfpv2.c" 64 #include "features/arm-with-vfpv2.c"
60 #include "features/arm-with-vfpv3.c" 65 #include "features/arm-with-vfpv3.c"
61 #include "features/arm-with-neon.c" 66 #include "features/arm-with-neon.c"
62 67
63 static int arm_debug; 68 static int arm_debug;
64 69
65 /* Macros for setting and testing a bit in a minimal symbol that marks 70 /* Macros for setting and testing a bit in a minimal symbol that marks
66 it as Thumb function. The MSB of the minimal symbol's "info" field 71 it as Thumb function. The MSB of the minimal symbol's "info" field
67 is used for this purpose. 72 is used for this purpose.
(...skipping 22 matching lines...) Expand all
90 { 95 {
91 VEC(arm_mapping_symbol_s) **section_maps; 96 VEC(arm_mapping_symbol_s) **section_maps;
92 }; 97 };
93 98
94 /* The list of available "set arm ..." and "show arm ..." commands. */ 99 /* The list of available "set arm ..." and "show arm ..." commands. */
95 static struct cmd_list_element *setarmcmdlist = NULL; 100 static struct cmd_list_element *setarmcmdlist = NULL;
96 static struct cmd_list_element *showarmcmdlist = NULL; 101 static struct cmd_list_element *showarmcmdlist = NULL;
97 102
98 /* The type of floating-point to use. Keep this in sync with enum 103 /* The type of floating-point to use. Keep this in sync with enum
99 arm_float_model, and the help string in _initialize_arm_tdep. */ 104 arm_float_model, and the help string in _initialize_arm_tdep. */
100 static const char *fp_model_strings[] = 105 static const char *const fp_model_strings[] =
101 { 106 {
102 "auto", 107 "auto",
103 "softfpa", 108 "softfpa",
104 "fpa", 109 "fpa",
105 "softvfp", 110 "softvfp",
106 "vfp", 111 "vfp",
107 NULL 112 NULL
108 }; 113 };
109 114
110 /* A variable that can be configured by the user. */ 115 /* A variable that can be configured by the user. */
111 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO; 116 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
112 static const char *current_fp_model = "auto"; 117 static const char *current_fp_model = "auto";
113 118
114 /* The ABI to use. Keep this in sync with arm_abi_kind. */ 119 /* The ABI to use. Keep this in sync with arm_abi_kind. */
115 static const char *arm_abi_strings[] = 120 static const char *const arm_abi_strings[] =
116 { 121 {
117 "auto", 122 "auto",
118 "APCS", 123 "APCS",
119 "AAPCS", 124 "AAPCS",
120 NULL 125 NULL
121 }; 126 };
122 127
123 /* A variable that can be configured by the user. */ 128 /* A variable that can be configured by the user. */
124 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO; 129 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
125 static const char *arm_abi_string = "auto"; 130 static const char *arm_abi_string = "auto";
126 131
127 /* The execution mode to assume. */ 132 /* The execution mode to assume. */
128 static const char *arm_mode_strings[] = 133 static const char *const arm_mode_strings[] =
129 { 134 {
130 "auto", 135 "auto",
131 "arm", 136 "arm",
132 "thumb", 137 "thumb",
133 NULL 138 NULL
134 }; 139 };
135 140
136 static const char *arm_fallback_mode_string = "auto"; 141 static const char *arm_fallback_mode_string = "auto";
137 static const char *arm_force_mode_string = "auto"; 142 static const char *arm_force_mode_string = "auto";
138 143
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 return 0; 373 return 0;
369 } 374 }
370 375
371 /* Determine if the program counter specified in MEMADDR is in a Thumb 376 /* Determine if the program counter specified in MEMADDR is in a Thumb
372 function. This function should be called for addresses unrelated to 377 function. This function should be called for addresses unrelated to
373 any executing frame; otherwise, prefer arm_frame_is_thumb. */ 378 any executing frame; otherwise, prefer arm_frame_is_thumb. */
374 379
375 int 380 int
376 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr) 381 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
377 { 382 {
378 struct obj_section *sec;
379 struct minimal_symbol *sym; 383 struct minimal_symbol *sym;
380 char type; 384 char type;
381 struct displaced_step_closure* dsc 385 struct displaced_step_closure* dsc
382 = get_displaced_step_closure_by_addr(memaddr); 386 = get_displaced_step_closure_by_addr(memaddr);
383 387
384 /* If checking the mode of displaced instruction in copy area, the mode 388 /* If checking the mode of displaced instruction in copy area, the mode
385 should be determined by instruction on the original address. */ 389 should be determined by instruction on the original address. */
386 if (dsc) 390 if (dsc)
387 { 391 {
388 if (debug_displaced) 392 if (debug_displaced)
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 1277
1274 Since ldr/str is a very popular instruction, we can't use them as 1278 Since ldr/str is a very popular instruction, we can't use them as
1275 'fingerprint' or 'signature' of stack protector sequence. Here we choose 1279 'fingerprint' or 'signature' of stack protector sequence. Here we choose
1276 sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not 1280 sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not
1277 stripped, as the 'fingerprint' of a stack protector cdoe sequence. */ 1281 stripped, as the 'fingerprint' of a stack protector cdoe sequence. */
1278 1282
1279 static CORE_ADDR 1283 static CORE_ADDR
1280 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch) 1284 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
1281 { 1285 {
1282 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch); 1286 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1283 unsigned int address, basereg; 1287 unsigned int basereg;
1284 struct minimal_symbol *stack_chk_guard; 1288 struct minimal_symbol *stack_chk_guard;
1285 int offset; 1289 int offset;
1286 int is_thumb = arm_pc_is_thumb (gdbarch, pc); 1290 int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1287 CORE_ADDR addr; 1291 CORE_ADDR addr;
1288 1292
1289 /* Try to parse the instructions in Step 1. */ 1293 /* Try to parse the instructions in Step 1. */
1290 addr = arm_analyze_load_stack_chk_guard (pc, gdbarch, 1294 addr = arm_analyze_load_stack_chk_guard (pc, gdbarch,
1291 &basereg, &offset); 1295 &basereg, &offset);
1292 if (!addr) 1296 if (!addr)
1293 return pc; 1297 return pc;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 [stfe f4, [sp, #-12]!] 1369 [stfe f4, [sp, #-12]!]
1366 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn. */ 1370 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn. */
1367 1371
1368 static CORE_ADDR 1372 static CORE_ADDR
1369 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) 1373 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1370 { 1374 {
1371 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch); 1375 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1372 unsigned long inst; 1376 unsigned long inst;
1373 CORE_ADDR skip_pc; 1377 CORE_ADDR skip_pc;
1374 CORE_ADDR func_addr, limit_pc; 1378 CORE_ADDR func_addr, limit_pc;
1375 struct symtab_and_line sal;
1376 1379
1377 /* See if we can determine the end of the prologue via the symbol table. 1380 /* See if we can determine the end of the prologue via the symbol table.
1378 If so, then return either PC, or the PC after the prologue, whichever 1381 If so, then return either PC, or the PC after the prologue, whichever
1379 is greater. */ 1382 is greater. */
1380 if (find_pc_partial_function (pc, NULL, &func_addr, NULL)) 1383 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1381 { 1384 {
1382 CORE_ADDR post_prologue_pc 1385 CORE_ADDR post_prologue_pc
1383 = skip_prologue_using_sal (gdbarch, func_addr); 1386 = skip_prologue_using_sal (gdbarch, func_addr);
1384 struct symtab *s = find_pc_symtab (func_addr); 1387 struct symtab *s = find_pc_symtab (func_addr);
1385 1388
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1524 The comments for thumb_skip_prolog() describe the algorithm we use 1527 The comments for thumb_skip_prolog() describe the algorithm we use
1525 to detect the end of the prolog. */ 1528 to detect the end of the prolog. */
1526 /* *INDENT-ON* */ 1529 /* *INDENT-ON* */
1527 1530
1528 static void 1531 static void
1529 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc, 1532 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
1530 CORE_ADDR block_addr, struct arm_prologue_cache *cache) 1533 CORE_ADDR block_addr, struct arm_prologue_cache *cache)
1531 { 1534 {
1532 CORE_ADDR prologue_start; 1535 CORE_ADDR prologue_start;
1533 CORE_ADDR prologue_end; 1536 CORE_ADDR prologue_end;
1534 CORE_ADDR current_pc;
1535 1537
1536 if (find_pc_partial_function (block_addr, NULL, &prologue_start, 1538 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1537 &prologue_end)) 1539 &prologue_end))
1538 { 1540 {
1539 /* See comment in arm_scan_prologue for an explanation of 1541 /* See comment in arm_scan_prologue for an explanation of
1540 this heuristics. */ 1542 this heuristics. */
1541 if (prologue_end > prologue_start + 64) 1543 if (prologue_end > prologue_start + 64)
1542 { 1544 {
1543 prologue_end = prologue_start + 64; 1545 prologue_end = prologue_start + 64;
1544 } 1546 }
(...skipping 1663 matching lines...) Expand 10 before | Expand all | Expand 10 after
3208 found_stack_adjust = 1; 3210 found_stack_adjust = 1;
3209 else if ((insn & 0x0df0f000) == 0x0040d000) 3211 else if ((insn & 0x0df0f000) == 0x0040d000)
3210 /* SUB SP (register or immediate). */ 3212 /* SUB SP (register or immediate). */
3211 found_stack_adjust = 1; 3213 found_stack_adjust = 1;
3212 else if ((insn & 0x0ffffff0) == 0x01a0d000) 3214 else if ((insn & 0x0ffffff0) == 0x01a0d000)
3213 /* MOV SP. */ 3215 /* MOV SP. */
3214 found_stack_adjust = 1; 3216 found_stack_adjust = 1;
3215 else if ((insn & 0x0fff0000) == 0x08bd0000) 3217 else if ((insn & 0x0fff0000) == 0x08bd0000)
3216 /* POP (LDMIA). */ 3218 /* POP (LDMIA). */
3217 found_stack_adjust = 1; 3219 found_stack_adjust = 1;
3220 else if ((insn & 0x0fff0000) == 0x049d0000)
3221 /* POP of a single register. */
3222 found_stack_adjust = 1;
3218 } 3223 }
3219 3224
3220 if (found_stack_adjust) 3225 if (found_stack_adjust)
3221 return 1; 3226 return 1;
3222 3227
3223 return 0; 3228 return 0;
3224 } 3229 }
3225 3230
3226 3231
3227 /* When arguments must be pushed onto the stack, they go on in reverse 3232 /* When arguments must be pushed onto the stack, they go on in reverse
(...skipping 1892 matching lines...) Expand 10 before | Expand all | Expand 10 after
5120 } 5125 }
5121 5126
5122 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand 5127 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
5123 the buffer to be NEW_LEN bytes ending at ENDADDR. Return 5128 the buffer to be NEW_LEN bytes ending at ENDADDR. Return
5124 NULL if an error occurs. BUF is freed. */ 5129 NULL if an error occurs. BUF is freed. */
5125 5130
5126 static gdb_byte * 5131 static gdb_byte *
5127 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr, 5132 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
5128 int old_len, int new_len) 5133 int old_len, int new_len)
5129 { 5134 {
5130 gdb_byte *new_buf, *middle; 5135 gdb_byte *new_buf;
5131 int bytes_to_read = new_len - old_len; 5136 int bytes_to_read = new_len - old_len;
5132 5137
5133 new_buf = xmalloc (new_len); 5138 new_buf = xmalloc (new_len);
5134 memcpy (new_buf + bytes_to_read, buf, old_len); 5139 memcpy (new_buf + bytes_to_read, buf, old_len);
5135 xfree (buf); 5140 xfree (buf);
5136 if (target_read_memory (endaddr - new_len, new_buf, bytes_to_read) != 0) 5141 if (target_read_memory (endaddr - new_len, new_buf, bytes_to_read) != 0)
5137 { 5142 {
5138 xfree (new_buf); 5143 xfree (new_buf);
5139 return NULL; 5144 return NULL;
5140 } 5145 }
(...skipping 12 matching lines...) Expand all
5153 5158
5154 /* Adjust a breakpoint's address to move breakpoints out of IT blocks. 5159 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
5155 A breakpoint in an IT block may not be hit, depending on the 5160 A breakpoint in an IT block may not be hit, depending on the
5156 condition flags. */ 5161 condition flags. */
5157 static CORE_ADDR 5162 static CORE_ADDR
5158 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr) 5163 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
5159 { 5164 {
5160 gdb_byte *buf; 5165 gdb_byte *buf;
5161 char map_type; 5166 char map_type;
5162 CORE_ADDR boundary, func_start; 5167 CORE_ADDR boundary, func_start;
5163 int buf_len, buf2_len; 5168 int buf_len;
5164 enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch); 5169 enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
5165 int i, any, last_it, last_it_count; 5170 int i, any, last_it, last_it_count;
5166 5171
5167 /* If we are using BKPT breakpoints, none of this is necessary. */ 5172 /* If we are using BKPT breakpoints, none of this is necessary. */
5168 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL) 5173 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
5169 return bpaddr; 5174 return bpaddr;
5170 5175
5171 /* ARM mode does not have this problem. */ 5176 /* ARM mode does not have this problem. */
5172 if (!arm_pc_is_thumb (gdbarch, bpaddr)) 5177 if (!arm_pc_is_thumb (gdbarch, bpaddr))
5173 return bpaddr; 5178 return bpaddr;
(...skipping 1679 matching lines...) Expand 10 before | Expand all | Expand 10 after
6853 the registers in the transferred list into a contiguous range r0...rX (to 6858 the registers in the transferred list into a contiguous range r0...rX (to
6854 avoid loading PC directly and losing control of the debugged program), so we 6859 avoid loading PC directly and losing control of the debugged program), so we
6855 must undo that here. */ 6860 must undo that here. */
6856 6861
6857 static void 6862 static void
6858 cleanup_block_load_pc (struct gdbarch *gdbarch, 6863 cleanup_block_load_pc (struct gdbarch *gdbarch,
6859 struct regcache *regs, 6864 struct regcache *regs,
6860 struct displaced_step_closure *dsc) 6865 struct displaced_step_closure *dsc)
6861 { 6866 {
6862 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM); 6867 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
6863 int load_executed = condition_true (dsc->u.block.cond, status), i; 6868 int load_executed = condition_true (dsc->u.block.cond, status);
6864 unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM; 6869 unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
6865 unsigned int regs_loaded = bitcount (mask); 6870 unsigned int regs_loaded = bitcount (mask);
6866 unsigned int num_to_shuffle = regs_loaded, clobbered; 6871 unsigned int num_to_shuffle = regs_loaded, clobbered;
6867 6872
6868 /* The method employed here will fail if the register list is fully populated 6873 /* The method employed here will fail if the register list is fully populated
6869 (we need to avoid loading PC directly). */ 6874 (we need to avoid loading PC directly). */
6870 gdb_assert (num_to_shuffle < 16); 6875 gdb_assert (num_to_shuffle < 16);
6871 6876
6872 if (!load_executed) 6877 if (!load_executed)
6873 return; 6878 return;
(...skipping 1821 matching lines...) Expand 10 before | Expand all | Expand 10 after
8695 { 8700 {
8696 *lenptr = tdep->arm_breakpoint_size; 8701 *lenptr = tdep->arm_breakpoint_size;
8697 return tdep->arm_breakpoint; 8702 return tdep->arm_breakpoint;
8698 } 8703 }
8699 } 8704 }
8700 8705
8701 static void 8706 static void
8702 arm_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, 8707 arm_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
8703 int *kindptr) 8708 int *kindptr)
8704 { 8709 {
8705 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8706
8707 arm_breakpoint_from_pc (gdbarch, pcptr, kindptr); 8710 arm_breakpoint_from_pc (gdbarch, pcptr, kindptr);
8708 8711
8709 if (arm_pc_is_thumb (gdbarch, *pcptr) && *kindptr == 4) 8712 if (arm_pc_is_thumb (gdbarch, *pcptr) && *kindptr == 4)
8710 /* The documented magic value for a 32-bit Thumb-2 breakpoint, so 8713 /* The documented magic value for a 32-bit Thumb-2 breakpoint, so
8711 that this is not confused with a 32-bit ARM breakpoint. */ 8714 that this is not confused with a 32-bit ARM breakpoint. */
8712 *kindptr = 3; 8715 *kindptr = 3;
8713 } 8716 }
8714 8717
8715 /* Extract from an array REGBUF containing the (raw) register state a 8718 /* Extract from an array REGBUF containing the (raw) register state a
8716 function return value of type TYPE, and copy that, in virtual 8719 function return value of type TYPE, and copy that, in virtual
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
8999 len -= INT_REGISTER_SIZE; 9002 len -= INT_REGISTER_SIZE;
9000 valbuf += INT_REGISTER_SIZE; 9003 valbuf += INT_REGISTER_SIZE;
9001 } 9004 }
9002 } 9005 }
9003 } 9006 }
9004 9007
9005 9008
9006 /* Handle function return values. */ 9009 /* Handle function return values. */
9007 9010
9008 static enum return_value_convention 9011 static enum return_value_convention
9009 arm_return_value (struct gdbarch *gdbarch, struct type *func_type, 9012 arm_return_value (struct gdbarch *gdbarch, struct value *function,
9010 struct type *valtype, struct regcache *regcache, 9013 struct type *valtype, struct regcache *regcache,
9011 gdb_byte *readbuf, const gdb_byte *writebuf) 9014 gdb_byte *readbuf, const gdb_byte *writebuf)
9012 { 9015 {
9013 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 9016 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9017 struct type *func_type = function ? value_type (function) : NULL;
9014 enum arm_vfp_cprc_base_type vfp_base_type; 9018 enum arm_vfp_cprc_base_type vfp_base_type;
9015 int vfp_base_count; 9019 int vfp_base_count;
9016 9020
9017 if (arm_vfp_abi_for_function (gdbarch, func_type) 9021 if (arm_vfp_abi_for_function (gdbarch, func_type)
9018 && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count)) 9022 && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
9019 { 9023 {
9020 int reg_char = arm_vfp_cprc_reg_char (vfp_base_type); 9024 int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
9021 int unit_length = arm_vfp_cprc_unit_length (vfp_base_type); 9025 int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
9022 int i; 9026 int i;
9023 for (i = 0; i < vfp_base_count; i++) 9027 for (i = 0; i < vfp_base_count; i++)
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
9094 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order); 9098 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
9095 return 1; 9099 return 1;
9096 } 9100 }
9097 9101
9098 /* Recognize GCC and GNU ld's trampolines. If we are in a trampoline, 9102 /* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
9099 return the target PC. Otherwise return 0. */ 9103 return the target PC. Otherwise return 0. */
9100 9104
9101 CORE_ADDR 9105 CORE_ADDR
9102 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc) 9106 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
9103 { 9107 {
9104 char *name; 9108 const char *name;
9105 int namelen; 9109 int namelen;
9106 CORE_ADDR start_addr; 9110 CORE_ADDR start_addr;
9107 9111
9108 /* Find the starting address and name of the function containing the PC. */ 9112 /* Find the starting address and name of the function containing the PC. */
9109 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0) 9113 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
9110 return 0; 9114 return 0;
9111 9115
9112 /* If PC is in a Thumb call or return stub, return the address of the 9116 /* If PC is in a Thumb call or return stub, return the address of the
9113 target PC, which is in a register. The thunk functions are called 9117 target PC, which is in a register. The thunk functions are called
9114 _call_via_xx, where x is the register name. The possible names 9118 _call_via_xx, where x is the register name. The possible names
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
9270 arm_abi_strings[tdep->arm_abi]); 9274 arm_abi_strings[tdep->arm_abi]);
9271 else 9275 else
9272 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"), 9276 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
9273 arm_abi_string); 9277 arm_abi_string);
9274 } 9278 }
9275 9279
9276 static void 9280 static void
9277 arm_show_fallback_mode (struct ui_file *file, int from_tty, 9281 arm_show_fallback_mode (struct ui_file *file, int from_tty,
9278 struct cmd_list_element *c, const char *value) 9282 struct cmd_list_element *c, const char *value)
9279 { 9283 {
9280 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
9281
9282 fprintf_filtered (file, 9284 fprintf_filtered (file,
9283 _("The current execution mode assumed " 9285 _("The current execution mode assumed "
9284 "(when symbols are unavailable) is \"%s\".\n"), 9286 "(when symbols are unavailable) is \"%s\".\n"),
9285 arm_fallback_mode_string); 9287 arm_fallback_mode_string);
9286 } 9288 }
9287 9289
9288 static void 9290 static void
9289 arm_show_force_mode (struct ui_file *file, int from_tty, 9291 arm_show_force_mode (struct ui_file *file, int from_tty,
9290 struct cmd_list_element *c, const char *value) 9292 struct cmd_list_element *c, const char *value)
9291 { 9293 {
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
9558 } 9560 }
9559 9561
9560 /* Store the contents of BUF to a NEON quad register, by writing to 9562 /* Store the contents of BUF to a NEON quad register, by writing to
9561 two double registers. This is used to implement the quad pseudo 9563 two double registers. This is used to implement the quad pseudo
9562 registers, and for argument passing in case the quad registers are 9564 registers, and for argument passing in case the quad registers are
9563 missing; vectors are passed in quad registers when using the VFP 9565 missing; vectors are passed in quad registers when using the VFP
9564 ABI, even if a NEON unit is not present. REGNUM is the index 9566 ABI, even if a NEON unit is not present. REGNUM is the index
9565 of the quad register, in [0, 15]. */ 9567 of the quad register, in [0, 15]. */
9566 9568
9567 static void 9569 static void

error: old chunk mismatch

OLDNEW
« no previous file with comments | « gdb/arm-tdep.h ('k') | gdb/arm-wince-tdep.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698