From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id EE3F1383128D for ; Wed, 25 May 2022 22:37:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EE3F1383128D Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 24PJjXMm003411; Wed, 25 May 2022 22:37:23 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3g9pmn03d8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 25 May 2022 22:37:23 +0000 Received: from m0098410.ppops.net (m0098410.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 24PMakWn000996; Wed, 25 May 2022 22:37:22 GMT Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3g9pmn03cv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 25 May 2022 22:37:22 +0000 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 24PManWe008882; Wed, 25 May 2022 22:37:20 GMT Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by ppma04ams.nl.ibm.com with ESMTP id 3g93v01qt3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 25 May 2022 22:37:20 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 24PMbFGH19530142 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 May 2022 22:37:15 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 49D73A405F; Wed, 25 May 2022 22:37:15 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DF307A4057; Wed, 25 May 2022 22:37:14 +0000 (GMT) Received: from heavy.lan (unknown [9.171.15.184]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Wed, 25 May 2022 22:37:14 +0000 (GMT) From: Ilya Leoshkevich To: Tom Tromey Cc: Ulrich Weigand , Andreas Arnez , Andrew Burgess , Pedro Alves , gdb-patches@sourceware.org, Ilya Leoshkevich Subject: [PATCH 4/5] gdb.base/: Introduce jit-protocol-util.h Date: Thu, 26 May 2022 00:37:10 +0200 Message-Id: <20220525223711.845475-5-iii@linux.ibm.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220525223711.845475-1-iii@linux.ibm.com> References: <20220525223711.845475-1-iii@linux.ibm.com> X-TM-AS-GCONF: 00 X-Proofpoint-GUID: SaV-5p9siBtdFbzXXCmiUfViqHvb51NW X-Proofpoint-ORIG-GUID: eNefBkbN0v_eJ3S1-qTUNtYDaDHtlSBY Content-Transfer-Encoding: 8bit X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.874,Hydra:6.0.486,FMLib:17.11.64.514 definitions=2022-05-25_07,2022-05-25_02,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 adultscore=0 lowpriorityscore=0 mlxscore=0 malwarescore=0 bulkscore=0 mlxlogscore=999 phishscore=0 suspectscore=0 clxscore=1015 spamscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2204290000 definitions=main-2205250104 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 May 2022 22:37:27 -0000 jit-elf-fork-main, jit-elf-main and jit-reader-host use the same boilerplate to register and unregister JITed code. Move it to a new header that can be shared with performance tests. --- gdb/testsuite/gdb.base/jit-elf-fork-main.c | 37 ++--------- gdb/testsuite/gdb.base/jit-elf-main.c | 37 ++--------- gdb/testsuite/gdb.base/jit-protocol-util.h | 74 ++++++++++++++++++++++ gdb/testsuite/gdb.base/jit-reader-host.c | 8 +-- 4 files changed, 84 insertions(+), 72 deletions(-) create mode 100644 gdb/testsuite/gdb.base/jit-protocol-util.h diff --git a/gdb/testsuite/gdb.base/jit-elf-fork-main.c b/gdb/testsuite/gdb.base/jit-elf-fork-main.c index 45792622548..96fadaa57b7 100644 --- a/gdb/testsuite/gdb.base/jit-elf-fork-main.c +++ b/gdb/testsuite/gdb.base/jit-elf-fork-main.c @@ -29,8 +29,8 @@ #include #include -#include "jit-protocol.h" #include "jit-elf-util.h" +#include "jit-protocol-util.h" static void usage (void) @@ -77,17 +77,7 @@ main (int argc, char *argv[]) struct jit_code_entry *const entry = calloc (1, sizeof (*entry)); entry->symfile_addr = (const char *)addr; entry->symfile_size = obj_size; - entry->prev_entry = __jit_debug_descriptor.relevant_entry; - __jit_debug_descriptor.relevant_entry = entry; - - if (entry->prev_entry != NULL) - entry->prev_entry->next_entry = entry; - else - __jit_debug_descriptor.first_entry = entry; - - /* Notify GDB. */ - __jit_debug_descriptor.action_flag = JIT_REGISTER; - __jit_debug_register_code (); + jit_push_back (entry); if (jit_function () != 42) { @@ -103,27 +93,8 @@ main (int argc, char *argv[]) i = 0; /* break after fork */ /* Now unregister them all in reverse order. */ - while (__jit_debug_descriptor.relevant_entry != NULL) - { - struct jit_code_entry *const entry = - __jit_debug_descriptor.relevant_entry; - struct jit_code_entry *const prev_entry = entry->prev_entry; - - if (prev_entry != NULL) - { - prev_entry->next_entry = NULL; - entry->prev_entry = NULL; - } - else - __jit_debug_descriptor.first_entry = NULL; - - /* Notify GDB. */ - __jit_debug_descriptor.action_flag = JIT_UNREGISTER; - __jit_debug_register_code (); - - __jit_debug_descriptor.relevant_entry = prev_entry; - free (entry); - } + while (!jit_empty ()) + free (jit_pop_back ()); return 0; /* break before return */ } diff --git a/gdb/testsuite/gdb.base/jit-elf-main.c b/gdb/testsuite/gdb.base/jit-elf-main.c index 948530f3197..8f482748ee5 100644 --- a/gdb/testsuite/gdb.base/jit-elf-main.c +++ b/gdb/testsuite/gdb.base/jit-elf-main.c @@ -29,8 +29,8 @@ #include #include -#include "jit-protocol.h" #include "jit-elf-util.h" +#include "jit-protocol-util.h" static void usage (void) @@ -96,17 +96,7 @@ MAIN (int argc, char *argv[]) struct jit_code_entry *const entry = calloc (1, sizeof (*entry)); entry->symfile_addr = (const char *)addr; entry->symfile_size = obj_size; - entry->prev_entry = __jit_debug_descriptor.relevant_entry; - __jit_debug_descriptor.relevant_entry = entry; - - if (entry->prev_entry != NULL) - entry->prev_entry->next_entry = entry; - else - __jit_debug_descriptor.first_entry = entry; - - /* Notify GDB. */ - __jit_debug_descriptor.action_flag = JIT_REGISTER; - __jit_debug_register_code (); + jit_push_back (entry); if (jit_function () != 42) { @@ -118,27 +108,8 @@ MAIN (int argc, char *argv[]) WAIT_FOR_GDB; i = 0; /* gdb break here 1 */ /* Now unregister them all in reverse order. */ - while (__jit_debug_descriptor.relevant_entry != NULL) - { - struct jit_code_entry *const entry = - __jit_debug_descriptor.relevant_entry; - struct jit_code_entry *const prev_entry = entry->prev_entry; - - if (prev_entry != NULL) - { - prev_entry->next_entry = NULL; - entry->prev_entry = NULL; - } - else - __jit_debug_descriptor.first_entry = NULL; - - /* Notify GDB. */ - __jit_debug_descriptor.action_flag = JIT_UNREGISTER; - __jit_debug_register_code (); - - __jit_debug_descriptor.relevant_entry = prev_entry; - free (entry); - } + while (!jit_empty ()) + free (jit_pop_back ()); WAIT_FOR_GDB; return 0; /* gdb break here 2 */ } diff --git a/gdb/testsuite/gdb.base/jit-protocol-util.h b/gdb/testsuite/gdb.base/jit-protocol-util.h new file mode 100644 index 00000000000..d0a59518429 --- /dev/null +++ b/gdb/testsuite/gdb.base/jit-protocol-util.h @@ -0,0 +1,74 @@ +/* This test program is part of GDB, the GNU debugger. + + 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 . */ + +/* Frequently used functions for testing JITed objects. */ + +#ifndef JIT_PROTOCOL_UTIL_H +#define JIT_PROTOCOL_UTIL_H + +#include "jit-protocol.h" +#include + +/* Return whether there are no registered JITed objects. */ +static int +jit_empty (void) +{ + return __jit_debug_descriptor.relevant_entry == NULL; +} + +/* Register JITed object. symfile_addr and symfile_size must be set. */ +static void +jit_push_back (struct jit_code_entry *entry) +{ + entry->prev_entry = __jit_debug_descriptor.relevant_entry; + __jit_debug_descriptor.relevant_entry = entry; + + if (entry->prev_entry != NULL) + entry->prev_entry->next_entry = entry; + else + __jit_debug_descriptor.first_entry = entry; + + /* Notify GDB. */ + __jit_debug_descriptor.action_flag = JIT_REGISTER; + __jit_debug_register_code (); +} + +/* Unregister the last registered JITed object. */ +static struct jit_code_entry * +jit_pop_back (void) +{ + struct jit_code_entry *const entry = __jit_debug_descriptor.relevant_entry; + struct jit_code_entry *const prev_entry = entry->prev_entry; + + if (prev_entry != NULL) + { + prev_entry->next_entry = NULL; + entry->prev_entry = NULL; + } + else + __jit_debug_descriptor.first_entry = NULL; + + /* Notify GDB. */ + __jit_debug_descriptor.action_flag = JIT_UNREGISTER; + __jit_debug_register_code (); + + __jit_debug_descriptor.relevant_entry = prev_entry; + + return entry; +} + +#endif /* JIT_PROTOCOL_UTIL_H */ diff --git a/gdb/testsuite/gdb.base/jit-reader-host.c b/gdb/testsuite/gdb.base/jit-reader-host.c index 0cca894a3a5..65f77b981d6 100644 --- a/gdb/testsuite/gdb.base/jit-reader-host.c +++ b/gdb/testsuite/gdb.base/jit-reader-host.c @@ -24,8 +24,8 @@ #include #include JIT_READER_H /* Please see jit-reader.exp for an explanation. */ +#include "jit-protocol-util.h" #include "jit-reader-host.h" -#include "jit-protocol.h" struct jit_code_entry only_entry; @@ -85,11 +85,7 @@ main (int argc, char **argv) only_entry.symfile_addr = symfile; only_entry.symfile_size = sizeof (struct jithost_abi); - __jit_debug_descriptor.first_entry = &only_entry; - __jit_debug_descriptor.relevant_entry = &only_entry; - __jit_debug_descriptor.action_flag = JIT_REGISTER; - __jit_debug_descriptor.version = 1; - __jit_debug_register_code (); + jit_push_back (&only_entry); function_stack_mangle (); function_add (5, 6); -- 2.35.3