2009-11-10 Tristan Gingold <gingold@adacore.com>
[external/binutils.git] / gdb / avr-tdep.c
1 /* Target-dependent code for Atmel AVR, for GDB.
2
3    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4    2006, 2007, 2008, 2009 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
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
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 /* Contributed by Theodore A. Roth, troth@openavr.org */
22
23 /* Portions of this file were taken from the original gdb-4.18 patch developed
24    by Denis Chertykov, denisc@overta.ru */
25
26 #include "defs.h"
27 #include "frame.h"
28 #include "frame-unwind.h"
29 #include "frame-base.h"
30 #include "trad-frame.h"
31 #include "gdbcmd.h"
32 #include "gdbcore.h"
33 #include "gdbtypes.h"
34 #include "inferior.h"
35 #include "symfile.h"
36 #include "arch-utils.h"
37 #include "regcache.h"
38 #include "gdb_string.h"
39 #include "dis-asm.h"
40
41 /* AVR Background:
42
43    (AVR micros are pure Harvard Architecture processors.)
44
45    The AVR family of microcontrollers have three distinctly different memory
46    spaces: flash, sram and eeprom. The flash is 16 bits wide and is used for
47    the most part to store program instructions. The sram is 8 bits wide and is
48    used for the stack and the heap. Some devices lack sram and some can have
49    an additional external sram added on as a peripheral.
50
51    The eeprom is 8 bits wide and is used to store data when the device is
52    powered down. Eeprom is not directly accessible, it can only be accessed
53    via io-registers using a special algorithm. Accessing eeprom via gdb's
54    remote serial protocol ('m' or 'M' packets) looks difficult to do and is
55    not included at this time.
56
57    [The eeprom could be read manually via ``x/b <eaddr + AVR_EMEM_START>'' or
58    written using ``set {unsigned char}<eaddr + AVR_EMEM_START>''.  For this to
59    work, the remote target must be able to handle eeprom accesses and perform
60    the address translation.]
61
62    All three memory spaces have physical addresses beginning at 0x0. In
63    addition, the flash is addressed by gcc/binutils/gdb with respect to 8 bit
64    bytes instead of the 16 bit wide words used by the real device for the
65    Program Counter.
66
67    In order for remote targets to work correctly, extra bits must be added to
68    addresses before they are send to the target or received from the target
69    via the remote serial protocol. The extra bits are the MSBs and are used to
70    decode which memory space the address is referring to. */
71
72 #undef XMALLOC
73 #define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
74
75 /* Constants: prefixed with AVR_ to avoid name space clashes */
76
77 enum
78 {
79   AVR_REG_W = 24,
80   AVR_REG_X = 26,
81   AVR_REG_Y = 28,
82   AVR_FP_REGNUM = 28,
83   AVR_REG_Z = 30,
84
85   AVR_SREG_REGNUM = 32,
86   AVR_SP_REGNUM = 33,
87   AVR_PC_REGNUM = 34,
88
89   AVR_NUM_REGS = 32 + 1 /*SREG*/ + 1 /*SP*/ + 1 /*PC*/,
90   AVR_NUM_REG_BYTES = 32 + 1 /*SREG*/ + 2 /*SP*/ + 4 /*PC*/,
91
92   AVR_PC_REG_INDEX = 35,        /* index into array of registers */
93
94   AVR_MAX_PROLOGUE_SIZE = 64,   /* bytes */
95
96   /* Count of pushed registers. From r2 to r17 (inclusively), r28, r29 */
97   AVR_MAX_PUSHES = 18,
98
99   /* Number of the last pushed register. r17 for current avr-gcc */
100   AVR_LAST_PUSHED_REGNUM = 17,
101
102   AVR_ARG1_REGNUM = 24,         /* Single byte argument */
103   AVR_ARGN_REGNUM = 25,         /* Multi byte argments */
104
105   AVR_RET1_REGNUM = 24,         /* Single byte return value */
106   AVR_RETN_REGNUM = 25,         /* Multi byte return value */
107
108   /* FIXME: TRoth/2002-01-??: Can we shift all these memory masks left 8
109      bits? Do these have to match the bfd vma values?. It sure would make
110      things easier in the future if they didn't need to match.
111
112      Note: I chose these values so as to be consistent with bfd vma
113      addresses.
114
115      TRoth/2002-04-08: There is already a conflict with very large programs
116      in the mega128. The mega128 has 128K instruction bytes (64K words),
117      thus the Most Significant Bit is 0x10000 which gets masked off my
118      AVR_MEM_MASK.
119
120      The problem manifests itself when trying to set a breakpoint in a
121      function which resides in the upper half of the instruction space and
122      thus requires a 17-bit address.
123
124      For now, I've just removed the EEPROM mask and changed AVR_MEM_MASK
125      from 0x00ff0000 to 0x00f00000. Eeprom is not accessible from gdb yet,
126      but could be for some remote targets by just adding the correct offset
127      to the address and letting the remote target handle the low-level
128      details of actually accessing the eeprom. */
129
130   AVR_IMEM_START = 0x00000000,  /* INSN memory */
131   AVR_SMEM_START = 0x00800000,  /* SRAM memory */
132 #if 1
133   /* No eeprom mask defined */
134   AVR_MEM_MASK = 0x00f00000,    /* mask to determine memory space */
135 #else
136   AVR_EMEM_START = 0x00810000,  /* EEPROM memory */
137   AVR_MEM_MASK = 0x00ff0000,    /* mask to determine memory space */
138 #endif
139 };
140
141 /* Prologue types:
142
143    NORMAL and CALL are the typical types (the -mcall-prologues gcc option
144    causes the generation of the CALL type prologues).  */
145
146 enum {
147     AVR_PROLOGUE_NONE,              /* No prologue */
148     AVR_PROLOGUE_NORMAL,
149     AVR_PROLOGUE_CALL,              /* -mcall-prologues */
150     AVR_PROLOGUE_MAIN,
151     AVR_PROLOGUE_INTR,              /* interrupt handler */
152     AVR_PROLOGUE_SIG,               /* signal handler */
153 };
154
155 /* Any function with a frame looks like this
156    .......    <-SP POINTS HERE
157    LOCALS1    <-FP POINTS HERE
158    LOCALS0
159    SAVED FP
160    SAVED R3
161    SAVED R2
162    RET PC
163    FIRST ARG
164    SECOND ARG */
165
166 struct avr_unwind_cache
167 {
168   /* The previous frame's inner most stack address.  Used as this
169      frame ID's stack_addr.  */
170   CORE_ADDR prev_sp;
171   /* The frame's base, optionally used by the high-level debug info.  */
172   CORE_ADDR base;
173   int size;
174   int prologue_type;
175   /* Table indicating the location of each and every register.  */
176   struct trad_frame_saved_reg *saved_regs;
177 };
178
179 struct gdbarch_tdep
180 {
181   /* Number of bytes stored to the stack by call instructions.
182      2 bytes for avr1-5, 3 bytes for avr6.  */
183   int call_length;
184 };
185
186 /* Lookup the name of a register given it's number. */
187
188 static const char *
189 avr_register_name (struct gdbarch *gdbarch, int regnum)
190 {
191   static const char * const register_names[] = {
192     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
193     "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
194     "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
195     "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
196     "SREG", "SP", "PC"
197   };
198   if (regnum < 0)
199     return NULL;
200   if (regnum >= (sizeof (register_names) / sizeof (*register_names)))
201     return NULL;
202   return register_names[regnum];
203 }
204
205 /* Return the GDB type object for the "standard" data type
206    of data in register N.  */
207
208 static struct type *
209 avr_register_type (struct gdbarch *gdbarch, int reg_nr)
210 {
211   if (reg_nr == AVR_PC_REGNUM)
212     return builtin_type (gdbarch)->builtin_uint32;
213   if (reg_nr == AVR_SP_REGNUM)
214     return builtin_type (gdbarch)->builtin_data_ptr;
215   else
216     return builtin_type (gdbarch)->builtin_uint8;
217 }
218
219 /* Instruction address checks and convertions. */
220
221 static CORE_ADDR
222 avr_make_iaddr (CORE_ADDR x)
223 {
224   return ((x) | AVR_IMEM_START);
225 }
226
227 /* FIXME: TRoth: Really need to use a larger mask for instructions. Some
228    devices are already up to 128KBytes of flash space.
229
230    TRoth/2002-04-8: See comment above where AVR_IMEM_START is defined. */
231
232 static CORE_ADDR
233 avr_convert_iaddr_to_raw (CORE_ADDR x)
234 {
235   return ((x) & 0xffffffff);
236 }
237
238 /* SRAM address checks and convertions. */
239
240 static CORE_ADDR
241 avr_make_saddr (CORE_ADDR x)
242 {
243   /* Return 0 for NULL.  */
244   if (x == 0)
245     return 0;
246
247   return ((x) | AVR_SMEM_START);
248 }
249
250 static CORE_ADDR
251 avr_convert_saddr_to_raw (CORE_ADDR x)
252 {
253   return ((x) & 0xffffffff);
254 }
255
256 /* EEPROM address checks and convertions. I don't know if these will ever
257    actually be used, but I've added them just the same. TRoth */
258
259 /* TRoth/2002-04-08: Commented out for now to allow fix for problem with large
260    programs in the mega128. */
261
262 /*  static CORE_ADDR */
263 /*  avr_make_eaddr (CORE_ADDR x) */
264 /*  { */
265 /*    return ((x) | AVR_EMEM_START); */
266 /*  } */
267
268 /*  static int */
269 /*  avr_eaddr_p (CORE_ADDR x) */
270 /*  { */
271 /*    return (((x) & AVR_MEM_MASK) == AVR_EMEM_START); */
272 /*  } */
273
274 /*  static CORE_ADDR */
275 /*  avr_convert_eaddr_to_raw (CORE_ADDR x) */
276 /*  { */
277 /*    return ((x) & 0xffffffff); */
278 /*  } */
279
280 /* Convert from address to pointer and vice-versa. */
281
282 static void
283 avr_address_to_pointer (struct gdbarch *gdbarch,
284                         struct type *type, gdb_byte *buf, CORE_ADDR addr)
285 {
286   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
287
288   /* Is it a code address?  */
289   if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
290       || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD)
291     {
292       store_unsigned_integer (buf, TYPE_LENGTH (type), byte_order,
293                               avr_convert_iaddr_to_raw (addr >> 1));
294     }
295   else
296     {
297       /* Strip off any upper segment bits.  */
298       store_unsigned_integer (buf, TYPE_LENGTH (type), byte_order,
299                               avr_convert_saddr_to_raw (addr));
300     }
301 }
302
303 static CORE_ADDR
304 avr_pointer_to_address (struct gdbarch *gdbarch,
305                         struct type *type, const gdb_byte *buf)
306 {
307   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
308   CORE_ADDR addr
309     = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order);
310
311   /* Is it a code address?  */
312   if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
313       || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD
314       || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type)))
315     return avr_make_iaddr (addr << 1);
316   else
317     return avr_make_saddr (addr);
318 }
319
320 static CORE_ADDR
321 avr_read_pc (struct regcache *regcache)
322 {
323   ULONGEST pc;
324   regcache_cooked_read_unsigned (regcache, AVR_PC_REGNUM, &pc);
325   return avr_make_iaddr (pc);
326 }
327
328 static void
329 avr_write_pc (struct regcache *regcache, CORE_ADDR val)
330 {
331   regcache_cooked_write_unsigned (regcache, AVR_PC_REGNUM,
332                                   avr_convert_iaddr_to_raw (val));
333 }
334
335 /* Function: avr_scan_prologue
336
337    This function decodes an AVR function prologue to determine:
338      1) the size of the stack frame
339      2) which registers are saved on it
340      3) the offsets of saved regs
341    This information is stored in the avr_unwind_cache structure.
342
343    Some devices lack the sbiw instruction, so on those replace this:
344         sbiw    r28, XX
345    with this:
346         subi    r28,lo8(XX)
347         sbci    r29,hi8(XX)
348
349    A typical AVR function prologue with a frame pointer might look like this:
350         push    rXX        ; saved regs
351         ...
352         push    r28
353         push    r29
354         in      r28,__SP_L__
355         in      r29,__SP_H__
356         sbiw    r28,<LOCALS_SIZE>
357         in      __tmp_reg__,__SREG__
358         cli
359         out     __SP_H__,r29
360         out     __SREG__,__tmp_reg__
361         out     __SP_L__,r28
362
363    A typical AVR function prologue without a frame pointer might look like
364    this:
365         push    rXX        ; saved regs
366         ...
367
368    A main function prologue looks like this:
369         ldi     r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>)
370         ldi     r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>)
371         out     __SP_H__,r29
372         out     __SP_L__,r28
373
374    A signal handler prologue looks like this:
375         push    __zero_reg__
376         push    __tmp_reg__
377         in      __tmp_reg__, __SREG__
378         push    __tmp_reg__
379         clr     __zero_reg__
380         push    rXX             ; save registers r18:r27, r30:r31
381         ...
382         push    r28             ; save frame pointer
383         push    r29
384         in      r28, __SP_L__
385         in      r29, __SP_H__
386         sbiw    r28, <LOCALS_SIZE>
387         out     __SP_H__, r29
388         out     __SP_L__, r28
389         
390    A interrupt handler prologue looks like this:
391         sei
392         push    __zero_reg__
393         push    __tmp_reg__
394         in      __tmp_reg__, __SREG__
395         push    __tmp_reg__
396         clr     __zero_reg__
397         push    rXX             ; save registers r18:r27, r30:r31
398         ...
399         push    r28             ; save frame pointer
400         push    r29
401         in      r28, __SP_L__
402         in      r29, __SP_H__
403         sbiw    r28, <LOCALS_SIZE>
404         cli
405         out     __SP_H__, r29
406         sei     
407         out     __SP_L__, r28
408
409    A `-mcall-prologues' prologue looks like this (Note that the megas use a
410    jmp instead of a rjmp, thus the prologue is one word larger since jmp is a
411    32 bit insn and rjmp is a 16 bit insn):
412         ldi     r26,lo8(<LOCALS_SIZE>)
413         ldi     r27,hi8(<LOCALS_SIZE>)
414         ldi     r30,pm_lo8(.L_foo_body)
415         ldi     r31,pm_hi8(.L_foo_body)
416         rjmp    __prologue_saves__+RRR
417         .L_foo_body:  */
418
419 /* Not really part of a prologue, but still need to scan for it, is when a
420    function prologue moves values passed via registers as arguments to new
421    registers. In this case, all local variables live in registers, so there
422    may be some register saves. This is what it looks like:
423         movw    rMM, rNN
424         ...
425
426    There could be multiple movw's. If the target doesn't have a movw insn, it
427    will use two mov insns. This could be done after any of the above prologue
428    types.  */
429
430 static CORE_ADDR
431 avr_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end,
432                    struct avr_unwind_cache *info)
433 {
434   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
435   int i;
436   unsigned short insn;
437   int scan_stage = 0;
438   struct minimal_symbol *msymbol;
439   unsigned char prologue[AVR_MAX_PROLOGUE_SIZE];
440   int vpc = 0;
441   int len;
442
443   len = pc_end - pc_beg;
444   if (len > AVR_MAX_PROLOGUE_SIZE)
445     len = AVR_MAX_PROLOGUE_SIZE;
446
447   /* FIXME: TRoth/2003-06-11: This could be made more efficient by only
448      reading in the bytes of the prologue. The problem is that the figuring
449      out where the end of the prologue is is a bit difficult. The old code 
450      tried to do that, but failed quite often.  */
451   read_memory (pc_beg, prologue, len);
452
453   /* Scanning main()'s prologue
454      ldi r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>)
455      ldi r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>)
456      out __SP_H__,r29
457      out __SP_L__,r28 */
458
459   if (len >= 4)
460     {
461       CORE_ADDR locals;
462       static const unsigned char img[] = {
463         0xde, 0xbf,             /* out __SP_H__,r29 */
464         0xcd, 0xbf              /* out __SP_L__,r28 */
465       };
466
467       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
468       /* ldi r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>) */
469       if ((insn & 0xf0f0) == 0xe0c0)
470         {
471           locals = (insn & 0xf) | ((insn & 0x0f00) >> 4);
472           insn = extract_unsigned_integer (&prologue[vpc + 2], 2, byte_order);
473           /* ldi r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>) */
474           if ((insn & 0xf0f0) == 0xe0d0)
475             {
476               locals |= ((insn & 0xf) | ((insn & 0x0f00) >> 4)) << 8;
477               if (vpc + 4 + sizeof (img) < len
478                   && memcmp (prologue + vpc + 4, img, sizeof (img)) == 0)
479                 {
480                   info->prologue_type = AVR_PROLOGUE_MAIN;
481                   info->base = locals;
482                   return pc_beg + 4;
483                 }
484             }
485         }
486     }
487
488   /* Scanning `-mcall-prologues' prologue
489      Classic prologue is 10 bytes, mega prologue is a 12 bytes long */
490
491   while (1)     /* Using a while to avoid many goto's */
492     {
493       int loc_size;
494       int body_addr;
495       unsigned num_pushes;
496       int pc_offset = 0;
497
498       /* At least the fifth instruction must have been executed to
499          modify frame shape.  */
500       if (len < 10)
501         break;
502
503       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
504       /* ldi r26,<LOCALS_SIZE> */
505       if ((insn & 0xf0f0) != 0xe0a0)
506         break;
507       loc_size = (insn & 0xf) | ((insn & 0x0f00) >> 4);
508       pc_offset += 2;
509
510       insn = extract_unsigned_integer (&prologue[vpc + 2], 2, byte_order);
511       /* ldi r27,<LOCALS_SIZE> / 256 */
512       if ((insn & 0xf0f0) != 0xe0b0)
513         break;
514       loc_size |= ((insn & 0xf) | ((insn & 0x0f00) >> 4)) << 8;
515       pc_offset += 2;
516
517       insn = extract_unsigned_integer (&prologue[vpc + 4], 2, byte_order);
518       /* ldi r30,pm_lo8(.L_foo_body) */
519       if ((insn & 0xf0f0) != 0xe0e0)
520         break;
521       body_addr = (insn & 0xf) | ((insn & 0x0f00) >> 4);
522       pc_offset += 2;
523
524       insn = extract_unsigned_integer (&prologue[vpc + 6], 2, byte_order);
525       /* ldi r31,pm_hi8(.L_foo_body) */
526       if ((insn & 0xf0f0) != 0xe0f0)
527         break;
528       body_addr |= ((insn & 0xf) | ((insn & 0x0f00) >> 4)) << 8;
529       pc_offset += 2;
530
531       msymbol = lookup_minimal_symbol ("__prologue_saves__", NULL, NULL);
532       if (!msymbol)
533         break;
534
535       insn = extract_unsigned_integer (&prologue[vpc + 8], 2, byte_order);
536       /* rjmp __prologue_saves__+RRR */
537       if ((insn & 0xf000) == 0xc000)
538         {
539           /* Extract PC relative offset from RJMP */
540           i = (insn & 0xfff) | (insn & 0x800 ? (-1 ^ 0xfff) : 0);
541           /* Convert offset to byte addressable mode */
542           i *= 2;
543           /* Destination address */
544           i += pc_beg + 10;
545
546           if (body_addr != (pc_beg + 10)/2)
547             break;
548
549           pc_offset += 2;
550         }
551       else if ((insn & 0xfe0e) == 0x940c)
552         {
553           /* Extract absolute PC address from JMP */
554           i = (((insn & 0x1) | ((insn & 0x1f0) >> 3) << 16)
555                | (extract_unsigned_integer (&prologue[vpc + 10], 2, byte_order)
556                   & 0xffff));
557           /* Convert address to byte addressable mode */
558           i *= 2;
559
560           if (body_addr != (pc_beg + 12)/2)
561             break;
562
563           pc_offset += 4;
564         }
565       else
566         break;
567
568       /* Resolve offset (in words) from __prologue_saves__ symbol.
569          Which is a pushes count in `-mcall-prologues' mode */
570       num_pushes = AVR_MAX_PUSHES - (i - SYMBOL_VALUE_ADDRESS (msymbol)) / 2;
571
572       if (num_pushes > AVR_MAX_PUSHES)
573         {
574           fprintf_unfiltered (gdb_stderr, _("Num pushes too large: %d\n"),
575                               num_pushes);
576           num_pushes = 0;
577         }
578
579       if (num_pushes)
580         {
581           int from;
582
583           info->saved_regs[AVR_FP_REGNUM + 1].addr = num_pushes;
584           if (num_pushes >= 2)
585             info->saved_regs[AVR_FP_REGNUM].addr = num_pushes - 1;
586
587           i = 0;
588           for (from = AVR_LAST_PUSHED_REGNUM + 1 - (num_pushes - 2);
589                from <= AVR_LAST_PUSHED_REGNUM; ++from)
590             info->saved_regs [from].addr = ++i;
591         }
592       info->size = loc_size + num_pushes;
593       info->prologue_type = AVR_PROLOGUE_CALL;
594
595       return pc_beg + pc_offset;
596     }
597
598   /* Scan for the beginning of the prologue for an interrupt or signal
599      function.  Note that we have to set the prologue type here since the
600      third stage of the prologue may not be present (e.g. no saved registered
601      or changing of the SP register).  */
602
603   if (1)
604     {
605       static const unsigned char img[] = {
606         0x78, 0x94,             /* sei */
607         0x1f, 0x92,             /* push r1 */
608         0x0f, 0x92,             /* push r0 */
609         0x0f, 0xb6,             /* in r0,0x3f SREG */
610         0x0f, 0x92,             /* push r0 */
611         0x11, 0x24              /* clr r1 */
612       };
613       if (len >= sizeof (img)
614           && memcmp (prologue, img, sizeof (img)) == 0)
615         {
616           info->prologue_type = AVR_PROLOGUE_INTR;
617           vpc += sizeof (img);
618           info->saved_regs[AVR_SREG_REGNUM].addr = 3;
619           info->saved_regs[0].addr = 2;
620           info->saved_regs[1].addr = 1;
621           info->size += 3;
622         }
623       else if (len >= sizeof (img) - 2
624                && memcmp (img + 2, prologue, sizeof (img) - 2) == 0)
625         {
626           info->prologue_type = AVR_PROLOGUE_SIG;
627           vpc += sizeof (img) - 2;
628           info->saved_regs[AVR_SREG_REGNUM].addr = 3;
629           info->saved_regs[0].addr = 2;
630           info->saved_regs[1].addr = 1;
631           info->size += 3;
632         }
633     }
634
635   /* First stage of the prologue scanning.
636      Scan pushes (saved registers) */
637
638   for (; vpc < len; vpc += 2)
639     {
640       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
641       if ((insn & 0xfe0f) == 0x920f)    /* push rXX */
642         {
643           /* Bits 4-9 contain a mask for registers R0-R32. */
644           int regno = (insn & 0x1f0) >> 4;
645           info->size++;
646           info->saved_regs[regno].addr = info->size;
647           scan_stage = 1;
648         }
649       else
650         break;
651     }
652
653   if (vpc >= AVR_MAX_PROLOGUE_SIZE)
654      fprintf_unfiltered (gdb_stderr,
655                          _("Hit end of prologue while scanning pushes\n"));
656
657   /* Second stage of the prologue scanning.
658      Scan:
659      in r28,__SP_L__
660      in r29,__SP_H__ */
661
662   if (scan_stage == 1 && vpc < len)
663     {
664       static const unsigned char img[] = {
665         0xcd, 0xb7,             /* in r28,__SP_L__ */
666         0xde, 0xb7              /* in r29,__SP_H__ */
667       };
668       unsigned short insn1;
669
670       if (vpc + sizeof (img) < len
671           && memcmp (prologue + vpc, img, sizeof (img)) == 0)
672         {
673           vpc += 4;
674           scan_stage = 2;
675         }
676     }
677
678   /* Third stage of the prologue scanning. (Really two stages)
679      Scan for:
680      sbiw r28,XX or subi r28,lo8(XX)
681                     sbci r29,hi8(XX)
682      in __tmp_reg__,__SREG__
683      cli
684      out __SP_H__,r29
685      out __SREG__,__tmp_reg__
686      out __SP_L__,r28 */
687
688   if (scan_stage == 2 && vpc < len)
689     {
690       int locals_size = 0;
691       static const unsigned char img[] = {
692         0x0f, 0xb6,             /* in r0,0x3f */
693         0xf8, 0x94,             /* cli */
694         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
695         0x0f, 0xbe,             /* out 0x3f,r0  ; SREG */
696         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
697       };
698       static const unsigned char img_sig[] = {
699         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
700         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
701       };
702       static const unsigned char img_int[] = {
703         0xf8, 0x94,             /* cli */
704         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
705         0x78, 0x94,             /* sei */
706         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
707       };
708
709       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
710       vpc += 2;
711       if ((insn & 0xff30) == 0x9720)    /* sbiw r28,XXX */
712         locals_size = (insn & 0xf) | ((insn & 0xc0) >> 2);
713       else if ((insn & 0xf0f0) == 0x50c0)       /* subi r28,lo8(XX) */
714         {
715           locals_size = (insn & 0xf) | ((insn & 0xf00) >> 4);
716           insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
717           vpc += 2;
718           locals_size += ((insn & 0xf) | ((insn & 0xf00) >> 4) << 8);
719         }
720       else
721         return pc_beg + vpc;
722
723       /* Scan the last part of the prologue. May not be present for interrupt
724          or signal handler functions, which is why we set the prologue type
725          when we saw the beginning of the prologue previously.  */
726
727       if (vpc + sizeof (img_sig) < len
728           && memcmp (prologue + vpc, img_sig, sizeof (img_sig)) == 0)
729         {
730           vpc += sizeof (img_sig);
731         }
732       else if (vpc + sizeof (img_int) < len 
733                && memcmp (prologue + vpc, img_int, sizeof (img_int)) == 0)
734         {
735           vpc += sizeof (img_int);
736         }
737       if (vpc + sizeof (img) < len
738           && memcmp (prologue + vpc, img, sizeof (img)) == 0)
739         {
740           info->prologue_type = AVR_PROLOGUE_NORMAL;
741           vpc += sizeof (img);
742         }
743
744       info->size += locals_size;
745
746       /* Fall through.  */
747     }
748
749   /* If we got this far, we could not scan the prologue, so just return the pc
750      of the frame plus an adjustment for argument move insns.  */
751
752   for (; vpc < len; vpc += 2)
753     {
754       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
755       if ((insn & 0xff00) == 0x0100)    /* movw rXX, rYY */
756         continue;
757       else if ((insn & 0xfc00) == 0x2c00) /* mov rXX, rYY */
758         continue;
759       else
760           break;
761     }
762     
763   return pc_beg + vpc;
764 }
765
766 static CORE_ADDR
767 avr_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
768 {
769   CORE_ADDR func_addr, func_end;
770   CORE_ADDR prologue_end = pc;
771
772   /* See what the symbol table says */
773
774   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
775     {
776       struct symtab_and_line sal;
777       struct avr_unwind_cache info = {0};
778       struct trad_frame_saved_reg saved_regs[AVR_NUM_REGS];
779
780       info.saved_regs = saved_regs;
781
782       /* Need to run the prologue scanner to figure out if the function has a
783          prologue and possibly skip over moving arguments passed via registers
784          to other registers.  */
785
786       prologue_end = avr_scan_prologue (gdbarch, func_addr, func_end, &info);
787
788       if (info.prologue_type == AVR_PROLOGUE_NONE)
789         return pc;
790       else
791         {
792           sal = find_pc_line (func_addr, 0);
793
794           if (sal.line != 0 && sal.end < func_end)
795             return sal.end;
796         }
797     }
798
799   /* Either we didn't find the start of this function (nothing we can do),
800      or there's no line info, or the line after the prologue is after
801      the end of the function (there probably isn't a prologue). */
802
803   return prologue_end;
804 }
805
806 /* Not all avr devices support the BREAK insn. Those that don't should treat
807    it as a NOP. Thus, it should be ok. Since the avr is currently a remote
808    only target, this shouldn't be a problem (I hope). TRoth/2003-05-14  */
809
810 static const unsigned char *
811 avr_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR * pcptr, int *lenptr)
812 {
813     static const unsigned char avr_break_insn [] = { 0x98, 0x95 };
814     *lenptr = sizeof (avr_break_insn);
815     return avr_break_insn;
816 }
817
818 /* Given a return value in `regcache' with a type `type', 
819    extract and copy its value into `valbuf'.
820
821    Return values are always passed via registers r25:r24:...  */
822
823 static void
824 avr_extract_return_value (struct type *type, struct regcache *regcache,
825                           gdb_byte *valbuf)
826 {
827   struct gdbarch *gdbarch = get_regcache_arch (regcache);
828   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
829   ULONGEST r24, r25;
830   ULONGEST c;
831   int len;
832   if (TYPE_LENGTH (type) == 1)
833     {
834       regcache_cooked_read_unsigned (regcache, 24, &c);
835       store_unsigned_integer (valbuf, 1, byte_order, c);
836     }
837   else
838     {
839       int i;
840       /* The MSB of the return value is always in r25, calculate which
841          register holds the LSB.  */
842       int lsb_reg = 25 - TYPE_LENGTH (type) + 1;
843
844       for (i=0; i< TYPE_LENGTH (type); i++)
845         {
846           regcache_cooked_read (regcache, lsb_reg + i,
847                                 (bfd_byte *) valbuf + i);
848         }
849     }
850 }
851
852 /* Determine, for architecture GDBARCH, how a return value of TYPE
853    should be returned.  If it is supposed to be returned in registers,
854    and READBUF is non-zero, read the appropriate value from REGCACHE,
855    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
856    from WRITEBUF into REGCACHE.  */
857
858 static enum return_value_convention
859 avr_return_value (struct gdbarch *gdbarch, struct type *func_type,
860                   struct type *valtype, struct regcache *regcache,
861                   gdb_byte *readbuf, const gdb_byte *writebuf)
862 {
863   int struct_return = ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
864                         || TYPE_CODE (valtype) == TYPE_CODE_UNION
865                         || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
866                        && !(TYPE_LENGTH (valtype) == 1
867                             || TYPE_LENGTH (valtype) == 2
868                             || TYPE_LENGTH (valtype) == 4
869                             || TYPE_LENGTH (valtype) == 8));
870
871   if (writebuf != NULL)
872     {
873       gdb_assert (!struct_return);
874       error (_("Cannot store return value."));
875     }
876
877   if (readbuf != NULL)
878     {
879       gdb_assert (!struct_return);
880       avr_extract_return_value (valtype, regcache, readbuf);
881     }
882
883   if (struct_return)
884     return RETURN_VALUE_STRUCT_CONVENTION;
885   else
886     return RETURN_VALUE_REGISTER_CONVENTION;
887 }
888
889
890 /* Put here the code to store, into fi->saved_regs, the addresses of
891    the saved registers of frame described by FRAME_INFO.  This
892    includes special registers such as pc and fp saved in special ways
893    in the stack frame.  sp is even more special: the address we return
894    for it IS the sp for the next frame. */
895
896 static struct avr_unwind_cache *
897 avr_frame_unwind_cache (struct frame_info *this_frame,
898                         void **this_prologue_cache)
899 {
900   CORE_ADDR start_pc, current_pc;
901   ULONGEST prev_sp;
902   ULONGEST this_base;
903   struct avr_unwind_cache *info;
904   struct gdbarch *gdbarch;
905   struct gdbarch_tdep *tdep;
906   int i;
907
908   if (*this_prologue_cache)
909     return *this_prologue_cache;
910
911   info = FRAME_OBSTACK_ZALLOC (struct avr_unwind_cache);
912   *this_prologue_cache = info;
913   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
914
915   info->size = 0;
916   info->prologue_type = AVR_PROLOGUE_NONE;
917
918   start_pc = get_frame_func (this_frame);
919   current_pc = get_frame_pc (this_frame);
920   if ((start_pc > 0) && (start_pc <= current_pc))
921     avr_scan_prologue (get_frame_arch (this_frame),
922                        start_pc, current_pc, info);
923
924   if ((info->prologue_type != AVR_PROLOGUE_NONE)
925       && (info->prologue_type != AVR_PROLOGUE_MAIN))
926     {
927       ULONGEST high_base;       /* High byte of FP */
928
929       /* The SP was moved to the FP.  This indicates that a new frame
930          was created.  Get THIS frame's FP value by unwinding it from
931          the next frame.  */
932       this_base = get_frame_register_unsigned (this_frame, AVR_FP_REGNUM);
933       high_base = get_frame_register_unsigned (this_frame, AVR_FP_REGNUM + 1);
934       this_base += (high_base << 8);
935       
936       /* The FP points at the last saved register.  Adjust the FP back
937          to before the first saved register giving the SP.  */
938       prev_sp = this_base + info->size; 
939    }
940   else
941     {
942       /* Assume that the FP is this frame's SP but with that pushed
943          stack space added back.  */
944       this_base = get_frame_register_unsigned (this_frame, AVR_SP_REGNUM);
945       prev_sp = this_base + info->size;
946     }
947
948   /* Add 1 here to adjust for the post-decrement nature of the push
949      instruction.*/
950   info->prev_sp = avr_make_saddr (prev_sp + 1);
951   info->base = avr_make_saddr (this_base);
952
953   gdbarch = get_frame_arch (this_frame);
954
955   /* Adjust all the saved registers so that they contain addresses and not
956      offsets.  */
957   for (i = 0; i < gdbarch_num_regs (gdbarch) - 1; i++)
958     if (info->saved_regs[i].addr > 0)
959       info->saved_regs[i].addr = info->prev_sp - info->saved_regs[i].addr;
960
961   /* Except for the main and startup code, the return PC is always saved on
962      the stack and is at the base of the frame. */
963
964   if (info->prologue_type != AVR_PROLOGUE_MAIN)
965     info->saved_regs[AVR_PC_REGNUM].addr = info->prev_sp;
966
967   /* The previous frame's SP needed to be computed.  Save the computed
968      value.  */
969   tdep = gdbarch_tdep (gdbarch);
970   trad_frame_set_value (info->saved_regs, AVR_SP_REGNUM,
971                         info->prev_sp - 1 + tdep->call_length);
972
973   return info;
974 }
975
976 static CORE_ADDR
977 avr_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
978 {
979   ULONGEST pc;
980
981   pc = frame_unwind_register_unsigned (next_frame, AVR_PC_REGNUM);
982
983   return avr_make_iaddr (pc);
984 }
985
986 static CORE_ADDR
987 avr_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
988 {
989   ULONGEST sp;
990
991   sp = frame_unwind_register_unsigned (next_frame, AVR_SP_REGNUM);
992
993   return avr_make_saddr (sp);
994 }
995
996 /* Given a GDB frame, determine the address of the calling function's
997    frame.  This will be used to create a new GDB frame struct.  */
998
999 static void
1000 avr_frame_this_id (struct frame_info *this_frame,
1001                    void **this_prologue_cache,
1002                    struct frame_id *this_id)
1003 {
1004   struct avr_unwind_cache *info
1005     = avr_frame_unwind_cache (this_frame, this_prologue_cache);
1006   CORE_ADDR base;
1007   CORE_ADDR func;
1008   struct frame_id id;
1009
1010   /* The FUNC is easy.  */
1011   func = get_frame_func (this_frame);
1012
1013   /* Hopefully the prologue analysis either correctly determined the
1014      frame's base (which is the SP from the previous frame), or set
1015      that base to "NULL".  */
1016   base = info->prev_sp;
1017   if (base == 0)
1018     return;
1019
1020   id = frame_id_build (base, func);
1021   (*this_id) = id;
1022 }
1023
1024 static struct value *
1025 avr_frame_prev_register (struct frame_info *this_frame,
1026                          void **this_prologue_cache, int regnum)
1027 {
1028   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1029   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1030   struct avr_unwind_cache *info
1031     = avr_frame_unwind_cache (this_frame, this_prologue_cache);
1032
1033   if (regnum == AVR_PC_REGNUM)
1034     {
1035       if (trad_frame_addr_p (info->saved_regs, regnum))
1036         {
1037           /* Reading the return PC from the PC register is slightly
1038              abnormal.  register_size(AVR_PC_REGNUM) says it is 4 bytes,
1039              but in reality, only two bytes (3 in upcoming mega256) are
1040              stored on the stack.
1041
1042              Also, note that the value on the stack is an addr to a word
1043              not a byte, so we will need to multiply it by two at some
1044              point. 
1045
1046              And to confuse matters even more, the return address stored
1047              on the stack is in big endian byte order, even though most
1048              everything else about the avr is little endian. Ick!  */
1049           ULONGEST pc;
1050           int i;
1051           unsigned char buf[3];
1052           struct gdbarch *gdbarch = get_frame_arch (this_frame);
1053           struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1054
1055           read_memory (info->saved_regs[regnum].addr, buf, tdep->call_length);
1056
1057           /* Extract the PC read from memory as a big-endian.  */
1058           pc = 0;
1059           for (i = 0; i < tdep->call_length; i++)
1060             pc = (pc << 8) | buf[i];
1061
1062           return frame_unwind_got_constant (this_frame, regnum, pc << 1);
1063         }
1064
1065       return frame_unwind_got_optimized (this_frame, regnum);
1066     }
1067
1068   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
1069 }
1070
1071 static const struct frame_unwind avr_frame_unwind = {
1072   NORMAL_FRAME,
1073   avr_frame_this_id,
1074   avr_frame_prev_register,
1075   NULL,
1076   default_frame_sniffer
1077 };
1078
1079 static CORE_ADDR
1080 avr_frame_base_address (struct frame_info *this_frame, void **this_cache)
1081 {
1082   struct avr_unwind_cache *info
1083     = avr_frame_unwind_cache (this_frame, this_cache);
1084
1085   return info->base;
1086 }
1087
1088 static const struct frame_base avr_frame_base = {
1089   &avr_frame_unwind,
1090   avr_frame_base_address,
1091   avr_frame_base_address,
1092   avr_frame_base_address
1093 };
1094
1095 /* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
1096    frame.  The frame ID's base needs to match the TOS value saved by
1097    save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
1098
1099 static struct frame_id
1100 avr_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1101 {
1102   ULONGEST base;
1103
1104   base = get_frame_register_unsigned (this_frame, AVR_SP_REGNUM);
1105   return frame_id_build (avr_make_saddr (base), get_frame_pc (this_frame));
1106 }
1107
1108 /* When arguments must be pushed onto the stack, they go on in reverse
1109    order.  The below implements a FILO (stack) to do this. */
1110
1111 struct stack_item
1112 {
1113   int len;
1114   struct stack_item *prev;
1115   void *data;
1116 };
1117
1118 static struct stack_item *
1119 push_stack_item (struct stack_item *prev, const bfd_byte *contents, int len)
1120 {
1121   struct stack_item *si;
1122   si = xmalloc (sizeof (struct stack_item));
1123   si->data = xmalloc (len);
1124   si->len = len;
1125   si->prev = prev;
1126   memcpy (si->data, contents, len);
1127   return si;
1128 }
1129
1130 static struct stack_item *pop_stack_item (struct stack_item *si);
1131 static struct stack_item *
1132 pop_stack_item (struct stack_item *si)
1133 {
1134   struct stack_item *dead = si;
1135   si = si->prev;
1136   xfree (dead->data);
1137   xfree (dead);
1138   return si;
1139 }
1140
1141 /* Setup the function arguments for calling a function in the inferior.
1142
1143    On the AVR architecture, there are 18 registers (R25 to R8) which are
1144    dedicated for passing function arguments.  Up to the first 18 arguments
1145    (depending on size) may go into these registers.  The rest go on the stack.
1146
1147    All arguments are aligned to start in even-numbered registers (odd-sized
1148    arguments, including char, have one free register above them). For example,
1149    an int in arg1 and a char in arg2 would be passed as such:
1150
1151       arg1 -> r25:r24
1152       arg2 -> r22
1153
1154    Arguments that are larger than 2 bytes will be split between two or more
1155    registers as available, but will NOT be split between a register and the
1156    stack. Arguments that go onto the stack are pushed last arg first (this is
1157    similar to the d10v).  */
1158
1159 /* NOTE: TRoth/2003-06-17: The rest of this comment is old looks to be
1160    inaccurate.
1161
1162    An exceptional case exists for struct arguments (and possibly other
1163    aggregates such as arrays) -- if the size is larger than WORDSIZE bytes but
1164    not a multiple of WORDSIZE bytes.  In this case the argument is never split
1165    between the registers and the stack, but instead is copied in its entirety
1166    onto the stack, AND also copied into as many registers as there is room
1167    for.  In other words, space in registers permitting, two copies of the same
1168    argument are passed in.  As far as I can tell, only the one on the stack is
1169    used, although that may be a function of the level of compiler
1170    optimization.  I suspect this is a compiler bug.  Arguments of these odd
1171    sizes are left-justified within the word (as opposed to arguments smaller
1172    than WORDSIZE bytes, which are right-justified).
1173  
1174    If the function is to return an aggregate type such as a struct, the caller
1175    must allocate space into which the callee will copy the return value.  In
1176    this case, a pointer to the return value location is passed into the callee
1177    in register R0, which displaces one of the other arguments passed in via
1178    registers R0 to R2. */
1179
1180 static CORE_ADDR
1181 avr_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1182                      struct regcache *regcache, CORE_ADDR bp_addr,
1183                      int nargs, struct value **args, CORE_ADDR sp,
1184                      int struct_return, CORE_ADDR struct_addr)
1185 {
1186   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1187   int i;
1188   unsigned char buf[3];
1189   int call_length = gdbarch_tdep (gdbarch)->call_length;
1190   CORE_ADDR return_pc = avr_convert_iaddr_to_raw (bp_addr);
1191   int regnum = AVR_ARGN_REGNUM;
1192   struct stack_item *si = NULL;
1193
1194 #if 0
1195   /* FIXME: TRoth/2003-06-18: Not sure what to do when returning a struct. */
1196   if (struct_return)
1197     {
1198       fprintf_unfiltered (gdb_stderr, "struct_return: 0x%lx\n", struct_addr);
1199       regcache_cooked_write_unsigned (regcache, argreg--, struct_addr & 0xff);
1200       regcache_cooked_write_unsigned (regcache, argreg--, (struct_addr >>8) & 0xff);
1201     }
1202 #endif
1203
1204   for (i = 0; i < nargs; i++)
1205     {
1206       int last_regnum;
1207       int j;
1208       struct value *arg = args[i];
1209       struct type *type = check_typedef (value_type (arg));
1210       const bfd_byte *contents = value_contents (arg);
1211       int len = TYPE_LENGTH (type);
1212
1213       /* Calculate the potential last register needed. */
1214       last_regnum = regnum - (len + (len & 1));
1215
1216       /* If there are registers available, use them. Once we start putting
1217          stuff on the stack, all subsequent args go on stack. */
1218       if ((si == NULL) && (last_regnum >= 8))
1219         {
1220           ULONGEST val;
1221
1222           /* Skip a register for odd length args. */
1223           if (len & 1)
1224             regnum--;
1225
1226           val = extract_unsigned_integer (contents, len, byte_order);
1227           for (j = 0; j < len; j++)
1228             regcache_cooked_write_unsigned
1229               (regcache, regnum--, val >> (8 * (len - j - 1)));
1230         }
1231       /* No registers available, push the args onto the stack. */
1232       else
1233         {
1234           /* From here on, we don't care about regnum. */
1235           si = push_stack_item (si, contents, len);
1236         }
1237     }
1238
1239   /* Push args onto the stack. */
1240   while (si)
1241     {
1242       sp -= si->len;
1243       /* Add 1 to sp here to account for post decr nature of pushes. */
1244       write_memory (sp + 1, si->data, si->len);
1245       si = pop_stack_item (si);
1246     }
1247
1248   /* Set the return address.  For the avr, the return address is the BP_ADDR.
1249      Need to push the return address onto the stack noting that it needs to be
1250      in big-endian order on the stack.  */
1251   for (i = 1; i <= call_length; i++)
1252     {
1253       buf[call_length - i] = return_pc & 0xff;
1254       return_pc >>= 8;
1255     }
1256
1257   sp -= call_length;
1258   /* Use 'sp + 1' since pushes are post decr ops. */
1259   write_memory (sp + 1, buf, call_length);
1260
1261   /* Finally, update the SP register. */
1262   regcache_cooked_write_unsigned (regcache, AVR_SP_REGNUM,
1263                                   avr_convert_saddr_to_raw (sp));
1264
1265   /* Return SP value for the dummy frame, where the return address hasn't been
1266      pushed.  */
1267   return sp + call_length;
1268 }
1269
1270 /* Unfortunately dwarf2 register for SP is 32.  */
1271
1272 static int
1273 avr_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
1274 {
1275   if (reg >= 0 && reg < 32)
1276     return reg;
1277   if (reg == 32)
1278     return AVR_SP_REGNUM;
1279
1280   warning (_("Unmapped DWARF Register #%d encountered."), reg);
1281
1282   return -1;
1283 }
1284
1285 /* Initialize the gdbarch structure for the AVR's. */
1286
1287 static struct gdbarch *
1288 avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1289 {
1290   struct gdbarch *gdbarch;
1291   struct gdbarch_tdep *tdep;
1292   struct gdbarch_list *best_arch;
1293   int call_length;
1294
1295   /* Avr-6 call instructions save 3 bytes.  */
1296   switch (info.bfd_arch_info->mach)
1297     {
1298     case bfd_mach_avr1:
1299     case bfd_mach_avr2:
1300     case bfd_mach_avr3:
1301     case bfd_mach_avr4:
1302     case bfd_mach_avr5:
1303     default:
1304       call_length = 2;
1305       break;
1306     case bfd_mach_avr6:
1307       call_length = 3;
1308       break;
1309     }
1310
1311   /* If there is already a candidate, use it.  */
1312   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1313        best_arch != NULL;
1314        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1315     {
1316       if (gdbarch_tdep (best_arch->gdbarch)->call_length == call_length)
1317         return best_arch->gdbarch;
1318     }
1319
1320   /* None found, create a new architecture from the information provided. */
1321   tdep = XMALLOC (struct gdbarch_tdep);
1322   gdbarch = gdbarch_alloc (&info, tdep);
1323   
1324   tdep->call_length = call_length;
1325
1326   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1327   set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1328   set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1329   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1330   set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1331   set_gdbarch_addr_bit (gdbarch, 32);
1332
1333   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1334   set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1335   set_gdbarch_long_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1336
1337   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
1338   set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
1339   set_gdbarch_long_double_format (gdbarch, floatformats_ieee_single);
1340
1341   set_gdbarch_read_pc (gdbarch, avr_read_pc);
1342   set_gdbarch_write_pc (gdbarch, avr_write_pc);
1343
1344   set_gdbarch_num_regs (gdbarch, AVR_NUM_REGS);
1345
1346   set_gdbarch_sp_regnum (gdbarch, AVR_SP_REGNUM);
1347   set_gdbarch_pc_regnum (gdbarch, AVR_PC_REGNUM);
1348
1349   set_gdbarch_register_name (gdbarch, avr_register_name);
1350   set_gdbarch_register_type (gdbarch, avr_register_type);
1351
1352   set_gdbarch_return_value (gdbarch, avr_return_value);
1353   set_gdbarch_print_insn (gdbarch, print_insn_avr);
1354
1355   set_gdbarch_push_dummy_call (gdbarch, avr_push_dummy_call);
1356
1357   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, avr_dwarf_reg_to_regnum);
1358
1359   set_gdbarch_address_to_pointer (gdbarch, avr_address_to_pointer);
1360   set_gdbarch_pointer_to_address (gdbarch, avr_pointer_to_address);
1361
1362   set_gdbarch_skip_prologue (gdbarch, avr_skip_prologue);
1363   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1364
1365   set_gdbarch_breakpoint_from_pc (gdbarch, avr_breakpoint_from_pc);
1366
1367   frame_unwind_append_unwinder (gdbarch, &avr_frame_unwind);
1368   frame_base_set_default (gdbarch, &avr_frame_base);
1369
1370   set_gdbarch_dummy_id (gdbarch, avr_dummy_id);
1371
1372   set_gdbarch_unwind_pc (gdbarch, avr_unwind_pc);
1373   set_gdbarch_unwind_sp (gdbarch, avr_unwind_sp);
1374
1375   return gdbarch;
1376 }
1377
1378 /* Send a query request to the avr remote target asking for values of the io
1379    registers. If args parameter is not NULL, then the user has requested info
1380    on a specific io register [This still needs implemented and is ignored for
1381    now]. The query string should be one of these forms:
1382
1383    "Ravr.io_reg" -> reply is "NN" number of io registers
1384
1385    "Ravr.io_reg:addr,len" where addr is first register and len is number of
1386    registers to be read. The reply should be "<NAME>,VV;" for each io register
1387    where, <NAME> is a string, and VV is the hex value of the register.
1388
1389    All io registers are 8-bit. */
1390
1391 static void
1392 avr_io_reg_read_command (char *args, int from_tty)
1393 {
1394   LONGEST bufsiz = 0;
1395   gdb_byte *buf;
1396   char query[400];
1397   char *p;
1398   unsigned int nreg = 0;
1399   unsigned int val;
1400   int i, j, k, step;
1401
1402   /* Find out how many io registers the target has. */
1403   bufsiz = target_read_alloc (&current_target, TARGET_OBJECT_AVR,
1404                               "avr.io_reg", &buf);
1405
1406   if (bufsiz <= 0)
1407     {
1408       fprintf_unfiltered (gdb_stderr,
1409                           _("ERR: info io_registers NOT supported "
1410                             "by current target\n"));
1411       return;
1412     }
1413
1414   if (sscanf (buf, "%x", &nreg) != 1)
1415     {
1416       fprintf_unfiltered (gdb_stderr,
1417                           _("Error fetching number of io registers\n"));
1418       xfree (buf);
1419       return;
1420     }
1421
1422   xfree (buf);
1423
1424   reinitialize_more_filter ();
1425
1426   printf_unfiltered (_("Target has %u io registers:\n\n"), nreg);
1427
1428   /* only fetch up to 8 registers at a time to keep the buffer small */
1429   step = 8;
1430
1431   for (i = 0; i < nreg; i += step)
1432     {
1433       /* how many registers this round? */
1434       j = step;
1435       if ((i+j) >= nreg)
1436         j = nreg - i;           /* last block is less than 8 registers */
1437
1438       snprintf (query, sizeof (query) - 1, "avr.io_reg:%x,%x", i, j);
1439       bufsiz = target_read_alloc (&current_target, TARGET_OBJECT_AVR,
1440                                   query, &buf);
1441
1442       p = buf;
1443       for (k = i; k < (i + j); k++)
1444         {
1445           if (sscanf (p, "%[^,],%x;", query, &val) == 2)
1446             {
1447               printf_filtered ("[%02x] %-15s : %02x\n", k, query, val);
1448               while ((*p != ';') && (*p != '\0'))
1449                 p++;
1450               p++;              /* skip over ';' */
1451               if (*p == '\0')
1452                 break;
1453             }
1454         }
1455
1456       xfree (buf);
1457     }
1458 }
1459
1460 extern initialize_file_ftype _initialize_avr_tdep; /* -Wmissing-prototypes */
1461
1462 void
1463 _initialize_avr_tdep (void)
1464 {
1465   register_gdbarch_init (bfd_arch_avr, avr_gdbarch_init);
1466
1467   /* Add a new command to allow the user to query the avr remote target for
1468      the values of the io space registers in a saner way than just using
1469      `x/NNNb ADDR`. */
1470
1471   /* FIXME: TRoth/2002-02-18: This should probably be changed to 'info avr
1472      io_registers' to signify it is not available on other platforms. */
1473
1474   add_cmd ("io_registers", class_info, avr_io_reg_read_command,
1475            _("query remote avr target for io space register values"),
1476            &infolist);
1477 }