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.
This commit is contained in:
parent
c0d38b0ec6
commit
9abca70219
|
@ -1,3 +1,10 @@
|
|||
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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue