aboutsummaryrefslogtreecommitdiff
path: root/binutils/readelf.c
diff options
context:
space:
mode:
authorChristos Zoulas <christos@zoulas.com>2019-06-12 14:51:17 +0100
committerNick Clifton <nickc@redhat.com>2019-06-12 14:51:17 +0100
commit9abca70219e8e15991b9a4d3034672c9f720234f (patch)
treea0d12290463dbefe2735a4978475b09f893fa751 /binutils/readelf.c
parentc0d38b0ec6756de6a0b68477e47bb8619eef2262 (diff)
downloadgdb-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/readelf.c')
-rw-r--r--binutils/readelf.c47
1 files changed, 32 insertions, 15 deletions
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;
}