[ARM] PR ld/21402, only override the symbol dynamic decision on undefined weak symbol.
[deliverable/binutils-gdb.git] / gdb / m68k-tdep.c
CommitLineData
748894bf 1/* Target-dependent code for the Motorola 68000 series.
c6f0559b 2
61baf725 3 Copyright (C) 1990-2017 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"
32eeb91a
AS
36
37#include "m68k-tdep.h"
c906108c 38\f
c5aa993b 39
89c3b6d3
PDM
40#define P_LINKL_FP 0x480e
41#define P_LINKW_FP 0x4e56
42#define P_PEA_FP 0x4856
8de307e0
AS
43#define P_MOVEAL_SP_FP 0x2c4f
44#define P_ADDAW_SP 0xdefc
45#define P_ADDAL_SP 0xdffc
46#define P_SUBQW_SP 0x514f
47#define P_SUBQL_SP 0x518f
48#define P_LEA_SP_SP 0x4fef
49#define P_LEA_PC_A5 0x4bfb0170
50#define P_FMOVEMX_SP 0xf227
51#define P_MOVEL_SP 0x2f00
52#define P_MOVEML_SP 0x48e7
89c3b6d3 53
025bb325 54/* Offset from SP to first arg on stack at first instruction of a function. */
103a1597
GS
55#define SP_ARG0 (1 * 4)
56
103a1597
GS
57#if !defined (BPT_VECTOR)
58#define BPT_VECTOR 0xf
59#endif
60
04180708 61constexpr gdb_byte m68k_break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
598cc9dc 62
04180708 63typedef BP_MANIPULATION (m68k_break_insn) m68k_breakpoint;
4713453b
AS
64\f
65
4713453b 66/* Construct types for ISA-specific registers. */
209bd28e
UW
67static struct type *
68m68k_ps_type (struct gdbarch *gdbarch)
4713453b 69{
209bd28e
UW
70 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
71
72 if (!tdep->m68k_ps_type)
73 {
74 struct type *type;
75
77b7c781 76 type = arch_flags_type (gdbarch, "builtin_type_m68k_ps", 32);
209bd28e
UW
77 append_flags_type_flag (type, 0, "C");
78 append_flags_type_flag (type, 1, "V");
79 append_flags_type_flag (type, 2, "Z");
80 append_flags_type_flag (type, 3, "N");
81 append_flags_type_flag (type, 4, "X");
82 append_flags_type_flag (type, 8, "I0");
83 append_flags_type_flag (type, 9, "I1");
84 append_flags_type_flag (type, 10, "I2");
85 append_flags_type_flag (type, 12, "M");
86 append_flags_type_flag (type, 13, "S");
87 append_flags_type_flag (type, 14, "T0");
88 append_flags_type_flag (type, 15, "T1");
89
90 tdep->m68k_ps_type = type;
91 }
92
93 return tdep->m68k_ps_type;
4713453b 94}
103a1597 95
27067745
UW
96static struct type *
97m68881_ext_type (struct gdbarch *gdbarch)
98{
99 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
100
101 if (!tdep->m68881_ext_type)
102 tdep->m68881_ext_type
e9bb382b 103 = arch_float_type (gdbarch, -1, "builtin_type_m68881_ext",
27067745
UW
104 floatformats_m68881_ext);
105
106 return tdep->m68881_ext_type;
107}
108
d85fe7f7
AS
109/* Return the GDB type object for the "standard" data type of data in
110 register N. This should be int for D0-D7, SR, FPCONTROL and
111 FPSTATUS, long double for FP0-FP7, and void pointer for all others
112 (A0-A7, PC, FPIADDR). Note, for registers which contain
113 addresses return pointer to void, not pointer to char, because we
114 don't want to attempt to print the string after printing the
115 address. */
5d3ed2e3
GS
116
117static struct type *
8de307e0 118m68k_register_type (struct gdbarch *gdbarch, int regnum)
5d3ed2e3 119{
c984b7ff 120 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
03dac896 121
8ed86d01
VP
122 if (tdep->fpregs_present)
123 {
c984b7ff
UW
124 if (regnum >= gdbarch_fp0_regnum (gdbarch)
125 && regnum <= gdbarch_fp0_regnum (gdbarch) + 7)
8ed86d01
VP
126 {
127 if (tdep->flavour == m68k_coldfire_flavour)
128 return builtin_type (gdbarch)->builtin_double;
129 else
27067745 130 return m68881_ext_type (gdbarch);
8ed86d01
VP
131 }
132
133 if (regnum == M68K_FPI_REGNUM)
0dfff4cb 134 return builtin_type (gdbarch)->builtin_func_ptr;
8ed86d01
VP
135
136 if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM)
df4df182 137 return builtin_type (gdbarch)->builtin_int32;
8ed86d01
VP
138 }
139 else
140 {
141 if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM)
df4df182 142 return builtin_type (gdbarch)->builtin_int0;
8ed86d01 143 }
03dac896 144
c984b7ff 145 if (regnum == gdbarch_pc_regnum (gdbarch))
0dfff4cb 146 return builtin_type (gdbarch)->builtin_func_ptr;
03dac896 147
32eeb91a 148 if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
0dfff4cb 149 return builtin_type (gdbarch)->builtin_data_ptr;
03dac896 150
4713453b 151 if (regnum == M68K_PS_REGNUM)
209bd28e 152 return m68k_ps_type (gdbarch);
4713453b 153
df4df182 154 return builtin_type (gdbarch)->builtin_int32;
5d3ed2e3
GS
155}
156
8ed86d01 157static const char *m68k_register_names[] = {
5d3ed2e3
GS
158 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
159 "a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp",
160 "ps", "pc",
161 "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
8ed86d01 162 "fpcontrol", "fpstatus", "fpiaddr"
5d3ed2e3
GS
163 };
164
8ed86d01 165/* Function: m68k_register_name
025bb325 166 Returns the name of the standard m68k register regnum. */
8ed86d01
VP
167
168static const char *
d93859e2 169m68k_register_name (struct gdbarch *gdbarch, int regnum)
8ed86d01
VP
170{
171 if (regnum < 0 || regnum >= ARRAY_SIZE (m68k_register_names))
5d3ed2e3 172 internal_error (__FILE__, __LINE__,
025bb325
MS
173 _("m68k_register_name: illegal register number %d"),
174 regnum);
86443c3e
MK
175 else if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM
176 && gdbarch_tdep (gdbarch)->fpregs_present == 0)
177 return "";
5d3ed2e3 178 else
8ed86d01 179 return m68k_register_names[regnum];
5d3ed2e3 180}
e47577ab
MK
181\f
182/* Return nonzero if a value of type TYPE stored in register REGNUM
183 needs any special handling. */
184
185static int
025bb325
MS
186m68k_convert_register_p (struct gdbarch *gdbarch,
187 int regnum, struct type *type)
e47577ab 188{
0abe36f5 189 if (!gdbarch_tdep (gdbarch)->fpregs_present)
8ed86d01 190 return 0;
83acabca 191 return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
e3ec9b69
YQ
192 /* We only support floating-point values. */
193 && TYPE_CODE (type) == TYPE_CODE_FLT
3c1ac6e7 194 && type != register_type (gdbarch, M68K_FP0_REGNUM));
e47577ab
MK
195}
196
197/* Read a value of type TYPE from register REGNUM in frame FRAME, and
198 return its contents in TO. */
199
8dccd430 200static int
e47577ab 201m68k_register_to_value (struct frame_info *frame, int regnum,
8dccd430
PA
202 struct type *type, gdb_byte *to,
203 int *optimizedp, int *unavailablep)
e47577ab 204{
d8e07dda 205 struct gdbarch *gdbarch = get_frame_arch (frame);
f5cf7aa1 206 gdb_byte from[M68K_MAX_REGISTER_SIZE];
e3ec9b69 207 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
e47577ab 208
e3ec9b69 209 gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
8dccd430
PA
210
211 /* Convert to TYPE. */
d8e07dda
YQ
212 if (!get_frame_register_bytes (frame, regnum, 0,
213 register_size (gdbarch, regnum),
8dccd430
PA
214 from, optimizedp, unavailablep))
215 return 0;
216
8ed86d01 217 convert_typed_floating (from, fpreg_type, to, type);
8dccd430
PA
218 *optimizedp = *unavailablep = 0;
219 return 1;
e47577ab
MK
220}
221
222/* Write the contents FROM of a value of type TYPE into register
223 REGNUM in frame FRAME. */
224
225static void
226m68k_value_to_register (struct frame_info *frame, int regnum,
f5cf7aa1 227 struct type *type, const gdb_byte *from)
e47577ab 228{
f5cf7aa1 229 gdb_byte to[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
230 struct type *fpreg_type = register_type (get_frame_arch (frame),
231 M68K_FP0_REGNUM);
e47577ab
MK
232
233 /* We only support floating-point values. */
234 if (TYPE_CODE (type) != TYPE_CODE_FLT)
235 {
8a3fe4f8
AC
236 warning (_("Cannot convert non-floating-point type "
237 "to floating-point register value."));
e47577ab
MK
238 return;
239 }
240
83acabca 241 /* Convert from TYPE. */
8ed86d01 242 convert_typed_floating (from, type, to, fpreg_type);
e47577ab
MK
243 put_frame_register (frame, regnum, to);
244}
245
8de307e0 246\f
f595cb19
MK
247/* There is a fair number of calling conventions that are in somewhat
248 wide use. The 68000/08/10 don't support an FPU, not even as a
249 coprocessor. All function return values are stored in %d0/%d1.
250 Structures are returned in a static buffer, a pointer to which is
251 returned in %d0. This means that functions returning a structure
252 are not re-entrant. To avoid this problem some systems use a
253 convention where the caller passes a pointer to a buffer in %a1
254 where the return values is to be stored. This convention is the
255 default, and is implemented in the function m68k_return_value.
256
257 The 68020/030/040/060 do support an FPU, either as a coprocessor
258 (68881/2) or built-in (68040/68060). That's why System V release 4
259 (SVR4) instroduces a new calling convention specified by the SVR4
260 psABI. Integer values are returned in %d0/%d1, pointer return
261 values in %a0 and floating values in %fp0. When calling functions
262 returning a structure the caller should pass a pointer to a buffer
263 for the return value in %a0. This convention is implemented in the
264 function m68k_svr4_return_value, and by appropriately setting the
265 struct_value_regnum member of `struct gdbarch_tdep'.
266
267 GNU/Linux returns values in the same way as SVR4 does, but uses %a1
268 for passing the structure return value buffer.
269
270 GCC can also generate code where small structures are returned in
271 %d0/%d1 instead of in memory by using -freg-struct-return. This is
272 the default on NetBSD a.out, OpenBSD and GNU/Linux and several
273 embedded systems. This convention is implemented by setting the
274 struct_return member of `struct gdbarch_tdep' to reg_struct_return. */
275
276/* Read a function return value of TYPE from REGCACHE, and copy that
8de307e0 277 into VALBUF. */
942dc0e9
GS
278
279static void
8de307e0 280m68k_extract_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 281 gdb_byte *valbuf)
942dc0e9 282{
8de307e0 283 int len = TYPE_LENGTH (type);
f5cf7aa1 284 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
942dc0e9 285
8de307e0
AS
286 if (len <= 4)
287 {
288 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
289 memcpy (valbuf, buf + (4 - len), len);
290 }
291 else if (len <= 8)
292 {
293 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
294 memcpy (valbuf, buf + (8 - len), len - 4);
f5cf7aa1 295 regcache_raw_read (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
8de307e0
AS
296 }
297 else
298 internal_error (__FILE__, __LINE__,
e2e0b3e5 299 _("Cannot extract return value of %d bytes long."), len);
942dc0e9
GS
300}
301
942dc0e9 302static void
f595cb19 303m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 304 gdb_byte *valbuf)
942dc0e9 305{
f5cf7aa1 306 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
c984b7ff
UW
307 struct gdbarch *gdbarch = get_regcache_arch (regcache);
308 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
942dc0e9 309
8ed86d01 310 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
8de307e0 311 {
c984b7ff 312 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
f595cb19 313 regcache_raw_read (regcache, M68K_FP0_REGNUM, buf);
8ed86d01 314 convert_typed_floating (buf, fpreg_type, valbuf, type);
8de307e0 315 }
354ecfd5 316 else if (TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4)
f595cb19
MK
317 regcache_raw_read (regcache, M68K_A0_REGNUM, valbuf);
318 else
319 m68k_extract_return_value (type, regcache, valbuf);
320}
321
322/* Write a function return value of TYPE from VALBUF into REGCACHE. */
323
324static void
325m68k_store_return_value (struct type *type, struct regcache *regcache,
f5cf7aa1 326 const gdb_byte *valbuf)
f595cb19
MK
327{
328 int len = TYPE_LENGTH (type);
942dc0e9 329
8de307e0
AS
330 if (len <= 4)
331 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 4 - len, len, valbuf);
332 else if (len <= 8)
333 {
f595cb19 334 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 8 - len,
8de307e0 335 len - 4, valbuf);
f5cf7aa1 336 regcache_raw_write (regcache, 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{
c984b7ff
UW
347 struct gdbarch *gdbarch = get_regcache_arch (regcache);
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];
8ed86d01 354 convert_typed_floating (valbuf, type, buf, fpreg_type);
f595cb19
MK
355 regcache_raw_write (regcache, M68K_FP0_REGNUM, buf);
356 }
354ecfd5 357 else if (TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4)
f595cb19
MK
358 {
359 regcache_raw_write (regcache, M68K_A0_REGNUM, valbuf);
360 regcache_raw_write (regcache, M68K_D0_REGNUM, valbuf);
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}
This page took 1.660371 seconds and 4 git commands to generate.