diff options
author | Clément Chigot <chigot@adacore.com> | 2022-11-18 15:45:55 +0100 |
---|---|---|
committer | Clément Chigot <chigot@adacore.com> | 2023-03-16 15:01:05 +0100 |
commit | e263a66b01a697632a51ad5ec1e6c08071e3e5ec (patch) | |
tree | 3166d0b9ac77e991d7fcac73950ed4c786328c03 /binutils | |
parent | 567e0dfb0166c070d4d59b70ecb823fd9100f9a6 (diff) | |
download | fsf-binutils-gdb-e263a66b01a697632a51ad5ec1e6c08071e3e5ec.zip fsf-binutils-gdb-e263a66b01a697632a51ad5ec1e6c08071e3e5ec.tar.gz fsf-binutils-gdb-e263a66b01a697632a51ad5ec1e6c08071e3e5ec.tar.bz2 |
readelf: add support for QNT_STACK note subsections
QNX provides some .note subsections. QNT_STACK is the one controling
the stack allocation.
bfd/ChangeLog:
* elf.c (BFD_QNT_CORE_INFO): Delete.
(BFD_QNT_CORE_STATUS): Likewise.
(BFD_QNT_CORE_GREG): Likewise.
(BFD_QNT_CORE_FPREG): Likewise.
(elfcore_grok_nto_note): Replace BFD_QNT_* by QNT_*.
binutils/ChangeLog:
* readelf.c (get_qnx_elfcore_note_type): New function.
(print_qnx_note): New function.
(process_note): Add support for QNX support.
include/ChangeLog:
* elf/common.h (QNT_DEBUG_FULLPATH): New define.
(QNT_DEBUG_RELOC): New define.
(QNT_STACK): New define.
(QNT_GENERATOR): New define.
(QNT_DEFAULT_LIB): New define.
(QNT_CORE_SYSINFO): New define.
(QNT_CORE_INFO): New define.
(QNT_CORE_STATUS): New define.
(QNT_CORE_GREG): New define.
(QNT_CORE_FPREG): New define.
(QNT_LINK_MAP): New define.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/readelf.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/binutils/readelf.c b/binutils/readelf.c index 0d9d201..4c54030 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -20723,6 +20723,38 @@ get_openbsd_elfcore_note_type (Filedata * filedata, unsigned e_type) } static const char * +get_qnx_elfcore_note_type (Filedata * filedata, unsigned e_type) +{ + switch (e_type) + { + case QNT_DEBUG_FULLPATH: + return _("QNX debug fullpath"); + case QNT_DEBUG_RELOC: + return _("QNX debug relocation"); + case QNT_STACK: + return _("QNX stack"); + case QNT_GENERATOR: + return _("QNX generator"); + case QNT_DEFAULT_LIB: + return _("QNX default library"); + case QNT_CORE_SYSINFO: + return _("QNX core sysinfo"); + case QNT_CORE_INFO: + return _("QNX core info"); + case QNT_CORE_STATUS: + return _("QNX core status"); + case QNT_CORE_GREG: + return _("QNX general registers"); + case QNT_CORE_FPREG: + return _("QNX floating point registers"); + case QNT_LINK_MAP: + return _("QNX link map"); + } + + return get_note_type (filedata, e_type); +} + +static const char * get_stapsdt_note_type (unsigned e_type) { static char buff[64]; @@ -21646,6 +21678,35 @@ print_amdgpu_note (Elf_Internal_Note *pnote) #endif } +static bool +print_qnx_note (Elf_Internal_Note *pnote) +{ + switch (pnote->type) + { + case QNT_STACK: + if (pnote->descsz != 12) + goto desc_size_fail; + + printf (_(" Stack Size: 0x%" PRIx32 "\n"), + (unsigned) byte_get ((unsigned char *) pnote->descdata, 4)); + printf (_(" Stack allocated: %" PRIx32 "\n"), + (unsigned) byte_get ((unsigned char *) pnote->descdata + 4, 4)); + printf (_(" Executable: %s\n"), + ((unsigned) byte_get ((unsigned char *) pnote->descdata + 8, 1)) ? "no": "yes"); + break; + + default: + print_note_contents_hex(pnote); + } + return true; + +desc_size_fail: + printf (_(" <corrupt - data size is too small>\n")); + error (_("corrupt QNX note: data size is too small\n")); + return false; +} + + /* Note that by the ELF standard, the name field is already null byte terminated, and namesz includes the terminating null byte. I.E. the value of namesz for the name "FSF" is 4. @@ -21692,6 +21753,10 @@ process_note (Elf_Internal_Note * pnote, /* OpenBSD-specific core file notes. */ nt = get_openbsd_elfcore_note_type (filedata, pnote->type); + else if (startswith (pnote->namedata, "QNX")) + /* QNX-specific core file notes. */ + nt = get_qnx_elfcore_note_type (filedata, pnote->type); + else if (startswith (pnote->namedata, "SPU/")) { /* SPU-specific core file notes. */ @@ -21746,6 +21811,8 @@ process_note (Elf_Internal_Note * pnote, else if (startswith (pnote->namedata, "AMDGPU") && pnote->type == NT_AMDGPU_METADATA) return print_amdgpu_note (pnote); + else if (startswith (pnote->namedata, "QNX")) + return print_qnx_note (pnote); print_note_contents_hex (pnote); return true; |