* 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.
This commit is contained in:
Fred Fish 1996-05-02 01:32:41 +00:00
parent 0a0d1bdd6e
commit 062cb0d30d
7 changed files with 69 additions and 17 deletions

View 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.

View 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

View 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);
}

View 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;

View 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;
/* 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;

View 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);

View 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));