From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by sourceware.org (Postfix) with ESMTPS id 36D713858C1F for ; Thu, 16 Mar 2023 10:17:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 36D713858C1F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-wm1-x32c.google.com with SMTP id bg16-20020a05600c3c9000b003eb34e21bdfso2809221wmb.0 for ; Thu, 16 Mar 2023 03:17:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1678961866; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nP9+9/w7A3s2Unnme/2X0bGDRj4l29OF4C4tgQXrkqQ=; b=CjzJ6b4mgSO9ou+PaPEFX+05bXGmSRPS7pQFaOw4l63wxiPOdbwz/Hewp9S10xF/0D 3hCXAGmUeCunLSLl2G5RkB1lOZSNON99cvB2I1HEZ6fMXi7lkF8rgS9MjP+7pbYJ8go1 uIVnfiV2XOmc56le/EoArRwkaNVdSdQNpb7cKn43oT+A0J6SB3wNMkgnKysfdI4/ZY/H m/ExuHkeRdWVSORAUFQCiRuR9DkfgTYQTT8+SEqczNmrKjEF8kW+qH+VjW5O0Yd2/5qF tubdv3Pf29jEK43GDIO9LbVVEYGtx5Kb91IOjpwP8CSvPGDQzxh1DCX1sCMGwDlMYqfE 2S4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678961866; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nP9+9/w7A3s2Unnme/2X0bGDRj4l29OF4C4tgQXrkqQ=; b=gso9seKsJgrviU3Aukys1fIsds5xdmhZtbzQ91yrvteUcAgvOC9B0+4sWAua52FcPr tGx2JkAEtaB3s7sPx9yUB6XDXuq9frZ7HydIu461uUYDO65lCqpy7TA65ecuy5TGQX6H UHfEhrMhwphqwik5uOJl/Vg0s9wa5rUK7YbZ2gm4XP/KXtKPsE9TFzwJngcBaspbjULa A9q+8Y3YJ/zhThWuaXJ0YypbPvz0UXfYcX7e2RQPYKPmHW/S38u7jJLUH22VUFXMZ3Mn WlyDkJLVgyMwfGHtmj3gvSOiKLCNAIyLq27pLzX5RjTAzfkKJJPZtoQdMhnPHbxLyPKR ui3A== X-Gm-Message-State: AO0yUKUmIS5/XjVFk6izcrigYmlJIOhfLHdMvVyEoq4Fx7+whpU7/V/6 CeSk70pbxmj44AE9wYay6ItlzS+R/5PkwjYYPK4= X-Google-Smtp-Source: AK7set8RSspMdtJc5Gb8u3WX6LdPNTdAG9kc54Yl67TIC1Ot1jYeaICQXP6Ga0j717oXxFZq10oCvA== X-Received: by 2002:a1c:4c17:0:b0:3ed:68af:3543 with SMTP id z23-20020a1c4c17000000b003ed68af3543mr307376wmf.14.1678961866673; Thu, 16 Mar 2023 03:17:46 -0700 (PDT) Received: from chigot-Dell.home ([2a01:cb15:8123:8100:ae34:31dc:b564:f3da]) by smtp.gmail.com with ESMTPSA id t10-20020a05600c450a00b003e7c89b3514sm4592563wmo.23.2023.03.16.03.17.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Mar 2023 03:17:46 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20Chigot?= To: binutils@sourceware.org Cc: =?UTF-8?q?Cl=C3=A9ment=20Chigot?= Subject: [PATCH 2/5] readelf: add support for QNT_STACK note subsections Date: Thu, 16 Mar 2023 11:17:33 +0100 Message-Id: <20230316101736.482737-3-chigot@adacore.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230316101736.482737-1-chigot@adacore.com> References: <20230316101736.482737-1-chigot@adacore.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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. --- bfd/elf.c | 13 +++------ binutils/readelf.c | 67 ++++++++++++++++++++++++++++++++++++++++++++ include/elf/common.h | 13 +++++++++ 3 files changed, 84 insertions(+), 9 deletions(-) diff --git a/bfd/elf.c b/bfd/elf.c index 409be7068ec..5c3b3c0eff4 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -11543,11 +11543,6 @@ elfcore_grok_nto_regs (bfd *abfd, return true; } -#define BFD_QNT_CORE_INFO 7 -#define BFD_QNT_CORE_STATUS 8 -#define BFD_QNT_CORE_GREG 9 -#define BFD_QNT_CORE_FPREG 10 - static bool elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note) { @@ -11558,13 +11553,13 @@ elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note) switch (note->type) { - case BFD_QNT_CORE_INFO: + case QNT_CORE_INFO: return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note); - case BFD_QNT_CORE_STATUS: + case QNT_CORE_STATUS: return elfcore_grok_nto_status (abfd, note, &tid); - case BFD_QNT_CORE_GREG: + case QNT_CORE_GREG: return elfcore_grok_nto_regs (abfd, note, tid, ".reg"); - case BFD_QNT_CORE_FPREG: + case QNT_CORE_FPREG: return elfcore_grok_nto_regs (abfd, note, tid, ".reg2"); default: return true; diff --git a/binutils/readelf.c b/binutils/readelf.c index 0d9d2017901..4c540302e22 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -20722,6 +20722,38 @@ get_openbsd_elfcore_note_type (Filedata * filedata, unsigned e_type) return get_note_type (filedata, 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) { @@ -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 (_(" \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; diff --git a/include/elf/common.h b/include/elf/common.h index d19d6f9927d..630d212bbb2 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -768,6 +768,19 @@ #define NT_OPENBSD_XFPREGS 22 #define NT_OPENBSD_WCOOKIE 23 +/* Note segments for core files on QNX systems. Note name + must start with "QNX". */ +#define QNT_DEBUG_FULLPATH 1 +#define QNT_DEBUG_RELOC 2 +#define QNT_STACK 3 +#define QNT_GENERATOR 4 +#define QNT_DEFAULT_LIB 5 +#define QNT_CORE_SYSINFO 6 +#define QNT_CORE_INFO 7 +#define QNT_CORE_STATUS 8 +#define QNT_CORE_GREG 9 +#define QNT_CORE_FPREG 10 +#define QNT_LINK_MAP 11 /* Note segments for core files on Solaris systems. Note name must start with "CORE". */ -- 2.25.1