Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl3/binutils/dist - Add -f to allow processing non...



details:   https://anonhg.NetBSD.org/src/rev/866256d68f5c
branches:  trunk
changeset: 334886:866256d68f5c
user:      christos <christos%NetBSD.org@localhost>
date:      Sat Dec 13 18:32:59 2014 +0000

description:
- Add -f to allow processing non-plain files.
- Align NetBSD note printing properly
- Add handling of "PaX" notes correctly. Perhaps we should rename them
  to "NetBSD" now.

diffstat:

 external/gpl3/binutils/dist/binutils/doc/readelf.1 |   8 ++++++
 external/gpl3/binutils/dist/binutils/readelf.c     |  28 ++++++++++++++++++---
 external/gpl3/binutils/dist/include/elf/common.h   |   9 +++++++
 3 files changed, 41 insertions(+), 4 deletions(-)

diffs (137 lines):

diff -r 4b47c656574a -r 866256d68f5c external/gpl3/binutils/dist/binutils/doc/readelf.1
--- a/external/gpl3/binutils/dist/binutils/doc/readelf.1        Sat Dec 13 17:18:55 2014 +0000
+++ b/external/gpl3/binutils/dist/binutils/doc/readelf.1        Sat Dec 13 18:32:59 2014 +0000
@@ -146,6 +146,7 @@
         [\fB\-r\fR|\fB\-\-relocs\fR]
         [\fB\-u\fR|\fB\-\-unwind\fR]
         [\fB\-d\fR|\fB\-\-dynamic\fR]
+        [\fB\-f\fR|\fB\-\-special-files\fR]
         [\fB\-V\fR|\fB\-\-version\-info\fR]
         [\fB\-A\fR|\fB\-\-arch\-specific\fR]
         [\fB\-D\fR|\fB\-\-use\-dynamic\fR]
@@ -282,6 +283,13 @@
 .IX Item "--dynamic"
 .PD
 Displays the contents of the file's dynamic section, if it has one.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD 0
+.IP "\fB\-\-special-files\fR" 4
+.IX Item "--special-files"
+.PD
+Allows processing of non-plain files.
 .IP "\fB\-V\fR" 4
 .IX Item "-V"
 .PD 0
diff -r 4b47c656574a -r 866256d68f5c external/gpl3/binutils/dist/binutils/readelf.c
--- a/external/gpl3/binutils/dist/binutils/readelf.c    Sat Dec 13 17:18:55 2014 +0000
+++ b/external/gpl3/binutils/dist/binutils/readelf.c    Sat Dec 13 18:32:59 2014 +0000
@@ -185,6 +185,7 @@
 static Elf_Internal_Dyn *  dynamic_section;
 static Elf_Internal_Shdr * symtab_shndx_hdr;
 static int show_name;
+static int do_special_files;
 static int do_dynamic;
 static int do_syms;
 static int do_dyn_syms;
@@ -3201,6 +3202,7 @@
   {"relocs",          no_argument, 0, 'r'},
   {"notes",           no_argument, 0, 'n'},
   {"dynamic",         no_argument, 0, 'd'},
+  {"special-files",    no_argument, 0, 'f'},
   {"arch-specific",    no_argument, 0, 'A'},
   {"version-info",     no_argument, 0, 'V'},
   {"use-dynamic",      no_argument, 0, 'D'},
@@ -3246,6 +3248,7 @@
   -r --relocs            Display the relocations (if present)\n\
   -u --unwind            Display the unwind info (if present)\n\
   -d --dynamic           Display the dynamic section (if present)\n\
+  -f --special-files     Process non-plain files too\n\
   -V --version-info      Display the version sections (if present)\n\
   -A --arch-specific     Display architecture specific information (if any)\n\
   -c --archive-index     Display the symbol/file index in an archive\n\
