From patchwork Fri May 17 04:07:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Mezentsev X-Patchwork-Id: 90316 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 29765384AB6C for ; Fri, 17 May 2024 04:08:45 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 775993858D20 for ; Fri, 17 May 2024 04:08:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 775993858D20 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 775993858D20 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1715918894; cv=pass; b=vyXzrnHkGhIbSUFkn5HMf5g1kVupB/OR1r7q6oFkDV0q+R2EPvicYv2t7sqFLWEvx8k6X0m4eSrAGTYcwstvKMdEBhqkuoqknITUD6tEhlhO9Go4u9fszi6wSXiQtRwGR1ztVTm9TqdZRzN9VSHs6zQFzA9suelnj3JRXVaX2sg= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1715918894; c=relaxed/simple; bh=AduyXvBRPB2tHdoStGWTx0uF7tmW/9CKpTtT8c60WMw=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=eZHAt98bfFIsnC5mFALCZs4leW4Q7oRWBBmp4xa6Tqi2zIClheMrrsfhAiOoqTRi3gZTKNM/erquN18kRXDCZyK6YFcLeEi65x5yVHj9P1n6m3dM27gCfhOTaFGlBpS9hGsgDhs0UCtqtgc/HK3ZzTxZZ14/39qFilViOJsauHQ= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 44GNOVCI026360 for ; Fri, 17 May 2024 04:08:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=CHSCgTZjhZVN54dAXJa6yd15e/aYdgtIbvlxVk0MfuU=; b=AR6ooOa66pQgPkcwsrEZdgdA6CQ5CE8l8t81uYGi7TTp0NkR1lhG1TAVJLgFnsRaf6T4 tkZirX7MJGP47ZKjhzR80rx38mZIXyGtwvg8D4ECjYZWeGR2HXtqFXep5u26i21l0UAF sptGDYgNDNrr87er2uRtWr4VPyd/77vMAgVTpDjgzKNNoPflfbTHGvQAuye9Y1SlqJvt KAiHPo2tMTSEjP/hmWPC2n4IK0ZpwIsvijarUpADq2vhECBh2eKVlaT/N77+MhS2A6mn Ye3cAQaG0gRQFupWtophSf6tCOoRftiCyT0ldxNtSmHd9WtVBaQOdd86duEn2kQflD33 Cw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3y3tx38q4k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 17 May 2024 04:08:07 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 44H1UVpp038379 for ; Fri, 17 May 2024 04:08:06 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2101.outbound.protection.outlook.com [104.47.55.101]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3y24q0uef0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 17 May 2024 04:08:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l1ii8BmGerRGdvwy4gIR8tBvGvqZ+5ap44lEQMypB15tj1Qxyqjcau6fSzZdaIlOuphO9OSuvqSuinWChDmUimHCoG/BTAH5N0APH2N8YrkQBJdqJkVf83LCZhN9TVShD1GXReTanrfJp0yVyWBHBDq5TAKtWGwXiwlyBLirz3Gljd5PwvokDpLvMcFUv9D7oNOGu61v/u1usffRRiROPO81BuNNlv9S/0zQ82Ge/gim9fqCZYcv/+1BSE8XnXl2MY08eieLaVpn1rj3JsIiynaFViffy2LA6WlDRGOcG6fkQ52CEltWY22TO8USD7VRk2xU3ow8Rhi4eu5Ugjjl0g== 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=CHSCgTZjhZVN54dAXJa6yd15e/aYdgtIbvlxVk0MfuU=; b=gE26U47EYZ299gQvkRk/ZtcQjG9OBiL7EPl1aGyXrIwOlIw4DkVXMt4TkXL9h+rboI+dGCD6wk6G4klme3gLhvUWtMaojbTWm4AQMt7rXHkHsje9JuYxd3IvLB/685uEEf2WH5GNi3e6r49l3R+Qgxsf4XNM6fp9ZbyNhlXh6O6RHcm+H8fuQrbehVVn7seCwz3PhyEMGhHSm1cUygAoFa99Q1jiAXDC+GxRk9wxzLEb8HOGbpNyRWxuW4FPDmrwwkThk7FAcBJR4h55vsHxRJOyaoCRz9kv3yK+St4Ocaeb6Aw3juALetYOzin3xLP44QQM7ka8YMVpXp5hQmIgtg== 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=CHSCgTZjhZVN54dAXJa6yd15e/aYdgtIbvlxVk0MfuU=; b=i80/165aK9ARfWRBZKZpKPcss+9zOeBMS3fYqQF0KA7dYHBzC8rloNQwhzskxZY5Pbj0BL9i50hbZb6gtVQQTO9zfhygVqGkrwqL9DybKlwhkssvqT5EqASACjy9DZqYN8E0HZ7iZoqobVZ4DsDScWdOFc/PvUzsgaPVdNYUKwg= Received: from SA2PR10MB4636.namprd10.prod.outlook.com (2603:10b6:806:11e::10) by PH7PR10MB6602.namprd10.prod.outlook.com (2603:10b6:510:206::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.27; Fri, 17 May 2024 04:08:04 +0000 Received: from SA2PR10MB4636.namprd10.prod.outlook.com ([fe80::1b3d:bd64:9100:c3fb]) by SA2PR10MB4636.namprd10.prod.outlook.com ([fe80::1b3d:bd64:9100:c3fb%7]) with mapi id 15.20.7587.028; Fri, 17 May 2024 04:08:03 +0000 From: vladimir.mezentsev@oracle.com To: binutils@sourceware.org Cc: Vladimir Mezentsev Subject: [PATCH 1/2] gprofng: remove old interface with libcpc Date: Thu, 16 May 2024 21:07:56 -0700 Message-Id: <20240517040756.2663399-1-vladimir.mezentsev@oracle.com> X-Mailer: git-send-email 2.31.1 X-ClientProxiedBy: SJ0PR05CA0077.namprd05.prod.outlook.com (2603:10b6:a03:332::22) To SA2PR10MB4636.namprd10.prod.outlook.com (2603:10b6:806:11e::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PR10MB4636:EE_|PH7PR10MB6602:EE_ X-MS-Office365-Filtering-Correlation-Id: 5511df5b-703e-46d4-5452-08dc7626f2d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|1800799015|376005; X-Microsoft-Antispam-Message-Info: TbOkfda23NXVvFswhHOtNjj/ggHccPYPJjxLJkIloaLF2X8jNo3w4Rs6lfpK1IpmGTMANDT3t6ydoxFYlXdXovDCnbAeTjZB4tR+bhc6Q8gxtf57pgKxLQe2OyiHIQAJvFLYgNDZwHfOelX4pzUCUcZUTC5yKey3G0DIDwR2ixTj12la66zhhZxg/ZoE5sUUdCcbPSpyJ0P8X84F66i93JoUY19R0JXSB7mKGE8Lk667TYfkE4vle6JD6GVfUqggSvS/7OkzICREbJQsj2Fcq5wCEdJt8XrVDBCBgytSsLMXBL8RLCx5/If1SYtTSRsEpp4RXBYUDjTsATN6qMt3ebHw4CHFsoHZHWueeZbnXYRdKeQupV2dhxbqUywZ9snOB1iQkirnxvFddds2+oSJ4APELTO7KPDvxxpvILqnanMg9JRvivUR/c8UZ81SGLgKv/dKAce6Ufr3hYdoXwYlkoN6Wm0QbOGPC0JwKrMNu3+ZbbzBvDxyUrEkMNE+JMtZI3DRN30/wiXsriiladO+AOoS0LBBTEtSuxLpUwW9ot4mFwA5mHAsw9KdD1RUrnKBTc1xNf2TmzgzGCLUE4Y7kk4W2VKc6R2JipscmLJon+VHAXAvCxq2a3oLXpBaBTNnLpKqUZrNK1QPCqeb4bMZGmzl1aGda5fb+g/ctNn31lWI8O3DqxlpmfNC+vgWOG5+Ui6M2Azc3Dfn8I8WUGmoymXyIN9ahq4uKg7DPgf01dCkPMcHxZcYY5sd28BtWYSbqGAhmPMUcCNs54wCU7s6xfFj5xyUNUxlbYy2mueofI/DodBMXivD5qfW/W9nmR8q6ww3uH5UjXMcSx3FhPZcRCVFp7qnurPePd+quK5eHjb3bFVdlzk3IZQhOiokdcdWwMMJs5Y8smUCfgRrf+I1ytASEkiGHJJB9hc4fUoAfMdqSGIRcJZTr+ZVOzQhAaBjj/k0QrUd9OkwPWy8ZBrFQL2IWEO1sy1x5JlUCOvMH/OMDpxMgSBXX3hj/k2k33cK4P68GYEo0v1N0kn6xwPTslUmq5ie1ZV/jeHdeMxNuvXR2m5H3iN+pVqrKYYNBw8GE1QJLy33FrUTqkU/4WLj31qn2zPYPCDfHuA4yRTbC12D+uZATpGZvXaKZaTgZKjX2QFeKOp2kYEc3SQ1+5ZhiRcHrLon7iF15zj7e3Cuu69W0cYTdcNdJhulAiWc+hbJVFaYDP+WNXvN4qIj2vUG49BmefCdoj+CiTyYHYp6gpJIWEfkj6Htmhr2zStpQFtbJNItXGG4rihqAFVp4mxNqQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA2PR10MB4636.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(1800799015)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LR0+uTouhswqQS+gr+XYoouY2saShnc4TWqBUMsgovaj5+5c0zfkZ1DhpIzyyIfvsOJPBtwPF+oiuXXq9w1i0R2NvjUKrLa6wvUE9jqXa+BBf4xP/3q4wGD0nl8YhXmsWw/3VWl92Efy/olF2Y16pmuVYHdyNfNfUw5/NAAZevHtvHzhplWsXIUKTf1ajU25Qnf76s0cBdXNZJWGlJyJCZCn//UgSp6SZ1t6GL9qP5VoRwnczNY52AE5U3pDLZvAF5mbCW66V4BQrF97YtSk8PnjIF/5kvyTmdKKbCx4KfEo4jbh7Epvv75cw2VBZiAUrq1Qb5AWw5koPpPyZMfrII3ns4vF157dB94Z3ZnNyE6MQxWLQJJb5XBtYAA1ia8hftv9z/GguMDOulnRUuhFMiPjh+7xfm5lI/YLmmmntzlKzA+qDvpnwoPtjUjAYflvjn5p/++Qnk0NVTSmiTDVWi5E4iFnbbANoNhge3Fs45DTSjmsTRQk0FvQKJ1/XOeoxkIPbU5sOzd+PB0THVnB8wAsywI/t6hKj6cVq0v0wP7jybRZf4h+m8/Dn0w8ENz2Z2mDW0pZwUvLqN2JyStNofpL7qczhT+3MKDUNxPSdgZM7VYkBSsJ/BnXt8hM1003kQ/KCzEfL2nN+rKGv/Xh92JGWaG4tFsqyH2OdPfP1TATPc/P6u0Jt2PkJm4S6kNnYwnmCImDT0lKO4GwhUz0+6QwJFmYtfEm18ET7IBDZpEK2UywBBi8DOkhzOSUHl0k5SYd2OAfpNm09hsCgdRoMs8tDBBorWT5/sG55aCDLyOrE9ic19W+I1ueIo6JBW/YCgjWovd42mIRYUpfgqEYZ6e8LC1qB4adUIgYK4NXYYjrIAcXxQbV7RLuW9v/Nt7zqpcmH4RJ0hgOWfZ/t6Jw+pkqmfUkl2eF6jaSFkXqYKiXH8UEvMPrsvtNyWLyaw7G7KcZGGa643TfEqSEz5RpDODwehNUxAuvCrH8qUfUUWiHCiCDesCxMB5F2B6/Ft792APX3QeDH+0roqBB3y7wELVFL+iKozIsY0sru08FgjBYE23svvovgFJ8jIDk1bEFTAgFVJD6TMEd1/IyYqtGftgFyYSI8ZBZTiMeDxez93xRo81N6SLMnTaJi/WAKIsXwIjlUI0vvSKUOSnvsBoH0TYdDEOKyw7bUO/YTh71gFr+BX0wCHev4+MzY4SkQK6OpKo3Zs4yeeKz8ivQzcm6bIO614bHZdU4KPWHTqya01U43UQ7unRBIrVct8Ebpjez3gFR4Tfo9lW3EUOBApdKTnqO4vNNaG6VPr0ZkdxhPNpKEwbG5nkBTWQg+xJTET9ZZzVojJHMYIp29po7ItaWZDNMhUOcfu7qTYTzw06rq9DQerIgRq2e3dV47cQmLB1ZU+13uhPU96iTNJxB6WtA+w/8dMrLUT/nbHMIp9DUNYcCXTVNO2pfZ+ydRqgszt84Pn2qNrYJGLxL5pF3j1YLYOQ8N1qfd7U/SSBh2f7e3MZjXTX/HjKWzKOiqUKWf5GXOQUOYA8so/ENT9zobfMyzRDvXfkSOjNKgWsNB+vYadbveg5Q1UDpQJniAbwve3tBvublYJQEk1pH6zw2vDV2q2+ic1K/Duef6vgcI5Wzy9P49hTw6ipaIK38XhR3JNZp X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: AuUPgrkPLx205Q8F/tl9QExTFd4OIQ+Fc9mVYwSHLV5YWqabw3FnkMKrnHMhx87YCY/SlnPcGvzJfcnS+32YoZ/aGbZZF/RPYepVGLKztG6JjwOzXcC+yfUdVPNmw+ahTNSHCHi18BEQMEWB058Gfgsq5qEORqwTG/J7a/2/LDMfPEKRRikTVJvIRqORJNkftiaS1tfMqoT1yWsFTpPI54C7dWaWx5S2Z5kHUtc4QM3Tyg7jkuSF8WZ4gJRS3DR86SYV7K/opUgO9UmwnlE0gbyxb6MQOTHenqYgLzn/A60hCLMvAkSJdypKB02gxhl9s4c1J6mgK+QiHb8HQJk/N+dFUdq60hyO+s/6OzZJEH5aemHlQpwVFo4GO7vh+s7sy0MK/RRHKO04yOIBmWWIqOoMqno2JFvT2UIYfxOlL1rrfdEchDUPsHmMpSumpiv6+rqIHfKZwwMGcy/TffYX+Qn3JhaXCoUbP67Trlzes7y19Wd8au4jzrs2G+7HncbQ8n64pstBGR9ElC9dViE6N22lLeL5rpZ74GAwQYaMV8BuuXmyNKz8fHZD7ccv9y6NcUmTT21ic9EjrQhc4Ajxxss3rucTvvMbDOB3be2odPY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5511df5b-703e-46d4-5452-08dc7626f2d4 X-MS-Exchange-CrossTenant-AuthSource: SA2PR10MB4636.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 May 2024 04:08:03.8885 (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: 9GqaWeH9pC9ysDtWCjuqlwp2RxMKx5stkKd5uS6paHvoNKItH5JZEdwzcC0ZHZSl+StJgFOyefLo1QNmdDM7B/YWLlx/UNEyHKwtIMi6dt0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6602 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.650,FMLib:17.11.176.26 definitions=2024-05-16_07,2024-05-15_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxscore=0 spamscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2405010000 definitions=main-2405170031 X-Proofpoint-GUID: Wum_4XCPDveJjuuBqnyH1PeVS3LU6Dw5 X-Proofpoint-ORIG-GUID: Wum_4XCPDveJjuuBqnyH1PeVS3LU6Dw5 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces+patchwork=sourceware.org@sourceware.org From: Vladimir Mezentsev interface with libcpc was used on Solaris. gprofng doesn't support profiling on Solaris. I removed this old code and other unused macros and variables. gprofng/ChangeLog 2024-04-29 Vladimir Mezentsev PR gprofng/31123 * common/hwcdrv.c: remove old interface with libcpc. * common/hwcdrv.h: Likewise. * common/hwcentry.h: Likewise. * common/hwcfuncs.c: Likewise. * common/hwcfuncs.h: Likewise. * common/hwctable.c: Likewise. * src/Dbe.cc: Likewise. * src/collctrl.cc: Likewise. --- gprofng/common/hwcdrv.c | 83 +------ gprofng/common/hwcdrv.h | 32 --- gprofng/common/hwcentry.h | 3 - gprofng/common/hwcfuncs.c | 39 +-- gprofng/common/hwcfuncs.h | 25 +- gprofng/common/hwctable.c | 501 ++++---------------------------------- gprofng/src/Dbe.cc | 5 +- gprofng/src/collctrl.cc | 14 -- 8 files changed, 50 insertions(+), 652 deletions(-) diff --git a/gprofng/common/hwcdrv.c b/gprofng/common/hwcdrv.c index 2d549b0d6a5..0ada09d0ca8 100644 --- a/gprofng/common/hwcdrv.c +++ b/gprofng/common/hwcdrv.c @@ -44,83 +44,11 @@ static hdrv_pcbe_api_t *hdrv_pcbe_drivers[] = { #include "opteron_pcbe.c" /* CPU-specific code */ #include "core_pcbe.c" /* CPU-specific code */ -extern hwcdrv_api_t hwcdrv_pcl_api; -IS_GLOBAL hwcdrv_api_t *hwcdrv_drivers[] = { - &hwcdrv_pcl_api, - NULL -}; - /*---------------------------------------------------------------------------*/ - -/* utils for drivers */ -IS_GLOBAL int -hwcdrv_assign_all_regnos (Hwcentry* entries[], unsigned numctrs) -{ - unsigned int pmc_assigned[MAX_PICS]; - unsigned idx; - for (int ii = 0; ii < MAX_PICS; ii++) - pmc_assigned[ii] = 0; - - /* assign the HWCs that we already know about */ - for (idx = 0; idx < numctrs; idx++) - { - regno_t regno = entries[idx]->reg_num; - if (regno == REGNO_ANY) - { - /* check to see if list of possible registers only contains one entry */ - regno = REG_LIST_SINGLE_VALID_ENTRY (entries[idx]->reg_list); - } - if (regno != REGNO_ANY) - { - if (regno < 0 || regno >= MAX_PICS || !regno_is_valid (entries[idx], regno)) - { - logerr (GTXT ("For counter #%d, register %d is out of range\n"), idx + 1, regno); /*!*/ - return HWCFUNCS_ERROR_HWCARGS; - } - TprintfT (DBG_LT2, "hwcfuncs_assign_regnos(): preselected: idx=%d, regno=%d\n", idx, regno); - entries[idx]->reg_num = regno; /* assigning back to entries */ - pmc_assigned[regno] = 1; - } - } - - /* assign HWCs that are currently REGNO_ANY */ - for (idx = 0; idx < numctrs; idx++) - { - if (entries[idx]->reg_num == REGNO_ANY) - { - int assigned = 0; - regno_t *reg_list = entries[idx]->reg_list; - for (; reg_list && *reg_list != REGNO_ANY; reg_list++) - { - regno_t regno = *reg_list; - if (regno < 0 || regno >= MAX_PICS) - { - logerr (GTXT ("For counter #%d, register %d is out of range\n"), idx + 1, regno); /*!*/ - return HWCFUNCS_ERROR_HWCARGS; - } - if (pmc_assigned[regno] == 0) - { - TprintfT (DBG_LT2, "hwcfuncs_assign_regnos(): assigned: idx=%d, regno=%d\n", idx, regno); - entries[idx]->reg_num = regno; /* assigning back to entries */ - pmc_assigned[regno] = 1; - assigned = 1; - break; - } - } - if (!assigned) - { - logerr (GTXT ("Counter '%s' could not be bound to a register\n"), - entries[idx]->name ? entries[idx]->name : ""); - return HWCFUNCS_ERROR_HWCARGS; - } - } - } - return 0; -} - -IS_GLOBAL int +static int hwcdrv_lookup_cpuver (const char * cpcN_cciname) { + /* returns hwc_cpus.h ID for a given string. */ libcpc2_cpu_lookup_t *plookup; static libcpc2_cpu_lookup_t cpu_table[] = { LIBCPC2_CPU_LOOKUP_LIST @@ -307,11 +235,6 @@ hwcfuncs_get_x86_eventsel (unsigned int regno, const char *int_name, return -1; } hwcfuncs_parse_ctr (int_name, NULL, &nameOnly, NULL, NULL, NULL); - if (regno == REGNO_ANY) - { - logerr (GTXT ("reg# could not be determined for `%s'\n"), nameOnly); - goto attr_wrapup; - } /* look up evntsel */ if (myperfctr_get_x86_eventnum (nameOnly, regno, @@ -987,7 +910,7 @@ hwcdrv_get_descriptions (hwcf_hwc_cb_t *hwc_cb, hwcf_attr_cb_t *attr_cb) HWCDRV_API int hwcdrv_assign_regnos (Hwcentry* entries[], unsigned numctrs) { - return hwcdrv_assign_all_regnos (entries, numctrs); + return 0; } static int diff --git a/gprofng/common/hwcdrv.h b/gprofng/common/hwcdrv.h index 1829ec88fac..0a5eb33df00 100644 --- a/gprofng/common/hwcdrv.h +++ b/gprofng/common/hwcdrv.h @@ -41,29 +41,6 @@ #include "libcol_util.h" #define get_hwcdrv __collector_get_hwcdrv -#define hwcdrv_drivers __collector_hwcdrv_drivers -#define hwcdrv_cpc1_api __collector_hwcdrv_cpc1_api -#define hwcdrv_cpc2_api __collector_hwcdrv_cpc2_api -#define hwcdrv_default __collector_hwcdrv_default -#define hwcdrv_driver __collector_hwcdrv_driver -#define hwcdrv_init __collector_hwcdrv_init -#define hwcdrv_get_info __collector_hwcdrv_get_info -#define hwcdrv_enable_mt __collector_hwcdrv_enable_mt -#define hwcdrv_get_descriptions __collector_hwcdrv_get_descriptions -#define hwcdrv_assign_regnos __collector_hwcdrv_assign_regnos -#define hwcdrv_create_counters __collector_hwcdrv_create_counters -#define hwcdrv_start __collector_hwcdrv_start -#define hwcdrv_overflow __collector_hwcdrv_overflow -#define hwcdrv_read_events __collector_hwcdrv_read_events -#define hwcdrv_sighlr_restart __collector_hwcdrv_sighlr_restart -#define hwcdrv_lwp_suspend __collector_hwcdrv_lwp_suspend -#define hwcdrv_lwp_resume __collector_hwcdrv_lwp_resume -#define hwcdrv_free_counters __collector_hwcdrv_free_counters -#define hwcdrv_lwp_init __collector_hwcdrv_lwp_init -#define hwcdrv_lwp_fini __collector_hwcdrv_lwp_fini -#define hwcdrv_assign_all_regnos __collector_hwcdrv_assign_all_regnos -#define hwcdrv_lookup_cpuver __collector_hwcdrv_lookup_cpuver -#define hwcfuncs_int_capture_errmsg __collector_hwcfuncs_int_capture_errmsg #define GTXT(x) x @@ -263,7 +240,6 @@ extern "C" extern hwcdrv_api_t *__collector_get_hwcdrv (); extern int __collector_hwcfuncs_bind_descriptor (const char *defstring); extern Hwcentry **__collector_hwcfuncs_get_ctrs (unsigned *defcnt); - extern hwcdrv_api_t *hwcdrv_drivers[]; // array of available drivers /* prototypes for internal use by hwcdrv drivers */ typedef struct @@ -274,14 +250,6 @@ extern "C" const char *cpcN_cciname; } hwcdrv_about_t; - extern int hwcdrv_assign_all_regnos (Hwcentry* entries[], unsigned numctrs); - /* assign user's counters to specific CPU registers */ - - extern int hwcdrv_lookup_cpuver (const char * cpcN_cciname); - /* returns hwc_cpus.h ID for a given string. */ - - extern void hwcfuncs_int_capture_errmsg (const char *fn, int subcode, - const char *fmt, va_list ap); #define logerr hwcfuncs_int_logerr /*---------------------------------------------------------------------------*/ diff --git a/gprofng/common/hwcentry.h b/gprofng/common/hwcentry.h index a35a363e693..946356eabe5 100644 --- a/gprofng/common/hwcentry.h +++ b/gprofng/common/hwcentry.h @@ -119,9 +119,6 @@ extern "C" unsigned int type : 16; /* Type of perf_event_attr */ long long config; /* perf_event_type -specific configuration */ int sort_order; /* "tag" to associate experiment record with HWC def */ - regno_t *reg_list; /* if not NULL, legal values for field above */ - /* Note: reg_list will be terminated by REGNO_ANY */ - /* Max size of array is MAX_PICS */ hrtime_t min_time; /* target minimum time between overflow events. 0 is off. See HWCTIME_* macros */ hrtime_t min_time_default; /* if min_time==HWCTIME_AUTO, use this value instead. 0 is off. */ int ref_val; /* if min_time==HWCTIME_AUTO, use this time. 0 is off. */ diff --git a/gprofng/common/hwcfuncs.c b/gprofng/common/hwcfuncs.c index 86d6935b321..fce711df6a6 100644 --- a/gprofng/common/hwcfuncs.c +++ b/gprofng/common/hwcfuncs.c @@ -162,10 +162,10 @@ ctrdefprint (int dbg_lvl, const char * hdr, Hwcentry*phwcdef) { TprintfT (dbg_lvl, "%s: name='%s', int_name='%s'," " reg_num=%d, timecvt=%d, memop=%d, " - "interval=%d, tag=%u, reg_list=%p\n", + "interval=%d, tag=%u\n", hdr, phwcdef->name, phwcdef->int_name, phwcdef->reg_num, phwcdef->timecvt, phwcdef->memop, phwcdef->val, - phwcdef->sort_order, phwcdef->reg_list); + phwcdef->sort_order); } /*---------------------------------------------------------------------------*/ @@ -198,7 +198,7 @@ hwcfuncs_errmsg_get (char *buf, size_t bufsize, int enable) } /* used by cpc to log an error */ -IS_GLOBAL void +static void hwcfuncs_int_capture_errmsg (const char *fn, int subcode, const char *fmt, va_list ap) { @@ -639,39 +639,6 @@ hwcfuncs_get_ctrs (unsigned *defcnt) return hwctable; } -/* return 1 if is in Hwcentry's list */ -IS_GLOBAL int -regno_is_valid (const Hwcentry * pctr, regno_t regno) -{ - regno_t *reg_list = pctr->reg_list; - if (REG_LIST_IS_EMPTY (reg_list)) - return 0; - if (regno == REGNO_ANY) /* wildcard */ - return 1; - for (int ii = 0; ii < MAX_PICS; ii++) - { - regno_t tmp = reg_list[ii]; - if (REG_LIST_EOL (tmp)) /* end of list */ - break; - if (tmp == regno) /* is in list */ - return 1; - } - return 0; -} - -/* supplied by hwcdrv_api drivers */ -IS_GLOBAL int -hwcfuncs_assign_regnos (Hwcentry* entries[], - unsigned numctrs) -{ - if (numctrs > cpcN_npics) - { - logerr (GTXT ("More than %d counters were specified\n"), cpcN_npics); /*!*/ - return HWCFUNCS_ERROR_HWCARGS; - } - return hwcdrv_driver->hwcdrv_assign_regnos (entries, numctrs); -} - extern hwcdrv_api_t hwcdrv_pcl_api; static int hwcdrv_driver_inited = 0; diff --git a/gprofng/common/hwcfuncs.h b/gprofng/common/hwcfuncs.h index 7db0f725a13..f44b9a7b4ae 100644 --- a/gprofng/common/hwcfuncs.h +++ b/gprofng/common/hwcfuncs.h @@ -29,8 +29,6 @@ #define hwcfuncs_parse_attrs __collector_hwcfuncs_parse_attrs #define hwcfuncs_bind_descriptor __collector_hwcfuncs_bind_descriptor #define hwcfuncs_bind_hwcentry __collector_hwcfuncs_bind_hwcentry -#define hwcfuncs_assign_regnos __collector_hwcfuncs_assign_regnos -#define regno_is_valid __collector_regno_is_valid #define hwcfuncs_get_ctrs __collector_hwcfuncs_get_ctrs #define hwcfuncs_errmsg_get __collector_hwcfuncs_errmsg_get #endif /* --- LIBCOLLECTOR_SRC --- */ @@ -117,7 +115,6 @@ typedef struct { /* supplementary data fields */ #define HWCFUNCS_ERROR_HWCARGS (-5) #define HWCFUNCS_ERROR_MEMORY (-6) #define HWCFUNCS_ERROR_UNAVAIL (-7) -#define HWCFUNCS_ERROR_ERRNO_ZERO (-8) #define HWCFUNCS_ERROR_UNEXPECTED (-99) /*---------------------------------------------------------------------------*/ @@ -137,6 +134,7 @@ extern void hwcfuncs_int_logerr(const char *format,...); #define HWCFUNCS_SUPPORT_OVERFLOW_PROFILING 0x01llu #define HWCFUNCS_SUPPORT_PEBS_SAMPLING 0x02llu #define HWCFUNCS_SUPPORT_OVERFLOW_CTR_ID 0x04llu // OS identifies which counter overflowed +#define SUPPORT_MEMORYSPACE_PROFILING 0x08 /* get info about session Input: : if not NULL, returns value of CPC cpu version @@ -218,27 +216,6 @@ extern void hwcfuncs_int_logerr(const char *format,...); HWCFUNCS_ERROR_HWCARGS if counters were not specified correctly */ - extern int hwcfuncs_assign_regnos (Hwcentry *entries[], unsigned numctrs); - /* Assign entries[]->reg_num values as needed by platform - Note: modifies by supplying a regno to each counter - Input: - : array of counters - : number of items in - Output: - : array of counters is modified - Return: 0 if successful - HWCFUNCS_ERROR_HWCINIT if resources unavailable - HWCFUNCS_ERROR_HWCARGS if counters were not specified correctly - */ - - extern int regno_is_valid (const Hwcentry *pctr, regno_t regno); - /* return 1 if is in Hwcentry's list - Input: - : counter definition, reg_list[] should be initialized - : register to check - Return: 1 if is in Hwcentry's list, 0 otherwise - */ - extern Hwcentry **hwcfuncs_get_ctrs (unsigned *defcnt); /* Get descriptions of the currently bound counters. Input: diff --git a/gprofng/common/hwctable.c b/gprofng/common/hwctable.c index 567f49f80d5..40b4cd850ba 100644 --- a/gprofng/common/hwctable.c +++ b/gprofng/common/hwctable.c @@ -2659,145 +2659,6 @@ is_hidden_alias (Hwcentry* pctr) return 0; } -static int -is_numeric_alias (Hwcentry* pctr) -{ - int is_numeric_alias = 0; - regno_t regno; - char *nameOnly = NULL; - hwcfuncs_parse_ctr (pctr->int_name, NULL, &nameOnly, NULL, NULL, ®no); - if (is_numeric (nameOnly, NULL)) - is_numeric_alias = 1; - free (nameOnly); - return is_numeric_alias; -} - -/* print list of register to a buffer */ -/* - * style e x a m p l e s - * 0 NONE 2 {0|1|2|3} - * 1 NONE 2 : 0, 1, 2, or 3 - * 2 0 1 2 3 6 - */ -static char * -get_regnolist (char *buf, size_t sz, const regno_t *reg_list, int style) -{ - if (!buf || !sz) - return "INTERNAL ERROR"; - buf[0] = 0; - if (style == 2) - { - int ii; - // width should be consistent with that in format_columns() - // the format will accommodate cpcx_npics regs - if (cpcx_npics < 1) - return "INTERNAL ERROR"; - // clear out the buffer - for (ii = 0; ii < sz; ii++) - buf[ii] = '_'; - if (cpcx_npics <= 9) - { - // one char per reg, plus terminating null char - if (cpcx_npics + 1 > sz) - return "INTERNAL ERROR"; - buf[cpcx_npics] = '\0'; - - // fill buf with regnos - for (ii = 0; ii < MAX_PICS; ii++) - { - regno_t regno = reg_list[ii]; - if (REG_LIST_EOL (regno)) - break; - if (regno < 0 || regno >= cpcx_npics) - return "INTERNAL ERROR"; - buf[regno] = '0' + regno; - } - } - else - { - /* space between regs, which may be 1 or 2 digits each - * 1 char for reg 0 - * 2 chars for regs 1-9 each - * 3 chars for regs 10- each - * 1 char for terminating null char - */ - int nchars = 17 + 3 * (cpcx_npics - 9); - if (nchars > sz) - return "INTERNAL ERROR"; - buf[nchars - 1] = '\0'; - - // fill buf with regnos - for (ii = 0; ii < MAX_PICS; ii++) - { - regno_t regno = reg_list[ii]; - if (REG_LIST_EOL (regno)) - break; - if (regno <= 9) - buf[2 * regno ] = '0' + regno; - else - { - buf[3 * (regno - 9) + 17] = '0' + (regno / 10); - buf[3 * (regno - 9) + 18] = '0' + (regno % 10); - } - } - } - return buf; - } - if (REG_LIST_IS_EMPTY (reg_list)) - { - snprintf (buf, sz, GTXT ("NONE")); - return buf; - } - else if (REG_LIST_EOL (reg_list[1])) - { - /* 1 item in list */ - snprintf (buf, sz, "%d", reg_list[0]); - return buf; - } - else - { - /* 2 more items in list */ - int ii, num_regs; - for (ii = 0; ii < MAX_PICS; ii++) - { - regno_t regno = reg_list[ii]; - if (REG_LIST_EOL (regno)) - break; - } - num_regs = ii; - buf[0] = 0; - for (ii = 0; ii < num_regs; ii++) - { - regno_t regno = reg_list[ii]; - if (style == 0) - snprintf (buf + strlen (buf), sz - strlen (buf), - "%c%d", ii ? '|' : '{', regno); - else - { - if (num_regs == 2) - snprintf (buf + strlen (buf), sz - strlen (buf), - "%d%s", regno, !ii ? " or " : ""); - else - { - /* 3 or more items in list */ - if (ii < num_regs - 2) - snprintf (buf + strlen (buf), sz - strlen (buf), - "%d, ", regno); - else if (ii == num_regs - 2) - snprintf (buf + strlen (buf), sz - strlen (buf), - "%d, or ", regno); - else - snprintf (buf + strlen (buf), sz - strlen (buf), - "%d", regno); - } - } - } - if (style == 0) - snprintf (buf + strlen (buf), sz - strlen (buf), "}"); - } - return buf; -} - #if !HWC_DEBUG #define hwcentry_print(lvl,x1,x2) #else @@ -2806,8 +2667,7 @@ get_regnolist (char *buf, size_t sz, const regno_t *reg_list, int style) static void hwcentry_print (int lvl, const char * header, const Hwcentry *pentry) { - char buf[1024]; - Tprintf (lvl, "%s '%s', '%s', %d, '%s', %d, %d, %d, %d, %d, %d, /", + Tprintf (lvl, "%s '%s', '%s', %d, '%s', %d, %d, %d, %d, %d, %d, /\n", header, pentry->name ? pentry->name : "NULL", pentry->int_name ? pentry->int_name : "NULL", @@ -2819,67 +2679,9 @@ hwcentry_print (int lvl, const char * header, const Hwcentry *pentry) pentry->timecvt, pentry->memop, /* type of instruction that can trigger */ pentry->sort_order); - get_regnolist (buf, sizeof (buf), pentry->reg_list, 0); - Tprintf (lvl, "%s\n", buf); } #endif -/* add to a Hwcentry's list */ -static void -regno_add (Hwcentry * pctr, regno_t regno) -{ - int jj; - regno_t *reg_list; - if (!pctr) - { - Tprintf (0, "hwctable: regno_add(): ERROR: pctr==NULL\n"); - return; - } - reg_list = pctr->reg_list; - if (!reg_list) - { - /* create list */ - reg_list = (regno_t*) malloc (sizeof (regno_t*) * MAX_PICS); - if (!reg_list) - { - hwcentry_print (DBG_LT0, "hwctable: regno_add: ERROR:" - " Out of memory: ", pctr); - return; - } - /* initialize list */ - for (jj = 0; jj < MAX_PICS; jj++) - reg_list[jj] = REGNO_ANY; - pctr->reg_list = reg_list; - } - if (regno == REGNO_ANY) - { - /* add all counters up to cpcx_npics */ - for (jj = 0; jj < MAX_PICS && jj < cpcx_npics; jj++) - reg_list[jj] = jj; - } - else - { - /* add to list of registers */ - for (jj = 0; jj < MAX_PICS; jj++) - { - if (reg_list[jj] == regno) - { - hwcentry_print (DBG_LT0, "hwctable: regno_add: WARNING: " - "Duplicate regno: ", pctr); - break; - } - if (reg_list[jj] == REGNO_ANY) - { - reg_list[jj] = regno; - break; - } - } - } - if (jj == MAX_PICS) - hwcentry_print (DBG_LT0, "hwctable: regno_add: WARNING:" - " regno list is full:", pctr); -} - /*---------------------------------------------------------------------------*/ /* utilities for rawlist (list of raw counters with reglist[] filled in) */ @@ -2931,8 +2733,6 @@ list_add (ptr_list *list, uint_t regno, const char *name) tmpctr.name = (char *) name; praw = list_append_shallow_copy (list, &tmpctr); } - if (praw) - regno_add (praw, regno); return praw; } @@ -2989,28 +2789,7 @@ ptrarray_find (const Hwcentry **array, const char *name, const char *int_name, if (NULL == strstr (int_name, pctr->int_name)) continue; } - if (!check_regno) - return pctr; - else - { - /* duplicates aliases are allowed in table because of 6759307 */ - if (REG_LIST_IS_EMPTY (pctr->reg_list)) - { - /* skip aliases that don't have a valid list of registers */ - hwcentry_print (1, "hwctable: stdlist_find_by_name:" - " WARNING: alias found, but event not supported by HW:", - pctr); - continue; - } - if (!regno_is_valid (pctr, regno)) - { - hwcentry_print (1, "hwctable: stdlist_find_by_name():" - " WARNING: alias found, but regno doesn't match:", - pctr); - continue; - } - return pctr; - } + return pctr; } return NULL; } @@ -3046,49 +2825,15 @@ static_table_find (const Hwcentry *table, const char *name, const char *int_name static void stdlist_print (int dbg_lvl, const Hwcentry* table) { - const Hwcentry *pctr; if (!table) { Tprintf (0, "hwctable: stdlist_print: ERROR: " "table is invalid.\n"); return; } - for (pctr = table; pctr->name; pctr++) + for (const Hwcentry *pctr = table; pctr->name; pctr++) { - int ii; hwcentry_print (dbg_lvl, "hwctable: stdlist: ", pctr); - if (REG_LIST_IS_EMPTY (pctr->reg_list)) - { - if (pctr->int_name || !pctr->metric) - hwcentry_print (DBG_LT1, "hwctable: stdlist_print: WARNING: " - "no hardware event found for table entry", pctr); - continue; - } - /* check if incorrect reg_num used in table */ - if (!regno_is_valid (pctr, pctr->reg_num)) - { - hwcentry_print (DBG_LT0, "hwctable: stdlist_print: ERROR: " - "reg_num is not in table. ", pctr); - continue; - } - for (ii = 0; ii < MAX_PICS; ii++) - { - regno_t regno = pctr->reg_list[ii]; - if (REG_LIST_EOL (regno)) - break; - } - if (ii > 1 && pctr->reg_num != REGNO_ANY) - { - /* several regnos were valid, but only one can be specified */ - if (pctr->metric || !pctr->int_name) - { - /* pctr is standard or a raw definition */ - /* (pctr is not an alias like cycles0) */ - hwcentry_print (DBG_LT0, "hwctable: stdlist_print: ERROR: " - "regno in table should have been REGNO_ANY. ", - pctr); - } - } } } #endif @@ -3173,41 +2918,17 @@ check_tables () if (pentry->metric) Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:" " internal && metric @%d, %s\n", cputag, pentry->name); - if (pentry->reg_num != REGNO_ANY) - Tprintf (DBG_LT1, "hwctable: check_tables: WARNING:" - " internal && reg_num!=REGNO_ANY @%d, %s\n", - cputag, pentry->name); if (pentry->val != PRELOAD_DEF && pentry->memop != ABST_EXACT_PEBS_PLUS1) Tprintf (DBG_LT2, "hwctable: check_tables: INFO:" " internal && custom val=%d @%d, %s\n", pentry->val, cputag, pentry->name); -#if 0 - if (!pentry->timecvt && pentry->memop == ABST_NONE) - Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:" - " internal && not special! @%d, %s\n", - cputag, pentry->name); -#endif } if (pentry->metric) { /* aliased */ if (!pentry->int_name) Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:" " aliased && !int_name @%d, %s\n", cputag, pentry->name); -#if 0 - else if (!strcmp (pentry->name, pentry->int_name)) - Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:" - " name==int_name @%d, %s\n", - cputag, pentry->name); -#endif - if (pentry->reg_num != REGNO_ANY && pentry->reg_num != REGNO_INVALID) - Tprintf (DBG_LT1, "hwctable: check_tables: INFO:" - " aliased && custom reg_num==%d @%d, %s\n", - pentry->reg_num, cputag, pentry->name); - if (pentry->reg_num == REGNO_INVALID) - Tprintf (DBG_LT2, "hwctable: check_tables: INFO:" - " aliased && reg_num==REGNO_INVALID @%d, %s\n", - cputag, pentry->name); } if (pentry->int_name && !pentry->metric) { /* convenience */ @@ -3215,10 +2936,6 @@ check_tables () Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:" " convenience && name==int_name @%d, %s\n", cputag, pentry->name); - if (pentry->reg_num == REGNO_ANY) - Tprintf (DBG_LT0, "hwctable: check_tables: ERROR:" - " convenience && reg_num==REGNO_ANY @%d, %s\n", - cputag, pentry->name); } } } @@ -3417,17 +3134,13 @@ try_a_counter (int forKernel) return 0; /* consider this an automatic PASS */ } /* look for a valid table entry, only try valid_cpu_tables[0] */ - { - testevent = cpcx_std[forKernel][0]; - if (!testevent || !testevent->name) - { - Tprintf (0, "hwctable: WARNING: no test metric" - " available to verify counters\n"); - return 0; /* consider this an automatic PASS */ - } - if (REG_LIST_IS_EMPTY (testevent->reg_list)) - return 0; // weird - } + testevent = cpcx_std[forKernel][0]; + if (!testevent || !testevent->name) + { + Tprintf (0, "hwctable: WARNING: no test metric" + " available to verify counters\n"); + return 0; /* consider this an automatic PASS */ + } Hwcentry tmp_testevent; tmp_testevent = *testevent; /* shallow copy */ if (tmp_testevent.int_name == NULL) @@ -3436,9 +3149,6 @@ try_a_counter (int forKernel) tmp_testevent.int_name = strdup (tmp_testevent.name); } Hwcentry * test_array[1] = {&tmp_testevent}; - rc = hwcfuncs_assign_regnos (test_array, 1); /* may modify test_array */ - if (rc) - return rc; rc = test_hwcs ((const Hwcentry**) test_array, 1); if (rc == HWCFUNCS_ERROR_UNAVAIL) { @@ -3677,7 +3387,6 @@ process_ctr_def (int forKernel, hrtime_t global_min_time_nsec, if (tmp) { tmp->name = strdup (nameOnly); - regno_add (tmp, REGNO_ANY); pfound = tmp; } } @@ -3780,27 +3489,6 @@ process_ctr_def (int forKernel, hrtime_t global_min_time_nsec, GTXT ("Warning: HW counter `%s' is not program-related -- callstacks will be not be recorded for this counter\n"), uname); - /* update reg_num */ - if (!regno_is_valid (pfound, regno)) - { - char buf[1024]; - snprintf (UEbuf + strlen (UEbuf), UEsz - strlen (UEbuf), - GTXT ("For counter `%s', %s is not a valid register; valid registers: %s\n"), - nameOnly, regstr ? regstr + 1 : "?", - get_regnolist (buf, sizeof (buf), pfound->reg_list, 1)); - goto process_ctr_def_wrapup; - } - if (pret_ctr->reg_num == REGNO_ANY) - { /* table's regno is a wildcard */ - if (REG_LIST_EOL (pfound->reg_list[1])) - { - /* valid list only contains one regno, so use it */ - pret_ctr->reg_num = pfound->reg_list[0]; - } - else - pret_ctr->reg_num = regno; /* use user's selection */ - } - /* update name and int_name */ { // validate attributes @@ -4073,43 +3761,9 @@ hwc_validate_ctrs (int forKernel, Hwcentry *entries[], unsigned numctrs) char UEbuf[1024 * 5]; UEbuf[0] = 0; - /* search for obvious duplicates*/ - unsigned ii; - for (ii = 0; ii < numctrs; ii++) - { - regno_t reg_a = entries[ii]->reg_num; - if (reg_a != REGNO_ANY) - { - unsigned jj; - for (jj = ii + 1; jj < numctrs; jj++) - { - int reg_b = entries[jj]->reg_num; - if (reg_a == reg_b) - { - snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf), - GTXT ("Only one HW counter is allowed per register. The following counters use register %d: \n"), - reg_a); - for (jj = 0; jj < numctrs; jj++) - { - char buf[256]; - int reg_b = entries[jj]->reg_num; - if (reg_a == reg_b) - snprintf (UEbuf + strlen (UEbuf), sizeof (UEbuf) - strlen (UEbuf), - GTXT (" %d. %s\n"), jj + 1, - hwc_hwcentry_specd_string (buf, sizeof (buf), - entries[jj])); - } - return strdup (UEbuf); - } - } - } - } - /* test counters */ hwcfuncs_errmsg_get (NULL, 0, 1); /* enable errmsg capture */ - int hwc_rc = hwcfuncs_assign_regnos (entries, numctrs); - if (!hwc_rc) - hwc_rc = test_hwcs ((const Hwcentry**) entries, numctrs); + int hwc_rc = test_hwcs ((const Hwcentry**) entries, numctrs); if (hwc_rc) { if (cpcx_cpuver == CPC_PENTIUM_4_HT || cpcx_cpuver == CPC_PENTIUM_4) @@ -4172,15 +3826,12 @@ hwc_post_lookup (Hwcentry * pret_ctr, char *counter, char * int_name, int cpuver } else pret_ctr->int_name = strdup (counter); - if (pret_ctr->reg_num == REGNO_ANY) - pret_ctr->reg_num = regno; /* table's regno is a wildcard */ } else { /* not a standard counter */ *pret_ctr = empty_ctr; pret_ctr->int_name = strdup (counter); - pret_ctr->reg_num = regno; } /* update the name */ @@ -4456,7 +4107,7 @@ int show_regs = 0; // The register setting is available on Solaris only */ static void format_columns (char *buf, int bufsiz, char *s1, char *s2, const char *s3, - const char *s4, char *s5, const char *s6) + const char *s4, const char *s6) { // NULL strings are blanks char *blank = NTXT (""); @@ -4470,7 +4121,7 @@ format_columns (char *buf, int bufsiz, char *s1, char *s2, const char *s3, // get the lengths and target widths // (s6 can be as wide as it likes) int l1 = strlen (s1), n1 = 10, l2 = strlen (s2), n2 = 13; - int l3 = strlen (s3), n3 = 20, l4 = strlen (s4), n4 = 10, n5; + int l3 = strlen (s3), n3 = 20, l4 = strlen (s4), n4 = 10; char divide = ' '; // adjust widths, stealing from one column to help a neighbor @@ -4518,26 +4169,8 @@ format_columns (char *buf, int bufsiz, char *s1, char *s2, const char *s3, n2 = 0; } - if (show_regs) - { - // fifth column should be wide enough for regnolist - // see function get_regnolist() - if (cpcx_npics < 10) - n5 = cpcx_npics; // one char per regno - else - n5 = 16 + 3 * (cpcx_npics - 9); // spaces between regnos and some regnos are 2-char wide - // ... and be wide enough for header "regs" - if (n5 < 4) - n5 = 4; - - // print to buffer - // (don't need a space before s4 since historical precedent to have a trailing space in s3) - snprintf (buf, bufsiz, "%-*s %-*s%c%*s%*s %-*s %s", - n1, s1, n2, s2, divide, n3, s3, n4, s4, n5, s5, s6); - } - else - snprintf (buf, bufsiz, "%-*s %-*s%c%*s%*s %s", - n1, s1, n2, s2, divide, n3, s3, n4, s4, s6); + snprintf (buf, bufsiz, "%-*s %-*s%c%*s%*s %s", + n1, s1, n2, s2, divide, n3, s3, n4, s4, s6); for (int i = strlen (buf); i > 0; i--) if (buf[i] == ' ' || buf[i] == '\t') buf[i] = 0; @@ -4550,7 +4183,6 @@ static char * hwc_hwcentry_string_internal (char *buf, size_t buflen, const Hwcentry *ctr, int show_short_desc) { - char regnolist[256]; if (!buf || !buflen) return buf; if (ctr == NULL) @@ -4565,7 +4197,6 @@ hwc_hwcentry_string_internal (char *buf, size_t buflen, const Hwcentry *ctr, desc = ctr->metric ? hwc_i18n_metric (ctr) : NULL; format_columns (buf, buflen, ctr->name, ctr->int_name, hwc_memop_string (ctr->memop), timecvt_string (ctr->timecvt), - get_regnolist (regnolist, sizeof (regnolist), ctr->reg_list, 2), desc); return buf; } @@ -5157,7 +4788,7 @@ hwc_usage_internal (int forKernel, FILE *f_usage, const char *cmd, const char *d if (has_std_ctrs) { fprintf (f_usage, GTXT ("\nAliases for most useful HW counters:\n\n")); - format_columns (tmp, 1024, "alias", "raw name", "type ", "units", "regs", "description"); + format_columns (tmp, 1024, "alias", "raw name", "type ", "units", "description"); fprintf (f_usage, NTXT (" %s\n\n"), tmp); for (Hwcentry **pctr = std_ctrs; *pctr; pctr++) { @@ -5170,7 +4801,7 @@ hwc_usage_internal (int forKernel, FILE *f_usage, const char *cmd, const char *d { fprintf (f_usage, GTXT ("\nRaw HW counters:\n\n")); hwc_usage_raw_overview_sparc (f_usage, cpuver); - format_columns (tmp, 1024, "name", NULL, "type ", "units", "regs", "description"); + format_columns (tmp, 1024, "name", NULL, "type ", "units", "description"); fprintf (f_usage, NTXT (" %s\n\n"), tmp); for (Hwcentry **pctr = raw_ctrs; *pctr; pctr++) { @@ -5210,8 +4841,6 @@ static char* supported_pebs_counters[] = { }; /* callback, (see setup_cpc()) called for each valid regno/name combo */ - -/* builds rawlist,, creates and updates reg_list[] arrays in stdlist table */ static void hwc_cb (uint_t cpc_regno, const char *name) { @@ -5219,6 +4848,20 @@ hwc_cb (uint_t cpc_regno, const char *name) list_add (&unfiltered_raw, regno, name); } +static int +supported_hwc (Hwcentry *pctr) +{ + if (ABST_PLUS_BY_DEFAULT (pctr->memop) && + (cpcx_support_bitmask & SUPPORT_MEMORYSPACE_PROFILING) == 0) + return 0; + // remove specific PEBs counters when back end doesn't support sampling + if ((cpcx_support_bitmask & HWCFUNCS_SUPPORT_PEBS_SAMPLING) == 0) + for (int ii = 0; supported_pebs_counters[ii]; ii++) + if (strcmp (supported_pebs_counters[ii], pctr->name) == 0) + return 0; + return 1; +} + /* input: * forKernel: 1 - generate lists for er_kernel, 0 - generate lists for collect * @@ -5248,57 +4891,29 @@ hwc_process_raw_ctrs (int forKernel, Hwcentry ***pstd_out, // copy records from std [0] and generic [1] static input tables into table_copy[0],[1],or[2] for (int tt = 0; tt < 2; tt++) for (Hwcentry *pctr = static_tables[tt]; pctr && pctr->name; pctr++) - if (is_hidden_alias (pctr)) - list_append_shallow_copy (&table_copy[2], pctr); // hidden list - else - list_append_shallow_copy (&table_copy[tt], pctr); + { + if (!supported_hwc (pctr)) + continue; + if (is_hidden_alias (pctr)) + list_append_shallow_copy (&table_copy[2], pctr); // hidden list + else + list_append_shallow_copy (&table_copy[tt], pctr); + } // copy raw_unfiltered_in to raw_out for (int ii = 0; raw_unfiltered_in && raw_unfiltered_in[ii]; ii++) { Hwcentry *pctr = raw_unfiltered_in[ii]; - // filter out raw counters that don't work correctly - -#ifdef WORKAROUND_6231196_NIAGARA1_NO_CTR_0 - if (cpcx_cpuver == CPC_ULTRA_T1) - if (!regno_is_valid (pctr, 1)) - continue; /* Niagara can not profile on register zero; skip this */ -#endif - // remove specific PEBs counters when back end doesn't support sampling - const char *name = pctr->name; - if ((cpcx_support_bitmask & HWCFUNCS_SUPPORT_PEBS_SAMPLING) == 0 || forKernel) - { - int skip = 0; - for (int ii = 0; supported_pebs_counters[ii]; ii++) - if (strcmp (supported_pebs_counters[ii], name) == 0) - { - skip = 1; - break; - } - if (skip) - continue; - } - - Hwcentry *pnew = list_append_shallow_copy (raw_out, pctr); -#ifdef WORKAROUND_6231196_NIAGARA1_NO_CTR_0 - if (cpcx_cpuver == CPC_ULTRA_T1) - { - free (pnew->reg_list); - pnew->reg_list = NULL; - regno_add (pnew, 1); // only allow register 1 - } -#endif - } // raw_unfiltered_in + if (supported_hwc (pctr)) + list_append_shallow_copy (raw_out, pctr); + } // Scan raw counters to populate Hwcentry fields from matching static_tables entries - // Also populate reg_list for aliases found in table_copy[] for (int uu = 0; uu < raw_out->sz; uu++) { Hwcentry *praw = (Hwcentry*) raw_out->array[uu]; Hwcentry *pstd = NULL; // set if non-alias entry from std table matches char *name = praw->name; - /* in the standard counter and generic lists, - update reg_list for all matching items */ for (int tt = 0; tt < NUM_TABLES; tt++) { // std, generic, and hidden if (table_copy[tt].sz == 0) @@ -5315,24 +4930,6 @@ hwc_process_raw_ctrs (int forKernel, Hwcentry ***pstd_out, if (!is_same (name, pname, '~')) continue; - /* truncated pname matches ... */ - // check to see if table entry applies only to specific register - int specific_reg_num_only = 0; - if (pctr->reg_num != REGNO_ANY) - { - // table entry applies only to specific register - if (!regno_is_valid (praw, pctr->reg_num)) - continue; - specific_reg_num_only = 1; - } - - // Match! - // Update cpu_table_copy's supported registers - if (specific_reg_num_only) - regno_add (pctr, pctr->reg_num); - else - pctr->reg_list = praw->reg_list; - if (!is_visible_alias (pctr) && !is_hidden_alias (pctr)) { // Note: we could expand criteria to also allow aliases to set default rates for raw HWCs @@ -5366,20 +4963,6 @@ hwc_process_raw_ctrs (int forKernel, Hwcentry ***pstd_out, // prune unsupported rows from std table if (!is_visible_alias (pctr) && !is_hidden_alias (pctr)) continue; // only aliases - if (REG_LIST_IS_EMPTY (pctr->reg_list)) - { - if (is_numeric_alias (pctr)) - { -#if 1 //22844570 DTrace cpc provider does not accept numeric counter names - if (forKernel) - continue; -#endif - regno_add (pctr, REGNO_ANY); // hwcs specified by number allowed on any register - } - else - continue; - } - ptr_list *dest = (tt == 0) ? std_out : hidden_out; Hwcentry *isInList; if (pctr->short_desc == NULL) diff --git a/gprofng/src/Dbe.cc b/gprofng/src/Dbe.cc index 91a5aa5ef05..95daa727186 100644 --- a/gprofng/src/Dbe.cc +++ b/gprofng/src/Dbe.cc @@ -7121,10 +7121,7 @@ dbeGetHwcs (Hwcentry **hwcs) { Hwcentry *ctr = hwcs[i]; Vector *registers = new Vector(MAX_PICS); - regno_t *reglist = ctr->reg_list; - for (int k = 0; !REG_LIST_EOL (reglist[k]) && k < MAX_PICS; k++) - registers->store (k, reglist[k]); - + registers->store (0, REGNO_ANY); i18n->store (i, dbe_strdup (hwc_i18n_metric (ctr))); name->store (i, dbe_strdup (ctr->name)); int_name->store (i, dbe_strdup (ctr->int_name)); diff --git a/gprofng/src/collctrl.cc b/gprofng/src/collctrl.cc index ebf888c5a20..7d2b23c12ac 100644 --- a/gprofng/src/collctrl.cc +++ b/gprofng/src/collctrl.cc @@ -1361,20 +1361,6 @@ Coll_Ctrl::hwcentry_dup (Hwcentry *hnew, Hwcentry *_hwc) hnew->short_desc = strdup (_hwc->short_desc); else hnew->short_desc = NULL; - if (_hwc->reg_list != NULL) - { - hnew->reg_list = (regno_t*) malloc (sizeof (regno_t*) * MAX_PICS); - // poor way of dealing with malloc failure - if (hnew->reg_list) - { - for (int i = 0; i < MAX_PICS; i++) - { - hnew->reg_list[i] = _hwc->reg_list[i]; - if (hnew->reg_list[i] == REGNO_ANY) - break; - } - } - } } // Routine to initialize the HWC tables, set up the default experiment, etc.