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