* spu-linux-nat.c (spu_bfd_open): Set filename of in-memory
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 3 Apr 2009 14:37:57 +0000 (14:37 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Fri, 3 Apr 2009 14:37:57 +0000 (14:37 +0000)
BFD to contents of SPU name note.
(spu_symbol_file_add_from_memory): Call symbol_file_add_from_bfd
with "from_tty" argument 1 instead of 0.

gdb/ChangeLog
gdb/spu-linux-nat.c

index 94373ab..ca80247 100644 (file)
@@ -1,3 +1,10 @@
+2009-04-93  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * spu-linux-nat.c (spu_bfd_open): Set filename of in-memory
+       BFD to contents of SPU name note.
+       (spu_symbol_file_add_from_memory): Call symbol_file_add_from_bfd
+       with "from_tty" argument 1 instead of 0.
+
 2009-04-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * dwarf2read.c
index 372bbee..3b1e337 100644 (file)
@@ -308,6 +308,7 @@ static bfd *
 spu_bfd_open (ULONGEST addr)
 {
   struct bfd *nbfd;
+  asection *spu_name;
 
   ULONGEST *open_closure = xmalloc (sizeof (ULONGEST));
   *open_closure = addr;
@@ -325,6 +326,22 @@ spu_bfd_open (ULONGEST addr)
       return NULL;
     }
 
+  /* Retrieve SPU name note and update BFD name.  */
+  spu_name = bfd_get_section_by_name (nbfd, ".note.spu_name");
+  if (spu_name)
+    {
+      int sect_size = bfd_section_size (nbfd, spu_name);
+      if (sect_size > 20)
+       {
+         char *buf = alloca (sect_size - 20 + 1);
+         bfd_get_section_contents (nbfd, spu_name, buf, 20, sect_size - 20);
+         buf[sect_size - 20] = '\0';
+
+         xfree ((char *)nbfd->filename);
+         nbfd->filename = xstrdup (buf);
+       }
+    }
+
   return nbfd;
 }
 
@@ -355,7 +372,7 @@ spu_symbol_file_add_from_memory (int inferior_fd)
   /* Open BFD representing SPE executable and read its symbols.  */
   nbfd = spu_bfd_open (addr);
   if (nbfd)
-    symbol_file_add_from_bfd (nbfd, 0, NULL, 1, 0);
+    symbol_file_add_from_bfd (nbfd, 1, NULL, 1, 0);
 }