* Makefile.in (rs6000-nat.o): Dependant on xcoffsolib.h.
authorFred Fish <fnf@specifix.com>
Thu, 2 May 1996 01:32:41 +0000 (01:32 +0000)
committerFred Fish <fnf@specifix.com>
Thu, 2 May 1996 01:32:41 +0000 (01:32 +0000)
* config/rs6000/rs6000.mh (NATDEPFILES): Move xcoffread.o ...
* config/rs6000/rs6000.mt (TDEPFILES): ... to here
* xcoffsolib.c (xcoff_relocate_symtab_hook): Define and initialize.
(solib_info): Call xcoff_relocate_symtab via the hook.
(sharedlibrary_command): Ditto.
* xcoffread.c: Remove all FAKING_RS6000 comments and defines.
(xcoff_add_toc_to_loadinfo_hook): Define and initialize here.
(xcoff_init_loadinfo_hook): Define and initialize here.
(scan_xcoff_symtab): Call xcoff_add_toc_to_loadinfo via the hook.
(xcoff_initial_scan): Call xcoff_init_loadinfo via the hook.
* xcoffsolib.h (xcoff_relocate_symtab_hook): Declare extern func.
* rs6000-tdep.c (_initialize_rs6000_tdep): Add initializations
of xcoff_add_toc_to_loadinfo_hook and xcoff_init_loadinfo_hook.
* rs6000-nat.c (_initialize_core_rs6000): Add initialization
of xcoff_relocate_symtab_hook.

gdb/ChangeLog
gdb/Makefile.in
gdb/rs6000-nat.c
gdb/rs6000-tdep.c
gdb/xcoffread.c
gdb/xcoffsolib.c
gdb/xcoffsolib.h

index e9db65f25ec75277a2445c9001a9a805e5391ff6..6d143eb3461f4d00c8a4421128fa8b4d445b69f5 100644 (file)
@@ -1,3 +1,22 @@
+Wed May  1 17:29:18 1996  Fred Fish  <fnf@cygnus.com>
+
+       * Makefile.in (rs6000-nat.o): Dependant on xcoffsolib.h.
+       * config/rs6000/rs6000.mh (NATDEPFILES): Move xcoffread.o ...
+       * config/rs6000/rs6000.mt (TDEPFILES): ... to here
+       * xcoffsolib.c (xcoff_relocate_symtab_hook): Define and initialize.
+       (solib_info): Call xcoff_relocate_symtab via the hook.
+       (sharedlibrary_command): Ditto.
+       * xcoffread.c: Remove all FAKING_RS6000 comments and defines.
+       (xcoff_add_toc_to_loadinfo_hook): Define and initialize here.
+       (xcoff_init_loadinfo_hook): Define and initialize here.
+       (scan_xcoff_symtab): Call xcoff_add_toc_to_loadinfo via the hook.
+       (xcoff_initial_scan): Call xcoff_init_loadinfo via the hook.
+       * xcoffsolib.h (xcoff_relocate_symtab_hook): Declare extern func.
+       * rs6000-tdep.c (_initialize_rs6000_tdep): Add initializations
+       of xcoff_add_toc_to_loadinfo_hook and xcoff_init_loadinfo_hook.
+       * rs6000-nat.c (_initialize_core_rs6000): Add initialization
+       of xcoff_relocate_symtab_hook.
+
 Tue Apr 30 13:22:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
        * configure (powerpcle-*-solaris*): Add Solaris support.
index 2752008124cfd9812c70ed0368f5d14db92a1bbe..cd6cf67bff43ba6dcbc8a3aadd51ebe2c3539af2 100644 (file)
@@ -1408,7 +1408,8 @@ remote-nrom.o: remote-nrom.c $(bfd_h) $(wait_h) $(defs_h) $(gdbcmd_h) \
 rom68k-rom.o: rom68k-rom.c monitor.h $(bfd_h) $(wait_h) $(defs_h) $(gdbcmd_h) \
        $(inferior_h) target.h serial.h terminal.h
 
-rs6000-nat.o: rs6000-nat.c $(bfd_h) $(defs_h) $(inferior_h) target.h
+rs6000-nat.o: rs6000-nat.c $(bfd_h) $(defs_h) $(inferior_h) target.h \
+       xcoffsolib.h
 
 rs6000-tdep.o: rs6000-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \
        target.h xcoffsolib.h
index b9ad387b05d44658fdea895b933108a07d157db4..5772fe0ab3de001d965f4861e63e3a9eac239f0b 100644 (file)
@@ -818,5 +818,9 @@ static struct core_fns rs6000_core_fns =
 void
 _initialize_core_rs6000 ()
 {
+  /* For native configurations, where this module is included, inform
+     the xcoffsolib module where it can find the function for symbol table
+     relocation at runtime. */
+  xcoff_relocate_symtab_hook = &xcoff_relocate_symtab;
   add_core_fns (&rs6000_core_fns);
 }