@@ -3365,7 +3368,7 @@
     usage (stderr);
 
   while ((c = getopt_long
-         (argc, argv, "ADHINR:SVWacdeghi:lnp:rstuvw::x:", options, NULL)) != EOF)
+         (argc, argv, "ADHINR:SVWacdefghi:lnp:rstuvw::x:", options, NULL)) != EOF)
     {
       switch (c)
        {
@@ -3415,6 +3418,9 @@
        case 'u':
          do_unwind++;
          break;
+       case 'f':
+         do_special_files++;
+         break;
        case 'h':
          do_header++;
          break;
@@ -12706,14 +12712,24 @@
                (version / 10000) % 100 > 26 ? "Z" : "",
                'A' + (version / 10000) % 26); 
       else
-       printf ("  NetBSD\t0x%08lx\tIDENT %u (%u.%u.%u)\n", pnote->descsz,
+       printf ("  NetBSD\t\t0x%08lx\tIDENT %u (%u.%u.%u)\n", pnote->descsz,
                version, version / 100000000, (version / 1000000) % 100,
                (version / 100) % 100); 
       return 1;
     case NT_NETBSD_MARCH:
-      printf ("  NetBSD\t0x%08lx\tMARCH <%s>\n", pnote->descsz,
+      printf ("  NetBSD\t\t0x%08lx\tMARCH <%s>\n", pnote->descsz,
              pnote->descdata);
       return 1;
+    case NT_NETBSD_PAX:
+      version = byte_get((unsigned char *)pnote->descdata, sizeof(version));
+      printf ("  NetBSD\t\t0x%08lx\tPaX <%s%s%s%s%s%s>\n", pnote->descsz,
+             ((version & NT_NETBSD_PAX_MPROTECT) ? "+mprotect" : ""),
+             ((version & NT_NETBSD_PAX_NOMPROTECT) ? "-mprotect" : ""),
+             ((version & NT_NETBSD_PAX_GUARD) ? "+guard" : ""),
+             ((version & NT_NETBSD_PAX_NOGUARD) ? "-guard" : ""),
+             ((version & NT_NETBSD_PAX_ASLR) ? "+ASLR" : ""),
+             ((version & NT_NETBSD_PAX_NOASLR) ? "-ASLR" : ""));
+      return 1;
     default:
       break;
     }
@@ -13050,6 +13066,10 @@
     /* NetBSD-specific core file notes.  */
     return process_netbsd_elf_note (pnote);
 
+  else if (const_strneq (pnote->namedata, "PaX"))
+    /* NetBSD-specific core file notes.  */
+    return process_netbsd_elf_note (pnote);
+
   else if (const_strneq (pnote->namedata, "NetBSD-CORE"))
     /* NetBSD-specific core file notes.  */
     nt = get_netbsd_elfcore_note_type (pnote->type);
@@ -13789,7 +13809,7 @@
       return 1;
     }
 
-  if (! S_ISREG (statbuf.st_mode))
+  if (!do_special_files && ! S_ISREG (statbuf.st_mode))
     {
       error (_("'%s' is not an ordinary file\n"), file_name);
       return 1;
diff -r 4b47c656574a -r 866256d68f5c external/gpl3/binutils/dist/include/elf/common.h
--- a/external/gpl3/binutils/dist/include/elf/common.h  Sat Dec 13 17:18:55 2014 +0000
+++ b/external/gpl3/binutils/dist/include/elf/common.h  Sat Dec 13 18:32:59 2014 +0000
@@ -607,6 +607,15 @@
 #define NT_NETBSD_IDENT                1
 #define NT_NETBSD_MARCH                5
 
+/* Values for NetBSD .note.netbsd.ident notes.  Note name is "PaX".  */
+#define NT_NETBSD_PAX          3
+#define NT_NETBSD_PAX_MPROTECT         0x01    /* Force enable Mprotect */
+#define NT_NETBSD_PAX_NOMPROTECT       0x02    /* Force disable Mprotect */
+#define NT_NETBSD_PAX_GUARD            0x04    /* Force enable Segvguard */
+#define NT_NETBSD_PAX_NOGUARD          0x08    /* Force disable Servguard */
+#define NT_NETBSD_PAX_ASLR             0x10    /* Force enable ASLR */
+#define NT_NETBSD_PAX_NOASLR           0x20    /* Force disable ASLR */
+
 /* Values for OpenBSD .note.openbsd.ident notes.  Note name is "OpenBSD".  */
 
 #define NT_OPENBSD_IDENT       1



Home | Main Index | Thread Index | Old Index