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