This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Remove ia64-*-aix* support


Kevin Buettner <kevinb@redhat.com> writes:

> On Wed, 5 Jan 2005 00:04:39 +0100 (CET)
> Mark Kettenis <kettenis@gnu.org> wrote:
>
>> AIX for Itanium was never released, and its support has been removed
>> from BFD in July 2003.  I can't delete it all since for some reason
>> Linux includes ia64-aix-tdep.c, but this removes the obvious stuff.
>
> Thanks for doing this.
>
> I've just committed the patch below which eliminates ia64-aix-tdep.c. 
> I've done a test build of --target=ia64-linux, but have not actually
> run the testsuite with these changes.

Here is a followup patch to separate the ia64-linux parts out of
ia64-tdep.c and making it a proper OS ABI variant.  Tested on ia64-linux,
no regressions.

Andreas.

2005-01-05  Andreas Schwab  <schwab@suse.de>

	* ia64-tdep.c: Include "osabi.h".
	(native_find_global_pointer): Delete.
	(ia64_find_global_pointer): Renamed from
	generic_elf_find_global_pointer.
	(FIND_GLOBAL_POINTER): Delete.  Change all users to call
	ia64_find_global_pointer instead.
	(ia64_gdbarch_init): Call gdbarch_init_osabi.  Remove references
	to ia64_linux_sigcontext_register_address and
	ia64_linux_write_pc.  Don't set tdep->find_global_pointer.
	(_initialize_ia64_tdep): Call gdbarch_register instead of
	deprecated register_gdbarch_init.
	(struct gdbarch_tdep): Remove find_global_pointer field and move
	to ...
	* ia64-tdep.h (struct gdbarch_tdep): ... here.
	(ia64_linux_sigcontext_register_address): Remove declaration.
	(ia64_linux_getunwind_table): Likewise.
	(ia64_linux_write_pc): Likewise.
	* ia64-linux-tdep.c: Include "osabi.h".
	(ia64_linux_sigcontext_register_address): Make static.
	(ia64_linux_write_pc): Likewise.
	(ia64_linux_init_abi): New.
	(_initialize_ia64_linux_tdep): New.
	* Makefile.in (ia64-tdep.o, ia64-linux-tdep.o): Depend on
	$(osabi_h).

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.682
diff -u -p -a -r1.682 Makefile.in
--- Makefile.in	5 Jan 2005 17:01:57 -0000	1.682
+++ Makefile.in	5 Jan 2005 19:02:54 -0000
@@ -1,5 +1,5 @@
 # Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-# 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation,
+# 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
 # Inc.
 
 # This file is part of GDB.
