Convert the RX target to make use of target descriptions.
[external/binutils.git] / gdb / v850-tdep.c
1 /* Target-dependent code for the NEC V850 for GDB, the GNU debugger.
2
3    Copyright (C) 1996-2019 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "frame.h"
22 #include "frame-base.h"
23 #include "trad-frame.h"
24 #include "frame-unwind.h"
25 #include "dwarf2-frame.h"
26 #include "gdbtypes.h"
27 #include "inferior.h"
28 #include "gdbcore.h"
29 #include "arch-utils.h"
30 #include "regcache.h"
31 #include "dis-asm.h"
32 #include "osabi.h"
33 #include "elf-bfd.h"
34 #include "elf/v850.h"
35
36 enum
37   {
38     /* General purpose registers.  */
39     E_R0_REGNUM,
40     E_R1_REGNUM,
41     E_R2_REGNUM,
42     E_R3_REGNUM, E_SP_REGNUM = E_R3_REGNUM,
43     E_R4_REGNUM,
44     E_R5_REGNUM,
45     E_R6_REGNUM, E_ARG0_REGNUM = E_R6_REGNUM,
46     E_R7_REGNUM,
47     E_R8_REGNUM,
48     E_R9_REGNUM, E_ARGLAST_REGNUM = E_R9_REGNUM,
49     E_R10_REGNUM, E_V0_REGNUM = E_R10_REGNUM,
50     E_R11_REGNUM, E_V1_REGNUM = E_R11_REGNUM,
51     E_R12_REGNUM,
52     E_R13_REGNUM,
53     E_R14_REGNUM,
54     E_R15_REGNUM,
55     E_R16_REGNUM,
56     E_R17_REGNUM,
57     E_R18_REGNUM,
58     E_R19_REGNUM,
59     E_R20_REGNUM,
60     E_R21_REGNUM,
61     E_R22_REGNUM,
62     E_R23_REGNUM,
63     E_R24_REGNUM,
64     E_R25_REGNUM,
65     E_R26_REGNUM,
66     E_R27_REGNUM,
67     E_R28_REGNUM,
68     E_R29_REGNUM, E_FP_REGNUM = E_R29_REGNUM,
69     E_R30_REGNUM, E_EP_REGNUM = E_R30_REGNUM,
70     E_R31_REGNUM, E_LP_REGNUM = E_R31_REGNUM,
71
72     /* System registers - main banks.  */
73     E_R32_REGNUM, E_SR0_REGNUM = E_R32_REGNUM,
74     E_R33_REGNUM,
75     E_R34_REGNUM,
76     E_R35_REGNUM,
77     E_R36_REGNUM,
78     E_R37_REGNUM, E_PS_REGNUM = E_R37_REGNUM,
79     E_R38_REGNUM,
80     E_R39_REGNUM,
81     E_R40_REGNUM,
82     E_R41_REGNUM,
83     E_R42_REGNUM,
84     E_R43_REGNUM,
85     E_R44_REGNUM,
86     E_R45_REGNUM,
87     E_R46_REGNUM,
88     E_R47_REGNUM,
89     E_R48_REGNUM,
90     E_R49_REGNUM,
91     E_R50_REGNUM,
92     E_R51_REGNUM,
93     E_R52_REGNUM, E_CTBP_REGNUM = E_R52_REGNUM,
94     E_R53_REGNUM,
95     E_R54_REGNUM,
96     E_R55_REGNUM,
97     E_R56_REGNUM,
98     E_R57_REGNUM,
99     E_R58_REGNUM,
100     E_R59_REGNUM,
101     E_R60_REGNUM,
102     E_R61_REGNUM,
103     E_R62_REGNUM,
104     E_R63_REGNUM,
105
106     /* PC.  */
107     E_R64_REGNUM, E_PC_REGNUM = E_R64_REGNUM,
108     E_R65_REGNUM,
109     E_NUM_OF_V850_REGS,
110     E_NUM_OF_V850E_REGS = E_NUM_OF_V850_REGS,
111
112     /* System registers - MPV (PROT00) bank.  */
113     E_R66_REGNUM = E_NUM_OF_V850_REGS,
114     E_R67_REGNUM,
115     E_R68_REGNUM,
116     E_R69_REGNUM,
117     E_R70_REGNUM,
118     E_R71_REGNUM,
119     E_R72_REGNUM,
120     E_R73_REGNUM,
121     E_R74_REGNUM,
122     E_R75_REGNUM,
123     E_R76_REGNUM,
124     E_R77_REGNUM,
125     E_R78_REGNUM,
126     E_R79_REGNUM,
127     E_R80_REGNUM,
128     E_R81_REGNUM,
129     E_R82_REGNUM,
130     E_R83_REGNUM,
131     E_R84_REGNUM,
132     E_R85_REGNUM,
133     E_R86_REGNUM,
134     E_R87_REGNUM,
135     E_R88_REGNUM,
136     E_R89_REGNUM,
137     E_R90_REGNUM,
138     E_R91_REGNUM,
139     E_R92_REGNUM,
140     E_R93_REGNUM,
141
142     /* System registers - MPU (PROT01) bank.  */
143     E_R94_REGNUM,
144     E_R95_REGNUM,
145     E_R96_REGNUM,
146     E_R97_REGNUM,
147     E_R98_REGNUM,
148     E_R99_REGNUM,
149     E_R100_REGNUM,
150     E_R101_REGNUM,
151     E_R102_REGNUM,
152     E_R103_REGNUM,
153     E_R104_REGNUM,
154     E_R105_REGNUM,
155     E_R106_REGNUM,
156     E_R107_REGNUM,
157     E_R108_REGNUM,
158     E_R109_REGNUM,
159     E_R110_REGNUM,
160     E_R111_REGNUM,
161     E_R112_REGNUM,
162     E_R113_REGNUM,
163     E_R114_REGNUM,
164     E_R115_REGNUM,
165     E_R116_REGNUM,
166     E_R117_REGNUM,
167     E_R118_REGNUM,
168     E_R119_REGNUM,
169     E_R120_REGNUM,
170     E_R121_REGNUM,
171
172     /* FPU system registers.  */
173     E_R122_REGNUM,
174     E_R123_REGNUM,
175     E_R124_REGNUM,
176     E_R125_REGNUM,
177     E_R126_REGNUM,
178     E_R127_REGNUM,
179     E_R128_REGNUM, E_FPSR_REGNUM = E_R128_REGNUM,
180     E_R129_REGNUM, E_FPEPC_REGNUM = E_R129_REGNUM,
181     E_R130_REGNUM, E_FPST_REGNUM = E_R130_REGNUM,
182     E_R131_REGNUM, E_FPCC_REGNUM = E_R131_REGNUM,
183     E_R132_REGNUM, E_FPCFG_REGNUM = E_R132_REGNUM,
184     E_R133_REGNUM,
185     E_R134_REGNUM,
186     E_R135_REGNUM,
187     E_R136_REGNUM,
188     E_R137_REGNUM,
189     E_R138_REGNUM,
190     E_R139_REGNUM,
191     E_R140_REGNUM,
192     E_R141_REGNUM,
193     E_R142_REGNUM,
194     E_R143_REGNUM,
195     E_R144_REGNUM,
196     E_R145_REGNUM,
197     E_R146_REGNUM,
198     E_R147_REGNUM,
199     E_R148_REGNUM,
200     E_R149_REGNUM,
201     E_NUM_OF_V850E2_REGS,
202
203     /* v850e3v5 system registers, selID 1 thru 7.  */
204     E_SELID_1_R0_REGNUM = E_NUM_OF_V850E2_REGS,
205     E_SELID_1_R31_REGNUM = E_SELID_1_R0_REGNUM + 31,
206
207     E_SELID_2_R0_REGNUM,
208     E_SELID_2_R31_REGNUM = E_SELID_2_R0_REGNUM + 31,
209
210     E_SELID_3_R0_REGNUM,
211     E_SELID_3_R31_REGNUM = E_SELID_3_R0_REGNUM + 31,
212
213     E_SELID_4_R0_REGNUM,
214     E_SELID_4_R31_REGNUM = E_SELID_4_R0_REGNUM + 31,
215
216     E_SELID_5_R0_REGNUM,
217     E_SELID_5_R31_REGNUM = E_SELID_5_R0_REGNUM + 31,
218
219     E_SELID_6_R0_REGNUM,
220     E_SELID_6_R31_REGNUM = E_SELID_6_R0_REGNUM + 31,
221
222     E_SELID_7_R0_REGNUM,
223     E_SELID_7_R31_REGNUM = E_SELID_7_R0_REGNUM + 31,
224
225     /* v850e3v5 vector registers.  */
226     E_VR0_REGNUM,
227     E_VR31_REGNUM = E_VR0_REGNUM + 31,
228
229     E_NUM_OF_V850E3V5_REGS,
230
231     /* Total number of possible registers.  */
232     E_NUM_REGS = E_NUM_OF_V850E3V5_REGS
233   };
234
235 enum
236 {
237   v850_reg_size = 4
238 };
239
240 /* Size of return datatype which fits into all return registers.  */
241 enum
242 {
243   E_MAX_RETTYPE_SIZE_IN_REGS = 2 * v850_reg_size
244 };
245
246 /* When v850 support was added to GCC in the late nineties, the intention
247    was to follow the Green Hills ABI for v850.  In fact, the authors of
248    that support at the time thought that they were doing so.  As far as
249    I can tell, the calling conventions are correct, but the return value
250    conventions were not quite right.  Over time, the return value code
251    in this file was modified to mostly reflect what GCC was actually
252    doing instead of to actually follow the Green Hills ABI as it did
253    when the code was first written.
254
255    Renesas defined the RH850 ABI which they use in their compiler.  It
256    is similar to the original Green Hills ABI with some minor
257    differences.  */
258
259 enum v850_abi
260 {
261   V850_ABI_GCC,
262   V850_ABI_RH850
263 };
264
265 /* Architecture specific data.  */
266
267 struct gdbarch_tdep
268 {
269   /* Fields from the ELF header.  */
270   int e_flags;
271   int e_machine;
272
273   /* Which ABI are we using?  */
274   enum v850_abi abi;
275   int eight_byte_align;
276 };
277
278 struct v850_frame_cache
279
280   /* Base address.  */
281   CORE_ADDR base;
282   LONGEST sp_offset;
283   CORE_ADDR pc;
284   
285   /* Flag showing that a frame has been created in the prologue code.  */
286   int uses_fp;
287   
288   /* Saved registers.  */
289   struct trad_frame_saved_reg *saved_regs;
290 };
291
292 /* Info gleaned from scanning a function's prologue.  */
293 struct pifsr            /* Info about one saved register.  */
294 {
295   int offset;           /* Offset from sp or fp.  */
296   int cur_frameoffset;  /* Current frameoffset.  */
297   int reg;              /* Saved register number.  */
298 };
299
300 static const char *
301 v850_register_name (struct gdbarch *gdbarch, int regnum)
302 {
303   static const char *v850_reg_names[] =
304   { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", 
305     "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", 
306     "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", 
307     "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
308     "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
309     "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
310     "sr16", "sr17", "sr18", "sr19", "sr20", "sr21", "sr22", "sr23",
311     "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
312     "pc", "fp"
313   };
314   if (regnum < 0 || regnum > E_NUM_OF_V850_REGS)
315     return NULL;
316   return v850_reg_names[regnum];
317 }
318
319 static const char *
320 v850e_register_name (struct gdbarch *gdbarch, int regnum)
321 {
322   static const char *v850e_reg_names[] =
323   {
324     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
325     "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
326     "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
327     "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
328     "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
329     "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
330     "ctpc", "ctpsw", "dbpc", "dbpsw", "ctbp", "sr21", "sr22", "sr23",
331     "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
332     "pc", "fp"
333   };
334   if (regnum < 0 || regnum > E_NUM_OF_V850E_REGS)
335     return NULL;
336   return v850e_reg_names[regnum];
337 }
338
339 static const char *
340 v850e2_register_name (struct gdbarch *gdbarch, int regnum)
341 {
342   static const char *v850e2_reg_names[] =
343   {
344     /* General purpose registers.  */
345     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
346     "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
347     "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
348     "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
349
350     /* System registers - main banks.  */
351     "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "pid", "cfg",
352     "", "", "", "sccfg", "scbp", "eiic", "feic", "dbic",
353     "ctpc", "ctpsw", "dbpc", "dbpsw", "ctbp", "dir", "", "",
354     "", "", "", "", "eiwr", "fewr", "dbwr", "bsel",
355
356
357     /* PC.  */
358     "pc", "",
359
360     /* System registers - MPV (PROT00) bank.  */
361     "vsecr", "vstid", "vsadr", "", "vmecr", "vmtid", "vmadr", "",
362     "vpecr", "vptid", "vpadr", "", "", "", "", "",
363     "", "", "", "", "", "", "", "",
364     "mca", "mcs", "mcc", "mcr",
365
366     /* System registers - MPU (PROT01) bank.  */
367     "mpm", "mpc", "tid", "", "", "", "ipa0l", "ipa0u",
368     "ipa1l", "ipa1u", "ipa2l", "ipa2u", "ipa3l", "ipa3u", "ipa4l", "ipa4u",
369     "dpa0l", "dpa0u", "dpa1l", "dpa1u", "dpa2l", "dpa2u", "dpa3l", "dpa3u",
370     "dpa4l", "dpa4u", "dpa5l", "dpa5u",
371
372     /* FPU system registers.  */
373     "", "", "", "", "", "", "fpsr", "fpepc",
374     "fpst", "fpcc", "fpcfg", "fpec", "", "", "", "",
375     "", "", "", "", "", "", "", "",
376     "", "", "", "fpspc"
377   };
378   if (regnum < 0 || regnum >= E_NUM_OF_V850E2_REGS)
379     return NULL;
380   return v850e2_reg_names[regnum];
381 }
382
383 /* Implement the "register_name" gdbarch method for v850e3v5.  */
384
385 static const char *
386 v850e3v5_register_name (struct gdbarch *gdbarch, int regnum)
387 {
388   static const char *v850e3v5_reg_names[] =
389   {
390     /* General purpose registers.  */
391     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
392     "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
393     "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
394     "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
395
396     /* selID 0, not including FPU registers.  The FPU registers are
397        listed later on.  */
398     "eipc", "eipsw", "fepc", "fepsw",
399     "", "psw", "" /* fpsr */, "" /* fpepc */,
400     "" /* fpst */, "" /* fpcc */, "" /* fpcfg */, "" /* fpec */,
401     "sesr", "eiic", "feic", "",
402     "ctpc", "ctpsw", "", "", "ctbp", "", "", "",
403     "", "", "", "", "eiwr", "fewr", "", "bsel",
404
405
406     /* PC.  */
407     "pc", "",
408
409     /* v850e2 MPV bank.  */
410     "", "", "", "", "", "", "", "",
411     "", "", "", "", "", "", "", "",
412     "", "", "", "", "", "", "", "",
413     "", "", "", "",
414
415     /* Skip v850e2 MPU bank.  It's tempting to reuse these, but we need
416        32 entries for this bank.  */
417     "", "", "", "", "", "", "", "",
418     "", "", "", "", "", "", "", "",
419     "", "", "", "", "", "", "", "",
420     "", "", "", "",
421
422     /* FPU system registers.  These are actually in selID 0, but
423        are placed here to preserve register numbering compatibility
424        with previous architectures.  */
425     "", "", "", "", "", "", "fpsr", "fpepc",
426     "fpst", "fpcc", "fpcfg", "fpec", "", "", "", "",
427     "", "", "", "", "", "", "", "",
428     "", "", "", "",
429
430     /* selID 1.  */
431     "mcfg0", "mcfg1", "rbase", "ebase", "intbp", "mctl", "pid", "fpipr",
432     "", "", "tcsel", "sccfg", "scbp", "hvccfg", "hvcbp", "vsel",
433     "vmprt0", "vmprt1", "vmprt2", "", "", "", "", "vmscctl",
434     "vmsctbl0", "vmsctbl1", "vmsctbl2", "vmsctbl3", "", "", "", "",
435
436     /* selID 2.  */
437     "htcfg0", "", "", "", "", "htctl", "mea", "asid",
438     "mei", "ispr", "pmr", "icsr", "intcfg", "", "", "",
439     "tlbsch", "", "", "", "", "", "", "htscctl",
440     "htsctbl0", "htsctbl1", "htsctbl2", "htsctbl3",
441     "htsctbl4", "htsctbl5", "htsctbl6", "htsctbl7",
442
443     /* selID 3.  */
444     "", "", "", "", "", "", "", "",
445     "", "", "", "", "", "", "", "",
446     "", "", "", "", "", "", "", "",
447     "", "", "", "", "", "", "", "",
448
449     /* selID 4.  */
450     "tlbidx", "", "", "", "telo0", "telo1", "tehi0", "tehi1",
451     "", "", "tlbcfg", "", "bwerrl", "bwerrh", "brerrl", "brerrh",
452     "ictagl", "ictagh", "icdatl", "icdath",
453     "dctagl", "dctagh", "dcdatl", "dcdath",
454     "icctrl", "dcctrl", "iccfg", "dccfg", "icerr", "dcerr", "", "",
455
456     /* selID 5.  */
457     "mpm", "mprc", "", "", "mpbrgn", "mptrgn", "", "",
458     "mca", "mcs", "mcc", "mcr", "", "", "", "",
459     "", "", "", "", "mpprt0", "mpprt1", "mpprt2", "",
460     "", "", "", "", "", "", "", "",
461
462     /* selID 6.  */
463     "mpla0", "mpua0", "mpat0", "", "mpla1", "mpua1", "mpat1", "",
464     "mpla2", "mpua2", "mpat2", "", "mpla3", "mpua3", "mpat3", "",
465     "mpla4", "mpua4", "mpat4", "", "mpla5", "mpua5", "mpat5", "",
466     "mpla6", "mpua6", "mpat6", "", "mpla7", "mpua7", "mpat7", "",
467
468     /* selID 7.  */
469     "mpla8", "mpua8", "mpat8", "", "mpla9", "mpua9", "mpat9", "",
470     "mpla10", "mpua10", "mpat10", "", "mpla11", "mpua11", "mpat11", "",
471     "mpla12", "mpua12", "mpat12", "", "mpla13", "mpua13", "mpat13", "",
472     "mpla14", "mpua14", "mpat14", "", "mpla15", "mpua15", "mpat15", "",
473
474     /* Vector Registers */
475     "vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
476     "vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
477     "vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
478     "vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31",
479   };
480
481   if (regnum < 0 || regnum >= E_NUM_OF_V850E3V5_REGS)
482     return NULL;
483   return v850e3v5_reg_names[regnum];
484 }
485
486 /* Returns the default type for register N.  */
487
488 static struct type *
489 v850_register_type (struct gdbarch *gdbarch, int regnum)
490 {
491   if (regnum == E_PC_REGNUM)
492     return builtin_type (gdbarch)->builtin_func_ptr;
493   else if (E_VR0_REGNUM <= regnum && regnum <= E_VR31_REGNUM)
494     return builtin_type (gdbarch)->builtin_uint64;
495   return builtin_type (gdbarch)->builtin_int32;
496 }
497
498 static int
499 v850_type_is_scalar (struct type *t)
500 {
501   return (TYPE_CODE (t) != TYPE_CODE_STRUCT
502           && TYPE_CODE (t) != TYPE_CODE_UNION
503           && TYPE_CODE (t) != TYPE_CODE_ARRAY);
504 }
505
506 /* Should call_function allocate stack space for a struct return?  */
507
508 static int
509 v850_use_struct_convention (struct gdbarch *gdbarch, struct type *type)
510 {
511   int i;
512   struct type *fld_type, *tgt_type;
513
514   if (gdbarch_tdep (gdbarch)->abi == V850_ABI_RH850)
515     {
516       if (v850_type_is_scalar (type) && TYPE_LENGTH(type) <= 8)
517         return 0;
518
519       /* Structs are never returned in registers for this ABI.  */
520       return 1;
521     }
522   /* 1. The value is greater than 8 bytes -> returned by copying.  */
523   if (TYPE_LENGTH (type) > 8)
524     return 1;
525
526   /* 2. The value is a single basic type -> returned in register.  */
527   if (v850_type_is_scalar (type))
528     return 0;
529
530   /* The value is a structure or union with a single element and that
531      element is either a single basic type or an array of a single basic
532      type whose size is greater than or equal to 4 -> returned in register.  */
533   if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
534        || TYPE_CODE (type) == TYPE_CODE_UNION)
535        && TYPE_NFIELDS (type) == 1)
536     {
537       fld_type = TYPE_FIELD_TYPE (type, 0);
538       if (v850_type_is_scalar (fld_type) && TYPE_LENGTH (fld_type) >= 4)
539         return 0;
540
541       if (TYPE_CODE (fld_type) == TYPE_CODE_ARRAY)
542         {
543           tgt_type = TYPE_TARGET_TYPE (fld_type);
544           if (v850_type_is_scalar (tgt_type) && TYPE_LENGTH (tgt_type) >= 4)
545             return 0;
546         }
547     }
548
549   /* The value is a structure whose first element is an integer or a float,
550      and which contains no arrays of more than two elements -> returned in
551      register.  */
552   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
553       && v850_type_is_scalar (TYPE_FIELD_TYPE (type, 0))
554       && TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == 4)
555     {
556       for (i = 1; i < TYPE_NFIELDS (type); ++i)
557         {
558           fld_type = TYPE_FIELD_TYPE (type, 0);
559           if (TYPE_CODE (fld_type) == TYPE_CODE_ARRAY)
560             {
561               tgt_type = TYPE_TARGET_TYPE (fld_type);
562               if (TYPE_LENGTH (tgt_type) > 0
563                   && TYPE_LENGTH (fld_type) / TYPE_LENGTH (tgt_type) > 2)
564                 return 1;
565             }
566         }
567       return 0;
568     }
569     
570   /* The value is a union which contains at least one field which
571      would be returned in registers according to these rules ->
572      returned in register.  */
573   if (TYPE_CODE (type) == TYPE_CODE_UNION)
574     {
575       for (i = 0; i < TYPE_NFIELDS (type); ++i)
576         {
577           fld_type = TYPE_FIELD_TYPE (type, 0);
578           if (!v850_use_struct_convention (gdbarch, fld_type))
579             return 0;
580         }
581     }
582
583   return 1;
584 }
585
586 /* Structure for mapping bits in register lists to register numbers.  */
587
588 struct reg_list
589 {
590   long mask;
591   int regno;
592 };
593
594 /* Helper function for v850_scan_prologue to handle prepare instruction.  */
595
596 static void
597 v850_handle_prepare (int insn, int insn2, CORE_ADDR * current_pc_ptr,
598                      struct v850_frame_cache *pi, struct pifsr **pifsr_ptr)
599 {
600   CORE_ADDR current_pc = *current_pc_ptr;
601   struct pifsr *pifsr = *pifsr_ptr;
602   long next = insn2 & 0xffff;
603   long list12 = ((insn & 1) << 16) + (next & 0xffe0);
604   long offset = (insn & 0x3e) << 1;
605   static struct reg_list reg_table[] =
606   {
607     {0x00800, 20},              /* r20 */
608     {0x00400, 21},              /* r21 */
609     {0x00200, 22},              /* r22 */
610     {0x00100, 23},              /* r23 */
611     {0x08000, 24},              /* r24 */
612     {0x04000, 25},              /* r25 */
613     {0x02000, 26},              /* r26 */
614     {0x01000, 27},              /* r27 */
615     {0x00080, 28},              /* r28 */
616     {0x00040, 29},              /* r29 */
617     {0x10000, 30},              /* ep */
618     {0x00020, 31},              /* lp */
619     {0, 0}                      /* end of table */
620   };
621   int i;
622
623   if ((next & 0x1f) == 0x0b)            /* skip imm16 argument */
624     current_pc += 2;
625   else if ((next & 0x1f) == 0x13)       /* skip imm16 argument */
626     current_pc += 2;
627   else if ((next & 0x1f) == 0x1b)       /* skip imm32 argument */
628     current_pc += 4;
629
630   /* Calculate the total size of the saved registers, and add it to the
631      immediate value used to adjust SP.  */
632   for (i = 0; reg_table[i].mask != 0; i++)
633     if (list12 & reg_table[i].mask)
634       offset += v850_reg_size;
635   pi->sp_offset -= offset;
636
637   /* Calculate the offsets of the registers relative to the value the SP
638      will have after the registers have been pushed and the imm5 value has
639      been subtracted from it.  */
640   if (pifsr)
641     {
642       for (i = 0; reg_table[i].mask != 0; i++)
643         {
644           if (list12 & reg_table[i].mask)
645             {
646               int reg = reg_table[i].regno;
647               offset -= v850_reg_size;
648               pifsr->reg = reg;
649               pifsr->offset = offset;
650               pifsr->cur_frameoffset = pi->sp_offset;
651               pifsr++;
652             }
653         }
654     }
655
656   /* Set result parameters.  */
657   *current_pc_ptr = current_pc;
658   *pifsr_ptr = pifsr;
659 }
660
661
662 /* Helper function for v850_scan_prologue to handle pushm/pushl instructions.
663    The SR bit of the register list is not supported.  gcc does not generate
664    this bit.  */
665
666 static void
667 v850_handle_pushm (int insn, int insn2, struct v850_frame_cache *pi,
668                    struct pifsr **pifsr_ptr)
669 {
670   struct pifsr *pifsr = *pifsr_ptr;
671   long list12 = ((insn & 0x0f) << 16) + (insn2 & 0xfff0);
672   long offset = 0;
673   static struct reg_list pushml_reg_table[] =
674   {
675     {0x80000, E_PS_REGNUM},     /* PSW */
676     {0x40000, 1},               /* r1 */
677     {0x20000, 2},               /* r2 */
678     {0x10000, 3},               /* r3 */
679     {0x00800, 4},               /* r4 */
680     {0x00400, 5},               /* r5 */
681     {0x00200, 6},               /* r6 */
682     {0x00100, 7},               /* r7 */
683     {0x08000, 8},               /* r8 */
684     {0x04000, 9},               /* r9 */
685     {0x02000, 10},              /* r10 */
686     {0x01000, 11},              /* r11 */
687     {0x00080, 12},              /* r12 */
688     {0x00040, 13},              /* r13 */
689     {0x00020, 14},              /* r14 */
690     {0x00010, 15},              /* r15 */
691     {0, 0}                      /* end of table */
692   };
693   static struct reg_list pushmh_reg_table[] =
694   {
695     {0x80000, 16},              /* r16 */
696     {0x40000, 17},              /* r17 */
697     {0x20000, 18},              /* r18 */
698     {0x10000, 19},              /* r19 */
699     {0x00800, 20},              /* r20 */
700     {0x00400, 21},              /* r21 */
701     {0x00200, 22},              /* r22 */
702     {0x00100, 23},              /* r23 */
703     {0x08000, 24},              /* r24 */
704     {0x04000, 25},              /* r25 */
705     {0x02000, 26},              /* r26 */
706     {0x01000, 27},              /* r27 */
707     {0x00080, 28},              /* r28 */
708     {0x00040, 29},              /* r29 */
709     {0x00010, 30},              /* r30 */
710     {0x00020, 31},              /* r31 */
711     {0, 0}                      /* end of table */
712   };
713   struct reg_list *reg_table;
714   int i;
715
716   /* Is this a pushml or a pushmh?  */
717   if ((insn2 & 7) == 1)
718     reg_table = pushml_reg_table;
719   else
720     reg_table = pushmh_reg_table;
721
722   /* Calculate the total size of the saved registers, and add it to the
723      immediate value used to adjust SP.  */
724   for (i = 0; reg_table[i].mask != 0; i++)
725     if (list12 & reg_table[i].mask)
726       offset += v850_reg_size;
727   pi->sp_offset -= offset;
728
729   /* Calculate the offsets of the registers relative to the value the SP
730      will have after the registers have been pushed and the imm5 value is
731      subtracted from it.  */
732   if (pifsr)
733     {
734       for (i = 0; reg_table[i].mask != 0; i++)
735         {
736           if (list12 & reg_table[i].mask)
737             {
738               int reg = reg_table[i].regno;
739               offset -= v850_reg_size;
740               pifsr->reg = reg;
741               pifsr->offset = offset;
742               pifsr->cur_frameoffset = pi->sp_offset;
743               pifsr++;
744             }
745         }
746     }
747
748   /* Set result parameters.  */
749   *pifsr_ptr = pifsr;
750 }
751
752 /* Helper function to evaluate if register is one of the "save" registers.
753    This allows to simplify conditionals in v850_analyze_prologue a lot.  */
754
755 static int
756 v850_is_save_register (int reg)
757 {
758  /* The caller-save registers are R2, R20 - R29 and R31.  All other
759     registers are either special purpose (PC, SP), argument registers,
760     or just considered free for use in the caller.  */
761  return reg == E_R2_REGNUM
762         || (reg >= E_R20_REGNUM && reg <= E_R29_REGNUM)
763         || reg == E_R31_REGNUM;
764 }
765
766 /* Scan the prologue of the function that contains PC, and record what
767    we find in PI.  Returns the pc after the prologue.  Note that the
768    addresses saved in frame->saved_regs are just frame relative (negative
769    offsets from the frame pointer).  This is because we don't know the
770    actual value of the frame pointer yet.  In some circumstances, the
771    frame pointer can't be determined till after we have scanned the
772    prologue.  */
773
774 static CORE_ADDR
775 v850_analyze_prologue (struct gdbarch *gdbarch,
776                        CORE_ADDR func_addr, CORE_ADDR pc,
777                        struct v850_frame_cache *pi, ULONGEST ctbp)
778 {
779   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
780   CORE_ADDR prologue_end, current_pc;
781   struct pifsr pifsrs[E_NUM_REGS + 1];
782   struct pifsr *pifsr, *pifsr_tmp;
783   int ep_used;
784   int reg;
785   CORE_ADDR save_pc, save_end;
786   int regsave_func_p;
787   int r12_tmp;
788
789   memset (&pifsrs, 0, sizeof pifsrs);
790   pifsr = &pifsrs[0];
791
792   prologue_end = pc;
793
794   /* Now, search the prologue looking for instructions that setup fp, save
795      rp, adjust sp and such.  We also record the frame offset of any saved
796      registers.  */
797
798   pi->sp_offset = 0;
799   pi->uses_fp = 0;
800   ep_used = 0;
801   regsave_func_p = 0;
802   save_pc = 0;
803   save_end = 0;
804   r12_tmp = 0;
805
806   for (current_pc = func_addr; current_pc < prologue_end;)
807     {
808       int insn;
809       int insn2 = -1; /* dummy value */
810
811       insn = read_memory_integer (current_pc, 2, byte_order);
812       current_pc += 2;
813       if ((insn & 0x0780) >= 0x0600)    /* Four byte instruction?  */
814         {
815           insn2 = read_memory_integer (current_pc, 2, byte_order);
816           current_pc += 2;
817         }
818
819       if ((insn & 0xffc0) == ((10 << 11) | 0x0780) && !regsave_func_p)
820         {                       /* jarl <func>,10 */
821           long low_disp = insn2 & ~(long) 1;
822           long disp = (((((insn & 0x3f) << 16) + low_disp)
823                         & ~(long) 1) ^ 0x00200000) - 0x00200000;
824
825           save_pc = current_pc;
826           save_end = prologue_end;
827           regsave_func_p = 1;
828           current_pc += disp - 4;
829           prologue_end = (current_pc
830                           + (2 * 3)     /* moves to/from ep */
831                           + 4           /* addi <const>,sp,sp */
832                           + 2           /* jmp [r10] */
833                           + (2 * 12)    /* sst.w to save r2, r20-r29, r31 */
834                           + 20);        /* slop area */
835         }
836       else if ((insn & 0xffc0) == 0x0200 && !regsave_func_p)
837         {                       /* callt <imm6> */
838           long adr = ctbp + ((insn & 0x3f) << 1);
839
840           save_pc = current_pc;
841           save_end = prologue_end;
842           regsave_func_p = 1;
843           current_pc = ctbp + (read_memory_unsigned_integer (adr, 2, byte_order)
844                                & 0xffff);
845           prologue_end = (current_pc
846                           + (2 * 3)     /* prepare list2,imm5,sp/imm */
847                           + 4           /* ctret */
848                           + 20);        /* slop area */
849           continue;
850         }
851       else if ((insn & 0xffc0) == 0x0780)       /* prepare list2,imm5 */
852         {
853           v850_handle_prepare (insn, insn2, &current_pc, pi, &pifsr);
854           continue;
855         }
856       else if (insn == 0x07e0 && regsave_func_p && insn2 == 0x0144)
857         {                       /* ctret after processing register save.  */
858           current_pc = save_pc;
859           prologue_end = save_end;
860           regsave_func_p = 0;
861           continue;
862         }
863       else if ((insn & 0xfff0) == 0x07e0 && (insn2 & 5) == 1)
864         {                       /* pushml, pushmh */
865           v850_handle_pushm (insn, insn2, pi, &pifsr);
866           continue;
867         }
868       else if ((insn & 0xffe0) == 0x0060 && regsave_func_p)
869         {                       /* jmp after processing register save.  */
870           current_pc = save_pc;
871           prologue_end = save_end;
872           regsave_func_p = 0;
873           continue;
874         }
875       else if ((insn & 0x07c0) == 0x0780        /* jarl or jr */
876                || (insn & 0xffe0) == 0x0060     /* jmp */
877                || (insn & 0x0780) == 0x0580)    /* branch */
878         {
879           break;                /* Ran into end of prologue.  */
880         }
881
882       else if ((insn & 0xffe0) == ((E_SP_REGNUM << 11) | 0x0240))
883         /* add <imm>,sp */
884         pi->sp_offset += ((insn & 0x1f) ^ 0x10) - 0x10;
885       else if (insn == ((E_SP_REGNUM << 11) | 0x0600 | E_SP_REGNUM))
886         /* addi <imm>,sp,sp */
887         pi->sp_offset += insn2;
888       else if (insn == ((E_FP_REGNUM << 11) | 0x0000 | E_SP_REGNUM))
889         /* mov sp,fp */
890         pi->uses_fp = 1;
891       else if (insn == ((E_R12_REGNUM << 11) | 0x0640 | E_R0_REGNUM))
892         /* movhi hi(const),r0,r12 */
893         r12_tmp = insn2 << 16;
894       else if (insn == ((E_R12_REGNUM << 11) | 0x0620 | E_R12_REGNUM))
895         /* movea lo(const),r12,r12 */
896         r12_tmp += insn2;
897       else if (insn == ((E_SP_REGNUM << 11) | 0x01c0 | E_R12_REGNUM) && r12_tmp)
898         /* add r12,sp */
899         pi->sp_offset += r12_tmp;
900       else if (insn == ((E_EP_REGNUM << 11) | 0x0000 | E_SP_REGNUM))
901         /* mov sp,ep */
902         ep_used = 1;
903       else if (insn == ((E_EP_REGNUM << 11) | 0x0000 | E_R1_REGNUM))
904         /* mov r1,ep */
905         ep_used = 0;
906       else if (((insn & 0x07ff) == (0x0760 | E_SP_REGNUM)       
907                 || (pi->uses_fp
908                     && (insn & 0x07ff) == (0x0760 | E_FP_REGNUM)))
909                && pifsr
910                && v850_is_save_register (reg = (insn >> 11) & 0x1f))
911         {
912           /* st.w <reg>,<offset>[sp] or st.w <reg>,<offset>[fp] */
913           pifsr->reg = reg;
914           pifsr->offset = insn2 & ~1;
915           pifsr->cur_frameoffset = pi->sp_offset;
916           pifsr++;
917         }
918       else if (ep_used
919                && ((insn & 0x0781) == 0x0501)
920                && pifsr
921                && v850_is_save_register (reg = (insn >> 11) & 0x1f))
922         {
923           /* sst.w <reg>,<offset>[ep] */
924           pifsr->reg = reg;
925           pifsr->offset = (insn & 0x007e) << 1;
926           pifsr->cur_frameoffset = pi->sp_offset;
927           pifsr++;
928         }
929     }
930
931   /* Fix up any offsets to the final offset.  If a frame pointer was created,
932      use it instead of the stack pointer.  */
933   for (pifsr_tmp = pifsrs; pifsr_tmp != pifsr; pifsr_tmp++)
934     {
935       pifsr_tmp->offset -= pi->sp_offset - pifsr_tmp->cur_frameoffset;
936       pi->saved_regs[pifsr_tmp->reg].addr = pifsr_tmp->offset;
937     }
938
939   return current_pc;
940 }
941
942 /* Return the address of the first code past the prologue of the function.  */
943
944 static CORE_ADDR
945 v850_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
946 {
947   CORE_ADDR func_addr, func_end;
948
949   /* See what the symbol table says.  */
950
951   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
952     {
953       struct symtab_and_line sal;
954
955       sal = find_pc_line (func_addr, 0);
956       if (sal.line != 0 && sal.end < func_end)
957         return sal.end;
958
959       /* Either there's no line info, or the line after the prologue is after
960          the end of the function.  In this case, there probably isn't a
961          prologue.  */
962       return pc;
963     }
964
965   /* We can't find the start of this function, so there's nothing we
966      can do.  */
967   return pc;
968 }
969
970 /* Return 1 if the data structure has any 8-byte fields that'll require
971    the entire data structure to be aligned.  Otherwise, return 0.  */
972
973 static int
974 v850_eight_byte_align_p (struct type *type)
975 {
976   type = check_typedef (type);
977
978   if (v850_type_is_scalar (type))
979     return (TYPE_LENGTH (type) == 8);
980   else
981     {
982       int i;
983
984       for (i = 0; i < TYPE_NFIELDS (type); i++)
985         {
986           if (v850_eight_byte_align_p (TYPE_FIELD_TYPE (type, i)))
987             return 1;
988         }
989     }
990   return 0;
991 }
992
993 static CORE_ADDR
994 v850_frame_align (struct gdbarch *ignore, CORE_ADDR sp)
995 {
996   return sp & ~3;
997 }
998
999 /* Setup arguments and LP for a call to the target.  First four args
1000    go in R6->R9, subsequent args go into sp + 16 -> sp + ...  Structs
1001    are passed by reference.  64 bit quantities (doubles and long longs)
1002    may be split between the regs and the stack.  When calling a function
1003    that returns a struct, a pointer to the struct is passed in as a secret
1004    first argument (always in R6).
1005
1006    Stack space for the args has NOT been allocated: that job is up to us.  */
1007
1008 static CORE_ADDR
1009 v850_push_dummy_call (struct gdbarch *gdbarch,
1010                       struct value *function,
1011                       struct regcache *regcache,
1012                       CORE_ADDR bp_addr,
1013                       int nargs,
1014                       struct value **args,
1015                       CORE_ADDR sp,
1016                       function_call_return_method return_method,
1017                       CORE_ADDR struct_addr)
1018 {
1019   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1020   int argreg;
1021   int argnum;
1022   int arg_space = 0;
1023   int stack_offset;
1024
1025   if (gdbarch_tdep (gdbarch)->abi == V850_ABI_RH850)
1026     stack_offset = 0;
1027   else
1028   /* The offset onto the stack at which we will start copying parameters
1029      (after the registers are used up) begins at 16 rather than at zero.
1030      That's how the ABI is defined, though there's no indication that these
1031      16 bytes are used for anything, not even for saving incoming
1032      argument registers.  */
1033   stack_offset = 16;
1034
1035   /* Now make space on the stack for the args.  */
1036   for (argnum = 0; argnum < nargs; argnum++)
1037     arg_space += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
1038   sp -= arg_space + stack_offset;
1039
1040   argreg = E_ARG0_REGNUM;
1041   /* The struct_return pointer occupies the first parameter register.  */
1042   if (return_method == return_method_struct)
1043     regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
1044
1045   /* Now load as many as possible of the first arguments into
1046      registers, and push the rest onto the stack.  There are 16 bytes
1047      in four registers available.  Loop thru args from first to last.  */
1048   for (argnum = 0; argnum < nargs; argnum++)
1049     {
1050       int len;
1051       gdb_byte *val;
1052       gdb_byte valbuf[v850_reg_size];
1053
1054       if (!v850_type_is_scalar (value_type (*args))
1055          && gdbarch_tdep (gdbarch)->abi == V850_ABI_GCC
1056           && TYPE_LENGTH (value_type (*args)) > E_MAX_RETTYPE_SIZE_IN_REGS)
1057         {
1058           store_unsigned_integer (valbuf, 4, byte_order,
1059                                   value_address (*args));
1060           len = 4;
1061           val = valbuf;
1062         }
1063       else
1064         {
1065           len = TYPE_LENGTH (value_type (*args));
1066           val = (gdb_byte *) value_contents (*args);
1067         }
1068
1069       if (gdbarch_tdep (gdbarch)->eight_byte_align
1070           && v850_eight_byte_align_p (value_type (*args)))
1071         {
1072           if (argreg <= E_ARGLAST_REGNUM && (argreg & 1))
1073             argreg++;
1074           else if (stack_offset & 0x4)
1075             stack_offset += 4;
1076         }
1077
1078       while (len > 0)
1079         if (argreg <= E_ARGLAST_REGNUM)
1080           {
1081             CORE_ADDR regval;
1082
1083             regval = extract_unsigned_integer (val, v850_reg_size, byte_order);
1084             regcache_cooked_write_unsigned (regcache, argreg, regval);
1085
1086             len -= v850_reg_size;
1087             val += v850_reg_size;
1088             argreg++;
1089           }
1090         else
1091           {
1092             write_memory (sp + stack_offset, val, 4);
1093
1094             len -= 4;
1095             val += 4;
1096             stack_offset += 4;
1097           }
1098       args++;
1099     }
1100
1101   /* Store return address.  */
1102   regcache_cooked_write_unsigned (regcache, E_LP_REGNUM, bp_addr);
1103
1104   /* Update stack pointer.  */
1105   regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, sp);
1106
1107   return sp;
1108 }
1109
1110 static void
1111 v850_extract_return_value (struct type *type, struct regcache *regcache,
1112                            gdb_byte *valbuf)
1113 {
1114   struct gdbarch *gdbarch = regcache->arch ();
1115   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1116   int len = TYPE_LENGTH (type);
1117
1118   if (len <= v850_reg_size)
1119     {
1120       ULONGEST val;
1121
1122       regcache_cooked_read_unsigned (regcache, E_V0_REGNUM, &val);
1123       store_unsigned_integer (valbuf, len, byte_order, val);
1124     }
1125   else if (len <= 2 * v850_reg_size)
1126     {
1127       int i, regnum = E_V0_REGNUM;
1128       gdb_byte buf[v850_reg_size];
1129       for (i = 0; len > 0; i += 4, len -= 4)
1130         {
1131           regcache->raw_read (regnum++, buf);
1132           memcpy (valbuf + i, buf, len > 4 ? 4 : len);
1133         }
1134     }
1135 }
1136
1137 static void
1138 v850_store_return_value (struct type *type, struct regcache *regcache,
1139                          const gdb_byte *valbuf)
1140 {
1141   struct gdbarch *gdbarch = regcache->arch ();
1142   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1143   int len = TYPE_LENGTH (type);
1144
1145   if (len <= v850_reg_size)
1146       regcache_cooked_write_unsigned
1147         (regcache, E_V0_REGNUM,
1148          extract_unsigned_integer (valbuf, len, byte_order));
1149   else if (len <= 2 * v850_reg_size)
1150     {
1151       int i, regnum = E_V0_REGNUM;
1152       for (i = 0; i < len; i += 4)
1153         regcache->raw_write (regnum++, valbuf + i);
1154     }
1155 }
1156
1157 static enum return_value_convention
1158 v850_return_value (struct gdbarch *gdbarch, struct value *function,
1159                    struct type *type, struct regcache *regcache,
1160                    gdb_byte *readbuf, const gdb_byte *writebuf)
1161 {
1162   if (v850_use_struct_convention (gdbarch, type))
1163     return RETURN_VALUE_STRUCT_CONVENTION;
1164   if (writebuf)
1165     v850_store_return_value (type, regcache, writebuf);
1166   else if (readbuf)
1167     v850_extract_return_value (type, regcache, readbuf);
1168   return RETURN_VALUE_REGISTER_CONVENTION;
1169 }
1170
1171 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
1172
1173 static int
1174 v850_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
1175 {
1176   return 2;
1177 }
1178
1179 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
1180
1181 static const gdb_byte *
1182 v850_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
1183 {
1184   *size = kind;
1185
1186     switch (gdbarch_bfd_arch_info (gdbarch)->mach)
1187     {
1188     case bfd_mach_v850e2:
1189     case bfd_mach_v850e2v3:
1190     case bfd_mach_v850e3v5:
1191       {
1192         /* Implement software breakpoints by using the dbtrap instruction.
1193            Older architectures had no such instruction.  For those, an
1194            unconditional branch to self instruction is used.  */
1195
1196         static unsigned char dbtrap_breakpoint[] = { 0x40, 0xf8 };
1197
1198         return dbtrap_breakpoint;
1199       }
1200       break;
1201     default:
1202       {
1203         static unsigned char breakpoint[] = { 0x85, 0x05 };
1204
1205         return breakpoint;
1206       }
1207       break;
1208     }
1209 }
1210
1211 static struct v850_frame_cache *
1212 v850_alloc_frame_cache (struct frame_info *this_frame)
1213 {
1214   struct v850_frame_cache *cache;
1215
1216   cache = FRAME_OBSTACK_ZALLOC (struct v850_frame_cache);
1217   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1218
1219   /* Base address.  */
1220   cache->base = 0;
1221   cache->sp_offset = 0;
1222   cache->pc = 0;
1223
1224   /* Frameless until proven otherwise.  */
1225   cache->uses_fp = 0;
1226
1227   return cache;
1228 }
1229
1230 static struct v850_frame_cache *
1231 v850_frame_cache (struct frame_info *this_frame, void **this_cache)
1232 {
1233   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1234   struct v850_frame_cache *cache;
1235   CORE_ADDR current_pc;
1236   int i;
1237
1238   if (*this_cache)
1239     return (struct v850_frame_cache *) *this_cache;
1240
1241   cache = v850_alloc_frame_cache (this_frame);
1242   *this_cache = cache;
1243
1244   /* In principle, for normal frames, fp holds the frame pointer,
1245      which holds the base address for the current stack frame.
1246      However, for functions that don't need it, the frame pointer is
1247      optional.  For these "frameless" functions the frame pointer is
1248      actually the frame pointer of the calling frame.  */
1249   cache->base = get_frame_register_unsigned (this_frame, E_FP_REGNUM);
1250   if (cache->base == 0)
1251     return cache;
1252
1253   cache->pc = get_frame_func (this_frame);
1254   current_pc = get_frame_pc (this_frame);
1255   if (cache->pc != 0)
1256     {
1257       ULONGEST ctbp;
1258       ctbp = get_frame_register_unsigned (this_frame, E_CTBP_REGNUM);
1259       v850_analyze_prologue (gdbarch, cache->pc, current_pc, cache, ctbp);
1260     }
1261
1262   if (!cache->uses_fp)
1263     {
1264       /* We didn't find a valid frame, which means that CACHE->base
1265          currently holds the frame pointer for our calling frame.  If
1266          we're at the start of a function, or somewhere half-way its
1267          prologue, the function's frame probably hasn't been fully
1268          setup yet.  Try to reconstruct the base address for the stack
1269          frame by looking at the stack pointer.  For truly "frameless"
1270          functions this might work too.  */
1271       cache->base = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
1272     }
1273
1274   /* Now that we have the base address for the stack frame we can
1275      calculate the value of sp in the calling frame.  */
1276   trad_frame_set_value (cache->saved_regs, E_SP_REGNUM,
1277                         cache->base - cache->sp_offset);
1278
1279   /* Adjust all the saved registers such that they contain addresses
1280      instead of offsets.  */
1281   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
1282     if (trad_frame_addr_p (cache->saved_regs, i))
1283       cache->saved_regs[i].addr += cache->base;
1284
1285   /* The call instruction moves the caller's PC in the callee's LP.
1286      Since this is an unwind, do the reverse.  Copy the location of LP
1287      into PC (the address / regnum) so that a request for PC will be
1288      converted into a request for the LP.  */
1289
1290   cache->saved_regs[E_PC_REGNUM] = cache->saved_regs[E_LP_REGNUM];
1291
1292   return cache;
1293 }
1294
1295
1296 static struct value *
1297 v850_frame_prev_register (struct frame_info *this_frame,
1298                           void **this_cache, int regnum)
1299 {
1300   struct v850_frame_cache *cache = v850_frame_cache (this_frame, this_cache);
1301
1302   gdb_assert (regnum >= 0);
1303
1304   return trad_frame_get_prev_register (this_frame, cache->saved_regs, regnum);
1305 }
1306
1307 static void
1308 v850_frame_this_id (struct frame_info *this_frame, void **this_cache,
1309                     struct frame_id *this_id)
1310 {
1311   struct v850_frame_cache *cache = v850_frame_cache (this_frame, this_cache);
1312
1313   /* This marks the outermost frame.  */
1314   if (cache->base == 0)
1315     return;
1316
1317   *this_id = frame_id_build (cache->saved_regs[E_SP_REGNUM].addr, cache->pc);
1318 }
1319
1320 static const struct frame_unwind v850_frame_unwind = {
1321   NORMAL_FRAME,
1322   default_frame_unwind_stop_reason,
1323   v850_frame_this_id,
1324   v850_frame_prev_register,
1325   NULL,
1326   default_frame_sniffer
1327 };
1328
1329 static CORE_ADDR
1330 v850_frame_base_address (struct frame_info *this_frame, void **this_cache)
1331 {
1332   struct v850_frame_cache *cache = v850_frame_cache (this_frame, this_cache);
1333
1334   return cache->base;
1335 }
1336
1337 static const struct frame_base v850_frame_base = {
1338   &v850_frame_unwind,
1339   v850_frame_base_address,
1340   v850_frame_base_address,
1341   v850_frame_base_address
1342 };
1343
1344 static struct gdbarch *
1345 v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1346 {
1347   struct gdbarch *gdbarch;
1348   struct gdbarch_tdep *tdep;
1349   int e_flags, e_machine;
1350
1351   /* Extract the elf_flags if available.  */
1352   if (info.abfd != NULL
1353       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
1354     {
1355       e_flags = elf_elfheader (info.abfd)->e_flags;
1356       e_machine = elf_elfheader (info.abfd)->e_machine;
1357     }
1358   else
1359     {
1360       e_flags = 0;
1361       e_machine = 0;
1362     }
1363
1364
1365   /* Try to find the architecture in the list of already defined
1366      architectures.  */
1367   for (arches = gdbarch_list_lookup_by_info (arches, &info);
1368        arches != NULL;
1369        arches = gdbarch_list_lookup_by_info (arches->next, &info))
1370     {
1371       if (gdbarch_tdep (arches->gdbarch)->e_flags != e_flags
1372           || gdbarch_tdep (arches->gdbarch)->e_machine != e_machine)
1373         continue;
1374
1375       return arches->gdbarch;
1376     }
1377   tdep = XCNEW (struct gdbarch_tdep);
1378   tdep->e_flags = e_flags;
1379   tdep->e_machine = e_machine;
1380
1381   switch (tdep->e_machine)
1382     {
1383     case EM_V800:
1384       tdep->abi = V850_ABI_RH850;
1385       break;
1386     default:
1387       tdep->abi = V850_ABI_GCC;
1388       break;
1389     }
1390
1391   tdep->eight_byte_align = (tdep->e_flags & EF_RH850_DATA_ALIGN8) ? 1 : 0;
1392   gdbarch = gdbarch_alloc (&info, tdep);
1393
1394   switch (info.bfd_arch_info->mach)
1395     {
1396     case bfd_mach_v850:
1397       set_gdbarch_register_name (gdbarch, v850_register_name);
1398       set_gdbarch_num_regs (gdbarch, E_NUM_OF_V850_REGS);
1399       break;
1400     case bfd_mach_v850e:
1401     case bfd_mach_v850e1:
1402       set_gdbarch_register_name (gdbarch, v850e_register_name);
1403       set_gdbarch_num_regs (gdbarch, E_NUM_OF_V850E_REGS);
1404       break;
1405     case bfd_mach_v850e2:
1406     case bfd_mach_v850e2v3:
1407       set_gdbarch_register_name (gdbarch, v850e2_register_name);
1408       set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
1409       break;
1410     case bfd_mach_v850e3v5:
1411       set_gdbarch_register_name (gdbarch, v850e3v5_register_name);
1412       set_gdbarch_num_regs (gdbarch, E_NUM_OF_V850E3V5_REGS);
1413       break;
1414     }
1415
1416   set_gdbarch_num_pseudo_regs (gdbarch, 0);
1417   set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
1418   set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1419   set_gdbarch_fp0_regnum (gdbarch, -1);
1420
1421   set_gdbarch_register_type (gdbarch, v850_register_type);
1422
1423   set_gdbarch_char_signed (gdbarch, 1);
1424   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1425   set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1426   set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1427   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1428
1429   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1430   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1431   set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1432
1433   set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1434   set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1435
1436   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1437
1438   set_gdbarch_breakpoint_kind_from_pc (gdbarch, v850_breakpoint_kind_from_pc);
1439   set_gdbarch_sw_breakpoint_from_kind (gdbarch, v850_sw_breakpoint_from_kind);
1440   set_gdbarch_return_value (gdbarch, v850_return_value);
1441   set_gdbarch_push_dummy_call (gdbarch, v850_push_dummy_call);
1442   set_gdbarch_skip_prologue (gdbarch, v850_skip_prologue);
1443
1444   set_gdbarch_frame_align (gdbarch, v850_frame_align);
1445   frame_base_set_default (gdbarch, &v850_frame_base);
1446
1447   /* Hook in ABI-specific overrides, if they have been registered.  */
1448   gdbarch_init_osabi (info, gdbarch);
1449
1450   dwarf2_append_unwinders (gdbarch);
1451   frame_unwind_append_unwinder (gdbarch, &v850_frame_unwind);
1452
1453   return gdbarch;
1454 }
1455
1456 void
1457 _initialize_v850_tdep (void)
1458 {
1459   register_gdbarch_init (bfd_arch_v850, v850_gdbarch_init);
1460   register_gdbarch_init (bfd_arch_v850_rh850, v850_gdbarch_init);
1461 }