From patchwork Wed Feb 22 16:12:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 65458 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 412EB38582B7 for ; Wed, 22 Feb 2023 16:12:18 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by sourceware.org (Postfix) with ESMTPS id 8EB9A3858D33 for ; Wed, 22 Feb 2023 16:12:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8EB9A3858D33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wm1-f51.google.com with SMTP id p26so6078079wmc.4 for ; Wed, 22 Feb 2023 08:12:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:to:subject :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LivhX3wcDvug4eBOCWbgv4VToLLw3YMfQ8hvRBnRu20=; b=g3I3ZLNjf5J+xn36jifpsYVbpn54DWvbXUne9/Q5wQ0HhP/vD4o/cnd1yDSxyLba3H wOhx0/jRBt1pnBSYPb+RXLOWEJEnKYxqCksLvIUlfOi94hnLIXc2lb1Z88g8I/Ak69Af JPz/VXz866ZQAO7/Zt5xwIERQxb2vxQoA5I83j89tGHSGnYzuCVyTmlOsyhLa8L6tLIw O9ruOLb84hTR+hY2e4FnJVGopLLJ+xU+ISx7qA6vDmclLt7+Q6ZVNezETg+sB5oXkYg+ UsAs7YO8tSJT++SghliAsaj3qG7UqW9zCxwtTpF9v7bCydHkFo3NzKYfu20a48MoSaRH Ni5Q== X-Gm-Message-State: AO0yUKXQckWMhAct4KJBIo8EbOATZJE/J2butdRwtIT50Ms9gv2aMs3K xLGgg5C+yDHu3ME9gGboM0r3qR7vaNoAhg== X-Google-Smtp-Source: AK7set8q0ZrbryHNy6hKjVGUXfVbXM8QsXYS7RYHlAyObeGJsr/eSLaUbj3gmRE8VRMGt3/fpqqd+A== X-Received: by 2002:a05:600c:30ca:b0:3e9:85e8:da4 with SMTP id h10-20020a05600c30ca00b003e985e80da4mr1161874wmn.22.1677082322148; Wed, 22 Feb 2023 08:12:02 -0800 (PST) Received: from ?IPv6:2001:8a0:f92b:9e00::1fe? ([2001:8a0:f92b:9e00::1fe]) by smtp.gmail.com with ESMTPSA id 26-20020a05600c229a00b003de2fc8214esm8160617wmf.20.2023.02.22.08.12.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 22 Feb 2023 08:12:01 -0800 (PST) Subject: [PATCH] gdb.reverse/time-reverse.exp: test both time syscall and C time function (was: Re: [pushed] [gdb/testsuite] Require syscall time in gdb.reverse/time-reverse.exp) To: Tom de Vries , gdb-patches@sourceware.org References: <20230221131027.29637-1-tdevries@suse.de> From: Pedro Alves Message-ID: <5df97d91-9a28-c8b1-053e-82deb52318e4@palves.net> Date: Wed, 22 Feb 2023 16:12:00 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20230221131027.29637-1-tdevries@suse.de> Content-Language: en-US X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, 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: 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: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" On 2023-02-21 1:10 p.m., Tom de Vries via Gdb-patches wrote: > On aarch64-linux, I run into: > ... > Running gdb.reverse/time-reverse.exp ... > gdb compile failed, gdb.reverse/time-reverse.c: In function 'main': > gdb.reverse/time-reverse.c:39:12: error: 'SYS_time' undeclared \ > (first use in this function); did you mean 'SYS_times'? > syscall (SYS_time, &time_global); > ^~~~~~~~ > SYS_times > gdb.reverse/time-reverse.c:39:12: note: each undeclared identifier is \ > reported only once for each function it appears in > UNTESTED: gdb.reverse/time-reverse.exp: failed to prepare > ... > > Fix this by adding a new proc have_syscall, and requiring syscall time, such > that we have instead: > ... > UNSUPPORTED: gdb.reverse/time-reverse.exp: require failed: \ > expr [have_syscall time] > ... > > Tested on x86_64-linux and aarch64-linux. I think the patch below would be even better. Does it work on aarch64? From 433d6856be51a9df39e0285af9ae1520af59346a Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 22 Feb 2023 15:40:58 +0000 Subject: [PATCH] gdb.reverse/time-reverse.exp: test both time syscall and C time function Instead of only testing this on systems that have a SYS_time syscall, test it everywhere using the time(2) C function, and in addition, run the tests again using the SYS_time syscall. The C variant ensures that if some platform uses some syscall we are not aware of yet, we'll still exercise it, and likely fail, at which point we should teach GDB about the syscall. The explicit syscall variant is useful on platforms where the C function does not call a syscall at all by default, e.g., on some systems the C time function wraps an implementation provided by the vDSO. Change-Id: Id4b755d76577d02c46b8acbfa249d9c31b587633 --- gdb/testsuite/gdb.reverse/time-reverse.c | 8 ++- gdb/testsuite/gdb.reverse/time-reverse.exp | 71 +++++++++++++++------- 2 files changed, 57 insertions(+), 22 deletions(-) base-commit: 5e39600a691e3ba76acf6ab94edb24844c2e82b7 diff --git a/gdb/testsuite/gdb.reverse/time-reverse.c b/gdb/testsuite/gdb.reverse/time-reverse.c index 668fb102ad2..43f5762d447 100644 --- a/gdb/testsuite/gdb.reverse/time-reverse.c +++ b/gdb/testsuite/gdb.reverse/time-reverse.c @@ -20,6 +20,12 @@ #include #include +#ifdef USE_SYSCALL +# define my_time(TLOC) syscall (SYS_time, &time_global) +#else +# define my_time(TLOC) time (TLOC) +#endif + void marker1 (void) { @@ -36,7 +42,7 @@ int main (void) { marker1 (); - syscall (SYS_time, &time_global); + my_time (&time_global); marker2 (); return 0; } diff --git a/gdb/testsuite/gdb.reverse/time-reverse.exp b/gdb/testsuite/gdb.reverse/time-reverse.exp index befda65d836..91f9911c33a 100644 --- a/gdb/testsuite/gdb.reverse/time-reverse.exp +++ b/gdb/testsuite/gdb.reverse/time-reverse.exp @@ -23,33 +23,62 @@ require supports_reverse standard_testfile -require {expr [have_syscall time]} +# MODE is either "syscall" for testing the time syscall explicitly, or +# "c" for testing the C time(2) function. +proc test {mode} { + set options {debug} -if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { - return -1 -} + if {$mode == "syscall"} { + lappend options additional_flags=-DUSE_SYSCALL + } elseif {$mode != "c"} { + error "unrecognized mode: $mode" + } -runto_main + if { [prepare_for_testing "failed to prepare" $::testfile-$mode $::srcfile $options] } { + return + } -if [supports_process_record] { - # Activate process record/replay - gdb_test_no_output "record" "turn on process record" -} + runto_main + + if [supports_process_record] { + # Activate process record/replay + gdb_test_no_output "record" "turn on process record" + } + + gdb_test "break marker2" \ + "Breakpoint $::decimal at $::hex: file .*$::srcfile, line $::decimal.*" \ + "set breakpoint at marker2" + + gdb_continue_to_breakpoint "marker2" ".*$::srcfile:.*" -gdb_test "break marker2" \ - "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \ - "set breakpoint at marker2" + gdb_test "break marker1" \ + "Breakpoint $::decimal at $::hex: file .*$::srcfile, line $::decimal.*" \ + "set breakpoint at marker1" -gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*" + gdb_test "reverse-continue" ".*$::srcfile:$::decimal.*" "reverse to marker1" -gdb_test "break marker1" \ - "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \ - "set breakpoint at marker1" + # If the variable was recorded properly, the old contents (-1) + # will be remembered. If not, new contents (current time) will be + # used, and the test will fail. -gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1" + gdb_test "print time_global" ".* = -1" "check time record" +} -# If the variable was recorded properly on syscall, the old contents (-1) -# will be remembered. If not, new contents (current time) will be used, -# and the test will fail. +# Test both using the syscall explicitly, and using the time(2) C +# function. +# +# The C variant ensures that if some platform uses some syscall we are +# not aware of yet, we'll still exercise it (and likely fail). +# +# The explicit syscall variant is useful on platforms where the C +# function does not call a syscall at all by default, e.g., on some +# systems the C time function wraps an implementation provided by the +# vDSO. -gdb_test "print time_global" ".* = -1" "check time record" +foreach_with_prefix mode {syscall c} { + if {$mode == "syscall" && ![have_syscall time]} { + continue + } + + test $mode +}