@@ -2054,13 +2054,13 @@ i387-tdep.o: i387-tdep.c $(defs_h) $(dou
 ia64-linux-nat.o: ia64-linux-nat.c $(defs_h) $(gdb_string_h) $(inferior_h) \
 	$(target_h) $(gdbcore_h) $(regcache_h) $(gdb_wait_h) $(gregset_h)
 ia64-linux-tdep.o: ia64-linux-tdep.c $(defs_h) $(ia64_tdep_h) \
-	$(arch_utils_h) $(gdbcore_h) $(regcache_h)
+	$(arch_utils_h) $(gdbcore_h) $(regcache_h) $(osabi_h)
 ia64-tdep.o: ia64-tdep.c $(defs_h) $(inferior_h) $(gdbcore_h) \
 	$(arch_utils_h) $(floatformat_h) $(regcache_h) $(reggroups_h) \
 	$(frame_h) $(frame_base_h) $(frame_unwind_h) $(doublest_h) \
 	$(value_h) $(gdb_assert_h) $(objfiles_h) $(elf_common_h) \
 	$(elf_bfd_h) $(dis_asm_h) $(infcall_h) $(ia64_tdep_h) $(elf_ia64_h) \
-	$(libunwind_frame_h) $(libunwind_ia64_h)
+	$(libunwind_frame_h) $(libunwind_ia64_h) $(osabi_h)
 infcall.o: infcall.c $(defs_h) $(breakpoint_h) $(target_h) $(regcache_h) \
 	$(inferior_h) $(gdb_assert_h) $(block_h) $(gdbcore_h) $(language_h) \
 	$(objfiles_h) $(gdbcmd_h) $(command_h) $(gdb_string_h) $(infcall_h) \
Index: ia64-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ia64-linux-tdep.c,v
retrieving revision 1.7
diff -u -p -a -r1.7 ia64-linux-tdep.c
--- ia64-linux-tdep.c	24 Feb 2004 22:35:01 -0000	1.7
+++ ia64-linux-tdep.c	5 Jan 2005 19:02:54 -0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
 
-   Copyright 2000, 2004 Free Software Foundation, Inc.
+   Copyright 2000, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -24,6 +24,7 @@
 #include "arch-utils.h"
 #include "gdbcore.h"
 #include "regcache.h"
+#include "osabi.h"
 
 /* The sigtramp code is in a non-readable (executable-only) region
    of memory called the ``gate page''.  The addresses in question
@@ -47,7 +48,7 @@ ia64_linux_in_sigtramp (CORE_ADDR pc, ch
    found.  0 is returned for registers which aren't stored in the the
    sigcontext structure. */
 
-CORE_ADDR
+static CORE_ADDR
 ia64_linux_sigcontext_register_address (CORE_ADDR sp, int regno)
 {
   char buf[8];
@@ -96,7 +97,7 @@ ia64_linux_sigcontext_register_address (
       }
 }
 
-void
+static void
 ia64_linux_write_pc (CORE_ADDR pc, ptid_t ptid)
 {
   ia64_write_pc (pc, ptid);
@@ -112,3 +113,22 @@ ia64_linux_write_pc (CORE_ADDR pc, ptid_
      called as part of setting up an inferior call.  */
   write_register_pid (IA64_GR10_REGNUM, 0, ptid);
 }
+
+static void
+ia64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  /* Set the method of obtaining the sigcontext addresses at which
+     registers are saved.  */
+  tdep->sigcontext_register_address = ia64_linux_sigcontext_register_address;
+
+  set_gdbarch_write_pc (gdbarch, ia64_linux_write_pc);
+}
+
+void
+_initialize_ia64_linux_tdep (void)
+{
+  gdbarch_register_osabi (bfd_arch_ia64, 0, GDB_OSABI_LINUX,
+			  ia64_linux_init_abi);
+}
Index: ia64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ia64-tdep.c,v
retrieving revision 1.126
diff -u -p -a -r1.126 ia64-tdep.c
--- ia64-tdep.c	5 Jan 2005 17:01:58 -0000	1.126
+++ ia64-tdep.c	5 Jan 2005 19:02:54 -0000
@@ -38,6 +38,7 @@
 #include "elf-bfd.h"
 #include "dis-asm.h"
 #include "infcall.h"
+#include "osabi.h"
 #include "ia64-tdep.h"
 
 #ifdef HAVE_LIBUNWIND_IA64_H
@@ -46,17 +47,6 @@
 #include "libunwind-ia64.h"
 #endif
 
-/* Hook for determining the global pointer when calling functions in
-   the inferior under AIX.  The initialization code in ia64-aix-nat.c
-   sets this hook to the address of a function which will find the
-   global pointer for a given address.  
-   
-   The generic code which uses the dynamic section in the inferior for
-   finding the global pointer is not of much use on AIX since the
-   values obtained from the inferior have not been relocated.  */
-
-CORE_ADDR (*native_find_global_pointer) (CORE_ADDR) = 0;
-
 /* An enumeration of the different IA-64 instruction types.  */
 
 typedef enum instruction_type
@@ -100,6 +90,7 @@ static gdbarch_breakpoint_from_pc_ftype 
 static gdbarch_skip_prologue_ftype ia64_skip_prologue;
 static gdbarch_extract_return_value_ftype ia64_extract_return_value;
 static struct type *is_float_or_hfa_type (struct type *t);
+static CORE_ADDR ia64_find_global_pointer (CORE_ADDR faddr);
 
 static struct type *builtin_type_ia64_ext;
 
@@ -256,19 +247,8 @@ struct ia64_frame_cache
 
 };
 
-struct gdbarch_tdep
-  {
-    CORE_ADDR (*sigcontext_register_address) (CORE_ADDR, int);
-    			/* OS specific function which, given a frame address
-			   and register number, returns the offset to the
-			   given register from the start of the frame. */
-    CORE_ADDR (*find_global_pointer) (CORE_ADDR);
-  };
-
 #define SIGCONTEXT_REGISTER_ADDRESS \
   (gdbarch_tdep (current_gdbarch)->sigcontext_register_address)
-#define FIND_GLOBAL_POINTER \
-  (gdbarch_tdep (current_gdbarch)->find_global_pointer)
 
 int
 ia64_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
