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   /* Handle static small stack allocation using rcall or push.  */
658
659   while (scan_stage == 1 && vpc < len)
660     {
661       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
662       if (insn == 0xd000)       /* rcall .+0 */
663         {
664           info->size += gdbarch_tdep (gdbarch)->call_length;
665           vpc += 2;
666         }
667       else if (insn == 0x920f)  /* push r0 */
668         {
669           info->size += 1;
670           vpc += 2;
671         }
672       else
673         break;
674     }
675
676   /* Second stage of the prologue scanning.
677      Scan:
678      in r28,__SP_L__
679      in r29,__SP_H__ */
680
681   if (scan_stage == 1 && vpc < len)
682     {
683       static const unsigned char img[] = {
684         0xcd, 0xb7,             /* in r28,__SP_L__ */
685         0xde, 0xb7              /* in r29,__SP_H__ */
686       };
687       unsigned short insn1;
688
689       if (vpc + sizeof (img) < len
690           && memcmp (prologue + vpc, img, sizeof (img)) == 0)
691         {
692           vpc += 4;
693           scan_stage = 2;
694         }
695     }
696
697   /* Third stage of the prologue scanning. (Really two stages)
698      Scan for:
699      sbiw r28,XX or subi r28,lo8(XX)
700                     sbci r29,hi8(XX)
701      in __tmp_reg__,__SREG__
702      cli
703      out __SP_H__,r29
704      out __SREG__,__tmp_reg__
705      out __SP_L__,r28 */
706
707   if (scan_stage == 2 && vpc < len)
708     {
709       int locals_size = 0;
710       static const unsigned char img[] = {
711         0x0f, 0xb6,             /* in r0,0x3f */
712         0xf8, 0x94,             /* cli */
713         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
714         0x0f, 0xbe,             /* out 0x3f,r0  ; SREG */
715         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
716       };
717       static const unsigned char img_sig[] = {
718         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
719         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
720       };
721       static const unsigned char img_int[] = {
722         0xf8, 0x94,             /* cli */
723         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
724         0x78, 0x94,             /* sei */
725         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
726       };
727
728       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
729       if ((insn & 0xff30) == 0x9720)    /* sbiw r28,XXX */
730         {
731           locals_size = (insn & 0xf) | ((insn & 0xc0) >> 2);
732           vpc += 2;
733         }
734       else if ((insn & 0xf0f0) == 0x50c0)       /* subi r28,lo8(XX) */
735         {
736           locals_size = (insn & 0xf) | ((insn & 0xf00) >> 4);
737           vpc += 2;
738           insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
739           vpc += 2;
740           locals_size += ((insn & 0xf) | ((insn & 0xf00) >> 4)) << 8;
741         }
742       else
743         return pc_beg + vpc;
744
745       /* Scan the last part of the prologue. May not be present for interrupt
746          or signal handler functions, which is why we set the prologue type
747          when we saw the beginning of the prologue previously.  */
748
749       if (vpc + sizeof (img_sig) < len
750           && memcmp (prologue + vpc, img_sig, sizeof (img_sig)) == 0)
751         {
752           vpc += sizeof (img_sig);
753         }
754       else if (vpc + sizeof (img_int) < len 
755                && memcmp (prologue + vpc, img_int, sizeof (img_int)) == 0)
756         {
757           vpc += sizeof (img_int);
758         }
759       if (vpc + sizeof (img) < len
760           && memcmp (prologue + vpc, img, sizeof (img)) == 0)
761         {
762           info->prologue_type = AVR_PROLOGUE_NORMAL;
763           vpc += sizeof (img);
764         }
765
766       info->size += locals_size;
767
768       /* Fall through.  */
769     }
770
771   /* If we got this far, we could not scan the prologue, so just return the pc
772      of the frame plus an adjustment for argument move insns.  */
773
774   for (; vpc < len; vpc += 2)
775     {
776       insn = extract_unsigned_integer (&prologue[vpc], 2, byte_order);
777       if ((insn & 0xff00) == 0x0100)    /* movw rXX, rYY */
778         continue;
779       else if ((insn & 0xfc00) == 0x2c00) /* mov rXX, rYY */
780         continue;
781       else
782           break;
783     }
784     
785   return pc_beg + vpc;
786 }
787
788 static CORE_ADDR
789 avr_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
790 {
791   CORE_ADDR func_addr, func_end;
792   CORE_ADDR post_prologue_pc;
793
794   /* See what the symbol table says */
795
796   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
797     return pc;
798
799   post_prologue_pc = skip_prologue_using_sal (gdbarch, func_addr);
800   if (post_prologue_pc != 0)
801     return max (pc, post_prologue_pc);
802
803   {
804     CORE_ADDR prologue_end = pc;
805     struct avr_unwind_cache info = {0};
806     struct trad_frame_saved_reg saved_regs[AVR_NUM_REGS];
807
808     info.saved_regs = saved_regs;
809     
810     /* Need to run the prologue scanner to figure out if the function has a
811        prologue and possibly skip over moving arguments passed via registers
812        to other registers.  */
813     
814     prologue_end = avr_scan_prologue (gdbarch, func_addr, func_end, &info);
815     
816     if (info.prologue_type != AVR_PROLOGUE_NONE)
817       return prologue_end;
818   }
819
820   /* Either we didn't find the start of this function (nothing we can do),
821      or there's no line info, or the line after the prologue is after
822      the end of the function (there probably isn't a prologue). */
823
824   return pc;
825 }
826
827 /* Not all avr devices support the BREAK insn. Those that don't should treat
828    it as a NOP. Thus, it should be ok. Since the avr is currently a remote
829    only target, this shouldn't be a problem (I hope). TRoth/2003-05-14  */
830
831 static const unsigned char *
832 avr_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR * pcptr, int *lenptr)
833 {
834     static const unsigned char avr_break_insn [] = { 0x98, 0x95 };
835     *lenptr = sizeof (avr_break_insn);
836     return avr_break_insn;
837 }
838
839 /* Determine, for architecture GDBARCH, how a return value of TYPE
840    should be returned.  If it is supposed to be returned in registers,
841    and READBUF is non-zero, read the appropriate value from REGCACHE,
842    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
843    from WRITEBUF into REGCACHE.  */
844
845 static enum return_value_convention
846 avr_return_value (struct gdbarch *gdbarch, struct type *func_type,
847                   struct type *valtype, struct regcache *regcache,
848                   gdb_byte *readbuf, const gdb_byte *writebuf)
849 {
850   int i;
851   /* Single byte are returned in r24.
852      Otherwise, the MSB of the return value is always in r25, calculate which
853      register holds the LSB.  */
854   int lsb_reg;
855
856   if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
857        || TYPE_CODE (valtype) == TYPE_CODE_UNION
858        || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
859       && TYPE_LENGTH (valtype) > 8)
860     return RETURN_VALUE_STRUCT_CONVENTION;
861
862   if (TYPE_LENGTH (valtype) <= 2)
863     lsb_reg = 24;
864   else if (TYPE_LENGTH (valtype) <= 4)
865     lsb_reg = 22;
866   else if (TYPE_LENGTH (valtype) <= 8)
867     lsb_reg = 18;
868   else
869     gdb_assert (0);
870
871   if (writebuf != NULL)
872     {
873       for (i = 0; i < TYPE_LENGTH (valtype); i++)
874         regcache_cooked_write (regcache, lsb_reg + i, writebuf + i);
875     }
876
877   if (readbuf != NULL)
878     {
879       for (i = 0; i < TYPE_LENGTH (valtype); i++)
880         regcache_cooked_read (regcache, lsb_reg + i, readbuf + i);
881     }
882
883   return RETURN_VALUE_REGISTER_CONVENTION;
884 }
885
886
887 /* Put here the code to store, into fi->saved_regs, the addresses of
888    the saved registers of frame described by FRAME_INFO.  This
889    includes special registers such as pc and fp saved in special ways
890    in the stack frame.  sp is even more special: the address we return
891    for it IS the sp for the next frame. */
892
893 static struct avr_unwind_cache *
894 avr_frame_unwind_cache (struct frame_info *this_frame,
895                         void **this_prologue_cache)
896 {
897   CORE_ADDR start_pc, current_pc;
898   ULONGEST prev_sp;
899   ULONGEST this_base;
900   struct avr_unwind_cache *info;
901   struct gdbarch *gdbarch;
902   struct gdbarch_tdep *tdep;
903   int i;
904
905   if (*this_prologue_cache)
906     return *this_prologue_cache;
907
908   info = FRAME_OBSTACK_ZALLOC (struct avr_unwind_cache);
909   *this_prologue_cache = info;
910   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
911
912   info->size = 0;
913   info->prologue_type = AVR_PROLOGUE_NONE;
914
915   start_pc = get_frame_func (this_frame);
916   current_pc = get_frame_pc (this_frame);
917   if ((start_pc > 0) && (start_pc <= current_pc))
918     avr_scan_prologue (get_frame_arch (this_frame),
919                        start_pc, current_pc, info);
920
921   if ((info->prologue_type != AVR_PROLOGUE_NONE)
922       && (info->prologue_type != AVR_PROLOGUE_MAIN))
923     {
924       ULONGEST high_base;       /* High byte of FP */
925
926       /* The SP was moved to the FP.  This indicates that a new frame
927          was created.  Get THIS frame's FP value by unwinding it from
928          the next frame.  */
929       this_base = get_frame_register_unsigned (this_frame, AVR_FP_REGNUM);
930       high_base = get_frame_register_unsigned (this_frame, AVR_FP_REGNUM + 1);
931       this_base += (high_base << 8);
932       
933       /* The FP points at the last saved register.  Adjust the FP back
934          to before the first saved register giving the SP.  */
935       prev_sp = this_base + info->size; 
936    }
937   else
938     {
939       /* Assume that the FP is this frame's SP but with that pushed
940          stack space added back.  */
941       this_base = get_frame_register_unsigned (this_frame, AVR_SP_REGNUM);
942       prev_sp = this_base + info->size;
943     }
944
945   /* Add 1 here to adjust for the post-decrement nature of the push
946      instruction.*/
947   info->prev_sp = avr_make_saddr (prev_sp + 1);
948   info->base = avr_make_saddr (this_base);
949
950   gdbarch = get_frame_arch (this_frame);
951
952   /* Adjust all the saved registers so that they contain addresses and not
953      offsets.  */
954   for (i = 0; i < gdbarch_num_regs (gdbarch) - 1; i++)
955     if (info->saved_regs[i].addr > 0)
956       info->saved_regs[i].addr = info->prev_sp - info->saved_regs[i].addr;
957
958   /* Except for the main and startup code, the return PC is always saved on
959      the stack and is at the base of the frame. */
960
961   if (info->prologue_type != AVR_PROLOGUE_MAIN)
962     info->saved_regs[AVR_PC_REGNUM].addr = info->prev_sp;
963
964   /* The previous frame's SP needed to be computed.  Save the computed
965      value.  */
966   tdep = gdbarch_tdep (gdbarch);
967   trad_frame_set_value (info->saved_regs, AVR_SP_REGNUM,
968                         info->prev_sp - 1 + tdep->call_length);
969
970   return info;
971 }
972
973 static CORE_ADDR
974 avr_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
975 {
976   ULONGEST pc;
977
978   pc = frame_unwind_register_unsigned (next_frame, AVR_PC_REGNUM);
979
980   return avr_make_iaddr (pc);
981 }
982
983 static CORE_ADDR
984 avr_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
985 {
986   ULONGEST sp;
987
988   sp = frame_unwind_register_unsigned (next_frame, AVR_SP_REGNUM);
989
990   return avr_make_saddr (sp);
991 }
992
993 /* Given a GDB frame, determine the address of the calling function's
994    frame.  This will be used to create a new GDB frame struct.  */
995
996 static void
997 avr_frame_this_id (struct frame_info *this_frame,
998                    void **this_prologue_cache,
999                    struct frame_id *this_id)
1000 {
1001   struct avr_unwind_cache *info
1002     = avr_frame_unwind_cache (this_frame, this_prologue_cache);
1003   CORE_ADDR base;
1004   CORE_ADDR func;
1005   struct frame_id id;
1006
1007   /* The FUNC is easy.  */
1008   func = get_frame_func (this_frame);
1009
1010   /* Hopefully the prologue analysis either correctly determined the
1011      frame's base (which is the SP from the previous frame), or set
1012      that base to "NULL".  */
1013   base = info->prev_sp;
1014   if (base == 0)
1015     return;
1016
1017   id = frame_id_build (base, func);
1018   (*this_id) = id;
1019 }
1020
1021 static struct value *
1022 avr_frame_prev_register (struct frame_info *this_frame,
1023                          void **this_prologue_cache, int regnum)
1024 {
1025   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1026   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1027   struct avr_unwind_cache *info
1028     = avr_frame_unwind_cache (this_frame, this_prologue_cache);
1029
1030   if (regnum == AVR_PC_REGNUM)
1031     {
1032       if (trad_frame_addr_p (info->saved_regs, regnum))
1033         {
1034           /* Reading the return PC from the PC register is slightly
1035              abnormal.  register_size(AVR_PC_REGNUM) says it is 4 bytes,
1036              but in reality, only two bytes (3 in upcoming mega256) are
1037              stored on the stack.
1038
1039              Also, note that the value on the stack is an addr to a word
1040              not a byte, so we will need to multiply it by two at some
1041              point. 
1042
1043              And to confuse matters even more, the return address stored
1044              on the stack is in big endian byte order, even though most
1045              everything else about the avr is little endian. Ick!  */
1046           ULONGEST pc;
1047           int i;
1048           unsigned char buf[3];
1049           struct gdbarch *gdbarch = get_frame_arch (this_frame);
1050           struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1051
1052           read_memory (info->saved_regs[regnum].addr, buf, tdep->call_length);
1053
1054           /* Extract the PC read from memory as a big-endian.  */
1055           pc = 0;
1056           for (i = 0; i < tdep->call_length; i++)
1057             pc = (pc << 8) | buf[i];
1058
1059           return frame_unwind_got_constant (this_frame, regnum, pc << 1);
1060         }
1061
1062       return frame_unwind_got_optimized (this_frame, regnum);
1063     }
1064
1065   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
1066 }
1067
1068 static const struct frame_unwind avr_frame_unwind = {
1069   NORMAL_FRAME,
1070   avr_frame_this_id,
1071   avr_frame_prev_register,
1072   NULL,
1073   default_frame_sniffer
1074 };
1075
1076 static CORE_ADDR
1077 avr_frame_base_address (struct frame_info *this_frame, void **this_cache)
1078 {
1079   struct avr_unwind_cache *info
1080     = avr_frame_unwind_cache (this_frame, this_cache);
1081
1082   return info->base;
1083 }
1084
1085 static const struct frame_base avr_frame_base = {
1086   &avr_frame_unwind,
1087   avr_frame_base_address,
1088   avr_frame_base_address,
1089   avr_frame_base_address
1090 };
1091
1092 /* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
1093    frame.  The frame ID's base needs to match the TOS value saved by
1094    save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
1095
1096 static struct frame_id
1097 avr_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1098 {
1099   ULONGEST base;
1100
1101   base = get_frame_register_unsigned (this_frame, AVR_SP_REGNUM);
1102   return frame_id_build (avr_make_saddr (base), get_frame_pc (this_frame));
1103 }
1104
1105 /* When arguments must be pushed onto the stack, they go on in reverse
1106    order.  The below implements a FILO (stack) to do this. */
1107
1108 struct stack_item
1109 {
1110   int len;
1111   struct stack_item *prev;
1112   void *data;
1113 };
1114
1115 static struct stack_item *
1116 push_stack_item (struct stack_item *prev, const bfd_byte *contents, int len)
1117 {
1118   struct stack_item *si;
1119   si = xmalloc (sizeof (struct stack_item));
1120   si->data = xmalloc (len);
1121   si->len = len;
1122   si->prev = prev;
1123   memcpy (si->data, contents, len);
1124   return si;
1125 }
1126
1127 static struct stack_item *pop_stack_item (struct stack_item *si);
1128 static struct stack_item *
1129 pop_stack_item (struct stack_item *si)
1130 {
1131   struct stack_item *dead = si;
1132   si = si->prev;
1133   xfree (dead->data);
1134   xfree (dead);
1135   return si;
1136 }
1137
1138 /* Setup the function arguments for calling a function in the inferior.
1139
1140    On the AVR architecture, there are 18 registers (R25 to R8) which are
1141    dedicated for passing function arguments.  Up to the first 18 arguments
1142    (depending on size) may go into these registers.  The rest go on the stack.
1143
1144    All arguments are aligned to start in even-numbered registers (odd-sized
1145    arguments, including char, have one free register above them). For example,
1146    an int in arg1 and a char in arg2 would be passed as such:
1147
1148       arg1 -> r25:r24
1149       arg2 -> r22
1150
1151    Arguments that are larger than 2 bytes will be split between two or more
1152    registers as available, but will NOT be split between a register and the
1153    stack. Arguments that go onto the stack are pushed last arg first (this is
1154    similar to the d10v).  */
1155
1156 /* NOTE: TRoth/2003-06-17: The rest of this comment is old looks to be
1157    inaccurate.
1158
1159    An exceptional case exists for struct arguments (and possibly other
1160    aggregates such as arrays) -- if the size is larger than WORDSIZE bytes but
1161    not a multiple of WORDSIZE bytes.  In this case the argument is never split
1162    between the registers and the stack, but instead is copied in its entirety
1163    onto the stack, AND also copied into as many registers as there is room
1164    for.  In other words, space in registers permitting, two copies of the same
1165    argument are passed in.  As far as I can tell, only the one on the stack is
1166    used, although that may be a function of the level of compiler
1167    optimization.  I suspect this is a compiler bug.  Arguments of these odd
1168    sizes are left-justified within the word (as opposed to arguments smaller
1169    than WORDSIZE bytes, which are right-justified).
1170  
1171    If the function is to return an aggregate type such as a struct, the caller
1172    must allocate space into which the callee will copy the return value.  In
1173    this case, a pointer to the return value location is passed into the callee
1174    in register R0, which displaces one of the other arguments passed in via
1175    registers R0 to R2. */
1176
1177 static CORE_ADDR
1178 avr_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1179                      struct regcache *regcache, CORE_ADDR bp_addr,
1180                      int nargs, struct value **args, CORE_ADDR sp,
1181                      int struct_return, CORE_ADDR struct_addr)
1182 {
1183   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1184   int i;
1185   unsigned char buf[3];
1186   int call_length = gdbarch_tdep (gdbarch)->call_length;
1187   CORE_ADDR return_pc = avr_convert_iaddr_to_raw (bp_addr);
1188   int regnum = AVR_ARGN_REGNUM;
1189   struct stack_item *si = NULL;
1190
1191   if (struct_return)
1192     {
1193       regcache_cooked_write_unsigned (regcache, regnum--,
1194                                       struct_addr & 0xff);
1195       regcache_cooked_write_unsigned (regcache, regnum--,
1196                                       (struct_addr >> 8) & 0xff);
1197     }
1198
1199   for (i = 0; i < nargs; i++)
1200     {
1201       int last_regnum;
1202       int j;
1203       struct value *arg = args[i];
1204       struct type *type = check_typedef (value_type (arg));
1205       const bfd_byte *contents = value_contents (arg);
1206       int len = TYPE_LENGTH (type);
1207
1208       /* Calculate the potential last register needed. */
1209       last_regnum = regnum - (len + (len & 1));
1210
1211       /* If there are registers available, use them. Once we start putting
1212          stuff on the stack, all subsequent args go on stack. */
1213       if ((si == NULL) && (last_regnum >= 8))
1214         {
1215           ULONGEST val;
1216
1217           /* Skip a register for odd length args. */
1218           if (len & 1)
1219             regnum--;
1220
1221           val = extract_unsigned_integer (contents, len, byte_order);
1222           for (j = 0; j < len; j++)
1223             regcache_cooked_write_unsigned
1224               (regcache, regnum--, val >> (8 * (len - j - 1)));
1225         }
1226       /* No registers available, push the args onto the stack. */
1227       else
1228         {
1229           /* From here on, we don't care about regnum. */
1230           si = push_stack_item (si, contents, len);
1231         }
1232     }
1233
1234   /* Push args onto the stack. */
1235   while (si)
1236     {
1237       sp -= si->len;
1238       /* Add 1 to sp here to account for post decr nature of pushes. */
1239       write_memory (sp + 1, si->data, si->len);
1240       si = pop_stack_item (si);
1241     }
1242
1243   /* Set the return address.  For the avr, the return address is the BP_ADDR.
1244      Need to push the return address onto the stack noting that it needs to be
1245      in big-endian order on the stack.  */
1246   for (i = 1; i <= call_length; i++)
1247     {
1248       buf[call_length - i] = return_pc & 0xff;
1249       return_pc >>= 8;
1250     }
1251
1252   sp -= call_length;
1253   /* Use 'sp + 1' since pushes are post decr ops. */
1254   write_memory (sp + 1, buf, call_length);
1255
1256   /* Finally, update the SP register. */
1257   regcache_cooked_write_unsigned (regcache, AVR_SP_REGNUM,
1258                                   avr_convert_saddr_to_raw (sp));
1259
1260   /* Return SP value for the dummy frame, where the return address hasn't been
1261      pushed.  */
1262   return sp + call_length;
1263 }
1264
1265 /* Unfortunately dwarf2 register for SP is 32.  */
1266
1267 static int
1268 avr_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
1269 {
1270   if (reg >= 0 && reg < 32)
1271     return reg;
1272   if (reg == 32)
1273     return AVR_SP_REGNUM;
1274
1275   warning (_("Unmapped DWARF Register #%d encountered."), reg);
1276
1277   return -1;
1278 }
1279
1280 /* Initialize the gdbarch structure for the AVR's. */
1281
1282 static struct gdbarch *
1283 avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1284 {
1285   struct gdbarch *gdbarch;
1286   struct gdbarch_tdep *tdep;
1287   struct gdbarch_list *best_arch;
1288   int call_length;
1289
1290   /* Avr-6 call instructions save 3 bytes.  */
1291   switch (info.bfd_arch_info->mach)
1292     {
1293     case bfd_mach_avr1:
1294     case bfd_mach_avr2:
1295     case bfd_mach_avr3:
1296     case bfd_mach_avr4:
1297     case bfd_mach_avr5:
1298     default:
1299       call_length = 2;
1300       break;
1301     case bfd_mach_avr6:
1302       call_length = 3;
1303       break;
1304     }
1305
1306   /* If there is already a candidate, use it.  */
1307   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1308        best_arch != NULL;
1309        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1310     {
1311       if (gdbarch_tdep (best_arch->gdbarch)->call_length == call_length)
1312         return best_arch->gdbarch;
1313     }
1314
1315   /* None found, create a new architecture from the information provided. */
1316   tdep = XMALLOC (struct gdbarch_tdep);
1317   gdbarch = gdbarch_alloc (&info, tdep);
1318   
1319   tdep->call_length = call_length;
1320
1321   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1322   set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1323   set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1324   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1325   set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1326   set_gdbarch_addr_bit (gdbarch, 32);
1327
1328   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1329   set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1330   set_gdbarch_long_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1331
1332   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
1333   set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
1334   set_gdbarch_long_double_format (gdbarch, floatformats_ieee_single);
1335
1336   set_gdbarch_read_pc (gdbarch, avr_read_pc);
1337   set_gdbarch_write_pc (gdbarch, avr_write_pc);
1338
1339   set_gdbarch_num_regs (gdbarch, AVR_NUM_REGS);
1340
1341   set_gdbarch_sp_regnum (gdbarch, AVR_SP_REGNUM);
1342   set_gdbarch_pc_regnum (gdbarch, AVR_PC_REGNUM);
1343
1344   set_gdbarch_register_name (gdbarch, avr_register_name);
1345   set_gdbarch_register_type (gdbarch, avr_register_type);
1346
1347   set_gdbarch_return_value (gdbarch, avr_return_value);
1348   set_gdbarch_print_insn (gdbarch, print_insn_avr);
1349
1350   set_gdbarch_push_dummy_call (gdbarch, avr_push_dummy_call);
1351
1352   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, avr_dwarf_reg_to_regnum);
1353
1354   set_gdbarch_address_to_pointer (gdbarch, avr_address_to_pointer);
1355   set_gdbarch_pointer_to_address (gdbarch, avr_pointer_to_address);
1356
1357   set_gdbarch_skip_prologue (gdbarch, avr_skip_prologue);
1358   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1359
1360   set_gdbarch_breakpoint_from_pc (gdbarch, avr_breakpoint_from_pc);
1361
1362   frame_unwind_append_unwinder (gdbarch, &avr_frame_unwind);
1363   frame_base_set_default (gdbarch, &avr_frame_base);
1364
1365   set_gdbarch_dummy_id (gdbarch, avr_dummy_id);
1366
1367   set_gdbarch_unwind_pc (gdbarch, avr_unwind_pc);
1368   set_gdbarch_unwind_sp (gdbarch, avr_unwind_sp);
1369
1370   return gdbarch;
1371 }
1372
1373 /* Send a query request to the avr remote target asking for values of the io
1374    registers. If args parameter is not NULL, then the user has requested info
1375    on a specific io register [This still needs implemented and is ignored for
1376    now]. The query string should be one of these forms:
1377
1378    "Ravr.io_reg" -> reply is "NN" number of io registers
1379
1380    "Ravr.io_reg:addr,len" where addr is first register and len is number of
1381    registers to be read. The reply should be "<NAME>,VV;" for each io register
1382    where, <NAME> is a string, and VV is the hex value of the register.
1383
1384    All io registers are 8-bit. */
1385
1386 static void
1387 avr_io_reg_read_command (char *args, int from_tty)
1388 {
1389   LONGEST bufsiz = 0;
1390   gdb_byte *buf;
1391   char query[400];
1392   char *p;
1393   unsigned int nreg = 0;
1394   unsigned int val;
1395   int i, j, k, step;
1396
1397   /* Find out how many io registers the target has. */
1398   bufsiz = target_read_alloc (&current_target, TARGET_OBJECT_AVR,
1399                               "avr.io_reg", &buf);
1400
1401   if (bufsiz <= 0)
1402     {
1403       fprintf_unfiltered (gdb_stderr,
1404                           _("ERR: info io_registers NOT supported "
1405                             "by current target\n"));
1406       return;
1407     }
1408
1409   if (sscanf (buf, "%x", &nreg) != 1)
1410     {
1411       fprintf_unfiltered (gdb_stderr,
1412                           _("Error fetching number of io registers\n"));
1413       xfree (buf);
1414       return;
1415     }
1416
1417   xfree (buf);
1418
1419   reinitialize_more_filter ();
1420
1421   printf_unfiltered (_("Target has %u io registers:\n\n"), nreg);
1422
1423   /* only fetch up to 8 registers at a time to keep the buffer small */
1424   step = 8;
1425
1426   for (i = 0; i < nreg; i += step)
1427     {
1428       /* how many registers this round? */
1429       j = step;
1430       if ((i+j) >= nreg)
1431         j = nreg - i;           /* last block is less than 8 registers */
1432
1433       snprintf (query, sizeof (query) - 1, "avr.io_reg:%x,%x", i, j);
1434       bufsiz = target_read_alloc (&current_target, TARGET_OBJECT_AVR,
1435                                   query, &buf);
1436
1437       p = buf;
1438       for (k = i; k < (i + j); k++)
1439         {
1440           if (sscanf (p, "%[^,],%x;", query, &val) == 2)
1441             {
1442               printf_filtered ("[%02x] %-15s : %02x\n", k, query, val);
1443               while ((*p != ';') && (*p != '\0'))
1444                 p++;
1445               p++;              /* skip over ';' */
1446               if (*p == '\0')
1447                 break;
1448             }
1449         }
1450
1451       xfree (buf);
1452     }
1453 }
1454
1455 extern initialize_file_ftype _initialize_avr_tdep; /* -Wmissing-prototypes */
1456
1457 void
1458 _initialize_avr_tdep (void)
1459 {
1460   register_gdbarch_init (bfd_arch_avr, avr_gdbarch_init);
1461
1462   /* Add a new command to allow the user to query the avr remote target for
1463      the values of the io space registers in a saner way than just using
1464      `x/NNNb ADDR`. */
1465
1466   /* FIXME: TRoth/2002-02-18: This should probably be changed to 'info avr
1467      io_registers' to signify it is not available on other platforms. */
1468
1469   add_cmd ("io_registers", class_info, avr_io_reg_read_command,
1470            _("query remote avr target for io space register values"),
1471            &infolist);
1472 }