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