diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-24 21:18:52 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-24 21:18:52 +0000 |
commit | 59215afbea47b0845a7fe36534c37e7ce02065bf (patch) | |
tree | 28e5a7a7adb90271738820b1cde589c60420bbf3 /gdb/i386-nto-tdep.c | |
parent | 4bd1a3c93195c4a5d29094ae4242ba9fef9fdf7a (diff) | |
download | gdb-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.c | 25 |
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); } |