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 AB6B53856DC8 for ; Fri, 26 May 2023 07:01:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AB6B53856DC8 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 34Q6iplM010891 for ; Fri, 26 May 2023 07:01:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-03-30; bh=Y2TbKJppn3wRpfq4tFZ2G+dfiKqAM55UWuAu62vN3Jc=; b=ieOZlYBXruQSxnxYrZf8V9hIO0OcZPw8P4nPpVK4y4TP6DCqNTdjcPF8HkAHmuIRUbiA E5EafKWb+PXx6qYNAafXeB/4GHAK5MJi5RqBikj12kFPIW6PlmDSwaOXQ5c+wQOIwnMt oqd5P8/PU1Pjr97auL1C0q8l9+ehQUFnwFuEaHbcKJSTmNqAyvSlQFFlKf8lSR2paQhf IG335ZOcuMjwse/4AVb70weEH+L7Wx+NEy3hJIL2FWe/k88OV8TZzJCQNd9kGIOWeAQo poXY0Oe4h52CktDI6dyRzB4hrCleuSAzBHDPAi4/pf93PwJgYitRyamSDFkzrd8wvbyl uQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3qtqrw01a9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 26 May 2023 07:01:49 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 34Q6FKoH015873 for ; Fri, 26 May 2023 07:01:48 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2103.outbound.protection.outlook.com [104.47.70.103]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3qqk6p5h53-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 26 May 2023 07:01:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XLlDN3ddu9UGJx+Iw+CqtwR74VeLi8Vpi7AHFqOprstA5wcYorPSEsiHD93jvB32CXLyjlxIsSCADEdfvdEqOu0iAsSmPxVQCET4AqrvT2YgRWl1pPunGyFdyEO0h/Umifkt6lbzCjjdn0lRhuK1hiBEbPlcf8mtAEelbM55hzzGN3+zjeiUR5Bc+msCQboygE1oj65ay+kKa9yzKt6SzN49GwPoEZvIrRVCRlPyKbcdP27QkhNHq3n/Z5jI6YpyrhJw/NRzbbDxN8xFvFo1hF5e/fKs3dYvf40xTmPU2ND7NWXIzlUANm5lMidIasWUMtIyL83bHo93453hBzAmRQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Y2TbKJppn3wRpfq4tFZ2G+dfiKqAM55UWuAu62vN3Jc=; b=mgnS7wlf6n+gVs3iOQOFom6cYqBBUnJJZWrqfRaZtRmiaYHijSuJ/V2D0CE4cuFo0K8hTcq0GYJ/tGLpOEhL0Lry/g7DNi+VLjVrcTJs3JGB+g8I6C4kSgrLZBExleIjEpPsjNRdCbEJuKW04XSaR8bgaH4X9DFM52SkzfacpZ0z3MRVLLxoWoV9LfX01lSLULWd3g6RrTux8naYYGac0qOX2XAE2PGPr2efwjPikJ4hBLVDk2IoO36Qteql9Fa1Ux9CBjr3S43ywLhl4yfPw7UW+VI9t5kdq2ftujbalgmuExJXTsKvuDg3f+fUi1SQXBQY6SRCMz0CqU4i6j/VaQ== 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=Y2TbKJppn3wRpfq4tFZ2G+dfiKqAM55UWuAu62vN3Jc=; b=aLypER5XXjdNofnlsc+Yjj0oD5I1LtUEegkc7fi68CtPW1cIr3C+igRIJOvKGlM++NOyOL7cBv6mERLwPAHXpSn2hsQxYkjjeJGv56zyL+5pdtrZRR7yOrg2jjjRadoxJ5U0C817DAXxo8eFH4dcxtTGfOpgbmp4qkqEIET+Qgc= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by PH7PR10MB5879.namprd10.prod.outlook.com (2603:10b6:510:130::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6433.17; Fri, 26 May 2023 07:01:46 +0000 Received: from MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::fdbb:b921:1ef:2d44]) by MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::fdbb:b921:1ef:2d44%4]) with mapi id 15.20.6411.025; Fri, 26 May 2023 07:01:46 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: Indu Bhagat Subject: [COMMITTED] libsframe: revisit sframe_find_fre API Date: Fri, 26 May 2023 00:01:31 -0700 Message-Id: <20230526070132.4185600-3-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230526070132.4185600-1-indu.bhagat@oracle.com> References: <20230526070132.4185600-1-indu.bhagat@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: BYAPR05CA0011.namprd05.prod.outlook.com (2603:10b6:a03:c0::24) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|PH7PR10MB5879:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ec1a360-280d-4ff0-5408-08db5db711b1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OsVuLDMS6lfFbKJNIKVENsgqeP5NKiJ+NXPyO6GNx+eMc5gZg9RQjEXt3Irr0QuBnxtJ1Vqt/+2lKcLJ+IqiXy6oddsApU/2vgr8mYOk7E0PAJc5s42Sfc/SwuVvlWeiKaSIbW3bcYoy9J8EJqFJFSnMVn2EcCiSoEqC1WxI80M+wGzDtXt1HZPINZXvpIbvfH85lIxbVTI9BncT/HgNQdH7NYTQdEPXqxEe5NQTYQGNkShjon1398bv82r17WByD1n+jTLj3OEuoDib7iAUQcDhXceW3Jl/3x1rUnqSKyfZjx0ZY8q8x0ORy80/aiHUo46dDca9KuDo+q4eODeYc1ZyIx07t2dT1sLZUd9kihkDc6ItqSta9nQbnLCecMtyQxZF7ac4y4caABOyD+oeA4Oyr3Lg4XKGrW79Oivek1UnGfDhEkloBJ/uQ+fXknNxMSjFogQH8ohKrG9P20rT0OSK0tG32gu1JE1NUIOkS3RKyWAkL45/PYY6ZJwJPpC6Y9zK7diQQkhkyl0NjNb2VFa+Mz2TbasHKSJo5eeXVBwhPPQ2Okq/13EMUy55eA2N X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR1001MB2158.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(376002)(136003)(396003)(39860400002)(366004)(346002)(451199021)(4326008)(316002)(41300700001)(86362001)(6486002)(36756003)(66476007)(5660300002)(8676002)(66946007)(6916009)(66556008)(8936002)(6666004)(44832011)(2906002)(478600001)(186003)(2616005)(38100700002)(83380400001)(107886003)(26005)(6506007)(6512007)(1076003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FXa7sV5i+uNFoHA4QsTKgrr+JfhUa2B1YukiFjWjpQMrGmGW70mdxvCxupSi?= =?us-ascii?Q?7tm6tKZul5aHc5juS+BCnl6czckPUW2RXCKs8Ai2Urjq3GsqZpBh09TpXJ5y?= =?us-ascii?Q?+XRqWKIjI7OyBNF0dJXN2Ci795EHvMxkRvnjITru5T9DZR6Sj63SyUjO0vi0?= =?us-ascii?Q?G5oIwEPSSauB19+XQuTYGQMQh0KzS18bS9GmjEFr4N7JoPtI0h3dZl+/bCig?= =?us-ascii?Q?8DTrvkmByoE7Pm8TL8IVr9Dqd5aGwfrXwoRrWlmxvnaAZAhtO3W9wv40Jau+?= =?us-ascii?Q?1MJ6kDf5e8408Sf6VOyqhNqZutQT+LOE/hKD0gfeXoiIUvPOYDxbQmYUi+4Q?= =?us-ascii?Q?8Ry7BXIQ9P/Fcubme9SuB+jbdb17TZzRxzjspGFd5JMGmdVloJKSqMeDEfcP?= =?us-ascii?Q?u8r5ZzOCr73MbrfIPhs50Ik2nQhEaetp8DSRIEytGnrWfY+izaSh0caubjaY?= =?us-ascii?Q?8n36IF3OgK1/q6yYCLlEGdUqUOBhvII/stIEye9TIZD7OdPs+C9dR6AglVS+?= =?us-ascii?Q?KTSiz5JOkCdJx9HITzA/+F8riq1Hqll8zynTCmOyBxXpChwbt5o4/Xa4FdYa?= =?us-ascii?Q?bLliFTe1oG/fYqhymE9eRGOcOKvTP6eVjKsgkSWOwphWTfvP2RcCnH0nUN9M?= =?us-ascii?Q?WMyMLKDjruaWy5hBud9+B7uV55N03QL+pSM6PckWdH9/koS0XnCS7sn0AoC9?= =?us-ascii?Q?mKZGWEyqWRsuYSg3v2eXeI805y/c2oeNuAf9EHnk21kNDKPplrzNrjm7WrEK?= =?us-ascii?Q?EadLeiSO8hmqx4YfKq2ayMlDLMOfuQkL11bozYYUJe1n1I4N8ZOhU1AmakJ5?= =?us-ascii?Q?aUjf+rnPrVZ5W/Pz80knAMQqbvwg+RbmRXLPNm8OMTBrnfw7qLzzCPWmWVuF?= =?us-ascii?Q?SaNB9ENvhP+WvAI04ccBhsWWhYd/QSM/uXGZrhAPvDzIfcYAFy9Yeo/cY3Ex?= =?us-ascii?Q?26SxcTjPgOu7kkxFDK0n8CMwvnzfEJEjhYbJnz8ifhHJn8tRjHXb3otW/r4C?= =?us-ascii?Q?k16IthaQdVaCpJdY/XKsmjeCkmmd0+8l9Ayr4UKBdgRBLGMAUSwMUo7Q0L3d?= =?us-ascii?Q?pxDv1agPWD46WdPVghZOxpTRSYseeWPn056NmM+cGiU+emxTd3E0BF1rQ9vY?= =?us-ascii?Q?Jgb/2Q5qALsJmweZwdb3/AxGVL6LemGZkVYwM2vXA1fhSKpGerZQR4c0UTLq?= =?us-ascii?Q?GuzlvQOZ1MzTfgCj2POwR84kIXe/q/S86NvoxVOKZRiLZX1ZE8n4VZiGUMtB?= =?us-ascii?Q?NefjfYG86fs21k9lmcmpynhiF5N4OioRk2xR9JyaeDKUcPOknO4oHHfb0v6J?= =?us-ascii?Q?AoPPSlkc8Wq+yTbgkYYKFjagtLig/aVhIo8dIO7mZ7ZovSu0mHZnJaO8RbEY?= =?us-ascii?Q?JIJOfg+0M6xomuqwG2uyMLYJUbbQNST4Hok2wexmSSedt0xLLnA1SPWK8FSW?= =?us-ascii?Q?MsEjttMYBomzCb9N2ZMDleCjUepHOzd418NM3pysfamOaArgQw0f6t+hBVDg?= =?us-ascii?Q?Na334021mVz3PG/H3pUmbZveisXYom2uGSSriE/43rL8PggXKumcMoeXu5mY?= =?us-ascii?Q?v9VlsMLs+BWYTPllSZstb9KGafiKGRuuyRIfgM9Q?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: bM8f+OrKTjWmwJ2MDh5kTNKARhsBhM2qS5U4XlDudqvI5iUUKsxTHKja5Js7dT9AIFeEQtNTnhiaFg7PcSKDCHGN4ojllIG0Law0VnQK5EkqOD3PW7XrZ35G8Bz6dwSWyZrlpcn3RRKUv45g7TZPpg+nCOQwWd5Y+Dlkz6NusGKBastLhHs2B/l46/x2aFRvfnMxIuolR/yiSEak9GLsjUs/gJMCTq3bcOPqvg0I9Lo3td6vXBRcCorAaY0ie7rNWBRmOgWoycxTHryvr7hB2ahqnBZnfji5TOOBIP4e0K9381uMLRIQwnraTwfdribc7fc1YexUn9HPAC//zfUXazCwmsynphDEhHgDQX4cgSDv01GQh3zwEgicjbBLgn5kPlPkA9wUmtdyU2eLbqmIkbC5icH+MUKP6gWvWajMBHEjRI8z/kBrawdrozSJjuIRrMV2WlPb1bkRkmLWWFK+EW8DKh2HVf/hVRaGfFIUKZcDb+0IOTsS6mUvOnbDo2e8fc3r2sBPmXf4nt8+3UXEdfIDLjFnHaAhceNS0/m9Woets/qc4LfY6y2A0LbgIOcDQpn4LZT+32FfAzWicKSdKEIDZG+NniiMUcXDIIa5nVsNntKNiBkc41d4eDg6bX4dMPlHeChDuQ4ccxlWKEAMnDTOriVxOfG37d2SR7awXG+r13Pp57G8OrLWWX6nevjK9/TWqBjsV9l5gErp16c/poAeKBHzgxFAIHcgczIjIbo1y4Q8AEVOCPPfZEz+oHoh X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ec1a360-280d-4ff0-5408-08db5db711b1 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2023 07:01:46.2140 (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: X79c268CPNv9iVDP0dpKBjn0E7Hte/Zuv7R4tbyDY6A8W+H52Seyvmis4TPAjXNmMeEkHV4kyH4U/lfhCyiYAw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5879 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-05-26_01,2023-05-25_03,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 malwarescore=0 bulkscore=0 mlxlogscore=974 mlxscore=0 adultscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2304280000 definitions=main-2305260058 X-Proofpoint-GUID: Yp_7aZ5fqZmkkwe9xvBnBNr7jWw5cv-O X-Proofpoint-ORIG-GUID: Yp_7aZ5fqZmkkwe9xvBnBNr7jWw5cv-O X-Spam-Status: No, score=-13.1 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_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Inspite of implementing a rather simple functionality, this function was relatively difficult to follow, and maintain. Some changes are done now to address that - refactor the function and use better names to make it more readable. The changes to the implementation do not cause any change in the contract of the API. libsframe/ * sframe.c (sframe_fre_get_end_ip_offset): to here... (sframe_find_fre): Refactor some bits from... --- libsframe/sframe.c | 83 +++++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/libsframe/sframe.c b/libsframe/sframe.c index 72b221349ad..dadce2c1262 100644 --- a/libsframe/sframe.c +++ b/libsframe/sframe.c @@ -980,6 +980,32 @@ sframe_get_funcdesc_with_addr (sframe_decoder_ctx *ctx, return sframe_ret_set_errno (errp, SFRAME_ERR_FDE_NOTFOUND); } +/* Get the end IP offset for the FRE at index i in the FDEP. The buffer FRES + is the starting location for the FRE. */ + +static uint32_t +sframe_fre_get_end_ip_offset (sframe_func_desc_entry *fdep, unsigned int i, + const char *fres) +{ + uint32_t end_ip_offset; + uint32_t fre_type; + + fre_type = sframe_get_fre_type (fdep); + + /* Get the start address of the next FRE in sequence. */ + if (i < fdep->sfde_func_num_fres - 1) + { + sframe_decode_fre_start_address (fres, &end_ip_offset, fre_type); + end_ip_offset -= 1; + } + else + /* The end IP offset for the FRE needs to be deduced from the function + size. */ + end_ip_offset = fdep->sfde_func_size - 1; + + return end_ip_offset; +} + /* Find the SFrame Row Entry which contains the PC. Returns SFRAME_ERR if failure. */ @@ -987,14 +1013,15 @@ int sframe_find_fre (sframe_decoder_ctx *ctx, int32_t pc, sframe_frame_row_entry *frep) { + sframe_frame_row_entry cur_fre; sframe_func_desc_entry *fdep; - uint32_t start_address, i; - sframe_frame_row_entry cur_fre, next_fre; - const char *fres; unsigned int fre_type, fde_type; - size_t esz; - int err = 0; + uint32_t end_ip_offset, i; + int32_t start_ip, end_ip; + int32_t func_start_addr; + const char *fres; size_t size = 0; + int err = 0; /* For regular FDEs (i.e. fde_type SFRAME_FDE_TYPE_PCINC), where the start address in the FRE is an offset from start pc, use a bitmask with all bits set so that none of the address bits are @@ -1022,40 +1049,28 @@ sframe_find_fre (sframe_decoder_ctx *ctx, int32_t pc, bitmask = 0xff; fres = ctx->sfd_fres + fdep->sfde_func_start_fre_off; + func_start_addr = fdep->sfde_func_start_address; + for (i = 0; i < fdep->sfde_func_num_fres; i++) { - err = sframe_decode_fre (fres, &next_fre, fre_type, &esz); - start_address = next_fre.fre_start_addr; + err = sframe_decode_fre (fres, &cur_fre, fre_type, &size); + if (err) + return sframe_set_errno (&err, SFRAME_ERR_FRE_INVAL); - if (((fdep->sfde_func_start_address - + (int32_t) start_address) & bitmask) <= (pc & bitmask)) + start_ip = func_start_addr + cur_fre.fre_start_addr; + end_ip_offset = sframe_fre_get_end_ip_offset (fdep, i, fres + size); + end_ip = func_start_addr + end_ip_offset; + + if ((start_ip & bitmask) > (pc & bitmask)) + return sframe_set_errno (&err, SFRAME_ERR_FRE_INVAL); + + if (((start_ip & bitmask) <= (pc & bitmask)) + && (end_ip & bitmask) >= (pc & bitmask)) { - sframe_frame_row_entry_copy (&cur_fre, &next_fre); - - /* Get the next FRE in sequence. */ - if (i < fdep->sfde_func_num_fres - 1) - { - sp += esz; - err = sframe_decode_fre (fres, &next_fre, fre_type, &esz); - - /* Sanity check the next FRE. */ - if (!sframe_fre_sanity_check_p (&next_fre)) - return sframe_set_errno (&err, SFRAME_ERR_FRE_INVAL); - - size = next_fre.fre_start_addr; - } - else size = fdep->sfde_func_size; - - /* If the cur FRE is the one that contains the PC, return it. */ - if (((fdep->sfde_func_start_address - + (int32_t)size) & bitmask) > (pc & bitmask)) - { - sframe_frame_row_entry_copy (frep, &cur_fre); - return 0; - } + sframe_frame_row_entry_copy (frep, &cur_fre); + return 0; } - else - return sframe_set_errno (&err, SFRAME_ERR_FRE_INVAL); + fres += size; } return sframe_set_errno (&err, SFRAME_ERR_FDE_INVAL); } -- 2.39.2