aboutsummaryrefslogtreecommitdiff
path: root/gdb/i386-nto-tdep.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2007-10-24 21:18:52 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2007-10-24 21:18:52 +0000
commit59215afbea47b0845a7fe36534c37e7ce02065bf (patch)
tree28e5a7a7adb90271738820b1cde589c60420bbf3 /gdb/i386-nto-tdep.c
parent4bd1a3c93195c4a5d29094ae4242ba9fef9fdf7a (diff)
downloadgdb-59215afbea47b0845a7fe36534c37e7ce02065bf.zip
gdb-59215afbea47b0845a7fe36534c37e7ce02065bf.tar.gz
gdb-59215afbea47b0845a7fe36534c37e7ce02065bf.tar.bz2
* 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.
Diffstat (limited to 'gdb/i386-nto-tdep.c')
-rw-r--r--gdb/i386-nto-tdep.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/gdb/i386-nto-tdep.c b/gdb/i386-nto-tdep.c
index 19729b6..1f04946 100644
--- a/gdb/i386-nto-tdep.c
+++ b/gdb/i386-nto-tdep.c
@@ -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 info, struct gdbarch *gdbarch)
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;
+ /* 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 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. */
- TARGET_SO_FIND_AND_OPEN_SOLIB = nto_find_and_open_solib;
+ /* 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. */
- TARGET_SO_IN_DYNSYM_RESOLVE_CODE = nto_in_dynsym_resolve_code;
+ /* 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);
}