gdb/
[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,
7b6bb8da 4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
0fb0cc75 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
025bb325 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 173/* Function: m68k_register_name
025bb325 174 Returns the name of the standard m68k register regnum. */
8ed86d01
VP
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__,
025bb325
MS
181 _("m68k_register_name: illegal register number %d"),
182 regnum);
86443c3e
MK
183 else if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM
184 && gdbarch_tdep (gdbarch)->fpregs_present == 0)
185 return "";
5d3ed2e3 186 else
8ed86d01 187 return m68k_register_names[regnum];
5d3ed2e3 188}
e47577ab
MK
189\f
190/* Return nonzero if a value of type TYPE stored in register REGNUM
191 needs any special handling. */
192
193static int
025bb325
MS
194m68k_convert_register_p (struct gdbarch *gdbarch,
195 int regnum, struct type *type)
e47577ab 196{
0abe36f5 197 if (!gdbarch_tdep (gdbarch)->fpregs_present)
8ed86d01 198 return 0;
83acabca 199 return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
3c1ac6e7 200 && type != register_type (gdbarch, M68K_FP0_REGNUM));
e47577ab
MK
201}
202
203/* Read a value of type TYPE from register REGNUM in frame FRAME, and
204 return its contents in TO. */
205
8dccd430 206static int
e47577ab 207m68k_register_to_value (struct frame_info *frame, int regnum,
8dccd430
PA
208 struct type *type, gdb_byte *to,
209 int *optimizedp, int *unavailablep)
e47577ab 210{
f5cf7aa1 211 gdb_byte from[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
212 struct type *fpreg_type = register_type (get_frame_arch (frame),
213 M68K_FP0_REGNUM);
e47577ab
MK
214
215 /* We only support floating-point values. */
216 if (TYPE_CODE (type) != TYPE_CODE_FLT)
217 {
8a3fe4f8
AC
218 warning (_("Cannot convert floating-point register value "
219 "to non-floating-point type."));
8dccd430
PA
220 *optimizedp = *unavailablep = 0;
221 return 0;
e47577ab
MK
222 }
223
83acabca 224 /* Convert to TYPE. */
8dccd430
PA
225
226 /* Convert to TYPE. */
227 if (!get_frame_register_bytes (frame, regnum, 0, TYPE_LENGTH (type),
228 from, optimizedp, unavailablep))
229 return 0;
230
8ed86d01 231 convert_typed_floating (from, fpreg_type, to, type);
8dccd430
PA
232 *optimizedp = *unavailablep = 0;
233 return 1;
e47577ab
MK
234}
235
236/* Write the contents FROM of a value of type TYPE into register
237 REGNUM in frame FRAME. */
238
239static void
240m68k_value_to_register (struct frame_info *frame, int regnum,
f5cf7aa1 241 struct type *type, const gdb_byte *from)
e47577ab 242{
f5cf7aa1 243 gdb_byte to[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
244 struct type *fpreg_type = register_type (get_frame_arch (frame),
245 M68K_FP0_REGNUM);
e47577ab
MK
246
247 /* We only support floating-point values. */
248 if (TYPE_CODE (type) != TYPE_CODE_FLT)
249 {
8a3fe4f8
AC
250 warning (_("Cannot convert non-floating-point type "
251 "to floating-point register value."));
e47577ab
MK
252 return;
253 }
254
83acabca 255 /* Convert from TYPE. */
8ed86d01 256 convert_typed_floating (from, type, to, fpreg_type);
e47577ab
MK
257 put_frame_register (frame, regnum, to);
258}
259
8de307e0 260\f
f595cb19
MK
261/* 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
8de307e0 291 into VALBUF. */
942dc0e9
GS
292
293static void
8de307e0 294m68k_extract_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 295 gdb_byte *valbuf)
942dc0e9 296{
8de307e0 297 int len = TYPE_LENGTH (type);
f5cf7aa1 298 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
942dc0e9 299
8de307e0
AS
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);
f5cf7aa1 309 regcache_raw_read (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
8de307e0
AS
310 }
311 else
312 internal_error (__FILE__, __LINE__,
e2e0b3e5 313 _("Cannot extract return value of %d bytes long."), len);
942dc0e9
GS
314}
315
942dc0e9 316static void
f595cb19 317m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 318 gdb_byte *valbuf)
942dc0e9 319{
8de307e0 320 int len = TYPE_LENGTH (type);
f5cf7aa1 321 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
322 struct gdbarch *gdbarch = get_regcache_arch (regcache);
323 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
942dc0e9 324
8ed86d01 325 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
8de307e0 326 {
c984b7ff 327 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
f595cb19 328 regcache_raw_read (regcache, M68K_FP0_REGNUM, buf);
8ed86d01 329 convert_typed_floating (buf, fpreg_type, valbuf, type);
8de307e0 330 }
f595cb19
MK
331 else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
332 regcache_raw_read (regcache, M68K_A0_REGNUM, valbuf);
333 else
334 m68k_extract_return_value (type, regcache, valbuf);
335}
336
337/* Write a function return value of TYPE from VALBUF into REGCACHE. */
338
339static void
340m68k_store_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 341 const gdb_byte *valbuf)
f595cb19
MK
342{
343 int len = TYPE_LENGTH (type);
942dc0e9 344
8de307e0
AS
345 if (len <= 4)
346 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 4 - len, len, valbuf);
347 else if (len <= 8)
348 {
f595cb19 349 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 8 - len,
8de307e0 350 len - 4, valbuf);
f5cf7aa1 351 regcache_raw_write (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
8de307e0
AS
352 }
353 else
354 internal_error (__FILE__, __LINE__,
e2e0b3e5 355 _("Cannot store return value of %d bytes long."), len);
8de307e0 356}
942dc0e9 357
f595cb19
MK
358static void
359m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 360 const gdb_byte *valbuf)
942dc0e9 361{
f595cb19 362 int len = TYPE_LENGTH (type);
c984b7ff
UW
363 struct gdbarch *gdbarch = get_regcache_arch (regcache);
364 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8de307e0 365
8ed86d01 366 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
f595cb19 367 {
c984b7ff 368 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
f5cf7aa1 369 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
8ed86d01 370 convert_typed_floating (valbuf, type, buf, fpreg_type);
f595cb19
MK
371 regcache_raw_write (regcache, M68K_FP0_REGNUM, buf);
372 }
373 else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
374 {
375 regcache_raw_write (regcache, M68K_A0_REGNUM, valbuf);
376 regcache_raw_write (regcache, M68K_D0_REGNUM, valbuf);
377 }
378 else
379 m68k_store_return_value (type, regcache, valbuf);
942dc0e9
GS
380}
381
f595cb19
MK
382/* Return non-zero if TYPE, which is assumed to be a structure or
383 union type, should be returned in registers for architecture
384 GDBARCH. */
385
c481dac7 386static int
f595cb19 387m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
c481dac7 388{
f595cb19
MK
389 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
390 enum type_code code = TYPE_CODE (type);
391 int len = TYPE_LENGTH (type);
c481dac7 392
f595cb19
MK
393 gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
394
395 if (tdep->struct_return == pcc_struct_return)
396 return 0;
397
398 return (len == 1 || len == 2 || len == 4 || len == 8);
c481dac7
AS
399}
400
f595cb19
MK
401/* Determine, for architecture GDBARCH, how a return value of TYPE
402 should be returned. If it is supposed to be returned in registers,
403 and READBUF is non-zero, read the appropriate value from REGCACHE,
404 and copy it into READBUF. If WRITEBUF is non-zero, write the value
405 from WRITEBUF into REGCACHE. */
406
407static enum return_value_convention
c055b101
CV
408m68k_return_value (struct gdbarch *gdbarch, struct type *func_type,
409 struct type *type, struct regcache *regcache,
410 gdb_byte *readbuf, const gdb_byte *writebuf)
f595cb19
MK
411{
412 enum type_code code = TYPE_CODE (type);
413
1c845060
MK
414 /* GCC returns a `long double' in memory too. */
415 if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
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. */
f595cb19 422
1c845060
MK
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 }
f595cb19
MK
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
442static enum return_value_convention
c055b101
CV
443m68k_svr4_return_value (struct gdbarch *gdbarch, struct type *func_type,
444 struct type *type, struct regcache *regcache,
445 gdb_byte *readbuf, const gdb_byte *writebuf)
f595cb19
MK
446{
447 enum type_code code = TYPE_CODE (type);
448
449 if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
450 && !m68k_reg_struct_return_p (gdbarch, type))
51da707a
MK
451 {
452 /* The System V ABI says that:
453
454 "A function returning a structure or union also sets %a0 to
455 the value it finds in %a0. Thus when the caller receives
456 control again, the address of the returned object resides in
457 register %a0."
458
459 So the ABI guarantees that we can always find the return
460 value just after the function has returned. */
461
462 if (readbuf)
463 {
464 ULONGEST addr;
465
466 regcache_raw_read_unsigned (regcache, M68K_A0_REGNUM, &addr);
467 read_memory (addr, readbuf, TYPE_LENGTH (type));
468 }
469
470 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
471 }
f595cb19
MK
472
473 /* This special case is for structures consisting of a single
474 `float' or `double' member. These structures are returned in
475 %fp0. For these structures, we call ourselves recursively,
476 changing TYPE into the type of the first member of the structure.
477 Since that should work for all structures that have only one
478 member, we don't bother to check the member's type here. */
479 if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
480 {
481 type = check_typedef (TYPE_FIELD_TYPE (type, 0));
c055b101 482 return m68k_svr4_return_value (gdbarch, func_type, type, regcache,
f595cb19
MK
483 readbuf, writebuf);
484 }
485
486 if (readbuf)
487 m68k_svr4_extract_return_value (type, regcache, readbuf);
488 if (writebuf)
489 m68k_svr4_store_return_value (type, regcache, writebuf);
490
491 return RETURN_VALUE_REGISTER_CONVENTION;
492}
493\f
392a587b 494
9bb47d95
NS
495/* Always align the frame to a 4-byte boundary. This is required on
496 coldfire and harmless on the rest. */
497
498static CORE_ADDR
499m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
500{
501 /* Align the stack to four bytes. */
502 return sp & ~3;
503}
504
8de307e0 505static CORE_ADDR
7d9b040b 506m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
8de307e0
AS
507 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
508 struct value **args, CORE_ADDR sp, int struct_return,
509 CORE_ADDR struct_addr)
7f8e7424 510{
f595cb19 511 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
e17a4113 512 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
f5cf7aa1 513 gdb_byte buf[4];
8de307e0
AS
514 int i;
515
516 /* Push arguments in reverse order. */
517 for (i = nargs - 1; i >= 0; i--)
518 {
4754a64e 519 struct type *value_type = value_enclosing_type (args[i]);
c481dac7 520 int len = TYPE_LENGTH (value_type);
8de307e0 521 int container_len = (len + 3) & ~3;
c481dac7
AS
522 int offset;
523
524 /* Non-scalars bigger than 4 bytes are left aligned, others are
525 right aligned. */
526 if ((TYPE_CODE (value_type) == TYPE_CODE_STRUCT
527 || TYPE_CODE (value_type) == TYPE_CODE_UNION
528 || TYPE_CODE (value_type) == TYPE_CODE_ARRAY)
529 && len > 4)
530 offset = 0;
531 else
532 offset = container_len - len;
8de307e0 533 sp -= container_len;
46615f07 534 write_memory (sp + offset, value_contents_all (args[i]), len);
8de307e0
AS
535 }
536
c481dac7 537 /* Store struct value address. */
8de307e0
AS
538 if (struct_return)
539 {
e17a4113 540 store_unsigned_integer (buf, 4, byte_order, struct_addr);
f595cb19 541 regcache_cooked_write (regcache, tdep->struct_value_regnum, buf);
8de307e0
AS
542 }
543
544 /* Store return address. */
545 sp -= 4;
e17a4113 546 store_unsigned_integer (buf, 4, byte_order, bp_addr);
8de307e0
AS
547 write_memory (sp, buf, 4);
548
549 /* Finally, update the stack pointer... */
e17a4113 550 store_unsigned_integer (buf, 4, byte_order, sp);
8de307e0
AS
551 regcache_cooked_write (regcache, M68K_SP_REGNUM, buf);
552
553 /* ...and fake a frame pointer. */
554 regcache_cooked_write (regcache, M68K_FP_REGNUM, buf);
555
556 /* DWARF2/GCC uses the stack address *before* the function call as a
557 frame's CFA. */
558 return sp + 8;
7f8e7424 559}
6dd0fba6
NS
560
561/* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
562
563static int
d3f73121 564m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
6dd0fba6
NS
565{
566 if (num < 8)
567 /* d0..7 */
568 return (num - 0) + M68K_D0_REGNUM;
569 else if (num < 16)
570 /* a0..7 */
571 return (num - 8) + M68K_A0_REGNUM;
d3f73121 572 else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
6dd0fba6
NS
573 /* fp0..7 */
574 return (num - 16) + M68K_FP0_REGNUM;
575 else if (num == 25)
576 /* pc */
577 return M68K_PC_REGNUM;
578 else
d3f73121 579 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
6dd0fba6
NS
580}
581
8de307e0
AS
582\f
583struct m68k_frame_cache
584{
585 /* Base address. */
586 CORE_ADDR base;
587 CORE_ADDR sp_offset;
588 CORE_ADDR pc;
7f8e7424 589
8de307e0
AS
590 /* Saved registers. */
591 CORE_ADDR saved_regs[M68K_NUM_REGS];
592 CORE_ADDR saved_sp;
7f8e7424 593
8de307e0
AS
594 /* Stack space reserved for local variables. */
595 long locals;
596};
c906108c 597
8de307e0
AS
598/* Allocate and initialize a frame cache. */
599
600static struct m68k_frame_cache *
601m68k_alloc_frame_cache (void)
c906108c 602{
8de307e0
AS
603 struct m68k_frame_cache *cache;
604 int i;
c906108c 605
8de307e0 606 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
c906108c 607
8de307e0
AS
608 /* Base address. */
609 cache->base = 0;
610 cache->sp_offset = -4;
611 cache->pc = 0;
c906108c 612
8de307e0
AS
613 /* Saved registers. We initialize these to -1 since zero is a valid
614 offset (that's where %fp is supposed to be stored). */
615 for (i = 0; i < M68K_NUM_REGS; i++)
616 cache->saved_regs[i] = -1;
617
618 /* Frameless until proven otherwise. */
619 cache->locals = -1;
620
621 return cache;
c906108c
SS
622}
623
8de307e0
AS
624/* Check whether PC points at a code that sets up a new stack frame.
625 If so, it updates CACHE and returns the address of the first
626 instruction after the sequence that sets removes the "hidden"
627 argument from the stack or CURRENT_PC, whichever is smaller.
628 Otherwise, return PC. */
c906108c 629
8de307e0 630static CORE_ADDR
e17a4113
UW
631m68k_analyze_frame_setup (struct gdbarch *gdbarch,
632 CORE_ADDR pc, CORE_ADDR current_pc,
8de307e0 633 struct m68k_frame_cache *cache)
c906108c 634{
e17a4113 635 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0
AS
636 int op;
637
638 if (pc >= current_pc)
639 return current_pc;
c906108c 640
e17a4113 641 op = read_memory_unsigned_integer (pc, 2, byte_order);
8de307e0
AS
642
643 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
c906108c 644 {
8de307e0
AS
645 cache->saved_regs[M68K_FP_REGNUM] = 0;
646 cache->sp_offset += 4;
647 if (op == P_LINKW_FP)
648 {
649 /* link.w %fp, #-N */
650 /* link.w %fp, #0; adda.l #-N, %sp */
e17a4113 651 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
8de307e0
AS
652
653 if (pc + 4 < current_pc && cache->locals == 0)
654 {
e17a4113 655 op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
8de307e0
AS
656 if (op == P_ADDAL_SP)
657 {
e17a4113 658 cache->locals = read_memory_integer (pc + 6, 4, byte_order);
8de307e0
AS
659 return pc + 10;
660 }
661 }
662
663 return pc + 4;
664 }
665 else if (op == P_LINKL_FP)
c906108c 666 {
8de307e0 667 /* link.l %fp, #-N */
e17a4113 668 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
8de307e0
AS
669 return pc + 6;
670 }
671 else
672 {
673 /* pea (%fp); movea.l %sp, %fp */
674 cache->locals = 0;
675
676 if (pc + 2 < current_pc)
677 {
e17a4113 678 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
679
680 if (op == P_MOVEAL_SP_FP)
681 {
682 /* move.l %sp, %fp */
683 return pc + 4;
684 }
685 }
686
687 return pc + 2;
c906108c
SS
688 }
689 }
8de307e0 690 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
c906108c 691 {
8de307e0
AS
692 /* subq.[wl] #N,%sp */
693 /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
694 cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
695 if (pc + 2 < current_pc)
c906108c 696 {
e17a4113 697 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
698 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
699 {
700 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
701 return pc + 4;
702 }
c906108c 703 }
8de307e0
AS
704 return pc + 2;
705 }
706 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
707 {
708 /* adda.w #-N,%sp */
709 /* lea (-N,%sp),%sp */
e17a4113 710 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
8de307e0 711 return pc + 4;
c906108c 712 }
8de307e0 713 else if (op == P_ADDAL_SP)
c906108c 714 {
8de307e0 715 /* adda.l #-N,%sp */
e17a4113 716 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
8de307e0 717 return pc + 6;
c906108c 718 }
8de307e0
AS
719
720 return pc;
c906108c 721}
c5aa993b 722
8de307e0
AS
723/* Check whether PC points at code that saves registers on the stack.
724 If so, it updates CACHE and returns the address of the first
725 instruction after the register saves or CURRENT_PC, whichever is
726 smaller. Otherwise, return PC. */
c906108c 727
8de307e0 728static CORE_ADDR
be8626e0
MD
729m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
730 CORE_ADDR current_pc,
8de307e0
AS
731 struct m68k_frame_cache *cache)
732{
e17a4113
UW
733 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
734
8de307e0
AS
735 if (cache->locals >= 0)
736 {
737 CORE_ADDR offset;
738 int op;
739 int i, mask, regno;
c906108c 740
8de307e0
AS
741 offset = -4 - cache->locals;
742 while (pc < current_pc)
743 {
e17a4113 744 op = read_memory_unsigned_integer (pc, 2, byte_order);
8ed86d01 745 if (op == P_FMOVEMX_SP
be8626e0 746 && gdbarch_tdep (gdbarch)->fpregs_present)
8de307e0
AS
747 {
748 /* fmovem.x REGS,-(%sp) */
e17a4113 749 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
750 if ((op & 0xff00) == 0xe000)
751 {
752 mask = op & 0xff;
753 for (i = 0; i < 16; i++, mask >>= 1)
754 {
755 if (mask & 1)
756 {
757 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
758 offset -= 12;
759 }
760 }
761 pc += 4;
762 }
763 else
764 break;
765 }
0ba5a932 766 else if ((op & 0177760) == P_MOVEL_SP)
8de307e0
AS
767 {
768 /* move.l %R,-(%sp) */
0ba5a932 769 regno = op & 017;
8de307e0
AS
770 cache->saved_regs[regno] = offset;
771 offset -= 4;
772 pc += 2;
773 }
774 else if (op == P_MOVEML_SP)
775 {
776 /* movem.l REGS,-(%sp) */
e17a4113 777 mask = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
778 for (i = 0; i < 16; i++, mask >>= 1)
779 {
780 if (mask & 1)
781 {
782 cache->saved_regs[15 - i] = offset;
783 offset -= 4;
784 }
785 }
786 pc += 4;
787 }
788 else
789 break;
790 }
791 }
792
793 return pc;
794}
c906108c 795
c906108c 796
8de307e0
AS
797/* Do a full analysis of the prologue at PC and update CACHE
798 accordingly. Bail out early if CURRENT_PC is reached. Return the
799 address where the analysis stopped.
c906108c 800
8de307e0 801 We handle all cases that can be generated by gcc.
c906108c 802
8de307e0 803 For allocating a stack frame:
c906108c 804
8de307e0
AS
805 link.w %a6,#-N
806 link.l %a6,#-N
807 pea (%fp); move.l %sp,%fp
808 link.w %a6,#0; add.l #-N,%sp
809 subq.l #N,%sp
810 subq.w #N,%sp
811 subq.w #8,%sp; subq.w #N-8,%sp
812 add.w #-N,%sp
813 lea (-N,%sp),%sp
814 add.l #-N,%sp
c906108c 815
8de307e0 816 For saving registers:
c906108c 817
8de307e0
AS
818 fmovem.x REGS,-(%sp)
819 move.l R1,-(%sp)
820 move.l R1,-(%sp); move.l R2,-(%sp)
821 movem.l REGS,-(%sp)
c906108c 822
8de307e0 823 For setting up the PIC register:
c906108c 824
8de307e0 825 lea (%pc,N),%a5
c906108c 826
8de307e0 827 */
c906108c 828
eb2e12d7 829static CORE_ADDR
be8626e0
MD
830m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
831 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
c906108c 832{
e17a4113 833 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0 834 unsigned int op;
c906108c 835
e17a4113 836 pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache);
be8626e0 837 pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
8de307e0
AS
838 if (pc >= current_pc)
839 return current_pc;
c906108c 840
8de307e0 841 /* Check for GOT setup. */
e17a4113 842 op = read_memory_unsigned_integer (pc, 4, byte_order);
8de307e0 843 if (op == P_LEA_PC_A5)
c906108c 844 {
8de307e0 845 /* lea (%pc,N),%a5 */
e4d8bc08 846 return pc + 8;
c906108c 847 }
8de307e0
AS
848
849 return pc;
c906108c
SS
850}
851
8de307e0 852/* Return PC of first real instruction. */
7f8e7424 853
8de307e0 854static CORE_ADDR
6093d2eb 855m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
c906108c 856{
8de307e0
AS
857 struct m68k_frame_cache cache;
858 CORE_ADDR pc;
859 int op;
c906108c 860
8de307e0 861 cache.locals = -1;
be8626e0 862 pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
8de307e0
AS
863 if (cache.locals < 0)
864 return start_pc;
865 return pc;
866}
c906108c 867
8de307e0
AS
868static CORE_ADDR
869m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
870{
f5cf7aa1 871 gdb_byte buf[8];
7f8e7424 872
c984b7ff 873 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
0dfff4cb 874 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
8de307e0
AS
875}
876\f
877/* Normal frames. */
7f8e7424 878
8de307e0 879static struct m68k_frame_cache *
f36bf22c 880m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
8de307e0 881{
e17a4113
UW
882 struct gdbarch *gdbarch = get_frame_arch (this_frame);
883 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0 884 struct m68k_frame_cache *cache;
f5cf7aa1 885 gdb_byte buf[4];
8de307e0
AS
886 int i;
887
888 if (*this_cache)
889 return *this_cache;
890
891 cache = m68k_alloc_frame_cache ();
892 *this_cache = cache;
893
894 /* In principle, for normal frames, %fp holds the frame pointer,
895 which holds the base address for the current stack frame.
896 However, for functions that don't need it, the frame pointer is
897 optional. For these "frameless" functions the frame pointer is
898 actually the frame pointer of the calling frame. Signal
899 trampolines are just a special case of a "frameless" function.
900 They (usually) share their frame pointer with the frame that was
901 in progress when the signal occurred. */
902
f36bf22c 903 get_frame_register (this_frame, M68K_FP_REGNUM, buf);
e17a4113 904 cache->base = extract_unsigned_integer (buf, 4, byte_order);
8de307e0
AS
905 if (cache->base == 0)
906 return cache;
907
908 /* For normal frames, %pc is stored at 4(%fp). */
909 cache->saved_regs[M68K_PC_REGNUM] = 4;
910
f36bf22c 911 cache->pc = get_frame_func (this_frame);
8de307e0 912 if (cache->pc != 0)
f36bf22c
AS
913 m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
914 get_frame_pc (this_frame), cache);
8de307e0
AS
915
916 if (cache->locals < 0)
917 {
918 /* We didn't find a valid frame, which means that CACHE->base
919 currently holds the frame pointer for our calling frame. If
920 we're at the start of a function, or somewhere half-way its
921 prologue, the function's frame probably hasn't been fully
922 setup yet. Try to reconstruct the base address for the stack
923 frame by looking at the stack pointer. For truly "frameless"
924 functions this might work too. */
925
f36bf22c 926 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
e17a4113
UW
927 cache->base = extract_unsigned_integer (buf, 4, byte_order)
928 + cache->sp_offset;
8de307e0 929 }
7f8e7424 930
8de307e0
AS
931 /* Now that we have the base address for the stack frame we can
932 calculate the value of %sp in the calling frame. */
933 cache->saved_sp = cache->base + 8;
7f8e7424 934
8de307e0
AS
935 /* Adjust all the saved registers such that they contain addresses
936 instead of offsets. */
937 for (i = 0; i < M68K_NUM_REGS; i++)
938 if (cache->saved_regs[i] != -1)
939 cache->saved_regs[i] += cache->base;
c906108c 940
8de307e0
AS
941 return cache;
942}
c906108c 943
8de307e0 944static void
f36bf22c 945m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
8de307e0
AS
946 struct frame_id *this_id)
947{
f36bf22c 948 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
c906108c 949
8de307e0
AS
950 /* This marks the outermost frame. */
951 if (cache->base == 0)
952 return;
c5aa993b 953
8de307e0
AS
954 /* See the end of m68k_push_dummy_call. */
955 *this_id = frame_id_build (cache->base + 8, cache->pc);
956}
c5aa993b 957
f36bf22c
AS
958static struct value *
959m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
960 int regnum)
8de307e0 961{
f36bf22c 962 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
963
964 gdb_assert (regnum >= 0);
965
966 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
f36bf22c 967 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
8de307e0
AS
968
969 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
f36bf22c
AS
970 return frame_unwind_got_memory (this_frame, regnum,
971 cache->saved_regs[regnum]);
8de307e0 972
f36bf22c 973 return frame_unwind_got_register (this_frame, regnum, regnum);
8de307e0
AS
974}
975
976static const struct frame_unwind m68k_frame_unwind =
977{
978 NORMAL_FRAME,
8fbca658 979 default_frame_unwind_stop_reason,
8de307e0 980 m68k_frame_this_id,
f36bf22c
AS
981 m68k_frame_prev_register,
982 NULL,
983 default_frame_sniffer
8de307e0 984};
8de307e0 985\f
8de307e0 986static CORE_ADDR
f36bf22c 987m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
8de307e0 988{
f36bf22c 989 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
990
991 return cache->base;
992}
993
994static const struct frame_base m68k_frame_base =
995{
996 &m68k_frame_unwind,
997 m68k_frame_base_address,
998 m68k_frame_base_address,
999 m68k_frame_base_address
1000};
1001
1002static struct frame_id
f36bf22c 1003m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
8de307e0 1004{
8de307e0 1005 CORE_ADDR fp;
c906108c 1006
f36bf22c 1007 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
c906108c 1008
8de307e0 1009 /* See the end of m68k_push_dummy_call. */
f36bf22c 1010 return frame_id_build (fp + 8, get_frame_pc (this_frame));
8de307e0
AS
1011}
1012\f
c906108c 1013
c906108c
SS
1014/* Figure out where the longjmp will land. Slurp the args out of the stack.
1015 We expect the first arg to be a pointer to the jmp_buf structure from which
1016 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
025bb325 1017 This routine returns true on success. */
c906108c 1018
c34d127c 1019static int
60ade65d 1020m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
c906108c 1021{
f5cf7aa1 1022 gdb_byte *buf;
c906108c 1023 CORE_ADDR sp, jb_addr;
c984b7ff 1024 struct gdbarch *gdbarch = get_frame_arch (frame);
e17a4113
UW
1025 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1026 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
eb2e12d7
AS
1027
1028 if (tdep->jb_pc < 0)
1029 {
1030 internal_error (__FILE__, __LINE__,
e2e0b3e5 1031 _("m68k_get_longjmp_target: not implemented"));
eb2e12d7
AS
1032 return 0;
1033 }
c906108c 1034
c984b7ff
UW
1035 buf = alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1036 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
c906108c 1037
025bb325 1038 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack. */
c984b7ff 1039 buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
c906108c
SS
1040 return 0;
1041
c984b7ff 1042 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
e17a4113 1043 / TARGET_CHAR_BIT, byte_order);
c906108c 1044
eb2e12d7 1045 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
e17a4113
UW
1046 gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT),
1047 byte_order)
c906108c
SS
1048 return 0;
1049
c984b7ff 1050 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
e17a4113 1051 / TARGET_CHAR_BIT, byte_order);
c906108c
SS
1052 return 1;
1053}
f595cb19
MK
1054\f
1055
1056/* System V Release 4 (SVR4). */
1057
1058void
1059m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1060{
1061 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1062
1063 /* SVR4 uses a different calling convention. */
1064 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1065
1066 /* SVR4 uses %a0 instead of %a1. */
1067 tdep->struct_value_regnum = M68K_A0_REGNUM;
1068}
1069\f
c906108c 1070
152d9db6
GS
1071/* Function: m68k_gdbarch_init
1072 Initializer function for the m68k gdbarch vector.
025bb325 1073 Called by gdbarch. Sets up the gdbarch vector(s) for this target. */
152d9db6
GS
1074
1075static struct gdbarch *
1076m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1077{
1078 struct gdbarch_tdep *tdep = NULL;
1079 struct gdbarch *gdbarch;
8ed86d01
VP
1080 struct gdbarch_list *best_arch;
1081 struct tdesc_arch_data *tdesc_data = NULL;
1082 int i;
1083 enum m68k_flavour flavour = m68k_no_flavour;
1084 int has_fp = 1;
1085 const struct floatformat **long_double_format = floatformats_m68881_ext;
1086
1087 /* Check any target description for validity. */
1088 if (tdesc_has_registers (info.target_desc))
1089 {
1090 const struct tdesc_feature *feature;
1091 int valid_p;
152d9db6 1092
8ed86d01
VP
1093 feature = tdesc_find_feature (info.target_desc,
1094 "org.gnu.gdb.m68k.core");
1095 if (feature != NULL)
1096 /* Do nothing. */
1097 ;
1098
1099 if (feature == NULL)
1100 {
1101 feature = tdesc_find_feature (info.target_desc,
1102 "org.gnu.gdb.coldfire.core");
1103 if (feature != NULL)
1104 flavour = m68k_coldfire_flavour;
1105 }
1106
1107 if (feature == NULL)
1108 {
1109 feature = tdesc_find_feature (info.target_desc,
1110 "org.gnu.gdb.fido.core");
1111 if (feature != NULL)
1112 flavour = m68k_fido_flavour;
1113 }
1114
1115 if (feature == NULL)
1116 return NULL;
1117
1118 tdesc_data = tdesc_data_alloc ();
1119
1120 valid_p = 1;
1121 for (i = 0; i <= M68K_PC_REGNUM; i++)
1122 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1123 m68k_register_names[i]);
1124
1125 if (!valid_p)
1126 {
1127 tdesc_data_cleanup (tdesc_data);
1128 return NULL;
1129 }
1130
1131 feature = tdesc_find_feature (info.target_desc,
1132 "org.gnu.gdb.coldfire.fp");
1133 if (feature != NULL)
1134 {
1135 valid_p = 1;
1136 for (i = M68K_FP0_REGNUM; i <= M68K_FPI_REGNUM; i++)
1137 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1138 m68k_register_names[i]);
1139 if (!valid_p)
1140 {
1141 tdesc_data_cleanup (tdesc_data);
1142 return NULL;
1143 }
1144 }
1145 else
1146 has_fp = 0;
1147 }
1148
1149 /* The mechanism for returning floating values from function
1150 and the type of long double depend on whether we're
025bb325 1151 on ColdFire or standard m68k. */
8ed86d01 1152
4ed77933 1153 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
8ed86d01
VP
1154 {
1155 const bfd_arch_info_type *coldfire_arch =
1156 bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1157
1158 if (coldfire_arch
4ed77933
AS
1159 && ((*info.bfd_arch_info->compatible)
1160 (info.bfd_arch_info, coldfire_arch)))
8ed86d01
VP
1161 flavour = m68k_coldfire_flavour;
1162 }
1163
1164 /* If there is already a candidate, use it. */
1165 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1166 best_arch != NULL;
1167 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1168 {
1169 if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1170 continue;
1171
1172 if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1173 continue;
1174
1175 break;
1176 }
152d9db6 1177
0c85e18e
MK
1178 if (best_arch != NULL)
1179 {
1180 if (tdesc_data != NULL)
1181 tdesc_data_cleanup (tdesc_data);
1182 return best_arch->gdbarch;
1183 }
1184
1390fcc2 1185 tdep = xzalloc (sizeof (struct gdbarch_tdep));
eb2e12d7 1186 gdbarch = gdbarch_alloc (&info, tdep);
8ed86d01
VP
1187 tdep->fpregs_present = has_fp;
1188 tdep->flavour = flavour;
152d9db6 1189
8ed86d01
VP
1190 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1191 long_double_format = floatformats_ieee_double;
1192 set_gdbarch_long_double_format (gdbarch, long_double_format);
1193 set_gdbarch_long_double_bit (gdbarch, long_double_format[0]->totalsize);
5d3ed2e3 1194
5d3ed2e3 1195 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
103a1597 1196 set_gdbarch_breakpoint_from_pc (gdbarch, m68k_local_breakpoint_from_pc);
5d3ed2e3 1197
025bb325 1198 /* Stack grows down. */
5d3ed2e3 1199 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9bb47d95 1200 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
6300c360
GS
1201
1202 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
8ed86d01
VP
1203 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1204 set_gdbarch_decr_pc_after_break (gdbarch, 2);
942dc0e9 1205
6300c360 1206 set_gdbarch_frame_args_skip (gdbarch, 8);
6dd0fba6 1207 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
942dc0e9 1208
8de307e0 1209 set_gdbarch_register_type (gdbarch, m68k_register_type);
5d3ed2e3 1210 set_gdbarch_register_name (gdbarch, m68k_register_name);
6dd0fba6 1211 set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
32eeb91a 1212 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
32eeb91a
AS
1213 set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1214 set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
e47577ab
MK
1215 set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1216 set_gdbarch_register_to_value (gdbarch, m68k_register_to_value);
1217 set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
a2c6a6d5 1218
8ed86d01
VP
1219 if (has_fp)
1220 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1221
1222 /* Try to figure out if the arch uses floating registers to return
1223 floating point values from functions. */
1224 if (has_fp)
1225 {
1226 /* On ColdFire, floating point values are returned in D0. */
1227 if (flavour == m68k_coldfire_flavour)
1228 tdep->float_return = 0;
1229 else
1230 tdep->float_return = 1;
1231 }
1232 else
1233 {
1234 /* No floating registers, so can't use them for returning values. */
1235 tdep->float_return = 0;
1236 }
1237
025bb325 1238 /* Function call & return. */
8de307e0 1239 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
f595cb19 1240 set_gdbarch_return_value (gdbarch, m68k_return_value);
6c0e89ed 1241
8ed86d01 1242
650fcc91
AS
1243 /* Disassembler. */
1244 set_gdbarch_print_insn (gdbarch, print_insn_m68k);
1245
eb2e12d7
AS
1246#if defined JB_PC && defined JB_ELEMENT_SIZE
1247 tdep->jb_pc = JB_PC;
1248 tdep->jb_elt_size = JB_ELEMENT_SIZE;
1249#else
1250 tdep->jb_pc = -1;
1251#endif
f595cb19 1252 tdep->struct_value_regnum = M68K_A1_REGNUM;
66894781 1253 tdep->struct_return = reg_struct_return;
8de307e0
AS
1254
1255 /* Frame unwinder. */
f36bf22c 1256 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
8de307e0 1257 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
3f244638
AS
1258
1259 /* Hook in the DWARF CFI frame unwinder. */
f36bf22c 1260 dwarf2_append_unwinders (gdbarch);
3f244638 1261
8de307e0 1262 frame_base_set_default (gdbarch, &m68k_frame_base);
eb2e12d7 1263
55809acb
AS
1264 /* Hook in ABI-specific overrides, if they have been registered. */
1265 gdbarch_init_osabi (info, gdbarch);
1266
eb2e12d7
AS
1267 /* Now we have tuned the configuration, set a few final things,
1268 based on what the OS ABI has told us. */
1269
1270 if (tdep->jb_pc >= 0)
1271 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1272
f36bf22c 1273 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
8de307e0 1274
8ed86d01 1275 if (tdesc_data)
7cc46491 1276 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
8ed86d01 1277
152d9db6
GS
1278 return gdbarch;
1279}
1280
1281
1282static void
c984b7ff 1283m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
152d9db6 1284{
c984b7ff 1285 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
152d9db6 1286
eb2e12d7
AS
1287 if (tdep == NULL)
1288 return;
152d9db6 1289}
2acceee2 1290
a78f21af
AC
1291extern initialize_file_ftype _initialize_m68k_tdep; /* -Wmissing-prototypes */
1292
c906108c 1293void
fba45db2 1294_initialize_m68k_tdep (void)
c906108c 1295{
152d9db6 1296 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
c906108c 1297}
This page took 1.275219 seconds and 4 git commands to generate.