@@ -2421,7 +2401,7 @@ ia64_find_unwind_table (struct objfile *
 
   dip->start_ip = segbase;
   dip->end_ip = dip->start_ip + p_text->p_memsz;
-  dip->gp = FIND_GLOBAL_POINTER (ip);
+  dip->gp = ia64_find_global_pointer (ip);
   dip->format = UNW_INFO_FORMAT_REMOTE_TABLE;
   dip->u.rti.name_ptr = (unw_word_t) bfd_get_filename (bfd);
   dip->u.rti.segbase = segbase;
@@ -2863,7 +2843,7 @@ slot_alignment_is_next_even (struct type
    d_un.d_ptr value is the global pointer.  */
 
 static CORE_ADDR
-generic_elf_find_global_pointer (CORE_ADDR faddr)
+ia64_find_global_pointer (CORE_ADDR faddr)
 {
   struct obj_section *faddr_sect;
      
@@ -2984,7 +2964,7 @@ find_func_descr (CORE_ADDR faddr, CORE_A
       fdesc = *fdaptr;
       *fdaptr += 16;
 
-      global_pointer = FIND_GLOBAL_POINTER (faddr);
+      global_pointer = ia64_find_global_pointer (faddr);
 
       if (global_pointer == 0)
 	global_pointer = read_register (IA64_GR1_REGNUM);
@@ -3168,7 +3148,7 @@ ia64_push_dummy_call (struct gdbarch *gd
       regcache_cooked_write_unsigned (regcache, IA64_GR8_REGNUM, (ULONGEST)struct_addr);
     }
 
-  global_pointer = FIND_GLOBAL_POINTER (func_addr);
+  global_pointer = ia64_find_global_pointer (func_addr);
 
   if (global_pointer != 0)
     write_register (IA64_GR1_REGNUM, global_pointer);
@@ -3261,29 +3241,7 @@ ia64_gdbarch_init (struct gdbarch_info i
   tdep = xmalloc (sizeof (struct gdbarch_tdep));
   gdbarch = gdbarch_alloc (&info, tdep);
 
-  /* Set the method of obtaining the sigcontext addresses at which
-     registers are saved.  The method of checking to see if
-     native_find_global_pointer is nonzero to indicate that we're
-     on AIX is kind of hokey, but I can't think of a better way
-     to do it.  */
-  if (info.osabi == GDB_OSABI_LINUX)
-    tdep->sigcontext_register_address = ia64_linux_sigcontext_register_address;
-  else
-    tdep->sigcontext_register_address = 0;
-
-  /* We know that GNU/Linux won't have to resort to the
-     native_find_global_pointer hackery.  But that's the only one we
-     know about so far, so if native_find_global_pointer is set to
-     something non-zero, then use it.  Otherwise fall back to using
-     generic_elf_find_global_pointer.  This arrangement should (in
-     theory) allow us to cross debug GNU/Linux binaries from an AIX
-     machine.  */
-  if (info.osabi == GDB_OSABI_LINUX)
-    tdep->find_global_pointer = generic_elf_find_global_pointer;
-  else if (native_find_global_pointer != 0)
-    tdep->find_global_pointer = native_find_global_pointer;
-  else
-    tdep->find_global_pointer = generic_elf_find_global_pointer;
+  tdep->sigcontext_register_address = 0;
 
   /* Define the ia64 floating-point format to gdb.  */
   builtin_type_ia64_ext =
@@ -3341,10 +3299,7 @@ ia64_gdbarch_init (struct gdbarch_info i
   set_gdbarch_memory_remove_breakpoint (gdbarch, ia64_memory_remove_breakpoint);
   set_gdbarch_breakpoint_from_pc (gdbarch, ia64_breakpoint_from_pc);
   set_gdbarch_read_pc (gdbarch, ia64_read_pc);
-  if (info.osabi == GDB_OSABI_LINUX)
-    set_gdbarch_write_pc (gdbarch, ia64_linux_write_pc);
-  else
-    set_gdbarch_write_pc (gdbarch, ia64_write_pc);
+  set_gdbarch_write_pc (gdbarch, ia64_write_pc);
 
   /* Settings for calling functions in the inferior.  */
   set_gdbarch_push_dummy_call (gdbarch, ia64_push_dummy_call);
@@ -3369,6 +3324,9 @@ ia64_gdbarch_init (struct gdbarch_info i
   set_gdbarch_print_insn (gdbarch, ia64_print_insn);
   set_gdbarch_convert_from_func_ptr_addr (gdbarch, ia64_convert_from_func_ptr_addr);
 
+  /* Hook in ABI-specific overrides, if they have been registered.  */
+  gdbarch_init_osabi (info, gdbarch);
+
   return gdbarch;
 }
 
@@ -3377,5 +3335,5 @@ extern initialize_file_ftype _initialize
 void
 _initialize_ia64_tdep (void)
 {
-  register_gdbarch_init (bfd_arch_ia64, ia64_gdbarch_init);
+  gdbarch_register (bfd_arch_ia64, ia64_gdbarch_init, NULL);
 }
Index: ia64-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/ia64-tdep.h,v
retrieving revision 1.3
diff -u -p -a -r1.3 ia64-tdep.h
--- ia64-tdep.h	5 Jan 2005 17:01:59 -0000	1.3
+++ ia64-tdep.h	5 Jan 2005 19:02:54 -0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the ia64.
 
-   Copyright 2004 Free Software Foundation, Inc.
+   Copyright 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,9 +22,11 @@
 #ifndef IA64_TDEP_H
 #define IA64_TDEP_H
 
-extern CORE_ADDR ia64_linux_sigcontext_register_address (CORE_ADDR, int);
-extern unsigned long ia64_linux_getunwind_table (void *, size_t);
+struct gdbarch_tdep
+{
+  CORE_ADDR (*sigcontext_register_address) (CORE_ADDR, int);
+};
+
 extern void ia64_write_pc (CORE_ADDR, ptid_t);
-extern void ia64_linux_write_pc (CORE_ADDR, ptid_t);
 
 #endif /* IA64_TDEP_H */

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]