*** empty log message ***
[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);
e17a4113 498 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
f5cf7aa1 499 gdb_byte buf[4];
8de307e0
AS
500 int i;
501
502 /* Push arguments in reverse order. */
503 for (i = nargs - 1; i >= 0; i--)
504 {
4754a64e 505 struct type *value_type = value_enclosing_type (args[i]);
c481dac7 506 int len = TYPE_LENGTH (value_type);
8de307e0 507 int container_len = (len + 3) & ~3;
c481dac7
AS
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;
8de307e0 519 sp -= container_len;
46615f07 520 write_memory (sp + offset, value_contents_all (args[i]), len);
8de307e0
AS
521 }
522
c481dac7 523 /* Store struct value address. */
8de307e0
AS
524 if (struct_return)
525 {
e17a4113 526 store_unsigned_integer (buf, 4, byte_order, struct_addr);
f595cb19 527 regcache_cooked_write (regcache, tdep->struct_value_regnum, buf);
8de307e0
AS
528 }
529
530 /* Store return address. */
531 sp -= 4;
e17a4113 532 store_unsigned_integer (buf, 4, byte_order, bp_addr);
8de307e0
AS
533 write_memory (sp, buf, 4);
534
535 /* Finally, update the stack pointer... */
e17a4113 536 store_unsigned_integer (buf, 4, byte_order, sp);
8de307e0
AS
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;
7f8e7424 545}
6dd0fba6
NS
546
547/* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
548
549static int
d3f73121 550m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
6dd0fba6
NS
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;
d3f73121 558 else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
6dd0fba6
NS
559 /* fp0..7 */
560 return (num - 16) + M68K_FP0_REGNUM;
561 else if (num == 25)
562 /* pc */
563 return M68K_PC_REGNUM;
564 else
d3f73121 565 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
6dd0fba6
NS
566}
567
8de307e0
AS
568\f
569struct m68k_frame_cache
570{
571 /* Base address. */
572 CORE_ADDR base;
573 CORE_ADDR sp_offset;
574 CORE_ADDR pc;
7f8e7424 575
8de307e0
AS
576 /* Saved registers. */
577 CORE_ADDR saved_regs[M68K_NUM_REGS];
578 CORE_ADDR saved_sp;
7f8e7424 579
8de307e0
AS
580 /* Stack space reserved for local variables. */
581 long locals;
582};
c906108c 583
8de307e0
AS
584/* Allocate and initialize a frame cache. */
585
586static struct m68k_frame_cache *
587m68k_alloc_frame_cache (void)
c906108c 588{
8de307e0
AS
589 struct m68k_frame_cache *cache;
590 int i;
c906108c 591
8de307e0 592 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
c906108c 593
8de307e0
AS
594 /* Base address. */
595 cache->base = 0;
596 cache->sp_offset = -4;
597 cache->pc = 0;
c906108c 598
8de307e0
AS
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;
c906108c
SS
608}
609
8de307e0
AS
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. */
c906108c 615
8de307e0 616static CORE_ADDR
e17a4113
UW
617m68k_analyze_frame_setup (struct gdbarch *gdbarch,
618 CORE_ADDR pc, CORE_ADDR current_pc,
8de307e0 619 struct m68k_frame_cache *cache)
c906108c 620{
e17a4113 621 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0
AS
622 int op;
623
624 if (pc >= current_pc)
625 return current_pc;
c906108c 626
e17a4113 627 op = read_memory_unsigned_integer (pc, 2, byte_order);
8de307e0
AS
628
629 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
c906108c 630 {
8de307e0
AS
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 */
e17a4113 637 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
8de307e0
AS
638
639 if (pc + 4 < current_pc && cache->locals == 0)
640 {
e17a4113 641 op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
8de307e0
AS
642 if (op == P_ADDAL_SP)
643 {
e17a4113 644 cache->locals = read_memory_integer (pc + 6, 4, byte_order);
8de307e0
AS
645 return pc + 10;
646 }
647 }
648
649 return pc + 4;
650 }
651 else if (op == P_LINKL_FP)
c906108c 652 {
8de307e0 653 /* link.l %fp, #-N */
e17a4113 654 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
8de307e0
AS
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 {
e17a4113 664 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
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;
c906108c
SS
674 }
675 }
8de307e0 676 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
c906108c 677 {
8de307e0
AS
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)
c906108c 682 {
e17a4113 683 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
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 }
c906108c 689 }
8de307e0
AS
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 */
e17a4113 696 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
8de307e0 697 return pc + 4;
c906108c 698 }
8de307e0 699 else if (op == P_ADDAL_SP)
c906108c 700 {
8de307e0 701 /* adda.l #-N,%sp */
e17a4113 702 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
8de307e0 703 return pc + 6;
c906108c 704 }
8de307e0
AS
705
706 return pc;
c906108c 707}
c5aa993b 708
8de307e0
AS
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. */
c906108c 713
8de307e0 714static CORE_ADDR
be8626e0
MD
715m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
716 CORE_ADDR current_pc,
8de307e0
AS
717 struct m68k_frame_cache *cache)
718{
e17a4113
UW
719 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
720
8de307e0
AS
721 if (cache->locals >= 0)
722 {
723 CORE_ADDR offset;
724 int op;
725 int i, mask, regno;
c906108c 726
8de307e0
AS
727 offset = -4 - cache->locals;
728 while (pc < current_pc)
729 {
e17a4113 730 op = read_memory_unsigned_integer (pc, 2, byte_order);
8ed86d01 731 if (op == P_FMOVEMX_SP
be8626e0 732 && gdbarch_tdep (gdbarch)->fpregs_present)
8de307e0
AS
733 {
734 /* fmovem.x REGS,-(%sp) */
e17a4113 735 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
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 }
0ba5a932 752 else if ((op & 0177760) == P_MOVEL_SP)
8de307e0
AS
753 {
754 /* move.l %R,-(%sp) */
0ba5a932 755 regno = op & 017;
8de307e0
AS
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) */
e17a4113 763 mask = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
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}
c906108c 781
c906108c 782
8de307e0
AS
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.
c906108c 786
8de307e0 787 We handle all cases that can be generated by gcc.
c906108c 788
8de307e0 789 For allocating a stack frame:
c906108c 790
8de307e0
AS
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
c906108c 801
8de307e0 802 For saving registers:
c906108c 803
8de307e0
AS
804 fmovem.x REGS,-(%sp)
805 move.l R1,-(%sp)
806 move.l R1,-(%sp); move.l R2,-(%sp)
807 movem.l REGS,-(%sp)
c906108c 808
8de307e0 809 For setting up the PIC register:
c906108c 810
8de307e0 811 lea (%pc,N),%a5
c906108c 812
8de307e0 813 */
c906108c 814
eb2e12d7 815static CORE_ADDR
be8626e0
MD
816m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
817 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
c906108c 818{
e17a4113 819 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0 820 unsigned int op;
c906108c 821
e17a4113 822 pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache);
be8626e0 823 pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
8de307e0
AS
824 if (pc >= current_pc)
825 return current_pc;
c906108c 826
8de307e0 827 /* Check for GOT setup. */
e17a4113 828 op = read_memory_unsigned_integer (pc, 4, byte_order);
8de307e0 829 if (op == P_LEA_PC_A5)
c906108c 830 {
8de307e0 831 /* lea (%pc,N),%a5 */
e4d8bc08 832 return pc + 8;
c906108c 833 }
8de307e0
AS
834
835 return pc;
c906108c
SS
836}
837
8de307e0 838/* Return PC of first real instruction. */
7f8e7424 839
8de307e0 840static CORE_ADDR
6093d2eb 841m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
c906108c 842{
8de307e0
AS
843 struct m68k_frame_cache cache;
844 CORE_ADDR pc;
845 int op;
c906108c 846
8de307e0 847 cache.locals = -1;
be8626e0 848 pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
8de307e0
AS
849 if (cache.locals < 0)
850 return start_pc;
851 return pc;
852}
c906108c 853
8de307e0
AS
854static CORE_ADDR
855m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
856{
f5cf7aa1 857 gdb_byte buf[8];
7f8e7424 858
c984b7ff 859 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
0dfff4cb 860 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
8de307e0
AS
861}
862\f
863/* Normal frames. */
7f8e7424 864
8de307e0 865static struct m68k_frame_cache *
f36bf22c 866m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
8de307e0 867{
e17a4113
UW
868 struct gdbarch *gdbarch = get_frame_arch (this_frame);
869 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0 870 struct m68k_frame_cache *cache;
f5cf7aa1 871 gdb_byte buf[4];
8de307e0
AS
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
f36bf22c 889 get_frame_register (this_frame, M68K_FP_REGNUM, buf);
e17a4113 890 cache->base = extract_unsigned_integer (buf, 4, byte_order);
8de307e0
AS
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
f36bf22c 897 cache->pc = get_frame_func (this_frame);
8de307e0 898 if (cache->pc != 0)
f36bf22c
AS
899 m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
900 get_frame_pc (this_frame), cache);
8de307e0
AS
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
f36bf22c 912 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
e17a4113
UW
913 cache->base = extract_unsigned_integer (buf, 4, byte_order)
914 + cache->sp_offset;
8de307e0 915 }
7f8e7424 916
8de307e0
AS
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;
7f8e7424 920
8de307e0
AS
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;
c906108c 926
8de307e0
AS
927 return cache;
928}
c906108c 929
8de307e0 930static void
f36bf22c 931m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
8de307e0
AS
932 struct frame_id *this_id)
933{
f36bf22c 934 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
c906108c 935
8de307e0
AS
936 /* This marks the outermost frame. */
937 if (cache->base == 0)
938 return;
c5aa993b 939
8de307e0
AS
940 /* See the end of m68k_push_dummy_call. */
941 *this_id = frame_id_build (cache->base + 8, cache->pc);
942}
c5aa993b 943
f36bf22c
AS
944static struct value *
945m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
946 int regnum)
8de307e0 947{
f36bf22c 948 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
949
950 gdb_assert (regnum >= 0);
951
952 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
f36bf22c 953 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
8de307e0
AS
954
955 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
f36bf22c
AS
956 return frame_unwind_got_memory (this_frame, regnum,
957 cache->saved_regs[regnum]);
8de307e0 958
f36bf22c 959 return frame_unwind_got_register (this_frame, regnum, regnum);
8de307e0
AS
960}
961
962static const struct frame_unwind m68k_frame_unwind =
963{
964 NORMAL_FRAME,
965 m68k_frame_this_id,
f36bf22c
AS
966 m68k_frame_prev_register,
967 NULL,
968 default_frame_sniffer
8de307e0 969};
8de307e0 970\f
8de307e0 971static CORE_ADDR
f36bf22c 972m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
8de307e0 973{
f36bf22c 974 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
975
976 return cache->base;
977}
978
979static 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
987static struct frame_id
f36bf22c 988m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
8de307e0 989{
8de307e0 990 CORE_ADDR fp;
c906108c 991
f36bf22c 992 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
c906108c 993
8de307e0 994 /* See the end of m68k_push_dummy_call. */
f36bf22c 995 return frame_id_build (fp + 8, get_frame_pc (this_frame));
8de307e0
AS
996}
997\f
c906108c 998
c906108c
SS
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
c34d127c 1004static int
60ade65d 1005m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
c906108c 1006{
f5cf7aa1 1007 gdb_byte *buf;
c906108c 1008 CORE_ADDR sp, jb_addr;
c984b7ff 1009 struct gdbarch *gdbarch = get_frame_arch (frame);
e17a4113
UW
1010 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1011 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
eb2e12d7
AS
1012
1013 if (tdep->jb_pc < 0)
1014 {
1015 internal_error (__FILE__, __LINE__,
e2e0b3e5 1016 _("m68k_get_longjmp_target: not implemented"));
eb2e12d7
AS
1017 return 0;
1018 }
c906108c 1019
c984b7ff
UW
1020 buf = alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1021 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
c906108c 1022
b5d78d39 1023 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack */
c984b7ff 1024 buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
c906108c
SS
1025 return 0;
1026
c984b7ff 1027 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
e17a4113 1028 / TARGET_CHAR_BIT, byte_order);
c906108c 1029
eb2e12d7 1030 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
e17a4113
UW
1031 gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT),
1032 byte_order)
c906108c
SS
1033 return 0;
1034
c984b7ff 1035 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
e17a4113 1036 / TARGET_CHAR_BIT, byte_order);
c906108c
SS
1037 return 1;
1038}
f595cb19
MK
1039\f
1040
1041/* System V Release 4 (SVR4). */
1042
1043void
1044m68k_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
c906108c 1055
152d9db6
GS
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
1060static struct gdbarch *
1061m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1062{
1063 struct gdbarch_tdep *tdep = NULL;
1064 struct gdbarch *gdbarch;
8ed86d01
VP
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;
152d9db6 1077
8ed86d01
VP
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
4ed77933 1138 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
8ed86d01
VP
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
4ed77933
AS
1144 && ((*info.bfd_arch_info->compatible)
1145 (info.bfd_arch_info, coldfire_arch)))
8ed86d01
VP
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 }
152d9db6 1162
eb2e12d7
AS
1163 tdep = xmalloc (sizeof (struct gdbarch_tdep));
1164 gdbarch = gdbarch_alloc (&info, tdep);
8ed86d01
VP
1165 tdep->fpregs_present = has_fp;
1166 tdep->flavour = flavour;
152d9db6 1167
8ed86d01
VP
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);
5d3ed2e3 1172
5d3ed2e3 1173 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
103a1597 1174 set_gdbarch_breakpoint_from_pc (gdbarch, m68k_local_breakpoint_from_pc);
5d3ed2e3
GS
1175
1176 /* Stack grows down. */
1177 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9bb47d95 1178 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
6300c360
GS
1179
1180 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
8ed86d01
VP
1181 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1182 set_gdbarch_decr_pc_after_break (gdbarch, 2);
942dc0e9 1183
6300c360 1184 set_gdbarch_frame_args_skip (gdbarch, 8);
6dd0fba6 1185 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
942dc0e9 1186
8de307e0 1187 set_gdbarch_register_type (gdbarch, m68k_register_type);
5d3ed2e3 1188 set_gdbarch_register_name (gdbarch, m68k_register_name);
6dd0fba6 1189 set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
32eeb91a 1190 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
32eeb91a
AS
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);
e47577ab
MK
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);
a2c6a6d5 1197
8ed86d01
VP
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 */
8de307e0 1218 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
f595cb19 1219 set_gdbarch_return_value (gdbarch, m68k_return_value);
6c0e89ed 1220
8ed86d01 1221
650fcc91
AS
1222 /* Disassembler. */
1223 set_gdbarch_print_insn (gdbarch, print_insn_m68k);
1224
eb2e12d7
AS
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
f595cb19 1231 tdep->struct_value_regnum = M68K_A1_REGNUM;
66894781 1232 tdep->struct_return = reg_struct_return;
8de307e0
AS
1233
1234 /* Frame unwinder. */
f36bf22c 1235 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
8de307e0 1236 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
3f244638
AS
1237
1238 /* Hook in the DWARF CFI frame unwinder. */
f36bf22c 1239 dwarf2_append_unwinders (gdbarch);
3f244638 1240
8de307e0 1241 frame_base_set_default (gdbarch, &m68k_frame_base);
eb2e12d7 1242
55809acb
AS
1243 /* Hook in ABI-specific overrides, if they have been registered. */
1244 gdbarch_init_osabi (info, gdbarch);
1245
eb2e12d7
AS
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
f36bf22c 1252 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
8de307e0 1253
8ed86d01 1254 if (tdesc_data)
7cc46491 1255 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
8ed86d01 1256
152d9db6
GS
1257 return gdbarch;
1258}
1259
1260
1261static void
c984b7ff 1262m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
152d9db6 1263{
c984b7ff 1264 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
152d9db6 1265
eb2e12d7
AS
1266 if (tdep == NULL)
1267 return;
152d9db6 1268}
2acceee2 1269
a78f21af
AC
1270extern initialize_file_ftype _initialize_m68k_tdep; /* -Wmissing-prototypes */
1271
c906108c 1272void
fba45db2 1273_initialize_m68k_tdep (void)
c906108c 1274{
152d9db6 1275 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
c906108c 1276}
This page took 1.251282 seconds and 4 git commands to generate.