From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 3F77C3853807 for ; Fri, 30 Sep 2022 00:10:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3F77C3853807 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 (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28TMiegv010311; Fri, 30 Sep 2022 00:10:30 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-2022-7-12; bh=SHZES5l8dPNbUE8GKPTuIP/kudf3JN6ayFmYhY7zVP4=; b=M9jfiodXYl0yujtb1DWduuH/xmStZmsFMAQ2HIJx60bFGUiQxtqfZEKy5I8sMnSZiZc1 sXvzFbjlEr4c1EDGb1IWLRRRUpOuweMwjIhVliRBdMF5nZMtNOb5x0ghDaerau2q6pDK 8iDf+OLWixrHKrNo/I198pLs423oYV6fGmQMfkVBcQhMAf//d90dIHh3/2XOqpTFg9Jx ybefQYBOp3/UGbjPb6Oy1cCSLvi5S142Grz/nreB3eR2/NqzNc6lzzMzLt5nR1WpjwXs uyXF3KQADiOWsyeBoLHXRSR4sIjbKPozbsLlRQW9/V/91Iq8a5BCHB4YufYz+VUOxXca 2g== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3jssubpf6s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 30 Sep 2022 00:10:28 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 28U00k6a037126; Fri, 30 Sep 2022 00:10:26 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2102.outbound.protection.outlook.com [104.47.55.102]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3jtpvh84es-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 30 Sep 2022 00:10:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W1ugQpkfd7jZYDsX/VOMtdHJPh56bFRtfQrsYPV8I2hcAltBa17ijMhdS6LGpW5tDr+x049tYPPIo6cNuRV671Bw458+X+sJT5jlqfvnAOcJ0sv32tfHBeKggabj/lpq0RvBJv1eCNwCyLBzq6vPlZkgSB/XMJMLWGG85Ufo4RxOXncfNirPnaZ+sk5U/UdBMP28bCN+776LYV+2gd4lun1aHTmamPz38Szg9hve4cvU3KNejh3+4VRmBujS2uh95BO+PhFtLBxYW+22cX8Qphs4qcUoi8+ZTFRF0dzGXWFtQhTS6KixsdBXcqtaJ3Yg3jI92wNmP0SAu6DduiiG6A== 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=SHZES5l8dPNbUE8GKPTuIP/kudf3JN6ayFmYhY7zVP4=; b=VTCK9eVEpTzaUZT8TCwo5U4BrCV541UhxynQKSaW4BgPfNSH09LkEC7IHN6qq6ujp9Rb8hg/gH+vTsZxQuPTZv6/AklovBdw3aONQuIy+C7pECz9x8sTiS11CIqJDbn2ZiM7WptLrKHHXHjDe+Vd7epCJOtSSCECAIUY+rjOi22NSPALgVHH4zPLgwHTKHJls5Lrg+2wLKzquWD6vymDGAFXo+Bw4PncG1a09djYSmzkkmGCUeMh5gSuOWIzm6GEufivaonzFPayNJZWLBoOtrdnPQMKTFbAJVoACFQ6ZFK5SKcWsW7T4bru6YTOH+PnAtW+lhdl6xeF4vNWG+XdFQ== 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=SHZES5l8dPNbUE8GKPTuIP/kudf3JN6ayFmYhY7zVP4=; b=Z80klr3mb6554gyHO/la0jqZR7l0Jykudr0Z6I/zLFNc7KGHlcuqI93mggT1SPsxcbNqQZ0x6HSdII7Fwmjp4hXRNM/H0/ONGtf0X6IiwTmLMzbnFgyUJzFK7m6gpUon5f2iKsbkexTN1AqDmqpDNnD6SzVTKr1qpQeTA6pbnL8= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by BLAPR10MB5251.namprd10.prod.outlook.com (2603:10b6:208:332::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Fri, 30 Sep 2022 00:10:16 +0000 Received: from MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::80a7:f7f3:4303:54e4]) by MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::80a7:f7f3:4303:54e4%5]) with mapi id 15.20.5676.017; Fri, 30 Sep 2022 00:10:16 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: nickc@redhat.com, weimin.pan@oracle.com Subject: [PATCH,V1 05/14] libsframe: add the SFrame library Date: Thu, 29 Sep 2022 17:04:31 -0700 Message-Id: <20220930000440.1672106-6-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220930000440.1672106-1-indu.bhagat@oracle.com> References: <20220930000440.1672106-1-indu.bhagat@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MW4PR03CA0334.namprd03.prod.outlook.com (2603:10b6:303:dc::9) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|BLAPR10MB5251:EE_ X-MS-Office365-Filtering-Correlation-Id: fca94d52-f5f5-4e49-5bec-08daa278263d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pch12Qbgyk4CGM3qdRnbba3Rl5sEHUbE5ZQzma0MCXtcIfshYM1nU3DqlqgrKd3MlezqT8U5gC0N7jbKUF//B1manOmLD+UUsa4q5vjvw/trBE1k3x+QStClIj7oqQLhFT9oYh9gDRD3OsvJ3g8otEciGYzpU5SsvpD/M8t4Q762q7cVb6/0AbS0fkBZAPKc/LPURoWIG4FRlgxWpff7YaEC8+j0jaOh5eg50eJXYyD/teD6zKWf6RlkCMqspQyQAZzLVKYgbFUwdvUOtNvIXihe8/bnsAPIytZO26BGWNlzx2eIRW7LVenw7dfUgfQleQKxYhSMRS5Ld7WhVl/prAUT3ozkwVb8UR8iGipXyvQtZXEwOfKduoSsZgkFqI3bCTQbcGIfcqgGzmRu+BnvOkHVLxX9MDKjz2aPQkgjvy1xO6sFSEMgN00DXRIu+Ko8Mvy+XiCGWFhcQwfa2R6D3si13RLMsyOsi4N8Ug9Lyb3Qk8boCasvlv++i7bC4s+G/kZMUUWwBJB8BqgRpXwKs2xfmKHHk3bsxgp4/JD+TZcVecyGWEwkWUqXqrPZxRyJ4MxA3eYAGFnK4/lnmR3pcX6izg18zzGFJLOSZWg1CkGRBUjRThByKpfKwZJYm1Tw2Wkou5i3u2SMu5qrJC9I+yIwirO89NiXNjwOpIYeuFCICgyTr38Yb4WGH4YYIfuO/6ZSR3GXZzDR+BEjBKVHYTuylLrnkGWngz2PXoxAsEaN07j/j0DgHWy9eaDJ2OLETkSVmf7tdWjh5VAajHOFuH3gvcDu/he/mo5FAh68OnBz8vkzb9sTtupqgPYMUH7fDZSAnNL6Qimw4MKSajwc4vmNAv0QXOZEz7wDozULXHKKR6R3ErDRInlmC1V/orAe9z8cX1WslNzYuVOlZ9xOnJ19+O7PJDSmi37nihtwVKA= 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:(13230022)(346002)(39860400002)(376002)(366004)(396003)(136003)(451199015)(6512007)(26005)(6486002)(38100700002)(15188155005)(66899015)(478600001)(107886003)(86362001)(41300700001)(8936002)(316002)(6666004)(6916009)(45080400002)(84970400001)(16799955002)(2906002)(6506007)(8676002)(83380400001)(5660300002)(44832011)(30864003)(1076003)(2616005)(186003)(4326008)(36756003)(66476007)(66556008)(66946007)(2004002)(547064002)(579004)(559001)(19623215001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lUTRYVT5Z/ThkZsbffrhcFN/l+kvRJgzB3rqNDBycY9UzJkaqR5N/tTd+51I?= =?us-ascii?Q?7vWy0KBzKhzZA4HHIcISH9ZMzkY9IYoVA0v8OUscriyf923X5Efm2/bANnEo?= =?us-ascii?Q?99RdaCDw/G/oWom2R//ER6M5SMa/wVv9v9VJ3zswKD9mwlqXlQ0eKja8+WS0?= =?us-ascii?Q?Ynfycbh6jA0cG077hEAMGbzE9/ENfYYqOC4O1YA56T78M+nnpiVEHOKJperO?= =?us-ascii?Q?SBhzJM5zJTNxyxRVSuiCTQGaJ1vTZ7PLO5nW5iKq8yIQ8TbqD2bdX9eCQYOu?= =?us-ascii?Q?//Y7xiZOX7mDlOwblx4kbaUTetLXLzegZs/VWvg9a4B7+XowdHz3poTZEEUn?= =?us-ascii?Q?4rAsXh7r+qkh8FUxC9zHMHwUGhGZ21cH47k2S/Msz/oYP09IDb9Ak3I4jjNA?= =?us-ascii?Q?mLjYTpmSm2tRC0kv4oTI9gp7F5vtL3fbThWiipBKefiYQEHcNOJAvRMMyhLY?= =?us-ascii?Q?bYBtpjD65Xwvax+7e8jBew1XwTLMUCif9wNG4IBNFGMfuwEJ/h8pSn1ZNWIG?= =?us-ascii?Q?BW2MTTJ3B1VZKFSjkrwjulPajj7H348WGyFILznwqqYMILNb/3691IMHgyqy?= =?us-ascii?Q?6iD+PATOoXnCxruVgNCsifI1YbIVDMIwlB0z4LKHVB3SgAhJ0ljrgeiAZU+q?= =?us-ascii?Q?1cQlSyjgFYkagqvftOCyzsVDba2apz/n6PCkvmSzAjpsw3S+aWzcU8H18III?= =?us-ascii?Q?iLhPVPjLI/Ems66sE+DeiOQcsxgTGaP3IgRvCfLcw68/H/RrY5/zapcIUhne?= =?us-ascii?Q?dFZGBw1A1BsE3oAR6/qZr5tQXBaWbjvYSKodd8OJLA5giLWJqrXaheVI/moi?= =?us-ascii?Q?qJLsXVWIt00b51Q/tGjY9d7SiH1tJbiDfXTclawxtMqX0RngbcOa4Yw6LO6d?= =?us-ascii?Q?STlAMeYJI0mgQjebvUFGdOqB3aUsDq3kAsu9SRBNeShG60qWDJ4coQktxbxR?= =?us-ascii?Q?fXCeHxxD/zQCSNEws4enaKHnABtvc7sDlIzyIqPboMYwNCsbZ/n0Ye2mdCsO?= =?us-ascii?Q?JIkkYZcxtJXd9RUc1mwdWGWO9FxxamVTxa5gjeojKPoPc85df1+LogHy8fNB?= =?us-ascii?Q?ou8BuM7dKL3j3H0DNaKrhMSvMjg8BF32JMcFDCELV0JpRk4uYjh1Acf+q03G?= =?us-ascii?Q?kfSdXpmTDSiX7rAO4DoI6N5uFIeLVf1WiL4pbX8vwCKNL/htswcCst+gcmLA?= =?us-ascii?Q?yGY3BTou8y9MwMTxkys8Ojh0sWhTHjEvr7v286anBA7HEV2nmuOpmd1ZYtUg?= =?us-ascii?Q?apt8Yf+SnbfdJEOq7IK9vSFvA5BHCDU4U6X4mSDXvxYY2JYMpHvNb2rwLyGb?= =?us-ascii?Q?TnQeh43/h5FB6AgEf8MgrYIvBCwPbDPnBqkIUIICUW290hfp/8v7+QyFp4rZ?= =?us-ascii?Q?Eqew1gP/oU9LVzOsRuWv90w+hl4j57gW+RymMGFmVq+M/iWXWOtymua1PlO1?= =?us-ascii?Q?nQFGSFBIyOQO/qqrZ8j8O5Y4MbU4Vz0fcfgcdgMoM+efA8Qx3BPr+uVvsSHG?= =?us-ascii?Q?AHAxPYz7SHOj9oIX2dg4IxnGr4MpJkghmqD6eTsDek5SijZUSru6jn6klqol?= =?us-ascii?Q?x2pF1OP5fJI94vF4XeD56GefXYqnZMX97iwPQUu4lbUZujr3t/uazM/72Ywr?= =?us-ascii?Q?AA=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: fca94d52-f5f5-4e49-5bec-08daa278263d X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2022 00:10:15.5645 (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: U+r3V4W7HYKt26dgfU4oZuBJv+DMjzTA7ZyjryqkSEXASMrQY+dZZT7uayF9CrY8X2ysFqx9IvUqU46Qt+xCxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5251 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-29_13,2022-09-29_03,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 suspectscore=0 adultscore=0 mlxscore=0 spamscore=0 bulkscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2209130000 definitions=main-2209290150 X-Proofpoint-GUID: FZ-QXgO7HhRl1cdIXw6SL67x_HtQqQoU X-Proofpoint-ORIG-GUID: FZ-QXgO7HhRl1cdIXw6SL67x_HtQqQoU X-Spam-Status: No, score=-13.3 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 List-Id: From: Weimin Pan libsframe is a library that allows you to: - decode a .sframe section - probe and inspect a .sframe section - encode (and eventually write) a .sframe section. This library is currently being used by the linker, readelf, objdump and the unwinder. The file include/sframe-api.h defines the user-facing APIs for decoding, encoding and probing .sframe sections. A set of error codes together with their error message strings are also defined. Endian flipping is performed automatically at read and write time, if cross-endianness is detected. PS: libsframe/configure has NOT been included in the patch. Please regenerate. ChangeLog: * Makefile.def: Add libsframe as new module with its dependencies. * Makefile.in: Regenerated. * binutils/Makefile.am: Add libsframe. * binutils/Makefile.in: Regenerated. * configure: Regenerated * configure.ac: Add libsframe to host_libs. * libsframe/Makefile.am: New file. * libsframe/Makefile.in: New file. * libsframe/aclocal.m4: New file. * libsframe/config.h.in: New file. * libsframe/configure: New file. <-- [REMOVED FROM THIS PATCH. PLEASE REGENERATE.] * libsframe/configure.ac: New file. * libsframe/sframe-error.c: New file. * libsframe/sframe-impl.h: New file. * libsframe/sframe.c: New file. include/ChangeLog: * sframe-api.h: New file. testsuite/ChangeLog: * libsframe/testsuite/Makefile.am: New file. * libsframe/testsuite/Makefile.in: Regenerated. * libsframe/testsuite/libsframe.decode/Makefile.am: New file. * libsframe/testsuite/libsframe.decode/Makefile.in: Regenerated. * libsframe/testsuite/libsframe.decode/decode.exp: New file. * libsframe/testsuite/libsframe.encode/Makefile.am: Likewise. * libsframe/testsuite/libsframe.encode/Makefile.in: Regenerated. * libsframe/testsuite/libsframe.encode/encode.exp: New file. * libsframe/testsuite/libsframe.decode/bigendian_data.c: Likewise. * libsframe/testsuite/libsframe.decode/frecnt_1.c: Likewise. * libsframe/testsuite/libsframe.decode/frecnt_2.c: Likewise. --- Makefile.def | 2 + Makefile.in | 1288 +++++++++++++- binutils/Makefile.am | 2 + binutils/Makefile.in | 1 + configure | 2 +- configure.ac | 2 +- include/sframe-api.h | 211 +++ libsframe/Makefile.am | 43 + libsframe/Makefile.in | 1047 +++++++++++ libsframe/aclocal.m4 | 1241 +++++++++++++ libsframe/config.h.in | 144 ++ libsframe/configure.ac | 78 + libsframe/sframe-error.c | 49 + libsframe/sframe-impl.h | 55 + libsframe/sframe.c | 1566 +++++++++++++++++ libsframe/testsuite/Makefile.am | 23 + libsframe/testsuite/Makefile.in | 682 +++++++ libsframe/testsuite/config/default.exp | 54 + libsframe/testsuite/libsframe.decode/DATA1 | Bin 0 -> 59 bytes libsframe/testsuite/libsframe.decode/DATA2 | Bin 0 -> 91 bytes .../testsuite/libsframe.decode/DATA_BIGE | Bin 0 -> 59 bytes .../testsuite/libsframe.decode/Makefile.am | 14 + .../testsuite/libsframe.decode/Makefile.in | 661 +++++++ .../libsframe.decode/bigendian_data.c | 107 ++ .../testsuite/libsframe.decode/decode.exp | 41 + .../testsuite/libsframe.decode/frecnt_1.c | 99 ++ .../testsuite/libsframe.decode/frecnt_2.c | 103 ++ .../testsuite/libsframe.encode/Makefile.am | 6 + .../testsuite/libsframe.encode/Makefile.in | 608 +++++++ .../testsuite/libsframe.encode/encode.exp | 25 + .../testsuite/libsframe.encode/encode_1.c | 182 ++ 31 files changed, 8329 insertions(+), 7 deletions(-) create mode 100644 include/sframe-api.h create mode 100644 libsframe/Makefile.am create mode 100644 libsframe/Makefile.in create mode 100644 libsframe/aclocal.m4 create mode 100644 libsframe/config.h.in create mode 100644 libsframe/configure.ac create mode 100644 libsframe/sframe-error.c create mode 100644 libsframe/sframe-impl.h create mode 100644 libsframe/sframe.c create mode 100644 libsframe/testsuite/Makefile.am create mode 100644 libsframe/testsuite/Makefile.in create mode 100644 libsframe/testsuite/config/default.exp create mode 100644 libsframe/testsuite/libsframe.decode/DATA1 create mode 100644 libsframe/testsuite/libsframe.decode/DATA2 create mode 100644 libsframe/testsuite/libsframe.decode/DATA_BIGE create mode 100644 libsframe/testsuite/libsframe.decode/Makefile.am create mode 100644 libsframe/testsuite/libsframe.decode/Makefile.in create mode 100644 libsframe/testsuite/libsframe.decode/bigendian_data.c create mode 100644 libsframe/testsuite/libsframe.decode/decode.exp create mode 100644 libsframe/testsuite/libsframe.decode/frecnt_1.c create mode 100644 libsframe/testsuite/libsframe.decode/frecnt_2.c create mode 100644 libsframe/testsuite/libsframe.encode/Makefile.am create mode 100644 libsframe/testsuite/libsframe.encode/Makefile.in create mode 100644 libsframe/testsuite/libsframe.encode/encode.exp create mode 100644 libsframe/testsuite/libsframe.encode/encode_1.c diff --git a/Makefile.def b/Makefile.def index acdcd625ed6..1b39c910447 100644 --- a/Makefile.def +++ b/Makefile.def @@ -149,6 +149,7 @@ host_modules= { module= lto-plugin; bootstrap=true; host_modules= { module= libcc1; extra_configure_flags=--enable-shared; }; host_modules= { module= gotools; }; host_modules= { module= libctf; bootstrap=true; }; +host_modules= { module= libsframe; bootstrap=true; }; target_modules = { module= libstdc++-v3; bootstrap=true; @@ -478,6 +479,7 @@ dependencies = { module=all-binutils; on=all-intl; }; dependencies = { module=all-binutils; on=all-gas; }; dependencies = { module=all-binutils; on=all-libctf; }; dependencies = { module=all-ld; on=all-libctf; }; +dependencies = { module=all-binutils; on=all-libsframe; }; // We put install-opcodes before install-binutils because the installed // binutils might be on PATH, and they might need the shared opcodes diff --git a/Makefile.in b/Makefile.in index cb39e4790d6..b26f778a94a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1109,7 +1109,8 @@ configure-host: \ maybe-configure-lto-plugin \ maybe-configure-libcc1 \ maybe-configure-gotools \ - maybe-configure-libctf + maybe-configure-libctf \ + maybe-configure-libsframe .PHONY: configure-target configure-target: \ maybe-configure-target-libstdc++-v3 \ @@ -1290,6 +1291,9 @@ all-host: maybe-all-gotools @if libctf-no-bootstrap all-host: maybe-all-libctf @endif libctf-no-bootstrap +@if libsframe-no-bootstrap +all-host: maybe-all-libsframe +@endif libsframe-no-bootstrap .PHONY: all-target @@ -1396,6 +1400,7 @@ info-host: maybe-info-lto-plugin info-host: maybe-info-libcc1 info-host: maybe-info-gotools info-host: maybe-info-libctf +info-host: maybe-info-libsframe .PHONY: info-target @@ -1487,6 +1492,7 @@ dvi-host: maybe-dvi-lto-plugin dvi-host: maybe-dvi-libcc1 dvi-host: maybe-dvi-gotools dvi-host: maybe-dvi-libctf +dvi-host: maybe-dvi-libsframe .PHONY: dvi-target @@ -1578,6 +1584,7 @@ pdf-host: maybe-pdf-lto-plugin pdf-host: maybe-pdf-libcc1 pdf-host: maybe-pdf-gotools pdf-host: maybe-pdf-libctf +pdf-host: maybe-pdf-libsframe .PHONY: pdf-target @@ -1669,6 +1676,7 @@ html-host: maybe-html-lto-plugin html-host: maybe-html-libcc1 html-host: maybe-html-gotools html-host: maybe-html-libctf +html-host: maybe-html-libsframe .PHONY: html-target @@ -1760,6 +1768,7 @@ TAGS-host: maybe-TAGS-lto-plugin TAGS-host: maybe-TAGS-libcc1 TAGS-host: maybe-TAGS-gotools TAGS-host: maybe-TAGS-libctf +TAGS-host: maybe-TAGS-libsframe .PHONY: TAGS-target @@ -1851,6 +1860,7 @@ install-info-host: maybe-install-info-lto-plugin install-info-host: maybe-install-info-libcc1 install-info-host: maybe-install-info-gotools install-info-host: maybe-install-info-libctf +install-info-host: maybe-install-info-libsframe .PHONY: install-info-target @@ -1942,6 +1952,7 @@ install-dvi-host: maybe-install-dvi-lto-plugin install-dvi-host: maybe-install-dvi-libcc1 install-dvi-host: maybe-install-dvi-gotools install-dvi-host: maybe-install-dvi-libctf +install-dvi-host: maybe-install-dvi-libsframe .PHONY: install-dvi-target @@ -2033,6 +2044,7 @@ install-pdf-host: maybe-install-pdf-lto-plugin install-pdf-host: maybe-install-pdf-libcc1 install-pdf-host: maybe-install-pdf-gotools install-pdf-host: maybe-install-pdf-libctf +install-pdf-host: maybe-install-pdf-libsframe .PHONY: install-pdf-target @@ -2124,6 +2136,7 @@ install-html-host: maybe-install-html-lto-plugin install-html-host: maybe-install-html-libcc1 install-html-host: maybe-install-html-gotools install-html-host: maybe-install-html-libctf +install-html-host: maybe-install-html-libsframe .PHONY: install-html-target @@ -2215,6 +2228,7 @@ installcheck-host: maybe-installcheck-lto-plugin installcheck-host: maybe-installcheck-libcc1 installcheck-host: maybe-installcheck-gotools installcheck-host: maybe-installcheck-libctf +installcheck-host: maybe-installcheck-libsframe .PHONY: installcheck-target @@ -2306,6 +2320,7 @@ mostlyclean-host: maybe-mostlyclean-lto-plugin mostlyclean-host: maybe-mostlyclean-libcc1 mostlyclean-host: maybe-mostlyclean-gotools mostlyclean-host: maybe-mostlyclean-libctf +mostlyclean-host: maybe-mostlyclean-libsframe .PHONY: mostlyclean-target @@ -2397,6 +2412,7 @@ clean-host: maybe-clean-lto-plugin clean-host: maybe-clean-libcc1 clean-host: maybe-clean-gotools clean-host: maybe-clean-libctf +clean-host: maybe-clean-libsframe .PHONY: clean-target @@ -2488,6 +2504,7 @@ distclean-host: maybe-distclean-lto-plugin distclean-host: maybe-distclean-libcc1 distclean-host: maybe-distclean-gotools distclean-host: maybe-distclean-libctf +distclean-host: maybe-distclean-libsframe .PHONY: distclean-target @@ -2579,6 +2596,7 @@ maintainer-clean-host: maybe-maintainer-clean-lto-plugin maintainer-clean-host: maybe-maintainer-clean-libcc1 maintainer-clean-host: maybe-maintainer-clean-gotools maintainer-clean-host: maybe-maintainer-clean-libctf +maintainer-clean-host: maybe-maintainer-clean-libsframe .PHONY: maintainer-clean-target @@ -2727,7 +2745,8 @@ check-host: \ maybe-check-lto-plugin \ maybe-check-libcc1 \ maybe-check-gotools \ - maybe-check-libctf + maybe-check-libctf \ + maybe-check-libsframe .PHONY: check-target check-target: \ @@ -2865,7 +2884,8 @@ install-host-nogcc: \ maybe-install-lto-plugin \ maybe-install-libcc1 \ maybe-install-gotools \ - maybe-install-libctf + maybe-install-libctf \ + maybe-install-libsframe .PHONY: install-host install-host: \ @@ -2921,7 +2941,8 @@ install-host: \ maybe-install-lto-plugin \ maybe-install-libcc1 \ maybe-install-gotools \ - maybe-install-libctf + maybe-install-libctf \ + maybe-install-libsframe .PHONY: install-target install-target: \ @@ -3032,7 +3053,8 @@ install-strip-host: \ maybe-install-strip-lto-plugin \ maybe-install-strip-libcc1 \ maybe-install-strip-gotools \ - maybe-install-strip-libctf + maybe-install-strip-libctf \ + maybe-install-strip-libsframe .PHONY: install-strip-target install-strip-target: \ @@ -44044,6 +44066,1146 @@ maintainer-clean-libctf: +.PHONY: configure-libsframe maybe-configure-libsframe +maybe-configure-libsframe: +@if gcc-bootstrap +configure-libsframe: stage_current +@endif gcc-bootstrap +@if libsframe +maybe-configure-libsframe: configure-libsframe +configure-libsframe: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libsframe; \ + cd "$(HOST_SUBDIR)/libsframe" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 +@endif libsframe + + + +.PHONY: configure-stage1-libsframe maybe-configure-stage1-libsframe +maybe-configure-stage1-libsframe: +@if libsframe-bootstrap +maybe-configure-stage1-libsframe: configure-stage1-libsframe +configure-stage1-libsframe: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + \ + $(STAGE1_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stage2-libsframe maybe-configure-stage2-libsframe +maybe-configure-stage2-libsframe: +@if libsframe-bootstrap +maybe-configure-stage2-libsframe: configure-stage2-libsframe +configure-stage2-libsframe: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stage3-libsframe maybe-configure-stage3-libsframe +maybe-configure-stage3-libsframe: +@if libsframe-bootstrap +maybe-configure-stage3-libsframe: configure-stage3-libsframe +configure-stage3-libsframe: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stage4-libsframe maybe-configure-stage4-libsframe +maybe-configure-stage4-libsframe: +@if libsframe-bootstrap +maybe-configure-stage4-libsframe: configure-stage4-libsframe +configure-stage4-libsframe: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stageprofile-libsframe maybe-configure-stageprofile-libsframe +maybe-configure-stageprofile-libsframe: +@if libsframe-bootstrap +maybe-configure-stageprofile-libsframe: configure-stageprofile-libsframe +configure-stageprofile-libsframe: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stagetrain-libsframe maybe-configure-stagetrain-libsframe +maybe-configure-stagetrain-libsframe: +@if libsframe-bootstrap +maybe-configure-stagetrain-libsframe: configure-stagetrain-libsframe +configure-stagetrain-libsframe: + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage train in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEtrain_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stagefeedback-libsframe maybe-configure-stagefeedback-libsframe +maybe-configure-stagefeedback-libsframe: +@if libsframe-bootstrap +maybe-configure-stagefeedback-libsframe: configure-stagefeedback-libsframe +configure-stagefeedback-libsframe: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stageautoprofile-libsframe maybe-configure-stageautoprofile-libsframe +maybe-configure-stageautoprofile-libsframe: +@if libsframe-bootstrap +maybe-configure-stageautoprofile-libsframe: configure-stageautoprofile-libsframe +configure-stageautoprofile-libsframe: + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autoprofile in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautoprofile_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + +.PHONY: configure-stageautofeedback-libsframe maybe-configure-stageautofeedback-libsframe +maybe-configure-stageautofeedback-libsframe: +@if libsframe-bootstrap +maybe-configure-stageautofeedback-libsframe: configure-stageautofeedback-libsframe +configure-stageautofeedback-libsframe: + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/libsframe/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage autofeedback in $(HOST_SUBDIR)/libsframe; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libsframe; \ + cd $(HOST_SUBDIR)/libsframe || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libsframe/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=libsframe; \ + $(SHELL) $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEautofeedback_CONFIGURE_FLAGS) +@endif libsframe-bootstrap + + + + + +.PHONY: all-libsframe maybe-all-libsframe +maybe-all-libsframe: +@if gcc-bootstrap +all-libsframe: stage_current +@endif gcc-bootstrap +@if libsframe +TARGET-libsframe=all +maybe-all-libsframe: all-libsframe +all-libsframe: configure-libsframe + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-libsframe)) +@endif libsframe + + + +.PHONY: all-stage1-libsframe maybe-all-stage1-libsframe +.PHONY: clean-stage1-libsframe maybe-clean-stage1-libsframe +maybe-all-stage1-libsframe: +maybe-clean-stage1-libsframe: +@if libsframe-bootstrap +maybe-all-stage1-libsframe: all-stage1-libsframe +all-stage1: all-stage1-libsframe +TARGET-stage1-libsframe = $(TARGET-libsframe) +all-stage1-libsframe: configure-stage1-libsframe + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CXXFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-libsframe) + +maybe-clean-stage1-libsframe: clean-stage1-libsframe +clean-stage1: clean-stage1-libsframe +clean-stage1-libsframe: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-libsframe/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(STAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stage2-libsframe maybe-all-stage2-libsframe +.PHONY: clean-stage2-libsframe maybe-clean-stage2-libsframe +maybe-all-stage2-libsframe: +maybe-clean-stage2-libsframe: +@if libsframe-bootstrap +maybe-all-stage2-libsframe: all-stage2-libsframe +all-stage2: all-stage2-libsframe +TARGET-stage2-libsframe = $(TARGET-libsframe) +all-stage2-libsframe: configure-stage2-libsframe + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-libsframe) + +maybe-clean-stage2-libsframe: clean-stage2-libsframe +clean-stage2: clean-stage2-libsframe +clean-stage2-libsframe: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-libsframe/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stage3-libsframe maybe-all-stage3-libsframe +.PHONY: clean-stage3-libsframe maybe-clean-stage3-libsframe +maybe-all-stage3-libsframe: +maybe-clean-stage3-libsframe: +@if libsframe-bootstrap +maybe-all-stage3-libsframe: all-stage3-libsframe +all-stage3: all-stage3-libsframe +TARGET-stage3-libsframe = $(TARGET-libsframe) +all-stage3-libsframe: configure-stage3-libsframe + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-libsframe) + +maybe-clean-stage3-libsframe: clean-stage3-libsframe +clean-stage3: clean-stage3-libsframe +clean-stage3-libsframe: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-libsframe/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stage4-libsframe maybe-all-stage4-libsframe +.PHONY: clean-stage4-libsframe maybe-clean-stage4-libsframe +maybe-all-stage4-libsframe: +maybe-clean-stage4-libsframe: +@if libsframe-bootstrap +maybe-all-stage4-libsframe: all-stage4-libsframe +all-stage4: all-stage4-libsframe +TARGET-stage4-libsframe = $(TARGET-libsframe) +all-stage4-libsframe: configure-stage4-libsframe + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CXXFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-libsframe) + +maybe-clean-stage4-libsframe: clean-stage4-libsframe +clean-stage4: clean-stage4-libsframe +clean-stage4-libsframe: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-libsframe/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stageprofile-libsframe maybe-all-stageprofile-libsframe +.PHONY: clean-stageprofile-libsframe maybe-clean-stageprofile-libsframe +maybe-all-stageprofile-libsframe: +maybe-clean-stageprofile-libsframe: +@if libsframe-bootstrap +maybe-all-stageprofile-libsframe: all-stageprofile-libsframe +all-stageprofile: all-stageprofile-libsframe +TARGET-stageprofile-libsframe = $(TARGET-libsframe) +all-stageprofile-libsframe: configure-stageprofile-libsframe + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-libsframe) + +maybe-clean-stageprofile-libsframe: clean-stageprofile-libsframe +clean-stageprofile: clean-stageprofile-libsframe +clean-stageprofile-libsframe: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-libsframe/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stagetrain-libsframe maybe-all-stagetrain-libsframe +.PHONY: clean-stagetrain-libsframe maybe-clean-stagetrain-libsframe +maybe-all-stagetrain-libsframe: +maybe-clean-stagetrain-libsframe: +@if libsframe-bootstrap +maybe-all-stagetrain-libsframe: all-stagetrain-libsframe +all-stagetrain: all-stagetrain-libsframe +TARGET-stagetrain-libsframe = $(TARGET-libsframe) +all-stagetrain-libsframe: configure-stagetrain-libsframe + @[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEtrain_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEtrain_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEtrain_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEtrain_TFLAGS)" \ + $(TARGET-stagetrain-libsframe) + +maybe-clean-stagetrain-libsframe: clean-stagetrain-libsframe +clean-stagetrain: clean-stagetrain-libsframe +clean-stagetrain-libsframe: + @if [ $(current_stage) = stagetrain ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagetrain-libsframe/Makefile ] || exit 0; \ + $(MAKE) stagetrain-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stagefeedback-libsframe maybe-all-stagefeedback-libsframe +.PHONY: clean-stagefeedback-libsframe maybe-clean-stagefeedback-libsframe +maybe-all-stagefeedback-libsframe: +maybe-clean-stagefeedback-libsframe: +@if libsframe-bootstrap +maybe-all-stagefeedback-libsframe: all-stagefeedback-libsframe +all-stagefeedback: all-stagefeedback-libsframe +TARGET-stagefeedback-libsframe = $(TARGET-libsframe) +all-stagefeedback-libsframe: configure-stagefeedback-libsframe + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-libsframe) + +maybe-clean-stagefeedback-libsframe: clean-stagefeedback-libsframe +clean-stagefeedback: clean-stagefeedback-libsframe +clean-stagefeedback-libsframe: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-libsframe/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stageautoprofile-libsframe maybe-all-stageautoprofile-libsframe +.PHONY: clean-stageautoprofile-libsframe maybe-clean-stageautoprofile-libsframe +maybe-all-stageautoprofile-libsframe: +maybe-clean-stageautoprofile-libsframe: +@if libsframe-bootstrap +maybe-all-stageautoprofile-libsframe: all-stageautoprofile-libsframe +all-stageautoprofile: all-stageautoprofile-libsframe +TARGET-stageautoprofile-libsframe = $(TARGET-libsframe) +all-stageautoprofile-libsframe: configure-stageautoprofile-libsframe + @[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautoprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + $$s/gcc/config/i386/$(AUTO_PROFILE) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautoprofile_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautoprofile_TFLAGS)" \ + $(TARGET-stageautoprofile-libsframe) + +maybe-clean-stageautoprofile-libsframe: clean-stageautoprofile-libsframe +clean-stageautoprofile: clean-stageautoprofile-libsframe +clean-stageautoprofile-libsframe: + @if [ $(current_stage) = stageautoprofile ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautoprofile-libsframe/Makefile ] || exit 0; \ + $(MAKE) stageautoprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + +.PHONY: all-stageautofeedback-libsframe maybe-all-stageautofeedback-libsframe +.PHONY: clean-stageautofeedback-libsframe maybe-clean-stageautofeedback-libsframe +maybe-all-stageautofeedback-libsframe: +maybe-clean-stageautofeedback-libsframe: +@if libsframe-bootstrap +maybe-all-stageautofeedback-libsframe: all-stageautofeedback-libsframe +all-stageautofeedback: all-stageautofeedback-libsframe +TARGET-stageautofeedback-libsframe = $(TARGET-libsframe) +all-stageautofeedback-libsframe: configure-stageautofeedback-libsframe + @[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEautofeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/libsframe && \ + \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEautofeedback_CFLAGS)" \ + GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \ + CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \ + LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \ + $(TARGET-stageautofeedback-libsframe) + +maybe-clean-stageautofeedback-libsframe: clean-stageautofeedback-libsframe +clean-stageautofeedback: clean-stageautofeedback-libsframe +clean-stageautofeedback-libsframe: + @if [ $(current_stage) = stageautofeedback ]; then \ + [ -f $(HOST_SUBDIR)/libsframe/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageautofeedback-libsframe/Makefile ] || exit 0; \ + $(MAKE) stageautofeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) clean +@endif libsframe-bootstrap + + + + + +.PHONY: check-libsframe maybe-check-libsframe +maybe-check-libsframe: +@if libsframe +maybe-check-libsframe: check-libsframe + +check-libsframe: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) $(EXTRA_HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_BOOTSTRAP_FLAGS) check) + +@endif libsframe + +.PHONY: install-libsframe maybe-install-libsframe +maybe-install-libsframe: +@if libsframe +maybe-install-libsframe: install-libsframe + +install-libsframe: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(FLAGS_TO_PASS) install) + +@endif libsframe + +.PHONY: install-strip-libsframe maybe-install-strip-libsframe +maybe-install-strip-libsframe: +@if libsframe +maybe-install-strip-libsframe: install-strip-libsframe + +install-strip-libsframe: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + +@endif libsframe + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libsframe info-libsframe +maybe-info-libsframe: +@if libsframe +maybe-info-libsframe: info-libsframe + +info-libsframe: \ + configure-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-dvi-libsframe dvi-libsframe +maybe-dvi-libsframe: +@if libsframe +maybe-dvi-libsframe: dvi-libsframe + +dvi-libsframe: \ + configure-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-pdf-libsframe pdf-libsframe +maybe-pdf-libsframe: +@if libsframe +maybe-pdf-libsframe: pdf-libsframe + +pdf-libsframe: \ + configure-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-html-libsframe html-libsframe +maybe-html-libsframe: +@if libsframe +maybe-html-libsframe: html-libsframe + +html-libsframe: \ + configure-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-TAGS-libsframe TAGS-libsframe +maybe-TAGS-libsframe: +@if libsframe +maybe-TAGS-libsframe: TAGS-libsframe + +TAGS-libsframe: \ + configure-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-install-info-libsframe install-info-libsframe +maybe-install-info-libsframe: +@if libsframe +maybe-install-info-libsframe: install-info-libsframe + +install-info-libsframe: \ + configure-libsframe \ + info-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-install-dvi-libsframe install-dvi-libsframe +maybe-install-dvi-libsframe: +@if libsframe +maybe-install-dvi-libsframe: install-dvi-libsframe + +install-dvi-libsframe: \ + configure-libsframe \ + dvi-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-dvi in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-dvi) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-install-pdf-libsframe install-pdf-libsframe +maybe-install-pdf-libsframe: +@if libsframe +maybe-install-pdf-libsframe: install-pdf-libsframe + +install-pdf-libsframe: \ + configure-libsframe \ + pdf-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-install-html-libsframe install-html-libsframe +maybe-install-html-libsframe: +@if libsframe +maybe-install-html-libsframe: install-html-libsframe + +install-html-libsframe: \ + configure-libsframe \ + html-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-installcheck-libsframe installcheck-libsframe +maybe-installcheck-libsframe: +@if libsframe +maybe-installcheck-libsframe: installcheck-libsframe + +installcheck-libsframe: \ + configure-libsframe + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-mostlyclean-libsframe mostlyclean-libsframe +maybe-mostlyclean-libsframe: +@if libsframe +maybe-mostlyclean-libsframe: mostlyclean-libsframe + +mostlyclean-libsframe: + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-clean-libsframe clean-libsframe +maybe-clean-libsframe: +@if libsframe +maybe-clean-libsframe: clean-libsframe + +clean-libsframe: + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-distclean-libsframe distclean-libsframe +maybe-distclean-libsframe: +@if libsframe +maybe-distclean-libsframe: distclean-libsframe + +distclean-libsframe: + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif libsframe + +.PHONY: maybe-maintainer-clean-libsframe maintainer-clean-libsframe +maybe-maintainer-clean-libsframe: +@if libsframe +maybe-maintainer-clean-libsframe: maintainer-clean-libsframe + +maintainer-clean-libsframe: + @[ -f ./libsframe/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in libsframe"; \ + (cd $(HOST_SUBDIR)/libsframe && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif libsframe + + + # --------------------------------------- # Modules which run on the target machine # --------------------------------------- @@ -59280,6 +60442,11 @@ stage1-start:: mkdir stage1-libctf; \ mv stage1-libctf libctf @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stage1-libsframe ] || \ + mkdir stage1-libsframe; \ + mv stage1-libsframe libsframe +@endif libsframe @[ -d stage1-$(TARGET_SUBDIR) ] || \ mkdir stage1-$(TARGET_SUBDIR); \ mv stage1-$(TARGET_SUBDIR) $(TARGET_SUBDIR) @@ -59405,6 +60572,11 @@ stage1-end:: cd $(HOST_SUBDIR); mv libctf stage1-libctf; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stage1-libsframe; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); \ fi @@ -59597,6 +60769,12 @@ stage2-start:: mv stage2-libctf libctf; \ mv stage1-libctf prev-libctf || test -f stage1-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stage2-libsframe ] || \ + mkdir stage2-libsframe; \ + mv stage2-libsframe libsframe; \ + mv stage1-libsframe prev-libsframe || test -f stage1-lean +@endif libsframe @[ -d stage2-$(TARGET_SUBDIR) ] || \ mkdir stage2-$(TARGET_SUBDIR); \ mv stage2-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -59747,6 +60925,12 @@ stage2-end:: mv prev-libctf stage1-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stage2-libsframe; \ + mv prev-libsframe stage1-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stage2-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); : ; \ @@ -59963,6 +61147,12 @@ stage3-start:: mv stage3-libctf libctf; \ mv stage2-libctf prev-libctf || test -f stage2-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stage3-libsframe ] || \ + mkdir stage3-libsframe; \ + mv stage3-libsframe libsframe; \ + mv stage2-libsframe prev-libsframe || test -f stage2-lean +@endif libsframe @[ -d stage3-$(TARGET_SUBDIR) ] || \ mkdir stage3-$(TARGET_SUBDIR); \ mv stage3-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -60113,6 +61303,12 @@ stage3-end:: mv prev-libctf stage2-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stage3-libsframe; \ + mv prev-libsframe stage2-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stage3-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stage2-$(TARGET_SUBDIR); : ; \ @@ -60385,6 +61581,12 @@ stage4-start:: mv stage4-libctf libctf; \ mv stage3-libctf prev-libctf || test -f stage3-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stage4-libsframe ] || \ + mkdir stage4-libsframe; \ + mv stage4-libsframe libsframe; \ + mv stage3-libsframe prev-libsframe || test -f stage3-lean +@endif libsframe @[ -d stage4-$(TARGET_SUBDIR) ] || \ mkdir stage4-$(TARGET_SUBDIR); \ mv stage4-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -60535,6 +61737,12 @@ stage4-end:: mv prev-libctf stage3-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stage4-libsframe; \ + mv prev-libsframe stage3-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stage4-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stage3-$(TARGET_SUBDIR); : ; \ @@ -60795,6 +62003,12 @@ stageprofile-start:: mv stageprofile-libctf libctf; \ mv stage1-libctf prev-libctf || test -f stage1-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stageprofile-libsframe ] || \ + mkdir stageprofile-libsframe; \ + mv stageprofile-libsframe libsframe; \ + mv stage1-libsframe prev-libsframe || test -f stage1-lean +@endif libsframe @[ -d stageprofile-$(TARGET_SUBDIR) ] || \ mkdir stageprofile-$(TARGET_SUBDIR); \ mv stageprofile-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -60945,6 +62159,12 @@ stageprofile-end:: mv prev-libctf stage1-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stageprofile-libsframe; \ + mv prev-libsframe stage1-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stageprofile-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); : ; \ @@ -61138,6 +62358,12 @@ stagetrain-start:: mv stagetrain-libctf libctf; \ mv stageprofile-libctf prev-libctf || test -f stageprofile-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stagetrain-libsframe ] || \ + mkdir stagetrain-libsframe; \ + mv stagetrain-libsframe libsframe; \ + mv stageprofile-libsframe prev-libsframe || test -f stageprofile-lean +@endif libsframe @[ -d stagetrain-$(TARGET_SUBDIR) ] || \ mkdir stagetrain-$(TARGET_SUBDIR); \ mv stagetrain-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -61288,6 +62514,12 @@ stagetrain-end:: mv prev-libctf stageprofile-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stagetrain-libsframe; \ + mv prev-libsframe stageprofile-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stagetrain-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stageprofile-$(TARGET_SUBDIR); : ; \ @@ -61481,6 +62713,12 @@ stagefeedback-start:: mv stagefeedback-libctf libctf; \ mv stagetrain-libctf prev-libctf || test -f stagetrain-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stagefeedback-libsframe ] || \ + mkdir stagefeedback-libsframe; \ + mv stagefeedback-libsframe libsframe; \ + mv stagetrain-libsframe prev-libsframe || test -f stagetrain-lean +@endif libsframe @[ -d stagefeedback-$(TARGET_SUBDIR) ] || \ mkdir stagefeedback-$(TARGET_SUBDIR); \ mv stagefeedback-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -61631,6 +62869,12 @@ stagefeedback-end:: mv prev-libctf stagetrain-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stagefeedback-libsframe; \ + mv prev-libsframe stagetrain-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stagefeedback-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stagetrain-$(TARGET_SUBDIR); : ; \ @@ -61847,6 +63091,12 @@ stageautoprofile-start:: mv stageautoprofile-libctf libctf; \ mv stage1-libctf prev-libctf || test -f stage1-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stageautoprofile-libsframe ] || \ + mkdir stageautoprofile-libsframe; \ + mv stageautoprofile-libsframe libsframe; \ + mv stage1-libsframe prev-libsframe || test -f stage1-lean +@endif libsframe @[ -d stageautoprofile-$(TARGET_SUBDIR) ] || \ mkdir stageautoprofile-$(TARGET_SUBDIR); \ mv stageautoprofile-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -61997,6 +63247,12 @@ stageautoprofile-end:: mv prev-libctf stage1-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stageautoprofile-libsframe; \ + mv prev-libsframe stage1-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stageautoprofile-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stage1-$(TARGET_SUBDIR); : ; \ @@ -62190,6 +63446,12 @@ stageautofeedback-start:: mv stageautofeedback-libctf libctf; \ mv stageautoprofile-libctf prev-libctf || test -f stageautoprofile-lean @endif libctf +@if libsframe + @cd $(HOST_SUBDIR); [ -d stageautofeedback-libsframe ] || \ + mkdir stageautofeedback-libsframe; \ + mv stageautofeedback-libsframe libsframe; \ + mv stageautoprofile-libsframe prev-libsframe || test -f stageautoprofile-lean +@endif libsframe @[ -d stageautofeedback-$(TARGET_SUBDIR) ] || \ mkdir stageautofeedback-$(TARGET_SUBDIR); \ mv stageautofeedback-$(TARGET_SUBDIR) $(TARGET_SUBDIR); \ @@ -62340,6 +63602,12 @@ stageautofeedback-end:: mv prev-libctf stageautoprofile-libctf; : ; \ fi @endif libctf +@if libsframe + @if test -d $(HOST_SUBDIR)/libsframe; then \ + cd $(HOST_SUBDIR); mv libsframe stageautofeedback-libsframe; \ + mv prev-libsframe stageautoprofile-libsframe; : ; \ + fi +@endif libsframe @if test -d $(TARGET_SUBDIR); then \ mv $(TARGET_SUBDIR) stageautofeedback-$(TARGET_SUBDIR); \ mv prev-$(TARGET_SUBDIR) stageautoprofile-$(TARGET_SUBDIR); : ; \ @@ -63259,6 +64527,16 @@ all-stagetrain-ld: maybe-all-stagetrain-libctf all-stagefeedback-ld: maybe-all-stagefeedback-libctf all-stageautoprofile-ld: maybe-all-stageautoprofile-libctf all-stageautofeedback-ld: maybe-all-stageautofeedback-libctf +all-binutils: maybe-all-libsframe +all-stage1-binutils: maybe-all-stage1-libsframe +all-stage2-binutils: maybe-all-stage2-libsframe +all-stage3-binutils: maybe-all-stage3-libsframe +all-stage4-binutils: maybe-all-stage4-libsframe +all-stageprofile-binutils: maybe-all-stageprofile-libsframe +all-stagetrain-binutils: maybe-all-stagetrain-libsframe +all-stagefeedback-binutils: maybe-all-stagefeedback-libsframe +all-stageautoprofile-binutils: maybe-all-stageautoprofile-libsframe +all-stageautofeedback-binutils: maybe-all-stageautofeedback-libsframe install-binutils: maybe-install-opcodes install-strip-binutils: maybe-install-strip-opcodes install-libctf: maybe-install-bfd diff --git a/binutils/Makefile.am b/binutils/Makefile.am index 751fbacce12..b93684d9a65 100644 --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -176,6 +176,8 @@ LIBCTF = LIBCTF_NOBFD = endif +LIBSFRAME = ../libsframe/libsframe.la + LIBIBERTY = ../libiberty/libiberty.a POTFILES = $(CFILES) $(DEBUG_SRCS) $(HFILES) diff --git a/binutils/Makefile.in b/binutils/Makefile.in index 6de4e239408..6cbdba1da26 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -741,6 +741,7 @@ OPCODES = ../opcodes/libopcodes.la @ENABLE_LIBCTF_TRUE@LIBCTF = ../libctf/libctf.la @ENABLE_LIBCTF_FALSE@LIBCTF_NOBFD = @ENABLE_LIBCTF_TRUE@LIBCTF_NOBFD = ../libctf/libctf-nobfd.la +LIBSFRAME = ../libsframe/libsframe.la LIBIBERTY = ../libiberty/libiberty.a POTFILES = $(CFILES) $(DEBUG_SRCS) $(HFILES) EXPECT = expect diff --git a/configure b/configure index f14e0efd675..720eedca3a2 100755 --- a/configure +++ b/configure @@ -2790,7 +2790,7 @@ build_tools="build-texinfo build-flex build-bison build-m4 build-fixincludes" # these libraries are used by various programs built for the host environment #f -host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf" +host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf libsframe" # these tools are built for the host environment # Note, the powerpc-eabi build depends on sim occurring before gdb in order to diff --git a/configure.ac b/configure.ac index 0152c69292e..7df8c076cf6 100644 --- a/configure.ac +++ b/configure.ac @@ -132,7 +132,7 @@ build_tools="build-texinfo build-flex build-bison build-m4 build-fixincludes" # these libraries are used by various programs built for the host environment #f -host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf" +host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl libelf libiconv libctf libsframe" # these tools are built for the host environment # Note, the powerpc-eabi build depends on sim occurring before gdb in order to diff --git a/include/sframe-api.h b/include/sframe-api.h new file mode 100644 index 00000000000..0c77cd4284a --- /dev/null +++ b/include/sframe-api.h @@ -0,0 +1,211 @@ +/* Public API to SFrame. + + Copyright (C) 2022 Free Software Foundation, Inc. + + This file is part of libsframe. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _SFRAME_API_H +#define _SFRAME_API_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct sframe_decoder_ctx sframe_decoder_ctx; +typedef struct sframe_encoder_ctx sframe_encoder_ctx; + +#define MAX_OFFSET_BYTES (SFRAME_FRE_OFFSET_4B * 2 * 3) + +/* User interfacing SFrame Row Entry. + An abstraction provided by libsframe so the consumer is decoupled from + the binary format representation of the same. */ + +typedef struct sframe_frame_row_entry +{ + uint32_t fre_start_addr; + unsigned char fre_info; + unsigned char fre_offsets[MAX_OFFSET_BYTES]; +} sframe_frame_row_entry; + +#define SFRAME_ERR ((int) -1) + +/* This macro holds information about all the available SFrame + errors. It is used to form both an enum holding all the error + constants, and also the error strings themselves. To use, define + _SFRAME_FIRST and _SFRAME_ITEM to expand as you like, then + mention the macro name. See the enum after this for an example. */ +#define _SFRAME_ERRORS \ + _SFRAME_FIRST (ESFRAME_VERSION_INVAL, "SFrame version not supported.") \ + _SFRAME_ITEM (ESFRAME_NOMEM, "Out of Memory.") \ + _SFRAME_ITEM (ESFRAME_INVAL, "Corrupt SFrame.") \ + _SFRAME_ITEM (ESFRAME_BUF_INVAL, "Corrupt SFrame buffer.") \ + _SFRAME_ITEM (ESFRAME_DCTX_INVAL, "Corrupt SFrame decoder.") \ + _SFRAME_ITEM (ESFRAME_ECTX_INVAL, "Corrupt SFrame encoder.") \ + _SFRAME_ITEM (ESFRAME_FDE_INVAL, "Corrput FDE.") \ + _SFRAME_ITEM (ESFRAME_FRE_INVAL, "Corrupt FRE.") \ + _SFRAME_ITEM (ESFRAME_FDE_NOTFOUND,"FDE not found.") \ + _SFRAME_ITEM (ESFRAME_FDE_NOTSORTED, "FDEs not sorted.") \ + _SFRAME_ITEM (ESFRAME_FRE_NOTFOUND,"FRE not found.") \ + _SFRAME_ITEM (ESFRAME_FREOFFSET_NOPRESENT,"FRE offset not present.") + +#define ESFRAME_BASE 2000 /* Base value for libsframe errnos. */ + +enum + { +#define _SFRAME_FIRST(NAME, STR) NAME = ESFRAME_BASE +#define _SFRAME_ITEM(NAME, STR) , NAME +_SFRAME_ERRORS +#undef _SFRAME_ITEM +#undef _SFRAME_FIRST + }; + +/* Count of SFrame errors. */ +#define ESFRAME_NERR (ESFRAME_NOMEM - ESFRAME_BASE + 1) + +/* Get the error message string. */ + +extern const char * +sframe_errmsg (int error); + +/* Get FDE function info given a FRE_TYPE. */ + +extern unsigned char +sframe_fde_func_info (unsigned int fre_type, unsigned int fde_type); + +/* Gather the FRE type given the function size. */ + +extern unsigned int +sframe_calc_fre_type (unsigned int func_size); + +/* The SFrame Decoder. */ + +/* Decode the specified SFrame buffer CF_BUF of size CF_SIZE and return the + new SFrame decoder context. Sets ERRP for the caller if any error. */ +extern sframe_decoder_ctx * +sframe_decode (const char *cf_buf, size_t cf_size, int *errp); + +/* Free the decoder context. */ +extern void +sframe_decoder_free (sframe_decoder_ctx **dctx); + +/* Get the SFrame's abi/arch info. */ +extern unsigned char +sframe_decoder_get_abi_arch (sframe_decoder_ctx *dctx); + +/* Return the number of function descriptor entries in the SFrame decoder + DCTX. */ +unsigned int +sframe_decoder_get_num_fidx (sframe_decoder_ctx *dctx); + +/* Find the function descriptor entry which contains the specified address. */ +extern sframe_func_desc_entry * +sframe_get_funcdesc_with_addr (sframe_decoder_ctx *dctx, + int32_t addr, int *errp); + +/* Find the SFrame Frame Row Entry which contains the PC. Returns + SFRAME_ERR if failure. */ + +extern int +sframe_find_fre (sframe_decoder_ctx *ctx, int32_t pc, + sframe_frame_row_entry *frep); + +/* Get the FRE_IDX'th FRE of the function at FUNC_IDX'th function + index entry in the SFrame decoder CTX. Returns error code as + applicable. */ +extern int +sframe_decoder_get_fre (sframe_decoder_ctx *ctx, + unsigned int func_idx, + unsigned int fre_idx, + sframe_frame_row_entry *fre); + +/* Get the data (NUM_FRES, FUNC_START_ADDRESS) from the function + descriptor entry at index I'th in the decoder CTX. If failed, + return error code. */ +extern int +sframe_decoder_get_funcdesc (sframe_decoder_ctx *ctx, + unsigned int i, + uint32_t *num_fres, + uint32_t *func_size, + int32_t *func_start_address, + unsigned char *func_info); + + +/* Get the base reg id from the FRE info. Sets errp if fails. */ +extern unsigned int +sframe_fre_get_base_reg_id (sframe_frame_row_entry *fre, int *errp); + +/* Get the CFA offset from the FRE. If the offset is invalid, sets errp. */ +extern int32_t +sframe_fre_get_cfa_offset (sframe_frame_row_entry *fre, int *errp); + +/* Get the FP offset from the FRE. If the offset is invalid, sets errp. */ +extern int32_t +sframe_fre_get_fp_offset (sframe_frame_row_entry *fre, int *errp); + +/* Get the RA offset from the FRE. If the offset is invalid, sets errp. */ +extern int32_t +sframe_fre_get_ra_offset (sframe_frame_row_entry *fre, int *errp); + +/* The SFrame Encoder. */ + +/* Create an encoder context with the given SFrame format version VER, FLAGS + and ABI information. Sets errp if failure. */ +extern sframe_encoder_ctx * +sframe_encode (unsigned char ver, unsigned char flags, int abi, int *errp); + +/* Free the encoder context. */ +extern void +sframe_free_encoder (sframe_encoder_ctx *encoder); + +/* Get the abi/arch info from the SFrame encoder context CTX. */ +extern unsigned char +sframe_encoder_get_abi_arch (sframe_encoder_ctx *encoder); + +/* Return the number of function descriptor entries in the SFrame encoder + ENCODER. */ +extern unsigned int +sframe_encoder_get_num_fidx (sframe_encoder_ctx *encoder); + +/* Add an FRE to function at FUNC_IDX'th function descriptor index entry in + the encoder context. */ +extern int +sframe_encoder_add_fre (sframe_encoder_ctx *encoder, + unsigned int func_idx, + sframe_frame_row_entry *frep); + +/* Add a new function descriptor entry with START_ADDR, FUNC_SIZE and NUM_FRES + to the encoder. */ +extern int +sframe_encoder_add_funcdesc (sframe_encoder_ctx *encoder, + int32_t start_addr, + uint32_t func_size, + unsigned char func_info, + 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 * +sframe_write_encoder (sframe_encoder_ctx *encoder, + size_t *encoded_size, int *errp); + +#ifdef __cplusplus +} +#endif + +#endif /* _SFRAME_API_H */ diff --git a/libsframe/Makefile.am b/libsframe/Makefile.am new file mode 100644 index 00000000000..3a2218f1e5e --- /dev/null +++ b/libsframe/Makefile.am @@ -0,0 +1,43 @@ +## Process this file with automake to produce Makefile.in. +# +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not see +# . +# + +SUBDIRS = testsuite + +ACLOCAL_AMFLAGS = -I .. -I ../config + +AUTOMAKE_OPTIONS = foreign no-texinfo.tex + +BASEDIR = $(srcdir)/.. +INCDIR = $(srcdir)/../include +# include libctf for swap.h +AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../libctf +AM_CFLAGS = -std=gnu99 @ac_libsframe_warn_cflags@ @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@ + +if INSTALL_LIBBFD +lib_LTLIBRARIES = libsframe.la +include_HEADERS = $(INCDIR)/sframe.h $(INCDIR)/sframe-api.h +else +include_HEADERS = +noinst_LTLIBRARIES = libsframe.la +endif + +libsframe_la_SOURCES = sframe.c sframe-error.c +libsframe_la_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include \ + -I$(srcdir)/../libctf + diff --git a/libsframe/Makefile.in b/libsframe/Makefile.in new file mode 100644 index 00000000000..79ea3a9209d --- /dev/null +++ b/libsframe/Makefile.in @@ -0,0 +1,1047 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not see +# . +# + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ + $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/jobserver.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/warnings.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ + $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__include_HEADERS_DIST) \ + $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) +libsframe_la_LIBADD = +am_libsframe_la_OBJECTS = libsframe_la-sframe.lo \ + libsframe_la-sframe-error.lo +libsframe_la_OBJECTS = $(am_libsframe_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +@INSTALL_LIBBFD_FALSE@am_libsframe_la_rpath = +@INSTALL_LIBBFD_TRUE@am_libsframe_la_rpath = -rpath $(libdir) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libsframe_la_SOURCES) +DIST_SOURCES = $(libsframe_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__include_HEADERS_DIST = $(INCDIR)/sframe.h $(INCDIR)/sframe-api.h +HEADERS = $(include_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/../ar-lib $(top_srcdir)/../compile \ + $(top_srcdir)/../config.guess $(top_srcdir)/../config.sub \ + $(top_srcdir)/../depcomp $(top_srcdir)/../install-sh \ + $(top_srcdir)/../ltmain.sh $(top_srcdir)/../missing \ + $(top_srcdir)/../mkinstalldirs +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WARN_PEDANTIC = @WARN_PEDANTIC@ +WERROR = @WERROR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_libsframe_warn_cflags = @ac_libsframe_warn_cflags@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +c_warn = @c_warn@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_noncanonical = @host_noncanonical@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +target_noncanonical = @target_noncanonical@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +warn = @warn@ +SUBDIRS = testsuite +ACLOCAL_AMFLAGS = -I .. -I ../config +AUTOMAKE_OPTIONS = foreign no-texinfo.tex +BASEDIR = $(srcdir)/.. +INCDIR = $(srcdir)/../include +# include libctf for swap.h +AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../libctf +AM_CFLAGS = -std=gnu99 @ac_libsframe_warn_cflags@ @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@ +@INSTALL_LIBBFD_TRUE@lib_LTLIBRARIES = libsframe.la +@INSTALL_LIBBFD_FALSE@include_HEADERS = +@INSTALL_LIBBFD_TRUE@include_HEADERS = $(INCDIR)/sframe.h $(INCDIR)/sframe-api.h +@INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libsframe.la +libsframe_la_SOURCES = sframe.c sframe-error.c +libsframe_la_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include \ + -I$(srcdir)/../libctf + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libsframe.la: $(libsframe_la_OBJECTS) $(libsframe_la_DEPENDENCIES) $(EXTRA_libsframe_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(am_libsframe_la_rpath) $(libsframe_la_OBJECTS) $(libsframe_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe-error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libsframe_la-sframe.lo: sframe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsframe_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsframe_la-sframe.lo -MD -MP -MF $(DEPDIR)/libsframe_la-sframe.Tpo -c -o libsframe_la-sframe.lo `test -f 'sframe.c' || echo '$(srcdir)/'`sframe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsframe_la-sframe.Tpo $(DEPDIR)/libsframe_la-sframe.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sframe.c' object='libsframe_la-sframe.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsframe_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsframe_la-sframe.lo `test -f 'sframe.c' || echo '$(srcdir)/'`sframe.c + +libsframe_la-sframe-error.lo: sframe-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsframe_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsframe_la-sframe-error.lo -MD -MP -MF $(DEPDIR)/libsframe_la-sframe-error.Tpo -c -o libsframe_la-sframe-error.lo `test -f 'sframe-error.c' || echo '$(srcdir)/'`sframe-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsframe_la-sframe-error.Tpo $(DEPDIR)/libsframe_la-sframe-error.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sframe-error.c' object='libsframe_la-sframe-error.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsframe_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsframe_la-sframe-error.lo `test -f 'sframe-error.c' || echo '$(srcdir)/'`sframe-error.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ + cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-includeHEADERS \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libsframe/aclocal.m4 b/libsframe/aclocal.m4 new file mode 100644 index 00000000000..3a0b3426ebc --- /dev/null +++ b/libsframe/aclocal.m4 @@ -0,0 +1,1241 @@ +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# Copyright (C) 2011-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AR([ACT-IF-FAIL]) +# ------------------------- +# Try to determine the archiver interface, and trigger the ar-lib wrapper +# if it is needed. If the detection of archiver interface fails, run +# ACT-IF-FAIL (default is to abort configure with a proper error message). +AC_DEFUN([AM_PROG_AR], +[AC_BEFORE([$0], [LT_INIT])dnl +AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([ar-lib])dnl +AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) +: ${AR=ar} + +AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], + [AC_LANG_PUSH([C]) + am_cv_ar_interface=ar + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], + [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + ]) + AC_LANG_POP([C])]) + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + m4_default([$1], + [AC_MSG_ERROR([could not determine $AR interface])]) + ;; +esac +AC_SUBST([AR])dnl +]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([../bfd/acinclude.m4]) +m4_include([../config/acx.m4]) +m4_include([../config/depstand.m4]) +m4_include([../config/jobserver.m4]) +m4_include([../config/lead-dot.m4]) +m4_include([../config/override.m4]) +m4_include([../config/warnings.m4]) +m4_include([../libtool.m4]) +m4_include([../ltoptions.m4]) +m4_include([../ltsugar.m4]) +m4_include([../ltversion.m4]) +m4_include([../lt~obsolete.m4]) diff --git a/libsframe/config.h.in b/libsframe/config.h.in new file mode 100644 index 00000000000..6712ff1cc81 --- /dev/null +++ b/libsframe/config.h.in @@ -0,0 +1,144 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_BYTESWAP_H + +/* Define to 1 if you have the declaration of `asprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_ASPRINTF + +/* Define to 1 if you have the declaration of `bswap_16', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_16 + +/* Define to 1 if you have the declaration of `bswap_32', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_32 + +/* Define to 1 if you have the declaration of `bswap_64', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_64 + +/* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't. + */ +#undef HAVE_DECL_STPCPY + +/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_VASPRINTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ENDIAN_H + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Version number of package */ +#undef VERSION + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE diff --git a/libsframe/configure.ac b/libsframe/configure.ac new file mode 100644 index 00000000000..d2f32ae2ebd --- /dev/null +++ b/libsframe/configure.ac @@ -0,0 +1,78 @@ +dnl -*- Autoconf -*- +dnl Process this file with autoconf to produce a configure script. +dnl +dnl Copyright (C) 2022 Free Software Foundation, Inc. +dnl +dnl This file is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; see the file COPYING. If not see +dnl . +dnl + +AC_INIT([libsframe], BFD_VERSION) +AC_CONFIG_SRCDIR(sframe.c) +AC_CONFIG_MACRO_DIR(..) +AC_CONFIG_MACRO_DIR(../config) +AC_CONFIG_MACRO_DIR(../bfd) +AC_USE_SYSTEM_EXTENSIONS +AM_INIT_AUTOMAKE + +# Checks for programs. +AC_PROG_MAKE_SET +AC_PROG_CC +AC_PROG_RANLIB +AM_PROG_AR + +dnl Default to a non shared library. This may be overridden by the +dnl configure option --enable-shared. +AC_DISABLE_SHARED + +LT_INIT +AC_SYS_LARGEFILE + +MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing +AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal]) +AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf]) +AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader]) + +# Figure out what compiler warnings we can enable. +# See config/warnings.m4 for details. + +ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wno-narrowing -Wwrite-strings \ + -Wmissing-format-attribute], [warn]) +ACX_PROG_CC_WARNING_OPTS([-Wstrict-prototypes -Wmissing-prototypes \ + -Wold-style-definition], [c_warn]) +ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long]) + +# Only enable with --enable-werror-always until existing warnings are +# corrected. +ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual]) + +AM_MAINTAINER_MODE +AM_INSTALL_LIBBFD +ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_libsframe_warn_cflags]) + +AC_FUNC_MMAP +AC_CHECK_HEADERS(byteswap.h endian.h) + +dnl Check for bswap_{16,32,64} +AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64], [], [], [[#include ]]) +AC_CHECK_DECLS([asprintf, vasprintf, stpcpy]) + +AC_CONFIG_FILES(Makefile + testsuite/Makefile + testsuite/libsframe.decode/Makefile + testsuite/libsframe.encode/Makefile) +AC_CONFIG_HEADERS(config.h) +AC_OUTPUT + +GNU_MAKE_JOBSERVER diff --git a/libsframe/sframe-error.c b/libsframe/sframe-error.c new file mode 100644 index 00000000000..292fdb3f131 --- /dev/null +++ b/libsframe/sframe-error.c @@ -0,0 +1,49 @@ +/* sframe-error.c - Error messages. + + Copyright (C) 2022 Free Software Foundation, Inc. + + his file is part of libsframe. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "sframe-api.h" +#include +#include + +/* In this file, we want to treat the first item of the SFrame error + macro like subsequent items. */ +#define _SFRAME_FIRST(NAME, VALUE) _SFRAME_ITEM(NAME, VALUE) + +/* The error message strings, each in a unique structure member precisely big + enough for that error, plus a str member to access them all as a string + table. */ + +static const char *const _sframe_errlist[] = { +#define _SFRAME_ITEM(n, s) s, +_SFRAME_ERRORS +#undef _SFRAME_ITEM +}; + +const char * +sframe_errmsg (int error) +{ + const char *str; + + if (error >= ESFRAME_BASE && (error - ESFRAME_BASE) < ESFRAME_NERR) + str = _sframe_errlist[error - ESFRAME_BASE]; + else + str = (const char *) strerror (error); + + return (str ? str : "Unknown error"); +} diff --git a/libsframe/sframe-impl.h b/libsframe/sframe-impl.h new file mode 100644 index 00000000000..0e61c977886 --- /dev/null +++ b/libsframe/sframe-impl.h @@ -0,0 +1,55 @@ +/* Implementation header. + + Copyright (C) 2022 Free Software Foundation, Inc. + + This file is part of libsframe. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _SFRAME_IMPL_H +#define _SFRAME_IMPL_H + +#include "sframe-api.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#define sframe_assert(expr) (assert (expr)) + +struct sframe_decoder_ctx +{ + sframe_header sfd_header; /* SFrame header. */ + uint32_t *sfd_funcdesc; /* SFrame function desc entries table. */ + void *sfd_fres; /* SFrame FRE table. */ + int sfd_fre_nbytes; /* Number of bytes needed for SFrame FREs. */ +}; + +struct sframe_encoder_ctx +{ + sframe_header sfe_header; /* SFrame header. */ + uint32_t *sfe_funcdesc; /* SFrame function desc entries table. */ + sframe_frame_row_entry *sfe_fres; /* SFrame FRE table. */ + uint32_t sfe_fre_nbytes; /* Number of bytes needed for SFrame FREs. */ + char *sfe_data; /* SFrame data buffer. */ + size_t sfe_data_size; /* Size of the SFrame data buffer. */ +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _SFRAME_IMPL_H */ diff --git a/libsframe/sframe.c b/libsframe/sframe.c new file mode 100644 index 00000000000..13cf5686f30 --- /dev/null +++ b/libsframe/sframe.c @@ -0,0 +1,1566 @@ +/* sframe.c - SFrame decoder/encoder. + + Copyright (C) 2022 Free Software Foundation, Inc. + + This file is part of libsframe. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "config.h" +#include +#include +#include +#include +#include +#include "sframe-impl.h" +#include "swap.h" + +typedef struct sf_funidx_tbl +{ + unsigned int count; + unsigned int alloced; + sframe_func_desc_entry entry[1]; +} sf_funidx_tbl; + +typedef struct sf_fre_tbl +{ + unsigned int count; + unsigned int alloced; + sframe_frame_row_entry entry[1]; +} sf_fre_tbl; + +#define _sf_printflike_(string_index,first_to_check) \ + __attribute__ ((__format__ (__printf__, (string_index), (first_to_check)))) + +static void debug_printf (const char *, ...); + +static int _sframe_debug; /* Control for printing out debug info. */ +static int number_of_entries = 64; + +static void +sframe_init_debug (void) +{ + static int inited; + + if (!inited) + { + _sframe_debug = getenv ("SFRAME_DEBUG") != NULL; + inited = 1; + } +} + +_sf_printflike_ (1, 2) +static void debug_printf (const char *format, ...) +{ + if (_sframe_debug) + { + va_list args; + + va_start (args, format); + vfprintf (stderr, format, args); + va_end (args); + } +} + +/* Generate bitmask of given size in bytes. This is used for + some checks on the FRE start address. + SFRAME_FRE_TYPE_ADDR1 => 1 byte => [ bitmask = 0xff ] + SFRAME_FRE_TYPE_ADDR2 => 2 byte => [ bitmask = 0xffff ] + SFRAME_FRE_TYPE_ADDR4 => 4 byte => [ bitmask = 0xffffffff ]. */ +#define SFRAME_BITMASK_OF_SIZE(size_in_bytes) \ + (((uint64_t)1 << (size_in_bytes*8)) - 1) + +/* Store the specified error code into errp if it is non-NULL. + Return SFRAME_ERR. */ + +static int +sframe_set_errno (int *errp, int error) +{ + if (errp != NULL) + *errp = error; + return SFRAME_ERR; +} + +/* Store the specified error code into errp if it is non-NULL. + Return NULL. */ + +static void * +sframe_ret_set_errno (int *errp, int error) +{ + if (errp != NULL) + *errp = error; + return NULL; +} + +/* Access functions for frame row entry data. */ + +static unsigned int +sframe_fre_get_offset_count (unsigned char fre_info) +{ + return SFRAME_V1_FRE_OFFSET_COUNT (fre_info); +} + +static unsigned int +sframe_fre_get_offset_size (unsigned char fre_info) +{ + return SFRAME_V1_FRE_OFFSET_SIZE (fre_info); +} + +/* Access functions for info from function descriptor entry. */ + +static unsigned int +sframe_get_fre_type (sframe_func_desc_entry *fdep) +{ + unsigned int fre_type = 0; + if (fdep) + fre_type = SFRAME_V1_FUNC_FRE_TYPE (fdep->sfde_func_info); + return fre_type; +} + +static unsigned int +sframe_get_fde_type (sframe_func_desc_entry *fdep) +{ + unsigned int fde_type = 0; + if (fdep) + fde_type = SFRAME_V1_FUNC_FDE_TYPE (fdep->sfde_func_info); + return fde_type; +} + +/* Check if flipping is needed, based on ENDIAN. */ + +static int +need_swapping (int endian) +{ + unsigned int ui = 1; + char *c = (char *)&ui; + int is_little = (int)*c; + + switch (endian) + { + case SFRAME_ABI_AARCH64_ENDIAN_LITTLE: + case SFRAME_ABI_AMD64_ENDIAN_LITTLE: + return !is_little; + case SFRAME_ABI_AARCH64_ENDIAN_BIG: + return is_little; + default: + break; + } + + return 0; +} + +/* Flip the endianness of the SFrame header. */ + +static void +flip_header (sframe_header *sfheader) +{ + swap_thing (sfheader->sfh_preamble.sfp_magic); + swap_thing (sfheader->sfh_preamble.sfp_version); + swap_thing (sfheader->sfh_preamble.sfp_flags); + swap_thing (sfheader->sfh_cfa_fixed_fp_offset); + swap_thing (sfheader->sfh_cfa_fixed_ra_offset); + swap_thing (sfheader->sfh_num_fdes); + swap_thing (sfheader->sfh_num_fres); + swap_thing (sfheader->sfh_fre_len); + swap_thing (sfheader->sfh_fdeoff); + swap_thing (sfheader->sfh_freoff); +} + +static void +flip_fde (sframe_func_desc_entry *fdep) +{ + swap_thing (fdep->sfde_func_start_address); + swap_thing (fdep->sfde_func_size); + swap_thing (fdep->sfde_func_start_fre_off); + swap_thing (fdep->sfde_func_num_fres); +} + +/* Check if SFrame header has valid data. */ + +static int +sframe_header_sanity_check_p (sframe_header *hp) +{ + unsigned char all_flags = SFRAME_F_FDE_SORTED | SFRAME_F_FRAME_POINTER; + /* Check preamble is valid. */ + if ((hp->sfh_preamble.sfp_magic != SFRAME_MAGIC) + || (hp->sfh_preamble.sfp_version != SFRAME_VERSION) + || ((hp->sfh_preamble.sfp_flags | all_flags) + != all_flags)) + return 0; + + /* Check offsets are valid. */ + if (hp->sfh_fdeoff > hp->sfh_freoff) + return 0; + + return 1; +} + +/* Flip the start address pointed to by FP. */ + +static void +flip_fre_start_address (char *fp, unsigned int fre_type) +{ + void *start = (void*)fp; + if (fre_type == SFRAME_FRE_TYPE_ADDR2) + { + unsigned short *start_addr = (unsigned short *)(start); + swap_thing (*start_addr); + } + else if (fre_type == SFRAME_FRE_TYPE_ADDR4) + { + uint32_t *start_addr = (uint32_t *)(start); + swap_thing (*start_addr); + } +} + +static void +flip_fre_stack_offsets (char *fp, unsigned char offset_size, + unsigned char offset_cnt) +{ + int j; + void *offsets = (void *)fp; + + if (offset_size == SFRAME_FRE_OFFSET_2B) + { + unsigned short *ust = (unsigned short *)offsets; + for (j = offset_cnt; j > 0; ust++, j--) + swap_thing (*ust); + } + else if (offset_size == SFRAME_FRE_OFFSET_4B) + { + uint32_t *uit = (uint32_t *)offsets; + for (j = offset_cnt; j > 0; uit++, j--) + swap_thing (*uit); + } +} + +/* Get the FRE start address size, given the FRE_TYPE. */ + +static size_t +sframe_fre_start_addr_size (unsigned int fre_type) +{ + size_t addr_size = 0; + switch (fre_type) + { + case SFRAME_FRE_TYPE_ADDR1: + addr_size = 1; + break; + case SFRAME_FRE_TYPE_ADDR2: + addr_size = 2; + break; + case SFRAME_FRE_TYPE_ADDR4: + addr_size = 4; + break; + default: + /* No other value is expected. */ + sframe_assert (0); + break; + } + return addr_size; +} + +/* Check if the FREP has valid data. */ + +static int +sframe_fre_sanity_check_p (sframe_frame_row_entry *frep) +{ + unsigned int offset_size, offset_cnt; + unsigned int fre_info; + + if (frep == NULL) + return 0; + + fre_info = frep->fre_info; + offset_size = sframe_fre_get_offset_size (fre_info); + + if (offset_size != SFRAME_FRE_OFFSET_1B + && offset_size != SFRAME_FRE_OFFSET_2B + && offset_size != SFRAME_FRE_OFFSET_4B) + return 0; + + offset_cnt = sframe_fre_get_offset_count (fre_info); + if (offset_cnt > 3) + return 0; + + return 1; +} + +/* Get FRE_INFO's offset size in bytes. */ + +static size_t +sframe_fre_offset_bytes_size (unsigned char fre_info) +{ + unsigned int offset_size, offset_cnt; + + offset_size = sframe_fre_get_offset_size (fre_info); + + debug_printf ("offset_size = %u\n", offset_size); + + offset_cnt = sframe_fre_get_offset_count (fre_info); + + if (offset_size == SFRAME_FRE_OFFSET_2B + || offset_size == SFRAME_FRE_OFFSET_4B) /* 2 or 4 bytes. */ + return (offset_cnt * (offset_size * 2)); + + return (offset_cnt); +} + +/* Get total size in bytes to represent FREP in the binary format. This + includes the starting address, FRE info, and all the offsets. */ + +static size_t +sframe_fre_entry_size (sframe_frame_row_entry *frep, unsigned int fre_type) +{ + if (frep == NULL) + return 0; + + unsigned char fre_info = frep->fre_info; + size_t addr_size = sframe_fre_start_addr_size (fre_type); + + return (addr_size + sizeof (frep->fre_info) + + sframe_fre_offset_bytes_size (fre_info)); +} + +static int +flip_fre (char *fp, unsigned int fre_type, size_t *fre_size) +{ + unsigned char fre_info; + unsigned int offset_size, offset_cnt; + size_t addr_size, fre_info_size = 0; + int err = 0; + + if (fre_size == NULL) + return sframe_set_errno (&err, EINVAL); + + flip_fre_start_address (fp, fre_type); + + /* Advance the buffer pointer to where the FRE info is. */ + addr_size = sframe_fre_start_addr_size (fre_type); + fp += addr_size; + + /* FRE info is unsigned char. No need to flip. */ + fre_info = *(unsigned char*)fp; + offset_size = sframe_fre_get_offset_size (fre_info); + offset_cnt = sframe_fre_get_offset_count (fre_info); + + /* Advance the buffer pointer to where the stack offsets are. */ + fre_info_size = sizeof (unsigned char); + fp += fre_info_size; + flip_fre_stack_offsets (fp, offset_size, offset_cnt); + + *fre_size + = addr_size + fre_info_size + sframe_fre_offset_bytes_size (fre_info); + + return 0; +} + +/* Endian flip the contents of FRAME_BUF of size BUF_SIZE. + The SFrame header in the FRAME_BUF must be endian flipped prior to + calling flip_sframe. If an error code is returned, the buffer should + not be used. */ + +static int +flip_sframe (char *frame_buf, size_t buf_size) +{ + unsigned int i, j, prev_frep_index; + sframe_header *ihp; + char *fdes; + char *fp = NULL; + sframe_func_desc_entry *fdep; + unsigned int num_fdes, num_fres; + unsigned int fre_type; + size_t esz; + int err = 0; + + /* Header must have been flipped by now. */ + ihp = (sframe_header *)frame_buf; + + if (!sframe_header_sanity_check_p (ihp)) + return sframe_set_errno (&err, ESFRAME_BUF_INVAL); + + /* The contents of the SFrame header are safe to read. Get the number of + FDEs and the first FDE in the buffer. */ + num_fdes = ihp->sfh_num_fdes; + fdes = frame_buf + sizeof (sframe_header) + ihp->sfh_fdeoff; + fdep = (sframe_func_desc_entry *)fdes; + + j = 0; + prev_frep_index = 0; + for (i = 0; i < num_fdes; fdep++, i++) + { + flip_fde (fdep); + + num_fres = fdep->sfde_func_num_fres; + fre_type = sframe_get_fre_type (fdep); + + fp = frame_buf + sizeof (sframe_header) + ihp->sfh_freoff; + fp += fdep->sfde_func_start_fre_off; + for (; j < prev_frep_index + num_fres; j++) + { + if (flip_fre (fp, fre_type, &esz)) + goto bad; + + if (esz == 0) + goto bad; + fp += esz; + } + prev_frep_index = j; + } + /* All FREs must have been endian flipped by now. */ + if (j != ihp->sfh_num_fres) + goto bad; + /* All contents must have been processed by now. */ + if ((frame_buf + buf_size) != (void*)fp) + goto bad; + + /* Success. */ + return 0; +bad: + return SFRAME_ERR; +} + +/* The SFrame Decoder. */ + +/* Compare function for qsort'ing the FDE table. */ + +static int +fde_func (const void *p1, const void *p2) +{ + const sframe_func_desc_entry *aa = p1; + const sframe_func_desc_entry *bb = p2; + + if (aa->sfde_func_start_address < bb->sfde_func_start_address) + return -1; + else if (aa->sfde_func_start_address > bb->sfde_func_start_address) + return 1; + return 0; +} + +/* Get IDX'th offset from FRE. Set errp as applicable. */ + +static int32_t +sframe_get_fre_offset (sframe_frame_row_entry *fre, int idx, int *errp) +{ + int offset_cnt, offset_size; + + if (fre == NULL || !sframe_fre_sanity_check_p (fre)) + return sframe_set_errno (errp, ESFRAME_FRE_INVAL); + + offset_cnt = sframe_fre_get_offset_count (fre->fre_info); + offset_size = sframe_fre_get_offset_size (fre->fre_info); + + if (offset_cnt < idx + 1) + return sframe_set_errno (errp, ESFRAME_FREOFFSET_NOPRESENT); + + if (errp) + *errp = 0; /* Offset Valid. */ + + if (offset_size == SFRAME_FRE_OFFSET_1B) + { + int8_t *sp = (int8_t *)fre->fre_offsets; + return sp[idx]; + } + else if (offset_size == SFRAME_FRE_OFFSET_2B) + { + int16_t *sp = (int16_t *)fre->fre_offsets; + return sp[idx]; + } + else + { + int32_t *ip = (int32_t *)fre->fre_offsets; + return ip[idx]; + } +} + +/* Free the decoder context. */ + +void +sframe_decoder_free (sframe_decoder_ctx **decoder) +{ + if (decoder != NULL) + { + sframe_decoder_ctx *dctx = *decoder; + if (dctx == NULL) + return; + + if (dctx->sfd_funcdesc != NULL) + { + free (dctx->sfd_funcdesc); + dctx->sfd_funcdesc = NULL; + } + if (dctx->sfd_fres != NULL) + { + free (dctx->sfd_fres); + dctx->sfd_fres = NULL; + } + + free (*decoder); + *decoder = NULL; + } +} + +/* Create a FDE function info byte given an FRE_TYPE and an FDE_TYPE. */ +/* FIXME API for linker. Revisit if its better placed somewhere else? */ + +unsigned char +sframe_fde_func_info (unsigned int fre_type, + unsigned int fde_type) +{ + unsigned char func_info; + sframe_assert (fre_type == SFRAME_FRE_TYPE_ADDR1 + || fre_type == SFRAME_FRE_TYPE_ADDR2 + || fre_type == SFRAME_FRE_TYPE_ADDR4); + sframe_assert (fde_type == SFRAME_FDE_TYPE_PCINC + || fde_type == SFRAME_FDE_TYPE_PCMASK); + func_info = SFRAME_V1_FUNC_INFO (fde_type, fre_type); + return func_info; +} + +/* Get the FRE type given the function size. */ +/* FIXME API for linker. Revisit if its better placed somewhere else? */ + +unsigned int +sframe_calc_fre_type (unsigned int func_size) +{ + unsigned int fre_type = 0; + if (func_size <= 0xff) + fre_type = SFRAME_FRE_TYPE_ADDR1; + else if (func_size <= 0xffff) + fre_type = SFRAME_FRE_TYPE_ADDR2; + else if (func_size <= 0xffffffff) + fre_type = SFRAME_FRE_TYPE_ADDR4; + return fre_type; +} + +/* Get the base reg id from the FRE info. Set errp if failure. */ + +unsigned int +sframe_fre_get_base_reg_id (sframe_frame_row_entry *fre, int *errp) +{ + if (fre == NULL) + return sframe_set_errno (errp, ESFRAME_FRE_INVAL); + + unsigned int fre_info = fre->fre_info; + return SFRAME_V1_FRE_CFA_BASE_REG_ID (fre_info); +} + +/* Get the CFA offset from the FRE. If the offset is invalid, sets errp. */ + +int32_t +sframe_fre_get_cfa_offset (sframe_frame_row_entry *fre, int *errp) +{ + return sframe_get_fre_offset (fre, SFRAME_FRE_CFA_OFFSET_IDX, errp); +} + +/* Get the FP offset from the FRE. If the offset is invalid, sets errp. */ + +int32_t +sframe_fre_get_fp_offset (sframe_frame_row_entry *fre, int *errp) +{ + return sframe_get_fre_offset (fre, SFRAME_FRE_FP_OFFSET_IDX, errp); +} + +/* Get the RA offset from the FRE. If the offset is invalid, sets errp. */ + +int32_t +sframe_fre_get_ra_offset (sframe_frame_row_entry *fre, int *errp) +{ + return sframe_get_fre_offset (fre, SFRAME_FRE_RA_OFFSET_IDX, errp); +} + +static int +sframe_frame_row_entry_copy (sframe_frame_row_entry *dst, sframe_frame_row_entry *src) +{ + int err = 0; + + if (dst == NULL || src == NULL) + return sframe_set_errno (&err, EINVAL); + + memcpy (dst, src, sizeof (sframe_frame_row_entry)); + return 0; +} + +static int +sframe_decode_fre_start_address (const char *fre_buf, + uint32_t *fre_start_addr, + unsigned int fre_type) +{ + uint32_t saddr = 0; + int err = 0; + + if (fre_type == SFRAME_FRE_TYPE_ADDR1) + { + uint8_t *uc = (uint8_t *)fre_buf; + saddr = (uint32_t)*uc; + } + else if (fre_type == SFRAME_FRE_TYPE_ADDR2) + { + uint16_t *ust = (uint16_t *)fre_buf; + saddr = (uint32_t)*ust; + } + else if (fre_type == SFRAME_FRE_TYPE_ADDR4) + { + uint32_t *uit = (uint32_t *)fre_buf; + saddr = (uint32_t)*uit; + } + else + return sframe_set_errno (&err, EINVAL); + + *fre_start_addr = saddr; + return 0; +} + +/* Decode a frame row entry FRE which starts at location FRE_BUF. The function + updates ESZ to the size of the FRE as stored in the binary format. + + This function works closely with the SFrame binary format. + + Returns SFRAME_ERR if failure. */ + +static int +sframe_decode_fre (const char *fre_buf, sframe_frame_row_entry *fre, + unsigned int fre_type, + size_t *esz) +{ + int err = 0; + void *stack_offsets = NULL; + size_t stack_offsets_sz; + size_t addr_size; + size_t fre_size; + + if (fre_buf == NULL || fre == NULL || esz == NULL) + return sframe_set_errno (&err, EINVAL); + + /* Copy over the FRE start address. */ + sframe_decode_fre_start_address (fre_buf, &fre->fre_start_addr, fre_type); + + addr_size = sframe_fre_start_addr_size (fre_type); + fre->fre_info = *(unsigned char *)(fre_buf + addr_size); + /* Sanity check as the API works closely with the binary format. */ + sframe_assert (sizeof (fre->fre_info) == sizeof (unsigned char)); + + /* Cleanup the space for fre_offsets first, then copy over the valid + bytes. */ + memset (fre->fre_offsets, 0, MAX_OFFSET_BYTES); + /* Get offsets size. */ + stack_offsets_sz = sframe_fre_offset_bytes_size (fre->fre_info); + stack_offsets = (unsigned char *)fre_buf + addr_size + sizeof (fre->fre_info); + memcpy (fre->fre_offsets, stack_offsets, stack_offsets_sz); + + /* The FRE has been decoded. Use it to perform one last sanity check. */ + fre_size = sframe_fre_entry_size (fre, fre_type); + sframe_assert (fre_size == (addr_size + sizeof (fre->fre_info) + + stack_offsets_sz)); + *esz = fre_size; + + return 0; +} + +/* Decode the specified SFrame buffer CF_BUF of size CF_SIZE and return the + new SFrame decoder context. + + Sets ERRP for the caller if any error. Frees up the allocated memory in + case of error. */ + +sframe_decoder_ctx * +sframe_decode (const char *sf_buf, size_t sf_size, int *errp) +{ + const sframe_preamble *sfp; + size_t hdrsz = sizeof (sframe_header); + sframe_header *sfheaderp; + sframe_decoder_ctx *dctx; + char *frame_buf; + char *tempbuf = NULL; + + int fidx_size; + uint32_t fre_bytes; + int foreign_endian = 0; + + sframe_init_debug (); + + if ((sf_buf == NULL) || (!sf_size)) + return sframe_ret_set_errno (errp, ESFRAME_INVAL); + else if (sf_size < hdrsz) + return sframe_ret_set_errno (errp, ESFRAME_BUF_INVAL); + + sfp = (const sframe_preamble *) sf_buf; + + debug_printf ("sframe_decode: magic=0x%x version=%u flags=%u\n", + sfp->sfp_magic, sfp->sfp_version, sfp->sfp_flags); + + /* Check for foreign endianness. */ + if (sfp->sfp_magic != SFRAME_MAGIC) + { + if (sfp->sfp_magic == bswap_16 (SFRAME_MAGIC)) + foreign_endian = 1; + else + return sframe_ret_set_errno (errp, ESFRAME_BUF_INVAL); + } + + /* Initialize a new decoder context. */ + if ((dctx = malloc (sizeof (sframe_decoder_ctx))) == NULL) + return sframe_ret_set_errno (errp, ESFRAME_NOMEM); + memset (dctx, 0, sizeof (sframe_decoder_ctx)); + + if (foreign_endian) + { + /* Allocate a new buffer and initialize it. */ + tempbuf = (char *) malloc (sf_size * sizeof (char)); + if (tempbuf == NULL) + return sframe_ret_set_errno (errp, ESFRAME_NOMEM); + memcpy (tempbuf, sf_buf, sf_size); + + /* Flip the header. */ + sframe_header *ihp = (sframe_header *) tempbuf; + flip_header (ihp); + /* Flip the rest of the SFrame section data buffer. */ + if (flip_sframe (tempbuf, sf_size)) + { + free (tempbuf); + return sframe_ret_set_errno (errp, ESFRAME_BUF_INVAL); + } + frame_buf = tempbuf; + } + else + frame_buf = (char *)sf_buf; + + /* Handle the SFrame header. */ + dctx->sfd_header = *(sframe_header *) frame_buf; + /* Validate the contents of SFrame header. */ + sfheaderp = &dctx->sfd_header; + if (!sframe_header_sanity_check_p (sfheaderp)) + { + sframe_ret_set_errno (errp, ESFRAME_NOMEM); + goto decode_fail_free; + } + frame_buf += hdrsz; + + /* Handle the SFrame Function Descriptor Entry section. */ + fidx_size + = sfheaderp->sfh_num_fdes * sizeof (sframe_func_desc_entry); + dctx->sfd_funcdesc = malloc (fidx_size); + if (dctx->sfd_funcdesc == NULL) + { + sframe_ret_set_errno (errp, ESFRAME_NOMEM); + goto decode_fail_free; + } + memcpy (dctx->sfd_funcdesc, frame_buf, fidx_size); + + debug_printf ("%u total fidx size\n", fidx_size); + + frame_buf += (fidx_size); + + /* Handle the SFrame Frame Row Entry section. */ + dctx->sfd_fres = malloc (sfheaderp->sfh_fre_len); + if (dctx->sfd_fres == NULL) + { + sframe_ret_set_errno (errp, ESFRAME_NOMEM); + goto decode_fail_free; + } + memcpy (dctx->sfd_fres, frame_buf, sfheaderp->sfh_fre_len); + + fre_bytes = sfheaderp->sfh_fre_len; + dctx->sfd_fre_nbytes = fre_bytes; + + debug_printf ("%u total fre bytes\n", fre_bytes); + + return dctx; + +decode_fail_free: + if (foreign_endian && tempbuf != NULL) + free (tempbuf); + sframe_decoder_free (&dctx); + dctx = NULL; + return dctx; +} + +/* Get DECODER's SFrame header. */ + +static sframe_header * +sframe_decoder_get_header (sframe_decoder_ctx *decoder) +{ + sframe_header *hp = NULL; + if (decoder != NULL) + hp = &decoder->sfd_header; + return hp; +} + +/* Get the SFrame's abi/arch info. */ + +unsigned char +sframe_decoder_get_abi_arch (sframe_decoder_ctx *ctx) +{ + sframe_header *sframe_header; + sframe_header = sframe_decoder_get_header (ctx); + return sframe_header->sfh_abi_arch; +} + +/* Find the function descriptor entry starting which contains the specified + address ADDR. */ + +sframe_func_desc_entry * +sframe_get_funcdesc_with_addr (sframe_decoder_ctx *ctx, + int32_t addr, int *errp) +{ + sframe_header *dhp; + sframe_func_desc_entry *fdp; + int low, high, cnt; + + if (ctx == NULL) + return sframe_ret_set_errno (errp, EINVAL); + + dhp = sframe_decoder_get_header (ctx); + + if (dhp == NULL || dhp->sfh_num_fdes == 0 || ctx->sfd_funcdesc == NULL) + return sframe_ret_set_errno (errp, ESFRAME_DCTX_INVAL); + /* If the FDE sub-section is not sorted on PCs, skip the lookup because + binary search cannot be used. */ + if ((dhp->sfh_preamble.sfp_flags & SFRAME_F_FDE_SORTED) == 0) + return sframe_ret_set_errno (errp, ESFRAME_FDE_NOTSORTED); + + /* Do the binary search. */ + fdp = (sframe_func_desc_entry *) ctx->sfd_funcdesc; + low = 0; + high = dhp->sfh_num_fdes; + cnt = high; + while (low <= high) + { + int mid = low + (high - low) / 2; + + if (fdp[mid].sfde_func_start_address == addr) + return fdp + mid; + + if (fdp[mid].sfde_func_start_address < addr) + { + if (mid == (cnt - 1)) /* Check if it's the last one. */ + return fdp + (cnt - 1) ; + else if (fdp[mid+1].sfde_func_start_address > addr) + return fdp + mid; + low = mid + 1; + } + else + high = mid - 1; + } + + return sframe_ret_set_errno (errp, ESFRAME_FDE_NOTFOUND); +} + +/* Find the SFrame Row Entry which contains the PC. Returns + SFRAME_ERR if failure. */ + +int +sframe_find_fre (sframe_decoder_ctx *ctx, int32_t pc, + sframe_frame_row_entry *frep) +{ + sframe_func_desc_entry *fdep; + uint32_t start_address, i; + sframe_frame_row_entry cur_fre, next_fre; + unsigned char *sp; + unsigned int fre_type, fde_type; + size_t esz; + int err = 0; + size_t size = 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 + ignored. In this case, we need to return the FRE where + (PC >= FRE_START_ADDR) */ + uint64_t bitmask = 0xffffffff; + + if ((ctx == NULL) || (frep == NULL)) + return sframe_set_errno (&err, EINVAL); + + /* Find the FDE which contains the PC, then scan its fre entries. */ + fdep = sframe_get_funcdesc_with_addr (ctx, pc, &err); + if (fdep == NULL || ctx->sfd_fres == NULL) + return sframe_set_errno (&err, ESFRAME_DCTX_INVAL); + + fre_type = sframe_get_fre_type (fdep); + fde_type = sframe_get_fde_type (fdep); + + /* For FDEs for repetitive pattern of insns, we need to return the FRE + such that (PC & FRE_START_ADDR_AS_MASK >= FRE_START_ADDR_AS_MASK). + so, update the bitmask to the start address. */ + /* FIXME - the bitmask should be picked per ABI or encoded in the format + somehow. For AMD64, the pltN entry stub is 16 bytes. */ + if (fde_type == SFRAME_FDE_TYPE_PCMASK) + bitmask = 0xff; + + sp = (unsigned char *) ctx->sfd_fres + fdep->sfde_func_start_fre_off; + for (i = 0; i < fdep->sfde_func_num_fres; i++) + { + err = sframe_decode_fre ((const char *)sp, &next_fre, + fre_type, &esz); + start_address = next_fre.fre_start_addr; + + if (((fdep->sfde_func_start_address + + (int32_t) start_address) & 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 ((const char*)sp, &next_fre, + fre_type, &esz); + + /* Sanity check the next FRE. */ + if (!sframe_fre_sanity_check_p (&next_fre)) + return sframe_set_errno (&err, ESFRAME_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; + } + } + else + return sframe_set_errno (&err, ESFRAME_FRE_INVAL); + } + return sframe_set_errno (&err, ESFRAME_FDE_INVAL); +} + +/* Return the number of function descriptor entries in the SFrame decoder + DCTX. */ + +unsigned int +sframe_decoder_get_num_fidx (sframe_decoder_ctx *ctx) +{ + unsigned int num_fdes = 0; + sframe_header *dhp = NULL; + dhp = sframe_decoder_get_header (ctx); + if (dhp) + num_fdes = dhp->sfh_num_fdes; + return num_fdes; +} + +/* Get the data (NUM_FRES, FUNC_START_ADDRESS) from the function + descriptor entry at index I'th in the decoder CTX. If failed, + return error code. */ +/* FIXME - consolidate the args and return a + sframe_func_desc_index_elem rather? */ + +int +sframe_decoder_get_funcdesc (sframe_decoder_ctx *ctx, + unsigned int i, + uint32_t *num_fres, + uint32_t *func_size, + int32_t *func_start_address, + unsigned char *func_info) +{ + sframe_func_desc_entry *fdp; + unsigned int num_fdes; + int err = 0; + + if (ctx == NULL || func_start_address == NULL || num_fres == NULL + || func_size == NULL) + return sframe_set_errno (&err, EINVAL); + + num_fdes = sframe_decoder_get_num_fidx (ctx); + if (num_fdes == 0 + || i >= num_fdes + || ctx->sfd_funcdesc == NULL) + return sframe_set_errno (&err, ESFRAME_DCTX_INVAL); + + fdp = (sframe_func_desc_entry *) ctx->sfd_funcdesc + i; + *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; + + return 0; +} + +/* Get the function descriptor entry at index FUNC_IDX in the decoder + context CTX. */ + +static sframe_func_desc_entry * +sframe_decoder_get_funcdesc_at_index (sframe_decoder_ctx *ctx, + uint32_t func_idx) +{ + /* Invalid argument. No FDE will be found. */ + if (func_idx >= sframe_decoder_get_num_fidx (ctx)) + return NULL; + + sframe_func_desc_entry *fdep; + fdep = (sframe_func_desc_entry *) ctx->sfd_funcdesc; + return fdep + func_idx; +} + +/* 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. */ + +int +sframe_decoder_get_fre (sframe_decoder_ctx *ctx, + unsigned int func_idx, + unsigned int fre_idx, + sframe_frame_row_entry *fre) +{ + sframe_func_desc_entry *fdep; + sframe_frame_row_entry ifre; + unsigned char *sp; + uint32_t i; + unsigned int fre_type; + size_t esz = 0; + int err = 0; + + if (ctx == NULL || fre == NULL) + return sframe_set_errno (&err, EINVAL); + + /* Get function descriptor entry at index func_idx. */ + fdep = sframe_decoder_get_funcdesc_at_index (ctx, func_idx); + + if (fdep == NULL) + return sframe_set_errno (&err, ESFRAME_FDE_NOTFOUND); + + fre_type = sframe_get_fre_type (fdep); + /* Now scan the FRE entries. */ + sp = (unsigned char *) ctx->sfd_fres + fdep->sfde_func_start_fre_off; + for (i = 0; i < fdep->sfde_func_num_fres; i++) + { + /* Decode the FRE at the current position. Return it if valid. */ + err = sframe_decode_fre ((const char *)sp, &ifre, fre_type, &esz); + if (i == fre_idx) + { + if (!sframe_fre_sanity_check_p (&ifre)) + return sframe_set_errno (&err, ESFRAME_FRE_INVAL); + + sframe_frame_row_entry_copy (fre, &ifre); + + if (fdep->sfde_func_size) + sframe_assert (fre->fre_start_addr < fdep->sfde_func_size); + else + /* A SFrame FDE with func size equal to zero is possible. */ + sframe_assert (fre->fre_start_addr == fdep->sfde_func_size); + + return 0; + } + /* Next FRE. */ + sp += esz; + } + + return sframe_set_errno (&err, ESFRAME_FDE_NOTFOUND); +} + + +/* SFrame Encoder. */ + +/* Get a reference to the ENCODER's SFrame header. */ + +static sframe_header * +sframe_encoder_get_header (sframe_encoder_ctx *encoder) +{ + sframe_header *hp = NULL; + if (encoder) + hp = &encoder->sfe_header; + return hp; +} + +static sframe_func_desc_entry * +sframe_encoder_get_funcdesc_at_index (sframe_encoder_ctx *encoder, + uint32_t func_idx) +{ + sframe_func_desc_entry *fde = NULL; + if (func_idx < sframe_encoder_get_num_fidx (encoder)) + { + sf_funidx_tbl *func_tbl = (sf_funidx_tbl *) encoder->sfe_funcdesc; + fde = func_tbl->entry + func_idx; + } + return fde; +} + +/* Create an encoder context with the given SFrame format version VER, FLAGS + and ABI information. Sets errp if failure. */ + +sframe_encoder_ctx * +sframe_encode (unsigned char ver, unsigned char flags, int abi_arch, + int *errp) +{ + sframe_header *hp; + sframe_encoder_ctx *fp; + + if (ver != SFRAME_VERSION) + return sframe_ret_set_errno (errp, ESFRAME_VERSION_INVAL); + + if ((fp = malloc (sizeof (sframe_encoder_ctx))) == NULL) + return sframe_ret_set_errno (errp, ESFRAME_NOMEM); + + memset (fp, 0, sizeof (sframe_encoder_ctx)); + + /* Get the SFrame header and update it. */ + hp = sframe_encoder_get_header (fp); + hp->sfh_preamble.sfp_version = ver; + hp->sfh_preamble.sfp_magic = SFRAME_MAGIC; + hp->sfh_preamble.sfp_flags = flags; + hp->sfh_abi_arch = abi_arch; + + return fp; +} + +/* Free the encoder context. */ + +void +sframe_free_encoder (sframe_encoder_ctx *encoder) +{ + if (encoder != NULL) + { + free (encoder->sfe_funcdesc); + free (encoder->sfe_fres); + free (encoder->sfe_data); + free (encoder); + } +} + +/* Get the abi/arch info from the SFrame encoder context ENCODER. */ + +unsigned char +sframe_encoder_get_abi_arch (sframe_encoder_ctx *encoder) +{ + unsigned char abi_arch = 0; + sframe_header *ehp; + ehp = sframe_encoder_get_header (encoder); + if (ehp) + abi_arch = ehp->sfh_abi_arch; + return abi_arch; +} + +/* Return the number of function descriptor entries in the SFrame encoder + ENCODER. */ + +unsigned int +sframe_encoder_get_num_fidx (sframe_encoder_ctx *encoder) +{ + unsigned int num_fdes = 0; + sframe_header *ehp = NULL; + ehp = sframe_encoder_get_header (encoder); + if (ehp) + num_fdes = ehp->sfh_num_fdes; + return num_fdes; +} + +/* Add an FRE to function at FUNC_IDX'th function descriptor entry in + the encoder context. */ + +int +sframe_encoder_add_fre (sframe_encoder_ctx *encoder, + unsigned int func_idx, + sframe_frame_row_entry *frep) +{ + sframe_header *ehp; + sframe_func_desc_entry *fdep; + sframe_frame_row_entry *ectx_frep; + size_t offsets_sz, esz; + unsigned int fre_type; + size_t fre_tbl_sz; + int err = 0; + + if (encoder == NULL || frep == NULL) + return sframe_set_errno (&err, EINVAL); + if (!sframe_fre_sanity_check_p (frep)) + return sframe_set_errno (&err, ESFRAME_FRE_INVAL); + + /* Use func_idx to gather the function descriptor entry. */ + fdep = sframe_encoder_get_funcdesc_at_index (encoder, func_idx); + + if (fdep == NULL) + return sframe_set_errno (&err, ESFRAME_FDE_NOTFOUND); + + fre_type = sframe_get_fre_type (fdep); + sf_fre_tbl *fre_tbl = (sf_fre_tbl *) encoder->sfe_fres; + + if (fre_tbl == NULL) + { + fre_tbl_sz = (sizeof (sf_fre_tbl) + + (number_of_entries * sizeof (sframe_frame_row_entry))); + fre_tbl = malloc (fre_tbl_sz); + + if (fre_tbl == NULL) + { + sframe_set_errno (&err, ESFRAME_NOMEM); + goto bad; /* OOM. */ + } + memset (fre_tbl, 0, fre_tbl_sz); + fre_tbl->alloced = number_of_entries; + } + else if (fre_tbl->count == fre_tbl->alloced) + { + fre_tbl_sz = (sizeof (sf_fre_tbl) + + ((fre_tbl->alloced + number_of_entries) + * sizeof (sframe_frame_row_entry))); + fre_tbl = realloc (fre_tbl, fre_tbl_sz); + if (fre_tbl == NULL) + { + sframe_set_errno (&err, ESFRAME_NOMEM); + goto bad; /* OOM. */ + } + + memset (&fre_tbl->entry[fre_tbl->alloced], 0, + number_of_entries * sizeof (sframe_frame_row_entry)); + fre_tbl->alloced += number_of_entries; + } + + ectx_frep = &fre_tbl->entry[fre_tbl->count]; + ectx_frep->fre_start_addr + = frep->fre_start_addr; + ectx_frep->fre_info = frep->fre_info; + + if (fdep->sfde_func_size) + sframe_assert (frep->fre_start_addr < fdep->sfde_func_size); + else + /* A SFrame FDE with func size equal to zero is possible. */ + sframe_assert (frep->fre_start_addr == fdep->sfde_func_size); + + /* frep has already been sanity check'd. Get offsets size. */ + offsets_sz = sframe_fre_offset_bytes_size (frep->fre_info); + memcpy (&ectx_frep->fre_offsets, &frep->fre_offsets, offsets_sz); + + esz = sframe_fre_entry_size (frep, fre_type); + fre_tbl->count++; + + encoder->sfe_fres = (void *) fre_tbl; + encoder->sfe_fre_nbytes += esz; + + ehp = sframe_encoder_get_header (encoder); + ehp->sfh_num_fres = fre_tbl->count; + + /* Update the value of the number of FREs for the function. */ + fdep->sfde_func_num_fres++; + + return 0; + +bad: + if (fre_tbl != NULL) + free (fre_tbl); + encoder->sfe_fres = NULL; + encoder->sfe_fre_nbytes = 0; + return -1; +} + +/* Add a new function descriptor entry with START_ADDR, FUNC_SIZE and NUM_FRES + to the encoder. */ + +int +sframe_encoder_add_funcdesc (sframe_encoder_ctx *encoder, + int32_t start_addr, + uint32_t func_size, + unsigned char func_info, + uint32_t num_fres __attribute__ ((unused))) +{ + sframe_header *ehp; + sf_funidx_tbl *fd_info; + size_t fd_tbl_sz; + int err = 0; + + /* FIXME book-keep num_fres for error checking. */ + if (encoder == NULL) + return sframe_set_errno (&err, EINVAL); + + fd_info = (sf_funidx_tbl *) encoder->sfe_funcdesc; + ehp = sframe_encoder_get_header (encoder); + + if (fd_info == NULL) + { + fd_tbl_sz = (sizeof (sf_funidx_tbl) + + (number_of_entries * sizeof (sframe_func_desc_entry))); + fd_info = malloc (fd_tbl_sz); + if (fd_info == NULL) + { + sframe_set_errno (&err, ESFRAME_NOMEM); + goto bad; /* OOM. */ + } + memset (fd_info, 0, fd_tbl_sz); + fd_info->alloced = number_of_entries; + } + else if (fd_info->count == fd_info->alloced) + { + fd_tbl_sz = (sizeof (sf_funidx_tbl) + + ((fd_info->alloced + number_of_entries) + * sizeof (sframe_func_desc_entry))); + fd_info = realloc (fd_info, fd_tbl_sz); + if (fd_info == NULL) + { + sframe_set_errno (&err, ESFRAME_NOMEM); + goto bad; /* OOM. */ + } + + memset (&fd_info->entry[fd_info->alloced], 0, + number_of_entries * sizeof (sframe_func_desc_entry)); + fd_info->alloced += number_of_entries; + } + + fd_info->entry[fd_info->count].sfde_func_start_address = start_addr; + /* Num FREs is updated as FREs are added for the function later via + sframe_encoder_add_fre. */ + fd_info->entry[fd_info->count].sfde_func_size = func_size; + fd_info->entry[fd_info->count].sfde_func_start_fre_off + = encoder->sfe_fre_nbytes; +#if 0 + // Linker optimization test code cleanup later ibhagat TODO FIXME + unsigned int fre_type = sframe_calc_fre_type (func_size); + + fd_info->entry[fd_info->count].sfde_func_info + = sframe_fde_func_info (fre_type); +#endif + fd_info->entry[fd_info->count].sfde_func_info = func_info; + fd_info->count++; + encoder->sfe_funcdesc = (void *) fd_info; + ehp->sfh_num_fdes++; + return 0; + +bad: + if (fd_info != NULL) + free (fd_info); + encoder->sfe_funcdesc = NULL; + ehp->sfh_num_fdes = 0; + return -1; +} + +static int +sframe_sort_funcdesc (sframe_encoder_ctx *encoder) +{ + sframe_header *ehp; + + ehp = sframe_encoder_get_header (encoder); + /* Sort and write out the FDE table. */ + sf_funidx_tbl *fd_info = (sf_funidx_tbl *) encoder->sfe_funcdesc; + if (fd_info) + { + qsort (fd_info->entry, fd_info->count, + sizeof (sframe_func_desc_entry), fde_func); + /* Update preamble's flags. */ + ehp->sfh_preamble.sfp_flags |= SFRAME_F_FDE_SORTED; + } + return 0; +} + +/* Write a frame row entry pointed to by FREP into the buffer CONTENTS. The + size in bytes written out are updated in ESZ. + + This function works closely with the SFrame binary format. + + Returns SFRAME_ERR if failure. */ + +static int +sframe_encoder_write_fre (char *contents, sframe_frame_row_entry *frep, + unsigned int fre_type, size_t *esz) +{ + size_t fre_size; + size_t fre_start_addr_sz; + size_t fre_stack_offsets_sz; + int err = 0; + + if (!sframe_fre_sanity_check_p (frep)) + return sframe_set_errno (&err, ESFRAME_FRE_INVAL); + + fre_start_addr_sz = sframe_fre_start_addr_size (fre_type); + fre_stack_offsets_sz = sframe_fre_offset_bytes_size (frep->fre_info); + + /* The FRE start address must be encodable in the available number of + bytes. */ + uint64_t bitmask = SFRAME_BITMASK_OF_SIZE (fre_start_addr_sz); + sframe_assert ((uint64_t)frep->fre_start_addr <= bitmask); + + memcpy (contents, + &frep->fre_start_addr, + fre_start_addr_sz); + contents += fre_start_addr_sz; + + memcpy (contents, + &frep->fre_info, + sizeof (frep->fre_info)); + contents += sizeof (frep->fre_info); + + memcpy (contents, + frep->fre_offsets, + fre_stack_offsets_sz); + contents+= fre_stack_offsets_sz; + + fre_size = sframe_fre_entry_size (frep, fre_type); + /* Sanity checking. */ + sframe_assert ((fre_start_addr_sz + + sizeof (frep->fre_info) + + fre_stack_offsets_sz) == fre_size); + + *esz = fre_size; + + return 0; +} + +/* Serialize the core contents of the SFrame section and write out to the + output buffer held in the ENCODER. Return SFRAME_ERR if failure. */ + +static int +sframe_encoder_write_sframe (sframe_encoder_ctx *encoder) +{ + char *contents; + size_t buf_size; + size_t hdr_size; + size_t all_fdes_size; + size_t fre_size; + size_t esz = 0; + sframe_header *ehp; + unsigned char flags; + sf_funidx_tbl *fd_info; + sf_fre_tbl *fr_info; + uint32_t i, num_fdes; + uint32_t j, num_fres; + sframe_func_desc_entry *fdep; + sframe_frame_row_entry *frep; + + unsigned int fre_type; + int err = 0; + + contents = encoder->sfe_data; + buf_size = encoder->sfe_data_size; + hdr_size = sizeof (sframe_header); + num_fdes = sframe_encoder_get_num_fidx (encoder); + all_fdes_size = num_fdes * sizeof (sframe_func_desc_entry); + ehp = sframe_encoder_get_header (encoder); + + fd_info = (sf_funidx_tbl *) encoder->sfe_funcdesc; + fr_info = (sf_fre_tbl *) encoder->sfe_fres; + + /* Sanity checks: + - buffers must be malloc'd by the caller. */ + if ((contents == NULL) || (buf_size < hdr_size)) + return sframe_set_errno (&err, ESFRAME_BUF_INVAL); + if (fr_info == NULL) + return sframe_set_errno (&err, ESFRAME_FRE_INVAL); + + /* Write out the FRE table first. + + Recall that read/write of FREs needs information from the corresponding + FDE; the latter stores the information about the FRE type record used for + the function. Also note that sorting of FDEs does NOT impact the order + in which FREs are stored in the SFrame's FRE sub-section. This means + that writing out FREs after sorting of FDEs will need some additional + book-keeping. At this time, we can afford to avoid it by writing out + the FREs first to the output buffer. */ + fre_size = 0; + uint32_t global = 0; + uint32_t fre_index = 0; + + contents += hdr_size + all_fdes_size; + for (i = 0; i < num_fdes; i++) + { + fdep = &fd_info->entry[i]; + fre_type = sframe_get_fre_type (fdep); + num_fres = fdep->sfde_func_num_fres; + + for (j = 0; j < num_fres; j++) + { + fre_index = global + j; + frep = &fr_info->entry[fre_index]; + + sframe_encoder_write_fre (contents, frep, fre_type, &esz); + contents += esz; + fre_size += esz; /* For debugging only. */ + } + global += j; + } + + sframe_assert (fre_size == ehp->sfh_fre_len); + sframe_assert (global == ehp->sfh_num_fres); + sframe_assert ((size_t)(contents - encoder->sfe_data) == buf_size); + + /* Sort the FDE table */ + sframe_sort_funcdesc (encoder); + + /* Sanity checks: + - the FDE section must have been sorted by now on the start address + of each function. */ + flags = ehp->sfh_preamble.sfp_flags; + if (!(flags & SFRAME_F_FDE_SORTED) + || (fd_info == NULL)) + return sframe_set_errno (&err, ESFRAME_FDE_INVAL); + + contents = encoder->sfe_data; + /* Write out the SFrame header. The SFrame header in the encoder + object has already been updated with correct offsets by the caller. */ + memcpy (contents, ehp, hdr_size); + contents += hdr_size; + + /* Write out the FDE table sorted on funtion start address. */ + memcpy (contents, fd_info->entry, all_fdes_size); + contents += all_fdes_size; + + return 0; +} + +/* Serialize the contents of the encoder and return the buffer. ENCODED_SIZE + is updated to the size of the buffer. */ + +char * +sframe_write_encoder (sframe_encoder_ctx *encoder, + size_t *encoded_size, int *errp) +{ + sframe_header *ehp; + size_t hdrsize, fsz, fresz, bufsize; + int foreign_endian; + + /* Initialize the encoded_size to zero. This makes it simpler to just + return from the function in case of failure. Free'ing up of + encoder->sfe_data is the responsibility of the caller. */ + *encoded_size = 0; + + if (encoder == NULL || encoded_size == NULL || errp == NULL) + return sframe_ret_set_errno (errp, EINVAL); + + hdrsize = sizeof (sframe_header); + fsz = sframe_encoder_get_num_fidx (encoder) + * sizeof (sframe_func_desc_entry); + fresz = encoder->sfe_fre_nbytes; + + /* The total size of buffer is the sum of header, SFrame Function Descriptor + Entries section and the FRE section. */ + bufsize = hdrsize + fsz + fresz; + encoder->sfe_data = (char *) malloc (bufsize); + if (encoder->sfe_data == NULL) + return sframe_ret_set_errno (errp, ESFRAME_NOMEM); + encoder->sfe_data_size = bufsize; + + /* Update the header information. */ + ehp = sframe_encoder_get_header (encoder); + /* SFrame FDE section follows immediately after the header. */ + ehp->sfh_fdeoff = 0; + /* SFrame FRE section follows immediately after the SFrame FDE section. */ + ehp->sfh_freoff = fsz; + ehp->sfh_fre_len = fresz; + /* FIXME - sfh_cfa_fixed_fp_offset sfh_cfa_fixed_ra_offset?? */ + + foreign_endian = need_swapping (ehp->sfh_abi_arch); + + /* Write out the FDE Index and the FRE table. */ + if (sframe_encoder_write_sframe (encoder)) + return sframe_ret_set_errno (errp, ESFRAME_BUF_INVAL); + + /* Endian flip the contents if necessary. */ + if (foreign_endian) + { + flip_header ((sframe_header*)encoder->sfe_data); + if (flip_sframe (encoder->sfe_data, bufsize)) + return sframe_ret_set_errno (errp, ESFRAME_BUF_INVAL); + } + + *encoded_size = bufsize; + return encoder->sfe_data; +} diff --git a/libsframe/testsuite/Makefile.am b/libsframe/testsuite/Makefile.am new file mode 100644 index 00000000000..1455eba83c7 --- /dev/null +++ b/libsframe/testsuite/Makefile.am @@ -0,0 +1,23 @@ +AUTOMAKE_OPTIONS = dejagnu foreign + +SUBDIRS = libsframe.decode libsframe.encode + +# Setup the testing framework +EXPECT = expect +RUNTEST = runtest +RUNTESTFLAGS = + +check-DEJAGNU: site.exp + srcroot=`cd $(srcdir) && pwd`; export srcroot; \ + r=`pwd`; export r; \ + LC_ALL=C; export LC_ALL; \ + EXPECT=$(EXPECT); export EXPECT; \ + runtest=$(RUNTEST); \ + if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ + $$runtest --tool $(DEJATOOL) \ + CC="$(CC)" \ + CROSS_COMPILE="$(CROSS_COMPILE)" \ + CFLAGS="$(CFLAGS) -I$(top_srcdir)/../include -I$(top_srcdir) -I$(top_builddir)" \ + $(RUNTESTFLAGS); \ + else echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi diff --git a/libsframe/testsuite/Makefile.in b/libsframe/testsuite/Makefile.in new file mode 100644 index 00000000000..f97c4330eb7 --- /dev/null +++ b/libsframe/testsuite/Makefile.in @@ -0,0 +1,682 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = testsuite +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ + $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/jobserver.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/warnings.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ + $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DEJATOOL = $(PACKAGE) +RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/../mkinstalldirs +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WARN_PEDANTIC = @WARN_PEDANTIC@ +WERROR = @WERROR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_libsframe_warn_cflags = @ac_libsframe_warn_cflags@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +c_warn = @c_warn@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_noncanonical = @host_noncanonical@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +target_noncanonical = @target_noncanonical@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +warn = @warn@ +AUTOMAKE_OPTIONS = dejagnu foreign +SUBDIRS = libsframe.decode libsframe.encode + +# Setup the testing framework +EXPECT = expect +RUNTEST = runtest +RUNTESTFLAGS = +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign testsuite/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG) + @echo 'Making a new site.exp file ...' + @echo '## these variables are automatically generated by make ##' >site.tmp + @echo '# Do not edit here. If you wish to override these values' >>site.tmp + @echo '# edit the last section' >>site.tmp + @echo 'set srcdir "$(srcdir)"' >>site.tmp + @echo "set objdir `pwd`" >>site.tmp + @echo 'set build_alias "$(build_alias)"' >>site.tmp + @echo 'set build_triplet $(build_triplet)' >>site.tmp + @echo 'set host_alias "$(host_alias)"' >>site.tmp + @echo 'set host_triplet $(host_triplet)' >>site.tmp + @list='$(EXTRA_DEJAGNU_SITE_CONFIG)'; for f in $$list; do \ + echo "## Begin content included from file $$f. Do not modify. ##" \ + && cat `test -f "$$f" || echo '$(srcdir)/'`$$f \ + && echo "## End content included from file $$f. ##" \ + || exit 1; \ + done >> site.tmp + @echo "## End of auto-generated content; you can edit from here. ##" >> site.tmp + @if test -f site.exp; then \ + sed -e '1,/^## End of auto-generated content.*##/d' site.exp >> site.tmp; \ + fi + @-rm -f site.bak + @test ! -f site.exp || mv site.exp site.bak + @mv site.tmp site.exp + +distclean-DEJAGNU: + -rm -f site.exp site.bak + -l='$(DEJATOOL)'; for tool in $$l; do \ + rm -f $$tool.sum $$tool.log; \ + done + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-DEJAGNU distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) check-am install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-DEJAGNU check-am clean clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-DEJAGNU \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +check-DEJAGNU: site.exp + srcroot=`cd $(srcdir) && pwd`; export srcroot; \ + r=`pwd`; export r; \ + LC_ALL=C; export LC_ALL; \ + EXPECT=$(EXPECT); export EXPECT; \ + runtest=$(RUNTEST); \ + if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ + $$runtest --tool $(DEJATOOL) \ + CC="$(CC)" \ + CROSS_COMPILE="$(CROSS_COMPILE)" \ + CFLAGS="$(CFLAGS) -I$(top_srcdir)/../include -I$(top_srcdir) -I$(top_builddir)" \ + $(RUNTESTFLAGS); \ + else echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libsframe/testsuite/config/default.exp b/libsframe/testsuite/config/default.exp new file mode 100644 index 00000000000..c45e25d3357 --- /dev/null +++ b/libsframe/testsuite/config/default.exp @@ -0,0 +1,54 @@ +# Basic expect script for libsframe decoder tests. +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# +# Written by Jeffrey Wheat (cassidy@cygnus.com) +# + +if ![info exists ld] then { + set ld [findfile $base_dir/../ld/ld-new $base_dir/../ld/ld-new [transform ld]] +} + +if ![info exists as] then { + set as [findfile $base_dir/../gas/as-new $base_dir/../gas/as-new [transform as]] +} + +remote_exec host "mkdir -p tmpdir" + +# Make symlinks from tmpdir/libsframe to the linker and assembler in the +# build tree, so that we can use a -B option to gcc to force it to use +# the newly built linker and assembler. +if {![file isdirectory tmpdir/libsframe]} then { + catch "exec mkdir tmpdir/libsframe" status + catch "exec ln -s ../../../ld/ld-new tmpdir/libsframe/ld" status + catch "exec ln -s ld tmpdir/libsframe/collect-ld" status + catch "exec ln -s ../../../gas/as-new tmpdir/libsframe/as" status +} +set gcc_B_opt "-B[pwd]/tmpdir/libsframe/" +set ld_L_opt "" + +if {![info exists CC]} { + set CC gcc +} +if {![info exists CFLAGS]} { + set CFLAGS "-g -O2" +} +if {![info exists CFLAGS_FOR_TARGET]} { + set CFLAGS_FOR_TARGET $CFLAGS +} diff --git a/libsframe/testsuite/libsframe.decode/DATA1 b/libsframe/testsuite/libsframe.decode/DATA1 new file mode 100644 index 0000000000000000000000000000000000000000..8a6d4a3b68f6be1d67c42b78c3d88807249c3a56 GIT binary patch literal 59 zcmaEKkCBm?fq{{Mfq?~x`GFV&1cCV9`~Ux?!90i@BLg!BBdfp%78ZdIQmh;w0QnIK ACIA2c literal 0 HcmV?d00001 diff --git a/libsframe/testsuite/libsframe.decode/DATA2 b/libsframe/testsuite/libsframe.decode/DATA2 new file mode 100644 index 0000000000000000000000000000000000000000..71c3be0a8497df2b2055484d45c89d3b0e53e815 GIT binary patch literal 91 zcmaEKkCBm?fq{vEfq?^v<$xFjlz{l!`~Ux?!8`^A79h>|5hx%4WbgwqSb%| S0}G452PsyL4@g{oAQu3xLl8;; literal 0 HcmV?d00001 diff --git a/libsframe/testsuite/libsframe.decode/DATA_BIGE b/libsframe/testsuite/libsframe.decode/DATA_BIGE new file mode 100644 index 0000000000000000000000000000000000000000..37c3f39a4bad0afccc09d693bf16a8ee6a2d4c50 GIT binary patch literal 59 zcmccjh>?+z0R%uK3lQ^zI6xry|Nr}cKw28i1IjTnFmo`n3VdK;5%?g*%JBgJ_vQ&C literal 0 HcmV?d00001 diff --git a/libsframe/testsuite/libsframe.decode/Makefile.am b/libsframe/testsuite/libsframe.decode/Makefile.am new file mode 100644 index 00000000000..a79a678014b --- /dev/null +++ b/libsframe/testsuite/libsframe.decode/Makefile.am @@ -0,0 +1,14 @@ +check_PROGRAMS = bigendian_data frecnt_1 frecnt_2 + +bigendian_data_SOURCES = bigendian_data.c +bigendian_data_LDADD = ${top_builddir}/libsframe.la +bigendian_data_CPPFLAGS = -I${top_srcdir}/../include -Wall + +frecnt_1_SOURCES = frecnt_1.c +frecnt_1_LDADD = ${top_builddir}/libsframe.la +frecnt_1_CPPFLAGS = -I${top_srcdir}/../include -Wall + +frecnt_2_SOURCES = frecnt_2.c +frecnt_2_LDADD = ${top_builddir}/libsframe.la +frecnt_2_CPPFLAGS = -I${top_srcdir}/../include -Wall + diff --git a/libsframe/testsuite/libsframe.decode/Makefile.in b/libsframe/testsuite/libsframe.decode/Makefile.in new file mode 100644 index 00000000000..f4a1e43c374 --- /dev/null +++ b/libsframe/testsuite/libsframe.decode/Makefile.in @@ -0,0 +1,661 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = bigendian_data$(EXEEXT) frecnt_1$(EXEEXT) \ + frecnt_2$(EXEEXT) +subdir = testsuite/libsframe.decode +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ + $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/jobserver.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/warnings.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ + $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am_bigendian_data_OBJECTS = bigendian_data-bigendian_data.$(OBJEXT) +bigendian_data_OBJECTS = $(am_bigendian_data_OBJECTS) +bigendian_data_DEPENDENCIES = ${top_builddir}/libsframe.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_frecnt_1_OBJECTS = frecnt_1-frecnt_1.$(OBJEXT) +frecnt_1_OBJECTS = $(am_frecnt_1_OBJECTS) +frecnt_1_DEPENDENCIES = ${top_builddir}/libsframe.la +am_frecnt_2_OBJECTS = frecnt_2-frecnt_2.$(OBJEXT) +frecnt_2_OBJECTS = $(am_frecnt_2_OBJECTS) +frecnt_2_DEPENDENCIES = ${top_builddir}/libsframe.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(bigendian_data_SOURCES) $(frecnt_1_SOURCES) \ + $(frecnt_2_SOURCES) +DIST_SOURCES = $(bigendian_data_SOURCES) $(frecnt_1_SOURCES) \ + $(frecnt_2_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/../depcomp \ + $(top_srcdir)/../mkinstalldirs +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WARN_PEDANTIC = @WARN_PEDANTIC@ +WERROR = @WERROR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_libsframe_warn_cflags = @ac_libsframe_warn_cflags@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +c_warn = @c_warn@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_noncanonical = @host_noncanonical@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +target_noncanonical = @target_noncanonical@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +warn = @warn@ +bigendian_data_SOURCES = bigendian_data.c +bigendian_data_LDADD = ${top_builddir}/libsframe.la +bigendian_data_CPPFLAGS = -I${top_srcdir}/../include -Wall +frecnt_1_SOURCES = frecnt_1.c +frecnt_1_LDADD = ${top_builddir}/libsframe.la +frecnt_1_CPPFLAGS = -I${top_srcdir}/../include -Wall +frecnt_2_SOURCES = frecnt_2.c +frecnt_2_LDADD = ${top_builddir}/libsframe.la +frecnt_2_CPPFLAGS = -I${top_srcdir}/../include -Wall +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/libsframe.decode/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign testsuite/libsframe.decode/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +bigendian_data$(EXEEXT): $(bigendian_data_OBJECTS) $(bigendian_data_DEPENDENCIES) $(EXTRA_bigendian_data_DEPENDENCIES) + @rm -f bigendian_data$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(bigendian_data_OBJECTS) $(bigendian_data_LDADD) $(LIBS) + +frecnt_1$(EXEEXT): $(frecnt_1_OBJECTS) $(frecnt_1_DEPENDENCIES) $(EXTRA_frecnt_1_DEPENDENCIES) + @rm -f frecnt_1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(frecnt_1_OBJECTS) $(frecnt_1_LDADD) $(LIBS) + +frecnt_2$(EXEEXT): $(frecnt_2_OBJECTS) $(frecnt_2_DEPENDENCIES) $(EXTRA_frecnt_2_DEPENDENCIES) + @rm -f frecnt_2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(frecnt_2_OBJECTS) $(frecnt_2_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bigendian_data-bigendian_data.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frecnt_1-frecnt_1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frecnt_2-frecnt_2.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +bigendian_data-bigendian_data.o: bigendian_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bigendian_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bigendian_data-bigendian_data.o -MD -MP -MF $(DEPDIR)/bigendian_data-bigendian_data.Tpo -c -o bigendian_data-bigendian_data.o `test -f 'bigendian_data.c' || echo '$(srcdir)/'`bigendian_data.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bigendian_data-bigendian_data.Tpo $(DEPDIR)/bigendian_data-bigendian_data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bigendian_data.c' object='bigendian_data-bigendian_data.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bigendian_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bigendian_data-bigendian_data.o `test -f 'bigendian_data.c' || echo '$(srcdir)/'`bigendian_data.c + +bigendian_data-bigendian_data.obj: bigendian_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bigendian_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bigendian_data-bigendian_data.obj -MD -MP -MF $(DEPDIR)/bigendian_data-bigendian_data.Tpo -c -o bigendian_data-bigendian_data.obj `if test -f 'bigendian_data.c'; then $(CYGPATH_W) 'bigendian_data.c'; else $(CYGPATH_W) '$(srcdir)/bigendian_data.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bigendian_data-bigendian_data.Tpo $(DEPDIR)/bigendian_data-bigendian_data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bigendian_data.c' object='bigendian_data-bigendian_data.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bigendian_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bigendian_data-bigendian_data.obj `if test -f 'bigendian_data.c'; then $(CYGPATH_W) 'bigendian_data.c'; else $(CYGPATH_W) '$(srcdir)/bigendian_data.c'; fi` + +frecnt_1-frecnt_1.o: frecnt_1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT frecnt_1-frecnt_1.o -MD -MP -MF $(DEPDIR)/frecnt_1-frecnt_1.Tpo -c -o frecnt_1-frecnt_1.o `test -f 'frecnt_1.c' || echo '$(srcdir)/'`frecnt_1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/frecnt_1-frecnt_1.Tpo $(DEPDIR)/frecnt_1-frecnt_1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frecnt_1.c' object='frecnt_1-frecnt_1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o frecnt_1-frecnt_1.o `test -f 'frecnt_1.c' || echo '$(srcdir)/'`frecnt_1.c + +frecnt_1-frecnt_1.obj: frecnt_1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT frecnt_1-frecnt_1.obj -MD -MP -MF $(DEPDIR)/frecnt_1-frecnt_1.Tpo -c -o frecnt_1-frecnt_1.obj `if test -f 'frecnt_1.c'; then $(CYGPATH_W) 'frecnt_1.c'; else $(CYGPATH_W) '$(srcdir)/frecnt_1.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/frecnt_1-frecnt_1.Tpo $(DEPDIR)/frecnt_1-frecnt_1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frecnt_1.c' object='frecnt_1-frecnt_1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o frecnt_1-frecnt_1.obj `if test -f 'frecnt_1.c'; then $(CYGPATH_W) 'frecnt_1.c'; else $(CYGPATH_W) '$(srcdir)/frecnt_1.c'; fi` + +frecnt_2-frecnt_2.o: frecnt_2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT frecnt_2-frecnt_2.o -MD -MP -MF $(DEPDIR)/frecnt_2-frecnt_2.Tpo -c -o frecnt_2-frecnt_2.o `test -f 'frecnt_2.c' || echo '$(srcdir)/'`frecnt_2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/frecnt_2-frecnt_2.Tpo $(DEPDIR)/frecnt_2-frecnt_2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frecnt_2.c' object='frecnt_2-frecnt_2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o frecnt_2-frecnt_2.o `test -f 'frecnt_2.c' || echo '$(srcdir)/'`frecnt_2.c + +frecnt_2-frecnt_2.obj: frecnt_2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT frecnt_2-frecnt_2.obj -MD -MP -MF $(DEPDIR)/frecnt_2-frecnt_2.Tpo -c -o frecnt_2-frecnt_2.obj `if test -f 'frecnt_2.c'; then $(CYGPATH_W) 'frecnt_2.c'; else $(CYGPATH_W) '$(srcdir)/frecnt_2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/frecnt_2-frecnt_2.Tpo $(DEPDIR)/frecnt_2-frecnt_2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frecnt_2.c' object='frecnt_2-frecnt_2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(frecnt_2_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o frecnt_2-frecnt_2.obj `if test -f 'frecnt_2.c'; then $(CYGPATH_W) 'frecnt_2.c'; else $(CYGPATH_W) '$(srcdir)/frecnt_2.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libsframe/testsuite/libsframe.decode/bigendian_data.c b/libsframe/testsuite/libsframe.decode/bigendian_data.c new file mode 100644 index 00000000000..5d9271e6f90 --- /dev/null +++ b/libsframe/testsuite/libsframe.decode/bigendian_data.c @@ -0,0 +1,107 @@ +/* bigendian_data.c -- Test for handling different endianness in libsframe. + + Copyright (C) 2022 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "config.h" + +#include +#include +#include + +#include "sframe-api.h" + +/* DejaGnu should not use gnulib's vsnprintf replacement here. */ +#undef vsnprintf +#include + +/* + * SFrame info from the following source (1 fde 4 fres): + * static int cnt; + * int main() { cnt++; return (cnt); } + * + * Then its contents are flipped from little-endian to big-endian. + */ +#define DATA "DATA_BIGE" + +int +main () +{ + sframe_decoder_ctx *dctx = NULL; + uint32_t nfres, fsize; + int32_t fstart; + unsigned char finfo; + int err = 0; + FILE *fp; + struct stat st; + char *sf_buf; + size_t sf_size; + +#define TEST(name, cond) \ + do \ + { \ + if (cond) \ + pass (name); \ + else \ + fail (name); \ + } \ + while (0) + + /* Test setup. */ + fp = fopen (DATA, "r"); + if (fp == NULL) + goto setup_fail; + if (fstat (fileno (fp), &st) < 0) + { + perror ("fstat"); + fclose (fp); + goto setup_fail; + } + sf_buf = malloc (st.st_size); + if (sf_buf == NULL) + { + perror ("malloc"); + goto setup_fail; + } + sf_size = fread (sf_buf, 1, st.st_size, fp); + fclose (fp); + if (sf_size == 0) + { + fprintf (stderr, "Decode: Read buffer failed\n"); + goto setup_fail; + } + + /* Execute tests. */ + + /* Call to sframe_decode will endian flip the input buffer and + keep the new copy of buffer internally. */ + dctx = sframe_decode (sf_buf, sf_size, &err); + TEST ("bigendian_data: Decoder setup", dctx != NULL); + + unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx); + TEST ("bigendian_data: Decoder FDE count", fde_cnt == 1); + + err = sframe_decoder_get_funcdesc (dctx, 0, &nfres, &fsize, &fstart, &finfo); + TEST ("bigendian_data: Decoder get FDE", err == 0); + TEST ("bigendian_data: Decoder FRE count", nfres == 4); + + sframe_decoder_free (&dctx); + return 0; + +setup_fail: + sframe_decoder_free (&dctx); + fail ("bigendian_data: Test setup"); + return 1; +} diff --git a/libsframe/testsuite/libsframe.decode/decode.exp b/libsframe/testsuite/libsframe.decode/decode.exp new file mode 100644 index 00000000000..2538a63e93c --- /dev/null +++ b/libsframe/testsuite/libsframe.decode/decode.exp @@ -0,0 +1,41 @@ +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +load_lib dejagnu.exp + +catch "exec ln -s $srcdir/../testsuite/libsframe.decode/DATA1 ." status +catch "exec ln -s $srcdir/../testsuite/libsframe.decode/DATA2 ." status +catch "exec ln -s $srcdir/../testsuite/libsframe.decode/DATA_BIGE ." status + +if { [host_execute "libsframe.decode/bigendian_data"] ne "" } { + fail "bigendian_data" +} + +if { [host_execute "libsframe.decode/frecnt_1"] ne "" } { + fail "frecnt_1" +} + +if { [host_execute "libsframe.decode/frecnt_2"] ne "" } { + fail "frecnt_2" +} + +catch "exec rm libsframe.decode/DATA1" status +catch "exec rm libsframe.decode/DATA2" status +catch "exec rm libsframe.decode/DATA_BIGE" status diff --git a/libsframe/testsuite/libsframe.decode/frecnt_1.c b/libsframe/testsuite/libsframe.decode/frecnt_1.c new file mode 100644 index 00000000000..613a47930dd --- /dev/null +++ b/libsframe/testsuite/libsframe.decode/frecnt_1.c @@ -0,0 +1,99 @@ +/* frecnt_1.c -- Test for decoder in libsframe. + + Copyright (C) 2022 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "config.h" + +#include +#include +#include + +#include "sframe-api.h" + +/* DejaGnu should not use gnulib's vsnprintf replacement here. */ +#undef vsnprintf +#include + +/* + * SFrame info from the following source (1 fde 4 fres): + * static int cnt; + * int main() { cnt++; return (cnt); } + */ +#define DATA "DATA1" + +int +main () +{ + sframe_decoder_ctx *dctx = NULL; + uint32_t nfres, fsize; + int32_t fstart; + unsigned char finfo; + int err = 0; + FILE *fp; + struct stat st; + char *sf_buf; + size_t sf_size; + +#define TEST(name, cond) \ + do \ + { \ + if (cond) \ + pass (name); \ + else \ + fail (name); \ + } \ + while (0) + + /* Test Setup. */ + fp = fopen (DATA, "r"); + if (fp == NULL) + goto setup_fail; + if (fstat (fileno (fp), &st) < 0) + { + perror ("fstat"); + fclose (fp); + goto setup_fail; + } + sf_buf = malloc (st.st_size); + if (sf_buf == NULL) + { + perror ("malloc"); + goto setup_fail; + } + + /* Execute tests. */ + sf_size = fread (sf_buf, 1, st.st_size, fp); + fclose (fp); + TEST ("frecnt_1: Read section", sf_size != 0); + + dctx = sframe_decode (sf_buf, sf_size, &err); + TEST ("frecnt_1: Decoder setup", dctx != NULL); + + unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx); + TEST ("frecnt_1: Decoder FDE count", fde_cnt == 1); + + err = sframe_decoder_get_funcdesc (dctx, 0, &nfres, &fsize, &fstart, &finfo); + TEST ("frecnt_1: Decoder get FDE", err == 0); + TEST ("frecnt_1: Decoder FRE count", nfres == 4); + + sframe_decoder_free (&dctx); + return 0; + +setup_fail: + sframe_decoder_free (&dctx); + fail ("frecnt_1: Test setup"); + return 1; +} diff --git a/libsframe/testsuite/libsframe.decode/frecnt_2.c b/libsframe/testsuite/libsframe.decode/frecnt_2.c new file mode 100644 index 00000000000..930788665dd --- /dev/null +++ b/libsframe/testsuite/libsframe.decode/frecnt_2.c @@ -0,0 +1,103 @@ +/* frecnt_2.c -- Test for decoder in libsframe. + + Copyright (C) 2022 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "config.h" + +#include +#include +#include + +#include "sframe-api.h" + +/* DejaGnu should not use gnulib's vsnprintf replacement here. */ +#undef vsnprintf +#include + +/* + * SFrame info from the following source (2 fde 8 fres): + * static int cnt; + * int foo() { return ++cnt; } + * int main() { return foo(); } + */ +#define DATA "DATA2" + +int +main () +{ + sframe_decoder_ctx *dctx = NULL; + uint32_t nfres, fsize; + int32_t fstart; + unsigned char finfo; + int i, err = 0; + FILE *fp; + struct stat st; + char *sf_buf; + size_t sf_size; + +#define TEST(name, cond) \ + do \ + { \ + if (cond) \ + pass (name); \ + else \ + fail (name); \ + } \ + while (0) + + fp = fopen (DATA, "r"); + if (fp == NULL) + goto setup_fail; + if (fstat (fileno (fp), &st) < 0) + { + perror ("fstat"); + fclose (fp); + goto setup_fail; + } + sf_buf = malloc (st.st_size); + if (sf_buf == NULL) + { + perror ("malloc"); + goto setup_fail; + } + + /* Execute tests. */ + sf_size = fread (sf_buf, 1, st.st_size, fp); + fclose (fp); + TEST ("frecnt_2: Read section", sf_size != 0); + + dctx = sframe_decode (sf_buf, sf_size, &err); + TEST ("frecnt_2: Decode setup", dctx != NULL); + + unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx); + TEST ("frecnt_2: Decode FDE count", fde_cnt == 2); + + for (i = 0; i < fde_cnt; ++i) + { + err = sframe_decoder_get_funcdesc (dctx, i, &nfres, &fsize, &fstart, + &finfo); + TEST ("frecnt_2: Decode get FDE", err == 0); + TEST ("frecnt_2: Decode get FRE", nfres == 4); + } + + sframe_decoder_free (&dctx); + return 0; + +setup_fail: + sframe_decoder_free (&dctx); + fail ("frecnt_2: Test setup"); + return 1; +} diff --git a/libsframe/testsuite/libsframe.encode/Makefile.am b/libsframe/testsuite/libsframe.encode/Makefile.am new file mode 100644 index 00000000000..47613485b13 --- /dev/null +++ b/libsframe/testsuite/libsframe.encode/Makefile.am @@ -0,0 +1,6 @@ +check_PROGRAMS = encode_1 + +encode_1_SOURCES = encode_1.c +encode_1_LDADD = ${top_builddir}/libsframe.la +encode_1_CPPFLAGS = -I${top_srcdir}/../include -Wall + diff --git a/libsframe/testsuite/libsframe.encode/Makefile.in b/libsframe/testsuite/libsframe.encode/Makefile.in new file mode 100644 index 00000000000..678a9ce9b43 --- /dev/null +++ b/libsframe/testsuite/libsframe.encode/Makefile.in @@ -0,0 +1,608 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = encode_1$(EXEEXT) +subdir = testsuite/libsframe.encode +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ + $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/jobserver.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/warnings.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ + $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am_encode_1_OBJECTS = encode_1-encode_1.$(OBJEXT) +encode_1_OBJECTS = $(am_encode_1_OBJECTS) +encode_1_DEPENDENCIES = ${top_builddir}/libsframe.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(encode_1_SOURCES) +DIST_SOURCES = $(encode_1_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/../depcomp \ + $(top_srcdir)/../mkinstalldirs +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WARN_PEDANTIC = @WARN_PEDANTIC@ +WERROR = @WERROR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_libsframe_warn_cflags = @ac_libsframe_warn_cflags@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +c_warn = @c_warn@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_noncanonical = @host_noncanonical@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +target_noncanonical = @target_noncanonical@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +warn = @warn@ +encode_1_SOURCES = encode_1.c +encode_1_LDADD = ${top_builddir}/libsframe.la +encode_1_CPPFLAGS = -I${top_srcdir}/../include -Wall +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/libsframe.encode/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign testsuite/libsframe.encode/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +encode_1$(EXEEXT): $(encode_1_OBJECTS) $(encode_1_DEPENDENCIES) $(EXTRA_encode_1_DEPENDENCIES) + @rm -f encode_1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(encode_1_OBJECTS) $(encode_1_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encode_1-encode_1.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +encode_1-encode_1.o: encode_1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT encode_1-encode_1.o -MD -MP -MF $(DEPDIR)/encode_1-encode_1.Tpo -c -o encode_1-encode_1.o `test -f 'encode_1.c' || echo '$(srcdir)/'`encode_1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/encode_1-encode_1.Tpo $(DEPDIR)/encode_1-encode_1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='encode_1.c' object='encode_1-encode_1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o encode_1-encode_1.o `test -f 'encode_1.c' || echo '$(srcdir)/'`encode_1.c + +encode_1-encode_1.obj: encode_1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT encode_1-encode_1.obj -MD -MP -MF $(DEPDIR)/encode_1-encode_1.Tpo -c -o encode_1-encode_1.obj `if test -f 'encode_1.c'; then $(CYGPATH_W) 'encode_1.c'; else $(CYGPATH_W) '$(srcdir)/encode_1.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/encode_1-encode_1.Tpo $(DEPDIR)/encode_1-encode_1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='encode_1.c' object='encode_1-encode_1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(encode_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o encode_1-encode_1.obj `if test -f 'encode_1.c'; then $(CYGPATH_W) 'encode_1.c'; else $(CYGPATH_W) '$(srcdir)/encode_1.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libsframe/testsuite/libsframe.encode/encode.exp b/libsframe/testsuite/libsframe.encode/encode.exp new file mode 100644 index 00000000000..cd4debcd884 --- /dev/null +++ b/libsframe/testsuite/libsframe.encode/encode.exp @@ -0,0 +1,25 @@ +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +load_lib dejagnu.exp + +if { [host_execute "libsframe.encode/encode_1"] ne "" } { + fail "encode_1" +} diff --git a/libsframe/testsuite/libsframe.encode/encode_1.c b/libsframe/testsuite/libsframe.encode/encode_1.c new file mode 100644 index 00000000000..f584747cb0c --- /dev/null +++ b/libsframe/testsuite/libsframe.encode/encode_1.c @@ -0,0 +1,182 @@ +/* encode_1.c -- Test for encoder in libsframe. + + Copyright (C) 2022 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "config.h" + +#include +#include +#include +#include + +#include "sframe-api.h" + +/* DejaGnu should not use gnulib's vsnprintf replacement here. */ +#undef vsnprintf +#include + +static int +add_fde1 (sframe_encoder_ctx *encode, int idx) +{ + int i, err; + /* A contiguous block containing 4 FREs. */ + sframe_frame_row_entry fres[] + = { {0x0, 0x3, {0x8, 0, 0}}, + {0x1, 0x5, {0x10, 0xf0, 0}}, + {0x4, 0x4, {0x10, 0xf0, 0}}, + {0x1a, 0x5, {0x8, 0xf0, 0}} + }; + + unsigned char finfo = sframe_fde_func_info (SFRAME_FRE_TYPE_ADDR1, + SFRAME_FDE_TYPE_PCINC); + err = sframe_encoder_add_funcdesc (encode, 0xffffefd6, 0x1b, finfo, 4); + if (err == -1) + return err; + + for (i = 0; i < 4; i++) + if (sframe_encoder_add_fre (encode, idx,fres+i) == SFRAME_ERR) + return -1; + + return 0; +} + +static int +add_fde2 (sframe_encoder_ctx *encode, int idx) +{ + int i, err; + /* A contiguous block containing 4 FREs. */ + sframe_frame_row_entry fres[] + = { {0x0, 0x3, {0x8, 0, 0}}, + {0x1, 0x5, {0x10, 0xf0, 0}}, + {0x4, 0x4, {0x10, 0xf0, 0}}, + {0xf, 0x5, {0x8, 0xf0, 0}} + }; + + unsigned char finfo = sframe_fde_func_info (SFRAME_FRE_TYPE_ADDR1, + SFRAME_FDE_TYPE_PCINC); + err = sframe_encoder_add_funcdesc (encode, 0xffffeff1, 0x10, finfo, 4); + if (err == -1) + return err; + + for (i = 0; i < 4; i++) + if (sframe_encoder_add_fre (encode, idx, fres+i) == SFRAME_ERR) + return -1; + + return 0; +} + +/* + * SFrame info from the following source (2 fdes, 4 fres in each fde): + * static int cnt; + * int foo() { return ++cnt; } + * int main() { return foo(); } + */ +#define DATA "DATA2" + +static int +data_match (char *sframe_buf, size_t sz) +{ + FILE *fp; + struct stat st; + char *sf_buf; + size_t sf_size; + int diffs; + + fp = fopen (DATA, "r"); + if (fp == NULL) + return 0; + if (fstat (fileno (fp), &st) < 0) + { + perror ("fstat"); + fclose (fp); + return 0; + } + sf_buf = malloc (st.st_size); + if (sf_buf == NULL) + { + perror ("malloc"); + return 0; + } + sf_size = fread (sf_buf, 1, st.st_size, fp); + fclose (fp); + if (sf_size == 0 || sf_buf == NULL) + { + fprintf (stderr, "Encode: Read section failed\n"); + return 0; + } + if (sf_size != sz) + return 0; + + diffs = memcmp (sf_buf, sframe_buf, sz); + + free (sf_buf); + return diffs == 0; +} + +int main () +{ + sframe_encoder_ctx *encode; + sframe_frame_row_entry frep; + char *sframe_buf; + size_t sf_size; + int err = 0; + + encode = sframe_encode (SFRAME_VERSION, 0, + SFRAME_ABI_AMD64_ENDIAN_LITTLE, &err); + + if (sframe_encoder_get_num_fidx (encode) != 0) + { + fprintf (stderr, "Encode: incorrect FDEs count\n"); + goto fail; + } + + /* Error test. */ + if (sframe_encoder_add_fre (encode, 1, &frep) != SFRAME_ERR) + { + fprintf (stderr, "Encode: Adding FRE befoer FDE does\n"); + goto fail; + } + + if (add_fde1 (encode, 0) == -1) + { + fprintf (stderr, "Encode: Adding FDE1\n"); + goto fail; + } + if (add_fde2 (encode, 1) == -1) + { + fprintf (stderr, "Encode: Adding FDE2\n"); + goto fail; + } + + if (sframe_encoder_get_num_fidx (encode) != 2) + { + fprintf (stderr, "Encode: Wrong FDE count\n"); + goto fail; + } + + sframe_buf = sframe_write_encoder (encode, &sf_size, &err); + if (err) + return 1; + if (data_match (sframe_buf, sf_size)) + { + sframe_encoder_free (&encode); + pass ("encode test"); + } + +fail: + sframe_encoder_free (&encode); + return 1; +} -- 2.37.2