This is the mail archive of the gdb-patches@sourceware.org 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]

[6/8] solib handler rework: clean up nto target


Hello,

this removes some direct accesses to current_target_so_ops from 
i386-nto-tdep.c.  Instead of overwriting that global, the code
now creates and installs a private target_so_ops structure, 
similar to what mips-linux does.

Bye,
Ulrich


ChangeLog:

	* i386-nto-tdep.c: Include "solib.h".
	(i386nto_init_abi): Use set_solib_ops instead of overwriting
	current_target_so_ops members.
	* solist.h (TARGET_SO_RELOCATE_SECTION_ADDRESSES): Remove.
	(TARGET_SO_FIND_AND_OPEN_SOLIB): Remove.
	(TARGET_SO_IN_DYNSYM_RESOLVE_CODE): Remove.
	* Makefile.in: Update dependencies.

diff -urNp gdb-orig/gdb/Makefile.in gdb-head/gdb/Makefile.in
--- gdb-orig/gdb/Makefile.in	2007-10-16 00:55:56.000000000 +0200
+++ gdb-head/gdb/Makefile.in	2007-10-16 00:57:36.000000000 +0200
@@ -2157,7 +2157,8 @@ i386nbsd-tdep.o: i386nbsd-tdep.c $(defs_
 	$(nbsd_tdep_h) $(solib_svr4_h)
 i386-nto-tdep.o: i386-nto-tdep.c $(defs_h) $(frame_h) $(osabi_h) \
 	$(regcache_h) $(target_h) $(gdb_assert_h) $(gdb_string_h) \
-	$(i386_tdep_h) $(i387_tdep_h) $(nto_tdep_h) $(solib_svr4_h)
+	$(i386_tdep_h) $(i387_tdep_h) $(nto_tdep_h) $(solib_h) \
+	$(solib_svr4_h)
 i386obsd-nat.o: i386obsd-nat.c $(defs_h) $(gdbcore_h) $(regcache_h) \
 	$(target_h) $(i386_tdep_h) $(i386bsd_nat_h) $(bsd_kvm_h)
 i386obsd-tdep.o: i386obsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \
diff -urNp gdb-orig/gdb/i386-nto-tdep.c gdb-head/gdb/i386-nto-tdep.c
--- gdb-orig/gdb/i386-nto-tdep.c	2007-10-15 23:35:36.000000000 +0200
+++ gdb-head/gdb/i386-nto-tdep.c	2007-10-16 00:57:20.000000000 +0200
@@ -31,6 +31,7 @@
 #include "i386-tdep.h"
 #include "i387-tdep.h"
 #include "nto-tdep.h"
+#include "solib.h"
 #include "solib-svr4.h"
 
 /* Target vector for QNX NTO x86.  */
@@ -251,6 +252,7 @@ static void
 i386nto_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  static struct target_so_ops nto_svr4_so_ops;
 
   /* Deal with our strange signals.  */
   nto_initialize_signals ();
@@ -277,14 +279,25 @@ i386nto_init_abi (struct gdbarch_info in
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
 
-  /* Our loader handles solib relocations slightly differently than svr4.  */
-  TARGET_SO_RELOCATE_SECTION_ADDRESSES = nto_relocate_section_addresses;
-
-  /* Supply a nice function to find our solibs.  */
-  TARGET_SO_FIND_AND_OPEN_SOLIB = nto_find_and_open_solib;
+  /* Initialize this lazily, to avoid an initialization order
+     dependency on solib-svr4.c's _initialize routine.  */
+  if (nto_svr4_so_ops.in_dynsym_resolve_code == NULL)
+    {
+      nto_svr4_so_ops = svr4_so_ops;
 
-  /* Our linker code is in libc.  */
-  TARGET_SO_IN_DYNSYM_RESOLVE_CODE = nto_in_dynsym_resolve_code;
+      /* Our loader handles solib relocations differently than svr4.  */
+      nto_svr4_so_ops.relocate_section_addresses
+        = nto_relocate_section_addresses;
+
+      /* Supply a nice function to find our solibs.  */
+      nto_svr4_so_ops.find_and_open_solib
+        = nto_find_and_open_solib;
+
+      /* Our linker code is in libc.  */
+      nto_svr4_so_ops.in_dynsym_resolve_code
+        = nto_in_dynsym_resolve_code;
+    }
+  set_solib_ops (gdbarch, &nto_svr4_so_ops);
 
   nto_set_target (&i386_nto_target);
 }
diff -urNp gdb-orig/gdb/solist.h gdb-head/gdb/solist.h
--- gdb-orig/gdb/solist.h	2007-10-15 23:32:37.000000000 +0200
+++ gdb-head/gdb/solist.h	2007-10-16 00:56:28.000000000 +0200
@@ -129,13 +129,6 @@ extern int solib_open (char *in_pathname
 /* FIXME: gdbarch needs to control this variable */
 extern struct target_so_ops *current_target_so_ops;
 
-#define TARGET_SO_RELOCATE_SECTION_ADDRESSES \
-  (current_target_so_ops->relocate_section_addresses)
-#define TARGET_SO_FIND_AND_OPEN_SOLIB \
-  (current_target_so_ops->find_and_open_solib)
-#define TARGET_SO_IN_DYNSYM_RESOLVE_CODE \
-  (current_target_so_ops->in_dynsym_resolve_code)
-
 /* Handler for library-specific global symbol lookup in solib.c.  */
 struct symbol *solib_global_lookup (const struct objfile *objfile,
 				    const char *name,
-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


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