From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id A0D4D3858D33 for ; Wed, 22 Feb 2023 17:06:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A0D4D3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 9129534066; Wed, 22 Feb 2023 17:06:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1677085571; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ffOvFNTM+EP/SQi+LVFHQBww6urlYwMtqB7oyO3UgcY=; b=JcnMsDb5ZjLN+JPW24/7Cf7FGOGVmMBYgTpNw82SyrjkBO6rNEmnGLBt8wpQ7DpmcGpxLK p39CspA8G61bf3ng940y2azY5P7/b2TwCQaFmyrrJnL/wCJ9/bQIcK4TuBCshPG7rrPx6K v4IMeg8gyU/+udZ1eySxa6vv/fcbwtI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1677085571; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ffOvFNTM+EP/SQi+LVFHQBww6urlYwMtqB7oyO3UgcY=; b=SqrX6/IcpBxliSVjLVihX/615S/rzTCKis8sJ8punN/lN+/nCB3H8qc738dqCNUBtfIhjZ e4xuXV2LxluqYGDQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 755E9133E0; Wed, 22 Feb 2023 17:06:11 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id S6tyG4NL9mOBYQAAMHmgww (envelope-from ); Wed, 22 Feb 2023 17:06:11 +0000 Message-ID: Date: Wed, 22 Feb 2023 18:06:27 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [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: Pedro Alves , gdb-patches@sourceware.org References: <20230221131027.29637-1-tdevries@suse.de> <5df97d91-9a28-c8b1-053e-82deb52318e4@palves.net> Content-Language: en-US Cc: Luis Machado From: Tom de Vries In-Reply-To: <5df97d91-9a28-c8b1-053e-82deb52318e4@palves.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,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 List-Id: On 2/22/23 17:12, Pedro Alves wrote: > 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? > It does for me. FWIW, doing an strace on the exec, I don't see any syscall related to time. LGTM. Thanks, - Tom > 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(-) > > 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 > +} > > base-commit: 5e39600a691e3ba76acf6ab94edb24844c2e82b7