Add cross platform SVR4 shared library support for PowerPC.
authorKevin Buettner <kevinb@redhat.com>
Sat, 1 Dec 2001 00:25:08 +0000 (00:25 +0000)
committerKevin Buettner <kevinb@redhat.com>
Sat, 1 Dec 2001 00:25:08 +0000 (00:25 +0000)
15 files changed:
gdb/ChangeLog
gdb/config/powerpc/aix.mt
gdb/config/powerpc/macos.mt
gdb/config/powerpc/nbsd.mt
gdb/config/powerpc/ppc-eabi.mt
gdb/config/powerpc/ppc-sim.mt
gdb/config/powerpc/ppcle-eabi.mt
gdb/config/powerpc/ppcle-sim.mt
gdb/config/powerpc/vxworks.mt
gdb/config/rs6000/aix4.mt
gdb/config/rs6000/rs6000.mt
gdb/config/rs6000/rs6000lynx.mt
gdb/ppc-linux-tdep.c
gdb/ppc-tdep.h
gdb/rs6000-tdep.c

index aa767ca..3d6c370 100644 (file)
@@ -1,5 +1,26 @@
 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>:
        * arm-tdep.c (solib-svr4.h): Include.
        (arm_linux_svr4_fetch_link_map_offsets): New function.
index 985f71b..51bb625 100644 (file)
@@ -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
index 061d9d6..31a4fdf 100644 (file)
@@ -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
index acc5da8..46e6541 100644 (file)
@@ -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
index 2751e1d..2d4a77f 100644 (file)
@@ -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
index a647cad..f2ad1f0 100644 (file)
@@ -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
index 202c6b1..e748097 100644 (file)
@@ -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
index e3be0d8..558c0dc 100644 (file)
@@ -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
index 11d8ef2..ba6e17b 100644 (file)
@@ -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
index f1082b3..fb9d003 100644 (file)
@@ -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
index a9afe89..5ffcc01 100644 (file)
@@ -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
index fae6d8c..69aeb60 100644 (file)
@@ -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
index 06fc294..fb60385 100644 (file)
@@ -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;
+}
index e855223..9ed1567 100644 (file)
@@ -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... */
index 12c6ed5..4450070 100644 (file)
@@ -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
     {