* avr-tdep.c (avr_register_type): Remove a blank line.
[external/binutils.git] / gdb / avr-tdep.c
1 /* Target-dependent code for Atmel AVR, for GDB.
2    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
3    Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 /* Contributed by Theodore A. Roth, troth@openavr.org */
23
24 /* Portions of this file were taken from the original gdb-4.18 patch developed
25    by Denis Chertykov, denisc@overta.ru */
26
27 #include "defs.h"
28 #include "gdbcmd.h"
29 #include "gdbcore.h"
30 #include "inferior.h"
31 #include "symfile.h"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "gdb_string.h"
35
36 /* AVR Background:
37
38    (AVR micros are pure Harvard Architecture processors.)
39
40    The AVR family of microcontrollers have three distinctly different memory
41    spaces: flash, sram and eeprom. The flash is 16 bits wide and is used for
42    the most part to store program instructions. The sram is 8 bits wide and is
43    used for the stack and the heap. Some devices lack sram and some can have
44    an additional external sram added on as a peripheral.
45
46    The eeprom is 8 bits wide and is used to store data when the device is
47    powered down. Eeprom is not directly accessible, it can only be accessed
48    via io-registers using a special algorithm. Accessing eeprom via gdb's
49    remote serial protocol ('m' or 'M' packets) looks difficult to do and is
50    not included at this time.
51
52    [The eeprom could be read manually via ``x/b <eaddr + AVR_EMEM_START>'' or
53    written using ``set {unsigned char}<eaddr + AVR_EMEM_START>''.  For this to
54    work, the remote target must be able to handle eeprom accesses and perform
55    the address translation.]
56
57    All three memory spaces have physical addresses beginning at 0x0. In
58    addition, the flash is addressed by gcc/binutils/gdb with respect to 8 bit
59    bytes instead of the 16 bit wide words used by the real device for the
60    Program Counter.
61
62    In order for remote targets to work correctly, extra bits must be added to
63    addresses before they are send to the target or received from the target
64    via the remote serial protocol. The extra bits are the MSBs and are used to
65    decode which memory space the address is referring to. */
66
67 #undef XMALLOC
68 #define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
69
70 #undef EXTRACT_INSN
71 #define EXTRACT_INSN(addr) extract_unsigned_integer(addr,2)
72
73 /* Constants: prefixed with AVR_ to avoid name space clashes */
74
75 enum
76 {
77   AVR_REG_W = 24,
78   AVR_REG_X = 26,
79   AVR_REG_Y = 28,
80   AVR_FP_REGNUM = 28,
81   AVR_REG_Z = 30,
82
83   AVR_SREG_REGNUM = 32,
84   AVR_SP_REGNUM = 33,
85   AVR_PC_REGNUM = 34,
86
87   AVR_NUM_REGS = 32 + 1 /*SREG*/ + 1 /*SP*/ + 1 /*PC*/,
88   AVR_NUM_REG_BYTES = 32 + 1 /*SREG*/ + 2 /*SP*/ + 4 /*PC*/,
89
90   AVR_PC_REG_INDEX = 35,        /* index into array of registers */
91
92   AVR_MAX_PROLOGUE_SIZE = 56,   /* bytes */
93
94   /* Count of pushed registers. From r2 to r17 (inclusively), r28, r29 */
95   AVR_MAX_PUSHES = 18,
96
97   /* Number of the last pushed register. r17 for current avr-gcc */
98   AVR_LAST_PUSHED_REGNUM = 17,
99
100   /* FIXME: TRoth/2002-01-??: Can we shift all these memory masks left 8
101      bits? Do these have to match the bfd vma values?. It sure would make
102      things easier in the future if they didn't need to match.
103
104      Note: I chose these values so as to be consistent with bfd vma
105      addresses.
106
107      TRoth/2002-04-08: There is already a conflict with very large programs
108      in the mega128. The mega128 has 128K instruction bytes (64K words),
109      thus the Most Significant Bit is 0x10000 which gets masked off my
110      AVR_MEM_MASK.
111
112      The problem manifests itself when trying to set a breakpoint in a
113      function which resides in the upper half of the instruction space and
114      thus requires a 17-bit address.
115
116      For now, I've just removed the EEPROM mask and changed AVR_MEM_MASK
117      from 0x00ff0000 to 0x00f00000. Eeprom is not accessible from gdb yet,
118      but could be for some remote targets by just adding the correct offset
119      to the address and letting the remote target handle the low-level
120      details of actually accessing the eeprom. */
121
122   AVR_IMEM_START = 0x00000000,  /* INSN memory */
123   AVR_SMEM_START = 0x00800000,  /* SRAM memory */
124 #if 1
125   /* No eeprom mask defined */
126   AVR_MEM_MASK = 0x00f00000,    /* mask to determine memory space */
127 #else
128   AVR_EMEM_START = 0x00810000,  /* EEPROM memory */
129   AVR_MEM_MASK = 0x00ff0000,    /* mask to determine memory space */
130 #endif
131 };
132
133 /* Any function with a frame looks like this
134    .......    <-SP POINTS HERE
135    LOCALS1    <-FP POINTS HERE
136    LOCALS0
137    SAVED FP
138    SAVED R3
139    SAVED R2
140    RET PC
141    FIRST ARG
142    SECOND ARG */
143
144 struct frame_extra_info
145 {
146   CORE_ADDR return_pc;
147   CORE_ADDR args_pointer;
148   int locals_size;
149   int framereg;
150   int framesize;
151   int is_main;
152 };
153
154 struct gdbarch_tdep
155 {
156   /* FIXME: TRoth: is there anything to put here? */
157   int foo;
158 };
159
160 /* Lookup the name of a register given it's number. */
161
162 static const char *
163 avr_register_name (int regnum)
164 {
165   static char *register_names[] = {
166     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
167     "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
168     "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
169     "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
170     "SREG", "SP", "PC"
171   };
172   if (regnum < 0)
173     return NULL;
174   if (regnum >= (sizeof (register_names) / sizeof (*register_names)))
175     return NULL;
176   return register_names[regnum];
177 }
178
179 /* Return the GDB type object for the "standard" data type
180    of data in register N.  */
181
182 static struct type *
183 avr_register_type (struct gdbarch *gdbarch, int reg_nr)
184 {
185   if (reg_nr == AVR_PC_REGNUM)
186     return builtin_type_uint32;
187   if (reg_nr == AVR_SP_REGNUM)
188     return builtin_type_void_data_ptr;
189   else
190     return builtin_type_uint8;
191 }
192
193 /* Instruction address checks and convertions. */
194
195 static CORE_ADDR
196 avr_make_iaddr (CORE_ADDR x)
197 {
198   return ((x) | AVR_IMEM_START);
199 }
200
201 static int
202 avr_iaddr_p (CORE_ADDR x)
203 {
204   return (((x) & AVR_MEM_MASK) == AVR_IMEM_START);
205 }
206
207 /* FIXME: TRoth: Really need to use a larger mask for instructions. Some
208    devices are already up to 128KBytes of flash space.
209
210    TRoth/2002-04-8: See comment above where AVR_IMEM_START is defined. */
211
212 static CORE_ADDR
213 avr_convert_iaddr_to_raw (CORE_ADDR x)
214 {
215   return ((x) & 0xffffffff);
216 }
217
218 /* SRAM address checks and convertions. */
219
220 static CORE_ADDR
221 avr_make_saddr (CORE_ADDR x)
222 {
223   return ((x) | AVR_SMEM_START);
224 }
225
226 static int
227 avr_saddr_p (CORE_ADDR x)
228 {
229   return (((x) & AVR_MEM_MASK) == AVR_SMEM_START);
230 }
231
232 static CORE_ADDR
233 avr_convert_saddr_to_raw (CORE_ADDR x)
234 {
235   return ((x) & 0xffffffff);
236 }
237
238 /* EEPROM address checks and convertions. I don't know if these will ever
239    actually be used, but I've added them just the same. TRoth */
240
241 /* TRoth/2002-04-08: Commented out for now to allow fix for problem with large
242    programs in the mega128. */
243
244 /*  static CORE_ADDR */
245 /*  avr_make_eaddr (CORE_ADDR x) */
246 /*  { */
247 /*    return ((x) | AVR_EMEM_START); */
248 /*  } */
249
250 /*  static int */
251 /*  avr_eaddr_p (CORE_ADDR x) */
252 /*  { */
253 /*    return (((x) & AVR_MEM_MASK) == AVR_EMEM_START); */
254 /*  } */
255
256 /*  static CORE_ADDR */
257 /*  avr_convert_eaddr_to_raw (CORE_ADDR x) */
258 /*  { */
259 /*    return ((x) & 0xffffffff); */
260 /*  } */
261
262 /* Convert from address to pointer and vice-versa. */
263
264 static void
265 avr_address_to_pointer (struct type *type, void *buf, CORE_ADDR addr)
266 {
267   /* Is it a code address?  */
268   if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
269       || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD)
270     {
271       store_unsigned_integer (buf, TYPE_LENGTH (type),
272                               avr_convert_iaddr_to_raw (addr >> 1));
273     }
274   else
275     {
276       /* Strip off any upper segment bits.  */
277       store_unsigned_integer (buf, TYPE_LENGTH (type),
278                               avr_convert_saddr_to_raw (addr));
279     }
280 }
281
282 static CORE_ADDR
283 avr_pointer_to_address (struct type *type, const void *buf)
284 {
285   CORE_ADDR addr = extract_unsigned_integer (buf, TYPE_LENGTH (type));
286
287   /* Is it a code address?  */
288   if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
289       || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD
290       || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type)))
291     return avr_make_iaddr (addr << 1);
292   else
293     return avr_make_saddr (addr);
294 }
295
296 static CORE_ADDR
297 avr_read_pc (ptid_t ptid)
298 {
299   ptid_t save_ptid;
300   CORE_ADDR pc;
301   CORE_ADDR retval;
302
303   save_ptid = inferior_ptid;
304   inferior_ptid = ptid;
305   pc = (int) read_register (AVR_PC_REGNUM);
306   inferior_ptid = save_ptid;
307   retval = avr_make_iaddr (pc);
308   return retval;
309 }
310
311 static void
312 avr_write_pc (CORE_ADDR val, ptid_t ptid)
313 {
314   ptid_t save_ptid;
315
316   save_ptid = inferior_ptid;
317   inferior_ptid = ptid;
318   write_register (AVR_PC_REGNUM, avr_convert_iaddr_to_raw (val));
319   inferior_ptid = save_ptid;
320 }
321
322 static CORE_ADDR
323 avr_read_sp (void)
324 {
325   return (avr_make_saddr (read_register (AVR_SP_REGNUM)));
326 }
327
328 static void
329 avr_write_sp (CORE_ADDR val)
330 {
331   write_register (AVR_SP_REGNUM, avr_convert_saddr_to_raw (val));
332 }
333
334 static CORE_ADDR
335 avr_read_fp (void)
336 {
337   CORE_ADDR fp;
338
339   fp = read_register (AVR_FP_REGNUM);
340   fp += (read_register (AVR_FP_REGNUM+1) << 8);
341
342   return (avr_make_saddr (fp));
343 }
344
345 /* avr_scan_prologue is also used as the
346    deprecated_frame_init_saved_regs().
347
348    Put here the code to store, into fi->saved_regs, the addresses of
349    the saved registers of frame described by FRAME_INFO.  This
350    includes special registers such as pc and fp saved in special ways
351    in the stack frame.  sp is even more special: the address we return
352    for it IS the sp for the next frame. */
353
354 /* Function: avr_scan_prologue (helper function for avr_init_extra_frame_info)
355    This function decodes a AVR function prologue to determine:
356      1) the size of the stack frame
357      2) which registers are saved on it
358      3) the offsets of saved regs
359    This information is stored in the "extra_info" field of the frame_info.
360
361    Some devices lack the sbiw instruction, so on those replace this:
362         sbiw    r28, XX
363    with this:
364         subi    r28,lo8(XX)
365         sbci    r29,hi8(XX)
366
367    A typical AVR function prologue with a frame pointer might look like this:
368         push    rXX        ; saved regs
369         ...
370         push    r28
371         push    r29
372         in      r28,__SP_L__
373         in      r29,__SP_H__
374         sbiw    r28,<LOCALS_SIZE>
375         in      __tmp_reg__,__SREG__
376         cli
377         out     __SP_H__,r29
378         out     __SREG__,__tmp_reg__
379         out     __SP_L__,r28
380
381    A typical AVR function prologue without a frame pointer might look like
382    this:
383         push    rXX        ; saved regs
384         ...
385
386    A main function prologue looks like this:
387         ldi     r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>)
388         ldi     r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>)
389         out     __SP_H__,r29
390         out     __SP_L__,r28
391
392    A signal handler prologue looks like this:
393         push    __zero_reg__
394         push    __tmp_reg__
395         in      __tmp_reg__, __SREG__
396         push    __tmp_reg__
397         clr     __zero_reg__
398         push    rXX             ; save registers r18:r27, r30:r31
399         ...
400         push    r28             ; save frame pointer
401         push    r29
402         in      r28, __SP_L__
403         in      r29, __SP_H__
404         sbiw    r28, <LOCALS_SIZE>
405         out     __SP_H__, r29
406         out     __SP_L__, r28
407         
408    A interrupt handler prologue looks like this:
409         sei
410         push    __zero_reg__
411         push    __tmp_reg__
412         in      __tmp_reg__, __SREG__
413         push    __tmp_reg__
414         clr     __zero_reg__
415         push    rXX             ; save registers r18:r27, r30:r31
416         ...
417         push    r28             ; save frame pointer
418         push    r29
419         in      r28, __SP_L__
420         in      r29, __SP_H__
421         sbiw    r28, <LOCALS_SIZE>
422         cli
423         out     __SP_H__, r29
424         sei     
425         out     __SP_L__, r28
426
427    A `-mcall-prologues' prologue looks like this (Note that the megas use a
428    jmp instead of a rjmp, thus the prologue is one word larger since jmp is a
429    32 bit insn and rjmp is a 16 bit insn):
430         ldi     r26,lo8(<LOCALS_SIZE>)
431         ldi     r27,hi8(<LOCALS_SIZE>)
432         ldi     r30,pm_lo8(.L_foo_body)
433         ldi     r31,pm_hi8(.L_foo_body)
434         rjmp    __prologue_saves__+RRR
435         .L_foo_body:  */
436
437 static void
438 avr_scan_prologue (struct frame_info *fi)
439 {
440   CORE_ADDR prologue_start;
441   CORE_ADDR prologue_end;
442   int i;
443   unsigned short insn;
444   int regno;
445   int scan_stage = 0;
446   char *name;
447   struct minimal_symbol *msymbol;
448   int prologue_len;
449   unsigned char prologue[AVR_MAX_PROLOGUE_SIZE];
450   int vpc = 0;
451
452   get_frame_extra_info (fi)->framereg = AVR_SP_REGNUM;
453
454   if (find_pc_partial_function
455       (get_frame_pc (fi), &name, &prologue_start, &prologue_end))
456     {
457       struct symtab_and_line sal = find_pc_line (prologue_start, 0);
458
459       if (sal.line == 0)        /* no line info, use current PC */
460         prologue_end = get_frame_pc (fi);
461       else if (sal.end < prologue_end)  /* next line begins after fn end */
462         prologue_end = sal.end; /* (probably means no prologue)  */
463     }
464   else
465     /* We're in the boondocks: allow for */
466     /* 19 pushes, an add, and "mv fp,sp" */
467     prologue_end = prologue_start + AVR_MAX_PROLOGUE_SIZE;
468
469   prologue_end = min (prologue_end, get_frame_pc (fi));
470
471   /* Search the prologue looking for instructions that set up the
472      frame pointer, adjust the stack pointer, and save registers.  */
473
474   get_frame_extra_info (fi)->framesize = 0;
475   prologue_len = min (prologue_end - prologue_start, AVR_MAX_PROLOGUE_SIZE);
476   read_memory (prologue_start, prologue, prologue_len);
477
478   /* Scanning main()'s prologue
479      ldi r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>)
480      ldi r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>)
481      out __SP_H__,r29
482      out __SP_L__,r28 */
483
484   if (name && strcmp ("main", name) == 0 && prologue_len == 8)
485     {
486       CORE_ADDR locals;
487       unsigned char img[] = {
488         0xde, 0xbf,             /* out __SP_H__,r29 */
489         0xcd, 0xbf              /* out __SP_L__,r28 */
490       };
491
492       get_frame_extra_info (fi)->framereg = AVR_FP_REGNUM;
493       insn = EXTRACT_INSN (&prologue[vpc]);
494       /* ldi r28,lo8(<RAM_ADDR> - <LOCALS_SIZE>) */
495       if ((insn & 0xf0f0) == 0xe0c0)
496         {
497           locals = (insn & 0xf) | ((insn & 0x0f00) >> 4);
498           insn = EXTRACT_INSN (&prologue[vpc + 2]);
499           /* ldi r29,hi8(<RAM_ADDR> - <LOCALS_SIZE>) */
500           if ((insn & 0xf0f0) == 0xe0d0)
501             {
502               locals |= ((insn & 0xf) | ((insn & 0x0f00) >> 4)) << 8;
503               if (memcmp (prologue + vpc + 4, img, sizeof (img)) == 0)
504                 {
505                   deprecated_update_frame_base_hack (fi, locals);
506
507                   get_frame_extra_info (fi)->is_main = 1;
508                   return;
509                 }
510             }
511         }
512     }
513
514   /* Scanning `-mcall-prologues' prologue  */
515
516   while (1)     /* Using a while to avoid many goto's */
517     {
518       int loc_size;
519       int body_addr;
520       unsigned num_pushes;
521
522       insn = EXTRACT_INSN (&prologue[vpc]);
523       /* ldi r26,<LOCALS_SIZE> */
524       if ((insn & 0xf0f0) != 0xe0a0)
525         break;
526       loc_size = (insn & 0xf) | ((insn & 0x0f00) >> 4);
527
528       insn = EXTRACT_INSN (&prologue[vpc + 2]);
529       /* ldi r27,<LOCALS_SIZE> / 256 */
530       if ((insn & 0xf0f0) != 0xe0b0)
531         break;
532       loc_size |= ((insn & 0xf) | ((insn & 0x0f00) >> 4)) << 8;
533
534       insn = EXTRACT_INSN (&prologue[vpc + 4]);
535       /* ldi r30,pm_lo8(.L_foo_body) */
536       if ((insn & 0xf0f0) != 0xe0e0)
537         break;
538       body_addr = (insn & 0xf) | ((insn & 0x0f00) >> 4);
539
540       insn = EXTRACT_INSN (&prologue[vpc + 6]);
541       /* ldi r31,pm_hi8(.L_foo_body) */
542       if ((insn & 0xf0f0) != 0xe0f0)
543         break;
544       body_addr |= ((insn & 0xf) | ((insn & 0x0f00) >> 4)) << 8;
545
546       msymbol = lookup_minimal_symbol ("__prologue_saves__", NULL, NULL);
547       if (!msymbol)
548         break;
549
550       /* FIXME: prologue for mega have a JMP instead of RJMP */
551       insn = EXTRACT_INSN (&prologue[vpc + 8]);
552       /* rjmp __prologue_saves__+RRR */
553       if ((insn & 0xf000) == 0xc000)
554         {
555           /* Extract PC relative offset from RJMP */
556           i = (insn & 0xfff) | (insn & 0x800 ? (-1 ^ 0xfff) : 0);
557           /* Convert offset to byte addressable mode */
558           i *= 2;
559           /* Destination address */
560           i += prologue_start + 10;
561
562           if (body_addr != (prologue_start + 10) / 2)
563             break;
564         }
565       /* jmp __prologue_saves__+RRR */
566       else if ((insn & 0xfe0e) == 0x940c)
567         {
568           /* Extract absolute PC address from JMP */
569           i = (((insn & 0x1) | ((insn & 0x1f0) >> 3) << 16)
570             | (EXTRACT_INSN (&prologue[vpc + 10]) & 0xffff));
571           /* Convert address to byte addressable mode */
572           i *= 2;
573
574           if (body_addr != (prologue_start + 12)/2)
575             break;
576         }
577       else
578         break;
579
580       /* Resovle offset (in words) from __prologue_saves__ symbol.
581          Which is a pushes count in `-mcall-prologues' mode */
582       num_pushes = AVR_MAX_PUSHES - (i - SYMBOL_VALUE_ADDRESS (msymbol)) / 2;
583
584       if (num_pushes > AVR_MAX_PUSHES)
585         num_pushes = 0;
586
587       if (num_pushes)
588         {
589           int from;
590           get_frame_saved_regs (fi)[AVR_FP_REGNUM + 1] = num_pushes;
591           if (num_pushes >= 2)
592             get_frame_saved_regs (fi)[AVR_FP_REGNUM] = num_pushes - 1;
593           i = 0;
594           for (from = AVR_LAST_PUSHED_REGNUM + 1 - (num_pushes - 2);
595                from <= AVR_LAST_PUSHED_REGNUM; ++from)
596             get_frame_saved_regs (fi)[from] = ++i;
597         }
598       get_frame_extra_info (fi)->locals_size = loc_size;
599       get_frame_extra_info (fi)->framesize = loc_size + num_pushes;
600       get_frame_extra_info (fi)->framereg = AVR_FP_REGNUM;
601       return;
602     }
603
604   /* Scan interrupt or signal function */
605
606   if (prologue_len >= 12)
607     {
608       unsigned char img[] = {
609         0x78, 0x94,             /* sei */
610         0x1f, 0x92,             /* push r1 */
611         0x0f, 0x92,             /* push r0 */
612         0x0f, 0xb6,             /* in r0,0x3f SREG */
613         0x0f, 0x92,             /* push r0 */
614         0x11, 0x24              /* clr r1 */
615       };
616       if (memcmp (prologue, img, sizeof (img)) == 0)
617         {
618           vpc += sizeof (img);
619           get_frame_saved_regs (fi)[0] = 2;
620           get_frame_saved_regs (fi)[1] = 1;
621           get_frame_extra_info (fi)->framesize += 3;
622         }
623       else if (memcmp (img + 1, prologue, sizeof (img) - 1) == 0)
624         {
625           vpc += sizeof (img) - 1;
626           get_frame_saved_regs (fi)[0] = 2;
627           get_frame_saved_regs (fi)[1] = 1;
628           get_frame_extra_info (fi)->framesize += 3;
629         }
630     }
631
632   /* First stage of the prologue scanning.
633      Scan pushes */
634
635   for (; vpc <= prologue_len; vpc += 2)
636     {
637       insn = EXTRACT_INSN (&prologue[vpc]);
638       if ((insn & 0xfe0f) == 0x920f)    /* push rXX */
639         {
640           /* Bits 4-9 contain a mask for registers R0-R32. */
641           regno = (insn & 0x1f0) >> 4;
642           ++get_frame_extra_info (fi)->framesize;
643           get_frame_saved_regs (fi)[regno] = get_frame_extra_info (fi)->framesize;
644           scan_stage = 1;
645         }
646       else
647         break;
648     }
649
650   /* Second stage of the prologue scanning.
651      Scan:
652      in r28,__SP_L__
653      in r29,__SP_H__ */
654
655   if (scan_stage == 1 && vpc + 4 <= prologue_len)
656     {
657       unsigned char img[] = {
658         0xcd, 0xb7,             /* in r28,__SP_L__ */
659         0xde, 0xb7              /* in r29,__SP_H__ */
660       };
661       unsigned short insn1;
662
663       if (memcmp (prologue + vpc, img, sizeof (img)) == 0)
664         {
665           vpc += 4;
666           get_frame_extra_info (fi)->framereg = AVR_FP_REGNUM;
667           scan_stage = 2;
668         }
669     }
670
671   /* Third stage of the prologue scanning. (Really two stages)
672      Scan for:
673      sbiw r28,XX or subi r28,lo8(XX)
674                     sbci r29,hi8(XX)
675      in __tmp_reg__,__SREG__
676      cli
677      out __SP_H__,r29
678      out __SREG__,__tmp_reg__
679      out __SP_L__,r28 */
680
681   if (scan_stage == 2 && vpc + 12 <= prologue_len)
682     {
683       int locals_size = 0;
684       unsigned char img[] = {
685         0x0f, 0xb6,             /* in r0,0x3f */
686         0xf8, 0x94,             /* cli */
687         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
688         0x0f, 0xbe,             /* out 0x3f,r0  ; SREG */
689         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
690       };
691       unsigned char img_sig[] = {
692         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
693         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
694       };
695       unsigned char img_int[] = {
696         0xf8, 0x94,             /* cli */
697         0xde, 0xbf,             /* out 0x3e,r29 ; SPH */
698         0x78, 0x94,             /* sei */
699         0xcd, 0xbf              /* out 0x3d,r28 ; SPL */
700       };
701
702       insn = EXTRACT_INSN (&prologue[vpc]);
703       vpc += 2;
704       if ((insn & 0xff30) == 0x9720)    /* sbiw r28,XXX */
705         locals_size = (insn & 0xf) | ((insn & 0xc0) >> 2);
706       else if ((insn & 0xf0f0) == 0x50c0)       /* subi r28,lo8(XX) */
707         {
708           locals_size = (insn & 0xf) | ((insn & 0xf00) >> 4);
709           insn = EXTRACT_INSN (&prologue[vpc]);
710           vpc += 2;
711           locals_size += ((insn & 0xf) | ((insn & 0xf00) >> 4) << 8);
712         }
713       else
714         return;
715       get_frame_extra_info (fi)->locals_size = locals_size;
716       get_frame_extra_info (fi)->framesize += locals_size;
717     }
718 }
719
720 /* This function actually figures out the frame address for a given pc and
721    sp.  This is tricky  because we sometimes don't use an explicit
722    frame pointer, and the previous stack pointer isn't necessarily recorded
723    on the stack.  The only reliable way to get this info is to
724    examine the prologue.  */
725
726 static void
727 avr_init_extra_frame_info (int fromleaf, struct frame_info *fi)
728 {
729   int reg;
730
731   if (get_next_frame (fi))
732     deprecated_update_frame_pc_hack (fi, DEPRECATED_FRAME_SAVED_PC (get_next_frame (fi)));
733
734   frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
735   frame_saved_regs_zalloc (fi);
736
737   get_frame_extra_info (fi)->return_pc = 0;
738   get_frame_extra_info (fi)->args_pointer = 0;
739   get_frame_extra_info (fi)->locals_size = 0;
740   get_frame_extra_info (fi)->framereg = 0;
741   get_frame_extra_info (fi)->framesize = 0;
742   get_frame_extra_info (fi)->is_main = 0;
743
744   avr_scan_prologue (fi);
745
746   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), get_frame_base (fi),
747                                    get_frame_base (fi)))
748     {
749       /* We need to setup fi->frame here because call_function_by_hand
750          gets it wrong by assuming it's always FP.  */
751       deprecated_update_frame_base_hack (fi, deprecated_read_register_dummy (get_frame_pc (fi), get_frame_base (fi),
752                                                                              AVR_PC_REGNUM));
753     }
754   else if (!get_next_frame (fi))
755     /* this is the innermost frame? */
756     deprecated_update_frame_base_hack (fi, read_register (get_frame_extra_info (fi)->framereg));
757   else if (get_frame_extra_info (fi)->is_main != 1)
758     /* not the innermost frame, not `main' */
759     /* If we have an next frame,  the callee saved it. */
760     {
761       struct frame_info *next_fi = get_next_frame (fi);
762       if (get_frame_extra_info (fi)->framereg == AVR_SP_REGNUM)
763         deprecated_update_frame_base_hack (fi, (get_frame_base (next_fi)
764                                                 + 2 /* ret addr */
765                                                 + get_frame_extra_info (next_fi)->framesize));
766       /* FIXME: I don't analyse va_args functions  */
767       else
768         {
769           CORE_ADDR fp = 0;
770           CORE_ADDR fp1 = 0;
771           unsigned int fp_low, fp_high;
772
773           /* Scan all frames */
774           for (; next_fi; next_fi = get_next_frame (next_fi))
775             {
776               /* look for saved AVR_FP_REGNUM */
777               if (get_frame_saved_regs (next_fi)[AVR_FP_REGNUM] && !fp)
778                 fp = get_frame_saved_regs (next_fi)[AVR_FP_REGNUM];
779               /* look for saved AVR_FP_REGNUM + 1 */
780               if (get_frame_saved_regs (next_fi)[AVR_FP_REGNUM + 1] && !fp1)
781                 fp1 = get_frame_saved_regs (next_fi)[AVR_FP_REGNUM + 1];
782             }
783           fp_low = (fp ? read_memory_unsigned_integer (avr_make_saddr (fp), 1)
784                     : read_register (AVR_FP_REGNUM)) & 0xff;
785           fp_high =
786             (fp1 ? read_memory_unsigned_integer (avr_make_saddr (fp1), 1) :
787              read_register (AVR_FP_REGNUM + 1)) & 0xff;
788           deprecated_update_frame_base_hack (fi, fp_low | (fp_high << 8));
789         }
790     }
791
792   /* TRoth: Do we want to do this if we are in main? I don't think we should
793      since return_pc makes no sense when we are in main. */
794
795   if ((get_frame_pc (fi)) && (get_frame_extra_info (fi)->is_main == 0))
796     /* We are not in CALL_DUMMY */
797     {
798       CORE_ADDR addr;
799       int i;
800
801       addr = get_frame_base (fi) + get_frame_extra_info (fi)->framesize + 1;
802
803       /* Return address in stack in different endianness */
804
805       get_frame_extra_info (fi)->return_pc =
806         read_memory_unsigned_integer (avr_make_saddr (addr), 1) << 8;
807       get_frame_extra_info (fi)->return_pc |=
808         read_memory_unsigned_integer (avr_make_saddr (addr + 1), 1);
809
810       /* This return address in words,
811          must be converted to the bytes address */
812       get_frame_extra_info (fi)->return_pc *= 2;
813
814       /* Resolve a pushed registers addresses */
815       for (i = 0; i < NUM_REGS; i++)
816         {
817           if (get_frame_saved_regs (fi)[i])
818             get_frame_saved_regs (fi)[i] = addr - get_frame_saved_regs (fi)[i];
819         }
820     }
821 }
822
823 /* Restore the machine to the state it had before the current frame was
824    created.  Usually used either by the "RETURN" command, or by
825    call_function_by_hand after the dummy_frame is finished. */
826
827 static void
828 avr_pop_frame (void)
829 {
830   unsigned regnum;
831   CORE_ADDR saddr;
832   struct frame_info *frame = get_current_frame ();
833
834   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
835                                    get_frame_base (frame),
836                                    get_frame_base (frame)))
837     {
838       generic_pop_dummy_frame ();
839     }
840   else
841     {
842       /* TRoth: Why only loop over 8 registers? */
843
844       for (regnum = 0; regnum < 8; regnum++)
845         {
846           /* Don't forget AVR_SP_REGNUM in a frame_saved_regs struct is the
847              actual value we want, not the address of the value we want.  */
848           if (get_frame_saved_regs (frame)[regnum] && regnum != AVR_SP_REGNUM)
849             {
850               saddr = avr_make_saddr (get_frame_saved_regs (frame)[regnum]);
851               write_register (regnum,
852                               read_memory_unsigned_integer (saddr, 1));
853             }
854           else if (get_frame_saved_regs (frame)[regnum] && regnum == AVR_SP_REGNUM)
855             write_register (regnum, get_frame_base (frame) + 2);
856         }
857
858       /* Don't forget the update the PC too!  */
859       write_pc (get_frame_extra_info (frame)->return_pc);
860     }
861   flush_cached_frames ();
862 }
863
864 /* Return the saved PC from this frame. */
865
866 static CORE_ADDR
867 avr_frame_saved_pc (struct frame_info *frame)
868 {
869   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
870                                    get_frame_base (frame),
871                                    get_frame_base (frame)))
872     return deprecated_read_register_dummy (get_frame_pc (frame),
873                                            get_frame_base (frame),
874                                            AVR_PC_REGNUM);
875   else
876     return get_frame_extra_info (frame)->return_pc;
877 }
878
879 static CORE_ADDR
880 avr_saved_pc_after_call (struct frame_info *frame)
881 {
882   unsigned char m1, m2;
883   unsigned int sp = read_register (AVR_SP_REGNUM);
884   m1 = read_memory_unsigned_integer (avr_make_saddr (sp + 1), 1);
885   m2 = read_memory_unsigned_integer (avr_make_saddr (sp + 2), 1);
886   return (m2 | (m1 << 8)) * 2;
887 }
888
889 /* Returns the return address for a dummy. */
890
891 static CORE_ADDR
892 avr_call_dummy_address (void)
893 {
894   return entry_point_address ();
895 }
896
897 /* Setup the return address for a dummy frame, as called by
898    call_function_by_hand.  Only necessary when you are using an empty
899    CALL_DUMMY. */
900
901 static CORE_ADDR
902 avr_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
903 {
904   unsigned char buf[2];
905   int wordsize = 2;
906 #if 0
907   struct minimal_symbol *msymbol;
908   CORE_ADDR mon_brk;
909 #endif
910
911   buf[0] = 0;
912   buf[1] = 0;
913   sp -= wordsize;
914   write_memory (sp + 1, buf, 2);
915
916 #if 0
917   /* FIXME: TRoth/2002-02-18: This should probably be removed since it's a
918      left-over from Denis' original patch which used avr-mon for the target
919      instead of the generic remote target. */
920   if ((strcmp (target_shortname, "avr-mon") == 0)
921       && (msymbol = lookup_minimal_symbol ("gdb_break", NULL, NULL)))
922     {
923       mon_brk = SYMBOL_VALUE_ADDRESS (msymbol);
924       store_unsigned_integer (buf, wordsize, mon_brk / 2);
925       sp -= wordsize;
926       write_memory (sp + 1, buf + 1, 1);
927       write_memory (sp + 2, buf, 1);
928     }
929 #endif
930   return sp;
931 }
932
933 static CORE_ADDR
934 avr_skip_prologue (CORE_ADDR pc)
935 {
936   CORE_ADDR func_addr, func_end;
937   struct symtab_and_line sal;
938
939   /* See what the symbol table says */
940
941   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
942     {
943       sal = find_pc_line (func_addr, 0);
944
945       /* troth/2002-08-05: For some very simple functions, gcc doesn't
946          generate a prologue and the sal.end ends up being the 2-byte ``ret''
947          instruction at the end of the function, but func_end ends up being
948          the address of the first instruction of the _next_ function. By
949          adjusting func_end by 2 bytes, we can catch these functions and not
950          return sal.end if it is the ``ret'' instruction. */
951
952       if (sal.line != 0 && sal.end < (func_end-2))
953         return sal.end;
954     }
955
956 /* Either we didn't find the start of this function (nothing we can do),
957    or there's no line info, or the line after the prologue is after
958    the end of the function (there probably isn't a prologue). */
959
960   return pc;
961 }
962
963 static CORE_ADDR
964 avr_frame_address (struct frame_info *fi)
965 {
966   return avr_make_saddr (get_frame_base (fi));
967 }
968
969 /* Given a GDB frame, determine the address of the calling function's
970    frame.  This will be used to create a new GDB frame struct, and
971    then DEPRECATED_INIT_EXTRA_FRAME_INFO and DEPRECATED_INIT_FRAME_PC
972    will be called for the new frame.
973
974    For us, the frame address is its stack pointer value, so we look up
975    the function prologue to determine the caller's sp value, and return it.  */
976
977 static CORE_ADDR
978 avr_frame_chain (struct frame_info *frame)
979 {
980   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
981                                    get_frame_base (frame),
982                                    get_frame_base (frame)))
983     {
984       /* initialize the return_pc now */
985       get_frame_extra_info (frame)->return_pc
986         = deprecated_read_register_dummy (get_frame_pc (frame),
987                                           get_frame_base (frame),
988                                           AVR_PC_REGNUM);
989       return get_frame_base (frame);
990     }
991   return (get_frame_extra_info (frame)->is_main ? 0
992           : get_frame_base (frame) + get_frame_extra_info (frame)->framesize + 2 /* ret addr */ );
993 }
994
995 /* Store the address of the place in which to copy the structure the
996    subroutine will return.  This is called from call_function. 
997
998    We store structs through a pointer passed in the first Argument
999    register. */
1000
1001 static void
1002 avr_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1003 {
1004   write_register (0, addr);
1005 }
1006
1007 /* Setup the function arguments for calling a function in the inferior.
1008
1009    On the AVR architecture, there are 18 registers (R25 to R8) which are
1010    dedicated for passing function arguments.  Up to the first 18 arguments
1011    (depending on size) may go into these registers.  The rest go on the stack.
1012
1013    Arguments that are larger than WORDSIZE bytes will be split between two or
1014    more registers as available, but will NOT be split between a register and
1015    the stack.
1016
1017    An exceptional case exists for struct arguments (and possibly other
1018    aggregates such as arrays) -- if the size is larger than WORDSIZE bytes but
1019    not a multiple of WORDSIZE bytes.  In this case the argument is never split
1020    between the registers and the stack, but instead is copied in its entirety
1021    onto the stack, AND also copied into as many registers as there is room
1022    for.  In other words, space in registers permitting, two copies of the same
1023    argument are passed in.  As far as I can tell, only the one on the stack is
1024    used, although that may be a function of the level of compiler
1025    optimization.  I suspect this is a compiler bug.  Arguments of these odd
1026    sizes are left-justified within the word (as opposed to arguments smaller
1027    than WORDSIZE bytes, which are right-justified).
1028  
1029    If the function is to return an aggregate type such as a struct, the caller
1030    must allocate space into which the callee will copy the return value.  In
1031    this case, a pointer to the return value location is passed into the callee
1032    in register R0, which displaces one of the other arguments passed in via
1033    registers R0 to R2. */
1034
1035 static CORE_ADDR
1036 avr_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
1037                     int struct_return, CORE_ADDR struct_addr)
1038 {
1039   int stack_alloc, stack_offset;
1040   int wordsize;
1041   int argreg;
1042   int argnum;
1043   struct type *type;
1044   CORE_ADDR regval;
1045   char *val;
1046   char valbuf[4];
1047   int len;
1048
1049   wordsize = 1;
1050 #if 0
1051   /* Now make sure there's space on the stack */
1052   for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
1053     stack_alloc += TYPE_LENGTH (VALUE_TYPE (args[argnum]));
1054   sp -= stack_alloc;            /* make room on stack for args */
1055   /* we may over-allocate a little here, but that won't hurt anything */
1056 #endif
1057   argreg = 25;
1058   if (struct_return)            /* "struct return" pointer takes up one argreg */
1059     {
1060       write_register (--argreg, struct_addr);
1061     }
1062
1063   /* Now load as many as possible of the first arguments into registers, and
1064      push the rest onto the stack.  There are 3N bytes in three registers
1065      available.  Loop thru args from first to last.  */
1066
1067   for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
1068     {
1069       type = VALUE_TYPE (args[argnum]);
1070       len = TYPE_LENGTH (type);
1071       val = (char *) VALUE_CONTENTS (args[argnum]);
1072
1073       /* NOTE WELL!!!!!  This is not an "else if" clause!!!  That's because
1074          some *&^%$ things get passed on the stack AND in the registers!  */
1075       while (len > 0)
1076         {                       /* there's room in registers */
1077           len -= wordsize;
1078           regval = extract_unsigned_integer (val + len, wordsize);
1079           write_register (argreg--, regval);
1080         }
1081     }
1082   return sp;
1083 }
1084
1085 /* Not all avr devices support the BREAK insn. Those that don't should treat
1086    it as a NOP. Thus, it should be ok. Since the avr is currently a remote
1087    only target, this shouldn't be a problem (I hope). TRoth/2003-05-14  */
1088
1089 static const unsigned char *
1090 avr_breakpoint_from_pc (CORE_ADDR * pcptr, int *lenptr)
1091 {
1092     static unsigned char avr_break_insn [] = { 0x98, 0x95 };
1093     *lenptr = sizeof (avr_break_insn);
1094     return avr_break_insn;
1095 }
1096
1097 /* Initialize the gdbarch structure for the AVR's. */
1098
1099 static struct gdbarch *
1100 avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1101 {
1102   struct gdbarch *gdbarch;
1103   struct gdbarch_tdep *tdep;
1104
1105   /* Find a candidate among the list of pre-declared architectures. */
1106   arches = gdbarch_list_lookup_by_info (arches, &info);
1107   if (arches != NULL)
1108     return arches->gdbarch;
1109
1110   /* None found, create a new architecture from the information provided. */
1111   tdep = XMALLOC (struct gdbarch_tdep);
1112   gdbarch = gdbarch_alloc (&info, tdep);
1113
1114   /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
1115      ready to unwind the PC first (see frame.c:get_prev_frame()).  */
1116   set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
1117
1118   /* If we ever need to differentiate the device types, do it here. */
1119   switch (info.bfd_arch_info->mach)
1120     {
1121     case bfd_mach_avr1:
1122     case bfd_mach_avr2:
1123     case bfd_mach_avr3:
1124     case bfd_mach_avr4:
1125     case bfd_mach_avr5:
1126       break;
1127     }
1128
1129   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1130   set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1131   set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1132   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1133   set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1134   set_gdbarch_addr_bit (gdbarch, 32);
1135   set_gdbarch_bfd_vma_bit (gdbarch, 32);        /* FIXME: TRoth/2002-02-18: Is this needed? */
1136
1137   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1138   set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1139   set_gdbarch_long_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1140
1141   set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
1142   set_gdbarch_double_format (gdbarch, &floatformat_ieee_single_little);
1143   set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_single_little);
1144
1145   set_gdbarch_read_pc (gdbarch, avr_read_pc);
1146   set_gdbarch_write_pc (gdbarch, avr_write_pc);
1147   set_gdbarch_deprecated_target_read_fp (gdbarch, avr_read_fp);
1148   set_gdbarch_read_sp (gdbarch, avr_read_sp);
1149   set_gdbarch_deprecated_dummy_write_sp (gdbarch, avr_write_sp);
1150
1151   set_gdbarch_num_regs (gdbarch, AVR_NUM_REGS);
1152
1153   set_gdbarch_sp_regnum (gdbarch, AVR_SP_REGNUM);
1154   set_gdbarch_deprecated_fp_regnum (gdbarch, AVR_FP_REGNUM);
1155   set_gdbarch_pc_regnum (gdbarch, AVR_PC_REGNUM);
1156
1157   set_gdbarch_register_name (gdbarch, avr_register_name);
1158   set_gdbarch_register_type (gdbarch, avr_register_type);
1159
1160   set_gdbarch_print_insn (gdbarch, print_insn_avr);
1161
1162   set_gdbarch_call_dummy_address (gdbarch, avr_call_dummy_address);
1163
1164   set_gdbarch_address_to_pointer (gdbarch, avr_address_to_pointer);
1165   set_gdbarch_pointer_to_address (gdbarch, avr_pointer_to_address);
1166   set_gdbarch_deprecated_push_arguments (gdbarch, avr_push_arguments);
1167   set_gdbarch_deprecated_push_return_address (gdbarch, avr_push_return_address);
1168   set_gdbarch_deprecated_pop_frame (gdbarch, avr_pop_frame);
1169
1170   set_gdbarch_use_struct_convention (gdbarch, generic_use_struct_convention);
1171   set_gdbarch_deprecated_store_struct_return (gdbarch, avr_store_struct_return);
1172
1173   set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, avr_scan_prologue);
1174   set_gdbarch_deprecated_init_extra_frame_info (gdbarch, avr_init_extra_frame_info);
1175   set_gdbarch_skip_prologue (gdbarch, avr_skip_prologue);
1176   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1177
1178   set_gdbarch_decr_pc_after_break (gdbarch, 0);
1179   set_gdbarch_breakpoint_from_pc (gdbarch, avr_breakpoint_from_pc);
1180
1181   set_gdbarch_function_start_offset (gdbarch, 0);
1182
1183   set_gdbarch_frame_args_skip (gdbarch, 0);
1184   set_gdbarch_frameless_function_invocation (gdbarch, frameless_look_for_prologue);     /* ??? */
1185   set_gdbarch_deprecated_frame_chain (gdbarch, avr_frame_chain);
1186   set_gdbarch_deprecated_frame_saved_pc (gdbarch, avr_frame_saved_pc);
1187   set_gdbarch_frame_args_address (gdbarch, avr_frame_address);
1188   set_gdbarch_frame_locals_address (gdbarch, avr_frame_address);
1189   set_gdbarch_deprecated_saved_pc_after_call (gdbarch, avr_saved_pc_after_call);
1190
1191   return gdbarch;
1192 }
1193
1194 /* Send a query request to the avr remote target asking for values of the io
1195    registers. If args parameter is not NULL, then the user has requested info
1196    on a specific io register [This still needs implemented and is ignored for
1197    now]. The query string should be one of these forms:
1198
1199    "Ravr.io_reg" -> reply is "NN" number of io registers
1200
1201    "Ravr.io_reg:addr,len" where addr is first register and len is number of
1202    registers to be read. The reply should be "<NAME>,VV;" for each io register
1203    where, <NAME> is a string, and VV is the hex value of the register.
1204
1205    All io registers are 8-bit. */
1206
1207 static void
1208 avr_io_reg_read_command (char *args, int from_tty)
1209 {
1210   int bufsiz = 0;
1211   char buf[400];
1212   char query[400];
1213   char *p;
1214   unsigned int nreg = 0;
1215   unsigned int val;
1216   int i, j, k, step;
1217
1218   if (!current_target.to_query)
1219     {
1220       fprintf_unfiltered (gdb_stderr,
1221                           "ERR: info io_registers NOT supported by current "
1222                           "target\n");
1223       return;
1224     }
1225
1226   /* Just get the maximum buffer size. */
1227   target_query ((int) 'R', 0, 0, &bufsiz);
1228   if (bufsiz > sizeof (buf))
1229     bufsiz = sizeof (buf);
1230
1231   /* Find out how many io registers the target has. */
1232   strcpy (query, "avr.io_reg");
1233   target_query ((int) 'R', query, buf, &bufsiz);
1234
1235   if (strncmp (buf, "", bufsiz) == 0)
1236     {
1237       fprintf_unfiltered (gdb_stderr,
1238                           "info io_registers NOT supported by target\n");
1239       return;
1240     }
1241
1242   if (sscanf (buf, "%x", &nreg) != 1)
1243     {
1244       fprintf_unfiltered (gdb_stderr,
1245                           "Error fetching number of io registers\n");
1246       return;
1247     }
1248
1249   reinitialize_more_filter ();
1250
1251   printf_unfiltered ("Target has %u io registers:\n\n", nreg);
1252
1253   /* only fetch up to 8 registers at a time to keep the buffer small */
1254   step = 8;
1255
1256   for (i = 0; i < nreg; i += step)
1257     {
1258       /* how many registers this round? */
1259       j = step;
1260       if ((i+j) >= nreg)
1261         j = nreg - i;           /* last block is less than 8 registers */
1262
1263       snprintf (query, sizeof (query) - 1, "avr.io_reg:%x,%x", i, j);
1264       target_query ((int) 'R', query, buf, &bufsiz);
1265
1266       p = buf;
1267       for (k = i; k < (i + j); k++)
1268         {
1269           if (sscanf (p, "%[^,],%x;", query, &val) == 2)
1270             {
1271               printf_filtered ("[%02x] %-15s : %02x\n", k, query, val);
1272               while ((*p != ';') && (*p != '\0'))
1273                 p++;
1274               p++;              /* skip over ';' */
1275               if (*p == '\0')
1276                 break;
1277             }
1278         }
1279     }
1280 }
1281
1282 extern initialize_file_ftype _initialize_avr_tdep; /* -Wmissing-prototypes */
1283
1284 void
1285 _initialize_avr_tdep (void)
1286 {
1287   register_gdbarch_init (bfd_arch_avr, avr_gdbarch_init);
1288
1289   /* Add a new command to allow the user to query the avr remote target for
1290      the values of the io space registers in a saner way than just using
1291      `x/NNNb ADDR`. */
1292
1293   /* FIXME: TRoth/2002-02-18: This should probably be changed to 'info avr
1294      io_registers' to signify it is not available on other platforms. */
1295
1296   add_cmd ("io_registers", class_info, avr_io_reg_read_command,
1297            "query remote avr target for io space register values", &infolist);
1298 }