aboutsummaryrefslogtreecommitdiff
path: root/gdb/arm-tdep.h
diff options
context:
space:
mode:
authorRichard Earnshaw <richard.earnshaw@arm.com>2002-02-15 13:35:27 +0000
committerRichard Earnshaw <richard.earnshaw@arm.com>2002-02-15 13:35:27 +0000
commit97e03143bb83533b4cf4fcd9d283b05722b4c128 (patch)
tree9f9edc8d8ed5cd1414e4712de0d6dbb1b5a2ec57 /gdb/arm-tdep.h
parent59455fb1787721ac9e458362d9f75ababf0495c7 (diff)
downloadgdb-97e03143bb83533b4cf4fcd9d283b05722b4c128.zip
gdb-97e03143bb83533b4cf4fcd9d283b05722b4c128.tar.gz
gdb-97e03143bb83533b4cf4fcd9d283b05722b4c128.tar.bz2
* arm-tdep.h (enum arm_abi): New enum.
(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.
Diffstat (limited to 'gdb/arm-tdep.h')
-rw-r--r--gdb/arm-tdep.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/gdb/arm-tdep.h b/gdb/arm-tdep.h
index fc8e01a..60bcf01 100644
--- a/gdb/arm-tdep.h
+++ b/gdb/arm-tdep.h
@@ -99,6 +99,36 @@
#define FLAG_C 0x20000000
#define FLAG_V 0x10000000
+/* ABI variants that we know about. If you add to this enum, please
+ update the table of names in tm-arm.c. */
+enum arm_abi
+{
+ ARM_ABI_UNKNOWN = 0,
+ ARM_ABI_EABI_V1,
+ ARM_ABI_EABI_V2,
+ ARM_ABI_LINUX,
+ ARM_ABI_NETBSD_AOUT,
+ ARM_ABI_NETBSD_ELF,
+ ARM_ABI_APCS,
+ ARM_ABI_FREEBSD,
+ ARM_ABI_WINCE,
+
+ ARM_ABI_INVALID /* Keep this last. */
+};
+
+/* Target-dependent structure in gdbarch. */
+struct gdbarch_tdep
+{
+ enum arm_abi arm_abi; /* OS/ABI of inferior. */
+ const char *abi_name; /* Name of the above. */
+ CORE_ADDR lowest_pc; /* Lowest address at which instructions
+ will appear. */
+};
+
+#ifndef LOWEST_PC
+#define LOWEST_PC (gdbarch_tdep (current_gdbarch)->lowest_pc)
+#endif
+
/* Prototypes for internal interfaces needed by more than one MD file. */
int arm_pc_is_thumb_dummy (CORE_ADDR);
@@ -107,3 +137,10 @@ int arm_pc_is_thumb (CORE_ADDR);
CORE_ADDR thumb_get_next_pc (CORE_ADDR);
CORE_ADDR arm_get_next_pc (CORE_ADDR);
+
+/* How a OS variant tells the ARM generic code that it can handle an ABI
+ type. */
+void
+arm_gdbarch_register_os_abi (enum arm_abi abi,
+ void (*init_abi)(struct gdbarch_info,
+ struct gdbarch *));