From patchwork Sat Mar 8 07:38:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Indu Bhagat X-Patchwork-Id: 107540 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DBEB93858D37 for ; Sat, 8 Mar 2025 07:42:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DBEB93858D37 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=VFdqVrR3; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=Kutbi7I3 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id F3B583858D38 for ; Sat, 8 Mar 2025 07:39:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F3B583858D38 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F3B583858D38 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419553; cv=pass; b=V496Zt9gep325ym2B6G6ORRMSWmMQbcpfut6Y7sK5p4xGqlTZc+RJs6FB3/EbG6hyFj56YTM0mMg9bxJy1ke7DWNT940F3lZKMsNd8snsrOhxC9k42cgQzTpq0r8PmXi/no0JKc/GZadQtjtc+ljP2XBr9oXU2NZncYkS8PKZSk= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419553; c=relaxed/simple; bh=S9VDyCDAXReIXYW1HVCxF8T/NRhmpsUMi4NR6nE8zQk=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=JLRzQWHWoV2SELzATUdDt4Cn+Rkr3i/jYUmDdXTX9O8CqjtDwd9cdyjNkwo2AeWdJf5+2rXgT4mS3BX8AMtK0T6XttarnDL1/eRYF2ko+my46cvupUOsH0s4g/IxLy7UcpiDXaJA1EmP9ymIzlE8Hsee3Oq8tN2BhiP7+WFjaxc= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F3B583858D38 Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5286puBr028707; Sat, 8 Mar 2025 07:39:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=MRAYtUVjOH+w3ncQ18cOSr8sVx/1oqiqxdmhwvZqiIU=; b= VFdqVrR3G30/O8HkYB5cvQLwXiFH9WIFyk62RLh0hHMANk/4E9E63CXb1nhMezDV 4BdJV/WUAjH8CN+UXYA2f5QAHPNRYCaiFMcCRXgNWEAePDsKkPQ40SaI3BIktHQK KlZbIil2FgikVmDEMRbyQeFTD69aOzQvAj+NkoGdT9XsDkd239MEajxpbgrAe6qp pjRv+EyqXrW3IJnmN1OJLW8a/YLlvm9+0CLrHHJkQWRR6Goel1LUm7sFAQWGlNYC gIJczXI2DcAtdgdDtk56hyprufWm8Bl2c4p6uSnJt2RftJCU+o7y+j+pN8YIUN3l wPLNyuX7xVSDNPhPWo7T+Q== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 458dxcg3nm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:08 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5286P3we028986; Sat, 8 Mar 2025 07:39:07 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2169.outbound.protection.outlook.com [104.47.56.169]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 458cb5wp42-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JsCUOFKpq9GUTtAz9dmsOQzUhuZpRCU1kXf/7KonkcUrAWHL2yXPLwidDvcEIIfMjWrYscKbSl5UZb2wFUWgP+p4lgQvfXiJV82Ctru2pWWAkZgc+9WWq2B4SZqLYU0HPJZBu+gc4QuLmZFYDBlUReapCzs/jwmXYINMY/bQ9tkMILDTTl4+a6u5+M9mhneAfKdqzJRq5LQAR4tXFlOqkOzBDXcc824ADCwyJyTRhe57diVJ2HIxS89fffGIS2BEHFNzE7Klfu6MddAd9EeK2Mpchz2NrQ0j1DITqEpqi3KhkLYNRI87sKExEpRnOhZok8WFF9gs0Lo8y86QDgtt2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MRAYtUVjOH+w3ncQ18cOSr8sVx/1oqiqxdmhwvZqiIU=; b=LLezVRMMiAvgRB4YQvYO3b01+ZDCeud/nAYmSCViMr06L6boKWAKKwQOVXeUjneckknxF8N5oyMZPh9hcI/OKpkgooQk/Oct3z3JVWxHge3zS2KJZ86OrRcbnN+GPlsySumkr73wscPgGHSUSZk8c3MQ5aDqgyM9cHiqm3/SJPUGL2PwK/hOPECnIqEa8G4ktJnUJIRCqt9VpmIfchLDL0/VXxKR4rHryM4B0dhcUtwtZ5JblcfTOs16+GonDV4fLISDJCRy04PN8ZatnNMwPo8ePZAHIa5DCdx0nzs6CaFyjoKKJQSZ1vOw8FCaM+4KJw2wU8CNoYSq5lliYFyFdA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MRAYtUVjOH+w3ncQ18cOSr8sVx/1oqiqxdmhwvZqiIU=; b=Kutbi7I3M1oDf18Q4DvhUSo3fwStbVQtFF7T+7DD37bqrkHlvCF60P8ettjPCzcc1c54muFnfCmeO/i9HcmB1ga/P+jaJ89AgkX/7KSHOEdilm+eTE/xLbP/HDY1I8FVioMqfpG9GWAoCJqqpjKKocjzVXfEKJ+Ygn16P9oywe8= Received: from SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) by PH0PR10MB7080.namprd10.prod.outlook.com (2603:10b6:510:28c::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.24; Sat, 8 Mar 2025 07:39:05 +0000 Received: from SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515]) by SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515%5]) with mapi id 15.20.8511.017; Sat, 8 Mar 2025 07:39:05 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: nickc@redhat.com, amodra@gmail.com, jbeulich@suse.com, jremus@linux.ibm.com, Indu Bhagat Subject: [RFC 1/4] gas: ld: sframe: fix RELA r_offset handling Date: Fri, 7 Mar 2025 23:38:50 -0800 Message-ID: <20250308073853.78738-2-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250308073853.78738-1-indu.bhagat@oracle.com> References: <20250308073853.78738-1-indu.bhagat@oracle.com> X-ClientProxiedBy: MW4PR04CA0037.namprd04.prod.outlook.com (2603:10b6:303:6a::12) To SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA1PR10MB6365:EE_|PH0PR10MB7080:EE_ X-MS-Office365-Filtering-Correlation-Id: 220ca6d2-3ff2-44db-c244-08dd5e144d86 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|10070799003; X-Microsoft-Antispam-Message-Info: Op8alH5u1efxFJ4g09h3Nnu2QEhS7v+BaID/rJJOhqQ4I1GKNFatMyhERdmr1JzS4ouz2ow0j6sVK5fViwtZBJxd1ZiQOPXOOjRctM9BZjcucO0ONGag4SqE2/rUA8EPf3y0jNnLLcspIxjVHzdcekfZvery42FWXDXUqgygu3QryNGdzXsmL4amcDjRSi8f0eY1hz1sOKUfb81tVw48sOVxrz8YW5AQ/aLJB4YgJ3eAs0HozfJBWAGNY1Ht64ZOMmeOPaq70qiWMx6/jPEN6F33AfjaR+aq55WEH4xKjYqZYKAnXMXo7yG5cQU0TopuwDyIiqK2ThZK5RPEwqZ2cMRkrOStHMBpO/Rd8eAop8cbyyS9YctVR62QHI3GVKtFBvDtm+2GEbj2HzChashW2u7lXdN2iezv7uTUNERpl4p/aj+RWm9eGu5nPFAumtv2z7/B1ZBKopGyU2UAk0DVCickmpujBonXIZ0vxdnpqEVrqqL+fFBrLkkqIrgUfa9TaFrgWqC7Y4FNucIk42Ad9lB23Epb55mtE4NYuLZ9moZOVt21b5xopAIL4iv0qLs0Y4s6tvxEQJgBT/FHFjMV/Qi4vANgG2u2/H7OH6oyM6gtEbxGzKvuYNYhll+XCHiJODRhYmu7DFAw+qbipWhmyH2+wxKYawiV3kwadvmatDhuY+52QeqmLEq3YPmCF2uSQ1gzRthKfjR3bFO2khlzGXFUXmwKwkhKB4XOPGKB67Oy23Z5Oi467Yxc4SXm6iFkHku/I+5Wx7dQqYbxSDyWBfpQULmYHoyuEbA/kKmaYC/+8jgjicMCV5t0tp5M23QWBvMZ7s38+8+1OS6fb3Mkt2Ue2vDNqdFkDR8LbDwcNu1IBS0UqBNOuj6UyfsvZEy5WkPrXflnMdkKJjGkxa17SAws0lkl/ijp2s0vGvWgXxjCiJ7vf/pMzAr/2mXDdsdNp9NTSZNupQ3VZjvZIUkUIIBsnBBEtFDnZm9MzC8dNqAvD+98OCGmxq55iVPII2CUxLlnBEHKyCJpbkeWjf4zBtf1H9jTPiReoUMY1wf+9jQ4U/dKUyzhexL3wwgrX7YBFRBnGmC/JqoYxu4AXBzVENpw4gjPSx2A6DSONAC2fg5iR7l6DMakLQYkkXwLJ52GEN3hzLu+/YUUkn9op6NOkv/d8X6qMzKyrVWQz4BiioHJcoeEuV9PBPwgDCCceF/zy34pqBWBi0lDDGNktBqMiGbfkzdO/mP8kcypHYQEK1eo+0AkD0ATjj0/t9bleX8B0OTPIsdcj6Xs1TmnNI3xtewT/poVA36NRL3ok9LBeBJVNxOOTm+A+dufRvFVoRFptUUNUgjtcvpvPdYk6XCO1R8rAaJnCYrgUwaiSp4X0PeSbK2gkiIYwkwlGZOoyOIY X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA1PR10MB6365.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(10070799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 4Dw8wLqRUZgCctUH0Pk6Xt0tRif7Qyk7PxQWQE3lkhY/b+9juIHawn7xVlXpbdffnd85BXghn3P0SjJexawek6/MZYkX+watc7NIn2Mv8h9nT/5AUFd6aw+rTioojfv9Ro6272gQ5dT2XIsw98yyBwvV8QP4fhPpM4xNEbBesvq39XZgPxnioUjOMwIbzzCDyVwx6yl3JJPlDjkOtUAABFYCdjZSqJR/XhIyIFwqEo3iHtK3IqsDn0Qs9E/unfKSN25A+nnOxZc91dzTIu7AhV0alFdNkJWXI7Awy11eM/EVLDoUbfbdZWOWl04ia+rwwD6QSJePk4RjnBXhiU3YQuVl/s47OoOIcKF4unBNL57afpJiPusKTAg1ZQCweGADOha/sd9V4Ipi9Gb9l8kkyuQXps3MTkBuPVTrteAUsWUSpqKJLcfr7PzEcqAzgVh5GplvcnIXF0a3jYBxTAGzoUcx6G4UPVOJrFUhhWweaL/b6Y4cpbvGEJeMyqwms0cwRD6Gai8R5/0FARmsD2hSXK4Q4g7I2745Rn/Rs4llm+oZMA1eYUews36nShEwy9+SR5Ow1fbj710lWE9Wpsa0W7s/T2BJ9tW6pw03FruXPh2rMm07il2yCG01OtbIRQaJdUhaxLAWpg0uTGsg1UpgY8Swot1PAC9oPWNft4nPRf/ltLdeLsGTbccU6ba9ic+Zz6zKbO1+T5FT1mrX1vyofXJ5aWzxhuuH4BfQzSMqsgegUeDMirt3UQ/kgmfgTfPQYfdf7KTgwknrXQeaEFQ7dUM+Z6WrOLcdOvkS+GiblhEF2ZdwQWZZ228BERtOqSdqODekiv1M9iJvuzkfun95Ql/T+JCB1ivCyuHZuxqZqxgeamSlGTgYWYu9poURCIlf9IbdspAd0ZvEjpXqPAs5e1pdPtuvByEZYSkGO48pNejWzu06s0Llo+svhuPvAcitnUdtIRn/oyBGFOuw7ZNqJNODjP3G351+In8mhsaCJOx9vKWlQBDmM6uFN3YTeUGznYIeUopQNLHsdQq+D03PkpyoUt6D+GMqcIl5ow+GMEbzQw0Xi5UUKq3bNvYHJww+LDw1jeZ79rS9fXqgws78tL7Y2mnt+1LieOa2Qi6l+3gFnrwOVHCTZ3zUkl/sG00ck1/agI9mMtFnxGa1UTo6qmqDj9JZTZyHB7O2oj8hBYhia2BzRMCgE99B0TMpyeOn8qMf7X90C5YJdh7DZsj4tqIfnq+6FhbSnJpnyYJSW3y2dm28Helh0/mJ2aGgvEpXcv7ocXu3W3ltnwONewkqIBZmKCAQHUJ9uxil4ZD456LaY22/HcMeB4FrynOtSNv9KkB5kfrafnDkO5rPTRZBE9z1uMdHqTt0vdA/rf5/Sbrxxnobs8hfBsHJOqSLeNSf5AhhlOL6Dr8dUwxvx0r2aHPD1JiP9JReNhdE++BrHR/dt5eZ30+uz86WFsaimE33BWtjOjsRpejETjKFhfzKmWN5TKC31rzOWRZYUzFg5PLSdsilGqL0IFmJBK8WyVuxsPEiI36kdvlnFQ1yZTnTlisOYKtLt9pcCWWJYK9w+8EO85SAQcFMBjQpNtQoaxtftt9MVG3+Cp4dEhdTAolks8jiEvVtue2xSZ0YhmhDFdU= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: yUS8QJwIQ/7W9OOMnnfp8WMn/9bbgkTFzofWJkXtgZJuAipn/8giLLhjd5LK2G/6VLkd1em75IsWV3qwlL9j355vbcEbmwaPBp2tvpD9tt6XCdXXr53DMZCzjv7A25yJVuTmErvLn6IDGJOVKjBXSrvb0eqDhR4bAdLRNTg81jK83Br+XFab82zb9RRy/JS8bmRtDxwSG9qg4jhuUAfGPfD7smSVht6l2LX+KYCufQgC1BH8zf/BBUg+alzKmGxutwlONXQsULpBq62gK+DCzUsfqlJynKCFWZVTR9dnb/8jQs7aIWo/0B4D324smtu5a6YFZGChi/IqXNPwQIS+khZkSREf5yq4QZUgS/72b23Tuns4evHfAVFp3Ouns+MuQzwC7qTnK/31Gp6tA260csXJg7BlI3i+lRB5KDsvY9+15RtNRXvmaR+cpJHT17lIH1LBAEh706fKEn1wUvyob9vV+Dr3Ep+GmLTiDbEhYsevcjd29yq9lWpttQ0b13Je31l4QupveTZStpt110r1ChJ7C8lv+WznB5nUK5xtwXDraf5pDTxze6XnRLg0luM2EooNLMGKk+5PL0IDaDxVMybU8uveLo6X+VVArt7L72E= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 220ca6d2-3ff2-44db-c244-08dd5e144d86 X-MS-Exchange-CrossTenant-AuthSource: SA1PR10MB6365.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2025 07:39:05.1790 (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: aSPSbkeqUWLHctczdtf+4YLhm+w9MMhO2xJASxlADSx9fzUpgAg6/P97Gk48Dx8M/PxHZHpKlR9Un4QmBmJAmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB7080 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-08_03,2025-03-07_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503080052 X-Proofpoint-ORIG-GUID: vgHzGw3x0tsbBeUSgNugia94c6_gPrbX X-Proofpoint-GUID: vgHzGw3x0tsbBeUSgNugia94c6_gPrbX 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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org In SFrame V2, SFrame function descriptor entry is a 32-bit signed integer (sfde_func_start_address) which is meant to indicate the start PC of the function. According to the specification, it intends to hold the offset of the start PC of the function from the _start_of_the_SFrame_section_. This value can then be used by stacktracers to simply do: sframe_find_fre ( pc - sframe_vaddr) when looking up SFrame stack trace data corresponding to the program counter (pc). In the current implementation, however, GAS is actually emitting a PC-relative RELA such that sfde_func_start_address is the offset of the start PC of the function from the _start_of_the_SFrame_FDE_. ld.bfd was then fixing up the value by adjusting the final values by r_offset Co-Authored-By: Jens Remus bfd/ * elf-sframe.c (_bfd_elf_merge_section_sframe): Do not fixup SFrame FDE function start address. * elfxx-x86.c (_bfd_x86_elf_finish_dynamic_sections): Likewise for PLT entries. gas/ * gen-sframe.c (output_sframe_funcdesc): New argument for SFrame section start. (output_sframe_internal): New symbol for SFrame section start. include/ * sframe.h: Fix incorrect comment. --- bfd/elf-sframe.c | 12 +++++------- bfd/elfxx-x86.c | 9 +++------ gas/gen-sframe.c | 10 ++++++---- include/sframe.h | 2 +- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c index 67ed874e025..a5958464536 100644 --- a/bfd/elf-sframe.c +++ b/bfd/elf-sframe.c @@ -429,7 +429,7 @@ _bfd_elf_merge_section_sframe (bfd *abfd, uint32_t func_size = 0; unsigned char func_info = 0; unsigned int r_offset = 0; - bool pltn_reloc_by_hand = false; + bool pltn_reloc = false; unsigned int pltn_r_offset = 0; uint8_t rep_block_size = 0; @@ -465,6 +465,7 @@ _bfd_elf_merge_section_sframe (bfd *abfd, of PLT_SFRAME_FDE_START_OFFSET is also set to the same. */ r_offset = sframe_decoder_get_hdr_size (sfd_ctx); + /* For any further SFrame FDEs, the generator has already put in an offset in place of sfde_func_start_address of the corresponding FDE. We will use it by hand to relocate. */ @@ -472,19 +473,16 @@ _bfd_elf_merge_section_sframe (bfd *abfd, { pltn_r_offset = r_offset + (i * sizeof (sframe_func_desc_entry)); - pltn_reloc_by_hand = true; + pltn_reloc = true; } } /* Get the SFrame FDE function start address after relocation. */ address = sframe_read_value (abfd, contents, r_offset, 4); - if (pltn_reloc_by_hand) + if (pltn_reloc) address += sframe_read_value (abfd, contents, pltn_r_offset, 4); - address += (sec->output_offset + r_offset); - - /* FIXME For testing only. Cleanup later. */ - // address += (sec->output_section->vma); + address += sec->output_offset; func_start_addr = address; } diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index 6ea41f29af1..465b5cb118c 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -2986,8 +2986,7 @@ _bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd, { bfd_vma plt_start = htab->elf.splt->output_section->vma; bfd_vma sframe_start = htab->plt_sframe->output_section->vma - + htab->plt_sframe->output_offset - + PLT_SFRAME_FDE_START_OFFSET; + + htab->plt_sframe->output_offset; #if 0 /* FIXME Testing only. Remove before review. */ bfd_vma test_value = (plt_start - sframe_start) + htab->plt_sframe->output_section->vma @@ -3020,8 +3019,7 @@ _bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd, bfd_vma plt_start = htab->plt_second->output_section->vma; bfd_vma sframe_start = (htab->plt_second_sframe->output_section->vma - + htab->plt_second_sframe->output_offset - + PLT_SFRAME_FDE_START_OFFSET); + + htab->plt_second_sframe->output_offset); #if 0 /* FIXME Testing only. Remove before review. */ bfd_vma test_value = (plt_start - sframe_start) + htab->plt_second_sframe->output_section->vma @@ -3054,8 +3052,7 @@ _bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd, bfd_vma plt_start = htab->plt_got->output_section->vma; bfd_vma sframe_start = (htab->plt_got_sframe->output_section->vma - + htab->plt_got_sframe->output_offset - + PLT_SFRAME_FDE_START_OFFSET); + + htab->plt_got_sframe->output_offset); bfd_put_signed_32 (dynobj, plt_start - sframe_start, htab->plt_got_sframe->contents + PLT_SFRAME_FDE_START_OFFSET); diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c index 947faf366d3..10afcf35448 100644 --- a/gas/gen-sframe.c +++ b/gas/gen-sframe.c @@ -608,7 +608,8 @@ output_sframe_row_entry (symbolS *fde_start_addr, } static void -output_sframe_funcdesc (symbolS *start_of_fre_section, +output_sframe_funcdesc (symbolS *sframe_start, + symbolS *start_of_fre_section, symbolS *fre_symbol, struct sframe_func_entry *sframe_fde) { @@ -624,7 +625,7 @@ output_sframe_funcdesc (symbolS *start_of_fre_section, /* Start address of the function. */ exp.X_op = O_subtract; exp.X_add_symbol = dw_fde_start_addrS; /* to location. */ - exp.X_op_symbol = symbol_temp_new_now (); /* from location. */ + exp.X_op_symbol = sframe_start; /* from location. */ exp.X_add_number = 0; emit_expr (&exp, addr_size); @@ -683,6 +684,8 @@ output_sframe_internal (void) int fixed_ra_offset = SFRAME_CFA_FIXED_RA_INVALID; unsigned int addr_size; + symbolS *sframe_start = symbol_temp_new_now (); + addr_size = SFRAME_RELOC_SIZE; /* The function descriptor entries as dumped by the assembler are not @@ -766,7 +769,7 @@ output_sframe_internal (void) i = 0; for (sframe_fde = all_sframe_fdes; sframe_fde; sframe_fde = sframe_fde->next) { - output_sframe_funcdesc (start_of_fre_section, + output_sframe_funcdesc (sframe_start, start_of_fre_section, fre_symbols[i], sframe_fde); i += sframe_fde->num_fres; } @@ -1767,7 +1770,6 @@ void output_sframe (segT sframe_seg) { (void) sframe_seg; - /* Setup the version specific access functions. */ sframe_set_version (SFRAME_VERSION_2); diff --git a/include/sframe.h b/include/sframe.h index a965e23bdd1..6c3152f6121 100644 --- a/include/sframe.h +++ b/include/sframe.h @@ -174,7 +174,7 @@ typedef struct sframe_header typedef struct sframe_func_desc_entry { /* Function start address. Encoded as a signed offset, relative to the - beginning of the current FDE. */ + beginning of the SFrame section. */ int32_t sfde_func_start_address; /* Size of the function in bytes. */ uint32_t sfde_func_size; From patchwork Sat Mar 8 07:38:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Indu Bhagat X-Patchwork-Id: 107539 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0D39C3858D39 for ; Sat, 8 Mar 2025 07:41:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0D39C3858D39 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=DwWKA4KF; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=rpUoA6CA X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 28A443858D1E for ; Sat, 8 Mar 2025 07:39:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 28A443858D1E Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 28A443858D1E Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419556; cv=pass; b=qYXHOmKSJEVOK+Kryp9SEkoCWGRBycyFJK6X8vWZjzU0qDcYaZOmyTdY48Sh0BhtfKZVYBgYpsHMDrPmfYYz7TZtNrDSjW1Wgb4zdkEfwRzlAyTbmcIp0c5QIyPEbRh0pb+DI+FRjQDEf9Y3EsaP6uywmDnxqgIn8Mp3YnljoB8= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419556; c=relaxed/simple; bh=ZR7I0xXV/ijC1eTu+sq/9Vx/bscPn3xRQSgOaYy3F54=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=vaKKFoYhB5iKptLYjgRKGK+VSb+ud2wI4juVYEHSQX9sXWGZcSqp0Yxe/6dMazgzTAgz18iyWG3RzM8Ij6b4fyjd4hrONf7sIIwCLnQsntA7QTgVfLbJW5Pec8sAn9PXV2UvPBx+C/nzK2/M7jqVnry+PM671vWdwrHWLLLHRpo= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 28A443858D1E Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5283VaFn015503; Sat, 8 Mar 2025 07:39:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=VI3zNBeXRl91E30z/0TKNbMx4cz8mt/HmuxTRm58fzw=; b= DwWKA4KF7QEhYV752zbPDRYFy7C39E4INE8SIIezVGJagph94b4lbCp18rAGU6Xh sD+zhL+v8F2rK3vu6nHsjaV/zxiSPpM2vu5DN8wPDOoCLlsHOlqeBuDEJDOBmXbL 03XPpIFq+QcIOKaqe4mgbGHzun2lX6rtx+h9pjHCdoe6G5jUegON5t9JYDddQ2xf gnGHShi6/3VfeNtVamOrbZhfJ5f3YwVSlqbU238jT9VIaD9VlD89bDMlEgPZ7Loo 3TJ8090OymIUghOxa7DgqYYDYdY4SW/fGBLVXvMbCAeDZK2gxz63dP8WKFUtDm+4 jXqPTxFKT+6wdEPAfoI+Nw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 458cac85av-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:12 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5286L6n2015000; Sat, 8 Mar 2025 07:39:12 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2043.outbound.protection.outlook.com [104.47.58.43]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 458cbc5nsj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=se9s3uiOYiqEVt8ONKqZ6myM4mnGMmCPhwzuAEQUscywIc4yby0mf5uzlfxqaSFjz6mEX2ulYT4L9LnU3DUkiv7SWFk9KBIr7mCu6GFvg42E7Sv1gM5EyQIz5gx1wI8oZwHJa6LNdZWSj9+gfkueDFbi5F2k0UO/kmt2inaaU2wq1mV6epp5lsBuYudULAJdY7nPaPanfBgOKw1ksZuyT3Vg2hqkPVbEXRKP47rLSBLRFT6t9Fhii/aTjlJiKURFjQh0etVTDUe5FjSeeUtNQwX62o8AMU1IllXGkRD7j8gI3RFdqXT5XyRU2+OaD3JhmiJY2MsHgfH2KHVslEETPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VI3zNBeXRl91E30z/0TKNbMx4cz8mt/HmuxTRm58fzw=; b=pKhA3KHGWt3jPrmA0TaovgAtbhBJqmTSpaods+AE23pU8K2rdD5E1qiwSp0i1G/p2vQTmmga1nfXLgtuUcZr5aFr6P6UIgs2FGrQQ4u4lruabfE9ZsdbVSg4zDRfoCd9s+rtteH7YoN19x6+hlwtTbZaLsrURPLtwNXTNxkuZZYTwg0HgSYDcqitpLlDNtmvhMUs0+Jq4rdsffvVibAAaE6XKlXTDJAD7h8I/023GZmSPPAqeEw1ydSSzsYxMwxYg4u0d+tX5GJ0HDsedTjef6OE5bO+cnlN4SlbS1FepQms7kat/h0P3Q+fGrprH0koQqk1Q83FY/9X5luYq7h79w== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VI3zNBeXRl91E30z/0TKNbMx4cz8mt/HmuxTRm58fzw=; b=rpUoA6CArMxOxX7QHKnMXpjGlp08hlYfJLT8w+DkwedIflYq624t737QZpPBubBlUPJQYTVMmZXkthvhupwjmVAW/FvdzLd0JXHVFfRDzZe/ddTWz+jZohc1x3lYIkD6mv13xkIngIfjl8G3SLDnMk5uQRHE1PWn02BPLpfLFDs= Received: from SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) by PH0PR10MB7080.namprd10.prod.outlook.com (2603:10b6:510:28c::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.24; Sat, 8 Mar 2025 07:39:10 +0000 Received: from SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515]) by SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515%5]) with mapi id 15.20.8511.017; Sat, 8 Mar 2025 07:39:10 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: nickc@redhat.com, amodra@gmail.com, jbeulich@suse.com, jremus@linux.ibm.com, Indu Bhagat Subject: [RFC 2/4] objdump, readelf: sframe: apply relocations before textual dump Date: Fri, 7 Mar 2025 23:38:51 -0800 Message-ID: <20250308073853.78738-3-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250308073853.78738-1-indu.bhagat@oracle.com> References: <20250308073853.78738-1-indu.bhagat@oracle.com> X-ClientProxiedBy: MW4PR02CA0030.namprd02.prod.outlook.com (2603:10b6:303:16d::18) To SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA1PR10MB6365:EE_|PH0PR10MB7080:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ad5ed0e-b61d-42ff-5bd3-08dd5e145080 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|10070799003; X-Microsoft-Antispam-Message-Info: O+nw6uE1agHjk36OtbXB70zr+8TlFdZ1fD0b0OMHyl8nQvwldxkc6+5/kIPHtEFEJ+K9idYJpPD3dVTZmZHMNSzaQfyiORFsLHf5M0UWzqBXgNMhwJf0/z+d0rkVwFQx4aOQVAabLWcUwjDXHK9e8d02+Sb1OS0puURKEjsq5NFUAW3U8Eew+q2aYpu02r7uI6ud16DRjF57GlC+4r71Fm1Rdae8xBkZtpFEO4LxKbHsBPt2pFMSjRaJxklmSJ6YTtXWAzcfNWhepo8bdYGGGVvMP7p9tSt8kb37mCY861MT1EaLinfwh0MLGSM1AKbx5vJyevpRKTtdlbIuntVfWzQ1ul3XZCvBfgjrmLXL8I+b5komKzWwRslj3N7IErRkx9oqjw5+J8UVjJtCYD2N0+sp+x8MrYTpOCpia7n/0EpnJhcQsPyBr7RhRhif2nGYkm9E8cYMoLHmbRjZj/VdNuCx5cLF99cez1lKedWBL4Lp2IJ+fpEexIHvqYaiw9fBCjqR5fBSvFhr3GpuQfI1r634oEB4AmwV3GhTP7+U1tA8IiHeDx33forkQOIOmNSfE8Eh1a+p1zwaYMNMp1pvfiC4QM4z1c+OxsMyA9LRk8mCyEiznjtgQZVE/1gC3LVKa0+J5e8/PT7ZJKRLo6FyL3Y7xGhqR0TfVBIbPL3OjuiEoPW4ye9VjrGWpW6BJkv/mYpWCDJUcLqimkCOYWVA7Zfzm/yW0YYevbIduuSbX8d9a3n4DlXZupiz9SpFcq0QOPKeboVLJ9ltlIMKq1lMZBqualXm1z5BMchbS8swYVOlXfKwM/cb15YPvy6lXlBhFRiA7n7T2BZebbvPkSeLr6/rwkzOtn3Gqbb+xloV9c0wZJxzymkl03e3PKDeO1DZalEm6Db3NvHhXIof3djksBnG+xJhzmHrDHHJuduGH2BwfzwkGTj3i+kLGRnCu4n0cJuv5UczpfcQZ2ncgGEcUdXfQqKBpJ9l0Ixbh/z9S7TLv0JaVxbLNGtIz99f08gOdxvmy8C/Pet7halwTpVovGiOEap3iyuZPDUTNkWVFCLfgtaZmL6wtEuJRx9A+JXgSWx9V2ODwdmvaz/mAKjZS7pBTBlLkQt2SXLtAwC5LS40AJGnSKcDM3xyVUlzJaSsMPCxrtu3JpxCZcT+lZtZ/R1IZJi7SbkJhhMXXzwutKW/GBR1cS9m+wP8Es5o3gCuj9KTZPwH54F4cR/7lXVEPaPHqR1ORxd6BVWJ0vzx31ZjQPWmYbAGqeyVZ6OqwdXOmLtmLS8IAL4I9JIpUjtguzfVwVNC0XpNoZM2AkWuT7/ngpnZu8MTOBsjocxSIm/JXbI22NbIkTqvUTNigOof7tNHAmIJteIMYLPUr5EtbQKgZFjK6ev8BrbUmpl+S+U4 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA1PR10MB6365.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(10070799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cGOykJ+wTrFmztOFmMUNARWt7mVboDFzi99utM9dmriOuernD3PX9oKOs15mwfBY5NFPIqW65euGpz6l/WXgx9+V6JEbv6NublOoSDjSqtpe+iLaxS4e2UbopB7hGnoocQOvPr48k91j+zDPWU6WLfZNRvrPhjEcO8fny25ANe0UMSePQluuNDD8Lkpz8j118J02PF0odJC1P6nzYPeFbQZiIuJ/7654kA1syKLlodmfMazgF9+XBYygh24FCVW8OW95Aib/Rg9Vp1q6zsvKMh4VDpITtZi4uzA+lKNi6yuuQZSk0uks25PkN12vIJa1f5GCt9GA8ckXyELZU0/lNTmi1UqYLUPfRGsgL/8ALt4UqL5sidp8Cx/JoYE8hEFowgsvRgvRfevSKGAaNUUEdRnV+V/fkTZ8Gk9ZzFgx+XkYOLjdrd4/QHgPMJ3rWYZ0/CtGmkLQvqbd6+TM9i3oq3zLDet7j6Uq4h/a70N6g/IyMyId5K2LuvGFeV2Uq8h+p9Y435oOoa927HcFwm0Elo/7wCMD/kgJyPPber7H3Dk25emPTi4n9SOfTd5GMBnmSpsZrzHvZobqRQ9u68zM2//m0gk7pw0nSPDuELHc+i6zhLuOsgwJKetCPWJ1qHMgqyqjemC2pU4AXjdInhzHEQTJf8A87FWsARjrv2quNoj5eGW0vEG8nRDkX20xyXgWo0oiqPcBvf3uKk5paGMXIgw9+B92ZYniX83vHAS6jH+xKhY2LWS4GdYPWNKWYGtyc1mJTEbfUKgCfBWsjttlnnuD0hc6kUIBnxR583CCRI9tTKDMA2t6axJ6NzJp9cU3hcfQO4NxurOR1buHdXCCQ7pxHagpQtvNt6IKjuoQNJSuY0f+foo/EwhaU7pX/gWjk688JsVrJNutNJH1Y7PWd9q7iE42RN/ybS0p8CN6Sfgjw9fXRwtmiDiKlDhtU7oV8Dm2r32EqWFzmg0W2WyPq06dymt35pli8Os3CkepCNzEJO8nNIsedESrR4rTbsvR83lFlBZsLASnDcXzWog7hYo6vX1lNFXkc/doNsMJaOdnWebnEcbo2BzwpgJkNKtHpJIvY+4nzii2zOqz3coECsOvu+vJfKdqikBSB5CGYh5nl9+fMN9wnmVWHhihhzyjyTmBHirDa6bB3O886Nyvkdjrrc/zy6gj9kBUioDY6KJ0k7I+++8+Jc0v8wvx8z+gbwMkzbPqSSxyYybUCIz/gkTqVmh8uVgG8tBxxKqOBI/yL8dJV6ZgllMDA5TY5maoLef6feyIPPX4UubLP3nqfIsfNhTo9UUySz1fDfP4QhyA+eZloRHwWaOLmw9A1oA4iEqky1FLdg0EXOQt9YwguNd5K0qpyo/43xh+A4F14HFXeXo1Ux0uipJUxP4tdQJpiWLtdXDDol/acnA5UXvOMQHzj9Xp6ATyYOvWbIzgZ08YU/l6/4+d7d3X2D0rFx4fQiVVnFhNgIZevIzvbr2wl9oosYSOBjOZp8JSKk/MPCF9aP23EH9dqhAdfqsQCllPC3hNqUxEV2SnyOgJp0CyulrnGeWoOlPZp5TYrL2vNwwYsMUGcO6XOc0lQq/YQAXX8IAbcX86uLwjPFSjO8ktHbVMrfDX3tgV1SNPoj+0LKo= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: vaYWOpxxHSHLlAxZ+RH1hCx7BIRG4u+8if66P4AILQY2tHN3TMirW6jzXarAAld9WzXN0yQvmAJxXSmEz+wRa/k4ELf1KvkG6mTkOQkye7ZcRcGdZxBbWhSn1OBmp9CAxxt8pCMt4GBiFXNfKTq1v8uzXNI5rKD5QlZJsmttcm5wsdOfCIRpG5Zx+yFHrrB+hFt+jMu149qvCuPaqtlEzy9o5UyiyCRaGqfB6yuMW1KQkix21NYINjO+mmvd9uIe1VX9x6TIzj4uGcCJMY+ls/2ph7qYpOIlKveBO1ojOQA5BtDqZvlEJlg81uEcebVpO8QjcaXDhjmRg4wCpYrKn/VH4XgaOMQlyXr/WNVfumnudcmBsx24/Z9HF0KpfGJUji93hRAL4WGKBknP6r3oNnckj5Bzhcns+icC48DuGCo9qi8H+3fLEAO6ImqYuMy/HDBlNPuJjA8+Cee+LveBzkfvyB0yHCpqojfIxuXbC9zfdRrda9fEXVb2P+pK3LlY8leyH7uX1eWwmVXwrqsmALyEeOBCPoJzaSUpwS7UeX0JiTfWwPKVTDbYfXmiqu2peprdjYUDIaAIxfxy2RPqELsJJFmjnT7LKqpRXWxwCus= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ad5ed0e-b61d-42ff-5bd3-08dd5e145080 X-MS-Exchange-CrossTenant-AuthSource: SA1PR10MB6365.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2025 07:39:10.3599 (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: R/PQIwqZEitzCgBn8CEp5PQOXkdx72bmWfFAdaxIwWANjoNgCyOW1Ec6syxsmXdd4XXdiCj+7uTO67Ov9rOeFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB7080 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-08_03,2025-03-07_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 adultscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 suspectscore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503080052 X-Proofpoint-ORIG-GUID: McdNtFYUnxtPzmkOYGgovL2mbUsJIu3X X-Proofpoint-GUID: McdNtFYUnxtPzmkOYGgovL2mbUsJIu3X 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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org PR libsframe/32589 - function start address is zero in SFrame section dump Currently, readelf and objdump display SFrame section in object file with function start addresses of each function as 0. This makes it difficult to correlate SFrame stack trace information with the individual functions in the object file. Use the dump_dwarf () interface to dump SFrame section. The current infrastructure (for DWARF debug sections) already supports relocating the section contents before dumping, so lets use that. As a side effect, objdump now adds two new ways of dumping SFrame sections: - objdump -WS - objdump --dwarf=sframe We do not publicize these options. The lone advertised user interfacing option (in --help) remains: - objdump --sframe For objdump, we continue to keep the same error messaging as earlier (by folding the check for section into the new dump_sframe_section () function): $ objdump --sframe=sframe bubble_sort.o ... No sframe section present $ objdump --sframe=.sfram bubble_sort.o ... No .sfram section present Similarly for readelf: $ readelf --sframe= bubble_sort.o readelf: Error: Section name must be provided $ readelf --sframe=.sfram bubble_sort.o readelf: Warning: Section '.sfram' was not dumped because it does not exist $ readelf --sframe=sframe bubble_sort.o readelf: Warning: Section 'sframe' was not dumped because it does not exist binutils/ * dwarf.c (display_sframe): New definition. (dwarf_select_sections_all): Enable SFrame section too. (struct dwarf_section_display): Add entry for SFrame section. * dwarf.h (enum dwarf_section_display_enum): Add enumerator for SFrame. * objdump.c (dump_section_sframe): Remove. (dump_sframe_section): Add new definition. (dump_bfd): Use dump_sframe_section. * binutils/readelf.c (dump_section_as_sframe): Remove. gas/testsuite/ * gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d: Adjust for new output. --- binutils/dwarf.c | 36 ++++++++++++ binutils/dwarf.h | 1 + binutils/objdump.c | 55 +++++++------------ binutils/readelf.c | 48 +++------------- .../cfi-sframe-aarch64-pac-ab-key-1.d | 8 +-- 5 files changed, 68 insertions(+), 80 deletions(-) diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 08bb623e405..b456871d4b6 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -30,6 +30,7 @@ #include "gdb/gdb-index.h" #include "filenames.h" #include "safe-ctype.h" +#include "sframe-api.h" #include #ifdef HAVE_LIBDEBUGINFOD @@ -102,6 +103,7 @@ int do_debug_str; int do_debug_str_offsets; int do_debug_loc; int do_gdb_index; +int do_sframe; int do_trace_info; int do_trace_abbrevs; int do_trace_aranges; @@ -7678,6 +7680,37 @@ display_trace_info (struct dwarf_section *section, void *file) return process_debug_info (section, file, section->abbrev_sec, false, true); } +static int +display_sframe (struct dwarf_section *section, void *file ATTRIBUTE_UNUSED) +{ + sframe_decoder_ctx *sfd_ctx = NULL; + unsigned char *data = section->start; + size_t sf_size = section->size; + int err = 0; + + if (strcmp (section->name, "") == 0) + { + error (_("Section name must be provided \n")); + return false; + } + + /* Decode the contents of the section. */ + sfd_ctx = sframe_decode ((const char*)data, sf_size, &err); + if (!sfd_ctx || err) + { + error (_("SFrame decode failure: %s\n"), sframe_errmsg (err)); + return false; + } + + printf (_("Contents of the SFrame section %s:"), section->name); + /* Dump the contents as text. */ + dump_sframe (sfd_ctx, section->address); + + sframe_decoder_free (&sfd_ctx); + + return true; +} + static int display_debug_aranges (struct dwarf_section *section, void *file ATTRIBUTE_UNUSED) @@ -12648,6 +12681,7 @@ static const debug_dump_long_opts debug_option_table[] = /* For compatibility with earlier versions of readelf. */ { 'r', "ranges", &do_debug_aranges, 1 }, { 's', "str", &do_debug_str, 1 }, + { 'S', "sframe", &do_sframe, 1 }, { 'T', "trace_aranges", &do_trace_aranges, 1 }, { 't', "pubtypes", &do_debug_pubtypes, 1 }, { 'U', "trace_info", &do_trace_info, 1 }, @@ -12762,6 +12796,7 @@ dwarf_select_sections_all (void) do_debug_str = 1; do_debug_loc = 1; do_gdb_index = 1; + do_sframe = 1; do_trace_info = 1; do_trace_abbrevs = 1; do_trace_aranges = 1; @@ -12806,6 +12841,7 @@ struct dwarf_section_display debug_displays[] = { { ".debug_weaknames", ".zdebug_weaknames", "", NO_ABBREVS }, display_debug_not_supported, NULL, false }, { { ".gdb_index", "", "", NO_ABBREVS }, display_gdb_index, &do_gdb_index, false }, { { ".debug_names", "", "", NO_ABBREVS }, display_debug_names, &do_gdb_index, false }, + { { ".sframe", "", "", NO_ABBREVS }, display_sframe, &do_sframe, true }, { { ".trace_info", "", "", ABBREV (trace_abbrev) }, display_trace_info, &do_trace_info, true }, { { ".trace_abbrev", "", "", NO_ABBREVS }, display_debug_abbrev, &do_trace_abbrevs, false }, { { ".trace_aranges", "", "", NO_ABBREVS }, display_debug_aranges, &do_trace_aranges, false }, diff --git a/binutils/dwarf.h b/binutils/dwarf.h index 3419027ac1e..6f693b1eac2 100644 --- a/binutils/dwarf.h +++ b/binutils/dwarf.h @@ -102,6 +102,7 @@ enum dwarf_section_display_enum weaknames, gdb_index, debug_names, + sframe, trace_info, trace_abbrev, trace_aranges, diff --git a/binutils/objdump.c b/binutils/objdump.c index 8fdbe03c4fb..87695a31d67 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -4981,44 +4981,20 @@ dump_ctf (bfd *abfd ATTRIBUTE_UNUSED, const char *sect_name ATTRIBUTE_UNUSED, #endif static void -dump_section_sframe (bfd *abfd ATTRIBUTE_UNUSED, - const char * sect_name) -{ - asection *sec; - sframe_decoder_ctx *sfd_ctx = NULL; - bfd_size_type sf_size; - bfd_byte *sframe_data; - bfd_vma sf_vma; - int err = 0; - - if (sect_name == NULL) - sect_name = ".sframe"; +dump_sframe_section (bfd *abfd, const char *sect_name, bool is_mainfile) - sec = read_section (abfd, sect_name, &sframe_data); - if (sec == NULL) - { - my_bfd_nonfatal (bfd_get_filename (abfd)); - return; - } - sf_size = bfd_section_size (sec); - sf_vma = bfd_section_vma (sec); - - /* Decode the contents of the section. */ - sfd_ctx = sframe_decode ((const char*)sframe_data, sf_size, &err); - if (!sfd_ctx) +{ + /* Error checking for user provided SFrame section name, if any. */ + if (sect_name) { - my_bfd_nonfatal (bfd_get_filename (abfd)); - free (sframe_data); - return; + asection *sec = bfd_get_section_by_name (abfd, sect_name); + if (sec == NULL) + { + printf (_("No %s section present\n\n"), sanitize_string (sect_name)); + return; + } } - - printf (_("Contents of the SFrame section %s:"), - sanitize_string (sect_name)); - /* Dump the contents as text. */ - dump_sframe (sfd_ctx, sf_vma); - - sframe_decoder_free (&sfd_ctx); - free (sframe_data); + dump_dwarf (abfd, is_mainfile); } @@ -5840,7 +5816,7 @@ dump_bfd (bfd *abfd, bool is_mainfile) dump_ctf (abfd, dump_ctf_section_name, dump_ctf_parent_name, dump_ctf_parent_section_name); if (dump_sframe_section_info) - dump_section_sframe (abfd, dump_sframe_section_name); + dump_sframe_section (abfd, dump_sframe_section_name, is_mainfile); if (dump_stab_section_info) dump_stabs (abfd); if (dump_reloc_info && ! disassemble) @@ -6345,8 +6321,15 @@ main (int argc, char **argv) #endif case OPTION_SFRAME: dump_sframe_section_info = true; + if (optarg) dump_sframe_section_name = xstrdup (optarg); + + /* Error checking for user-provided section name is done in + dump_sframe_section (). Initialize for now with the default name: + "sframe". */ + dwarf_select_sections_by_names ("sframe"); + seenflag = true; break; case 'G': diff --git a/binutils/readelf.c b/binutils/readelf.c index dd1871d8c75..8c2637c25ea 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -6583,9 +6583,15 @@ parse_args (struct dump_data *dumpdata, int argc, char ** argv) break; case OPTION_SFRAME_DUMP: do_sframe = true; + /* Fix PR/32589 but keep the error messaging same ? */ + if (optarg != NULL && strcmp (optarg, "") == 0) + { + do_dump = true; + error (_("Section name must be provided\n")); + } /* Providing section name is optional. request_dump (), however, thrives on non NULL optarg. Handle it explicitly here. */ - if (optarg != NULL) + else if (optarg != NULL) request_dump (dumpdata, SFRAME_DUMP); else { @@ -17101,44 +17107,6 @@ dump_section_as_ctf (Elf_Internal_Shdr * section, Filedata * filedata) } #endif -static bool -dump_section_as_sframe (Elf_Internal_Shdr * section, Filedata * filedata) -{ - void * data = NULL; - sframe_decoder_ctx *sfd_ctx = NULL; - const char *print_name = printable_section_name (filedata, section); - - bool ret = true; - size_t sf_size; - int err = 0; - - if (strcmp (print_name, "") == 0) - { - error (_("Section name must be provided \n")); - ret = false; - return ret; - } - - data = get_section_contents (section, filedata); - sf_size = section->sh_size; - /* Decode the contents of the section. */ - sfd_ctx = sframe_decode ((const char*)data, sf_size, &err); - if (!sfd_ctx) - { - ret = false; - error (_("SFrame decode failure: %s\n"), sframe_errmsg (err)); - goto fail; - } - - printf (_("Contents of the SFrame section %s:"), print_name); - /* Dump the contents as text. */ - dump_sframe (sfd_ctx, section->sh_addr); - - fail: - free (data); - return ret; -} - static bool load_specific_debug_section (enum dwarf_section_display_enum debug, const Elf_Internal_Shdr * sec, @@ -17706,7 +17674,7 @@ process_section_contents (Filedata * filedata) #endif if (dump & SFRAME_DUMP) { - if (! dump_section_as_sframe (section, filedata)) + if (! display_debug_section (i, section, filedata)) res = false; } } diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d index 599d4c4e795..7e3fd8ab622 100644 --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d @@ -18,10 +18,10 @@ Contents of the SFrame section .sframe: 0+0004 +sp\+0 +u +u\[s\] + 0+0008 +sp\+16 +c-16 +c-8\[s\] + - func idx \[1\]: pc = 0x0, size = 20 bytes, pauth = B key + func idx \[1\]: pc = 0xc, size = 20 bytes, pauth = B key STARTPC + CFA + FP + RA + - 0+0000 +sp\+0 +u +u + - 0+0004 +sp\+0 +u +u\[s\] + - 0+0008 +sp\+16 +c-16 +c-8\[s\] + + 0+000c +sp\+0 +u +u + + 0+0010 +sp\+0 +u +u\[s\] + + 0+0014 +sp\+16 +c-16 +c-8\[s\] + #pass From patchwork Sat Mar 8 07:38:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Indu Bhagat X-Patchwork-Id: 107538 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7609C3858C98 for ; Sat, 8 Mar 2025 07:41:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7609C3858C98 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=EY9KkBBJ; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=rbDxKrEU X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 236343858D28 for ; Sat, 8 Mar 2025 07:39:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 236343858D28 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 236343858D28 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419562; cv=pass; b=ZzF4jCKFUDiW5pLXI2STscJQAxeXssohqsJmooqAGACjQ9ho34qWnsppNzmEDL0QB047PMz8yRECsgOoKd5ZbFB+dvIx4G6mreqEJKQWSKLKJjHcrsnEeepIkLBg+mu0MZrukER6+S5CXjEWz82fAM2QNH5O8ysr4+2wS/GFQVE= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419562; c=relaxed/simple; bh=Ra22/OuwnWDJE9zN1TMMfIQhedgMW1Zgn/e7Zd8xf1Q=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=kxqb+W/6AV2A4S1m40aHrrDgfpVZD5JAjsJTs/yJcXoj09KRg5YNzuBt5P/V+LE7PCvPEecor9R/t3VKRJjlwW3viIbpbUSQZkOhy9jW+tiTP3A5bI51mpDbJ13vgV7pIPlFciPJFHuqv5+qo5yrHiHcMZLIcSVdRXFeAhNYpmM= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 236343858D28 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5286namm029657; Sat, 8 Mar 2025 07:39:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=aRmngLYvaPYjsUCn8ESJtMHqGA8ZxwgnnshylvcxLQk=; b= EY9KkBBJYjo7c7YADLnVrZQgxZwr2lB/Tfx0uqTpVECLW01KKkZ3JkYSaVyq2WyN R4JxzIsmqQ7SMZ9NeYfiZHT6Rubrl0qDPYnKYmLGnZ3TR7wZLb6SVAvh/u6nZntq FJHAigMbq0GJA/4KFC3Mb+1HJAaiSRpMnxgvqOPMFDs8RXfl5V/PVv0vJ7IdWC41 N4rHVfkLZipcd/Gvh+90NkuoRFxu6W0bQPtIAKXduLuNNHvdN4U+aTrBDZwXoKJP HhVkGtli+1fC8DvXteJ2gd7Mfh5XuEJyXVp7X6/y28k7YrhTydG7oYFuqYYxcLp9 HtyUtZr+bDQ+O+ldRkeOjQ== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 458cac85aw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:17 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52869V4N030901; Sat, 8 Mar 2025 07:39:17 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2176.outbound.protection.outlook.com [104.47.56.176]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 458gcj9c7y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BYP0RANVjC/RXoknu8YpEwxiFNzgx8xSjYRiWsDdnvDbQ6s447qRwdNHZayTmDlmO5nuasRz+uidMEA6O4jbwMBdaUDyzSroSNiUEFpqaAYOBtR+B5prclzF0J/gN/AVZpgIdcAcq7vBYZVJicDOS3NYF4Tx7FMCUDGP54fGpPsjqRgQgVZnmSeCYNRCIGA+fELhARc+3mkswqwxaj/W/fCg1rvczlpLshPMxFGUpHEeHYpuXNu2JiUxx9efb5MsjgRltd3+dVAR/jvr4Ck0NtDzhndVNO4F5Yv/WXmKZwvLpEAo1FzZ5Tu4AndKUBi97pKYOX38xyZekyW1jiYUZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aRmngLYvaPYjsUCn8ESJtMHqGA8ZxwgnnshylvcxLQk=; b=Bz7lrDN1YIplZUNkQb8FtuzMfwLCyNEImJC1jHCk5xDUPlyC1JAToBMxjR917lXXmATGxSMhg/v3MpbYT/tNjG7H9YjiyIEUjfWVYkq5loP9ywfIkY5h3k2KPMnXeskS/mY47Ze7AOvO6dCF9Dg7VQzYxgtIh4kJlKjKqAkZOs+raF1dU/ztJ2GuVsWE/iknP64NJEigVQCN8QwVUUh/lzoDObWoXqMot3BNAhkZQfOTIBkwKAQJcuKsLtrlngYe4Ug29H8PpiXK9Ff0Znt415GGvbu8jtqhoJVszxrEV+Qf+wYBog3s4XvNoCUfEBQnlloFjzQy7tmtuY7KwzqP0g== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aRmngLYvaPYjsUCn8ESJtMHqGA8ZxwgnnshylvcxLQk=; b=rbDxKrEUm/BonlT+YvFY9RoV5GwfYN51Ke/bMlC9FzDw35CvaP9U3D11rLV/b57iX9ZIPVgBLcKRNWK2jQ678OcmQlN0Al3iwaY8nyywrPgzWvYbT5oA330giHCeacq+0BijH2Pz8pDmIEk1i96WdU5S5AFsgj6lLr9q/5x82MQ= Received: from SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) by PH0PR10MB7080.namprd10.prod.outlook.com (2603:10b6:510:28c::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.24; Sat, 8 Mar 2025 07:39:15 +0000 Received: from SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515]) by SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515%5]) with mapi id 15.20.8511.017; Sat, 8 Mar 2025 07:39:15 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: nickc@redhat.com, amodra@gmail.com, jbeulich@suse.com, jremus@linux.ibm.com, Indu Bhagat Subject: [RFC 3/4] ld: bfd: sframe: fix incorrect r_offset in RELA entries Date: Fri, 7 Mar 2025 23:38:52 -0800 Message-ID: <20250308073853.78738-4-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250308073853.78738-1-indu.bhagat@oracle.com> References: <20250308073853.78738-1-indu.bhagat@oracle.com> X-ClientProxiedBy: MW2PR16CA0031.namprd16.prod.outlook.com (2603:10b6:907::44) To SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA1PR10MB6365:EE_|PH0PR10MB7080:EE_ X-MS-Office365-Filtering-Correlation-Id: 313719d2-c27f-4f1b-c20b-08dd5e145362 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|10070799003; X-Microsoft-Antispam-Message-Info: ylrgIevuyawTx5wBO3EIKGTW4/G8hjk37jDYo5lfhcQG60hecf5ufOD+LC4pBjFSLWlX0l5VVn1E2IKJ55tXpV4mUxglWDdAkBTuGaTTqYiGBfeF+bLFOsDOa2axPyFumHFpxpex2c7wLb1Y4G5vDHqJlNT5jJJueKm/OWIn9mHucBI4aSswnm+a9tnvWyENonchjIGeo+Ujdtlz4Mwjt0ciR04GQxNtAO6ZYhQC6xVkId0/8XzQlAxGzkwvLpF679grrZaOpsfRJvdG0P8u0DLRfzRH41fe2yIkL7Q3S6fQ8ENHwCVIbeHdHsh3JaQ0a1hBle0fwWvTW2UJJQyV2zM9RaGL8Pyeypgi47DLEGcruhBswpeoQ+fBynZFzI6Gj/Gjdhul2QgSFcfrVzKVWGOm6BJ7706xhKlQiVPAeMMDQg1/jnWWq3/X5T2JnboSMqPOseLOn8olv/Tv+zB1l1D9eupNnsC/aaaoZJhLQ7A3ZNprx0ken8c7XM+Pg/FtWBAVdoCxgMs/gIucdSLBU5fe/DWeKqXo17oaf19IgYdwwhSQ5mZC5B1Zd0p06M8fMwlpqPD4Uq1dY08hDTjWNZfQ4Ajc2qAT0y1QhpWk1BytA8biDoQoBAjACIyP/wXI4hIiigL1psHFMR2iaF9irCOrM0cCNpnt7WyOlPSwkzL1cVHeL4O4h7PXBmO8KIy76PuHKrHzkmQC7oM6huAPNWJ06B4gP1u+S9V3tmSs/2TJqqxLouyQnNZqpefA4ecZ/IgP0QFK33CuSKz5hkkGeOeOASwyVUjGv9jho/3TK4WIfs+5XGW1Fh5TZy2V5xapJ+/K8GNm07cvknq76QV7uUBb1igVRu2TGBRYpSV1sX61kd8bzLfwSCJPobYtUZa2HobLPpRRab+o8g02Wk5EcfqqqeKfgPFVdMXrgUtZROAJMOd5sc/LC20E7+STQxS3gZ7ArzuAfKolqKd4dOjGBo4zz8ifjA+Iz16i6vQsxNSyaVk9QrYRxgrAUGWc5Q6UwNe3XZhH2q9GlWNmOCG3t4zI+ufDpPMJ1tDgf3zk+XyBI0f7gnpRycw9NOiBea1LFitojn6pfFEdJ6+YzwhuCo09CTDwdCXSNYYcfeo6dqa/TGrlcPQ21q0CrgQIvbLBij3RerFfSs6+/Ok/SzIAw3ofN35TDMGnyj3GaHuLbk/xeE4eN7FtwnHbA7WWVXOdoAM64wuiN3aMgAKHgz9acYvAby1ZMxeevgXmnYB1t/SMZYik4OCcORIi1vfUw+cQoEVllM33gS66erJE1wtwFsBTavoOZvOm21lJ1fjR7BJ2r9e+VE6HRvOGYSWA2LtN+0uwR9z10meVzlVYmxIq1S1auZ3okazGvfkg3fGY8kf9BKmhNJjLaFKeaPlWQytH X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA1PR10MB6365.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(10070799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: QUKB1sZd/x4PlJDTfJe9Bse1lqepU9N7E4fSiTAD32A0FdXJ+yj6Lxga0/N3gP9VJcPezG6sndVFZlv56qCcDs8yxedtH1NMEbfCMEgpRqoiEOvuI7ueYh0k5e00af7rHyMc10c5Z5pElHHYBVRzj8tDrORQn1Y1oMJwapRMz/577wukVcgDHXaUcssTBfEjjmr250Re8gs/gLPoyXQ4HIn5D1DMGZ22B6IOS7JVJamSM/FB1DTFrvAipTrWISqRgJZZkSQTDvFdKcLb6Qmu62Xa4OFNsoYad/utfqC3PePLyn17V23R6oE9KawCoWn//JOaj+Va3PiP2MkUscFMUfYbBk2HyMA7hsb1VvE2dzrPZacJLDG8BMyELicazSabNHVcsRzCbnpLG237jSY+jBWla5hLN1U06zho+8l7lur+eB4rUKbvhJ9yVVhspT3GpRnsmjjR2J1bPgD/ohsjzKmbpZRqLySSSeYdEWuXUHbP7cFUn9JGwyF50VEZv6BLCY8/We/mACaag3/knvOHWa7wpMPss+HjubIVWz4pnmtwSO7mWARLgZFNxkqSc6GqUqs+lbjX/I+Ib5pd8AJRgwiZag+IUl7htbK/rM/sQX9BYFvXP+mp29gm1V2jbquJXIBHF+UELFAV6cRk8O9dw+pDSejNBt7WmlRW2Bzp8TA2LeStt1ahIM6/MMDizIeBF9WLPPY7mWIGgRh3SAKg2oMTnWqP/oMYlzjl5QKqY0crrIJL4GtT+xQfX6oD/NN5xyQd8fcA7mk/DArVMs6NU7H8khKoSo5/7DNLeLNfTwDnEz1xFyOsiDtIhk5u5wZLqDSPBROxhOFgKxC5ggTW6MHt+8Nm4V++ETLIJGI50UuV8IbNAw5obWUXW7N17vNq2Dd8/En8ORrwks1tzxHJgAtLp+PoBqgj2Xgjt9Ew0Go06W4EiV/E8frROZoIH1iR7rypevvBbPS3qYI/z7oCMtrrE6nVAHafxer703zneR6g3hfNcvIzZsVxHc74LYa6VinaAEktO7AuAjloaxllm3wuQjYooMsz49XwYch1DPLj30MOHuKGgOPzX3Wp0tK2e2XxDLtaaiIXF17exgvL0+4ZwkW7/nsZ8wL89j3SFstJQ2ee2DO+SYzSLRxyUXj6Xr9Sn4qIGLOIOffdyo/9wjQBJvSMEVherMY0jovujqktS+6u34JEOLYLWDDuxl3QmFmlqTwUtfO5ymnchTgmPelnZP6Inc97xAj2oRNK3wDsyqN2KogrL20fxiilmdLBhJYMW7bqE1TrSxkB7YdqrVpoP4Kfpuz8ADojC7Mk8fvlCjsX94XkvV3sHm9tqy2wmBClfHfhi8395DpXh07tFVkC/pBv/l2AcD05gHmFy931Bd34UpWPfj9mujnHAySol6V5hPODsCPe9pzfpqGgMrJ3LKMZ/PbeIhcfy0r50eVROwIT3foB6rAwn9wbLRmk2gcA7LJKuSaJ/FGFj5S/IDAyf8yAOcH6J42mURUzaKl3MfVukQf1/fzEQQWqZSYlwm5eXKrTuMavRB14GEVeXtMw02pqgc6A77Wd4AuVJOc3WmdQ7oMhzPDjXMpo9V9SEdPhkFe/jQv+FJmoJ6/A7mP2l/NrRljBjWzw14Nr7RA= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: aMHQCMZD/Y3ldeinxO2Kjs6Ekx80lvtthtfgUuYZ7FC5dKjUyNTC5Z70KUw3X+I0PazHkJByGmUPn6X9Roj4PPhheyl77t/vJQnNafJ8se4y32yOmgzsFaLP8jg9zbVQhiC/7OdI7k/+H6Jt7AzCOkmZOooR1zmjlCMtxzZJpi/6y24SJXlRLb9UG4osIKXxWPkp0X69Hhnm5caQgeKRFMB2JQGHP9QIEVZ75XS18Zqv1l7N7w2bjVfff4ddA693yFysubGemsY5gttS5jrRLtSVkSNEADm0qsvMXnfgVdRwc3K69c//VIjaoW007lnX8EAil084MEPamOocHCovhCCMVbwcGXzScq2/Eyf8+6pmeHdrZATmgjz+sVqBSVhP9OWVEjA/Ns5GNhLtr55cKXVMIhtaAwpVo29JR/TPK9TDSkZL4l192nrd9ILKnYOiio63utMt9rQ9kpgPjBlONQlkljdqUpVayRo0MpjY/ZyvTyQ3IGYSoXXM/nAOPE9vSMmkEvWI1mBKWwp3loBZNkyeLFbDXKWStkVeFjDsCbFjFpf4etAyKt0Y1qYC8wec9Q6xiWaYYBEDX8oRVKPVT2UknIdkSicuabb1fD4ilHw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 313719d2-c27f-4f1b-c20b-08dd5e145362 X-MS-Exchange-CrossTenant-AuthSource: SA1PR10MB6365.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2025 07:39:14.9669 (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: DHKxLL2+j8lP65WSGQMFFCqDVSOBfjq3SfHMNP1lt/6fB2ZWYeHt0io15T7PD6lkAItlVpeUGDHmDHxSuMl9Cg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB7080 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-08_03,2025-03-07_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 phishscore=0 adultscore=0 mlxscore=0 mlxlogscore=999 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503080052 X-Proofpoint-ORIG-GUID: 8bzTKrOv4IyE6Y_a35i_FFZtjcf1VqUh X-Proofpoint-GUID: 8bzTKrOv4IyE6Y_a35i_FFZtjcf1VqUh 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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org PR/32666 Incorrect .rela.sframe when using ld -r Input SFrame sections are merged using _bfd_elf_merge_section_sframe (), which clubs all SFrame FDEs together in one blob and all SFrame FREs in another. This, of course, means the offset of an SFrame FDE in the output section cannot be simply derived from the output_offset of the sections. Fix this by providing _bfd_elf_sframe_section_offset () which returns the new offset of the SFrame FDE in the merged SFrame section. Unlike EH_Frame sections, which also use the _bfd_elf_section_offset (), to update the r_offset, SFrame sections additionally need : if (o->sec_info_type != SEC_INFO_TYPE_SFRAME) irela->r_offset += o->output_offset; because information in SFrame and EH_Frame sections is organised differently. In case of SFrame, the SFrame FDE will not simply sit at location "o->output_offset + offset of SFrame FDE in o". Recall that information layout in an SFrame section is as follows: SFrame Header SFrame FDE 1 SFrame FDE 2 ... SFrame FDEn SFrame FREs (Frame Row Entries) Note how the SFrame FDEs and SFrame FREs are clubber together in groups of their own. Taking the above into account, the correct offset has already been calculated via _bfd_elf_section_offset (). So for SFrame sections, the r_offset of the RELA should not be offset further by the o->output_offset (offset of the input SFrame section in the output SFrame section). Add a new enum to track the current state of the SFrame input section during the linking process (SFRAME_SEC_DECODED, SFRAME_SEC_MERGED) for each input SFrame section. This is then used to assert an assumption that _bfd_elf_sframe_section_offset () is being used on an input SFrame sections which have not been merged (via _bfd_elf_merge_section_sframe ()) yet. bfd/ * elf-bfd.h: New declaration. * elf-sframe.c (_bfd_elf_sframe_section_offset): New definition. * elf.c (_bfd_elf_section_offset): Adjust offset if SFrame section. * elflink.c (elf_link_input_bfd): RELA offset adjust be done conditionally. ld/testsuite/ * ld-x86-64/x86-64.exp: New test. * ld-x86-64/sframe-reloc-1.d: New test. --- bfd/elf-bfd.h | 11 +++++ bfd/elf-sframe.c | 63 ++++++++++++++++++++++++- bfd/elf.c | 3 ++ bfd/elflink.c | 6 ++- ld/testsuite/ld-x86-64/sframe-reloc-1.d | 34 +++++++++++++ ld/testsuite/ld-x86-64/x86-64.exp | 1 + 6 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 ld/testsuite/ld-x86-64/sframe-reloc-1.d diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 5903d857faa..f62570919d5 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -503,12 +503,21 @@ struct sframe_func_bfdinfo unsigned int func_reloc_index; }; +/* Link state information of the SFrame section. */ +enum sframe_sec_state +{ + SFRAME_SEC_DECODED = 1, + SFRAME_SEC_MERGED, +}; + /* SFrame decoder info. Contains all information for a decoded .sframe section. */ struct sframe_dec_info { /* Decoder context. */ struct sframe_decoder_ctx *sfd_ctx; + /* SFrame section state as it progresses through the link process. */ + enum sframe_sec_state sfd_state; /* Number of function descriptor entries in this .sframe. */ unsigned int sfd_fde_count; /* Additional information for linking. */ @@ -2540,6 +2549,8 @@ extern bool _bfd_elf_discard_section_sframe (asection *, bool (*) (bfd_vma, void *), struct elf_reloc_cookie *); extern bool _bfd_elf_merge_section_sframe (bfd *, struct bfd_link_info *, asection *, bfd_byte *); +extern bfd_vma _bfd_elf_sframe_section_offset + (bfd *, struct bfd_link_info *, asection *, bfd_vma); extern bool _bfd_elf_write_section_sframe (bfd *, struct bfd_link_info *); extern bool _bfd_elf_set_section_sframe (bfd *, struct bfd_link_info *); diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c index a5958464536..9c7bf099649 100644 --- a/bfd/elf-sframe.c +++ b/bfd/elf-sframe.c @@ -213,10 +213,11 @@ _bfd_elf_parse_sframe (bfd *abfd, /* Decode the buffer and keep decoded contents for later use. Relocations are performed later, but are such that the section's size is unaffected. */ - sfd_info = bfd_alloc (abfd, sizeof (*sfd_info)); + sfd_info = bfd_zalloc (abfd, sizeof (*sfd_info)); sf_size = sec->size; sfd_info->sfd_ctx = sframe_decode ((const char*)sfbuf, sf_size, &decerr); + sfd_info->sfd_state = SFRAME_SEC_DECODED; sfd_ctx = sfd_info->sfd_ctx; if (!sfd_ctx) /* Free'ing up any memory held by decoder context is done by @@ -507,12 +508,72 @@ _bfd_elf_merge_section_sframe (bfd *abfd, } } } + sfd_info->sfd_state = SFRAME_SEC_MERGED; /* Free the SFrame decoder context. */ sframe_decoder_free (&sfd_ctx); return true; } +/* Adjust an address in the .sframe section. Given OFFSET within + SEC, this returns the new offset in the merged .sframe section, + or -1 if the address refers to an FDE which has been removed. + + PS: This function assumes that _bfd_elf_merge_section_sframe has + not been called on the input section SEC yet. Note how it uses + sframe_encoder_get_num_fidx () to figure out the offset of FDE + in the output section. */ + +bfd_vma +_bfd_elf_sframe_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info, + asection *sec, + bfd_vma offset) +{ + struct sframe_dec_info *sfd_info; + struct sframe_enc_info *sfe_info; + sframe_decoder_ctx *sfd_ctx; + sframe_encoder_ctx *sfe_ctx; + struct elf_link_hash_table *htab; + + unsigned int sec_fde_idx, out_fde_idx; + unsigned int i, sfe_num_fdes; + + if (sec->sec_info_type != SEC_INFO_TYPE_SFRAME) + return offset; + + sfd_info = (struct sframe_dec_info *) elf_section_data (sec)->sec_info; + sfd_ctx = sfd_info->sfd_ctx; + + BFD_ASSERT (sfd_info->sfd_state == SFRAME_SEC_DECODED); + + /* Identify the index of the FDE (at OFFSET) in the input section. */ + sec_fde_idx = ((offset - sframe_decoder_get_hdr_size (sfd_ctx)) + / sizeof (sframe_func_desc_entry)); + + if (sframe_decoder_func_deleted_p (sfd_info, sec_fde_idx)) + return (bfd_vma) -1; + + htab = elf_hash_table (info); + sfe_info = &(htab->sfe_info); + sfe_ctx = sfe_info->sfe_ctx; + sfe_num_fdes = sframe_encoder_get_num_fidx (sfe_ctx); + + /* The index of this FDE in the output section depends on number of deleted + functions (between index 0 and sec_fde_idx), if any. */ + out_fde_idx = 0; + for (i = 0; i < sec_fde_idx; i++) + { + if (!sframe_decoder_func_deleted_p (sfd_info, i)) + out_fde_idx++; + } + /* The actual index of the FDE in the output SFrame section. */ + out_fde_idx += sfe_num_fdes; + + return (sframe_decoder_get_hdr_size (sfd_ctx) + + out_fde_idx * sizeof (sframe_func_desc_entry)); +} + /* Write out the .sframe section. This must be called after _bfd_elf_merge_section_sframe has been called on all input .sframe sections. */ diff --git a/bfd/elf.c b/bfd/elf.c index 3f8bc838bfb..3d65486ad5b 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -13491,6 +13491,9 @@ _bfd_elf_section_offset (bfd *abfd, case SEC_INFO_TYPE_EH_FRAME: return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset); + case SEC_INFO_TYPE_SFRAME: + return _bfd_elf_sframe_section_offset (abfd, info, sec, offset); + default: if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0) { diff --git a/bfd/elflink.c b/bfd/elflink.c index 13993527e3e..895fbb0206e 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -11974,7 +11974,11 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) continue; } - irela->r_offset += o->output_offset; + /* All SFrame FDEs from input sections are clubbed together + in the beginning of the output section. RELA offsets are + already up to date. PR ld/32666. */ + if (o->sec_info_type != SEC_INFO_TYPE_SFRAME) + irela->r_offset += o->output_offset; /* Relocs in an executable have to be virtual addresses. */ if (!bfd_link_relocatable (flinfo->info)) diff --git a/ld/testsuite/ld-x86-64/sframe-reloc-1.d b/ld/testsuite/ld-x86-64/sframe-reloc-1.d new file mode 100644 index 00000000000..308f94bd76c --- /dev/null +++ b/ld/testsuite/ld-x86-64/sframe-reloc-1.d @@ -0,0 +1,34 @@ +#as: --gsframe +#source: sframe-foo.s +#source: sframe-bar.s +#objdump: --sframe=.sframe +#ld: -r --no-rosegment +#name: SFrame simple link - relocatable + +.*: +file format .* + +Contents of the SFrame section .sframe: + Header : + + Version: SFRAME_VERSION_2 + Flags: SFRAME_F_FDE_SORTED + CFA fixed RA offset: \-8 + Num FDEs: 2 + Num FREs: 8 + + Function Index : + + + func idx \[0\]: pc = 0x0, size = 53 bytes + STARTPC +CFA +FP +RA + + 0+0000 +sp\+8 +u +f + + 0+0001 +sp\+16 +c-16 +f + + 0+0004 +fp\+16 +c-16 +f + + 0+0034 +sp\+8 +c-16 +f + + + func idx \[1\]: pc = 0x35, size = 37 bytes + STARTPC +CFA +FP +RA + + 0+0035 +sp\+8 +u +f + + 0+0036 +sp\+16 +c-16 +f + + 0+0039 +fp\+16 +c-16 +f + + 0+0059 +sp\+8 +c-16 +f + diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index 01d6459b5d7..eed06af80df 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -566,6 +566,7 @@ run_dump_test "pr32591-4-x32" if { ![skip_sframe_tests] } { run_dump_test "sframe-simple-1" + run_dump_test "sframe-reloc-1" run_dump_test "sframe-plt-1" run_dump_test "sframe-ibt-plt-1" run_dump_test "sframe-pltgot-1" From patchwork Sat Mar 8 07:38:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Indu Bhagat X-Patchwork-Id: 107541 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 56BF13858C2F for ; Sat, 8 Mar 2025 07:45:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 56BF13858C2F Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=S3Dv2aU2; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=AoRJ8IP8 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 4328B3858C78 for ; Sat, 8 Mar 2025 07:39:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4328B3858C78 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4328B3858C78 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419569; cv=pass; b=UdzA9k1gH4dXMIcD7ZeROy2Cubiadg0aN/DTH9qV7ueaNaxHsHEhVRZVJ3xeylmIoQOux/SxJP9g6Jdh0OjZ1qx4w3l/7lKzfL0RuU2V4z+pRMK2bgmdOrDwCzZSu+/KR5vk8em9p1vXHPjTo02dzXl2MZLkv3N+2iGdzttpm9Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1741419569; c=relaxed/simple; bh=fGoF1vC0Z+vYadV/Bb2ciw9o5mIkKZTfgYXOfEclk9A=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=FEOALJ+XFTIxeJfE9JRtu9tu9mqNjtjW2ir3HlTRtMcWZtZZqWJl/Evnnv2Kd7RBFtWHtwDzS7Gg+PbbsucIhZ97TDdrrP7B+53nmLH1VxBLRwmnxN2MD9rppwJLc/v/eFO3jIx5eIR3w5sqqdxRptDeXMgqkexKSEowRVBgXfk= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4328B3858C78 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5284S5aT017151; Sat, 8 Mar 2025 07:39:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=hB6DHBboAy/n1GJc6xUKRx1X4HVYue+9uNb5Dj6Zuks=; b= S3Dv2aU2LHKHI5OJ05oWefNuG2DJEJS9QURxuOJvbrC/YT2StDgRFKC2B7LpCvOy FAfzWnS1vHOcRH4GtzpylM48SY4O0lAzQ+3jVvqJn1faU4VZSLX5Ocx5elZx8n5I jMCN1KS7zSyAhXOy52eCjdb/G8v35qB/vvpNFgQAMnC90DiOf8+LP9Z0yzFYWR8Z n7QcCDk0IrZ2ZlLTxtsBL896IRuOlJPTlhIs9ptblKqu09ONx/YES8ctVdE8ossI J2rbCpej2OPyZ2Zi/9qYsCEblHEhhhzZu+jBNEunGr19Jsi5+AmKQUHXx3sjsu/x 50JUfp9rMrwC85Cd0yuhqw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 458ds9g3ne-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:23 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5286ATpD026182; Sat, 8 Mar 2025 07:39:23 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2049.outbound.protection.outlook.com [104.47.58.49]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 458cb5wp7c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Mar 2025 07:39:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H3dtK6J0+JIEVlk2LlFyeSu+bMIL93lAU+7V1D+BbA6Y+UbbZf/rglI2kDlkCLPCpgRWuf3B0sX15wP+xmamaMfH6OuwSbZXl0fyKbJBDrx1/dTTmt3/9ddwncPGxp4dgzh70CxKP5FVdS6xu8QSKl0pkIBcXaOlo6PPTA0INaDTu9VAReGNewtU6FTPx6Rv8efelY8Fo6/ICBvWoDE7ZFQ03swEf3sZ3oVok8G89Dmj7VUeGYRfrz18H92VvvJkBM829Bs6jT+Nz5qRLLvEmu+PGvK8p+rfSpNLMzi2xuy2OP+mAgXE0v361VDceADYwXLrTJVXe3sB1MDmaH5GKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hB6DHBboAy/n1GJc6xUKRx1X4HVYue+9uNb5Dj6Zuks=; b=e/jh/+VBUydXlaOGb1rKUhnH8E4zFLxk29Dd9vZLfnrYPELR8MNUNcY4XkktPrkRP7XxKG3PIlQCG4CvgSA+EODT7q5/ZQhKAD6604iYQcpKOxliTvc9yMNNSNuDh3RVEsxuYtgPVOQsIjDAUuE0WNK/M7ZukofXLFyO8SH9//QJsvVfWQ4Mav3IPmoMrQ2h6g8ENWoskxIylZYSAcEllGv3DvCEb9ysO//xKiHXGI43Fp/PZ04aqBJt8+tju7QNN2QSJoksgj6tD8dDwCMMLC84M3V0E+KQM4d+HmOkoV2S1HP30GSwHNX0atWQCiPpfmyowOjGHu/8fZjOFwoGeQ== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hB6DHBboAy/n1GJc6xUKRx1X4HVYue+9uNb5Dj6Zuks=; b=AoRJ8IP8Rtb8PdAkUCsVU4BovjvmJo7A9VJDZ66UR36c8MBthAkXA3iyL3Lf9Uc77e13oN+phq8WPQCWX/xuLfwyJhd0mifY9QNt6wddWpKZcDB//BORmP4qIZ5IWIZHFXRcbHFdzdwJn59fVxcyKzy8zxoXPlbqz75o+LoeVQE= Received: from SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) by PH0PR10MB7080.namprd10.prod.outlook.com (2603:10b6:510:28c::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.24; Sat, 8 Mar 2025 07:39:19 +0000 Received: from SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515]) by SA1PR10MB6365.namprd10.prod.outlook.com ([fe80::81bb:1fc4:37c7:a515%5]) with mapi id 15.20.8511.017; Sat, 8 Mar 2025 07:39:19 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: nickc@redhat.com, amodra@gmail.com, jbeulich@suse.com, jremus@linux.ibm.com, Indu Bhagat Subject: [RFC 4/4] ld: bfd: sframe: fix incorrect r_addend in RELA entries Date: Fri, 7 Mar 2025 23:38:53 -0800 Message-ID: <20250308073853.78738-5-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250308073853.78738-1-indu.bhagat@oracle.com> References: <20250308073853.78738-1-indu.bhagat@oracle.com> X-ClientProxiedBy: MW2PR16CA0015.namprd16.prod.outlook.com (2603:10b6:907::28) To SA1PR10MB6365.namprd10.prod.outlook.com (2603:10b6:806:255::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA1PR10MB6365:EE_|PH0PR10MB7080:EE_ X-MS-Office365-Filtering-Correlation-Id: 59a8225d-e6a5-4213-fe47-08dd5e1455fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|10070799003; X-Microsoft-Antispam-Message-Info: Uh+uNcMFBbgHTaQaATpxxhbHjpxb5h19uDKU8KciRurN2gdM8jjp/iU56vNx2J9jbgzsP/zUhNFOpMmiR9UZUoEVebi8KjSOPoqpkLYFh/3DjBVRN/h2GtcFmeDgVUyPlVU4bhNDMeEGpUQrerWmnoiFj5YB0JBMrp1HFDyDcw0bNkt+ySYEdALR/ZHU0VGjFhU9HlNJ77R/hCj4w/h9aXCnECwyCFy06hI0GAaHMXGDUfTpr+MPmkRPYldwJRx0eE5jrmetYSbNC0acfGZ+JgifsZudac7hd2RwNVACSCJfRD7BSR+mAra4UZhKv4qxqwvbKnC4A3+a+xAcvqGgDAbNWWpKGn0ez7u2Et0H3JfsvnkBdFkDss6NOqTIqFpoWlriPknBX0ymB3TUeVWQTR35OSHcdCaC3p1qFnJeNKcTeh35kh85EP0AgSi9vuDTd0/h1P2zgrPkERq49YAOexhIte6ecGFQlR6GPlA89FtbIfE3tIAurdxIX0HMP0A6KOtIVdQxPt/LX98cEKSsQMZiR+ovkgTUXeOLcnI89mryGdYmrURLpl7BKEx8lJCqPYeZCpeWlXWHpz5uCLZOt/l6yqn/uKTB0W99Wyh5jxvnO5dfdbtCbDKaXiThzQyJ0lRJoXU9iEE5PpJVuHGvQxNxDdFYTncxgsPymhIeDtgfCbT0I3ota9lHAahQNgkEK+zJTGr6NSsUTbKy+fJDF/dKDiqP0UzKX5/Y5V59v5wDBeudGN8l9ECQ9zCMiGf0O3Tas7mcGygd1RzvVRqpZJozw6MMX3KycIWg3+MsXWEVBDQWpn1VnUTcgeGZhDlcbbCv/ejKjmmehaes9wejCcgVq5hOkTUb5m8Ozxll5RiH/AK6NVlHu33fj0Em5AqrHCcz6W96H/JVrYPZ2merIMdoa8BIjbZhaFPI17DwujG+XDP/xxTcAyqZgIXSEPhDlBmM7A2zR9V+9jSIdLtJdLGUxi779sd/xXYMl2YnJ6MiiZRSe48fuK2JmTgWNYrXJlUoyemg6p0o6JdmZmkkmhOMF5h689RzXavR6OjxeBBMbBcPBzVulX4LQyr0pALVuXEXbmdeHw00rEwymCl2MwCvDQ0B9GrAvZDoNrNiPrQwPXi49EcaYpeFQ2NhlWH3Uw7vsHCOxQ16+SB+mqRM7kCQcjXKvQMGJZ+vbHZ+Sh+i1T/Lk+CCzeIQSC2JhWAjmlycopYPQBGVvHl+mZp4mlVs3k73vDkjT0J6s8Vp64e+NSJUtpPgBA0NS/lL2MPpZqlAI6GRBVgM7IzjodWAB1FYeQc3g/9tkQ8USvswh/TnHvOPGReuL4tTRFw5GBnXouK/nNpvbqVy8y61ZQnJJOgWbegvIyLhhwn6fKfil8Wex1y5QE5Tp7ABMonF4DET X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA1PR10MB6365.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(10070799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: t9fTDNoxecLE9G83ksn8Df834KWBfILj8CCgN7yq5EongMUqDmFeiTDLbXebA9/n1S33ARw1+td7BuRKYbbzvj9TWgR7mU1gAspMmTHDVgbaMShKK+NG96R5fUe1CSDl+2jqaNokWqgXzkCV7KyCwQtrnYEp5si3Fa7pii14VO8iJr9XLCxCAc2IRvoOASNQ1vpGZSAfLMPUdR+8oFQ5gbSN3krc4To/4Hk3VgU8vfbqElP7G6LiqBk+RFfUNDX39TNBFY0BaRcjJSaBRSpBGU36Uj8t+U6n5JAa2mdYDpId9tabJT9BpWRy8TudQRG+6tJIbVkLMyZJXYcYveVHKWUGnI5guSJ+xBL6x732GmnTKOHGJOIefpgJ7cZZteRV04tOQa70ZXKDYQ8/e8Umbu7MTIHy6rJ16l9bMbMVOhV8rzmUasJCpRtJOBA5v1OPAkKzJy8ab1kHBrpLwpm29ZZoKjcwM6IjgxdYYG5eEg3jf+Wah30TXck7tLTRnwJpnfh8H2nwY8VHHd3qw/ZqQUwCZYDgvK9JjnBIo1A9go1f141NIztwzbOMiabMkydCb2NxlU6h8DGxETpwT+C9kvDOvlS/QG0PYPXQ11I0p2WzaorL6r7gBcv2lJGGfnMsKu1D+QbW/w/c1Y+WvjJrOlhJEBlGZJIF31CFO06JXIhT1k+Y0dthGW1GKNaiaIENk8N15r6TKeTDkQeThgNVD2ekRDDXbwkSCI1JqwZAZgGIooLZjcC1HInv8rDHtMLeXn7EMgYkfV5non27QlZtmhQEfyZnzE8k0pgoI3dK+fPD8Ut4sIwjo14SS9TaYTIxe6If93Szl5HbB4trV6PP7AsfwrBTQSq97TwZlTzi37tYkQRwJh/E2Q95d2zqrKqiDy6/OiCZo+q35CmFjtWVXUAS4NlgSzBCdRbApXnslwuMB92rL8Enwbr5EEIofB8cWTNa0qO2b9BeTL2Uwkq/pxDbckZb/pvWN3kAOl2vou6Odk1SSrrdqqNCIhvBNfVMe2uWmQxWVKv39qd1Sq7WTjblmFG/giPcwStEwte+IqVih27vHw3iMwyqmkMxcYm+EFDG/8CYukbF0ReIBgvsl0A0VV0wuooZZjlgrqtEmtC7tFBVa4yjcnRi5DDXyh42PpuWeVF/vIF+dYNvBMueiCfdi1+tgwUGvgAyHiDGLkzE3fDlPYUCdrzgutycVsbVFMmgFpVEv3FpEMATnMBZrYmpVqXrry1vRfMuzeuetMJDDNdWcDFxXDhKTwegli6KXnMa4xAqp6DrwypFfjWqxguTtrvQJegUk6y5VwqHsFThM32dRK95n7d5qR7udPICXEifbd0eRLeoaZXj8JFDG44njd299ngKuwYjyBztlUfjzSKgkaf/iG4u//3TUESY2COTeJ8cjMNZoTT76HmYzeze6gwQqP3sYPatYSU3OJj+wmD1rwp+qcYYNzxhtPSn6adWPnMIddpjUT6yaaKOGvOljwuObBVZ8TYe5RpmF0xcYrXtla3kIbSGMZm1b9GnWR9EAqjlhrxfddjuC4yszotoE4SMJ5mqduLEWewwfqy6confw/FE71fFmhQmCW2cVFiQyuhWU3+uEptsfI7H/Jyvf5/5mx69urCYghK0Tck= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: qkn1Ur18fh0nHer9BehQnDwTsZn+FAzWT7vgOlAK6csVyd1WuLZSUqUfpBFQV3vvcfl8l0tv/8yikB6Y9KR5HID+FNYs98QIAZacjy8PS5f977YTOZ5Npu7+5JvI6SolfiRn6xRUCZizzd4HemCzff/y8UaIiWHC9A2eaCDdjJmi/CdnOMEqOJtEwo6nLxLeAzeyxCarK4cX0isVmWSsLP2/eqFkmltLvXrOPkFvhLckUH5cR8UlNfbbGYwDYBsfZrgTOwKAYSjlxoJJ/2i4Aq+Lm8EfcMqpqve8Oxoe/pMMddSs70xiQy6WR0LyhhCGy1fdz4nJwGH55t+kjKpMbw3iYPbE7v6LDsf6MeB0tyd8PT1kgtVfs/GNlZe9djLy6pYlBfIOLHrkyKmhBp33THJ0Ka8+nJEbm+mTTAJ211RPIemhgXz2bXtCGkBbq07ZtdFqTvggCOLe1NTBgTEVxY7cngqZe3tvguGBtPQzAbodRAzOZFQXPxhdhaIGtw0Xl0WVNRvehllwnPElXmfxyxZeLTlbs2xRGKrk6O4K0C6aHQ4wpdJw1U5WYxQBWEq8DkuoWhICAxXgEUzmorjvRl5LGWBElS+guVZGqaG6Ti4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 59a8225d-e6a5-4213-fe47-08dd5e1455fd X-MS-Exchange-CrossTenant-AuthSource: SA1PR10MB6365.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2025 07:39:19.3327 (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: C5VQilutr0XZlCYaRTL89rz496tvHM/BTAcJ1z2N41zY7oZwoH1v/1Z3TmhrlDany60HBV9Ohw7rXk1pY6tGGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB7080 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-08_03,2025-03-07_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503080052 X-Proofpoint-GUID: uRb6Kb9kZWBmsQANMQoLXhhMMB2z13Xs X-Proofpoint-ORIG-GUID: uRb6Kb9kZWBmsQANMQoLXhhMMB2z13Xs 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_H2, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org With the fix in GAS, we now use a different PC-relative RELA for updating the SFrame FDE function start address: The value is the offset of the start PC of the function from the start of the SFrame section. When RELAs are output (e.g. for relocatable links), there is need to adjust the r_addend. This is because the r_addend values still have the correct values for the _input_ SFrame section being linked / relocated. The values must now be (before outputing the RELAs) with respect to the _output_ SFrame section. PS: This patch should be merged with the previous commits before final commit (Otherwise the tests will fail). It is currently a separate patch as I would like to check if this is OK to do. If such a "addend fixup" is risky or wrong, it seems we will need a new type of RELOC for SFrame sections. bfd/ * elf-bfd.h: New declaration. * elf-sframe.c (_bfd_elf_sframe_section_addend): New definition. * elflink.c (elf_link_input_bfd): Fixup the r_addend of SFrame RELAs. --- bfd/elf-bfd.h | 2 ++ bfd/elf-sframe.c | 31 +++++++++++++++++++++++++++++++ bfd/elflink.c | 24 ++++++++++++++++++++---- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index f62570919d5..fd301638baa 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2551,6 +2551,8 @@ extern bool _bfd_elf_merge_section_sframe (bfd *, struct bfd_link_info *, asection *, bfd_byte *); extern bfd_vma _bfd_elf_sframe_section_offset (bfd *, struct bfd_link_info *, asection *, bfd_vma); +extern bfd_vma _bfd_elf_sframe_section_addend + (bfd *, struct bfd_link_info *, asection *, unsigned int, bfd_vma); extern bool _bfd_elf_write_section_sframe (bfd *, struct bfd_link_info *); extern bool _bfd_elf_set_section_sframe (bfd *, struct bfd_link_info *); diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c index 9c7bf099649..c893d406ce8 100644 --- a/bfd/elf-sframe.c +++ b/bfd/elf-sframe.c @@ -574,6 +574,37 @@ _bfd_elf_sframe_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED, + out_fde_idx * sizeof (sframe_func_desc_entry)); } +/* Get the "canonicalized" addend for the symbol reference corresponding to the + relocation at RELOC_INDEX. E.g., for the following reloc for the SFrame + FDE function start address: + Offset Type Sym. Name + Addend + 00000000001c R_X86_64_PC32 .text + 1c + 000000000030 R_X86_64_PC32 .text + 3b + The canonicalized addend are 0 and b respectively as the relocs are for + symbols (.text + 0) and (.text + b) respectively. + + This is used to manually adjust the RELA addends to ensure correct values + for relocatable links. */ + +bfd_vma +_bfd_elf_sframe_section_addend (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + asection *sec, + unsigned int reloc_index, + bfd_vma addend) +{ + struct sframe_dec_info *sfd_info; + + if (sec->sec_info_type != SEC_INFO_TYPE_SFRAME) + return addend; + + sfd_info = (struct sframe_dec_info *) elf_section_data (sec)->sec_info; + BFD_ASSERT (sfd_info && sfd_info->sfd_ctx); + + return (addend - (sframe_decoder_get_hdr_size (sfd_info->sfd_ctx) + + reloc_index * sizeof (sframe_func_desc_entry))); +} + /* Write out the .sframe section. This must be called after _bfd_elf_merge_section_sframe has been called on all input .sframe sections. */ diff --git a/bfd/elflink.c b/bfd/elflink.c index 895fbb0206e..6bce2966359 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -11939,7 +11939,9 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) last_offset = o->output_offset; if (!bfd_link_relocatable (flinfo->info)) last_offset += o->output_section->vma; - for (next_erel = 0; irela < irelaend; irela++, next_erel++) + unsigned int num_reloc = 0; + for (next_erel = 0; irela < irelaend; + irela++, next_erel++, num_reloc++) { unsigned long r_symndx; asection *sec; @@ -12070,10 +12072,24 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) } } - /* Adjust the addend according to where the - section winds up in the output section. */ if (rela_normal) - irela->r_addend += sec->output_offset; + { + if (o->sec_info_type == SEC_INFO_TYPE_SFRAME) + { + bfd_vma addend + = _bfd_elf_sframe_section_addend (output_bfd, + flinfo->info, o, + num_reloc, + irela->r_addend); + /* Adjust the addend in the output RELA. The + input SFrame section has already been + relocated. */ + irela->r_addend = addend + irela->r_offset; + } + /* Adjust the addend according to where the + section winds up in the output section. */ + irela->r_addend += sec->output_offset; + } } else {