From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 33C6D385483B for ; Mon, 19 Jul 2021 07:09:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 33C6D385483B Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 16J72bOj028500 for ; Mon, 19 Jul 2021 07:09:50 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 39uptrt8rx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 19 Jul 2021 07:09:50 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16J75F9P120183 for ; Mon, 19 Jul 2021 07:09:49 GMT Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam08lp2169.outbound.protection.outlook.com [104.47.73.169]) by aserp3030.oracle.com with ESMTP id 39upe7qy50-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 19 Jul 2021 07:09:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ruv/qhv/CPMsEOeg1R+/QsUMEW7F3VcUFgi7/H5IW92YQnoCv3SDMce1HmBTIiqBfJ+iurPi9tKjfX631LM+0YbVmrBFJFEAVpL98s0UqLh/hWkW+3anBNx4HnZb/kIfOkb0npku/S1GWzoAN8xkJfEuvXEeehGHJkHPksSZe/CV9YUJfkhd6j6ckNrBBR3agWpk2xThgma6lM5V8MjO0JIxUiGzsPDC+jgUduvvkHD+ZGwj1uOueFNFP+ix32RS+YUOmtREzNdtM88FGPd4HXw4li/wjMu6AbkmHAhJrRvSFhOq8m+DNSgW/hjXTE3iaLFRkdkIMLQ9QyocE+kjBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cAcVb38L/R0OigzyYAsiIRKiFrKamppa5xsBZuncLG8=; b=FSU8zvt0EyEM8luWYkFr3BQYUCf9lyGZXRN9sT+4qpkFKDFDZSD2CpgdxF1p4wft15BN4q+KD9oqGiFN2Sx4H8f3uLpMn9Bp45jMUX4cPcHTKiK3Bmod3HRAl59qW5RPgZ9OsWWSzhy6MQC3+nRlUAR/ZLvhv4aFqvh9hixnurtQNbWkY/8AMagHtYlMmrRvEwyOqoZMou2eioAqdj/DjKLyruzNQ3hoJEQ7aoqOD+p/hmgX2fJhVVhNGG9LsHzROeNEvBqZQGN6HXY1e7yuAM2XejrejsjFk8xeAkiSrzw7TOB26nwdFvKMSVdWuZqYzNLsSJlQ6RJMzyZzoK3flA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from MWHPR1001MB2224.namprd10.prod.outlook.com (2603:10b6:301:2e::26) by CO6PR10MB5428.namprd10.prod.outlook.com (2603:10b6:303:13f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul 2021 07:09:47 +0000 Received: from MWHPR1001MB2224.namprd10.prod.outlook.com ([fe80::e994:1a07:4b43:d614]) by MWHPR1001MB2224.namprd10.prod.outlook.com ([fe80::e994:1a07:4b43:d614%6]) with mapi id 15.20.4331.032; Mon, 19 Jul 2021 07:09:47 +0000 From: Libor Bukata To: "binutils@sourceware.org" CC: Libor Bukata Subject: [RFC][PATCH] Add Solaris specific ELF note processing. Thread-Topic: [RFC][PATCH] Add Solaris specific ELF note processing. Thread-Index: AQHXfGzWCrpzvXffCUa887ZmWGVRxg== Date: Mon, 19 Jul 2021 07:09:47 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2d144916-95df-4dc2-6186-08d94a843189 x-ms-traffictypediagnostic: CO6PR10MB5428: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1051; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /U66b7n6ArhFFcc3zONWj7t1FPXTf+LQY0BrRs5c4LBtYHxRsk6avIjdH2zz/DNk/EuE/1+QmcdCJOLIT31fJHajp8iBMCRoINnd/iYfk3zN6lAVNQ6x7kfivbjFcky0b2xVRYMru6aF6bIOEQMD0qWaTqOShE2GtO6qbKzB8GxWqir89jXXk8YPKks2x6KJb7tiI65tKFctk/7h5xjdh/bbdgABK66KcQ8xao0LHhdSBkmbPc0IBMqIUmdVm3IKHPQqSrAx7fIkL/zlVVIc+bf5naEnndrfgeJkkUef3uGz530QCSZOReOubJmtcw1BDy/W+U3TnwzCgUVplNmd9B7nbLentLfvjYawBhjoJ0R6xM66BIfB1D6WV9yomZN3hvycikd/OGT7oKI+Dp+mJEVrm8ZZj5ZE+n8P2IOVSHqpDKMvoULuqbDPYowVEydH3DZx3MtMRLrDi16d5PjxDtsoNkvaiS40nY/KxS/PmdEBMVLKwOvu87TZ2env4QVmZz56KIuD8C28Mq82DtGcZknCTAYU0E9x3gw/ov1ccLbyMYce8Uywy6NHT9J+KKVjSdi5HgVV575UPVuf2fupwXmOAPcsP6yW8Q7AUWTO0jXERy3EHGyTQL51SbhUpXa2wmjMP3yJOA/fta/mLuEx51VwkGzqnlduSvkyCkZLh1wRfOGu8V0e834AkT0+tGzOKkPGlwmVhaUKSSMB+sAh3w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR1001MB2224.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(396003)(366004)(376002)(136003)(346002)(39860400002)(66946007)(91956017)(64756008)(66556008)(55016002)(66446008)(9686003)(2906002)(6506007)(186003)(107886003)(38100700002)(8676002)(86362001)(122000001)(66476007)(76116006)(6916009)(53546011)(44832011)(33656002)(71200400001)(30864003)(7696005)(4326008)(83380400001)(5660300002)(8936002)(478600001)(52536014)(316002)(38070700004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?sgGauGncOkMjzuLUqxhpx9aHYrXuDjwlW1svyZWoxmzFKay1BcMdHNpdbj?= =?iso-8859-1?Q?DrnI1LdQPzmC9lTHHf3Emjz/Y+WR0MgyDbtpecAoGy5liSVb9t9gYKVuDz?= =?iso-8859-1?Q?WQvW6UOq3kCXPwgT1mYh6yAexjxtGaa2Jr2nHHsby1EP3gEv1iW2sxoYZd?= =?iso-8859-1?Q?GRvNDQnkJh6AC6JldQa36IOfce2TEbGcG8Ndi+4+DPLf1tiuxLA/B/gzut?= =?iso-8859-1?Q?9ILdLlBrcZf3oFBFIcGUtCrupiwS925nsFwI+4ticLlzFWMRvf0rY5Xhys?= =?iso-8859-1?Q?e9SIbWynq7JiLFV0n97CeZQMj/o/60505RPow5OJCGGyNbDl5ezoXPoU0a?= =?iso-8859-1?Q?VXd6LCMAPzb1v0v+V9ZkACl9Lf7ypVFUsXK0mbUu2E6jSgSVwaA4hTYmCR?= =?iso-8859-1?Q?4JudojWtv160uPTWVs+fv5ZUnUkFUSd4RVDyvaN1Hlaz8dW2BqapDbRoTA?= =?iso-8859-1?Q?iUk2z4264YerUW7N/K2SJrPhTRLXA9jhbHJNGuT4kDS5S1OP/XVipuX8V0?= =?iso-8859-1?Q?+4+T3rJF44LbbLOVA8neZVgEDpcKbQrodQWjJMYX6M1gfAdU7jDPhp9hPX?= =?iso-8859-1?Q?nS8kVGL0Ig+Y6YKfuZrDB/FxesXAQCJ8kCWriafWdZPeHkxUoLd31eUx6p?= =?iso-8859-1?Q?YbRYQnsc/lE6T8ixCYV6Pi+7nab2x4fo6dIwMJC+D7a/Mcb0av26k+cbyD?= =?iso-8859-1?Q?9+DoxE/CwUF6YB5aay8KoGO8zgH0LshaOM1+AtA6vMjwFzAFa3dJOYPCGV?= =?iso-8859-1?Q?JtaNj58jcwLp/AoHN0Wv7SyV9LyA7TzqEXERia+KyJBrnlsZKY54sDxwf3?= =?iso-8859-1?Q?FvVz0Rf1KVt3VzdIXK0bfE141YaPG54d+DxKuzmE8fyaVeTCrsDwjjuetT?= =?iso-8859-1?Q?yXv8bKZa43JZO96kqeWNKLcwZG2pIsbtWhX1kxjFCLHjMWUc+FKtWSyVRN?= =?iso-8859-1?Q?QsY+PcJonoWMhSC96/QbJG1BH6zO1r42uvH8F5n1LEJH7un/MPcNIBCLNs?= =?iso-8859-1?Q?hp7vLjuto/MTrosZW7tAfZQK1BUJrDZ/8T1kPY4LDkSTFV/EKKkS4dZwtp?= =?iso-8859-1?Q?YgXdnw/n+YI/nQTlEWawo/+jmPuXLwyNmWm1mECI2S+RUpih8+Pk4auFpz?= =?iso-8859-1?Q?0nsOmnEkoPqM46pCGnhKGOzz+4x8jIEAr1AwH1fBmCAYF1Si5ih7Jusm9x?= =?iso-8859-1?Q?/gqDmPdDZ5tFtoOpTi9YhYmxdlH506zF8o/LTWEZkyELVhEljIJ8qmbQei?= =?iso-8859-1?Q?pg/Xh4UldIZ71gldSFMpNbH3GpHi3V7vMb6tYWwfRyUZ3WIqwB8gNYmHwA?= =?iso-8859-1?Q?zn7ecX8eyz+qhmxHPG64FkJkusbBQBAch8HB3Ecd+A9qYP9w6uKOhaRf2P?= =?iso-8859-1?Q?Btd/JiEGY9yjNi5ATju9Os6H9C42aCyA=3D=3D?= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2224.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d144916-95df-4dc2-6186-08d94a843189 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2021 07:09:47.5582 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Tdkjd/wuHQZgdKKQ984Aj6MDedK9Vqry42uPM68nd9pAORN3F4Lp7rrIjH9/YKvpL7b9Ex8CwvOeD/JT7VIQGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR10MB5428 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10049 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 suspectscore=0 bulkscore=0 malwarescore=0 phishscore=0 mlxlogscore=999 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2107190040 X-Proofpoint-ORIG-GUID: C_Yi0zEVTAZXYEXsPxjbX6bQBCPKpXVE X-Proofpoint-GUID: C_Yi0zEVTAZXYEXsPxjbX6bQBCPKpXVE X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_BL, RCVD_IN_MSPIKE_L3, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Jul 2021 07:09:53 -0000 >From f22881a7543ae96a00d0b6d7c5183d4451af7a8d Mon Sep 17 00:00:00 2001=0A= From: Libor Bukata =0A= Date: Wed, 14 Jul 2021 11:53:56 +0200=0A= Subject: [PATCH] [bfd] Add Solaris specific ELF note processing.=0A= =0A= Added elfcore_grok_solaris_note function that enables to=0A= obtain process status, register values, and program info=0A= from Solaris's core files.=0A= =0A= Tested on Solaris x86_64/sparcv9 and Linux x86_64.=0A= =0A= bfd/ChangeLog:=0A= =0A= 2021-07-16 Libor Bukata =0A= =0A= * elf-bfd.h (elf_backend_grok_lwpstatus): Added function.=0A= * elfxx-target.h (elf_backend_data): Updated ELF backend data.=0A= * bfd/elf.c (elfcore_grok_solaris_note): Solaris specific ELF=0A= note parser. Better GDB's coredump analysis on Solaris...=0A= (elfcore_grok_solaris_note_impl): New function.=0A= (elfcore_grok_solaris_prstatus): New function.=0A= (elfcore_grok_solaris_info): New function.=0A= (elfcore_grok_solaris_lwpstatus): New function.=0A= (elf_parse_notes): Added "CORE" groker element.=0A= =0A= include/ChangeLog:=0A= =0A= 2021-07-16 Libor Bukata =0A= =0A= * include/elf/common.h: Note segment constants=0A= for core files on Solaris systems.=0A= ---=0A= bfd/ChangeLog | 12 +++=0A= bfd/elf-bfd.h | 5 ++=0A= bfd/elf.c | 203 ++++++++++++++++++++++++++++++++++++++++++-=0A= bfd/elfxx-target.h | 4 +=0A= include/ChangeLog | 5 ++=0A= include/elf/common.h | 23 +++++=0A= 6 files changed, 249 insertions(+), 3 deletions(-)=0A= =0A= diff --git a/bfd/ChangeLog b/bfd/ChangeLog=0A= index 4dc3d685255..18098dc0f0d 100644=0A= --- a/bfd/ChangeLog=0A= +++ b/bfd/ChangeLog=0A= @@ -1,3 +1,15 @@=0A= +2021-07-16 Libor Bukata =0A= +=0A= + * elf-bfd.h (elf_backend_grok_lwpstatus): Added function.=0A= + * elfxx-target.h (elf_backend_data): Updated ELF backend data.=0A= + * bfd/elf.c (elfcore_grok_solaris_note): Solaris specific ELF=0A= + note parser. Better GDB's coredump analysis on Solaris...=0A= + (elfcore_grok_solaris_note_impl): New function.=0A= + (elfcore_grok_solaris_prstatus): New function.=0A= + (elfcore_grok_solaris_info): New function.=0A= + (elfcore_grok_solaris_lwpstatus): New function.=0A= + (elf_parse_notes): Added "CORE" groker element.=0A= +=0A= 2021-07-10 Alan Modra =0A= =0A= * dwarf2.c (read_address): Remove accidental commit.=0A= diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h=0A= index b3f56b8c2ce..2427fcb1414 100644=0A= --- a/bfd/elf-bfd.h=0A= +++ b/bfd/elf-bfd.h=0A= @@ -1377,6 +1377,11 @@ struct elf_backend_data=0A= bool (*elf_backend_grok_freebsd_prstatus)=0A= (bfd *, Elf_Internal_Note *);=0A= =0A= + /* This function, if defined, is called when a "Solaris" NT_LWPSTATUS=0A= + note is found in a core file. */=0A= + bool (*elf_backend_grok_lwpstatus)=0A= + (bfd *, Elf_Internal_Note *);=0A= +=0A= /* This function, if defined, is called to write a note to a corefile. = */=0A= char *(*elf_backend_write_core_note)=0A= (bfd *abfd, char *buf, int *bufsiz, int note_type, ...);=0A= diff --git a/bfd/elf.c b/bfd/elf.c=0A= index de5abafabf0..d39b4bd3b88 100644=0A= --- a/bfd/elf.c=0A= +++ b/bfd/elf.c=0A= @@ -9717,7 +9717,10 @@ elfcore_make_note_pseudosection (bfd *abfd,=0A= static bool=0A= elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)=0A= {=0A= - return elfcore_make_note_pseudosection (abfd, ".reg2", note);=0A= + asection *sect =3D bfd_get_section_by_name (abfd, ".reg2");=0A= + if (sect =3D=3D NULL)=0A= + return elfcore_make_note_pseudosection (abfd, ".reg2", note);=0A= + return true;=0A= }=0A= =0A= /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note=0A= @@ -10365,6 +10368,9 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *no= te)=0A= =0A= #if defined (HAVE_LWPSTATUS_T)=0A= case NT_LWPSTATUS:=0A= + if (bed->elf_backend_grok_lwpstatus)=0A= + if ((*bed->elf_backend_grok_lwpstatus) (abfd, note))=0A= + return true;=0A= return elfcore_grok_lwpstatus (abfd, note);=0A= #endif=0A= =0A= @@ -11083,6 +11089,196 @@ elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Int= ernal_Note *note)=0A= return true;=0A= }=0A= =0A= +/* Processes Solaris's process status note.=0A= + sig_off ~ offsetof(prstatus_t, pr_cursig)=0A= + pid_off ~ offsetof(prstatus_t, pr_pid)=0A= + lwpid_off ~ offsetof(prstatus_t, pr_who)=0A= + gregset_size ~ sizeof(gregset_t)=0A= + gregset_offset ~ offsetof(prstatus_t, pr_reg) */=0A= +static bool=0A= +elfcore_grok_solaris_prstatus (bfd *abfd, Elf_Internal_Note* note,=0A= + int sig_off, int pid_off, int lwpid_off, size_t gregset_size,=0A= + size_t gregset_offset)=0A= +{=0A= + asection *sect =3D NULL;=0A= + elf_tdata (abfd)->core->signal =3D=0A= + bfd_get_16 (abfd, note->descdata + sig_off);=0A= + elf_tdata (abfd)->core->pid =3D=0A= + bfd_get_32 (abfd, note->descdata + pid_off);=0A= + elf_tdata (abfd)->core->lwpid =3D=0A= + bfd_get_32 (abfd, note->descdata + lwpid_off);=0A= +=0A= + sect =3D bfd_get_section_by_name (abfd, ".reg");=0A= + if (sect !=3D NULL)=0A= + sect->size =3D gregset_size;=0A= +=0A= + return _bfd_elfcore_make_pseudosection (abfd, ".reg",=0A= + gregset_size, note->descpos + gregset_offset);=0A= +}=0A= +=0A= +/* Gets program and arguments from a core.=0A= + prog_off ~ offsetof(prpsinfo | psinfo_t, pr_fname)=0A= + comm_off ~ offsetof(prpsinfo | psinfo_t, pr_psargs) */=0A= +static bool=0A= +elfcore_grok_solaris_info(bfd *abfd, Elf_Internal_Note* note,=0A= + int prog_off, int comm_off)=0A= +{=0A= + elf_tdata (abfd)->core->program=0A= + =3D _bfd_elfcore_strndup (abfd, note->descdata + prog_off, 16);=0A= + elf_tdata (abfd)->core->command=0A= + =3D _bfd_elfcore_strndup (abfd, note->descdata + comm_off, 80);=0A= +=0A= + return true;=0A= +}=0A= +=0A= +/* Processes Solaris's LWP status note.=0A= + gregset_size ~ sizeof(gregset_t)=0A= + gregset_off ~ offsetof(lwpstatus_t, pr_reg)=0A= + fpregset_size ~ sizeof(fpregset_t)=0A= + fpregset_off ~ offsetof(lwpstatus_t, pr_fpreg)=0A= +*/=0A= +static bool=0A= +elfcore_grok_solaris_lwpstatus (bfd *abfd, Elf_Internal_Note* note,=0A= + size_t gregset_size, int gregset_off, size_t fpregset_size, int fpregs= et_off)=0A= +{=0A= + asection *sect =3D NULL;=0A= + char reg2_section_name[16] =3D { 0 };=0A= + (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2",=0A= + elf_tdata (abfd)->core->lwpid);=0A= +=0A= + /* offsetof(lwpstatus_t, pr_lwpid) */=0A= + elf_tdata (abfd)->core->lwpid =3D=0A= + bfd_get_32 (abfd, note->descdata + 4);=0A= + /* offsetof(lwpstatus_t, pr_cursig) */=0A= + elf_tdata (abfd)->core->signal =3D=0A= + bfd_get_16 (abfd, note->descdata + 12);=0A= +=0A= + sect =3D bfd_get_section_by_name (abfd, ".reg");=0A= + if (sect !=3D NULL)=0A= + {=0A= + sect->size =3D gregset_size;=0A= + }=0A= + else=0A= + {=0A= + if ((_bfd_elfcore_make_pseudosection (abfd, ".reg",=0A= + gregset_size, note->descpos + gregset_off)) !=3D true)=0A= + return false;=0A= + }=0A= +=0A= + sect =3D bfd_get_section_by_name (abfd, reg2_section_name);=0A= + if (sect !=3D NULL)=0A= + {=0A= + sect->size =3D fpregset_size;=0A= + sect->filepos =3D note->descpos + fpregset_off;=0A= + sect->alignment_power =3D 2;=0A= + }=0A= + else=0A= + {=0A= + if ((_bfd_elfcore_make_pseudosection (abfd, ".reg2",=0A= + fpregset_size, note->descpos + fpregset_off)) !=3D true)=0A= + return false;=0A= + }=0A= +=0A= + return true;=0A= +}=0A= +=0A= +static bool=0A= +elfcore_grok_solaris_note_impl (bfd *abfd, Elf_Internal_Note *note)=0A= +{=0A= + if (note =3D=3D NULL)=0A= + return false;=0A= +=0A= + /* core files are identified as 32- or 64-bit, SPARC or x86,=0A= + by the size of the descsz which matches the sizeof()=0A= + the type appropriate for that note type (e.g., prstatus_t for=0A= + SOLARIS_NT_PRSTATUS) for the corresponding architecture=0A= + on Solaris. The core file bitness may differ from the bitness of=0A= + gdb itself, so fixed values are used instead of sizeof().=0A= + Appropriate fixed offsets are also used to obtain data from=0A= + the note */=0A= +=0A= + switch ((int) note->type)=0A= + {=0A= + case SOLARIS_NT_PRSTATUS:=0A= + switch (note->descsz)=0A= + {=0A= + case 508: /* sizeof(prstatus_t) SPARC 32-bit */=0A= + return elfcore_grok_solaris_prstatus(abfd, note, 136, 216, 308, = 152, 356);=0A= + case 904: /* sizeof(prstatus_t) SPARC 64-bit */=0A= + return elfcore_grok_solaris_prstatus(abfd, note, 264, 360, 520, = 304, 600);=0A= + case 432: /* sizeof(prstatus_t) Intel 32-bit */=0A= + return elfcore_grok_solaris_prstatus(abfd, note, 136, 216, 308, = 76, 356);=0A= + case 824: /* sizeof(prstatus_t) Intel 64-bit */=0A= + return elfcore_grok_solaris_prstatus(abfd, note, 264, 360, 520, = 224, 600);=0A= + default:=0A= + return true;=0A= + }=0A= +=0A= + case SOLARIS_NT_PSINFO:=0A= + case SOLARIS_NT_PRPSINFO:=0A= + switch (note->descsz)=0A= + {=0A= + case 260: /* sizeof(prpsinfo_t) SPARC and Intel 32-bit */=0A= + return elfcore_grok_solaris_info(abfd, note, 84, 100);=0A= + case 328: /* sizeof(prpsinfo_t) SPARC and Intel 64-bit */=0A= + return elfcore_grok_solaris_info(abfd, note, 120, 136);=0A= + case 360: /* sizeof(psinfo_t) SPARC and Intel 32-bit */=0A= + return elfcore_grok_solaris_info(abfd, note, 88, 104);=0A= + case 440: /* sizeof(psinfo_t) SPARC and Intel 64-bit */=0A= + return elfcore_grok_solaris_info(abfd, note, 136, 152);=0A= + default:=0A= + return true;=0A= + }=0A= +=0A= + case SOLARIS_NT_LWPSTATUS:=0A= + switch (note->descsz)=0A= + {=0A= + case 896: /* sizeof(lwpstatus_t) SPARC 32-bit */=0A= + return elfcore_grok_solaris_lwpstatus(abfd, note, 152, 344, 400,= 496);=0A= + case 1392: /* sizeof(lwpstatus_t) SPARC 64-bit */=0A= + return elfcore_grok_solaris_lwpstatus(abfd, note, 304, 544, 544,= 848);=0A= + case 800: /* sizeof(lwpstatus_t) Intel 32-bit */=0A= + return elfcore_grok_solaris_lwpstatus(abfd, note, 76, 344, 380, = 420);=0A= + case 1296: /* sizeof(lwpstatus_t) Intel 64-bit */=0A= + return elfcore_grok_solaris_lwpstatus(abfd, note, 224, 544, 528,= 768);=0A= + default:=0A= + return true;=0A= + }=0A= +=0A= + case SOLARIS_NT_LWPSINFO:=0A= + /* sizeof(lwpsinfo_t) on 32- and 64-bit, respectively */=0A= + if (note->descsz =3D=3D 128 || note->descsz =3D=3D 152)=0A= + {=0A= + elf_tdata (abfd)->core->lwpid =3D=0A= + bfd_get_32 (abfd, note->descdata + 4);=0A= + }=0A= + else=0A= + {=0A= + return true;=0A= + }=0A= +=0A= + default:=0A= + break;=0A= + }=0A= +=0A= + return true;=0A= +}=0A= +=0A= +/* For name starting with "CORE" this may be either a Solaris=0A= + core file or a gdb-generated core file. Do Solaris-specific=0A= + processing on selected note types first with=0A= + elfcore_grok_solaris_note(), then process the note=0A= + in elfcore_grok_note(). */=0A= +static bool=0A= +elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Note *note)=0A= +{=0A= + if (! elfcore_grok_solaris_note_impl (abfd, note)) {=0A= + return false;=0A= + } else {=0A= + return elfcore_grok_note (abfd, note);=0A= + }=0A= +}=0A= +=0A= static bool=0A= elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)=0A= {=0A= @@ -12240,10 +12436,11 @@ elf_parse_notes (bfd *abfd, char *buf, size_t siz= e, file_ptr offset,=0A= GROKER_ELEMENT ("", elfcore_grok_note),=0A= GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),=0A= GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),=0A= - GROKER_ELEMENT ( "OpenBSD", elfcore_grok_openbsd_note),=0A= + GROKER_ELEMENT ("OpenBSD", elfcore_grok_openbsd_note),=0A= GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),=0A= GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),=0A= - GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note)=0A= + GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note),=0A= + GROKER_ELEMENT ("CORE", elfcore_grok_solaris_note)=0A= };=0A= #undef GROKER_ELEMENT=0A= int i;=0A= diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h=0A= index 4c6b1f20340..edd337dfd7b 100644=0A= --- a/bfd/elfxx-target.h=0A= +++ b/bfd/elfxx-target.h=0A= @@ -624,6 +624,9 @@=0A= #ifndef elf_backend_grok_psinfo=0A= #define elf_backend_grok_psinfo NULL=0A= #endif=0A= +#ifndef elf_backend_grok_lwpstatus=0A= +#define elf_backend_grok_lwpstatus NULL=0A= +#endif=0A= #ifndef elf_backend_grok_freebsd_prstatus=0A= #define elf_backend_grok_freebsd_prstatus NULL=0A= #endif=0A= @@ -875,6 +878,7 @@ static const struct elf_backend_data elfNN_bed =3D=0A= elf_backend_sort_relocs_p,=0A= elf_backend_grok_prstatus,=0A= elf_backend_grok_psinfo,=0A= + elf_backend_grok_lwpstatus,=0A= elf_backend_grok_freebsd_prstatus,=0A= elf_backend_write_core_note,=0A= elf_backend_lookup_section_flags_hook,=0A= diff --git a/include/ChangeLog b/include/ChangeLog=0A= index 11001a3d1e3..b242eeb7df2 100644=0A= --- a/include/ChangeLog=0A= +++ b/include/ChangeLog=0A= @@ -1,3 +1,8 @@=0A= +2021-07-16 Libor Bukata =0A= +=0A= + * include/elf/common.h: Note segment constants=0A= + for core files on Solaris systems.=0A= +=0A= 2021-07-03 Nick Clifton =0A= =0A= * 2.37 release branch created.=0A= diff --git a/include/elf/common.h b/include/elf/common.h=0A= index 0d381f0d27b..7a00542cbdc 100644=0A= --- a/include/elf/common.h=0A= +++ b/include/elf/common.h=0A= @@ -739,6 +739,29 @@=0A= #define NT_OPENBSD_WCOOKIE 23=0A= =0A= =0A= +/* Note segments for core files on Solaris systems. Note name=0A= + must start with "CORE". */=0A= +#define SOLARIS_NT_PRSTATUS 1=0A= +#define SOLARIS_NT_PRFPREG 2=0A= +#define SOLARIS_NT_PRPSINFO 3=0A= +#define SOLARIS_NT_PRXREG 4=0A= +#define SOLARIS_NT_PLATFORM 5=0A= +#define SOLARIS_NT_AUXV 6=0A= +#define SOLARIS_NT_GWINDOWS 7=0A= +#define SOLARIS_NT_ASRS 8=0A= +#define SOLARIS_NT_LDT 9=0A= +#define SOLARIS_NT_PSTATUS 10=0A= +#define SOLARIS_NT_PSINFO 13=0A= +#define SOLARIS_NT_PRCRED 14=0A= +#define SOLARIS_NT_UTSNAME 15=0A= +#define SOLARIS_NT_LWPSTATUS 16=0A= +#define SOLARIS_NT_LWPSINFO 17=0A= +#define SOLARIS_NT_PRPRIV 18=0A= +#define SOLARIS_NT_PRPRIVINFO 19=0A= +#define SOLARIS_NT_CONTENT 20=0A= +#define SOLARIS_NT_ZONENAME 21=0A= +#define SOLARIS_NT_PRCPUXREG 22=0A= +=0A= /* Note segments for core files on SPU systems. Note name=0A= must start with "SPU/". */=0A= =0A= -- =0A= 2.31.1=0A= =0A=