index 614a28264066e719bccdbfa5ce8da6576908d8b6..f2acdf6bc4954344fb8d04c00178d7469e249b95 100644 (file)
@@ -1268,6 +1268,21 @@ gdb_print_insn_powerpc (memaddr, info)
 void
 _initialize_rs6000_tdep ()
 {
+  /* Initialize hook in xcoffread for recording the toc offset value
+     of a symbol table into the ldinfo structure, for native rs6000
+     config. */
+  {
+    extern void (*xcoff_add_toc_to_loadinfo_hook) PARAMS ((unsigned long));
+    xcoff_add_toc_to_loadinfo_hook = &xcoff_add_toc_to_loadinfo;
+  }
+
+  /* Initialize hook in xcoffread for calling xcoff_init_loadinfo in
+     a native rs6000 config. */
+  {
+    extern void (*xcoff_init_loadinfo_hook) PARAMS ((void));
+    xcoff_init_loadinfo_hook = &xcoff_init_loadinfo;
+  }
+
   /* FIXME, this should not be decided via ifdef. */
 #ifdef GDB_TARGET_POWERPC
   tm_print_insn = gdb_print_insn_powerpc;
index 7704a5fba406a19ad9b664efabbc306bdd79ce3d..b0b96121b6e98d45223ceddaf1c0fce59070446d 100644 (file)
@@ -20,12 +20,6 @@ You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-/* RS/6000 and PowerPC only:
-   Needs xcoff_add_toc_to_loadinfo and xcoff_init_loadinfo in
-   rs6000-tdep.c from target.
-   However, if you define FAKING_RS6000, then this code will link with
-   any target.  */
-
 #include "defs.h"
 #include "bfd.h"
 
@@ -94,6 +88,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* This is output from LD.  */
 #define N_SETV 0x1C            /* Pointer to set vector in data area.  */
+
+/* Hook for recording the toc offset value of a symbol table into
+   the ldinfo structure. */
+
+void (*xcoff_add_toc_to_loadinfo_hook) PARAMS ((unsigned long)) = NULL;
+
+/* Hook for recording how to call xcoff_init_loadinfo for a native
+   rs6000 config only. */
+
+void (*xcoff_init_loadinfo_hook) PARAMS ((void)) = NULL;
+
 \f
 /* We put a pointer to this structure in the read_symtab_private field
    of the psymtab.  */
@@ -2570,9 +2575,8 @@ scan_xcoff_symtab (section_offsets, objfile)
      If no XMC_TC0 is found, toc_offset should be zero. Another place to obtain
      this information would be file auxiliary header. */
 
-#ifndef FAKING_RS6000
-  xcoff_add_toc_to_loadinfo (toc_offset);
-#endif
+  if (xcoff_add_toc_to_loadinfo_hook != NULL)
+    (*xcoff_add_toc_to_loadinfo_hook) ((unsigned long) toc_offset);
 }
 
 /* Scan and build partial symbols for a symbol file.
@@ -2601,11 +2605,9 @@ xcoff_initial_scan (objfile, section_offsets, mainline)
   char *name;
   unsigned int size;
 
-#ifndef FAKING_RS6000
   /* Initialize load info structure. */
-  if (mainline)
-    xcoff_init_loadinfo ();
-#endif
+  if (mainline && xcoff_init_loadinfo_hook != NULL)
+    (*xcoff_init_loadinfo_hook) ();
 
   info = (struct coff_symfile_info *) objfile -> sym_private;
   symfile_bfd = abfd = objfile->obfd;
index edcfda11a4d3cf899f091a4f0ade6b60ed9d6dea..45ed2b36da1d4ee84f4b0617453460b4aa5a5a26 100644 (file)
@@ -28,6 +28,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "xcoffsolib.h"
 #include "inferior.h"
 
+/* Hook to relocate symbols at runtime.  If gdb is build natively, this
+   hook is initialized in by rs6000-nat.c.  If not, it is currently left
+   NULL and never called. */
+
+void (*xcoff_relocate_symtab_hook) PARAMS ((unsigned int)) = NULL;
+
 #ifdef SOLIB_SYMBOLS_MANUAL
 
 extern struct symtab *current_source_symtab;
@@ -159,7 +165,8 @@ solib_info (args, from_tty)
   struct vmap *vp = vmap;
 
   /* Check for new shared libraries loaded with load ().  */
-  xcoff_relocate_symtab (inferior_pid);
+  if (xcoff_relocate_symtab_hook != NULL)
+    (*xcoff_relocate_symtab_hook) (inferior_pid);
 
   if (vp == NULL || vp->nxt == NULL)
     {
@@ -194,7 +201,8 @@ sharedlibrary_command (args, from_tty)
   dont_repeat ();
 
   /* Check for new shared libraries loaded with load ().  */
-  xcoff_relocate_symtab (inferior_pid);
+  if (xcoff_relocate_symtab_hook != NULL)
+    (*xcoff_relocate_symtab_hook) (inferior_pid);
 
 #ifdef SOLIB_SYMBOLS_MANUAL
   solib_add (args, from_tty, (struct target_ops *)0);
index 9d10b2e5d2d917e3826a9c78adc0124dd3638f44..2b75d22fecdce5eda41b3901cb750c61a9908111 100644 (file)
@@ -51,6 +51,9 @@ struct vmap_and_bfd {
 
 extern struct vmap *vmap;
 
-void
+extern void
 add_text_to_loadinfo PARAMS ((CORE_ADDR textaddr, CORE_ADDR dataaddr));
 
+/* Hook for symbol table relocation at runtime. */
+
+extern void (*xcoff_relocate_symtab_hook) PARAMS ((unsigned int));