gdb/
[binutils-gdb.git] / gdb / m68k-tdep.c
1 /* Target-dependent code for the Motorola 68000 series.
2
3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001,
4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
5 Free Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "dwarf2-frame.h"
24 #include "frame.h"
25 #include "frame-base.h"
26 #include "frame-unwind.h"
27 #include "gdbtypes.h"
28 #include "symtab.h"
29 #include "gdbcore.h"
30 #include "value.h"
31 #include "gdb_string.h"
32 #include "gdb_assert.h"
33 #include "inferior.h"
34 #include "regcache.h"
35 #include "arch-utils.h"
36 #include "osabi.h"
37 #include "dis-asm.h"
38 #include "target-descriptions.h"
39
40 #include "m68k-tdep.h"
41 \f
42
43 #define P_LINKL_FP 0x480e
44 #define P_LINKW_FP 0x4e56
45 #define P_PEA_FP 0x4856
46 #define P_MOVEAL_SP_FP 0x2c4f
47 #define P_ADDAW_SP 0xdefc
48 #define P_ADDAL_SP 0xdffc
49 #define P_SUBQW_SP 0x514f
50 #define P_SUBQL_SP 0x518f
51 #define P_LEA_SP_SP 0x4fef
52 #define P_LEA_PC_A5 0x4bfb0170
53 #define P_FMOVEMX_SP 0xf227
54 #define P_MOVEL_SP 0x2f00
55 #define P_MOVEML_SP 0x48e7
56
57 /* Offset from SP to first arg on stack at first instruction of a function */
58 #define SP_ARG0 (1 * 4)
59
60 #if !defined (BPT_VECTOR)
61 #define BPT_VECTOR 0xf
62 #endif
63
64 static const gdb_byte *
65 m68k_local_breakpoint_from_pc (struct gdbarch *gdbarch,
66 CORE_ADDR *pcptr, int *lenptr)
67 {
68 static gdb_byte break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
69 *lenptr = sizeof (break_insn);
70 return break_insn;
71 }
72 \f
73
74 /* Construct types for ISA-specific registers. */
75 static struct type *
76 m68k_ps_type (struct gdbarch *gdbarch)
77 {
78 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
79
80 if (!tdep->m68k_ps_type)
81 {
82 struct type *type;
83
84 type = arch_flags_type (gdbarch, "builtin_type_m68k_ps", 4);
85 append_flags_type_flag (type, 0, "C");
86 append_flags_type_flag (type, 1, "V");
87 append_flags_type_flag (type, 2, "Z");
88 append_flags_type_flag (type, 3, "N");
89 append_flags_type_flag (type, 4, "X");
90 append_flags_type_flag (type, 8, "I0");
91 append_flags_type_flag (type, 9, "I1");
92 append_flags_type_flag (type, 10, "I2");
93 append_flags_type_flag (type, 12, "M");
94 append_flags_type_flag (type, 13, "S");
95 append_flags_type_flag (type, 14, "T0");
96 append_flags_type_flag (type, 15, "T1");
97
98 tdep->m68k_ps_type = type;
99 }
100
101 return tdep->m68k_ps_type;
102 }
103
104 static struct type *
105 m68881_ext_type (struct gdbarch *gdbarch)
106 {
107 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
108
109 if (!tdep->m68881_ext_type)
110 tdep->m68881_ext_type
111 = arch_float_type (gdbarch, -1, "builtin_type_m68881_ext",
112 floatformats_m68881_ext);
113
114 return tdep->m68881_ext_type;
115 }
116
117 /* Return the GDB type object for the "standard" data type of data in
118 register N. This should be int for D0-D7, SR, FPCONTROL and
119 FPSTATUS, long double for FP0-FP7, and void pointer for all others
120 (A0-A7, PC, FPIADDR). Note, for registers which contain
121 addresses return pointer to void, not pointer to char, because we
122 don't want to attempt to print the string after printing the
123 address. */
124
125 static struct type *
126 m68k_register_type (struct gdbarch *gdbarch, int regnum)
127 {
128 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
129
130 if (tdep->fpregs_present)
131 {
132 if (regnum >= gdbarch_fp0_regnum (gdbarch)
133 && regnum <= gdbarch_fp0_regnum (gdbarch) + 7)
134 {
135 if (tdep->flavour == m68k_coldfire_flavour)
136 return builtin_type (gdbarch)->builtin_double;
137 else
138 return m68881_ext_type (gdbarch);
139 }
140
141 if (regnum == M68K_FPI_REGNUM)
142 return builtin_type (gdbarch)->builtin_func_ptr;
143
144 if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM)
145 return builtin_type (gdbarch)->builtin_int32;
146 }
147 else
148 {
149 if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM)
150 return builtin_type (gdbarch)->builtin_int0;
151 }
152
153 if (regnum == gdbarch_pc_regnum (gdbarch))
154 return builtin_type (gdbarch)->builtin_func_ptr;
155
156 if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
157 return builtin_type (gdbarch)->builtin_data_ptr;
158
159 if (regnum == M68K_PS_REGNUM)
160 return m68k_ps_type (gdbarch);
161
162 return builtin_type (gdbarch)->builtin_int32;
163 }
164
165 static const char *m68k_register_names[] = {
166 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
167 "a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp",
168 "ps", "pc",
169 "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
170 "fpcontrol", "fpstatus", "fpiaddr"
171 };
172
173 /* Function: m68k_register_name
174 Returns the name of the standard m68k register regnum. */
175
176 static const char *
177 m68k_register_name (struct gdbarch *gdbarch, int regnum)
178 {
179 if (regnum < 0 || regnum >= ARRAY_SIZE (m68k_register_names))
180 internal_error (__FILE__, __LINE__,
181 _("m68k_register_name: illegal register number %d"), regnum);
182 else
183 return m68k_register_names[regnum];
184 }
185 \f
186 /* Return nonzero if a value of type TYPE stored in register REGNUM
187 needs any special handling. */
188
189 static int
190 m68k_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type)
191 {
192 if (!gdbarch_tdep (gdbarch)->fpregs_present)
193 return 0;
194 return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
195 && type != m68881_ext_type (gdbarch));
196 }
197
198 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
199 return its contents in TO. */
200
201 static void
202 m68k_register_to_value (struct frame_info *frame, int regnum,
203 struct type *type, gdb_byte *to)
204 {
205 gdb_byte from[M68K_MAX_REGISTER_SIZE];
206 struct type *fpreg_type = register_type (get_frame_arch (frame),
207 M68K_FP0_REGNUM);
208
209 /* We only support floating-point values. */
210 if (TYPE_CODE (type) != TYPE_CODE_FLT)
211 {
212 warning (_("Cannot convert floating-point register value "
213 "to non-floating-point type."));
214 return;
215 }
216
217 /* Convert to TYPE. */
218 get_frame_register (frame, regnum, from);
219 convert_typed_floating (from, fpreg_type, to, type);
220 }
221
222 /* Write the contents FROM of a value of type TYPE into register
223 REGNUM in frame FRAME. */
224
225 static void
226 m68k_value_to_register (struct frame_info *frame, int regnum,
227 struct type *type, const gdb_byte *from)
228 {
229 gdb_byte to[M68K_MAX_REGISTER_SIZE];
230 struct type *fpreg_type = register_type (get_frame_arch (frame),
231 M68K_FP0_REGNUM);
232
233 /* We only support floating-point values. */
234 if (TYPE_CODE (type) != TYPE_CODE_FLT)
235 {
236 warning (_("Cannot convert non-floating-point type "
237 "to floating-point register value."));
238 return;
239 }
240
241 /* Convert from TYPE. */
242 convert_typed_floating (from, type, to, fpreg_type);
243 put_frame_register (frame, regnum, to);
244 }
245
246 \f
247 /* There is a fair number of calling conventions that are in somewhat
248 wide use. The 68000/08/10 don't support an FPU, not even as a
249 coprocessor. All function return values are stored in %d0/%d1.
250 Structures are returned in a static buffer, a pointer to which is
251 returned in %d0. This means that functions returning a structure
252 are not re-entrant. To avoid this problem some systems use a
253 convention where the caller passes a pointer to a buffer in %a1
254 where the return values is to be stored. This convention is the
255 default, and is implemented in the function m68k_return_value.
256
257 The 68020/030/040/060 do support an FPU, either as a coprocessor
258 (68881/2) or built-in (68040/68060). That's why System V release 4
259 (SVR4) instroduces a new calling convention specified by the SVR4
260 psABI. Integer values are returned in %d0/%d1, pointer return
261 values in %a0 and floating values in %fp0. When calling functions
262 returning a structure the caller should pass a pointer to a buffer
263 for the return value in %a0. This convention is implemented in the
264 function m68k_svr4_return_value, and by appropriately setting the
265 struct_value_regnum member of `struct gdbarch_tdep'.
266
267 GNU/Linux returns values in the same way as SVR4 does, but uses %a1
268 for passing the structure return value buffer.
269
270 GCC can also generate code where small structures are returned in
271 %d0/%d1 instead of in memory by using -freg-struct-return. This is
272 the default on NetBSD a.out, OpenBSD and GNU/Linux and several
273 embedded systems. This convention is implemented by setting the
274 struct_return member of `struct gdbarch_tdep' to reg_struct_return. */
275
276 /* Read a function return value of TYPE from REGCACHE, and copy that
277 into VALBUF. */
278
279 static void
280 m68k_extract_return_value (struct type *type, struct regcache *regcache,
281 gdb_byte *valbuf)
282 {
283 int len = TYPE_LENGTH (type);
284 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
285
286 if (len <= 4)
287 {
288 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
289 memcpy (valbuf, buf + (4 - len), len);
290 }
291 else if (len <= 8)
292 {
293 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
294 memcpy (valbuf, buf + (8 - len), len - 4);
295 regcache_raw_read (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
296 }
297 else
298 internal_error (__FILE__, __LINE__,
299 _("Cannot extract return value of %d bytes long."), len);
300 }
301
302 static void
303 m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
304 gdb_byte *valbuf)
305 {
306 int len = TYPE_LENGTH (type);
307 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
308 struct gdbarch *gdbarch = get_regcache_arch (regcache);
309 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
310
311 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
312 {
313 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
314 regcache_raw_read (regcache, M68K_FP0_REGNUM, buf);
315 convert_typed_floating (buf, fpreg_type, valbuf, type);
316 }
317 else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
318 regcache_raw_read (regcache, M68K_A0_REGNUM, valbuf);
319 else
320 m68k_extract_return_value (type, regcache, valbuf);
321 }
322
323 /* Write a function return value of TYPE from VALBUF into REGCACHE. */
324
325 static void
326 m68k_store_return_value (struct type *type, struct regcache *regcache,
327 const gdb_byte *valbuf)
328 {
329 int len = TYPE_LENGTH (type);
330
331 if (len <= 4)
332 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 4 - len, len, valbuf);
333 else if (len <= 8)
334 {
335 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 8 - len,
336 len - 4, valbuf);
337 regcache_raw_write (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
338 }
339 else
340 internal_error (__FILE__, __LINE__,
341 _("Cannot store return value of %d bytes long."), len);
342 }
343
344 static void
345 m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
346 const gdb_byte *valbuf)
347 {
348 int len = TYPE_LENGTH (type);
349 struct gdbarch *gdbarch = get_regcache_arch (regcache);
350 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
351
352 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
353 {
354 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
355 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
356 convert_typed_floating (valbuf, type, buf, fpreg_type);
357 regcache_raw_write (regcache, M68K_FP0_REGNUM, buf);
358 }
359 else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
360 {
361 regcache_raw_write (regcache, M68K_A0_REGNUM, valbuf);
362 regcache_raw_write (regcache, M68K_D0_REGNUM, valbuf);
363 }
364 else
365 m68k_store_return_value (type, regcache, valbuf);
366 }
367
368 /* Return non-zero if TYPE, which is assumed to be a structure or
369 union type, should be returned in registers for architecture
370 GDBARCH. */
371
372 static int
373 m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
374 {
375 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
376 enum type_code code = TYPE_CODE (type);
377 int len = TYPE_LENGTH (type);
378
379 gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
380
381 if (tdep->struct_return == pcc_struct_return)
382 return 0;
383
384 return (len == 1 || len == 2 || len == 4 || len == 8);
385 }
386
387 /* Determine, for architecture GDBARCH, how a return value of TYPE
388 should be returned. If it is supposed to be returned in registers,
389 and READBUF is non-zero, read the appropriate value from REGCACHE,
390 and copy it into READBUF. If WRITEBUF is non-zero, write the value
391 from WRITEBUF into REGCACHE. */
392
393 static enum return_value_convention
394 m68k_return_value (struct gdbarch *gdbarch, struct type *func_type,
395 struct type *type, struct regcache *regcache,
396 gdb_byte *readbuf, const gdb_byte *writebuf)
397 {
398 enum type_code code = TYPE_CODE (type);
399
400 /* GCC returns a `long double' in memory too. */
401 if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
402 && !m68k_reg_struct_return_p (gdbarch, type))
403 || (code == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12))
404 {
405 /* The default on m68k is to return structures in static memory.
406 Consequently a function must return the address where we can
407 find the return value. */
408
409 if (readbuf)
410 {
411 ULONGEST addr;
412
413 regcache_raw_read_unsigned (regcache, M68K_D0_REGNUM, &addr);
414 read_memory (addr, readbuf, TYPE_LENGTH (type));
415 }
416
417 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
418 }
419
420 if (readbuf)
421 m68k_extract_return_value (type, regcache, readbuf);
422 if (writebuf)
423 m68k_store_return_value (type, regcache, writebuf);
424
425 return RETURN_VALUE_REGISTER_CONVENTION;
426 }
427
428 static enum return_value_convention
429 m68k_svr4_return_value (struct gdbarch *gdbarch, struct type *func_type,
430 struct type *type, struct regcache *regcache,
431 gdb_byte *readbuf, const gdb_byte *writebuf)
432 {
433 enum type_code code = TYPE_CODE (type);
434
435 if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
436 && !m68k_reg_struct_return_p (gdbarch, type))
437 {
438 /* The System V ABI says that:
439
440 "A function returning a structure or union also sets %a0 to
441 the value it finds in %a0. Thus when the caller receives
442 control again, the address of the returned object resides in
443 register %a0."
444
445 So the ABI guarantees that we can always find the return
446 value just after the function has returned. */
447
448 if (readbuf)
449 {
450 ULONGEST addr;
451
452 regcache_raw_read_unsigned (regcache, M68K_A0_REGNUM, &addr);
453 read_memory (addr, readbuf, TYPE_LENGTH (type));
454 }
455
456 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
457 }
458
459 /* This special case is for structures consisting of a single
460 `float' or `double' member. These structures are returned in
461 %fp0. For these structures, we call ourselves recursively,
462 changing TYPE into the type of the first member of the structure.
463 Since that should work for all structures that have only one
464 member, we don't bother to check the member's type here. */
465 if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
466 {
467 type = check_typedef (TYPE_FIELD_TYPE (type, 0));
468 return m68k_svr4_return_value (gdbarch, func_type, type, regcache,
469 readbuf, writebuf);
470 }
471
472 if (readbuf)
473 m68k_svr4_extract_return_value (type, regcache, readbuf);
474 if (writebuf)
475 m68k_svr4_store_return_value (type, regcache, writebuf);
476
477 return RETURN_VALUE_REGISTER_CONVENTION;
478 }
479 \f
480
481 /* Always align the frame to a 4-byte boundary. This is required on
482 coldfire and harmless on the rest. */
483
484 static CORE_ADDR
485 m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
486 {
487 /* Align the stack to four bytes. */
488 return sp & ~3;
489 }
490
491 static CORE_ADDR
492 m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
493 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
494 struct value **args, CORE_ADDR sp, int struct_return,
495 CORE_ADDR struct_addr)
496 {
497 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
498 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
499 gdb_byte buf[4];
500 int i;
501
502 /* Push arguments in reverse order. */
503 for (i = nargs - 1; i >= 0; i--)
504 {
505 struct type *value_type = value_enclosing_type (args[i]);
506 int len = TYPE_LENGTH (value_type);
507 int container_len = (len + 3) & ~3;
508 int offset;
509
510 /* Non-scalars bigger than 4 bytes are left aligned, others are
511 right aligned. */
512 if ((TYPE_CODE (value_type) == TYPE_CODE_STRUCT
513 || TYPE_CODE (value_type) == TYPE_CODE_UNION
514 || TYPE_CODE (value_type) == TYPE_CODE_ARRAY)
515 && len > 4)
516 offset = 0;
517 else
518 offset = container_len - len;
519 sp -= container_len;
520 write_memory (sp + offset, value_contents_all (args[i]), len);
521 }
522
523 /* Store struct value address. */
524 if (struct_return)
525 {
526 store_unsigned_integer (buf, 4, byte_order, struct_addr);
527 regcache_cooked_write (regcache, tdep->struct_value_regnum, buf);
528 }
529
530 /* Store return address. */
531 sp -= 4;
532 store_unsigned_integer (buf, 4, byte_order, bp_addr);
533 write_memory (sp, buf, 4);
534
535 /* Finally, update the stack pointer... */
536 store_unsigned_integer (buf, 4, byte_order, sp);
537 regcache_cooked_write (regcache, M68K_SP_REGNUM, buf);
538
539 /* ...and fake a frame pointer. */
540 regcache_cooked_write (regcache, M68K_FP_REGNUM, buf);
541
542 /* DWARF2/GCC uses the stack address *before* the function call as a
543 frame's CFA. */
544 return sp + 8;
545 }
546
547 /* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
548
549 static int
550 m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
551 {
552 if (num < 8)
553 /* d0..7 */
554 return (num - 0) + M68K_D0_REGNUM;
555 else if (num < 16)
556 /* a0..7 */
557 return (num - 8) + M68K_A0_REGNUM;
558 else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
559 /* fp0..7 */
560 return (num - 16) + M68K_FP0_REGNUM;
561 else if (num == 25)
562 /* pc */
563 return M68K_PC_REGNUM;
564 else
565 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
566 }
567
568 \f
569 struct m68k_frame_cache
570 {
571 /* Base address. */
572 CORE_ADDR base;
573 CORE_ADDR sp_offset;
574 CORE_ADDR pc;
575
576 /* Saved registers. */
577 CORE_ADDR saved_regs[M68K_NUM_REGS];
578 CORE_ADDR saved_sp;
579
580 /* Stack space reserved for local variables. */
581 long locals;
582 };
583
584 /* Allocate and initialize a frame cache. */
585
586 static struct m68k_frame_cache *
587 m68k_alloc_frame_cache (void)
588 {
589 struct m68k_frame_cache *cache;
590 int i;
591
592 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
593
594 /* Base address. */
595 cache->base = 0;
596 cache->sp_offset = -4;
597 cache->pc = 0;
598
599 /* Saved registers. We initialize these to -1 since zero is a valid
600 offset (that's where %fp is supposed to be stored). */
601 for (i = 0; i < M68K_NUM_REGS; i++)
602 cache->saved_regs[i] = -1;
603
604 /* Frameless until proven otherwise. */
605 cache->locals = -1;
606
607 return cache;
608 }
609
610 /* Check whether PC points at a code that sets up a new stack frame.
611 If so, it updates CACHE and returns the address of the first
612 instruction after the sequence that sets removes the "hidden"
613 argument from the stack or CURRENT_PC, whichever is smaller.
614 Otherwise, return PC. */
615
616 static CORE_ADDR
617 m68k_analyze_frame_setup (struct gdbarch *gdbarch,
618 CORE_ADDR pc, CORE_ADDR current_pc,
619 struct m68k_frame_cache *cache)
620 {
621 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
622 int op;
623
624 if (pc >= current_pc)
625 return current_pc;
626
627 op = read_memory_unsigned_integer (pc, 2, byte_order);
628
629 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
630 {
631 cache->saved_regs[M68K_FP_REGNUM] = 0;
632 cache->sp_offset += 4;
633 if (op == P_LINKW_FP)
634 {
635 /* link.w %fp, #-N */
636 /* link.w %fp, #0; adda.l #-N, %sp */
637 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
638
639 if (pc + 4 < current_pc && cache->locals == 0)
640 {
641 op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
642 if (op == P_ADDAL_SP)
643 {
644 cache->locals = read_memory_integer (pc + 6, 4, byte_order);
645 return pc + 10;
646 }
647 }
648
649 return pc + 4;
650 }
651 else if (op == P_LINKL_FP)
652 {
653 /* link.l %fp, #-N */
654 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
655 return pc + 6;
656 }
657 else
658 {
659 /* pea (%fp); movea.l %sp, %fp */
660 cache->locals = 0;
661
662 if (pc + 2 < current_pc)
663 {
664 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
665
666 if (op == P_MOVEAL_SP_FP)
667 {
668 /* move.l %sp, %fp */
669 return pc + 4;
670 }
671 }
672
673 return pc + 2;
674 }
675 }
676 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
677 {
678 /* subq.[wl] #N,%sp */
679 /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
680 cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
681 if (pc + 2 < current_pc)
682 {
683 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
684 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
685 {
686 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
687 return pc + 4;
688 }
689 }
690 return pc + 2;
691 }
692 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
693 {
694 /* adda.w #-N,%sp */
695 /* lea (-N,%sp),%sp */
696 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
697 return pc + 4;
698 }
699 else if (op == P_ADDAL_SP)
700 {
701 /* adda.l #-N,%sp */
702 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
703 return pc + 6;
704 }
705
706 return pc;
707 }
708
709 /* Check whether PC points at code that saves registers on the stack.
710 If so, it updates CACHE and returns the address of the first
711 instruction after the register saves or CURRENT_PC, whichever is
712 smaller. Otherwise, return PC. */
713
714 static CORE_ADDR
715 m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
716 CORE_ADDR current_pc,
717 struct m68k_frame_cache *cache)
718 {
719 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
720
721 if (cache->locals >= 0)
722 {
723 CORE_ADDR offset;
724 int op;
725 int i, mask, regno;
726
727 offset = -4 - cache->locals;
728 while (pc < current_pc)
729 {
730 op = read_memory_unsigned_integer (pc, 2, byte_order);
731 if (op == P_FMOVEMX_SP
732 && gdbarch_tdep (gdbarch)->fpregs_present)
733 {
734 /* fmovem.x REGS,-(%sp) */
735 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
736 if ((op & 0xff00) == 0xe000)
737 {
738 mask = op & 0xff;
739 for (i = 0; i < 16; i++, mask >>= 1)
740 {
741 if (mask & 1)
742 {
743 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
744 offset -= 12;
745 }
746 }
747 pc += 4;
748 }
749 else
750 break;
751 }
752 else if ((op & 0177760) == P_MOVEL_SP)
753 {
754 /* move.l %R,-(%sp) */
755 regno = op & 017;
756 cache->saved_regs[regno] = offset;
757 offset -= 4;
758 pc += 2;
759 }
760 else if (op == P_MOVEML_SP)
761 {
762 /* movem.l REGS,-(%sp) */
763 mask = read_memory_unsigned_integer (pc + 2, 2, byte_order);
764 for (i = 0; i < 16; i++, mask >>= 1)
765 {
766 if (mask & 1)
767 {
768 cache->saved_regs[15 - i] = offset;
769 offset -= 4;
770 }
771 }
772 pc += 4;
773 }
774 else
775 break;
776 }
777 }
778
779 return pc;
780 }
781
782
783 /* Do a full analysis of the prologue at PC and update CACHE
784 accordingly. Bail out early if CURRENT_PC is reached. Return the
785 address where the analysis stopped.
786
787 We handle all cases that can be generated by gcc.
788
789 For allocating a stack frame:
790
791 link.w %a6,#-N
792 link.l %a6,#-N
793 pea (%fp); move.l %sp,%fp
794 link.w %a6,#0; add.l #-N,%sp
795 subq.l #N,%sp
796 subq.w #N,%sp
797 subq.w #8,%sp; subq.w #N-8,%sp
798 add.w #-N,%sp
799 lea (-N,%sp),%sp
800 add.l #-N,%sp
801
802 For saving registers:
803
804 fmovem.x REGS,-(%sp)
805 move.l R1,-(%sp)
806 move.l R1,-(%sp); move.l R2,-(%sp)
807 movem.l REGS,-(%sp)
808
809 For setting up the PIC register:
810
811 lea (%pc,N),%a5
812
813 */
814
815 static CORE_ADDR
816 m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
817 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
818 {
819 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
820 unsigned int op;
821
822 pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache);
823 pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
824 if (pc >= current_pc)
825 return current_pc;
826
827 /* Check for GOT setup. */
828 op = read_memory_unsigned_integer (pc, 4, byte_order);
829 if (op == P_LEA_PC_A5)
830 {
831 /* lea (%pc,N),%a5 */
832 return pc + 8;
833 }
834
835 return pc;
836 }
837
838 /* Return PC of first real instruction. */
839
840 static CORE_ADDR
841 m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
842 {
843 struct m68k_frame_cache cache;
844 CORE_ADDR pc;
845 int op;
846
847 cache.locals = -1;
848 pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
849 if (cache.locals < 0)
850 return start_pc;
851 return pc;
852 }
853
854 static CORE_ADDR
855 m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
856 {
857 gdb_byte buf[8];
858
859 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
860 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
861 }
862 \f
863 /* Normal frames. */
864
865 static struct m68k_frame_cache *
866 m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
867 {
868 struct gdbarch *gdbarch = get_frame_arch (this_frame);
869 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
870 struct m68k_frame_cache *cache;
871 gdb_byte buf[4];
872 int i;
873
874 if (*this_cache)
875 return *this_cache;
876
877 cache = m68k_alloc_frame_cache ();
878 *this_cache = cache;
879
880 /* In principle, for normal frames, %fp holds the frame pointer,
881 which holds the base address for the current stack frame.
882 However, for functions that don't need it, the frame pointer is
883 optional. For these "frameless" functions the frame pointer is
884 actually the frame pointer of the calling frame. Signal
885 trampolines are just a special case of a "frameless" function.
886 They (usually) share their frame pointer with the frame that was
887 in progress when the signal occurred. */
888
889 get_frame_register (this_frame, M68K_FP_REGNUM, buf);
890 cache->base = extract_unsigned_integer (buf, 4, byte_order);
891 if (cache->base == 0)
892 return cache;
893
894 /* For normal frames, %pc is stored at 4(%fp). */
895 cache->saved_regs[M68K_PC_REGNUM] = 4;
896
897 cache->pc = get_frame_func (this_frame);
898 if (cache->pc != 0)
899 m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
900 get_frame_pc (this_frame), cache);
901
902 if (cache->locals < 0)
903 {
904 /* We didn't find a valid frame, which means that CACHE->base
905 currently holds the frame pointer for our calling frame. If
906 we're at the start of a function, or somewhere half-way its
907 prologue, the function's frame probably hasn't been fully
908 setup yet. Try to reconstruct the base address for the stack
909 frame by looking at the stack pointer. For truly "frameless"
910 functions this might work too. */
911
912 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
913 cache->base = extract_unsigned_integer (buf, 4, byte_order)
914 + cache->sp_offset;
915 }
916
917 /* Now that we have the base address for the stack frame we can
918 calculate the value of %sp in the calling frame. */
919 cache->saved_sp = cache->base + 8;
920
921 /* Adjust all the saved registers such that they contain addresses
922 instead of offsets. */
923 for (i = 0; i < M68K_NUM_REGS; i++)
924 if (cache->saved_regs[i] != -1)
925 cache->saved_regs[i] += cache->base;
926
927 return cache;
928 }
929
930 static void
931 m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
932 struct frame_id *this_id)
933 {
934 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
935
936 /* This marks the outermost frame. */
937 if (cache->base == 0)
938 return;
939
940 /* See the end of m68k_push_dummy_call. */
941 *this_id = frame_id_build (cache->base + 8, cache->pc);
942 }
943
944 static struct value *
945 m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
946 int regnum)
947 {
948 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
949
950 gdb_assert (regnum >= 0);
951
952 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
953 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
954
955 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
956 return frame_unwind_got_memory (this_frame, regnum,
957 cache->saved_regs[regnum]);
958
959 return frame_unwind_got_register (this_frame, regnum, regnum);
960 }
961
962 static const struct frame_unwind m68k_frame_unwind =
963 {
964 NORMAL_FRAME,
965 m68k_frame_this_id,
966 m68k_frame_prev_register,
967 NULL,
968 default_frame_sniffer
969 };
970 \f
971 static CORE_ADDR
972 m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
973 {
974 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
975
976 return cache->base;
977 }
978
979 static const struct frame_base m68k_frame_base =
980 {
981 &m68k_frame_unwind,
982 m68k_frame_base_address,
983 m68k_frame_base_address,
984 m68k_frame_base_address
985 };
986
987 static struct frame_id
988 m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
989 {
990 CORE_ADDR fp;
991
992 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
993
994 /* See the end of m68k_push_dummy_call. */
995 return frame_id_build (fp + 8, get_frame_pc (this_frame));
996 }
997 \f
998
999 /* Figure out where the longjmp will land. Slurp the args out of the stack.
1000 We expect the first arg to be a pointer to the jmp_buf structure from which
1001 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
1002 This routine returns true on success. */
1003
1004 static int
1005 m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
1006 {
1007 gdb_byte *buf;
1008 CORE_ADDR sp, jb_addr;
1009 struct gdbarch *gdbarch = get_frame_arch (frame);
1010 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1011 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1012
1013 if (tdep->jb_pc < 0)
1014 {
1015 internal_error (__FILE__, __LINE__,
1016 _("m68k_get_longjmp_target: not implemented"));
1017 return 0;
1018 }
1019
1020 buf = alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1021 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
1022
1023 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack */
1024 buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
1025 return 0;
1026
1027 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1028 / TARGET_CHAR_BIT, byte_order);
1029
1030 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
1031 gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT),
1032 byte_order)
1033 return 0;
1034
1035 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1036 / TARGET_CHAR_BIT, byte_order);
1037 return 1;
1038 }
1039 \f
1040
1041 /* System V Release 4 (SVR4). */
1042
1043 void
1044 m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1045 {
1046 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1047
1048 /* SVR4 uses a different calling convention. */
1049 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1050
1051 /* SVR4 uses %a0 instead of %a1. */
1052 tdep->struct_value_regnum = M68K_A0_REGNUM;
1053 }
1054 \f
1055
1056 /* Function: m68k_gdbarch_init
1057 Initializer function for the m68k gdbarch vector.
1058 Called by gdbarch. Sets up the gdbarch vector(s) for this target. */
1059
1060 static struct gdbarch *
1061 m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1062 {
1063 struct gdbarch_tdep *tdep = NULL;
1064 struct gdbarch *gdbarch;
1065 struct gdbarch_list *best_arch;
1066 struct tdesc_arch_data *tdesc_data = NULL;
1067 int i;
1068 enum m68k_flavour flavour = m68k_no_flavour;
1069 int has_fp = 1;
1070 const struct floatformat **long_double_format = floatformats_m68881_ext;
1071
1072 /* Check any target description for validity. */
1073 if (tdesc_has_registers (info.target_desc))
1074 {
1075 const struct tdesc_feature *feature;
1076 int valid_p;
1077
1078 feature = tdesc_find_feature (info.target_desc,
1079 "org.gnu.gdb.m68k.core");
1080 if (feature != NULL)
1081 /* Do nothing. */
1082 ;
1083
1084 if (feature == NULL)
1085 {
1086 feature = tdesc_find_feature (info.target_desc,
1087 "org.gnu.gdb.coldfire.core");
1088 if (feature != NULL)
1089 flavour = m68k_coldfire_flavour;
1090 }
1091
1092 if (feature == NULL)
1093 {
1094 feature = tdesc_find_feature (info.target_desc,
1095 "org.gnu.gdb.fido.core");
1096 if (feature != NULL)
1097 flavour = m68k_fido_flavour;
1098 }
1099
1100 if (feature == NULL)
1101 return NULL;
1102
1103 tdesc_data = tdesc_data_alloc ();
1104
1105 valid_p = 1;
1106 for (i = 0; i <= M68K_PC_REGNUM; i++)
1107 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1108 m68k_register_names[i]);
1109
1110 if (!valid_p)
1111 {
1112 tdesc_data_cleanup (tdesc_data);
1113 return NULL;
1114 }
1115
1116 feature = tdesc_find_feature (info.target_desc,
1117 "org.gnu.gdb.coldfire.fp");
1118 if (feature != NULL)
1119 {
1120 valid_p = 1;
1121 for (i = M68K_FP0_REGNUM; i <= M68K_FPI_REGNUM; i++)
1122 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1123 m68k_register_names[i]);
1124 if (!valid_p)
1125 {
1126 tdesc_data_cleanup (tdesc_data);
1127 return NULL;
1128 }
1129 }
1130 else
1131 has_fp = 0;
1132 }
1133
1134 /* The mechanism for returning floating values from function
1135 and the type of long double depend on whether we're
1136 on ColdFire or standard m68k. */
1137
1138 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
1139 {
1140 const bfd_arch_info_type *coldfire_arch =
1141 bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1142
1143 if (coldfire_arch
1144 && ((*info.bfd_arch_info->compatible)
1145 (info.bfd_arch_info, coldfire_arch)))
1146 flavour = m68k_coldfire_flavour;
1147 }
1148
1149 /* If there is already a candidate, use it. */
1150 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1151 best_arch != NULL;
1152 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1153 {
1154 if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1155 continue;
1156
1157 if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1158 continue;
1159
1160 break;
1161 }
1162
1163 tdep = xzalloc (sizeof (struct gdbarch_tdep));
1164 gdbarch = gdbarch_alloc (&info, tdep);
1165 tdep->fpregs_present = has_fp;
1166 tdep->flavour = flavour;
1167
1168 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1169 long_double_format = floatformats_ieee_double;
1170 set_gdbarch_long_double_format (gdbarch, long_double_format);
1171 set_gdbarch_long_double_bit (gdbarch, long_double_format[0]->totalsize);
1172
1173 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
1174 set_gdbarch_breakpoint_from_pc (gdbarch, m68k_local_breakpoint_from_pc);
1175
1176 /* Stack grows down. */
1177 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1178 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
1179
1180 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
1181 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1182 set_gdbarch_decr_pc_after_break (gdbarch, 2);
1183
1184 set_gdbarch_frame_args_skip (gdbarch, 8);
1185 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
1186
1187 set_gdbarch_register_type (gdbarch, m68k_register_type);
1188 set_gdbarch_register_name (gdbarch, m68k_register_name);
1189 set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
1190 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
1191 set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1192 set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
1193 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1194 set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1195 set_gdbarch_register_to_value (gdbarch, m68k_register_to_value);
1196 set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
1197
1198 if (has_fp)
1199 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1200
1201 /* Try to figure out if the arch uses floating registers to return
1202 floating point values from functions. */
1203 if (has_fp)
1204 {
1205 /* On ColdFire, floating point values are returned in D0. */
1206 if (flavour == m68k_coldfire_flavour)
1207 tdep->float_return = 0;
1208 else
1209 tdep->float_return = 1;
1210 }
1211 else
1212 {
1213 /* No floating registers, so can't use them for returning values. */
1214 tdep->float_return = 0;
1215 }
1216
1217 /* Function call & return */
1218 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
1219 set_gdbarch_return_value (gdbarch, m68k_return_value);
1220
1221
1222 /* Disassembler. */
1223 set_gdbarch_print_insn (gdbarch, print_insn_m68k);
1224
1225 #if defined JB_PC && defined JB_ELEMENT_SIZE
1226 tdep->jb_pc = JB_PC;
1227 tdep->jb_elt_size = JB_ELEMENT_SIZE;
1228 #else
1229 tdep->jb_pc = -1;
1230 #endif
1231 tdep->struct_value_regnum = M68K_A1_REGNUM;
1232 tdep->struct_return = reg_struct_return;
1233
1234 /* Frame unwinder. */
1235 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
1236 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
1237
1238 /* Hook in the DWARF CFI frame unwinder. */
1239 dwarf2_append_unwinders (gdbarch);
1240
1241 frame_base_set_default (gdbarch, &m68k_frame_base);
1242
1243 /* Hook in ABI-specific overrides, if they have been registered. */
1244 gdbarch_init_osabi (info, gdbarch);
1245
1246 /* Now we have tuned the configuration, set a few final things,
1247 based on what the OS ABI has told us. */
1248
1249 if (tdep->jb_pc >= 0)
1250 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1251
1252 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
1253
1254 if (tdesc_data)
1255 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
1256
1257 return gdbarch;
1258 }
1259
1260
1261 static void
1262 m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
1263 {
1264 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1265
1266 if (tdep == NULL)
1267 return;
1268 }
1269
1270 extern initialize_file_ftype _initialize_m68k_tdep; /* -Wmissing-prototypes */
1271
1272 void
1273 _initialize_m68k_tdep (void)
1274 {
1275 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
1276 }