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

Side by Side Diff: gdb/v850-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/utils.c ('k') | gdb/valarith.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Target-dependent code for the NEC V850 for GDB, the GNU debugger. 1 /* Target-dependent code for the NEC V850 for GDB, the GNU debugger.
2 2
3 Copyright (C) 1996, 1998-2005, 2007-2012 Free Software Foundation, 3 Copyright (C) 1996, 1998-2005, 2007-2012 Free Software Foundation,
4 Inc. 4 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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 E_R56_REGNUM, 95 E_R56_REGNUM,
96 E_R57_REGNUM, 96 E_R57_REGNUM,
97 E_R58_REGNUM, 97 E_R58_REGNUM,
98 E_R59_REGNUM, 98 E_R59_REGNUM,
99 E_R60_REGNUM, 99 E_R60_REGNUM,
100 E_R61_REGNUM, 100 E_R61_REGNUM,
101 E_R62_REGNUM, 101 E_R62_REGNUM,
102 E_R63_REGNUM, 102 E_R63_REGNUM,
103 E_R64_REGNUM, E_PC_REGNUM = E_R64_REGNUM, 103 E_R64_REGNUM, E_PC_REGNUM = E_R64_REGNUM,
104 E_R65_REGNUM, 104 E_R65_REGNUM,
105 E_NUM_OF_V850_REGS,
106 E_NUM_OF_V850E_REGS = E_NUM_OF_V850_REGS,
107
108 /* mpu0 system registers */
109 E_R66_REGNUM = E_NUM_OF_V850_REGS,
110 E_R67_REGNUM,
111 E_R68_REGNUM,
112 E_R69_REGNUM,
113 E_R70_REGNUM,
114 E_R71_REGNUM,
115 E_R72_REGNUM,
116 E_R73_REGNUM,
117 E_R74_REGNUM,
118 E_R75_REGNUM,
119 E_R76_REGNUM,
120 E_R77_REGNUM,
121 E_R78_REGNUM,
122 E_R79_REGNUM,
123 E_R80_REGNUM,
124 E_R81_REGNUM,
125 E_R82_REGNUM,
126 E_R83_REGNUM,
127 E_R84_REGNUM,
128 E_R85_REGNUM,
129 E_R86_REGNUM,
130 E_R87_REGNUM,
131 E_R88_REGNUM,
132 E_R89_REGNUM,
133 E_R90_REGNUM,
134 E_R91_REGNUM,
135 E_R92_REGNUM,
136 E_R93_REGNUM,
137
138 /* mpu1 system registers */
139
140 E_R94_REGNUM,
141 E_R95_REGNUM,
142 E_R96_REGNUM,
143 E_R97_REGNUM,
144 E_R98_REGNUM,
145 E_R99_REGNUM,
146 E_R100_REGNUM,
147 E_R101_REGNUM,
148 E_R102_REGNUM,
149 E_R103_REGNUM,
150 E_R104_REGNUM,
151 E_R105_REGNUM,
152 E_R106_REGNUM,
153 E_R107_REGNUM,
154 E_R108_REGNUM,
155 E_R109_REGNUM,
156 E_R110_REGNUM,
157 E_R111_REGNUM,
158 E_R112_REGNUM,
159 E_R113_REGNUM,
160 E_R114_REGNUM,
161 E_R115_REGNUM,
162 E_R116_REGNUM,
163 E_R117_REGNUM,
164 E_R118_REGNUM,
165 E_R119_REGNUM,
166 E_R120_REGNUM,
167 E_R121_REGNUM,
168
169 /* fpu system registers */
170 E_R122_REGNUM,
171 E_R123_REGNUM,
172 E_R124_REGNUM,
173 E_R125_REGNUM,
174 E_R126_REGNUM,
175 E_R127_REGNUM,
176 E_R128_REGNUM, E_FPSR_REGNUM = E_R128_REGNUM,
177 E_R129_REGNUM, E_FPEPC_REGNUM = E_R129_REGNUM,
178 E_R130_REGNUM, E_FPST_REGNUM = E_R130_REGNUM,
179 E_R131_REGNUM, E_FPCC_REGNUM = E_R131_REGNUM,
180 E_R132_REGNUM, E_FPCFG_REGNUM = E_R132_REGNUM,
181 E_R133_REGNUM,
182 E_R134_REGNUM,
183 E_R135_REGNUM,
184 E_R136_REGNUM,
185 E_R137_REGNUM,
186 E_R138_REGNUM,
187 E_R139_REGNUM,
188 E_R140_REGNUM,
189 E_R141_REGNUM,
190 E_R142_REGNUM,
191 E_R143_REGNUM,
192 E_R144_REGNUM,
193 E_R145_REGNUM,
194 E_R146_REGNUM,
195 E_R147_REGNUM,
196 E_R148_REGNUM,
105 E_NUM_REGS 197 E_NUM_REGS
106 }; 198 };
107 199
108 enum 200 enum
109 { 201 {
110 v850_reg_size = 4 202 v850_reg_size = 4
111 }; 203 };
112 204
113 /* Size of return datatype which fits into all return registers. */ 205 /* Size of return datatype which fits into all return registers. */
114 enum 206 enum
(...skipping 30 matching lines...) Expand all
145 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", 237 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
146 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", 238 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
147 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", 239 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
148 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", 240 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
149 "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7", 241 "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
150 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15", 242 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
151 "sr16", "sr17", "sr18", "sr19", "sr20", "sr21", "sr22", "sr23", 243 "sr16", "sr17", "sr18", "sr19", "sr20", "sr21", "sr22", "sr23",
152 "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31", 244 "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
153 "pc", "fp" 245 "pc", "fp"
154 }; 246 };
155 if (regnum < 0 || regnum >= E_NUM_REGS) 247 if (regnum < 0 || regnum > E_NUM_OF_V850_REGS)
156 return NULL; 248 return NULL;
157 return v850_reg_names[regnum]; 249 return v850_reg_names[regnum];
158 } 250 }
159 251
160 static const char * 252 static const char *
161 v850e_register_name (struct gdbarch *gdbarch, int regnum) 253 v850e_register_name (struct gdbarch *gdbarch, int regnum)
162 { 254 {
163 static const char *v850e_reg_names[] = 255 static const char *v850e_reg_names[] =
164 { 256 {
165 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", 257 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
166 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", 258 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
167 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", 259 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
168 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", 260 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
169 "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7", 261 "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
170 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15", 262 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
171 "ctpc", "ctpsw", "dbpc", "dbpsw", "ctbp", "sr21", "sr22", "sr23", 263 "ctpc", "ctpsw", "dbpc", "dbpsw", "ctbp", "sr21", "sr22", "sr23",
172 "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31", 264 "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
173 "pc", "fp" 265 "pc", "fp"
174 }; 266 };
267 if (regnum < 0 || regnum > E_NUM_OF_V850E_REGS)
268 return NULL;
269 return v850e_reg_names[regnum];
270 }
271
272 static const char *
273 v850e2_register_name (struct gdbarch *gdbarch, int regnum)
274 {
275 static const char *v850e2_reg_names[] =
276 {
277 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
278 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
279 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
280 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
281
282 "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
283 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
284 "ctpc", "ctpsw", "dbpc", "dbpsw", "ctbp", "sr21", "sr22", "sr23",
285 "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
286 "pc", "fp"
287
288 /* mpu0 system registers */
289 "vip", "sr33", "sr34", "sr35", "vmecr", "vmtid", "vmadr", "sr39",
290 "vpecr", "vptid", "vpadr", "sr43", "vdecr", "vdtid", "sr46", "sr47",
291 "sr48", "sr49", "sr50", "sr51", "sr52", "sr53", "sr54", "sr55",
292 "sr56", "sr57", "sr58", "sr59",
293
294 /* mpu1 system registers */
295 "mpm", "mpc", "tid", "ppa", "ppm", "ppc", "dcc", "dcv0",
296 "dcv1", "sr69", "spal", "spau", "ipa0l", "ipa0u", "ipa1l", "ipa1u",
297 "iap2l", "ipa2u", "ipa3l", "ipa3u", "dpa0l", "dpa0u", "dpa1l", "dpa1u",
298 "dpa2l", "dpa2u", "dpa3l", "dpa3u",
299
300 /* fpu system registers */
301 "sr88", "sr89", "sr90", "sr91", "sr92", "sr93", "fpsr", "fpepc",
302 "fpst", "fpcc", "fpcfg", "sr99", "sr100", "sr101", "sr102", "sr103",
303 "sr104", "sr105", "sr106", "sr107", "sr108", "sr109", "sr110", "sr111",
304 "sr112", "sr113", "sr114", "sr115"
305 };
175 if (regnum < 0 || regnum >= E_NUM_REGS) 306 if (regnum < 0 || regnum >= E_NUM_REGS)
176 return NULL; 307 return NULL;
177 return v850e_reg_names[regnum]; 308 return v850e2_reg_names[regnum];
178 } 309 }
179 310
180 /* Returns the default type for register N. */ 311 /* Returns the default type for register N. */
181 312
182 static struct type * 313 static struct type *
183 v850_register_type (struct gdbarch *gdbarch, int regnum) 314 v850_register_type (struct gdbarch *gdbarch, int regnum)
184 { 315 {
185 if (regnum == E_PC_REGNUM) 316 if (regnum == E_PC_REGNUM)
186 return builtin_type (gdbarch)->builtin_func_ptr; 317 return builtin_type (gdbarch)->builtin_func_ptr;
187 return builtin_type (gdbarch)->builtin_int32; 318 return builtin_type (gdbarch)->builtin_int32;
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 586
456 static CORE_ADDR 587 static CORE_ADDR
457 v850_analyze_prologue (struct gdbarch *gdbarch, 588 v850_analyze_prologue (struct gdbarch *gdbarch,
458 CORE_ADDR func_addr, CORE_ADDR pc, 589 CORE_ADDR func_addr, CORE_ADDR pc,
459 struct v850_frame_cache *pi, ULONGEST ctbp) 590 struct v850_frame_cache *pi, ULONGEST ctbp)
460 { 591 {
461 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 592 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
462 CORE_ADDR prologue_end, current_pc; 593 CORE_ADDR prologue_end, current_pc;
463 struct pifsr pifsrs[E_NUM_REGS + 1]; 594 struct pifsr pifsrs[E_NUM_REGS + 1];
464 struct pifsr *pifsr, *pifsr_tmp; 595 struct pifsr *pifsr, *pifsr_tmp;
465 int fp_used;
466 int ep_used; 596 int ep_used;
467 int reg; 597 int reg;
468 CORE_ADDR save_pc, save_end; 598 CORE_ADDR save_pc, save_end;
469 int regsave_func_p; 599 int regsave_func_p;
470 int r12_tmp; 600 int r12_tmp;
471 601
472 memset (&pifsrs, 0, sizeof pifsrs); 602 memset (&pifsrs, 0, sizeof pifsrs);
473 pifsr = &pifsrs[0]; 603 pifsr = &pifsrs[0];
474 604
475 prologue_end = pc; 605 prologue_end = pc;
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 extract_unsigned_integer (valbuf, len, byte_order)); 925 extract_unsigned_integer (valbuf, len, byte_order));
796 else if (len <= 2 * v850_reg_size) 926 else if (len <= 2 * v850_reg_size)
797 { 927 {
798 int i, regnum = E_V0_REGNUM; 928 int i, regnum = E_V0_REGNUM;
799 for (i = 0; i < len; i += 4) 929 for (i = 0; i < len; i += 4)
800 regcache_raw_write (regcache, regnum++, valbuf + i); 930 regcache_raw_write (regcache, regnum++, valbuf + i);
801 } 931 }
802 } 932 }
803 933
804 static enum return_value_convention 934 static enum return_value_convention
805 v850_return_value (struct gdbarch *gdbarch, struct type *func_type, 935 v850_return_value (struct gdbarch *gdbarch, struct value *function,
806 struct type *type, struct regcache *regcache, 936 struct type *type, struct regcache *regcache,
807 gdb_byte *readbuf, const gdb_byte *writebuf) 937 gdb_byte *readbuf, const gdb_byte *writebuf)
808 { 938 {
809 if (v850_use_struct_convention (type)) 939 if (v850_use_struct_convention (type))
810 return RETURN_VALUE_STRUCT_CONVENTION; 940 return RETURN_VALUE_STRUCT_CONVENTION;
811 if (writebuf) 941 if (writebuf)
812 v850_store_return_value (type, regcache, writebuf); 942 v850_store_return_value (type, regcache, writebuf);
813 else if (readbuf) 943 else if (readbuf)
814 v850_extract_return_value (type, regcache, readbuf); 944 v850_extract_return_value (type, regcache, readbuf);
815 return RETURN_VALUE_REGISTER_CONVENTION; 945 return RETURN_VALUE_REGISTER_CONVENTION;
816 } 946 }
817 947
818 const static unsigned char * 948 const static unsigned char *
819 v850_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr) 949 v850_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
820 { 950 {
821 static unsigned char breakpoint[] = { 0x85, 0x05 }; 951 static unsigned char breakpoint[] = { 0x85, 0x05 };
822 *lenptr = sizeof (breakpoint); 952 *lenptr = sizeof (breakpoint);
823 return breakpoint; 953 return breakpoint;
824 } 954 }
825 955
826 static struct v850_frame_cache * 956 static struct v850_frame_cache *
827 v850_alloc_frame_cache (struct frame_info *this_frame) 957 v850_alloc_frame_cache (struct frame_info *this_frame)
828 { 958 {
829 struct v850_frame_cache *cache; 959 struct v850_frame_cache *cache;
830 int i;
831 960
832 cache = FRAME_OBSTACK_ZALLOC (struct v850_frame_cache); 961 cache = FRAME_OBSTACK_ZALLOC (struct v850_frame_cache);
833 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame); 962 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
834 963
835 /* Base address. */ 964 /* Base address. */
836 cache->base = 0; 965 cache->base = 0;
837 cache->sp_offset = 0; 966 cache->sp_offset = 0;
838 cache->pc = 0; 967 cache->pc = 0;
839 968
840 /* Frameless until proven otherwise. */ 969 /* Frameless until proven otherwise. */
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 cache->base = get_frame_register_unsigned (this_frame, E_SP_REGNUM); 1016 cache->base = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
888 } 1017 }
889 1018
890 /* Now that we have the base address for the stack frame we can 1019 /* Now that we have the base address for the stack frame we can
891 calculate the value of sp in the calling frame. */ 1020 calculate the value of sp in the calling frame. */
892 trad_frame_set_value (cache->saved_regs, E_SP_REGNUM, 1021 trad_frame_set_value (cache->saved_regs, E_SP_REGNUM,
893 cache->base - cache->sp_offset); 1022 cache->base - cache->sp_offset);
894 1023
895 /* Adjust all the saved registers such that they contain addresses 1024 /* Adjust all the saved registers such that they contain addresses
896 instead of offsets. */ 1025 instead of offsets. */
897 for (i = 0; i < E_NUM_REGS; i++) 1026 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
898 if (trad_frame_addr_p (cache->saved_regs, i)) 1027 if (trad_frame_addr_p (cache->saved_regs, i))
899 cache->saved_regs[i].addr += cache->base; 1028 cache->saved_regs[i].addr += cache->base;
900 1029
901 /* The call instruction moves the caller's PC in the callee's LP. 1030 /* The call instruction moves the caller's PC in the callee's LP.
902 Since this is an unwind, do the reverse. Copy the location of LP 1031 Since this is an unwind, do the reverse. Copy the location of LP
903 into PC (the address / regnum) so that a request for PC will be 1032 into PC (the address / regnum) so that a request for PC will be
904 converted into a request for the LP. */ 1033 converted into a request for the LP. */
905 1034
906 cache->saved_regs[E_PC_REGNUM] = cache->saved_regs[E_LP_REGNUM]; 1035 cache->saved_regs[E_PC_REGNUM] = cache->saved_regs[E_LP_REGNUM];
907 1036
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 /* Change the register names based on the current machine type. */ 1116 /* Change the register names based on the current machine type. */
988 if (info.bfd_arch_info->arch != bfd_arch_v850) 1117 if (info.bfd_arch_info->arch != bfd_arch_v850)
989 return NULL; 1118 return NULL;
990 1119
991 gdbarch = gdbarch_alloc (&info, NULL); 1120 gdbarch = gdbarch_alloc (&info, NULL);
992 1121
993 switch (info.bfd_arch_info->mach) 1122 switch (info.bfd_arch_info->mach)
994 { 1123 {
995 case bfd_mach_v850: 1124 case bfd_mach_v850:
996 set_gdbarch_register_name (gdbarch, v850_register_name); 1125 set_gdbarch_register_name (gdbarch, v850_register_name);
1126 set_gdbarch_num_regs (gdbarch, E_NUM_OF_V850_REGS);
997 break; 1127 break;
998 case bfd_mach_v850e: 1128 case bfd_mach_v850e:
999 case bfd_mach_v850e1: 1129 case bfd_mach_v850e1:
1000 set_gdbarch_register_name (gdbarch, v850e_register_name); 1130 set_gdbarch_register_name (gdbarch, v850e_register_name);
1131 set_gdbarch_num_regs (gdbarch, E_NUM_OF_V850E_REGS);
1132 break;
1133 case bfd_mach_v850e2:
1134 case bfd_mach_v850e2v3:
1135 set_gdbarch_register_name (gdbarch, v850e2_register_name);
1136 set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
1001 break; 1137 break;
1002 } 1138 }
1003 1139
1004 set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
1005 set_gdbarch_num_pseudo_regs (gdbarch, 0); 1140 set_gdbarch_num_pseudo_regs (gdbarch, 0);
1006 set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM); 1141 set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
1007 set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM); 1142 set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1008 set_gdbarch_fp0_regnum (gdbarch, -1); 1143 set_gdbarch_fp0_regnum (gdbarch, -1);
1009 1144
1010 set_gdbarch_register_type (gdbarch, v850_register_type); 1145 set_gdbarch_register_type (gdbarch, v850_register_type);
1011 1146
1012 set_gdbarch_char_signed (gdbarch, 1); 1147 set_gdbarch_char_signed (gdbarch, 1);
1013 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT); 1148 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1014 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT); 1149 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1046 return gdbarch; 1181 return gdbarch;
1047 } 1182 }
1048 1183
1049 extern initialize_file_ftype _initialize_v850_tdep; /* -Wmissing-prototypes */ 1184 extern initialize_file_ftype _initialize_v850_tdep; /* -Wmissing-prototypes */
1050 1185
1051 void 1186 void
1052 _initialize_v850_tdep (void) 1187 _initialize_v850_tdep (void)
1053 { 1188 {
1054 register_gdbarch_init (bfd_arch_v850, v850_gdbarch_init); 1189 register_gdbarch_init (bfd_arch_v850, v850_gdbarch_init);
1055 } 1190 }
OLDNEW
« no previous file with comments | « gdb/utils.c ('k') | gdb/valarith.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698