binutils-gdb/gdb/m68k-tdep.h

115 lines
3.3 KiB
C
Raw Normal View History

/* Target-dependent code for the Motorola 68000 series.
Copyright (C) 1990-2024 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef M68K_TDEP_H
#define M68K_TDEP_H
#include "gdbarch.h"
class frame_info_ptr;
* Makefile.in (m68k-tdep.o, m68klinux-tdep.o): Update dependencies. * m68k-tdep.c (NUM_FREGS): Delete. (SIG_PC_FP_OFFSET): Delete. (TARGET_M68K): Delete. (P_MOVEAL_SP_FP, P_ADDAW_SP, P_ADDAL_SP, P_SUBQW_SP, P_SUBQL_SP, P_LEA_SP_SP, P_LEA_PC_A5, P_FMOVEMX_SP, P_MOVEL_SP, P_MOVEML_SP): Define. (P_MOVL_SP_FP, P_MOVL, P_JSR, P_BSR, P_LEAL, P_MOVML, P_FMOVM, P_TRAP): Delete. (m68k_register_raw_size): Delete. (m68k_register_virtual_size): Delete. (m68k_register_type): Renamed from m68k_register_virtual_type and add gdbarch argument. (m68k_store_struct_return): Delete. (m68k_deprecated_extract_return_value): Delete. (m68k_deprecated_extract_struct_value_address): Delete. (m68k_frame_chain): Delete. (m68k_frame_saved_pc): Delete. (m68k_fix_call_dummy): Delete. (m68k_push_dummy_frame): Delete. (m68k_pop_frame): Delete. (m68k_extract_return_value): New function. (m68k_store_return_value): Rewrite using regcache. (m68k_extract_struct_value_address): Rewrite using regcache. (m68k_push_dummy_call): New function. (struct m68k_frame_cache): Define. (m68k_alloc_frame_cache): New function. (m68k_analyze_frame_setup): New function. (m68k_analyze_register_saves): New function. (m68k_analyze_prologue): New function. (m68k_skip_prologue): Rewrite using above functions. (m68k_unwind_pc): New function. (m68k_frame_cache): New function. (m68k_frame_this_id): New function. (m68k_frame_prev_register): New function. (m68k_frame_unwind): New variable. (m68k_frame_p): New function. (m68k_sigtramp_frame_cache): New function. (m68k_sigtramp_frame_this_id): New function. (m68k_sigtramp_frame_prev_register): New function. (m68k_sigtramp_frame_unwind): New variable. (m68k_sigtramp_frame_p): New function. (m68k_frame_base_address): New function. (m68k_frame_base): New function. (m68k_unwind_dummy_id): New function. (fill_gregset): Use regcache_collect. (fill_fpregset): Likewise. (m68k_saved_pc_after_call): Only define if SYSCALL_TRAP is defined. (m68k_gdbarch_init): Don't define call_dummy_words. Don't set deprecated_init_frame_pc, deprecated_store_struct_return, deprecated_extract_return_value, deprecated_store_return_value, deprecated_frame_chain, deprecated_frame_saved_pc, deprecated_frame_init_saved_regs, deprecated_register_raw_size, deprecated_register_virtual_size, deprecated_max_register_raw_size, deprecated_max_register_virtual_size, deprecated_register_virtual_type, deprecated_register_size, deprecated_register_byte, deprecated_register_bytes, deprecated_fp_regnum, deprecated_use_generic_dummy_frames, call_dummy_location, deprecated_call_dummy_breakpoint_offset, deprecated_pc_in_call_dummy, deprecated_call_dummy_length, deprecated_call_dummy_start_offset, deprecated_call_dummy_words, deprecated_sizeof_call_dummy_words, deprecated_fix_call_dummy, deprecated_push_dummy_frame, deprecated_pop_frame, deprecated_dummy_write_sp. Set deprecated_saved_pc_after_call only if SYSCALL_TRAP is defined. Set extract_return_value, store_return_value, extract_struct_value_address, register_type, push_dummy_call, unwind_dummy_id, unwind_pc. Add two frame unwind predicates. * m68k-tdep.h (M68K_D1_REGNUM, M68K_NUM_REGS, M68K_MAX_REGISTER_SIZE): Define. (struct m68k_sigtramp_info): Define. (struct gdbarch_tdep): Add get_sigtramp_info. * m68klinux-nat.c (fetch_register): Use register_size instead of REGISTER_RAW_SIZE. Don't put assignment in if. (store_register): Likewise. (fetch_inferior_registers): Likewise. (store_inferior_registers): Likewise. * m68klinux-tdep.c (m68k_linux_sigtramp_saved_pc): Delete. (m68k_linux_frame_saved_pc): Delete. (m68k_linux_sigcontext_reg_offset, m68k_linux_ucontext_reg_offset): Define. (m68k_linux_get_sigtramp_info): New function. (m68k_linux_extract_return_value): Rewrite using regcache. (m68k_linux_store_return_value): Likewise. (m68k_linux_extract_struct_value_address): Likewise. (m68k_linux_init_abi): Set get_sigtramp_info in tdep structure. Don't set deprecated_frame_saved_pc, deprecated_extract_return_value, deprecated_store_return_value, deprecated_extract_struct_value_address. Set extract_return_value, store_return_value, extract_struct_value_address.
2003-07-07 23:06:11 +08:00
/* Register numbers of various important registers. */
enum m68k_regnum
{
M68K_D0_REGNUM = 0,
* Makefile.in (m68k-tdep.o, m68klinux-tdep.o): Update dependencies. * m68k-tdep.c (NUM_FREGS): Delete. (SIG_PC_FP_OFFSET): Delete. (TARGET_M68K): Delete. (P_MOVEAL_SP_FP, P_ADDAW_SP, P_ADDAL_SP, P_SUBQW_SP, P_SUBQL_SP, P_LEA_SP_SP, P_LEA_PC_A5, P_FMOVEMX_SP, P_MOVEL_SP, P_MOVEML_SP): Define. (P_MOVL_SP_FP, P_MOVL, P_JSR, P_BSR, P_LEAL, P_MOVML, P_FMOVM, P_TRAP): Delete. (m68k_register_raw_size): Delete. (m68k_register_virtual_size): Delete. (m68k_register_type): Renamed from m68k_register_virtual_type and add gdbarch argument. (m68k_store_struct_return): Delete. (m68k_deprecated_extract_return_value): Delete. (m68k_deprecated_extract_struct_value_address): Delete. (m68k_frame_chain): Delete. (m68k_frame_saved_pc): Delete. (m68k_fix_call_dummy): Delete. (m68k_push_dummy_frame): Delete. (m68k_pop_frame): Delete. (m68k_extract_return_value): New function. (m68k_store_return_value): Rewrite using regcache. (m68k_extract_struct_value_address): Rewrite using regcache. (m68k_push_dummy_call): New function. (struct m68k_frame_cache): Define. (m68k_alloc_frame_cache): New function. (m68k_analyze_frame_setup): New function. (m68k_analyze_register_saves): New function. (m68k_analyze_prologue): New function. (m68k_skip_prologue): Rewrite using above functions. (m68k_unwind_pc): New function. (m68k_frame_cache): New function. (m68k_frame_this_id): New function. (m68k_frame_prev_register): New function. (m68k_frame_unwind): New variable. (m68k_frame_p): New function. (m68k_sigtramp_frame_cache): New function. (m68k_sigtramp_frame_this_id): New function. (m68k_sigtramp_frame_prev_register): New function. (m68k_sigtramp_frame_unwind): New variable. (m68k_sigtramp_frame_p): New function. (m68k_frame_base_address): New function. (m68k_frame_base): New function. (m68k_unwind_dummy_id): New function. (fill_gregset): Use regcache_collect. (fill_fpregset): Likewise. (m68k_saved_pc_after_call): Only define if SYSCALL_TRAP is defined. (m68k_gdbarch_init): Don't define call_dummy_words. Don't set deprecated_init_frame_pc, deprecated_store_struct_return, deprecated_extract_return_value, deprecated_store_return_value, deprecated_frame_chain, deprecated_frame_saved_pc, deprecated_frame_init_saved_regs, deprecated_register_raw_size, deprecated_register_virtual_size, deprecated_max_register_raw_size, deprecated_max_register_virtual_size, deprecated_register_virtual_type, deprecated_register_size, deprecated_register_byte, deprecated_register_bytes, deprecated_fp_regnum, deprecated_use_generic_dummy_frames, call_dummy_location, deprecated_call_dummy_breakpoint_offset, deprecated_pc_in_call_dummy, deprecated_call_dummy_length, deprecated_call_dummy_start_offset, deprecated_call_dummy_words, deprecated_sizeof_call_dummy_words, deprecated_fix_call_dummy, deprecated_push_dummy_frame, deprecated_pop_frame, deprecated_dummy_write_sp. Set deprecated_saved_pc_after_call only if SYSCALL_TRAP is defined. Set extract_return_value, store_return_value, extract_struct_value_address, register_type, push_dummy_call, unwind_dummy_id, unwind_pc. Add two frame unwind predicates. * m68k-tdep.h (M68K_D1_REGNUM, M68K_NUM_REGS, M68K_MAX_REGISTER_SIZE): Define. (struct m68k_sigtramp_info): Define. (struct gdbarch_tdep): Add get_sigtramp_info. * m68klinux-nat.c (fetch_register): Use register_size instead of REGISTER_RAW_SIZE. Don't put assignment in if. (store_register): Likewise. (fetch_inferior_registers): Likewise. (store_inferior_registers): Likewise. * m68klinux-tdep.c (m68k_linux_sigtramp_saved_pc): Delete. (m68k_linux_frame_saved_pc): Delete. (m68k_linux_sigcontext_reg_offset, m68k_linux_ucontext_reg_offset): Define. (m68k_linux_get_sigtramp_info): New function. (m68k_linux_extract_return_value): Rewrite using regcache. (m68k_linux_store_return_value): Likewise. (m68k_linux_extract_struct_value_address): Likewise. (m68k_linux_init_abi): Set get_sigtramp_info in tdep structure. Don't set deprecated_frame_saved_pc, deprecated_extract_return_value, deprecated_store_return_value, deprecated_extract_struct_value_address. Set extract_return_value, store_return_value, extract_struct_value_address.
2003-07-07 23:06:11 +08:00
M68K_D1_REGNUM = 1,
M68K_D2_REGNUM = 2,
M68K_D7_REGNUM = 7,
M68K_A0_REGNUM = 8,
M68K_A1_REGNUM = 9,
M68K_A2_REGNUM = 10,
M68K_FP_REGNUM = 14, /* Address of executing stack frame. */
M68K_SP_REGNUM = 15, /* Address of top of stack. */
M68K_PS_REGNUM = 16, /* Processor status. */
M68K_PC_REGNUM = 17, /* Program counter. */
M68K_FP0_REGNUM = 18, /* Floating point register 0. */
M68K_FPC_REGNUM = 26, /* 68881 control register. */
M68K_FPS_REGNUM = 27, /* 68881 status register. */
M68K_FPI_REGNUM = 28
};
/* Number of machine registers. */
#define M68K_NUM_REGS (M68K_FPI_REGNUM + 1)
* Makefile.in (m68k-tdep.o, m68klinux-tdep.o): Update dependencies. * m68k-tdep.c (NUM_FREGS): Delete. (SIG_PC_FP_OFFSET): Delete. (TARGET_M68K): Delete. (P_MOVEAL_SP_FP, P_ADDAW_SP, P_ADDAL_SP, P_SUBQW_SP, P_SUBQL_SP, P_LEA_SP_SP, P_LEA_PC_A5, P_FMOVEMX_SP, P_MOVEL_SP, P_MOVEML_SP): Define. (P_MOVL_SP_FP, P_MOVL, P_JSR, P_BSR, P_LEAL, P_MOVML, P_FMOVM, P_TRAP): Delete. (m68k_register_raw_size): Delete. (m68k_register_virtual_size): Delete. (m68k_register_type): Renamed from m68k_register_virtual_type and add gdbarch argument. (m68k_store_struct_return): Delete. (m68k_deprecated_extract_return_value): Delete. (m68k_deprecated_extract_struct_value_address): Delete. (m68k_frame_chain): Delete. (m68k_frame_saved_pc): Delete. (m68k_fix_call_dummy): Delete. (m68k_push_dummy_frame): Delete. (m68k_pop_frame): Delete. (m68k_extract_return_value): New function. (m68k_store_return_value): Rewrite using regcache. (m68k_extract_struct_value_address): Rewrite using regcache. (m68k_push_dummy_call): New function. (struct m68k_frame_cache): Define. (m68k_alloc_frame_cache): New function. (m68k_analyze_frame_setup): New function. (m68k_analyze_register_saves): New function. (m68k_analyze_prologue): New function. (m68k_skip_prologue): Rewrite using above functions. (m68k_unwind_pc): New function. (m68k_frame_cache): New function. (m68k_frame_this_id): New function. (m68k_frame_prev_register): New function. (m68k_frame_unwind): New variable. (m68k_frame_p): New function. (m68k_sigtramp_frame_cache): New function. (m68k_sigtramp_frame_this_id): New function. (m68k_sigtramp_frame_prev_register): New function. (m68k_sigtramp_frame_unwind): New variable. (m68k_sigtramp_frame_p): New function. (m68k_frame_base_address): New function. (m68k_frame_base): New function. (m68k_unwind_dummy_id): New function. (fill_gregset): Use regcache_collect. (fill_fpregset): Likewise. (m68k_saved_pc_after_call): Only define if SYSCALL_TRAP is defined. (m68k_gdbarch_init): Don't define call_dummy_words. Don't set deprecated_init_frame_pc, deprecated_store_struct_return, deprecated_extract_return_value, deprecated_store_return_value, deprecated_frame_chain, deprecated_frame_saved_pc, deprecated_frame_init_saved_regs, deprecated_register_raw_size, deprecated_register_virtual_size, deprecated_max_register_raw_size, deprecated_max_register_virtual_size, deprecated_register_virtual_type, deprecated_register_size, deprecated_register_byte, deprecated_register_bytes, deprecated_fp_regnum, deprecated_use_generic_dummy_frames, call_dummy_location, deprecated_call_dummy_breakpoint_offset, deprecated_pc_in_call_dummy, deprecated_call_dummy_length, deprecated_call_dummy_start_offset, deprecated_call_dummy_words, deprecated_sizeof_call_dummy_words, deprecated_fix_call_dummy, deprecated_push_dummy_frame, deprecated_pop_frame, deprecated_dummy_write_sp. Set deprecated_saved_pc_after_call only if SYSCALL_TRAP is defined. Set extract_return_value, store_return_value, extract_struct_value_address, register_type, push_dummy_call, unwind_dummy_id, unwind_pc. Add two frame unwind predicates. * m68k-tdep.h (M68K_D1_REGNUM, M68K_NUM_REGS, M68K_MAX_REGISTER_SIZE): Define. (struct m68k_sigtramp_info): Define. (struct gdbarch_tdep): Add get_sigtramp_info. * m68klinux-nat.c (fetch_register): Use register_size instead of REGISTER_RAW_SIZE. Don't put assignment in if. (store_register): Likewise. (fetch_inferior_registers): Likewise. (store_inferior_registers): Likewise. * m68klinux-tdep.c (m68k_linux_sigtramp_saved_pc): Delete. (m68k_linux_frame_saved_pc): Delete. (m68k_linux_sigcontext_reg_offset, m68k_linux_ucontext_reg_offset): Define. (m68k_linux_get_sigtramp_info): New function. (m68k_linux_extract_return_value): Rewrite using regcache. (m68k_linux_store_return_value): Likewise. (m68k_linux_extract_struct_value_address): Likewise. (m68k_linux_init_abi): Set get_sigtramp_info in tdep structure. Don't set deprecated_frame_saved_pc, deprecated_extract_return_value, deprecated_store_return_value, deprecated_extract_struct_value_address. Set extract_return_value, store_return_value, extract_struct_value_address.
2003-07-07 23:06:11 +08:00
/* Size of the largest register. */
#define M68K_MAX_REGISTER_SIZE 12
/* Convention for returning structures. */
enum struct_return
{
pcc_struct_return, /* Return "short" structures in memory. */
reg_struct_return /* Return "short" structures in registers. */
};
/* Particular flavour of m68k. */
enum m68k_flavour
{
m68k_no_flavour,
m68k_coldfire_flavour,
m68k_fido_flavour
};
/* Target-dependent structure in gdbarch. */
struct m68k_gdbarch_tdep : gdbarch_tdep_base
{
/* Offset to PC value in the jump buffer. If this is negative,
longjmp support will be disabled. */
int jb_pc = 0;
/* The size of each entry in the jump buffer. */
size_t jb_elt_size = 0;
* Makefile.in (m68k-tdep.o, m68klinux-tdep.o): Update dependencies. * m68k-tdep.c (NUM_FREGS): Delete. (SIG_PC_FP_OFFSET): Delete. (TARGET_M68K): Delete. (P_MOVEAL_SP_FP, P_ADDAW_SP, P_ADDAL_SP, P_SUBQW_SP, P_SUBQL_SP, P_LEA_SP_SP, P_LEA_PC_A5, P_FMOVEMX_SP, P_MOVEL_SP, P_MOVEML_SP): Define. (P_MOVL_SP_FP, P_MOVL, P_JSR, P_BSR, P_LEAL, P_MOVML, P_FMOVM, P_TRAP): Delete. (m68k_register_raw_size): Delete. (m68k_register_virtual_size): Delete. (m68k_register_type): Renamed from m68k_register_virtual_type and add gdbarch argument. (m68k_store_struct_return): Delete. (m68k_deprecated_extract_return_value): Delete. (m68k_deprecated_extract_struct_value_address): Delete. (m68k_frame_chain): Delete. (m68k_frame_saved_pc): Delete. (m68k_fix_call_dummy): Delete. (m68k_push_dummy_frame): Delete. (m68k_pop_frame): Delete. (m68k_extract_return_value): New function. (m68k_store_return_value): Rewrite using regcache. (m68k_extract_struct_value_address): Rewrite using regcache. (m68k_push_dummy_call): New function. (struct m68k_frame_cache): Define. (m68k_alloc_frame_cache): New function. (m68k_analyze_frame_setup): New function. (m68k_analyze_register_saves): New function. (m68k_analyze_prologue): New function. (m68k_skip_prologue): Rewrite using above functions. (m68k_unwind_pc): New function. (m68k_frame_cache): New function. (m68k_frame_this_id): New function. (m68k_frame_prev_register): New function. (m68k_frame_unwind): New variable. (m68k_frame_p): New function. (m68k_sigtramp_frame_cache): New function. (m68k_sigtramp_frame_this_id): New function. (m68k_sigtramp_frame_prev_register): New function. (m68k_sigtramp_frame_unwind): New variable. (m68k_sigtramp_frame_p): New function. (m68k_frame_base_address): New function. (m68k_frame_base): New function. (m68k_unwind_dummy_id): New function. (fill_gregset): Use regcache_collect. (fill_fpregset): Likewise. (m68k_saved_pc_after_call): Only define if SYSCALL_TRAP is defined. (m68k_gdbarch_init): Don't define call_dummy_words. Don't set deprecated_init_frame_pc, deprecated_store_struct_return, deprecated_extract_return_value, deprecated_store_return_value, deprecated_frame_chain, deprecated_frame_saved_pc, deprecated_frame_init_saved_regs, deprecated_register_raw_size, deprecated_register_virtual_size, deprecated_max_register_raw_size, deprecated_max_register_virtual_size, deprecated_register_virtual_type, deprecated_register_size, deprecated_register_byte, deprecated_register_bytes, deprecated_fp_regnum, deprecated_use_generic_dummy_frames, call_dummy_location, deprecated_call_dummy_breakpoint_offset, deprecated_pc_in_call_dummy, deprecated_call_dummy_length, deprecated_call_dummy_start_offset, deprecated_call_dummy_words, deprecated_sizeof_call_dummy_words, deprecated_fix_call_dummy, deprecated_push_dummy_frame, deprecated_pop_frame, deprecated_dummy_write_sp. Set deprecated_saved_pc_after_call only if SYSCALL_TRAP is defined. Set extract_return_value, store_return_value, extract_struct_value_address, register_type, push_dummy_call, unwind_dummy_id, unwind_pc. Add two frame unwind predicates. * m68k-tdep.h (M68K_D1_REGNUM, M68K_NUM_REGS, M68K_MAX_REGISTER_SIZE): Define. (struct m68k_sigtramp_info): Define. (struct gdbarch_tdep): Add get_sigtramp_info. * m68klinux-nat.c (fetch_register): Use register_size instead of REGISTER_RAW_SIZE. Don't put assignment in if. (store_register): Likewise. (fetch_inferior_registers): Likewise. (store_inferior_registers): Likewise. * m68klinux-tdep.c (m68k_linux_sigtramp_saved_pc): Delete. (m68k_linux_frame_saved_pc): Delete. (m68k_linux_sigcontext_reg_offset, m68k_linux_ucontext_reg_offset): Define. (m68k_linux_get_sigtramp_info): New function. (m68k_linux_extract_return_value): Rewrite using regcache. (m68k_linux_store_return_value): Likewise. (m68k_linux_extract_struct_value_address): Likewise. (m68k_linux_init_abi): Set get_sigtramp_info in tdep structure. Don't set deprecated_frame_saved_pc, deprecated_extract_return_value, deprecated_store_return_value, deprecated_extract_struct_value_address. Set extract_return_value, store_return_value, extract_struct_value_address.
2003-07-07 23:06:11 +08:00
* m68k-tdep.h (struct gdbarch_tdep): Add member struct_value_regnum. (m68k_svr4_init_abi): New prototype. * m68k-tdep.c: Include "floatformat.h". Add comment about all the different calling conventions. (m68k_extract_return_value): Remove code dealing with single-field structs. (m68k_store_return_value): Remove code dealing with single-field structs. Correctly store return values of 5, 6, 7 or 8 bytes. (m68k_extract_struct_value_address): Remove function. (m68k_svr4_extract_return_value,m68k_svr4_store_return_value) (m68k_reg_struct_return_p, m68k_return_value) (m68k_svr4_return_value): New functions. (m68k_use_struct_convention): Remove function. (m68k_push_dummy_call): Use new struct_value_regnum member of `struct gdbarch_tdep' instead of hardcoded register number to store STRUCT_ADDR. (m68k_svr4_init_abi): New function. (m68k_gdbarch_init): Don't set extract_return_value, store_return_values, deprecated_extract_struct_value_address and use_struct_convention. Set return_value instead. Initialize new struct_value_regnum member of `struct gdbarch_tdep'. * m68klinux-tdep.c: Update copyright year. (m68k_linux_extract_return_value, m68k_linux_store_return_value) (m68k_linux_extract_struct_value_address): Remove function. (m68k_linux_init_abi): Don't set extract_return_value, store_return_values, deprecated_extract_struct_value_address and use_struct_convention. Call m68k_svr4_init_abi but override the new struct_value_regnum member of `struct gdbarch_tdep'. * Makefile.in (m68k-tdep.o): Update dependencies.
2004-05-04 05:56:09 +08:00
/* Register in which the address to store a structure value is
passed to a function. */
int struct_value_regnum = 0;
* m68k-tdep.h (struct gdbarch_tdep): Add member struct_value_regnum. (m68k_svr4_init_abi): New prototype. * m68k-tdep.c: Include "floatformat.h". Add comment about all the different calling conventions. (m68k_extract_return_value): Remove code dealing with single-field structs. (m68k_store_return_value): Remove code dealing with single-field structs. Correctly store return values of 5, 6, 7 or 8 bytes. (m68k_extract_struct_value_address): Remove function. (m68k_svr4_extract_return_value,m68k_svr4_store_return_value) (m68k_reg_struct_return_p, m68k_return_value) (m68k_svr4_return_value): New functions. (m68k_use_struct_convention): Remove function. (m68k_push_dummy_call): Use new struct_value_regnum member of `struct gdbarch_tdep' instead of hardcoded register number to store STRUCT_ADDR. (m68k_svr4_init_abi): New function. (m68k_gdbarch_init): Don't set extract_return_value, store_return_values, deprecated_extract_struct_value_address and use_struct_convention. Set return_value instead. Initialize new struct_value_regnum member of `struct gdbarch_tdep'. * m68klinux-tdep.c: Update copyright year. (m68k_linux_extract_return_value, m68k_linux_store_return_value) (m68k_linux_extract_struct_value_address): Remove function. (m68k_linux_init_abi): Don't set extract_return_value, store_return_values, deprecated_extract_struct_value_address and use_struct_convention. Call m68k_svr4_init_abi but override the new struct_value_regnum member of `struct gdbarch_tdep'. * Makefile.in (m68k-tdep.o): Update dependencies.
2004-05-04 05:56:09 +08:00
Various m68k fixes for gdb Recently I tried the m68k port of gdb. It had some issues, which are fixed in this patch. * Various types of return values were not being handled properly. In particular: * arrays are returned by following the same convention as structures. This matters in languages like Ada, where an array can in fact be returned as a value. * "long double" was not being handled correctly in m68k_svr4_return_value. * GCC's m68k back end does not return vector types in registers, so change gdb to follow. * GCC's m68k back end doesn't faithfully implement the ABI, and so some objects with unusual size (not possible in C, but possible in Ada) are not returned correctly. * gcc implements an m68k ABI variant that it simply describes as "embedded". This ABI is similar to the SVR4 ABI, but rather than returning pointer-typed values in %a0, such values are returned in %d0. To support this, an ELF osabi sniffer is added. * Commit 85f7484a ("m68k: tag floating-point ABI used") adds an attribute that can be used to recognize when hard- or soft-float is in use. gdb can now read this tag and choose the ABI accordingly. I was unable to run the gdb test suite with this patch. Instead, I tested it using qemu and the internal AdaCore test suite. gdb/ChangeLog 2020-09-14 Tom Tromey <tromey@adacore.com> * m68k-tdep.c (m68k_extract_return_value): Use pointer_result_regnum. (m68k_store_return_value): Likewise. (m68k_reg_struct_return_p): Handle vectors and arrays. (m68k_return_value): Handle arrays. (m68k_svr4_return_value): Fix single-element aggregate handling. Handle long double. Adjust for embedded ABI. (m68k_svr4_init_abi): Set pointer_result_regnum. (m68k_embedded_init_abi): New function. (m68k_gdbarch_init): Handle Tag_GNU_M68K_ABI_FP. (m68k_osabi_sniffer): New function. (_initialize_m68k_tdep): Register osabi sniffer. * m68k-tdep.h (struct gdbarch_tdep) <pointer_result_regnum>: New member.
2020-09-14 22:30:10 +08:00
/* Register in which a pointer value is returned. In the SVR4 ABI,
this is %a0, but in GCC's "embedded" ABI, this is %d0. */
int pointer_result_regnum = 0;
Various m68k fixes for gdb Recently I tried the m68k port of gdb. It had some issues, which are fixed in this patch. * Various types of return values were not being handled properly. In particular: * arrays are returned by following the same convention as structures. This matters in languages like Ada, where an array can in fact be returned as a value. * "long double" was not being handled correctly in m68k_svr4_return_value. * GCC's m68k back end does not return vector types in registers, so change gdb to follow. * GCC's m68k back end doesn't faithfully implement the ABI, and so some objects with unusual size (not possible in C, but possible in Ada) are not returned correctly. * gcc implements an m68k ABI variant that it simply describes as "embedded". This ABI is similar to the SVR4 ABI, but rather than returning pointer-typed values in %a0, such values are returned in %d0. To support this, an ELF osabi sniffer is added. * Commit 85f7484a ("m68k: tag floating-point ABI used") adds an attribute that can be used to recognize when hard- or soft-float is in use. gdb can now read this tag and choose the ABI accordingly. I was unable to run the gdb test suite with this patch. Instead, I tested it using qemu and the internal AdaCore test suite. gdb/ChangeLog 2020-09-14 Tom Tromey <tromey@adacore.com> * m68k-tdep.c (m68k_extract_return_value): Use pointer_result_regnum. (m68k_store_return_value): Likewise. (m68k_reg_struct_return_p): Handle vectors and arrays. (m68k_return_value): Handle arrays. (m68k_svr4_return_value): Fix single-element aggregate handling. Handle long double. Adjust for embedded ABI. (m68k_svr4_init_abi): Set pointer_result_regnum. (m68k_embedded_init_abi): New function. (m68k_gdbarch_init): Handle Tag_GNU_M68K_ABI_FP. (m68k_osabi_sniffer): New function. (_initialize_m68k_tdep): Register osabi sniffer. * m68k-tdep.h (struct gdbarch_tdep) <pointer_result_regnum>: New member.
2020-09-14 22:30:10 +08:00
/* Convention for returning structures. */
enum struct_return struct_return {};
/* Convention for returning floats. zero in int regs, non-zero in float. */
int float_return = 0;
/* The particular flavour of m68k. */
enum m68k_flavour flavour {};
/* Flag set if the floating point registers are present, or assumed
to be present. */
int fpregs_present = 0;
* gdbtypes.h (builtin_type_ieee_single, builtin_type_ieee_double, builtin_type_i387_ext, builtin_type_m68881_ext, builtin_type_arm_ext, builtin_type_ia64_spill, builtin_type_ia64_quad): Remove. (init_float_type, init_complex_type): Add prototypes. * gdbtypes.c (builtin_type_ieee_single, builtin_type_ieee_double, builtin_type_i387_ext, builtin_type_m68881_ext, builtin_type_arm_ext, builtin_type_ia64_spill, builtin_type_ia64_quad): Remove. (_initialize_gdbtypes): Do not initialize them. (build_flt): Rename to ... (init_float_type): ... this. Make global. (build_complex): Rename to ... (init_complex_type): ... this. Make global. Remove BIT argument. (gdbtypes_post_init): Update calls. * ada-lang.c (ada_language_arch_info): Use init_float_type. * jv-lang.c (build_java_types): Likewise. * m2-lang.c (build_m2_types): Likewise. * f-lang.c (build_fortran_types): Use init_float_type and init_complex_type. * target-descriptions.c (tdesc_gdb_type): Call init_float_type instead of using builtin_type_ieee_single, builtin_type_ieee_double, or builtin_type_arm_ext. * ia64-tdep.h (struct gdbarch_tdep): Add ia64_ext_type member. * ia64-tdep.c (builtin_type_ia64_ext): Remove. (_initialize_ia64_tdep): Do not initialize it. (floatformat_valid, floatformat_ia64_ext, floatformats_ia64_ext): Move up. (ia64_ext_type): New function. (ia64_register_reggroup_p, ia64_convert_register_p, ia64_register_to_value, ia64_value_to_register, ia64_extract_return_value, ia64_store_return_value): Use ia64_ext_type instead of builtin_type_ia64_ext. * i386-tdep.h (struct gdbarch_tdep): Add i387_ext_type member. (i387_ext_type): Add prototype. * i386-tdep.c (i387_ext_type): New function. (i386_extract_return_value, i386_store_return_value, i386_register_type): Use it instead of builtin_type_i387_ext. * amd64-tdep.c (amd64_register_type): Likewise. * i387-tdep.c (print_i387_value, i387_register_to_value, i387_value_to_register): Likewise. (print_i387_value, print_i387_ext): Add GDBARCH argument. (print_i387_ext, i387_print_float_info): Pass to subroutines. * m68k-tdep.h (struct gdbarch_tdep): Add m68881_ext_type member. * m68k-tdep.c (m68881_ext_type): New function. (m68k_register_type, m68k_convert_register_p): Use it instead of builtin_type_m68881_ext. * arm-tdep.h (struct gdbarch_tdep): Add arm_ext_type member. * arm-tdep.c (arm_ext_type): New function. (arm_register_type): Use it instead of builtin_type_arm_ext. * alpha-tdep.c (alpha_register_type): Use builtin types instead of builtin_type_ieee_double. * mips-tdep.c (mips_float_register_type, mips_double_register_type): Remove. (mips_register_type): Use builtin types instead of builtin_type_ieee_single and builtin_type_ieee_double. (mips_print_fp_register): Use builtin types instead of mips_float_register_type and mips_double_register_type. * hppa-tdep.c (hppa32_register_type, hppa64_register_type): Use builtin types instead of builtin_type_ieee_single and builtin_type_ieee_double.
2009-07-02 20:48:54 +08:00
/* ISA-specific data types. */
struct type *m68k_ps_type = nullptr;
struct type *m68881_ext_type = nullptr;
};
* m68k-tdep.h (struct gdbarch_tdep): Add member struct_value_regnum. (m68k_svr4_init_abi): New prototype. * m68k-tdep.c: Include "floatformat.h". Add comment about all the different calling conventions. (m68k_extract_return_value): Remove code dealing with single-field structs. (m68k_store_return_value): Remove code dealing with single-field structs. Correctly store return values of 5, 6, 7 or 8 bytes. (m68k_extract_struct_value_address): Remove function. (m68k_svr4_extract_return_value,m68k_svr4_store_return_value) (m68k_reg_struct_return_p, m68k_return_value) (m68k_svr4_return_value): New functions. (m68k_use_struct_convention): Remove function. (m68k_push_dummy_call): Use new struct_value_regnum member of `struct gdbarch_tdep' instead of hardcoded register number to store STRUCT_ADDR. (m68k_svr4_init_abi): New function. (m68k_gdbarch_init): Don't set extract_return_value, store_return_values, deprecated_extract_struct_value_address and use_struct_convention. Set return_value instead. Initialize new struct_value_regnum member of `struct gdbarch_tdep'. * m68klinux-tdep.c: Update copyright year. (m68k_linux_extract_return_value, m68k_linux_store_return_value) (m68k_linux_extract_struct_value_address): Remove function. (m68k_linux_init_abi): Don't set extract_return_value, store_return_values, deprecated_extract_struct_value_address and use_struct_convention. Call m68k_svr4_init_abi but override the new struct_value_regnum member of `struct gdbarch_tdep'. * Makefile.in (m68k-tdep.o): Update dependencies.
2004-05-04 05:56:09 +08:00
/* Initialize a SVR4 architecture variant. */
extern void m68k_svr4_init_abi (struct gdbarch_info, struct gdbarch *);
Normalize names of some source files Most tdep/nat files are named: <cpu>-<os>-tdep.c <cpu>-<os>-nat.c A few files do not respect this scheme. This patch renames them so that they are consistent with the rest of the files. It builds fine with --enable-targets=all, but that doesn't test the nat files. I can only hope that my grep skill is good enough. gdb/ChangeLog: * Makefile.in (ALL_64_TARGET_OBS, ALL_TARGET_OBS, HFILES_NO_SRCDIR, ALLDEPFILES): Rename files. * alphabsd-nat.c: Rename to ... * alpha-bsd-nat.c: ... this, adjust include. * alphabsd-tdep.c: Rename to ... * alpha-bsd-tdep.c: ... this, adjust include. * alphabsd-tdep.h: Rename to ... * alpha-bsd-tdep.h: ... this, adjust include barrier and comment. * alphafbsd-tdep.c: Rename to ... * alpha-fbsd-tdep.c: ... this. * alphanbsd-tdep.c: Rename to ... * alpha-nbsd-tdep.c: ... this, adjust include. * alphaobsd-tdep.c: Rename to ... * alpha-obsd-tdep.c: ... this, adjust include. * amd64bsd-nat.c: Rename to ... * amd64-bsd-nat.c: ... this, adjust include. * amd64fbsd-nat.c: Rename to ... * amd64-fbsd-nat.c: ... this, adjust include. * amd64fbsd-tdep.c: Rename to ... * amd64-fbsd-tdep.c: ... this, adjust include. * amd64nbsd-nat.c: Rename to ... * amd64-nbsd-nat.c: ... this. * amd64nbsd-tdep.c: Rename to ... * amd64-nbsd-tdep.c: ... this. * amd64obsd-nat.c: Rename to ... * amd64-obsd-nat.c: ... this. * amd64obsd-tdep.c: Rename to ... * amd64-obsd-tdep.c: ... this. * amd64-tdep.h: Update comments. * armbsd-tdep.c: Rename to ... * arm-bsd-tdep.c: ... this. * armnbsd-nat.c: Rename to ... * arm-nbsd-nat.c: ... this. * armnbsd-tdep.c: Rename to ... * arm-nbsd-tdep.c: ... this. * armobsd-tdep.c: Rename to ... * arm-obsd-tdep.c: ... this. * arm-tdep.h: Update comments. * hppabsd-tdep.c: Rename to ... * hppa-bsd-tdep.c: ... this, adjust include. * hppabsd-tdep.h: Rename to ... * hppa-bsd-tdep.h: ... this, adjust include barrier and comment. * hppanbsd-nat.c: Rename to ... * hppa-nbsd-nat.c: ... this. * hppanbsd-tdep.c: Rename to ... * hppa-nbsd-tdep.c: ... this, adjust include. * hppaobsd-nat.c: Rename to ... * hppa-obsd-nat.c: ... this. * hppaobsd-tdep.c: Rename to ... * hppa-obsd-tdep.c: ... this, adjust include. * i386bsd-nat.c: Rename to ... * i386-bsd-nat.c: ... this, adjust include. * i386bsd-nat.h: Rename to ... * i386-bsd-nat.h: ... this, adjust include barrier and comment. * i386bsd-tdep.c: Rename to ... * i386-bsd-tdep.c: ... this. * i386fbsd-nat.c: Rename to ... * i386-fbsd-nat.c: ... this, adjust include. * i386fbsd-tdep.c: Rename to ... * i386-fbsd-tdep.c: ... this, adjust include. * i386fbsd-tdep.h: Rename to ... * i386-fbsd-tdep.h: ... this, adjust include barrier and comment. * i386gnu-nat.c: Rename to ... * i386-gnu-nat.c: ... this. * i386gnu-tdep.c: Rename to ... * i386-gnu-tdep.c: ... this. * i386nbsd-nat.c: Rename to ... * i386-nbsd-nat.c: ... this, adjust include. * i386nbsd-tdep.c: Rename to ... * i386-nbsd-tdep.c: ... this. * i386obsd-nat.c: Rename to ... * i386-obsd-nat.c: ... this, adjust include. * i386obsd-tdep.c: Rename to ... * i386-obsd-tdep.c: ... this. * i386v4-nat.c: Rename to ... * i386-v4-nat.c: ... this. * i386-tdep.h: Update comments. * m68k-tdep.h: Update comments. * m68kbsd-nat.c: Rename to ... * m68k-bsd-nat.c: ... this. * m68kbsd-tdep.c: Rename to ... * m68k-bsd-tdep.c: ... this. * m68klinux-nat.c: Rename to ... * m68k-linux-nat.c: ... this. * m68klinux-tdep.c: Rename to ... * m68k-linux-tdep.c: ... this. * m88kbsd-nat.c: Rename to ... * m88k-bsd-nat.c: ... this. * mipsnbsd-nat.c: Rename to ... * mips-nbsd-nat.c: ... this, adjust include. * mipsnbsd-tdep.c: Rename to ... * mips-nbsd-tdep.c: ... this, adjust include. * mipsnbsd-tdep.h: Rename to ... * mips-nbsd-tdep.h: ... this, adjust include barrier and comment. * mips64obsd-nat.c: Rename to ... * mips64-obsd-nat.c: ... this. * mips64obsd-tdep.c: Rename to ... * mips64-obsd-tdep.c: ... this. * ppcfbsd-nat.c: Rename to ... * ppc-fbsd-nat.c: ... this, adjust include. * ppcfbsd-tdep.c: Rename to ... * ppc-fbsd-tdep.c: ... this, adjust include. * ppcfbsd-tdep.h: Rename to ... * ppc-fbsd-tdep.h: ... this, adjust include barrier and comment. * ppcnbsd-nat.c: Rename to ... * ppc-nbsd-nat.c: ... this, adjust include. * ppcnbsd-tdep.c: Rename to ... * ppc-nbsd-tdep.c: ... this, adjust include. * ppcnbsd-tdep.h: Rename to ... * ppc-nbsd-tdep.h: ... this, adjust include barrier and comment. * ppcobsd-nat.c: Rename to ... * ppc-obsd-nat.c: ... this, adjust include. * ppcobsd-tdep.c: Rename to ... * ppc-obsd-tdep.c: ... this, adjust include. * ppcobsd-tdep.h: Rename to ... * ppc-obsd-tdep.h: ... this, adjust include barrier and comment. * shnbsd-nat.c: Rename to ... * sh-nbsd-nat.c: ... this. * shnbsd-tdep.c: Rename to ... * sh-nbsd-tdep.c: ... this. * sparcnbsd-nat.c: Rename to ... * sparc-nbsd-nat.c: ... this. * sparcnbsd-tdep.c: Rename to ... * sparc-nbsd-tdep.c: ... this. * sparcobsd-tdep.c: Rename to ... * sparc-obsd-tdep.c: ... this. * sparc64fbsd-nat.c: Rename to ... * sparc64-fbsd-nat.c: ... this. * sparc64fbsd-tdep.c: Rename to ... * sparc64-fbsd-tdep.c: ... this. * sparc64nbsd-nat.c: Rename to ... * sparc64-nbsd-nat.c: ... this. * sparc64nbsd-tdep.c: Rename to ... * sparc64-nbsd-tdep.c: ... this. * sparc64obsd-nat.c: Rename to ... * sparc64-obsd-nat.c: ... this. * sparc64obsd-tdep.c: Rename to ... * sparc64-obsd-tdep.c: ... this. * sparc64-tdep.h: Update comments. * vaxbsd-nat.c: Rename to ... * vax-bsd-nat.c: ... this. * vaxnbsd-tdep.c: Rename to ... * vax-nbsd-tdep.c: ... this. * vaxobsd-tdep.c: Rename to ... * vax-obsd-tdep.c: ... this. * x86bsd-nat.h: Rename to ... * x86-bsd-nat.h: ... this, adjust include barrier and comment. * x86bsd-nat.c: Rename to ... * x86-bsd-nat.c: ... this, adjust include. * configure.tgt: Update renamed files. * config/alpha/fbsd.mh: Update renamed files. * config/alpha/nbsd.mh: Update renamed files. * config/arm/nbsdelf.mh: Update renamed files. * config/djgpp/fnchange.lst: Update renamed files. * config/i386/fbsd.mh: Update renamed files. * config/i386/fbsd64.mh: Update renamed files. * config/i386/i386gnu.mh: Update renamed files. * config/i386/i386sol2.mh: Update renamed files. * config/i386/nbsd64.mh: Update renamed files. * config/i386/nbsdelf.mh: Update renamed files. * config/i386/obsd.mh: Update renamed files. * config/i386/obsd64.mh: Update renamed files. * config/i386/sol2-64.mh: Update renamed files. * config/m68k/linux.mh: Update renamed files. * config/m68k/nbsdelf.mh: Update renamed files. * config/m68k/obsd.mh: Update renamed files. * config/m88k/obsd.mh: Update renamed files. * config/mips/nbsd.mh: Update renamed files. * config/mips/obsd64.mh: Update renamed files. * config/pa/nbsd.mh: Update renamed files. * config/pa/obsd.mh: Update renamed files. * config/powerpc/fbsd.mh: Update renamed files. * config/powerpc/nbsd.mh: Update renamed files. * config/powerpc/obsd.mh: Update renamed files. * config/sh/nbsd.mh: Update renamed files. * config/sparc/fbsd.mh: Update renamed files. * config/sparc/nbsd64.mh: Update renamed files. * config/sparc/nbsdelf.mh: Update renamed files. * config/sparc/obsd64.mh: Update renamed files. * config/vax/nbsdelf.mh: Update renamed files. * config/vax/obsd.mh: Update renamed files.
2016-11-23 05:14:24 +08:00
/* Functions exported from m68k-bsd-tdep.c. */
extern int m68kbsd_fpreg_offset (struct gdbarch *gdbarch, int regnum);
#endif /* m68k-tdep.h */