From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id 35424385022E for ; Wed, 7 Sep 2022 08:01:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 35424385022E 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 2F88833B03; Wed, 7 Sep 2022 08:01:06 +0000 (UTC) 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 0EB9E13A66; Wed, 7 Sep 2022 08:01:06 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id T/dcAsJPGGPbCQAAMHmgww (envelope-from ); Wed, 07 Sep 2022 08:01:06 +0000 Message-ID: <7b6f6489-b2df-1901-761c-3e02965003dc@suse.de> Date: Wed, 7 Sep 2022 10:01:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Subject: Re: [PATCH][gdb/testsuite] Use prototype to call libc functions Content-Language: en-US To: gdb-patches@sourceware.org References: <20220905122706.GA23594@delia.home> Cc: Mark Wielaard , Kevin Buettner From: Tom de Vries In-Reply-To: <20220905122706.GA23594@delia.home> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-14.9 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, 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, 07 Sep 2022 08:01:09 -0000 On 9/5/22 14:27, Tom de Vries via Gdb-patches wrote: > Hi, > > On openSUSE Tumbleweed (using glibc 2.36), I run into: > ... > (gdb) print /d (int) munmap (4198400, 4096)^M > Invalid cast.^M > (gdb) FAIL: gdb.base/break-main-file-remove-fail.exp: cmdline: \ > get integer valueof "(int) munmap (4198400, 4096)" > ... > > The problem is that after starting the executable, the symbol has type > "void (*) (void)": > ... > (gdb) p munmap > $1 = {} 0x401030 > (gdb) start > ... > (gdb) p munmap > $2 = {void (void)} 0x7ffff7feb9a0 <__GI_munmap> > ... > which causes the "Invalid cast" error. > > Looking at the debug info for glibc for symbol __GI_munmap: > ... > <0><189683>: Abbrev Number: 1 (DW_TAG_compile_unit) > <189691> DW_AT_name : ../sysdeps/unix/syscall-template.S > <189699> DW_AT_producer : GNU AS 2.39.0 > <1><1896ae>: Abbrev Number: 2 (DW_TAG_subprogram) > <1896af> DW_AT_name : __GI___munmap > <1896b3> DW_AT_external : 1 > <1896b4> DW_AT_low_pc : 0x10cad0 > <1896bc> DW_AT_high_pc : 37 > ... > that's probably caused by this bit (or similar bits for other munmap aliases). > > This is fixed in gas on trunk by commit 5578fbf672e ("GAS: Add a return type > tag to DWARF DIEs generated for function symbols"). > > Work around this (for say gas 2.39) by explicitly specifying the prototype for > munmap. > > Likewise for getpid in a couple of other test-cases. > > Tested on x86_64-linux. > > Any comments? > I've pushed this, given that it fixes gdb-rawhide-x86_64 buildbot. Thanks, - Tom > [gdb/testsuite] Use prototype to call libc functions > > --- > gdb/testsuite/gdb.base/break-main-file-remove-fail.exp | 4 +++- > gdb/testsuite/gdb.base/dprintf-detach.exp | 2 +- > gdb/testsuite/gdb.base/info-os.exp | 2 +- > gdb/testsuite/gdb.threads/siginfo-threads.exp | 2 +- > 4 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp b/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp > index 41c3114aa05..444b1d33ace 100644 > --- a/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp > +++ b/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp > @@ -87,7 +87,9 @@ proc test_remove_bp { initial_load } { > # should warn the user about it. > set pagesize [get_integer_valueof "pg_size" 0] > set align_addr [expr $bp_addr - $bp_addr % $pagesize] > - set munmap [get_integer_valueof "(int) munmap ($align_addr, $pagesize)" -1] > + set munmap_prototype "int (*) (void *, size_t)" > + set munmap_expr "(($munmap_prototype) munmap) ($align_addr, $pagesize)" > + set munmap [get_integer_valueof $munmap_expr -1] > > if {$munmap != 0} { > unsupported "can't munmap foo's page" > diff --git a/gdb/testsuite/gdb.base/dprintf-detach.exp b/gdb/testsuite/gdb.base/dprintf-detach.exp > index 692048f82a3..b6da01a2845 100644 > --- a/gdb/testsuite/gdb.base/dprintf-detach.exp > +++ b/gdb/testsuite/gdb.base/dprintf-detach.exp > @@ -52,7 +52,7 @@ proc dprintf_detach_test { breakpoint_always_inserted dprintf_style disconnected > # Get PID of test program. > set inferior_pid -1 > set test "get inferior process ID" > - gdb_test_multiple "call (int) getpid ()" $test { > + gdb_test_multiple "call ((int (*) (void)) getpid) ()" $test { > -re ".* = ($decimal).*$gdb_prompt $" { > set inferior_pid $expect_out(1,string) > pass $test > diff --git a/gdb/testsuite/gdb.base/info-os.exp b/gdb/testsuite/gdb.base/info-os.exp > index 7967e2e43df..d12f8750a9c 100644 > --- a/gdb/testsuite/gdb.base/info-os.exp > +++ b/gdb/testsuite/gdb.base/info-os.exp > @@ -39,7 +39,7 @@ if ![runto_main] then { > # Get PID of test program. > set inferior_pid "" > set test "get inferior process ID" > -gdb_test_multiple "call (int) getpid()" $test { > +gdb_test_multiple "call ((int (*) (void)) getpid) ()" $test { > -re ".* = ($decimal).*$gdb_prompt $" { > set inferior_pid $expect_out(1,string) > pass $test > diff --git a/gdb/testsuite/gdb.threads/siginfo-threads.exp b/gdb/testsuite/gdb.threads/siginfo-threads.exp > index f10c7fdcd25..8dd34b753a2 100644 > --- a/gdb/testsuite/gdb.threads/siginfo-threads.exp > +++ b/gdb/testsuite/gdb.threads/siginfo-threads.exp > @@ -41,7 +41,7 @@ gdb_breakpoint [gdb_get_line_number "break-at-exit"] > > set test "get pid" > set pid "" > -gdb_test_multiple "p (int) getpid ()" $test { > +gdb_test_multiple "p ((int (*) (void))getpid) ()" $test { > -re " = (\[0-9\]+)\r\n$gdb_prompt $" { > set pid $expect_out(1,string) > pass $test