From patchwork Tue Jun 27 21:20:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Indu Bhagat X-Patchwork-Id: 113612 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp8478057vqr; Tue, 27 Jun 2023 14:21:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7JmY1fHF4mC5+1GxOy5XZ6PUXXjbFuIM0gKV/lz2seS487h+6UPz09rSAZQVM0qymIYR5+ X-Received: by 2002:a17:907:3181:b0:988:6bd2:b0b3 with SMTP id xe1-20020a170907318100b009886bd2b0b3mr21509733ejb.60.1687900887941; Tue, 27 Jun 2023 14:21:27 -0700 (PDT) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id gx8-20020a170906f1c800b0098e417a0c3bsi3378746ejb.109.2023.06.27.14.21.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Jun 2023 14:21:27 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=nbMbZGZZ; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CB4803857803 for ; Tue, 27 Jun 2023 21:21:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CB4803857803 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1687900877; bh=sxa4v6TtewkOhTp8/vftSt87iZgGJP7F3gkVlhdxrvA=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=nbMbZGZZ34FLt8CNBm0Jf5ANskkJx28ECw5ej07vTNVl3JN9T1/WAafi5v8qbmWfS 0X0vM6ok16tBMmrVcGc3TZAJe3/pWOormBkpP4i3uhjM5CbPX7BzSmeKDtkOZVDZ1v 1cLtBKQQzXajkYKF4VTgmTFcaiJBbWONIzieA17U= 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 8E6C63858C53 for ; Tue, 27 Jun 2023 21:21:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8E6C63858C53 Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35RK8RrQ023575 for ; Tue, 27 Jun 2023 21:21:08 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3rdrhcp63p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 27 Jun 2023 21:21:07 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 35RKhIf6013185 for ; Tue, 27 Jun 2023 21:21:06 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2176.outbound.protection.outlook.com [104.47.55.176]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3rdpx5d0vb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 27 Jun 2023 21:21:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gYZL4JOhLi9gwx/lWVUnIeuH4oy3z9JFE8UiPDrBRr2jVwu307sSfnBoZCKcVVw/eNB2cmIgYGd9heYlPErViHEdQxrcLPfyoPEpY6/jFk16mfTl2lyUDxt9XZs02qTvyjITL/9FXECY7WYMPGqFcuedwRtCu7aRusVuHPpoFdWgMKhxQMwowxN3DT+4OU16bgYar/Jyk69LsjZX8cYCOuTfx5HIagAfEoybydv1cVu5t9q+uPvI8MTW+1NL6MHHLPV2vaYTiYd5oLQ9B3boKwXNAXd5m4hwXAcXJeJrLDgWGdm9XCzFCZk783FAicPDAQWs8L+Z7Lnd3aIPjxL/9Q== 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=sxa4v6TtewkOhTp8/vftSt87iZgGJP7F3gkVlhdxrvA=; b=nN+VDJ8eZZbfDA58b2UpscrCCdPtnraOYEtmcuPZMmwEfxeugFC7AlrdegfnUXC0bKMlIVGjs4/fX9wspwjHjZGGB5IevaCosbcXLZrGSvf/rjTUOqLEdwbB7/W3HB/DMcmx02AXxf+pcBHGWWT7ZmJwr+NKJViLOwDhCPBCIFhRhDEl0jokhz4i3vasYQvQEB/gSj22FedFVMlULb9If8QVhWhpkIMtXOz43FP2GAwnR3uDXaCHGiRSnbB/fnHOgBB9ICnW3qh7Op9Ep/05kF+dLbgN+TpPZ1gkZrNIXUKiQUMfx0XuRbx9YujU36/oGNKhiB8KGwueSN5ATtZO8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by SA2PR10MB4602.namprd10.prod.outlook.com (2603:10b6:806:f8::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.24; Tue, 27 Jun 2023 21:21:04 +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.6521.026; Tue, 27 Jun 2023 21:21:04 +0000 To: binutils@sourceware.org Cc: Indu Bhagat Subject: [PATCH 04/12] libsframe: add new APIs to add and get SFrame FDE in SFrame version 2 Date: Tue, 27 Jun 2023 14:20:20 -0700 Message-Id: <20230627212028.2138604-5-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230627212028.2138604-1-indu.bhagat@oracle.com> References: <20230627212028.2138604-1-indu.bhagat@oracle.com> X-ClientProxiedBy: MW4PR03CA0027.namprd03.prod.outlook.com (2603:10b6:303:8f::32) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|SA2PR10MB4602:EE_ X-MS-Office365-Filtering-Correlation-Id: bd2ab588-e084-40ef-c8db-08db775469fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VSFkx7OO7xtsMbgBvBdpakWozeqaXhHWS6PgbCghFQROgBtInWx6S0NsQm2IuHH7or6fH279M0zuXtJI9nP01yQD10VThI6df32No8xFhfCWsHJkS7XPWVGR5T89x/2LsaihzZzLzn+Hh0UCu+oJgf7jk4aSIr2gTd272iaQf57heTI3JkKDDqKHzLudVBAIvodZoJoOeIOdhp97eK+fMCKRaiqflu2Mvh64zMIc/WfmQrMDOkM/meLfqFVC9zO6f0K2S9NO5iyAo9w8m1r93DoJ/VAyPqL7usY4mLRpH1hnQU+d/J3L/f46Y/OoZoyTnO2WvKcwYVMQ24CJDHHsjfk3KasPik1l27rYbPJTCTbH7XCkXCrClYIQzNAqkT00maQmwVm7jVP+VZCoFttEQQmZAadpJEVZc+gpY8PjOGKSRArawXiTUehtW1LERDRDieUQRu9javsXuMslWTUx3l4KVW0Ur4TaXYypOnA/mLD+et7WGF09I0VLZIF74GzJBvj/SY6X1ynICIk3QBadxJJfWtgzl/za5Cof6lbGul0aC7DjUVHsGowLIi1hTCvi 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)(346002)(366004)(39860400002)(376002)(396003)(136003)(451199021)(38100700002)(86362001)(107886003)(1076003)(6506007)(5660300002)(6512007)(66476007)(66556008)(66946007)(44832011)(2616005)(186003)(26005)(6916009)(478600001)(2906002)(8676002)(4326008)(316002)(6666004)(8936002)(6486002)(41300700001)(83380400001)(36756003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lhKo9dKyY2/AIY3uIJgJKiCnM0X6HLCFWVXzfM2q1cMKTJaFgVI/27s3h80NsDI1dg+Ep3u6LSzKajUMaSlhdYXPUQ8ictaYolGJbbADlTHNhe0ce0Fw0CgJNzVvYDMqu8Ait2+VTRXDREQlU3gfTOB8q6Dz66uN4AaVpTrvyiC/iPlXzYryJhjHQTfrEs4P+tQr+2QHovPML261J8gEWsfmObH/CBAydwSKAfDD0zC7WmTQT52ZcB+zPzAv7xyEis7enjqNqQTwRQpHs3F8Efq+ZSd3UaB3CKx8AHP9lM2ObvcTiyN0Qvq+L+y+wjOWPSxJSF+nusEyGwbmj6hY7IZCe7qz5oxTDuO1hKI44aYf3CvuE/yP8EEyYCK2JE/oD70A+6dzk32XQDE5am9z0VL4vqXCFcj6pCgqBEd7JGI6ORTm1pfaauFY8lUFg73mMLtMotBBB2Og50DiIfohGir1F/iOsP9k61UpFxeF178k9tytfejp8d2z8Mmh92YyvcaZPZA7L9rEo5k3n+SNHEDxaBIblztzV5bDNzNSBj+ToccXpfJHYo071Th+uMNBXtQZJSiD6lCuhY1EfWdGYzolwL75cSxl6qH8LBpbAegBP7bCJdcvH7dEf0TCsHofcHwc5/rW7Kr4uUhCSMpZvq4x9T/Ix07Xa8FW7HgkKoEC0hbFsNq5HKUFNc9IWqXWPLipn9VGm7x7Vaxt9Z46/qyJYdHN6B4fZE2osYTkyjdR3s2bdYKzjh9Su7ySOJebn2ca75FqMyY+5UUl4kgAogdGnjm8CJSFISK8btX74tTUQxanX2syhHo08chCwFmPfh+Kpv9l+ZNVQcSF5h0sgSu2zk6JRh6EyTAWNQo1Ljh1FX/T4xjT5Q65LXbVViyKxjWxheL1k75Ss9m8+r+GDuU46J0tEmO5W9nitP77taThahNKDb+uYMVY34heGJd5ElfH0NMkSTrXXV9zI3WBKtOBsezJh0FRTi54YkmylWWudDYf/N7u1PuFU7X1TxGhBMbRA2riSQ+uxFqyPj3AcHHJKuMk2BG+meMh2RhPo7xpDAD3fL1UFzww7hf+nKy+5Hllbr4P/xv4+kqGEU8SEabGojHSzUiLzxxUTDhIdONZlQ0dLiemnhiKhBCIbU9Tgj3mbqf8xViIVtK3SQRPMnRmRxMzqi95b9GWzqpc5LDAuJPz88CyFMQcdbwSRwVLJrHx0SE3xnBL9ZZ5XTHrM/eACYhSIHEM2Ms8GujLAfPqeIJTwL/EtWLlxMnnmrXGLqm6EsrjP98L5YSnziz9KxiwhqvZc6bHjA6wkdQcG6K6ep2ryxg5NzFCxwOs2zzbnhAm8Sz7wg/nkdYL8HLh+PPpIVqYCNNdqusRqRB5/DxSoJ/29LtLLBiMFJjV4yBcjKbehchWAcSTEz29k/zorYSNnZaOvUnIPMrWEkDiDHj/ECwrH/Q0DLNTiLyHYkZMTVUpgo0MNKI/qBZuLUAPE1qQY1fZWNVIBq7nu2pzs6K6m8DdL2Ea/st+8Vp2QtFnlYlhVeGUj8Nr6qSLxy/A/kPr0a4XK16gL8T7I0mEkMXQAMOkddxtFW6cMz6n2bPl X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: s6/8C5Ezikr+ZiXBA38cKeC4H2VKwTqKPCUKd4MHHn+4XFoPC294Pu90K18kz3UNljCP7vXdYfHlAOZRDPy89ocYkPwaEcbfWtqmTCLcjEy0YU1HL/9Y26kHIcTPUhKZL0TxMVqUBoMcnoNj4+1Ue4E/qmkfzPTpIvSX1guFzxePMHWAfVTRrsS/KShgTKPsIpKRStJOVouiHy+O7lV4ykTzct/ExQljakx7Q6eETWkcs4OrT+j0Vx9uGn/B7rmiekK31y+okLIMyAp2mP03G2Rzx9CY82YuyKO0PCsDPdPav9Ykc50JRq+CE+871yXxHd08MCCjWnoMiM1BzO5a+8i+a5wP4UAc5Cz6x33n4IHBoZcx4cJoNLZhfEHjClimMgw/U2O9fxpDZDmWVwQMGtJYI4+Hs9hUeHtKmSRozFmy4SJEbxEL/8EI60P+fSZV0vErm2MD0XEbsCGDbPWArg1qJksqUc3u9UDQnchsBH6FXhbKy/5vHSIExoyZaDPekkYIP8ElibUnT7BCjUAqHEVvf7BGsmJmtiw1qt39XT9oMkee7SW+GyiWEUmJyUsy/clemVGgH9QdtfrnbJn3kqcrfkdVcyM0VSyu71W24LuoBrjFpZ7W37irSCng+vxX0BVvqFYl3UsOPm1rWTeAMqZ8MU1Lh1MldjnBBBPoFmi+/DZ/9pQNBXTy4QUkTkmroehzk8QgC/3EqUwKD80uN+PYDRCbcs3C2TheudKDnOivVpZ1m4dnpyX0z3EdC86a X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: bd2ab588-e084-40ef-c8db-08db775469fd X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2023 21:21:04.4461 (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: 5SifkSZRA5kl9xzEKLknmZtKrwUVzHSqvCVTLqgQqxMqxW4KBDoRaIsNos+uesNhD9TFFMaMAW8Oiw7b4EJ1/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4602 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-06-27_14,2023-06-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306270194 X-Proofpoint-GUID: iCZmwrZ4edn4YI-yehq_tjyKqij2-lsH X-Proofpoint-ORIG-GUID: iCZmwrZ4edn4YI-yehq_tjyKqij2-lsH 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, KAM_NUMSUBJECT, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Indu Bhagat via Binutils From: Indu Bhagat Reply-To: Indu Bhagat Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769892361167848328?= X-GMAIL-MSGID: =?utf-8?q?1769892361167848328?= These APIs are used to: - get an SFrame FDE data from the decoder context, and - add an SFrame FDE to the encoder context. The additional argument is useful for SFrame FDEs where FDE type is SFRAME_FDE_TYPE_PCMASK. include/ * sframe-api.h (sframe_decoder_get_funcdesc_v2): New declaration. (sframe_encoder_add_funcdesc_v2): Likewise. libsframe/ * libsframe.ver: Add the new APIs. * sframe.c (sframe_decoder_get_funcdesc_v2): New definition. (sframe_encoder_add_funcdesc_v2): Likewise. --- include/sframe-api.h | 23 ++++++++++++++++ libsframe/libsframe.ver | 2 ++ libsframe/sframe.c | 61 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/include/sframe-api.h b/include/sframe-api.h index 7883b668e31..961ff7eb05f 100644 --- a/include/sframe-api.h +++ b/include/sframe-api.h @@ -172,6 +172,19 @@ sframe_decoder_get_funcdesc (sframe_decoder_ctx *ctx, int32_t *func_start_address, unsigned char *func_info); +/* Get the data (NUM_FRES, FUNC_SIZE, FUNC_START_ADDRESS, FUNC_INFO, + REP_BLOCK_SIZE) from the function descriptor entry at index I'th + in the decoder CTX. If failed, return error code. + This API is only available from SFRAME_VERSION_2. */ +extern int +sframe_decoder_get_funcdesc_v2 (sframe_decoder_ctx *ctx, + unsigned int i, + uint32_t *num_fres, + uint32_t *func_size, + int32_t *func_start_address, + unsigned char *func_info, + uint8_t *rep_block_size); + /* SFrame textual dump. */ extern void dump_sframe (sframe_decoder_ctx *decoder, uint64_t addr); @@ -246,6 +259,16 @@ sframe_encoder_add_funcdesc (sframe_encoder_ctx *encoder, unsigned char func_info, uint32_t num_fres); +/* Add a new function descriptor entry with START_ADDR, FUNC_SIZE, FUNC_INFO + and REP_BLOCK_SIZE to the encoder. */ +extern int +sframe_encoder_add_funcdesc_v2 (sframe_encoder_ctx *encoder, + int32_t start_addr, + uint32_t func_size, + unsigned char func_info, + uint8_t rep_block_size, + uint32_t num_fres); + /* Serialize the contents of the encoder and return the buffer. ENCODED_SIZE is updated to the size of the buffer. Sets ERRP if failure. */ extern char * diff --git a/libsframe/libsframe.ver b/libsframe/libsframe.ver index 3e2a5695e93..57f5fb6c378 100644 --- a/libsframe/libsframe.ver +++ b/libsframe/libsframe.ver @@ -20,6 +20,7 @@ LIBSFRAME_1.0 { sframe_find_fre; sframe_decoder_get_num_fidx; sframe_decoder_get_funcdesc; + sframe_decoder_get_funcdesc_v2; sframe_decoder_get_fre; sframe_encode; sframe_encoder_free; @@ -29,6 +30,7 @@ LIBSFRAME_1.0 { sframe_encoder_get_num_fidx; sframe_encoder_add_fre; sframe_encoder_add_funcdesc; + sframe_encoder_add_funcdesc_v2; sframe_encoder_write; dump_sframe; sframe_errmsg; diff --git a/libsframe/sframe.c b/libsframe/sframe.c index cb73a0ca87f..7031cee50b8 100644 --- a/libsframe/sframe.c +++ b/libsframe/sframe.c @@ -1208,6 +1208,36 @@ sframe_decoder_get_funcdesc (sframe_decoder_ctx *ctx, return 0; } +int +sframe_decoder_get_funcdesc_v2 (sframe_decoder_ctx *dctx, + unsigned int i, + uint32_t *num_fres, + uint32_t *func_size, + int32_t *func_start_address, + unsigned char *func_info, + uint8_t *rep_block_size) +{ + sframe_func_desc_entry *fdp; + int err = 0; + + if (dctx == NULL || func_start_address == NULL + || num_fres == NULL || func_size == NULL + || sframe_decoder_get_version (dctx) == SFRAME_VERSION_1) + return sframe_set_errno (&err, SFRAME_ERR_INVAL); + + fdp = sframe_decoder_get_funcdesc_at_index (dctx, i); + + if (fdp == NULL) + return sframe_set_errno (&err, SFRAME_ERR_FDE_NOTFOUND); + + *num_fres = fdp->sfde_func_num_fres; + *func_start_address = fdp->sfde_func_start_address; + *func_size = fdp->sfde_func_size; + *func_info = fdp->sfde_func_info; + *rep_block_size = fdp->sfde_func_rep_size; + + return 0; +} /* Get the FRE_IDX'th FRE of the function at FUNC_IDX'th function descriptor entry in the SFrame decoder CTX. Returns error code as applicable. */ @@ -1579,6 +1609,37 @@ bad: return -1; } +/* Add a new function descriptor entry with START_ADDR, FUNC_SIZE, FUNC_INFO + and REP_BLOCK_SIZE to the encoder. + + This API is valid only for SFrame format version 2. */ + +int +sframe_encoder_add_funcdesc_v2 (sframe_encoder_ctx *encoder, + int32_t start_addr, + uint32_t func_size, + unsigned char func_info, + uint8_t rep_block_size, + uint32_t num_fres __attribute__ ((unused))) +{ + sf_fde_tbl *fd_info; + int err; + + if (encoder == NULL + || sframe_encoder_get_version (encoder) == SFRAME_VERSION_1) + return sframe_set_errno (&err, SFRAME_ERR_INVAL); + + err = sframe_encoder_add_funcdesc (encoder, start_addr, func_size, func_info, + num_fres); + if (err) + return SFRAME_ERR; + + fd_info = encoder->sfe_funcdesc; + fd_info->entry[fd_info->count-1].sfde_func_rep_size = rep_block_size; + + return 0; +} + static int sframe_sort_funcdesc (sframe_encoder_ctx *encoder) {