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