Add cross platform SVR4 shared library support for PowerPC.
This commit is contained in:
parent
7e74fa0edf
commit
6ded7999cd
15 changed files with 77 additions and 11 deletions
|
@ -1,3 +1,24 @@
|
|||
2001-11-30 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* ppc-linux-tdep.c (solib-svr4.h): Include.
|
||||
(ppc_linux_svr4_fetch_link_map_offsets): New function.
|
||||
* ppc-tdep.h (ppc_linux_svr4_fetch_link_map_offsets): Declare.
|
||||
* rs6000-tdep.c (solib-svr4.h): Include.
|
||||
(rs6000_gdbarch_init): Set up ppc_linux_svr4_fetch_link_map_offsets()
|
||||
as the link map offsets fetcher.
|
||||
|
||||
* config/powerpc/aix.mt (TDEPFILES): Add solib-svr4.o.
|
||||
* config/powerpc/macos.mt (TDEPFILES): Likewise.
|
||||
* config/powerpc/nbsd.mt (TDEPFILES): Likewise.
|
||||
* config/powerpc/ppc-eabi.mt (TDEPFILES): Likewise.
|
||||
* config/powerpc/ppc-sim.mt (TDEPFILES): Likewise.
|
||||
* config/powerpc/ppcle-eabi.mt (TDEPFILES): Likewise.
|
||||
* config/powerpc/ppcle-sim.mt (TDEPFILES): Likewise.
|
||||
* config/powerpc/vxworks.mt (TDEPFILES): Likewise.
|
||||
* config/rs6000/aix4.mt (TDEPFILES): Likewise.
|
||||
* config/rs6000/rs6000.mt (TDEPFILES): Likewise.
|
||||
* config/rs6000/rs6000lynx.mt (TDEPFILES): Likewise.
|
||||
|
||||
2001-11-30 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
From Louis Hamilton <hamilton@redhat.com>:
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: PowerPC running AIX
|
||||
TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-ppc-aix.h
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: PowerMac (PowerPC running MacOS)
|
||||
TDEPFILES= rs6000-tdep.o xcoffread.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o xcoffread.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-macos.h
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Target: PowerPC, running NetBSD
|
||||
TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-nbsd.h
|
||||
|
||||
GDBSERVER_DEPFILES= low-nbsd.o
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: PowerPC running eabi
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o dink32-rom.o ppc-bdm.o ocd.o remote-sds.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o dink32-rom.o ppc-bdm.o ocd.o remote-sds.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-ppc-eabi.h
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Target: PowerPC running eabi and including the simulator
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o dink32-rom.o ppc-bdm.o ocd.o remote-sds.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o dink32-rom.o ppc-bdm.o ocd.o remote-sds.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-ppc-eabi.h
|
||||
|
||||
SIM_OBS = remote-sim.o
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: PowerPC running eabi in little endian mode
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-ppcle-eabi.h
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Target: PowerPC running eabi in little endian mode under the simulator
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-ppcle-eabi.h
|
||||
|
||||
SIM_OBS = remote-sim.o
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: Powerpc running VxWorks
|
||||
TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-vxworks.h
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: IBM RS/6000 running AIX4
|
||||
TDEPFILES= rs6000-tdep.o xcoffread.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o xcoffread.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-rs6000-aix4.h
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: IBM RS/6000 running AIX
|
||||
TDEPFILES= rs6000-tdep.o xcoffread.o ppc-linux-tdep.o
|
||||
TDEPFILES= rs6000-tdep.o xcoffread.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-rs6000.h
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Target: IBM RS6000 running LynxOS
|
||||
TDEPFILES= coff-solib.o rs6000-tdep.o ppc-linux-tdep.o
|
||||
TDEPFILES= coff-solib.o rs6000-tdep.o ppc-linux-tdep.o solib.o solib-svr4.o
|
||||
TM_FILE= tm-rs6000ly.h
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "regcache.h"
|
||||
#include "value.h"
|
||||
|
||||
#include "solib-svr4.h"
|
||||
#include "ppc-tdep.h"
|
||||
|
||||
/* The following two instructions are used in the signal trampoline
|
||||
|
@ -763,3 +764,43 @@ ppc_linux_memory_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
|
|||
|
||||
return val;
|
||||
}
|
||||
|
||||
/* Fetch (and possibly build) an appropriate link_map_offsets
|
||||
structure for Linux/PPC targets using the struct offsets
|
||||
defined in link.h (but without actual reference to that file).
|
||||
|
||||
This makes it possible to access Linux/PPC shared libraries from a
|
||||
GDB that was not built on an Linux/PPC host (for cross debugging). */
|
||||
|
||||
struct link_map_offsets *
|
||||
ppc_linux_svr4_fetch_link_map_offsets (void)
|
||||
{
|
||||
static struct link_map_offsets lmo;
|
||||
static struct link_map_offsets *lmp = NULL;
|
||||
|
||||
if (lmp == NULL)
|
||||
{
|
||||
lmp = &lmo;
|
||||
|
||||
lmo.r_debug_size = 8; /* The actual size is 20 bytes, but
|
||||
this is all we need. */
|
||||
lmo.r_map_offset = 4;
|
||||
lmo.r_map_size = 4;
|
||||
|
||||
lmo.link_map_size = 20; /* The actual size is 560 bytes, but
|
||||
this is all we need. */
|
||||
lmo.l_addr_offset = 0;
|
||||
lmo.l_addr_size = 4;
|
||||
|
||||
lmo.l_name_offset = 4;
|
||||
lmo.l_name_size = 4;
|
||||
|
||||
lmo.l_next_offset = 12;
|
||||
lmo.l_next_size = 4;
|
||||
|
||||
lmo.l_prev_offset = 16;
|
||||
lmo.l_prev_size = 4;
|
||||
}
|
||||
|
||||
return lmp;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ CORE_ADDR ppc_linux_frame_chain (struct frame_info *);
|
|||
CORE_ADDR ppc_sysv_abi_push_arguments (int, struct value **, CORE_ADDR, int,
|
||||
CORE_ADDR);
|
||||
int ppc_linux_memory_remove_breakpoint (CORE_ADDR addr, char *contents_cache);
|
||||
struct link_map_offsets *ppc_linux_svr4_fetch_link_map_offsets (void);
|
||||
|
||||
|
||||
/* From rs6000-tdep.c... */
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
|
||||
#include "elf-bfd.h"
|
||||
|
||||
#include "solib-svr4.h"
|
||||
#include "ppc-tdep.h"
|
||||
|
||||
/* If the kernel has to deliver a signal, it pushes a sigcontext
|
||||
|
@ -2333,6 +2334,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
|
||||
set_gdbarch_memory_remove_breakpoint (gdbarch,
|
||||
ppc_linux_memory_remove_breakpoint);
|
||||
set_solib_svr4_fetch_link_map_offsets
|
||||
(gdbarch, ppc_linux_svr4_fetch_link_map_offsets);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue