diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2003-05-20 23:44:23 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2003-05-20 23:44:23 +0000 |
commit | 55809acbfc09aa54b9bccba498a347df51c68f12 (patch) | |
tree | b6d0bb946d279793d8c2e9f6fa1d6c285b6f2e54 | |
parent | 72fe3d258d24a087ba06b93bdb84308cfb6129c4 (diff) | |
download | gdb-55809acbfc09aa54b9bccba498a347df51c68f12.zip gdb-55809acbfc09aa54b9bccba498a347df51c68f12.tar.gz gdb-55809acbfc09aa54b9bccba498a347df51c68f12.tar.bz2 |
* Makefile.in (m68k-tdep.o, m68klinux-tdep.o): Update
dependencies.
* m68k-tdep.c (m68k_gdbarch_init): Call gdbarch_init_osabi at the
end.
* m68klinux-tdep.c (m68k_linux_init_abi): New function.
(_initialize_m68k_linux_tdep): New function.
(m68k_linux_frame_saved_pc): Make static.
(m68k_linux_extract_return_value): Likewise.
(m68k_linux_store_return_value): Likewise.
(m68k_linux_extract_struct_value_address): Likewise.
* config/m68k/tm-linux.h (DEPRECATED_EXTRACT_RETURN_VALUE):
Remove.
(DEPRECATED_STORE_RETURN_VALUE): Remove.
(DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS): Remove.
(DEPRECATED_FRAME_SAVED_PC): Remove.
-rw-r--r-- | gdb/ChangeLog | 18 | ||||
-rw-r--r-- | gdb/Makefile.in | 4 | ||||
-rw-r--r-- | gdb/config/m68k/tm-linux.h | 30 | ||||
-rw-r--r-- | gdb/m68k-tdep.c | 4 | ||||
-rw-r--r-- | gdb/m68klinux-tdep.c | 48 |
5 files changed, 66 insertions, 38 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f848cfd..f178886 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +2003-05-21 Andreas Schwab <schwab@suse.de> + + * Makefile.in (m68k-tdep.o, m68klinux-tdep.o): Update + dependencies. + * m68k-tdep.c (m68k_gdbarch_init): Call gdbarch_init_osabi at the + end. + * m68klinux-tdep.c (m68k_linux_init_abi): New function. + (_initialize_m68k_linux_tdep): New function. + (m68k_linux_frame_saved_pc): Make static. + (m68k_linux_extract_return_value): Likewise. + (m68k_linux_store_return_value): Likewise. + (m68k_linux_extract_struct_value_address): Likewise. + * config/m68k/tm-linux.h (DEPRECATED_EXTRACT_RETURN_VALUE): + Remove. + (DEPRECATED_STORE_RETURN_VALUE): Remove. + (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS): Remove. + (DEPRECATED_FRAME_SAVED_PC): Remove. + 2003-05-20 Kris Warkentin <kewarken@qnx.com> * nto-tdep.c (fetch_core_registers): Match gdb's idea of diff --git a/gdb/Makefile.in b/gdb/Makefile.in index b01642a..38be4f6 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1918,12 +1918,12 @@ m68hc11-tdep.o: m68hc11-tdep.c $(defs_h) $(frame_h) $(symtab_h) \ m68k-stub.o: m68k-stub.c m68k-tdep.o: m68k-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(gdbcore_h) \ $(value_h) $(gdb_string_h) $(inferior_h) $(regcache_h) \ - $(arch_utils_h) $(gregset_h) $(m68k_tdep_h) + $(arch_utils_h) $(gregset_h) $(osabi_h) $(m68k_tdep_h) m68klinux-nat.o: m68klinux-nat.c $(defs_h) $(frame_h) $(inferior_h) \ $(language_h) $(gdbcore_h) $(gdb_string_h) $(regcache_h) \ $(m68k_tdep_h) $(gdb_stat_h) $(floatformat_h) $(target_h) m68klinux-tdep.o: m68klinux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \ - $(target_h) $(gdb_string_h) $(gdbtypes_h) $(m68k_tdep_t) + $(target_h) $(gdb_string_h) $(gdbtypes_h) $(osabi_h) $(m68k_tdep_t) m68knbsd-nat.o: m68knbsd-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \ $(regcache_h) m68knbsd-tdep.o: m68knbsd-tdep.c $(defs_h) $(gdbtypes_h) $(regcache_h) diff --git a/gdb/config/m68k/tm-linux.h b/gdb/config/m68k/tm-linux.h index b11c418..636df0b 100644 --- a/gdb/config/m68k/tm-linux.h +++ b/gdb/config/m68k/tm-linux.h @@ -31,33 +31,6 @@ #define START_INFERIOR_TRAPS_EXPECTED 2 -/* The following definitions are appropriate when using the ELF - format, where floating point values are returned in fp0, pointer - values in a0 and other values in d0. */ - -/* Extract from an array REGBUF containing the (raw) register state a - function return value of type TYPE, and copy that, in virtual - format, into VALBUF. */ - -#define DEPRECATED_EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF) \ - m68k_linux_extract_return_value (TYPE, REGBUF, VALBUF) -extern void m68k_linux_extract_return_value (struct type *, char *, char *); - -/* Write into appropriate registers a function return value of type - TYPE, given in virtual format. */ - -#define DEPRECATED_STORE_RETURN_VALUE(TYPE, VALBUF) \ - m68k_linux_store_return_value (TYPE, VALBUF) -extern void m68k_linux_store_return_value (struct type *, char *); - -/* Extract from an array REGBUF containing the (raw) register state - the address in which a function should return its structure value, - as a CORE_ADDR (or an expression that can be used as one). */ - -#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \ - m68k_linux_extract_struct_value_address (REGBUF) -extern CORE_ADDR m68k_linux_extract_struct_value_address (char *); - /* Offsets (in target ints) into jmp_buf. */ #define JB_ELEMENT_SIZE 4 @@ -70,8 +43,5 @@ extern CORE_ADDR m68k_linux_extract_struct_value_address (char *); #define GET_LONGJMP_TARGET(ADDR) m68k_get_longjmp_target(ADDR) -#define DEPRECATED_FRAME_SAVED_PC(frame) m68k_linux_frame_saved_pc (frame) -extern CORE_ADDR m68k_linux_frame_saved_pc (struct frame_info *); - #define IN_SIGTRAMP(pc,name) m68k_linux_in_sigtramp (pc) extern int m68k_linux_in_sigtramp (CORE_ADDR pc); diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c index 71b33b4..087d0bb 100644 --- a/gdb/m68k-tdep.c +++ b/gdb/m68k-tdep.c @@ -29,6 +29,7 @@ #include "inferior.h" #include "regcache.h" #include "arch-utils.h" +#include "osabi.h" #include "m68k-tdep.h" @@ -1052,6 +1053,9 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Should be using push_dummy_call. */ set_gdbarch_deprecated_dummy_write_sp (gdbarch, generic_target_write_sp); + /* Hook in ABI-specific overrides, if they have been registered. */ + gdbarch_init_osabi (info, gdbarch); + return gdbarch; } diff --git a/gdb/m68klinux-tdep.c b/gdb/m68klinux-tdep.c index 752e58e..8b9193d 100644 --- a/gdb/m68klinux-tdep.c +++ b/gdb/m68klinux-tdep.c @@ -26,6 +26,7 @@ #include "target.h" #include "gdb_string.h" #include "gdbtypes.h" +#include "osabi.h" #include "m68k-tdep.h" /* Check whether insn1 and insn2 are parts of a signal trampoline. */ @@ -68,8 +69,8 @@ m68k_linux_in_sigtramp (CORE_ADDR pc) if (IS_RT_SIGTRAMP (insn0, insn1)) return 2; - insn0 = (insn0 << 16) | (insn1 >> 16); - insn1 = (insn1 << 16) | (insn2 >> 16); + insn0 = ((insn0 << 16) & 0xffffffff) | (insn1 >> 16); + insn1 = ((insn1 << 16) & 0xffffffff) | (insn2 >> 16); if (IS_SIGTRAMP (insn0, insn1)) return 1; if (IS_RT_SIGTRAMP (insn0, insn1)) @@ -118,7 +119,7 @@ m68k_linux_sigtramp_saved_pc (struct frame_info *frame) /* Return the saved program counter for FRAME. */ -CORE_ADDR +static CORE_ADDR m68k_linux_frame_saved_pc (struct frame_info *frame) { if (get_frame_type (frame) == SIGTRAMP_FRAME) @@ -127,7 +128,15 @@ m68k_linux_frame_saved_pc (struct frame_info *frame) return read_memory_unsigned_integer (get_frame_base (frame) + 4, 4); } -void +/* The following definitions are appropriate when using the ELF + format, where floating point values are returned in fp0, pointer + values in a0 and other values in d0. */ + +/* Extract from an array REGBUF containing the (raw) register state a + function return value of type TYPE, and copy that, in virtual + format, into VALBUF. */ + +static void m68k_linux_extract_return_value (struct type *type, char *regbuf, char *valbuf) { if (TYPE_CODE (type) == TYPE_CODE_FLT) @@ -145,7 +154,10 @@ m68k_linux_extract_return_value (struct type *type, char *regbuf, char *valbuf) TYPE_LENGTH (type)); } -void +/* Write into appropriate registers a function return value of type + TYPE, given in virtual format. */ + +static void m68k_linux_store_return_value (struct type *type, char *valbuf) { if (TYPE_CODE (type) == TYPE_CODE_FLT) @@ -164,8 +176,32 @@ m68k_linux_store_return_value (struct type *type, char *valbuf) } } -CORE_ADDR +/* Extract from an array REGBUF containing the (raw) register state + the address in which a function should return its structure value, + as a CORE_ADDR. */ + +static CORE_ADDR m68k_linux_extract_struct_value_address (char *regbuf) { return *(CORE_ADDR *) (regbuf + REGISTER_BYTE (M68K_A0_REGNUM)); } + +static void +m68k_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + set_gdbarch_deprecated_frame_saved_pc (gdbarch, + m68k_linux_frame_saved_pc); + set_gdbarch_deprecated_extract_return_value (gdbarch, + m68k_linux_extract_return_value); + set_gdbarch_deprecated_store_return_value (gdbarch, + m68k_linux_store_return_value); + set_gdbarch_deprecated_extract_struct_value_address (gdbarch, + m68k_linux_extract_struct_value_address); +} + +void +_initialize_m68k_linux_tdep (void) +{ + gdbarch_register_osabi (bfd_arch_m68k, 0, GDB_OSABI_LINUX, + m68k_linux_init_abi); +} |