(struct gdbarch_tdep): Add struct_return member.
* arm-tdep.c (arm_return_value): Return
RETURN_VALUE_STRUCT_CONVENTION for aggregates when the ABI uses
pcc_struct_return.
(arm_gdbarch_init): Default to reg_struct_return.
* armobsd-tdep.c (armobsd_init_abi): Set pcc_struct_return.
(arm_abi_strings, arm_abi_global, arm_abi_string): New
variables.
(arm_extract_return_value, arm_store_return_value): Don't use
arm_get_fp_model.
(arm_get_fp_model, arm_set_fp): Delete.
(arm_update_current_architecture): New function.
(set_fp_model_sfunc): Call arm_update_current_architecture.
(show_fp_model): Update output messages.
(arm_set_abi, arm_show_abi): New functions.
(arm_elf_osabi_sniffer): Only handle ELFOSABI_ARM.
(arm_gdbarch_init): Infer the object's ABI separately from its
OSABI. Search for a matching architecture. Honor the global
ABI and FPU settings. Set floating point format based on the
architecture.
(arm_init_abi_eabi_v1, arm_init_abi_eabi_v2, arm_init_abi_apcs):
Delete.
(_initialize_arm_tdep): Don't call gdbarch_register_osabi.
Create "arm set abi" command.
* arm-tdep.h (arm_get_fp_model): Delete prototype.
(enum arm_abi_kind): New type.
(struct gdbarch_tdep): Add arm_abi field.
* arm-linux-tdep.c (arm_linux_init_abi): Only override
tdep->fp_model if it is ARM_FLOAT_AUTO.
* armnbsd-tdep.c (arm_netbsd_aout_init_abi): Likewise.
(arm_netbsd_elf_init_abi): Likewise.
* defs.h (enum gdb_osabi): Delete ARM-specific OSABIs.
* osabi.c (gdb_osabi_name): Likewise.
(arm_get_fp_model): Declare.
* arm-tdep.c (fp_model_strings): New string array.
(arm_fp_model, current_fp_model): New variables.
(arm_get_fp_model): New function.
(arm_set_fp): New function.
(set_fp_model_sfunc): New function.
(show_fp_model): New function.
(_initialize_arm_tdep): Add new command to set/show the FPU.
(arm_extract_return_value): Use arm_get_fp_model.
(arm_store_return_value): Likewise.
(arm_gdbarch_init): Default fpa model is softfpa. Call arm_set_fp
to initialize the floating-point data types.
* arm-linux-tdep.c (arm_linux_init_abi): The default floating point
model is FPA.
GDB_OSABI_UNINITIALIZED.
* gdbarch.sh: Add osabi to struct gdbarch and to struct
gdbarch_info. Include "osabi.h" in gdbarch.c. Check osabi
in gdbarch_list_lookup_by_info and in gdbarch_update_p.
* gdbarch.c: Regenerated.
* gdbarch.h: Regenerated.
* osabi.c (gdbarch_lookup_osabi): Return GDB_OSABI_UNINITIALIZED if
there's no BFD.
(gdbarch_init_osabi): Remove osabi argument; use info.osabi.
* osabi.h (enum gdb_osabi): Move to defs.h.
(gdbarch_init_osabi): Update prototype.
* defs.h (enum gdb_osabi): Moved here.
* Makefile.in: Update dependencies.
Plus updates to alpha, arm, hppa, i386, mips, ns32k, ppc, sh, sparc, and vax
ports to match.
(COMMON_OBS): Add osabi.o.
(osabi.o): New dependency list.
* osabi.c: New file.
* osabi.h: New file.
* doc/gdbint.texinfo: Document new generic OS ABI framework.
* Makefile.in (alpha_tdep_h): Define and use instead of
alpha-tdep.h.
* alpha-tdep.c (alpha_abi_names, process_note_abi_tag_sections,
get_elfosabi, alpha_abi_handler_list, alpha_gdbarch_register_os_abi):
Remove.
(alpha_gdbarch_init, alpha_dump_tdep): Use generic OS ABI framework.
* alpha-tdep.h: Include osabi.h.
(alpha_abi): Remove.
(gdbarch_tdep): Use generic OS ABI framework.
* alpha-linux-tdep.c (_initialize_alpha_linux_tdep): Use
gdbarch_register_osabi.
* alpha-osf1-tdep.c (_initialize_alpha_osf1_tdep): Likewise.
* alphafbsd-tdep.c (_initialize_alphafbsd_tdep): Likewise.
* alphanbsd-tdep.c (_initialize_alphanbsd_tdep): Likewise.
* Makefile.in (sh_tdep_h): Add osabi.h.
* sh-tdep.h (sh_osabi): Remove.
(gdbarch_tdep): Use generic OS ABI framework.
* sh-tdep.c (sh_osabi_names, process_note_abi_tag_sections,
sh_osabi_handler_list, sh_gdbarch_register_os_abi): Remove.
(sh_gdbarch_init, sh_dump_tdep): Use generic OS ABI framework.
* shnbsd-tdep.c (_initialize_shnbsd_tdep): Use gdbarch_register_osabi.
* Makefile.in (arm_tdep_h): Define and use instead of arm-tdep.h.
* arm-linux-tdep.c (_initialize_arm_linux_tdep): Use
gdbarch_register_osabi.
* arm-tdep.c (arm_abi_names, process_note_abi_tag_sections,
arm_abi_handler_list, arm_gdbarch_register_os_abi): Remove.
(get_elfosabi): Rename to...
(arm_elf_osabi_sniffer): ...this. Adjust to use generic OS
ABI framework support routines.
(arm_gdbarch_init): Use generic OS ABI framework.
(arm_dump_tdep): Likewise.
(_initialize_arm_tdep): Likewise.
* arm-tdep.h: Include osabi.h.
(arm_abi): Remove.
(gdbarch_tdep): Remove arm_abi and abi_name members. Add
osabi member.
(arm_gdbarch_register_os_abi): Remove prototype.
* armnbsd-tdep.c (arm_netbsd_aout_osabi_sniffer): New function.
(_initialize_arm_netbsd_tdep): Use gdbarch_register_osabi.
* Makefile.in (mips-tdep.o): Add osabi.h to dependency list.
* mips-tdep.c: Include osabi.h.
(gdbarch_tdep, mips_gdbarch_init, mips_dump_tdep): Use generic
OS ABI framework.
(ARM_MAX_REGISTER_VIRTUAL_SIZE): Define.
* arm-tdep.c (arm_store_return_value): Use them.
Use FP_REGISTER_RAW_SIZE when setting the FPA return value.
* remote-rdp.c (remote_rdp_fetch_register): Use
ARM_MAX_REGISTER_RAW_SIZE.
(remote_rdp_store_register): Likewise.
(struct gdbarch_tdep): Add fp_model.
* arm-tdep.c (arm_gdbarch_init): Set fp_model in tdep. Defer setting
up floating-point conversions until we know the floating-point model
in use by the inferior. Don't complain about being unable to
determine the ABI of the inferior when we don't have one.
(arm_extract_return_value): Support different floating-point models.
(arm_store_return_value): Likewise.
* armnbsd-tdep.c (arm_netbsd_aout_init_abi): Set fp_model in tdep to
ARM_FLOAT_SOFT.
(arm_netbsd_elf_init_abi): Set fp_model to ARM_FLOAT_SOFT_VFP.
* gdbarch.c gdbarch.h: Regenerate.
* breakpoint.c (create_longjmp_breakpoint): Always compile this
function.
(breakpoint_reset): Test GET_LONGJMP_TARGET_P().
* infrun.c (GET_LONGJMP_TARGET): Delete default definition.
(handle_inferior_event): Test GET_LONGJMP_TARGET_P().
* arm-tdep.h (struct gdbarch_tdep): Add jb_pc and jb_elt_size fields.
* arm-tdep.c (arm_get_longjmp_target): New function.
(arm_gdbarch_init): Initialize jb_pc to -1. If ABI handler changes
this to a positive value register arm_get_longjmp_target as the
longjmp handler.
* arm-linux-tdep.c (arm_get_longjmp_target): Delete.
(arm_linux_init_abi): Set up longjmp description in tdep.
* armnbsd-nat.c (get_longjmp_target): Delete.
* armnbsd-tdep.c (arm_netbsd_init_abi_common): Set up longjmp
description in tdep.
* config/arm/tm-nbsd.h (JB_ELEMENT_SIZE, JB_PC): Delete.
(get_longjmp_target): Delete declaration.
(GET_LONGJMP_TARGET): Delete.
* config/arm/tm-linux.h (arm_get_longjmp_target): Delete declaration.
(GET_LONGJMP_TARGET): Delete.
(struct gdbarch_tdep): New structure.
(LOWEST_PC): Provide a default.
(arm_gdbarch_register_os_abi): Declare new function.
* arm-tdep.c (arm_abi_names): New array.
(process_note_abi_tag_sections): New function.
(get_elfosabi): New function.
(arm_gdbarch_register_os_abi): New function.
(arm_gdbarch_init): Try to determine the ABI of the inferior. If
support for that ABI has been built in, then call the appropriate
configuration routine. Use gdbarch_num_regs() to get the number
of registers.
(arm_dump_tdep): New function.
(arm_init_abi_eabi_v1, arm_init_abi_eabi_v2, arm_init_abi_apcs): New
place-holder functions.
(_initialize_arm_tdep): Register them.
* config/arm/tm-arm.h (LOWEST_PC): Delete.
* armnbsd-tdep.c: New file.
* Makefile.in (armnbsd-tdep.o): Add dependencies.
* config/arm/nbsd.mt (TDEPFILES): Add it.
* config/arm/tm-nbsd.h (LOWEST_PC): Delete.
* armnbsd-nat.c: Include regcache.h.
* Makefile.in (armnbsd-nat.o): Update dependency list.
* arm-tdep.c (arm_get_next_pc): Use printf_filtered for error message.