* defs.h (strlen_paddr, paddr, paddr_nz): Remove.
[deliverable/binutils-gdb.git] / gdb / m68k-tdep.c
CommitLineData
748894bf 1/* Target-dependent code for the Motorola 68000 series.
c6f0559b 2
6aba47ca 3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001,
0fb0cc75
JB
4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
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.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
3f244638 23#include "dwarf2-frame.h"
c906108c 24#include "frame.h"
8de307e0
AS
25#include "frame-base.h"
26#include "frame-unwind.h"
e6bb342a 27#include "gdbtypes.h"
c906108c
SS
28#include "symtab.h"
29#include "gdbcore.h"
30#include "value.h"
31#include "gdb_string.h"
8de307e0 32#include "gdb_assert.h"
7a292a7a 33#include "inferior.h"
4e052eda 34#include "regcache.h"
5d3ed2e3 35#include "arch-utils.h"
55809acb 36#include "osabi.h"
a89aa300 37#include "dis-asm.h"
8ed86d01 38#include "target-descriptions.h"
32eeb91a
AS
39
40#include "m68k-tdep.h"
c906108c 41\f
c5aa993b 42
89c3b6d3
PDM
43#define P_LINKL_FP 0x480e
44#define P_LINKW_FP 0x4e56
45#define P_PEA_FP 0x4856
8de307e0
AS
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
89c3b6d3 56
103a1597 57/* Offset from SP to first arg on stack at first instruction of a function */
103a1597
GS
58#define SP_ARG0 (1 * 4)
59
103a1597
GS
60#if !defined (BPT_VECTOR)
61#define BPT_VECTOR 0xf
62#endif
63
f5cf7aa1 64static const gdb_byte *
67d57894
MD
65m68k_local_breakpoint_from_pc (struct gdbarch *gdbarch,
66 CORE_ADDR *pcptr, int *lenptr)
103a1597 67{
f5cf7aa1 68 static gdb_byte break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
103a1597
GS
69 *lenptr = sizeof (break_insn);
70 return break_insn;
71}
4713453b
AS
72\f
73
4713453b 74/* Construct types for ISA-specific registers. */
209bd28e
UW
75static struct type *
76m68k_ps_type (struct gdbarch *gdbarch)
4713453b 77{
209bd28e
UW
78 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
79
80 if (!tdep->m68k_ps_type)
81 {
82 struct type *type;
83
e9bb382b 84 type = arch_flags_type (gdbarch, "builtin_type_m68k_ps", 4);
209bd28e
UW
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;
4713453b 102}
103a1597 103
27067745
UW
104static struct type *
105m68881_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
e9bb382b 111 = arch_float_type (gdbarch, -1, "builtin_type_m68881_ext",
27067745
UW
112 floatformats_m68881_ext);
113
114 return tdep->m68881_ext_type;
115}
116
d85fe7f7
AS
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. */
5d3ed2e3
GS
124
125static struct type *
8de307e0 126m68k_register_type (struct gdbarch *gdbarch, int regnum)
5d3ed2e3 127{
c984b7ff 128 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
03dac896 129
8ed86d01
VP
130 if (tdep->fpregs_present)
131 {
c984b7ff
UW
132 if (regnum >= gdbarch_fp0_regnum (gdbarch)
133 && regnum <= gdbarch_fp0_regnum (gdbarch) + 7)
8ed86d01
VP
134 {
135 if (tdep->flavour == m68k_coldfire_flavour)
136 return builtin_type (gdbarch)->builtin_double;
137 else
27067745 138 return m68881_ext_type (gdbarch);
8ed86d01
VP
139 }
140
141 if (regnum == M68K_FPI_REGNUM)
0dfff4cb 142 return builtin_type (gdbarch)->builtin_func_ptr;
8ed86d01
VP
143
144 if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM)
df4df182 145 return builtin_type (gdbarch)->builtin_int32;
8ed86d01
VP
146 }
147 else
148 {
149 if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM)
df4df182 150 return builtin_type (gdbarch)->builtin_int0;
8ed86d01 151 }
03dac896 152
c984b7ff 153 if (regnum == gdbarch_pc_regnum (gdbarch))
0dfff4cb 154 return builtin_type (gdbarch)->builtin_func_ptr;
03dac896 155
32eeb91a 156 if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
0dfff4cb 157 return builtin_type (gdbarch)->builtin_data_ptr;
03dac896 158
4713453b 159 if (regnum == M68K_PS_REGNUM)
209bd28e 160 return m68k_ps_type (gdbarch);
4713453b 161
df4df182 162 return builtin_type (gdbarch)->builtin_int32;
5d3ed2e3
GS
163}
164
8ed86d01 165static const char *m68k_register_names[] = {
5d3ed2e3
GS
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",
8ed86d01 170 "fpcontrol", "fpstatus", "fpiaddr"
5d3ed2e3
GS
171 };
172
8ed86d01
VP
173/* Function: m68k_register_name
174 Returns the name of the standard m68k register regnum. */
175
176static const char *
d93859e2 177m68k_register_name (struct gdbarch *gdbarch, int regnum)
8ed86d01
VP
178{
179 if (regnum < 0 || regnum >= ARRAY_SIZE (m68k_register_names))
5d3ed2e3 180 internal_error (__FILE__, __LINE__,
e2e0b3e5 181 _("m68k_register_name: illegal register number %d"), regnum);
5d3ed2e3 182 else
8ed86d01 183 return m68k_register_names[regnum];
5d3ed2e3 184}
e47577ab
MK
185\f
186/* Return nonzero if a value of type TYPE stored in register REGNUM
187 needs any special handling. */
188
189static int
0abe36f5 190m68k_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type)
e47577ab 191{
0abe36f5 192 if (!gdbarch_tdep (gdbarch)->fpregs_present)
8ed86d01 193 return 0;
83acabca 194 return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
27067745 195 && type != m68881_ext_type (gdbarch));
e47577ab
MK
196}
197
198/* Read a value of type TYPE from register REGNUM in frame FRAME, and
199 return its contents in TO. */
200
201static void
202m68k_register_to_value (struct frame_info *frame, int regnum,
f5cf7aa1 203 struct type *type, gdb_byte *to)
e47577ab 204{
f5cf7aa1 205 gdb_byte from[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
206 struct type *fpreg_type = register_type (get_frame_arch (frame),
207 M68K_FP0_REGNUM);
e47577ab
MK
208
209 /* We only support floating-point values. */
210 if (TYPE_CODE (type) != TYPE_CODE_FLT)
211 {
8a3fe4f8
AC
212 warning (_("Cannot convert floating-point register value "
213 "to non-floating-point type."));
e47577ab
MK
214 return;
215 }
216
83acabca 217 /* Convert to TYPE. */
e47577ab 218 get_frame_register (frame, regnum, from);
8ed86d01 219 convert_typed_floating (from, fpreg_type, to, type);
e47577ab
MK
220}
221
222/* Write the contents FROM of a value of type TYPE into register
223 REGNUM in frame FRAME. */
224
225static void
226m68k_value_to_register (struct frame_info *frame, int regnum,
f5cf7aa1 227 struct type *type, const gdb_byte *from)
e47577ab 228{
f5cf7aa1 229 gdb_byte to[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
230 struct type *fpreg_type = register_type (get_frame_arch (frame),
231 M68K_FP0_REGNUM);
e47577ab
MK
232
233 /* We only support floating-point values. */
234 if (TYPE_CODE (type) != TYPE_CODE_FLT)
235 {
8a3fe4f8
AC
236 warning (_("Cannot convert non-floating-point type "
237 "to floating-point register value."));
e47577ab
MK
238 return;
239 }
240
83acabca 241 /* Convert from TYPE. */
8ed86d01 242 convert_typed_floating (from, type, to, fpreg_type);
e47577ab
MK
243 put_frame_register (frame, regnum, to);
244}
245
8de307e0 246\f
f595cb19
MK
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
8de307e0 277 into VALBUF. */
942dc0e9
GS
278
279static void
8de307e0 280m68k_extract_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 281 gdb_byte *valbuf)
942dc0e9 282{
8de307e0 283 int len = TYPE_LENGTH (type);
f5cf7aa1 284 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
942dc0e9 285
8de307e0
AS
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);
f5cf7aa1 295 regcache_raw_read (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
8de307e0
AS
296 }
297 else
298 internal_error (__FILE__, __LINE__,
e2e0b3e5 299 _("Cannot extract return value of %d bytes long."), len);
942dc0e9
GS
300}
301
942dc0e9 302static void
f595cb19 303m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 304 gdb_byte *valbuf)
942dc0e9 305{
8de307e0 306 int len = TYPE_LENGTH (type);
f5cf7aa1 307 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
308 struct gdbarch *gdbarch = get_regcache_arch (regcache);
309 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
942dc0e9 310
8ed86d01 311 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
8de307e0 312 {
c984b7ff 313 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
f595cb19 314 regcache_raw_read (regcache, M68K_FP0_REGNUM, buf);
8ed86d01 315 convert_typed_floating (buf, fpreg_type, valbuf, type);
8de307e0 316 }
f595cb19
MK
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
325static void
326m68k_store_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 327 const gdb_byte *valbuf)
f595cb19
MK
328{
329 int len = TYPE_LENGTH (type);
942dc0e9 330
8de307e0
AS
331 if (len <= 4)
332 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 4 - len, len, valbuf);
333 else if (len <= 8)
334 {
f595cb19 335 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 8 - len,
8de307e0 336 len - 4, valbuf);
f5cf7aa1 337 regcache_raw_write (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
8de307e0
AS
338 }
339 else
340 internal_error (__FILE__, __LINE__,
e2e0b3e5 341 _("Cannot store return value of %d bytes long."), len);
8de307e0 342}
942dc0e9 343
f595cb19
MK
344static void
345m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 346 const gdb_byte *valbuf)
942dc0e9 347{
f595cb19 348 int len = TYPE_LENGTH (type);
c984b7ff
UW
349 struct gdbarch *gdbarch = get_regcache_arch (regcache);
350 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8de307e0 351
8ed86d01 352 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
f595cb19 353 {
c984b7ff 354 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
f5cf7aa1 355 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
8ed86d01 356 convert_typed_floating (valbuf, type, buf, fpreg_type);
f595cb19
MK
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);
942dc0e9
GS
366}
367
f595cb19
MK
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
c481dac7 372static int
f595cb19 373m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
c481dac7 374{
f595cb19
MK
375 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
376 enum type_code code = TYPE_CODE (type);
377 int len = TYPE_LENGTH (type);
c481dac7 378
f595cb19
MK
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);
c481dac7
AS
385}
386
f595cb19
MK
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
393static enum return_value_convention
c055b101
CV
394m68k_return_value (struct gdbarch *gdbarch, struct type *func_type,
395 struct type *type, struct regcache *regcache,
396 gdb_byte *readbuf, const gdb_byte *writebuf)
f595cb19
MK
397{
398 enum type_code code = TYPE_CODE (type);
399
1c845060
MK
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. */
f595cb19 408
1c845060
MK
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 }
f595cb19
MK
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
428static enum return_value_convention
c055b101
CV
429m68k_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)
f595cb19
MK
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))
51da707a
MK
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 }
f595cb19
MK
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));
c055b101 468 return m68k_svr4_return_value (gdbarch, func_type, type, regcache,
f595cb19
MK
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
392a587b 480
9bb47d95
NS
481/* Always align the frame to a 4-byte boundary. This is required on
482 coldfire and harmless on the rest. */
483
484static CORE_ADDR
485m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
486{
487 /* Align the stack to four bytes. */
488 return sp & ~3;
489}
490
8de307e0 491static CORE_ADDR
7d9b040b 492m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
8de307e0
AS
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)
7f8e7424 496{
f595cb19 497 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
f5cf7aa1 498 gdb_byte buf[4];
8de307e0
AS
499 int i;
500
501 /* Push arguments in reverse order. */
502 for (i = nargs - 1; i >= 0; i--)
503 {
4754a64e 504 struct type *value_type = value_enclosing_type (args[i]);
c481dac7 505 int len = TYPE_LENGTH (value_type);
8de307e0 506 int container_len = (len + 3) & ~3;
c481dac7
AS
507 int offset;
508
509 /* Non-scalars bigger than 4 bytes are left aligned, others are
510 right aligned. */
511 if ((TYPE_CODE (value_type) == TYPE_CODE_STRUCT
512 || TYPE_CODE (value_type) == TYPE_CODE_UNION
513 || TYPE_CODE (value_type) == TYPE_CODE_ARRAY)
514 && len > 4)
515 offset = 0;
516 else
517 offset = container_len - len;
8de307e0 518 sp -= container_len;
46615f07 519 write_memory (sp + offset, value_contents_all (args[i]), len);
8de307e0
AS
520 }
521
c481dac7 522 /* Store struct value address. */
8de307e0
AS
523 if (struct_return)
524 {
8de307e0 525 store_unsigned_integer (buf, 4, struct_addr);
f595cb19 526 regcache_cooked_write (regcache, tdep->struct_value_regnum, buf);
8de307e0
AS
527 }
528
529 /* Store return address. */
530 sp -= 4;
531 store_unsigned_integer (buf, 4, bp_addr);
532 write_memory (sp, buf, 4);
533
534 /* Finally, update the stack pointer... */
535 store_unsigned_integer (buf, 4, sp);
536 regcache_cooked_write (regcache, M68K_SP_REGNUM, buf);
537
538 /* ...and fake a frame pointer. */
539 regcache_cooked_write (regcache, M68K_FP_REGNUM, buf);
540
541 /* DWARF2/GCC uses the stack address *before* the function call as a
542 frame's CFA. */
543 return sp + 8;
7f8e7424 544}
6dd0fba6
NS
545
546/* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
547
548static int
d3f73121 549m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
6dd0fba6
NS
550{
551 if (num < 8)
552 /* d0..7 */
553 return (num - 0) + M68K_D0_REGNUM;
554 else if (num < 16)
555 /* a0..7 */
556 return (num - 8) + M68K_A0_REGNUM;
d3f73121 557 else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
6dd0fba6
NS
558 /* fp0..7 */
559 return (num - 16) + M68K_FP0_REGNUM;
560 else if (num == 25)
561 /* pc */
562 return M68K_PC_REGNUM;
563 else
d3f73121 564 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
6dd0fba6
NS
565}
566
8de307e0
AS
567\f
568struct m68k_frame_cache
569{
570 /* Base address. */
571 CORE_ADDR base;
572 CORE_ADDR sp_offset;
573 CORE_ADDR pc;
7f8e7424 574
8de307e0
AS
575 /* Saved registers. */
576 CORE_ADDR saved_regs[M68K_NUM_REGS];
577 CORE_ADDR saved_sp;
7f8e7424 578
8de307e0
AS
579 /* Stack space reserved for local variables. */
580 long locals;
581};
c906108c 582
8de307e0
AS
583/* Allocate and initialize a frame cache. */
584
585static struct m68k_frame_cache *
586m68k_alloc_frame_cache (void)
c906108c 587{
8de307e0
AS
588 struct m68k_frame_cache *cache;
589 int i;
c906108c 590
8de307e0 591 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
c906108c 592
8de307e0
AS
593 /* Base address. */
594 cache->base = 0;
595 cache->sp_offset = -4;
596 cache->pc = 0;
c906108c 597
8de307e0
AS
598 /* Saved registers. We initialize these to -1 since zero is a valid
599 offset (that's where %fp is supposed to be stored). */
600 for (i = 0; i < M68K_NUM_REGS; i++)
601 cache->saved_regs[i] = -1;
602
603 /* Frameless until proven otherwise. */
604 cache->locals = -1;
605
606 return cache;
c906108c
SS
607}
608
8de307e0
AS
609/* Check whether PC points at a code that sets up a new stack frame.
610 If so, it updates CACHE and returns the address of the first
611 instruction after the sequence that sets removes the "hidden"
612 argument from the stack or CURRENT_PC, whichever is smaller.
613 Otherwise, return PC. */
c906108c 614
8de307e0
AS
615static CORE_ADDR
616m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc,
617 struct m68k_frame_cache *cache)
c906108c 618{
8de307e0
AS
619 int op;
620
621 if (pc >= current_pc)
622 return current_pc;
c906108c 623
8de307e0
AS
624 op = read_memory_unsigned_integer (pc, 2);
625
626 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
c906108c 627 {
8de307e0
AS
628 cache->saved_regs[M68K_FP_REGNUM] = 0;
629 cache->sp_offset += 4;
630 if (op == P_LINKW_FP)
631 {
632 /* link.w %fp, #-N */
633 /* link.w %fp, #0; adda.l #-N, %sp */
634 cache->locals = -read_memory_integer (pc + 2, 2);
635
636 if (pc + 4 < current_pc && cache->locals == 0)
637 {
638 op = read_memory_unsigned_integer (pc + 4, 2);
639 if (op == P_ADDAL_SP)
640 {
641 cache->locals = read_memory_integer (pc + 6, 4);
642 return pc + 10;
643 }
644 }
645
646 return pc + 4;
647 }
648 else if (op == P_LINKL_FP)
c906108c 649 {
8de307e0
AS
650 /* link.l %fp, #-N */
651 cache->locals = -read_memory_integer (pc + 2, 4);
652 return pc + 6;
653 }
654 else
655 {
656 /* pea (%fp); movea.l %sp, %fp */
657 cache->locals = 0;
658
659 if (pc + 2 < current_pc)
660 {
661 op = read_memory_unsigned_integer (pc + 2, 2);
662
663 if (op == P_MOVEAL_SP_FP)
664 {
665 /* move.l %sp, %fp */
666 return pc + 4;
667 }
668 }
669
670 return pc + 2;
c906108c
SS
671 }
672 }
8de307e0 673 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
c906108c 674 {
8de307e0
AS
675 /* subq.[wl] #N,%sp */
676 /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
677 cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
678 if (pc + 2 < current_pc)
c906108c 679 {
8de307e0
AS
680 op = read_memory_unsigned_integer (pc + 2, 2);
681 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
682 {
683 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
684 return pc + 4;
685 }
c906108c 686 }
8de307e0
AS
687 return pc + 2;
688 }
689 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
690 {
691 /* adda.w #-N,%sp */
692 /* lea (-N,%sp),%sp */
693 cache->locals = -read_memory_integer (pc + 2, 2);
694 return pc + 4;
c906108c 695 }
8de307e0 696 else if (op == P_ADDAL_SP)
c906108c 697 {
8de307e0
AS
698 /* adda.l #-N,%sp */
699 cache->locals = -read_memory_integer (pc + 2, 4);
700 return pc + 6;
c906108c 701 }
8de307e0
AS
702
703 return pc;
c906108c 704}
c5aa993b 705
8de307e0
AS
706/* Check whether PC points at code that saves registers on the stack.
707 If so, it updates CACHE and returns the address of the first
708 instruction after the register saves or CURRENT_PC, whichever is
709 smaller. Otherwise, return PC. */
c906108c 710
8de307e0 711static CORE_ADDR
be8626e0
MD
712m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
713 CORE_ADDR current_pc,
8de307e0
AS
714 struct m68k_frame_cache *cache)
715{
716 if (cache->locals >= 0)
717 {
718 CORE_ADDR offset;
719 int op;
720 int i, mask, regno;
c906108c 721
8de307e0
AS
722 offset = -4 - cache->locals;
723 while (pc < current_pc)
724 {
725 op = read_memory_unsigned_integer (pc, 2);
8ed86d01 726 if (op == P_FMOVEMX_SP
be8626e0 727 && gdbarch_tdep (gdbarch)->fpregs_present)
8de307e0
AS
728 {
729 /* fmovem.x REGS,-(%sp) */
730 op = read_memory_unsigned_integer (pc + 2, 2);
731 if ((op & 0xff00) == 0xe000)
732 {
733 mask = op & 0xff;
734 for (i = 0; i < 16; i++, mask >>= 1)
735 {
736 if (mask & 1)
737 {
738 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
739 offset -= 12;
740 }
741 }
742 pc += 4;
743 }
744 else
745 break;
746 }
0ba5a932 747 else if ((op & 0177760) == P_MOVEL_SP)
8de307e0
AS
748 {
749 /* move.l %R,-(%sp) */
0ba5a932 750 regno = op & 017;
8de307e0
AS
751 cache->saved_regs[regno] = offset;
752 offset -= 4;
753 pc += 2;
754 }
755 else if (op == P_MOVEML_SP)
756 {
757 /* movem.l REGS,-(%sp) */
758 mask = read_memory_unsigned_integer (pc + 2, 2);
759 for (i = 0; i < 16; i++, mask >>= 1)
760 {
761 if (mask & 1)
762 {
763 cache->saved_regs[15 - i] = offset;
764 offset -= 4;
765 }
766 }
767 pc += 4;
768 }
769 else
770 break;
771 }
772 }
773
774 return pc;
775}
c906108c 776
c906108c 777
8de307e0
AS
778/* Do a full analysis of the prologue at PC and update CACHE
779 accordingly. Bail out early if CURRENT_PC is reached. Return the
780 address where the analysis stopped.
c906108c 781
8de307e0 782 We handle all cases that can be generated by gcc.
c906108c 783
8de307e0 784 For allocating a stack frame:
c906108c 785
8de307e0
AS
786 link.w %a6,#-N
787 link.l %a6,#-N
788 pea (%fp); move.l %sp,%fp
789 link.w %a6,#0; add.l #-N,%sp
790 subq.l #N,%sp
791 subq.w #N,%sp
792 subq.w #8,%sp; subq.w #N-8,%sp
793 add.w #-N,%sp
794 lea (-N,%sp),%sp
795 add.l #-N,%sp
c906108c 796
8de307e0 797 For saving registers:
c906108c 798
8de307e0
AS
799 fmovem.x REGS,-(%sp)
800 move.l R1,-(%sp)
801 move.l R1,-(%sp); move.l R2,-(%sp)
802 movem.l REGS,-(%sp)
c906108c 803
8de307e0 804 For setting up the PIC register:
c906108c 805
8de307e0 806 lea (%pc,N),%a5
c906108c 807
8de307e0 808 */
c906108c 809
eb2e12d7 810static CORE_ADDR
be8626e0
MD
811m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
812 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
c906108c 813{
8de307e0 814 unsigned int op;
c906108c 815
8de307e0 816 pc = m68k_analyze_frame_setup (pc, current_pc, cache);
be8626e0 817 pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
8de307e0
AS
818 if (pc >= current_pc)
819 return current_pc;
c906108c 820
8de307e0
AS
821 /* Check for GOT setup. */
822 op = read_memory_unsigned_integer (pc, 4);
823 if (op == P_LEA_PC_A5)
c906108c 824 {
8de307e0 825 /* lea (%pc,N),%a5 */
e4d8bc08 826 return pc + 8;
c906108c 827 }
8de307e0
AS
828
829 return pc;
c906108c
SS
830}
831
8de307e0 832/* Return PC of first real instruction. */
7f8e7424 833
8de307e0 834static CORE_ADDR
6093d2eb 835m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
c906108c 836{
8de307e0
AS
837 struct m68k_frame_cache cache;
838 CORE_ADDR pc;
839 int op;
c906108c 840
8de307e0 841 cache.locals = -1;
be8626e0 842 pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
8de307e0
AS
843 if (cache.locals < 0)
844 return start_pc;
845 return pc;
846}
c906108c 847
8de307e0
AS
848static CORE_ADDR
849m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
850{
f5cf7aa1 851 gdb_byte buf[8];
7f8e7424 852
c984b7ff 853 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
0dfff4cb 854 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
8de307e0
AS
855}
856\f
857/* Normal frames. */
7f8e7424 858
8de307e0 859static struct m68k_frame_cache *
f36bf22c 860m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
8de307e0
AS
861{
862 struct m68k_frame_cache *cache;
f5cf7aa1 863 gdb_byte buf[4];
8de307e0
AS
864 int i;
865
866 if (*this_cache)
867 return *this_cache;
868
869 cache = m68k_alloc_frame_cache ();
870 *this_cache = cache;
871
872 /* In principle, for normal frames, %fp holds the frame pointer,
873 which holds the base address for the current stack frame.
874 However, for functions that don't need it, the frame pointer is
875 optional. For these "frameless" functions the frame pointer is
876 actually the frame pointer of the calling frame. Signal
877 trampolines are just a special case of a "frameless" function.
878 They (usually) share their frame pointer with the frame that was
879 in progress when the signal occurred. */
880
f36bf22c 881 get_frame_register (this_frame, M68K_FP_REGNUM, buf);
8de307e0
AS
882 cache->base = extract_unsigned_integer (buf, 4);
883 if (cache->base == 0)
884 return cache;
885
886 /* For normal frames, %pc is stored at 4(%fp). */
887 cache->saved_regs[M68K_PC_REGNUM] = 4;
888
f36bf22c 889 cache->pc = get_frame_func (this_frame);
8de307e0 890 if (cache->pc != 0)
f36bf22c
AS
891 m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
892 get_frame_pc (this_frame), cache);
8de307e0
AS
893
894 if (cache->locals < 0)
895 {
896 /* We didn't find a valid frame, which means that CACHE->base
897 currently holds the frame pointer for our calling frame. If
898 we're at the start of a function, or somewhere half-way its
899 prologue, the function's frame probably hasn't been fully
900 setup yet. Try to reconstruct the base address for the stack
901 frame by looking at the stack pointer. For truly "frameless"
902 functions this might work too. */
903
f36bf22c 904 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
8de307e0
AS
905 cache->base = extract_unsigned_integer (buf, 4) + cache->sp_offset;
906 }
7f8e7424 907
8de307e0
AS
908 /* Now that we have the base address for the stack frame we can
909 calculate the value of %sp in the calling frame. */
910 cache->saved_sp = cache->base + 8;
7f8e7424 911
8de307e0
AS
912 /* Adjust all the saved registers such that they contain addresses
913 instead of offsets. */
914 for (i = 0; i < M68K_NUM_REGS; i++)
915 if (cache->saved_regs[i] != -1)
916 cache->saved_regs[i] += cache->base;
c906108c 917
8de307e0
AS
918 return cache;
919}
c906108c 920
8de307e0 921static void
f36bf22c 922m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
8de307e0
AS
923 struct frame_id *this_id)
924{
f36bf22c 925 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
c906108c 926
8de307e0
AS
927 /* This marks the outermost frame. */
928 if (cache->base == 0)
929 return;
c5aa993b 930
8de307e0
AS
931 /* See the end of m68k_push_dummy_call. */
932 *this_id = frame_id_build (cache->base + 8, cache->pc);
933}
c5aa993b 934
f36bf22c
AS
935static struct value *
936m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
937 int regnum)
8de307e0 938{
f36bf22c 939 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
940
941 gdb_assert (regnum >= 0);
942
943 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
f36bf22c 944 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
8de307e0
AS
945
946 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
f36bf22c
AS
947 return frame_unwind_got_memory (this_frame, regnum,
948 cache->saved_regs[regnum]);
8de307e0 949
f36bf22c 950 return frame_unwind_got_register (this_frame, regnum, regnum);
8de307e0
AS
951}
952
953static const struct frame_unwind m68k_frame_unwind =
954{
955 NORMAL_FRAME,
956 m68k_frame_this_id,
f36bf22c
AS
957 m68k_frame_prev_register,
958 NULL,
959 default_frame_sniffer
8de307e0 960};
8de307e0 961\f
8de307e0 962static CORE_ADDR
f36bf22c 963m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
8de307e0 964{
f36bf22c 965 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
966
967 return cache->base;
968}
969
970static const struct frame_base m68k_frame_base =
971{
972 &m68k_frame_unwind,
973 m68k_frame_base_address,
974 m68k_frame_base_address,
975 m68k_frame_base_address
976};
977
978static struct frame_id
f36bf22c 979m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
8de307e0 980{
8de307e0 981 CORE_ADDR fp;
c906108c 982
f36bf22c 983 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
c906108c 984
8de307e0 985 /* See the end of m68k_push_dummy_call. */
f36bf22c 986 return frame_id_build (fp + 8, get_frame_pc (this_frame));
8de307e0
AS
987}
988\f
c906108c 989
c906108c
SS
990/* Figure out where the longjmp will land. Slurp the args out of the stack.
991 We expect the first arg to be a pointer to the jmp_buf structure from which
992 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
993 This routine returns true on success. */
994
c34d127c 995static int
60ade65d 996m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
c906108c 997{
f5cf7aa1 998 gdb_byte *buf;
c906108c 999 CORE_ADDR sp, jb_addr;
c984b7ff 1000 struct gdbarch *gdbarch = get_frame_arch (frame);
60ade65d 1001 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame));
eb2e12d7
AS
1002
1003 if (tdep->jb_pc < 0)
1004 {
1005 internal_error (__FILE__, __LINE__,
e2e0b3e5 1006 _("m68k_get_longjmp_target: not implemented"));
eb2e12d7
AS
1007 return 0;
1008 }
c906108c 1009
c984b7ff
UW
1010 buf = alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1011 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
c906108c 1012
b5d78d39 1013 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack */
c984b7ff 1014 buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
c906108c
SS
1015 return 0;
1016
c984b7ff 1017 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
819844ad 1018 / TARGET_CHAR_BIT);
c906108c 1019
eb2e12d7 1020 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
c984b7ff 1021 gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
c906108c
SS
1022 return 0;
1023
c984b7ff 1024 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
819844ad 1025 / TARGET_CHAR_BIT);
c906108c
SS
1026 return 1;
1027}
f595cb19
MK
1028\f
1029
1030/* System V Release 4 (SVR4). */
1031
1032void
1033m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1034{
1035 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1036
1037 /* SVR4 uses a different calling convention. */
1038 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1039
1040 /* SVR4 uses %a0 instead of %a1. */
1041 tdep->struct_value_regnum = M68K_A0_REGNUM;
1042}
1043\f
c906108c 1044
152d9db6
GS
1045/* Function: m68k_gdbarch_init
1046 Initializer function for the m68k gdbarch vector.
1047 Called by gdbarch. Sets up the gdbarch vector(s) for this target. */
1048
1049static struct gdbarch *
1050m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1051{
1052 struct gdbarch_tdep *tdep = NULL;
1053 struct gdbarch *gdbarch;
8ed86d01
VP
1054 struct gdbarch_list *best_arch;
1055 struct tdesc_arch_data *tdesc_data = NULL;
1056 int i;
1057 enum m68k_flavour flavour = m68k_no_flavour;
1058 int has_fp = 1;
1059 const struct floatformat **long_double_format = floatformats_m68881_ext;
1060
1061 /* Check any target description for validity. */
1062 if (tdesc_has_registers (info.target_desc))
1063 {
1064 const struct tdesc_feature *feature;
1065 int valid_p;
152d9db6 1066
8ed86d01
VP
1067 feature = tdesc_find_feature (info.target_desc,
1068 "org.gnu.gdb.m68k.core");
1069 if (feature != NULL)
1070 /* Do nothing. */
1071 ;
1072
1073 if (feature == NULL)
1074 {
1075 feature = tdesc_find_feature (info.target_desc,
1076 "org.gnu.gdb.coldfire.core");
1077 if (feature != NULL)
1078 flavour = m68k_coldfire_flavour;
1079 }
1080
1081 if (feature == NULL)
1082 {
1083 feature = tdesc_find_feature (info.target_desc,
1084 "org.gnu.gdb.fido.core");
1085 if (feature != NULL)
1086 flavour = m68k_fido_flavour;
1087 }
1088
1089 if (feature == NULL)
1090 return NULL;
1091
1092 tdesc_data = tdesc_data_alloc ();
1093
1094 valid_p = 1;
1095 for (i = 0; i <= M68K_PC_REGNUM; i++)
1096 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1097 m68k_register_names[i]);
1098
1099 if (!valid_p)
1100 {
1101 tdesc_data_cleanup (tdesc_data);
1102 return NULL;
1103 }
1104
1105 feature = tdesc_find_feature (info.target_desc,
1106 "org.gnu.gdb.coldfire.fp");
1107 if (feature != NULL)
1108 {
1109 valid_p = 1;
1110 for (i = M68K_FP0_REGNUM; i <= M68K_FPI_REGNUM; i++)
1111 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1112 m68k_register_names[i]);
1113 if (!valid_p)
1114 {
1115 tdesc_data_cleanup (tdesc_data);
1116 return NULL;
1117 }
1118 }
1119 else
1120 has_fp = 0;
1121 }
1122
1123 /* The mechanism for returning floating values from function
1124 and the type of long double depend on whether we're
1125 on ColdFire or standard m68k. */
1126
4ed77933 1127 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
8ed86d01
VP
1128 {
1129 const bfd_arch_info_type *coldfire_arch =
1130 bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1131
1132 if (coldfire_arch
4ed77933
AS
1133 && ((*info.bfd_arch_info->compatible)
1134 (info.bfd_arch_info, coldfire_arch)))
8ed86d01
VP
1135 flavour = m68k_coldfire_flavour;
1136 }
1137
1138 /* If there is already a candidate, use it. */
1139 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1140 best_arch != NULL;
1141 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1142 {
1143 if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1144 continue;
1145
1146 if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1147 continue;
1148
1149 break;
1150 }
152d9db6 1151
eb2e12d7
AS
1152 tdep = xmalloc (sizeof (struct gdbarch_tdep));
1153 gdbarch = gdbarch_alloc (&info, tdep);
8ed86d01
VP
1154 tdep->fpregs_present = has_fp;
1155 tdep->flavour = flavour;
152d9db6 1156
8ed86d01
VP
1157 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1158 long_double_format = floatformats_ieee_double;
1159 set_gdbarch_long_double_format (gdbarch, long_double_format);
1160 set_gdbarch_long_double_bit (gdbarch, long_double_format[0]->totalsize);
5d3ed2e3 1161
5d3ed2e3 1162 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
103a1597 1163 set_gdbarch_breakpoint_from_pc (gdbarch, m68k_local_breakpoint_from_pc);
5d3ed2e3
GS
1164
1165 /* Stack grows down. */
1166 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9bb47d95 1167 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
6300c360
GS
1168
1169 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
8ed86d01
VP
1170 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1171 set_gdbarch_decr_pc_after_break (gdbarch, 2);
942dc0e9 1172
6300c360 1173 set_gdbarch_frame_args_skip (gdbarch, 8);
6dd0fba6 1174 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
942dc0e9 1175
8de307e0 1176 set_gdbarch_register_type (gdbarch, m68k_register_type);
5d3ed2e3 1177 set_gdbarch_register_name (gdbarch, m68k_register_name);
6dd0fba6 1178 set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
32eeb91a 1179 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
32eeb91a
AS
1180 set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1181 set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
1182 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
e47577ab
MK
1183 set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1184 set_gdbarch_register_to_value (gdbarch, m68k_register_to_value);
1185 set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
a2c6a6d5 1186
8ed86d01
VP
1187 if (has_fp)
1188 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1189
1190 /* Try to figure out if the arch uses floating registers to return
1191 floating point values from functions. */
1192 if (has_fp)
1193 {
1194 /* On ColdFire, floating point values are returned in D0. */
1195 if (flavour == m68k_coldfire_flavour)
1196 tdep->float_return = 0;
1197 else
1198 tdep->float_return = 1;
1199 }
1200 else
1201 {
1202 /* No floating registers, so can't use them for returning values. */
1203 tdep->float_return = 0;
1204 }
1205
1206 /* Function call & return */
8de307e0 1207 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
f595cb19 1208 set_gdbarch_return_value (gdbarch, m68k_return_value);
6c0e89ed 1209
8ed86d01 1210
650fcc91
AS
1211 /* Disassembler. */
1212 set_gdbarch_print_insn (gdbarch, print_insn_m68k);
1213
eb2e12d7
AS
1214#if defined JB_PC && defined JB_ELEMENT_SIZE
1215 tdep->jb_pc = JB_PC;
1216 tdep->jb_elt_size = JB_ELEMENT_SIZE;
1217#else
1218 tdep->jb_pc = -1;
1219#endif
f595cb19 1220 tdep->struct_value_regnum = M68K_A1_REGNUM;
66894781 1221 tdep->struct_return = reg_struct_return;
8de307e0
AS
1222
1223 /* Frame unwinder. */
f36bf22c 1224 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
8de307e0 1225 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
3f244638
AS
1226
1227 /* Hook in the DWARF CFI frame unwinder. */
f36bf22c 1228 dwarf2_append_unwinders (gdbarch);
3f244638 1229
8de307e0 1230 frame_base_set_default (gdbarch, &m68k_frame_base);
eb2e12d7 1231
55809acb
AS
1232 /* Hook in ABI-specific overrides, if they have been registered. */
1233 gdbarch_init_osabi (info, gdbarch);
1234
eb2e12d7
AS
1235 /* Now we have tuned the configuration, set a few final things,
1236 based on what the OS ABI has told us. */
1237
1238 if (tdep->jb_pc >= 0)
1239 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1240
f36bf22c 1241 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
8de307e0 1242
8ed86d01 1243 if (tdesc_data)
7cc46491 1244 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
8ed86d01 1245
152d9db6
GS
1246 return gdbarch;
1247}
1248
1249
1250static void
c984b7ff 1251m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
152d9db6 1252{
c984b7ff 1253 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
152d9db6 1254
eb2e12d7
AS
1255 if (tdep == NULL)
1256 return;
152d9db6 1257}
2acceee2 1258
a78f21af
AC
1259extern initialize_file_ftype _initialize_m68k_tdep; /* -Wmissing-prototypes */
1260
c906108c 1261void
fba45db2 1262_initialize_m68k_tdep (void)
c906108c 1263{
152d9db6 1264 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
c906108c 1265}
This page took 0.800679 seconds and 4 git commands to generate.