diff options
author | Christos Zoulas <christos@zoulas.com> | 2019-06-12 14:51:17 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2019-06-12 14:51:17 +0100 |
commit | 9abca70219e8e15991b9a4d3034672c9f720234f (patch) | |
tree | a0d12290463dbefe2735a4978475b09f893fa751 /binutils | |
parent | c0d38b0ec6756de6a0b68477e47bb8619eef2262 (diff) | |
download | gdb-9abca70219e8e15991b9a4d3034672c9f720234f.zip gdb-9abca70219e8e15991b9a4d3034672c9f720234f.tar.gz gdb-9abca70219e8e15991b9a4d3034672c9f720234f.tar.bz2 |
Add support for NetBSD PaX notes to readelf.
PR 24663
* readelf.c (process_netbsd_elf_note): Add support for
NT_NETBSD_PAX.
(process_note): Add support for PaX notes.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 7 | ||||
-rw-r--r-- | binutils/readelf.c | 47 |
2 files changed, 39 insertions, 15 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 2d80604..762c9c1 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,12 @@ 2019-06-12 Christos Zoulas <christos@zoulas.com> + PR 24663 + * readelf.c (process_netbsd_elf_note): Add support for + NT_NETBSD_PAX. + (process_note): Add support for PaX notes. + +2019-06-12 Christos Zoulas <christos@zoulas.com> + PR 24665 * readelf.c (get_netbsd_elfcore_note_type): Add support for SH core notes. diff --git a/binutils/readelf.c b/binutils/readelf.c index 4ed1ba1..4ed948c 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -2412,7 +2412,7 @@ get_machine_name (unsigned e_machine) case EM_TPC: return "Tenor Network TPC processor"; case EM_SNP1K: return "Trebia SNP 1000 processor"; /* 100 */ - case EM_ST200: return "STMicroelectronics ST200 microcontroller"; + case EM_ST200: return "STMicroelectronics ST200 microcontroller"; case EM_IP2K_OLD: case EM_IP2K: return "Ubicom IP2xxx 8-bit microcontrollers"; case EM_MAX: return "MAX Processor"; @@ -2528,7 +2528,7 @@ get_machine_name (unsigned e_machine) case EM_MT: return "Morpho Techologies MT processor"; case EM_ALPHA: return "Alpha"; case EM_WEBASSEMBLY: return "Web Assembly"; - case EM_DLX: return "OpenDLX"; + case EM_DLX: return "OpenDLX"; case EM_XSTORMY16: return "Sanyo XStormy16 CPU core"; case EM_IQ2000: return "Vitesse IQ2000"; case EM_M32C_OLD: @@ -11136,7 +11136,7 @@ get_symbol_visibility (unsigned int visibility) static const char * get_alpha_symbol_other (unsigned int other) -{ +{ switch (other) { case STO_ALPHA_NOPV: return "NOPV"; @@ -11144,7 +11144,7 @@ get_alpha_symbol_other (unsigned int other) default: error (_("Unrecognized alpah specific other value: %u"), other); return _("<unknown>"); - } + } } static const char * @@ -11549,7 +11549,7 @@ get_symbol_version_string (Filedata * filedata, if (ivd.vd_ndx == (vers_data & VERSYM_VERSION)) { - if (ivd.vd_ndx == 1 && ivd.vd_flags == VER_FLG_BASE) + if (ivd.vd_ndx == 1 && ivd.vd_flags == VER_FLG_BASE) return NULL; off -= ivd.vd_next; @@ -12598,7 +12598,7 @@ is_32bit_abs_reloc (Filedata * filedata, unsigned int reloc_type) case EM_OR1K: return reloc_type == 1; /* R_OR1K_32. */ case EM_PARISC: - return (reloc_type == 1 /* R_PARISC_DIR32. */ + return (reloc_type == 1 /* R_PARISC_DIR32. */ || reloc_type == 2 /* R_PARISC_DIR21L. */ || reloc_type == 41); /* R_PARISC_SECREL32. */ case EM_PJ: @@ -13993,7 +13993,7 @@ load_specific_debug_section (enum dwarf_section_display_enum debug, struct dwarf_section * section = &debug_displays [debug].section; char buf [64]; Filedata * filedata = (Filedata *) data; - + if (section->start != NULL) { /* If it is already loaded, do nothing. */ @@ -17955,7 +17955,7 @@ print_gnu_note (Filedata * filedata, Elf_Internal_Note *pnote) case NT_GNU_PROPERTY_TYPE_0: print_gnu_property_note (filedata, pnote); break; - + default: /* Handle unrecognised types. An error message should have already been created by get_gnu_elf_note_type(), so all that we need to do is to @@ -18075,10 +18075,23 @@ process_netbsd_elf_note (Elf_Internal_Note * pnote) return TRUE; 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 TRUE; +#ifdef NT_NETBSD_PAX + 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 TRUE; +#endif + default: printf (" NetBSD\t0x%08lx\tUnknown note type: (0x%08lx)\n", pnote->descsz, pnote->type); @@ -18267,7 +18280,7 @@ print_stapsdt_note (Elf_Internal_Note *pnote) } else goto stapdt_note_too_small; - + if (data >= data_end) goto stapdt_note_too_small; maxlen = data_end - data; @@ -18594,7 +18607,7 @@ same_section (Filedata * filedata, unsigned long addr1, unsigned long addr2) a1 = find_section_by_address (filedata, addr1); a2 = find_section_by_address (filedata, addr2); - + return a1 == a2 && a1 != NULL; } @@ -18658,7 +18671,7 @@ print_gnu_build_attribute_description (Elf_Internal_Note * pnote, start = byte_get ((unsigned char *) pnote->descdata, 8); end = byte_get ((unsigned char *) pnote->descdata + 8, 8); break; - + default: error (_(" <invalid description size: %lx>\n"), pnote->descsz); printf (_(" <invalid descsz>")); @@ -18953,7 +18966,7 @@ print_gnu_build_attribute_name (Elf_Internal_Note * pnote) if (do_wide && left > 0) printf ("%-*s", left, " "); - + return TRUE; } @@ -18991,6 +19004,10 @@ process_note (Elf_Internal_Note * pnote, /* 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 (strneq (pnote->namedata, "SPU/", 4)) { /* SPU-specific core file notes. */ @@ -19974,7 +19991,7 @@ process_archive (Filedata * filedata, bfd_boolean is_thin_archive) /* PR 24049 - we cannot use filedata->file_name as this will have already been freed. */ error (_("%s: failed to read archive header\n"), arch.file_name); - + ret = FALSE; break; } @@ -20068,7 +20085,7 @@ process_archive (Filedata * filedata, bfd_boolean is_thin_archive) thin_filedata.handle = nested_arch.file; thin_filedata.file_name = qualified_name; - + if (! process_object (& thin_filedata)) ret = FALSE; } |