gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / m68k-tdep.c
CommitLineData
748894bf 1/* Target-dependent code for the Motorola 68000 series.
c6f0559b 2
b811d2c2 3 Copyright (C) 1990-2020 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"
82ca8957 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 193 /* We only support floating-point values. */
78134374 194 && type->code () == 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
78134374 210 gdb_assert (type->code () == 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. */
78134374 235 if (type->code () != TYPE_CODE_FLT)
e47577ab 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
30baf67b 260 (SVR4) introduces a new calling convention specified by the SVR4
f595cb19
MK
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
78134374 311 if (tdep->float_return && type->code () == 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 }
78134374 317 else if (type->code () == 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
78134374 350 if (tdep->float_return && type->code () == 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 }
78134374 357 else if (type->code () == 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 373 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
78134374 374 enum type_code code = type->code ();
f595cb19 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 396{
78134374 397 enum type_code code = type->code ();
f595cb19 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 432{
78134374 433 enum type_code code = type->code ();
f595cb19 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. */
1f704f76 466 if (code == TYPE_CODE_STRUCT && type->num_fields () == 1)
f595cb19
MK
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 494 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
cf84fa6b
AH
495 struct value **args, CORE_ADDR sp,
496 function_call_return_method return_method,
8de307e0 497 CORE_ADDR struct_addr)
7f8e7424 498{
f595cb19 499 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
e17a4113 500 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
f5cf7aa1 501 gdb_byte buf[4];
8de307e0
AS
502 int i;
503
504 /* Push arguments in reverse order. */
505 for (i = nargs - 1; i >= 0; i--)
506 {
4754a64e 507 struct type *value_type = value_enclosing_type (args[i]);
c481dac7 508 int len = TYPE_LENGTH (value_type);
8de307e0 509 int container_len = (len + 3) & ~3;
c481dac7
AS
510 int offset;
511
512 /* Non-scalars bigger than 4 bytes are left aligned, others are
513 right aligned. */
78134374
SM
514 if ((value_type->code () == TYPE_CODE_STRUCT
515 || value_type->code () == TYPE_CODE_UNION
516 || value_type->code () == TYPE_CODE_ARRAY)
c481dac7
AS
517 && len > 4)
518 offset = 0;
519 else
520 offset = container_len - len;
8de307e0 521 sp -= container_len;
46615f07 522 write_memory (sp + offset, value_contents_all (args[i]), len);
8de307e0
AS
523 }
524
c481dac7 525 /* Store struct value address. */
cf84fa6b 526 if (return_method == return_method_struct)
8de307e0 527 {
e17a4113 528 store_unsigned_integer (buf, 4, byte_order, struct_addr);
b66f5587 529 regcache->cooked_write (tdep->struct_value_regnum, buf);
8de307e0
AS
530 }
531
532 /* Store return address. */
533 sp -= 4;
e17a4113 534 store_unsigned_integer (buf, 4, byte_order, bp_addr);
8de307e0
AS
535 write_memory (sp, buf, 4);
536
537 /* Finally, update the stack pointer... */
e17a4113 538 store_unsigned_integer (buf, 4, byte_order, sp);
b66f5587 539 regcache->cooked_write (M68K_SP_REGNUM, buf);
8de307e0
AS
540
541 /* ...and fake a frame pointer. */
b66f5587 542 regcache->cooked_write (M68K_FP_REGNUM, buf);
8de307e0
AS
543
544 /* DWARF2/GCC uses the stack address *before* the function call as a
545 frame's CFA. */
546 return sp + 8;
7f8e7424 547}
6dd0fba6
NS
548
549/* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
550
551static int
d3f73121 552m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
6dd0fba6
NS
553{
554 if (num < 8)
555 /* d0..7 */
556 return (num - 0) + M68K_D0_REGNUM;
557 else if (num < 16)
558 /* a0..7 */
559 return (num - 8) + M68K_A0_REGNUM;
d3f73121 560 else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
6dd0fba6
NS
561 /* fp0..7 */
562 return (num - 16) + M68K_FP0_REGNUM;
563 else if (num == 25)
564 /* pc */
565 return M68K_PC_REGNUM;
566 else
0fde2c53 567 return -1;
6dd0fba6
NS
568}
569
8de307e0
AS
570\f
571struct m68k_frame_cache
572{
573 /* Base address. */
574 CORE_ADDR base;
575 CORE_ADDR sp_offset;
576 CORE_ADDR pc;
7f8e7424 577
8de307e0
AS
578 /* Saved registers. */
579 CORE_ADDR saved_regs[M68K_NUM_REGS];
580 CORE_ADDR saved_sp;
7f8e7424 581
8de307e0
AS
582 /* Stack space reserved for local variables. */
583 long locals;
584};
c906108c 585
8de307e0
AS
586/* Allocate and initialize a frame cache. */
587
588static struct m68k_frame_cache *
589m68k_alloc_frame_cache (void)
c906108c 590{
8de307e0
AS
591 struct m68k_frame_cache *cache;
592 int i;
c906108c 593
8de307e0 594 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
c906108c 595
8de307e0
AS
596 /* Base address. */
597 cache->base = 0;
598 cache->sp_offset = -4;
599 cache->pc = 0;
c906108c 600
8de307e0
AS
601 /* Saved registers. We initialize these to -1 since zero is a valid
602 offset (that's where %fp is supposed to be stored). */
603 for (i = 0; i < M68K_NUM_REGS; i++)
604 cache->saved_regs[i] = -1;
605
606 /* Frameless until proven otherwise. */
607 cache->locals = -1;
608
609 return cache;
c906108c
SS
610}
611
8de307e0
AS
612/* Check whether PC points at a code that sets up a new stack frame.
613 If so, it updates CACHE and returns the address of the first
614 instruction after the sequence that sets removes the "hidden"
615 argument from the stack or CURRENT_PC, whichever is smaller.
616 Otherwise, return PC. */
c906108c 617
8de307e0 618static CORE_ADDR
e17a4113
UW
619m68k_analyze_frame_setup (struct gdbarch *gdbarch,
620 CORE_ADDR pc, CORE_ADDR current_pc,
8de307e0 621 struct m68k_frame_cache *cache)
c906108c 622{
e17a4113 623 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0
AS
624 int op;
625
626 if (pc >= current_pc)
627 return current_pc;
c906108c 628
e17a4113 629 op = read_memory_unsigned_integer (pc, 2, byte_order);
8de307e0
AS
630
631 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
c906108c 632 {
8de307e0
AS
633 cache->saved_regs[M68K_FP_REGNUM] = 0;
634 cache->sp_offset += 4;
635 if (op == P_LINKW_FP)
636 {
637 /* link.w %fp, #-N */
638 /* link.w %fp, #0; adda.l #-N, %sp */
e17a4113 639 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
8de307e0
AS
640
641 if (pc + 4 < current_pc && cache->locals == 0)
642 {
e17a4113 643 op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
8de307e0
AS
644 if (op == P_ADDAL_SP)
645 {
e17a4113 646 cache->locals = read_memory_integer (pc + 6, 4, byte_order);
8de307e0
AS
647 return pc + 10;
648 }
649 }
650
651 return pc + 4;
652 }
653 else if (op == P_LINKL_FP)
c906108c 654 {
8de307e0 655 /* link.l %fp, #-N */
e17a4113 656 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
8de307e0
AS
657 return pc + 6;
658 }
659 else
660 {
661 /* pea (%fp); movea.l %sp, %fp */
662 cache->locals = 0;
663
664 if (pc + 2 < current_pc)
665 {
e17a4113 666 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
667
668 if (op == P_MOVEAL_SP_FP)
669 {
670 /* move.l %sp, %fp */
671 return pc + 4;
672 }
673 }
674
675 return pc + 2;
c906108c
SS
676 }
677 }
8de307e0 678 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
c906108c 679 {
8de307e0
AS
680 /* subq.[wl] #N,%sp */
681 /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
682 cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
683 if (pc + 2 < current_pc)
c906108c 684 {
e17a4113 685 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
686 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
687 {
688 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
689 return pc + 4;
690 }
c906108c 691 }
8de307e0
AS
692 return pc + 2;
693 }
694 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
695 {
696 /* adda.w #-N,%sp */
697 /* lea (-N,%sp),%sp */
e17a4113 698 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
8de307e0 699 return pc + 4;
c906108c 700 }
8de307e0 701 else if (op == P_ADDAL_SP)
c906108c 702 {
8de307e0 703 /* adda.l #-N,%sp */
e17a4113 704 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
8de307e0 705 return pc + 6;
c906108c 706 }
8de307e0
AS
707
708 return pc;
c906108c 709}
c5aa993b 710
8de307e0
AS
711/* Check whether PC points at code that saves registers on the stack.
712 If so, it updates CACHE and returns the address of the first
713 instruction after the register saves or CURRENT_PC, whichever is
714 smaller. Otherwise, return PC. */
c906108c 715
8de307e0 716static CORE_ADDR
be8626e0
MD
717m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
718 CORE_ADDR current_pc,
8de307e0
AS
719 struct m68k_frame_cache *cache)
720{
e17a4113
UW
721 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
722
8de307e0
AS
723 if (cache->locals >= 0)
724 {
725 CORE_ADDR offset;
726 int op;
727 int i, mask, regno;
c906108c 728
8de307e0
AS
729 offset = -4 - cache->locals;
730 while (pc < current_pc)
731 {
e17a4113 732 op = read_memory_unsigned_integer (pc, 2, byte_order);
8ed86d01 733 if (op == P_FMOVEMX_SP
be8626e0 734 && gdbarch_tdep (gdbarch)->fpregs_present)
8de307e0
AS
735 {
736 /* fmovem.x REGS,-(%sp) */
e17a4113 737 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
738 if ((op & 0xff00) == 0xe000)
739 {
740 mask = op & 0xff;
741 for (i = 0; i < 16; i++, mask >>= 1)
742 {
743 if (mask & 1)
744 {
745 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
746 offset -= 12;
747 }
748 }
749 pc += 4;
750 }
751 else
752 break;
753 }
0ba5a932 754 else if ((op & 0177760) == P_MOVEL_SP)
8de307e0
AS
755 {
756 /* move.l %R,-(%sp) */
0ba5a932 757 regno = op & 017;
8de307e0
AS
758 cache->saved_regs[regno] = offset;
759 offset -= 4;
760 pc += 2;
761 }
762 else if (op == P_MOVEML_SP)
763 {
764 /* movem.l REGS,-(%sp) */
e17a4113 765 mask = read_memory_unsigned_integer (pc + 2, 2, byte_order);
8de307e0
AS
766 for (i = 0; i < 16; i++, mask >>= 1)
767 {
768 if (mask & 1)
769 {
770 cache->saved_regs[15 - i] = offset;
771 offset -= 4;
772 }
773 }
774 pc += 4;
775 }
776 else
777 break;
778 }
779 }
780
781 return pc;
782}
c906108c 783
c906108c 784
8de307e0
AS
785/* Do a full analysis of the prologue at PC and update CACHE
786 accordingly. Bail out early if CURRENT_PC is reached. Return the
787 address where the analysis stopped.
c906108c 788
8de307e0 789 We handle all cases that can be generated by gcc.
c906108c 790
8de307e0 791 For allocating a stack frame:
c906108c 792
8de307e0
AS
793 link.w %a6,#-N
794 link.l %a6,#-N
795 pea (%fp); move.l %sp,%fp
796 link.w %a6,#0; add.l #-N,%sp
797 subq.l #N,%sp
798 subq.w #N,%sp
799 subq.w #8,%sp; subq.w #N-8,%sp
800 add.w #-N,%sp
801 lea (-N,%sp),%sp
802 add.l #-N,%sp
c906108c 803
8de307e0 804 For saving registers:
c906108c 805
8de307e0
AS
806 fmovem.x REGS,-(%sp)
807 move.l R1,-(%sp)
808 move.l R1,-(%sp); move.l R2,-(%sp)
809 movem.l REGS,-(%sp)
c906108c 810
8de307e0 811 For setting up the PIC register:
c906108c 812
8de307e0 813 lea (%pc,N),%a5
c906108c 814
8de307e0 815 */
c906108c 816
eb2e12d7 817static CORE_ADDR
be8626e0
MD
818m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
819 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
c906108c 820{
e17a4113 821 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0 822 unsigned int op;
c906108c 823
e17a4113 824 pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache);
be8626e0 825 pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
8de307e0
AS
826 if (pc >= current_pc)
827 return current_pc;
c906108c 828
8de307e0 829 /* Check for GOT setup. */
e17a4113 830 op = read_memory_unsigned_integer (pc, 4, byte_order);
8de307e0 831 if (op == P_LEA_PC_A5)
c906108c 832 {
8de307e0 833 /* lea (%pc,N),%a5 */
e4d8bc08 834 return pc + 8;
c906108c 835 }
8de307e0
AS
836
837 return pc;
c906108c
SS
838}
839
8de307e0 840/* Return PC of first real instruction. */
7f8e7424 841
8de307e0 842static CORE_ADDR
6093d2eb 843m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
c906108c 844{
8de307e0
AS
845 struct m68k_frame_cache cache;
846 CORE_ADDR pc;
c906108c 847
8de307e0 848 cache.locals = -1;
be8626e0 849 pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
8de307e0
AS
850 if (cache.locals < 0)
851 return start_pc;
852 return pc;
853}
c906108c 854
8de307e0
AS
855static CORE_ADDR
856m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
857{
f5cf7aa1 858 gdb_byte buf[8];
7f8e7424 859
c984b7ff 860 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
0dfff4cb 861 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
8de307e0
AS
862}
863\f
864/* Normal frames. */
7f8e7424 865
8de307e0 866static struct m68k_frame_cache *
f36bf22c 867m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
8de307e0 868{
e17a4113
UW
869 struct gdbarch *gdbarch = get_frame_arch (this_frame);
870 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8de307e0 871 struct m68k_frame_cache *cache;
f5cf7aa1 872 gdb_byte buf[4];
8de307e0
AS
873 int i;
874
875 if (*this_cache)
9a3c8263 876 return (struct m68k_frame_cache *) *this_cache;
8de307e0
AS
877
878 cache = m68k_alloc_frame_cache ();
879 *this_cache = cache;
880
881 /* In principle, for normal frames, %fp holds the frame pointer,
882 which holds the base address for the current stack frame.
883 However, for functions that don't need it, the frame pointer is
884 optional. For these "frameless" functions the frame pointer is
885 actually the frame pointer of the calling frame. Signal
886 trampolines are just a special case of a "frameless" function.
887 They (usually) share their frame pointer with the frame that was
888 in progress when the signal occurred. */
889
f36bf22c 890 get_frame_register (this_frame, M68K_FP_REGNUM, buf);
e17a4113 891 cache->base = extract_unsigned_integer (buf, 4, byte_order);
8de307e0
AS
892 if (cache->base == 0)
893 return cache;
894
895 /* For normal frames, %pc is stored at 4(%fp). */
896 cache->saved_regs[M68K_PC_REGNUM] = 4;
897
f36bf22c 898 cache->pc = get_frame_func (this_frame);
8de307e0 899 if (cache->pc != 0)
f36bf22c
AS
900 m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
901 get_frame_pc (this_frame), cache);
8de307e0
AS
902
903 if (cache->locals < 0)
904 {
905 /* We didn't find a valid frame, which means that CACHE->base
906 currently holds the frame pointer for our calling frame. If
907 we're at the start of a function, or somewhere half-way its
908 prologue, the function's frame probably hasn't been fully
909 setup yet. Try to reconstruct the base address for the stack
910 frame by looking at the stack pointer. For truly "frameless"
911 functions this might work too. */
912
f36bf22c 913 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
e17a4113
UW
914 cache->base = extract_unsigned_integer (buf, 4, byte_order)
915 + cache->sp_offset;
8de307e0 916 }
7f8e7424 917
8de307e0
AS
918 /* Now that we have the base address for the stack frame we can
919 calculate the value of %sp in the calling frame. */
920 cache->saved_sp = cache->base + 8;
7f8e7424 921
8de307e0
AS
922 /* Adjust all the saved registers such that they contain addresses
923 instead of offsets. */
924 for (i = 0; i < M68K_NUM_REGS; i++)
925 if (cache->saved_regs[i] != -1)
926 cache->saved_regs[i] += cache->base;
c906108c 927
8de307e0
AS
928 return cache;
929}
c906108c 930
8de307e0 931static void
f36bf22c 932m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
8de307e0
AS
933 struct frame_id *this_id)
934{
f36bf22c 935 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
c906108c 936
8de307e0
AS
937 /* This marks the outermost frame. */
938 if (cache->base == 0)
939 return;
c5aa993b 940
8de307e0
AS
941 /* See the end of m68k_push_dummy_call. */
942 *this_id = frame_id_build (cache->base + 8, cache->pc);
943}
c5aa993b 944
f36bf22c
AS
945static struct value *
946m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
947 int regnum)
8de307e0 948{
f36bf22c 949 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
950
951 gdb_assert (regnum >= 0);
952
953 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
f36bf22c 954 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
8de307e0
AS
955
956 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
f36bf22c
AS
957 return frame_unwind_got_memory (this_frame, regnum,
958 cache->saved_regs[regnum]);
8de307e0 959
f36bf22c 960 return frame_unwind_got_register (this_frame, regnum, regnum);
8de307e0
AS
961}
962
963static const struct frame_unwind m68k_frame_unwind =
964{
965 NORMAL_FRAME,
8fbca658 966 default_frame_unwind_stop_reason,
8de307e0 967 m68k_frame_this_id,
f36bf22c
AS
968 m68k_frame_prev_register,
969 NULL,
970 default_frame_sniffer
8de307e0 971};
8de307e0 972\f
8de307e0 973static CORE_ADDR
f36bf22c 974m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
8de307e0 975{
f36bf22c 976 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
8de307e0
AS
977
978 return cache->base;
979}
980
981static const struct frame_base m68k_frame_base =
982{
983 &m68k_frame_unwind,
984 m68k_frame_base_address,
985 m68k_frame_base_address,
986 m68k_frame_base_address
987};
988
989static struct frame_id
f36bf22c 990m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
8de307e0 991{
8de307e0 992 CORE_ADDR fp;
c906108c 993
f36bf22c 994 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
c906108c 995
8de307e0 996 /* See the end of m68k_push_dummy_call. */
f36bf22c 997 return frame_id_build (fp + 8, get_frame_pc (this_frame));
8de307e0
AS
998}
999\f
c906108c 1000
c906108c
SS
1001/* Figure out where the longjmp will land. Slurp the args out of the stack.
1002 We expect the first arg to be a pointer to the jmp_buf structure from which
1003 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
025bb325 1004 This routine returns true on success. */
c906108c 1005
c34d127c 1006static int
60ade65d 1007m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
c906108c 1008{
f5cf7aa1 1009 gdb_byte *buf;
c906108c 1010 CORE_ADDR sp, jb_addr;
c984b7ff 1011 struct gdbarch *gdbarch = get_frame_arch (frame);
e17a4113
UW
1012 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1013 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
eb2e12d7
AS
1014
1015 if (tdep->jb_pc < 0)
1016 {
1017 internal_error (__FILE__, __LINE__,
e2e0b3e5 1018 _("m68k_get_longjmp_target: not implemented"));
eb2e12d7
AS
1019 return 0;
1020 }
c906108c 1021
224c3ddb 1022 buf = (gdb_byte *) alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
c984b7ff 1023 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
c906108c 1024
025bb325 1025 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack. */
c984b7ff 1026 buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
c906108c
SS
1027 return 0;
1028
c984b7ff 1029 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
e17a4113 1030 / TARGET_CHAR_BIT, byte_order);
c906108c 1031
eb2e12d7 1032 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
e17a4113
UW
1033 gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT),
1034 byte_order)
c906108c
SS
1035 return 0;
1036
c984b7ff 1037 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
e17a4113 1038 / TARGET_CHAR_BIT, byte_order);
c906108c
SS
1039 return 1;
1040}
f595cb19
MK
1041\f
1042
18648a37
YQ
1043/* This is the implementation of gdbarch method
1044 return_in_first_hidden_param_p. */
1045
1046static int
1047m68k_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
1048 struct type *type)
1049{
1050 return 0;
1051}
1052
f595cb19
MK
1053/* System V Release 4 (SVR4). */
1054
1055void
1056m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1057{
1058 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1059
1060 /* SVR4 uses a different calling convention. */
1061 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1062
1063 /* SVR4 uses %a0 instead of %a1. */
1064 tdep->struct_value_regnum = M68K_A0_REGNUM;
1065}
1066\f
c906108c 1067
152d9db6
GS
1068/* Function: m68k_gdbarch_init
1069 Initializer function for the m68k gdbarch vector.
025bb325 1070 Called by gdbarch. Sets up the gdbarch vector(s) for this target. */
152d9db6
GS
1071
1072static struct gdbarch *
1073m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1074{
1075 struct gdbarch_tdep *tdep = NULL;
1076 struct gdbarch *gdbarch;
8ed86d01
VP
1077 struct gdbarch_list *best_arch;
1078 struct tdesc_arch_data *tdesc_data = NULL;
1079 int i;
1080 enum m68k_flavour flavour = m68k_no_flavour;
1081 int has_fp = 1;
1082 const struct floatformat **long_double_format = floatformats_m68881_ext;
1083
1084 /* Check any target description for validity. */
1085 if (tdesc_has_registers (info.target_desc))
1086 {
1087 const struct tdesc_feature *feature;
1088 int valid_p;
152d9db6 1089
8ed86d01
VP
1090 feature = tdesc_find_feature (info.target_desc,
1091 "org.gnu.gdb.m68k.core");
8ed86d01
VP
1092
1093 if (feature == NULL)
1094 {
1095 feature = tdesc_find_feature (info.target_desc,
1096 "org.gnu.gdb.coldfire.core");
1097 if (feature != NULL)
1098 flavour = m68k_coldfire_flavour;
1099 }
1100
1101 if (feature == NULL)
1102 {
1103 feature = tdesc_find_feature (info.target_desc,
1104 "org.gnu.gdb.fido.core");
1105 if (feature != NULL)
1106 flavour = m68k_fido_flavour;
1107 }
1108
1109 if (feature == NULL)
1110 return NULL;
1111
1112 tdesc_data = tdesc_data_alloc ();
1113
1114 valid_p = 1;
1115 for (i = 0; i <= M68K_PC_REGNUM; i++)
1116 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1117 m68k_register_names[i]);
1118
1119 if (!valid_p)
1120 {
1121 tdesc_data_cleanup (tdesc_data);
1122 return NULL;
1123 }
1124
1125 feature = tdesc_find_feature (info.target_desc,
1126 "org.gnu.gdb.coldfire.fp");
1127 if (feature != NULL)
1128 {
1129 valid_p = 1;
1130 for (i = M68K_FP0_REGNUM; i <= M68K_FPI_REGNUM; i++)
1131 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1132 m68k_register_names[i]);
1133 if (!valid_p)
1134 {
1135 tdesc_data_cleanup (tdesc_data);
1136 return NULL;
1137 }
1138 }
1139 else
1140 has_fp = 0;
1141 }
1142
1143 /* The mechanism for returning floating values from function
1144 and the type of long double depend on whether we're
025bb325 1145 on ColdFire or standard m68k. */
8ed86d01 1146
4ed77933 1147 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
8ed86d01
VP
1148 {
1149 const bfd_arch_info_type *coldfire_arch =
1150 bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1151
1152 if (coldfire_arch
4ed77933
AS
1153 && ((*info.bfd_arch_info->compatible)
1154 (info.bfd_arch_info, coldfire_arch)))
8ed86d01
VP
1155 flavour = m68k_coldfire_flavour;
1156 }
1157
1158 /* If there is already a candidate, use it. */
1159 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1160 best_arch != NULL;
1161 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1162 {
1163 if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1164 continue;
1165
1166 if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1167 continue;
1168
1169 break;
1170 }
152d9db6 1171
0c85e18e
MK
1172 if (best_arch != NULL)
1173 {
1174 if (tdesc_data != NULL)
1175 tdesc_data_cleanup (tdesc_data);
1176 return best_arch->gdbarch;
1177 }
1178
8d749320 1179 tdep = XCNEW (struct gdbarch_tdep);
eb2e12d7 1180 gdbarch = gdbarch_alloc (&info, tdep);
8ed86d01
VP
1181 tdep->fpregs_present = has_fp;
1182 tdep->flavour = flavour;
152d9db6 1183
8ed86d01
VP
1184 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1185 long_double_format = floatformats_ieee_double;
1186 set_gdbarch_long_double_format (gdbarch, long_double_format);
1187 set_gdbarch_long_double_bit (gdbarch, long_double_format[0]->totalsize);
5d3ed2e3 1188
5d3ed2e3 1189 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
04180708
YQ
1190 set_gdbarch_breakpoint_kind_from_pc (gdbarch, m68k_breakpoint::kind_from_pc);
1191 set_gdbarch_sw_breakpoint_from_kind (gdbarch, m68k_breakpoint::bp_from_kind);
5d3ed2e3 1192
025bb325 1193 /* Stack grows down. */
5d3ed2e3 1194 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9bb47d95 1195 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
6300c360
GS
1196
1197 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
8ed86d01
VP
1198 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1199 set_gdbarch_decr_pc_after_break (gdbarch, 2);
942dc0e9 1200
6300c360 1201 set_gdbarch_frame_args_skip (gdbarch, 8);
6dd0fba6 1202 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
942dc0e9 1203
8de307e0 1204 set_gdbarch_register_type (gdbarch, m68k_register_type);
5d3ed2e3 1205 set_gdbarch_register_name (gdbarch, m68k_register_name);
6dd0fba6 1206 set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
32eeb91a 1207 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
32eeb91a
AS
1208 set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1209 set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
e47577ab
MK
1210 set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1211 set_gdbarch_register_to_value (gdbarch, m68k_register_to_value);
1212 set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
a2c6a6d5 1213
8ed86d01
VP
1214 if (has_fp)
1215 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1216
1217 /* Try to figure out if the arch uses floating registers to return
1218 floating point values from functions. */
1219 if (has_fp)
1220 {
1221 /* On ColdFire, floating point values are returned in D0. */
1222 if (flavour == m68k_coldfire_flavour)
1223 tdep->float_return = 0;
1224 else
1225 tdep->float_return = 1;
1226 }
1227 else
1228 {
1229 /* No floating registers, so can't use them for returning values. */
1230 tdep->float_return = 0;
1231 }
1232
025bb325 1233 /* Function call & return. */
8de307e0 1234 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
f595cb19 1235 set_gdbarch_return_value (gdbarch, m68k_return_value);
18648a37
YQ
1236 set_gdbarch_return_in_first_hidden_param_p (gdbarch,
1237 m68k_return_in_first_hidden_param_p);
6c0e89ed 1238
eb2e12d7
AS
1239#if defined JB_PC && defined JB_ELEMENT_SIZE
1240 tdep->jb_pc = JB_PC;
1241 tdep->jb_elt_size = JB_ELEMENT_SIZE;
1242#else
1243 tdep->jb_pc = -1;
1244#endif
f595cb19 1245 tdep->struct_value_regnum = M68K_A1_REGNUM;
66894781 1246 tdep->struct_return = reg_struct_return;
8de307e0
AS
1247
1248 /* Frame unwinder. */
f36bf22c 1249 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
8de307e0 1250 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
3f244638
AS
1251
1252 /* Hook in the DWARF CFI frame unwinder. */
f36bf22c 1253 dwarf2_append_unwinders (gdbarch);
3f244638 1254
8de307e0 1255 frame_base_set_default (gdbarch, &m68k_frame_base);
eb2e12d7 1256
55809acb
AS
1257 /* Hook in ABI-specific overrides, if they have been registered. */
1258 gdbarch_init_osabi (info, gdbarch);
1259
eb2e12d7
AS
1260 /* Now we have tuned the configuration, set a few final things,
1261 based on what the OS ABI has told us. */
1262
1263 if (tdep->jb_pc >= 0)
1264 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1265
f36bf22c 1266 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
8de307e0 1267
8ed86d01 1268 if (tdesc_data)
7cc46491 1269 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
8ed86d01 1270
152d9db6
GS
1271 return gdbarch;
1272}
1273
1274
1275static void
c984b7ff 1276m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
152d9db6 1277{
c984b7ff 1278 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
152d9db6 1279
eb2e12d7
AS
1280 if (tdep == NULL)
1281 return;
152d9db6 1282}
2acceee2 1283
6c265988 1284void _initialize_m68k_tdep ();
c906108c 1285void
6c265988 1286_initialize_m68k_tdep ()
c906108c 1287{
152d9db6 1288 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
c906108c 1289}
This page took 1.8398 seconds and 4 git commands to generate.