]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2005-09-07 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 7 Sep 2005 16:25:35 +0000 (16:25 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 7 Sep 2005 16:25:35 +0000 (16:25 +0000)
* readelf.c (get_elf_section_flags): Handle 64bit sh_flags.

binutils/ChangeLog
binutils/readelf.c

index a3f9b0e47ee372566de4743c29fcede24b9982a7..8b24182dbac84db56d176d8242ba595d69265a85 100644 (file)
@@ -1,3 +1,7 @@
+2005-09-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * readelf.c (get_elf_section_flags): Handle 64bit sh_flags.
+
 2005-09-02  H.J. Lu  <hongjiu.lu@intel.com>
 
        * readelf.c (debug_abbrev_contents): New.
index 4f865b029c8a3a00133bf05181974e2aeaefde4a..d3e94579ce719edab17a7ab416c944adf2008931 100644 (file)
@@ -3794,7 +3794,11 @@ get_elf_section_flags (bfd_vma sh_flags)
 {
   static char buff[1024];
   char *p = buff;
-  int index, size = sizeof (buff) - (8 + 4 + 1);
+  int field_size = is_32bit_elf ? 8 : 16;
+  int index, size = sizeof (buff) - (field_size + 4 + 1);
+  bfd_vma os_flags = 0;
+  bfd_vma proc_flags = 0;
+  bfd_vma unknown_flags = 0;
   const struct
     {
       const char *str;
@@ -3816,8 +3820,9 @@ get_elf_section_flags (bfd_vma sh_flags)
 
   if (do_section_details)
     {
-      sprintf (buff, "[%8.8lx]: ", (unsigned long) sh_flags);
-      p += 8 + 4;
+      sprintf (buff, "[%*.*lx]: ",
+              field_size, field_size, (unsigned long) sh_flags);
+      p += field_size + 4;
     }
 
   while (sh_flags)
@@ -3847,38 +3852,26 @@ get_elf_section_flags (bfd_vma sh_flags)
              break;
            }
 
-         if (p != buff + 8 + 4)
-           {
-             if (size < 10 + 2)
-               abort ();
-             size -= 2;
-             *p++ = ',';
-             *p++ = ' ';
-           }
-
          if (index != -1)
            {
+             if (p != buff + field_size + 4)
+               {
+                 if (size < (10 + 2))
+                   abort ();
+                 size -= 2;
+                 *p++ = ',';
+                 *p++ = ' ';
+               }
+
              size -= flags [index].len;
              p = stpcpy (p, flags [index].str);
            }
          else if (flag & SHF_MASKOS)
-           {
-             size -= 5 + 8;
-             sprintf (p, "OS (%8.8lx)", (unsigned long) flag);
-             p += 5 + 8;
-           }
+           os_flags |= flag;
          else if (flag & SHF_MASKPROC)
-           {
-             size -= 7 + 8;
-             sprintf (p, "PROC (%8.8lx)", (unsigned long) flag);
-             p += 7 + 8;
-           }
+           proc_flags |= flag;
          else
-           {
-             size -= 10 + 8;
-             sprintf (p, "UNKNOWN (%8.8lx)", (unsigned long) flag);
-             p += 10 + 8;
-           }
+           unknown_flags |= flag;
        }
       else
        {
@@ -3917,6 +3910,55 @@ get_elf_section_flags (bfd_vma sh_flags)
        }
     }
 
+  if (do_section_details)
+    {
+      if (os_flags)
+       {
+         size -= 5 + field_size;
+         if (p != buff + field_size + 4)
+           {
+             if (size < (2 + 1))
+               abort ();
+             size -= 2;
+             *p++ = ',';
+             *p++ = ' ';
+           }
+         sprintf (p, "OS (%*.*lx)", field_size, field_size,
+                  (unsigned long) os_flags);
+         p += 5 + field_size;
+       }
+      if (proc_flags)
+       {
+         size -= 7 + field_size;
+         if (p != buff + field_size + 4)
+           {
+             if (size < (2 + 1))
+               abort ();
+             size -= 2;
+             *p++ = ',';
+             *p++ = ' ';
+           }
+         sprintf (p, "PROC (%*.*lx)", field_size, field_size,
+                  (unsigned long) proc_flags);
+         p += 7 + field_size;
+       }
+      if (unknown_flags)
+       {
+         size -= 10 + field_size;
+         if (p != buff + field_size + 4)
+           {
+             if (size < (2 + 1))
+               abort ();
+             size -= 2;
+             *p++ = ',';
+             *p++ = ' ';
+           }
+         sprintf (p, "UNKNOWN (%*.*lx)", field_size, field_size,
+                  (unsigned long) unknown_flags);
+         p += 10 + field_size;
+       }
+    }
+
   *p = '\0';
   return buff;
 }