* xcoffexec.c (vmap_exec): Don't assume .text and .data are the
authorStu Grossman <grossman@cygnus>
Sat, 9 May 1992 21:49:28 +0000 (21:49 +0000)
committerStu Grossman <grossman@cygnus>
Sat, 9 May 1992 21:49:28 +0000 (21:49 +0000)
first two sections.

gdb/ChangeLog
gdb/xcoffexec.c

index 2a1ba6de87175907116c6e20f23876d92aa52388..889d3d5b4d8bcb5411bfc8d599155371b6378657 100644 (file)
@@ -1,3 +1,8 @@
+Sat May  9 14:47:28 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * xcoffexec.c (vmap_exec):  Don't assume .text and .data are the
+       first two sections.
+
 Fri May  8 11:42:15 1992  Per Bothner  (bothner@rtl.cygnus.com)
 
        * mipsread.c (parse_procedure):  Return rather than using
index 8e4322fe801d56db27de8a17df22be2244e2e73a..ce8040a54a5560276a2f9ca4025eefbab2340d9a 100644 (file)
@@ -629,24 +629,29 @@ register struct ld_info *ldi; {
 vmap_exec ()
 {
   static bfd *execbfd;
+  int i;
+
   if (execbfd == exec_bfd)
     return;
 
   execbfd = exec_bfd;
 
-  /* First exec section is `.text', second is `.data'. If this is changed,
-     then this routine will choke. */
-
-  if (!vmap || !exec_ops.to_sections ||
-       strcmp (exec_ops.to_sections[0].sec_ptr->name, ".text") ||
-       strcmp (exec_ops.to_sections[1].sec_ptr->name, ".data"))
+  if (!vmap || !exec_ops.to_sections)
+    error ("vmap_exec: vmap or exec_ops.to_sections == 0\n");
 
-    fatal ("aix: Improper exec_ops sections.");
-
-  exec_ops.to_sections [0].addr += vmap->tstart;
-  exec_ops.to_sections [0].endaddr += vmap->tstart;
-  exec_ops.to_sections [1].addr += vmap->dstart;
-  exec_ops.to_sections [1].endaddr += vmap->dstart;
+  for (i=0; &exec_ops.to_sections[i] < exec_ops.to_sections_end; i++)
+    {
+      if (strcmp(".text", exec_ops.to_sections[i].sec_ptr->name) == 0)
+       {
+         exec_ops.to_sections[i].addr += vmap->tstart;
+         exec_ops.to_sections[i].endaddr += vmap->tstart;
+       }
+      else if (strcmp(".data", exec_ops.to_sections[i].sec_ptr->name) == 0)
+       {
+         exec_ops.to_sections[i].addr += vmap->dstart;
+         exec_ops.to_sections[i].endaddr += vmap->dstart;
+       }
+    }
 }