From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id iZH8EXxPmGq/LB8AWB0awg (envelope-from ) for ; Wed, 02 Sep 2026 12:31:56 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=FCcPCC4B; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=bCJf7ftt; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=RvIynHT+; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=SJKr43WE; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 42F4A1E166; Wed, 02 Sep 2026 12:31:56 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 50FEA1E033 for ; Wed, 02 Sep 2026 12:31:55 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 78CD94B9DB6F for ; Wed, 2 Sep 2026 16:31:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 78CD94B9DB6F Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=FCcPCC4B; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=bCJf7ftt; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=RvIynHT+; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=SJKr43WE Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id 077EB4BA2E06 for ; Wed, 2 Sep 2026 16:31:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 077EB4BA2E06 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 077EB4BA2E06 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788366686; cv=none; b=wYZaGDL/4WW9GEr4O1zVeCSHHO13D/jwo13UgoiwUX9GCWEfBgXaWsZL+/jc3R7riS5TCFbg912327S3kt0LAVdcHnTAmlozEiMhKzd4JDMhTDK5IHMbvrY2HY4aQ0mhq8PSN4TkgYlWC4raZ4zjY7wek6WjipQ+l14FCqlotKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788366686; c=relaxed/simple; bh=qWek78Szv5qV7nSUOMDu8hFrfNv1Dxf7h+JZ8kz4Mmg=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature: Message-ID:Date:MIME-Version:Subject:From:To; b=h4EGnb18OuqVW0WtgloTmF0Mqlsf90uNHuUD8j9Q7AS4s74x/t1TXo9GgSSOnu3S3AC8sB5cFFpqSbkk5AWtSmZo5uq8np+njKKZIxgjMjLvIH087UD95xeDycQoUZ6dQClWfK+BcfhPEs6DsGt8aKdCDnDwUg5Opdh9MnrrkqY= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=FCcPCC4B; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=bCJf7ftt; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=RvIynHT+; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=SJKr43WE DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 077EB4BA2E06 Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 82D8C21CB2 for ; Wed, 2 Sep 2026 16:31:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788366680; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RAbk4FLMagr6y9z9tp2yP1mpq0Cah4FV7qvXCok3KVs=; b=FCcPCC4BfCjqNUd1bMG6S3wsS21teD2buXUDp3Lu1EtQNHvhLzfZ9cQoLs+AY/tRJTTqkF CRjDPxl9eOVkMsAWXmXISdBNgxPoOQWgYR+vGbeXFO6m9b4MGh8FW1HV2J7v/UcLvhARUg mngDw8PXAjCFw0bi1f/Vpmqqh5kO/iw= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788366680; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RAbk4FLMagr6y9z9tp2yP1mpq0Cah4FV7qvXCok3KVs=; b=bCJf7fttf7UzkoG7i/3oJua2jphECg6OxVNAkShdkHdXVa4+3uVExBJ902jVtsx7HNPH9H nEkrGrnQxyvjsnBw== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=RvIynHT+; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=SJKr43WE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788366676; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RAbk4FLMagr6y9z9tp2yP1mpq0Cah4FV7qvXCok3KVs=; b=RvIynHT+OtmYWIWZT1NOXcnrlbJi75h28QIEuxXsnvOIR7JlKWmAX3n7k1kYdPR68eNdY5 y4+7gjy9mnhsYiyql6KBLMUMYMFuHnN4GvfTZnuKR0PrPUHAOS6bm1ccaJ/O8TTFgrKXaS kfe2jZsisrU/YFFSI1AhTaPziyj6Fdg= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788366676; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RAbk4FLMagr6y9z9tp2yP1mpq0Cah4FV7qvXCok3KVs=; b=SJKr43WEk+Ye9+Vvdlj/IWDD5C1nStDuJrtoCl5xiGu9qae0BxgUB0s028AGOdAUJrmcWs UaK0NvnVh3/SE/BQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 5B012136E6 for ; Wed, 2 Sep 2026 16:31:16 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id f37yFFRPmGoeFAAAD6G6ig (envelope-from ) for ; Wed, 02 Sep 2026 16:31:16 +0000 Message-ID: <1abe3b5a-6f3a-4112-9338-3892c8863ceb@suse.de> Date: Wed, 2 Sep 2026 18:31:16 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PING][RFC] [gdb] Work around zero l_addr/l_ld From: Tom de Vries To: gdb-patches@sourceware.org References: <20260818071434.2121734-1-tdevries@suse.de> Content-Language: en-US In-Reply-To: <20260818071434.2121734-1-tdevries@suse.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Action: no action X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Rspamd-Queue-Id: 82D8C21CB2 X-Spamd-Result: default: False [-4.51 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; FROM_HAS_DN(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received]; MID_RHS_MATCH_FROM(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received]; DBL_BLOCKED_OPENRESOLVER(0.00)[sourceware.org:url, imap1.dmz-prg2.suse.org:rdns, imap1.dmz-prg2.suse.org:helo, suse.de:dkim, suse.de:mid] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org On 8/18/26 9:14 AM, Tom de Vries wrote: > On ppc64le-linux (AlmaLinux 9.8), I run into: > ... > FAIL: gdb.mi/mi-dlmopen.exp: still-in-use fields were all correct > ... > > While investigating this, I stumbled on this warning emitted during the > calculation of allow_dlmopen_tests: > ... > (gdb) run ^M > Starting program: allow_dlmopen_tests.x ^M > [Thread debugging using libthread_db enabled]^M > Using host libthread_db library "/lib64/libthread_db.so.1".^M > warning: .dynamic section for "/lib64/ld64.so.2" is not at the expected \ > address (wrong library or version mismatch?)^M > dlmopen debug supported.^M > ... > > The warning is mentioned in this glibc commit 88361b408b: > ... > elf: Copy l_addr/l_ld when adding ld.so to a new namespace > > When add ld.so to a new namespace, we don't actually load ld.so. We > create a new link map and refers the real one for almost everything. > Copy l_addr and l_ld from the real ld.so link map to avoid GDB warning: > > warning: .dynamic section for ".../elf/ld-linux-x86-64.so.2" is not at \ > the expected address (wrong library or version mismatch?) > > when handling shared library loaded by dlmopen. > ... > > So, AFAICT the setup is: > - the glibc package is based on v2.34 > - it contains a backport of commit a93d9e03a3 ("Extend struct r_debug to > support multiple namespaces [BZ #15971]") > - it doesn't contain a backport of commit 88361b408b ("elf: Copy l_addr/l_ld > when adding ld.so to a new namespace") > - both commits are part of v2.35 > > What happens is: > - when probing for l_addr and l_ld in svr4_solib_ops::read_lm_info, both get > the value 0 > - in svr4_solib_ops::lm_addr_check, the 0 value propagates to l_dynaddr, and > "l_addr = l_dynaddr - dynaddr" then underflows, and things go downhill from > there, resulting in the warning and eventually the FAIL. > > Fix this by replicating the missing glibc commit in > svr4_solib_ops::read_lm_info. > > I've enabled the fix only for the configuration I can test, for all others I > disabled it using "lmo.l_real_offset = -1". > > This is an RFC. My question is: is the added complexity worth the trouble for > what looks like a cornercase? > > [ FTR, in an earlier attempt I proposed to deal with the FAIL using an > xfail [1]. ] > Ping. Thanks, - Tom > Tested on ppc64le-linux and x86_64-linux. > > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33662 > > [1] https://sourceware.org/pipermail/gdb-patches/2026-July/229073.html > --- > gdb/mips-fbsd-tdep.c | 1 + > gdb/mips-netbsd-tdep.c | 1 + > gdb/solib-svr4-linux.c | 6 ++-- > gdb/solib-svr4.c | 67 +++++++++++++++++++++++++++++++----------- > gdb/solib-svr4.h | 4 +++ > 5 files changed, 60 insertions(+), 19 deletions(-) > > diff --git a/gdb/mips-fbsd-tdep.c b/gdb/mips-fbsd-tdep.c > index ecad943e8fa..65278937415 100644 > --- a/gdb/mips-fbsd-tdep.c > +++ b/gdb/mips-fbsd-tdep.c > @@ -571,6 +571,7 @@ mips_fbsd_lp64_solib_ops::fetch_link_map_offsets () const > lmo.l_ld_offset = 24; > lmo.l_next_offset = 32; > lmo.l_prev_offset = 40; > + lmo.l_real_offset = -1; > } > > return lmp; > diff --git a/gdb/mips-netbsd-tdep.c b/gdb/mips-netbsd-tdep.c > index a5bcde20e46..79b1a3cedee 100644 > --- a/gdb/mips-netbsd-tdep.c > +++ b/gdb/mips-netbsd-tdep.c > @@ -333,6 +333,7 @@ mips_nbsd_ilp32_svr4_solib_ops::fetch_link_map_offsets () const > lmo.l_ld_offset = 12; > lmo.l_next_offset = 16; > lmo.l_prev_offset = 20; > + lmo.l_real_offset = -1; > } > > return lmp; > diff --git a/gdb/solib-svr4-linux.c b/gdb/solib-svr4-linux.c > index 2d36adcca73..e67f3036df7 100644 > --- a/gdb/solib-svr4-linux.c > +++ b/gdb/solib-svr4-linux.c > @@ -53,6 +53,7 @@ linux_ilp32_svr4_solib_ops::fetch_link_map_offsets () const > lmo.l_ld_offset = 8; > lmo.l_next_offset = 12; > lmo.l_prev_offset = 16; > + lmo.l_real_offset = -1; > } > > return lmp; > @@ -85,13 +86,14 @@ linux_lp64_svr4_solib_ops::fetch_link_map_offsets () const > lmo.r_ldsomap_offset = -1; > lmo.r_next_offset = 40; > > - /* Everything we need is in the first 40 bytes. */ > - lmo.link_map_size = 40; > + /* Everything we need is in the first 48 bytes. */ > + lmo.link_map_size = 48; > lmo.l_addr_offset = 0; > lmo.l_name_offset = 8; > lmo.l_ld_offset = 16; > lmo.l_next_offset = 24; > lmo.l_prev_offset = 32; > + lmo.l_real_offset = 40; > } > > return lmp; > diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c > index 8e3de4d3ea1..02a20f000d4 100644 > --- a/gdb/solib-svr4.c > +++ b/gdb/solib-svr4.c > @@ -189,27 +189,58 @@ svr4_solib_ops::read_lm_info (CORE_ADDR lm_addr, CORE_ADDR debug_base) const > gdb::byte_vector lm (lmo->link_map_size); > > if (target_read_memory (lm_addr, lm.data (), lmo->link_map_size) != 0) > - warning (_("Error reading shared library list entry at %s"), > - paddress (current_inferior ()->arch (), lm_addr)); > - else > { > - type *ptr_type > - = builtin_type (current_inferior ()->arch ())->builtin_data_ptr; > + warning (_("Error reading shared library list entry at %s"), > + paddress (current_inferior ()->arch (), lm_addr)); > + return lm_info; > + } > + > + type *ptr_type > + = builtin_type (current_inferior ()->arch ())->builtin_data_ptr; > + > + lm_info = std::make_unique (debug_base); > + lm_info->lm_addr = lm_addr; > > - lm_info = std::make_unique (debug_base); > - lm_info->lm_addr = lm_addr; > - > - lm_info->l_addr_inferior = extract_typed_address (&lm[lmo->l_addr_offset], > - ptr_type); > - lm_info->l_ld = extract_typed_address (&lm[lmo->l_ld_offset], ptr_type); > - lm_info->l_next = extract_typed_address (&lm[lmo->l_next_offset], > - ptr_type); > - lm_info->l_prev = extract_typed_address (&lm[lmo->l_prev_offset], > - ptr_type); > - lm_info->l_name = extract_typed_address (&lm[lmo->l_name_offset], > - ptr_type); > + lm_info->l_addr_inferior > + = extract_typed_address (&lm[lmo->l_addr_offset], ptr_type); > + lm_info->l_ld = extract_typed_address (&lm[lmo->l_ld_offset], ptr_type); > + lm_info->l_next = extract_typed_address (&lm[lmo->l_next_offset], ptr_type); > + lm_info->l_prev = extract_typed_address (&lm[lmo->l_prev_offset], ptr_type); > + lm_info->l_name = extract_typed_address (&lm[lmo->l_name_offset], ptr_type); > + > + if (lmo->l_real_offset == -1) > + return lm_info; > + CORE_ADDR l_real = extract_typed_address (&lm[lmo->l_real_offset], ptr_type); > + > + if (l_real == lm_addr) > + return lm_info; > + > + /* We have l_real != lm_addr, so l_real points to the link map of ld.so. */ > + > + if (!(lm_info->l_addr_inferior == 0 && lm_info->l_ld == 0)) > + return lm_info; > + > + /* We have l_addr_inferior == 0 and l_ld == 0. This can happen with a glibc > + that: > + - has commit a93d9e03a3 ("Extend struct r_debug to support multiple > + namespaces [BZ #15971]"), but > + - misses commit 88361b408b ("elf: Copy l_addr/l_ld when adding ld.so to a > + new namespace"). > + This seems to be the case at least for the alma linux 9.8 BaseOS version, > + which uses glibc v2.34 and backports only the first commit. > + Fix / work around this here by replicating the copy of ld_addr/l_ld. */ > + > + if (target_read_memory (l_real, lm.data (), lmo->link_map_size) != 0) > + { > + warning (_("Error reading shared library list entry at %s"), > + paddress (current_inferior ()->arch (), l_real)); > + return lm_info; > } > > + lm_info->l_addr_inferior = extract_typed_address (&lm[lmo->l_addr_offset], > + ptr_type); > + lm_info->l_ld = extract_typed_address (&lm[lmo->l_ld_offset], ptr_type); > + > return lm_info; > } > > @@ -3537,6 +3568,7 @@ ilp32_svr4_solib_ops::fetch_link_map_offsets () const > lmo.l_ld_offset = 8; > lmo.l_next_offset = 12; > lmo.l_prev_offset = 16; > + lmo.l_real_offset = -1; > } > > return lmp; > @@ -3586,6 +3618,7 @@ lp64_svr4_solib_ops::fetch_link_map_offsets () const > lmo.l_ld_offset = 16; > lmo.l_next_offset = 24; > lmo.l_prev_offset = 32; > + lmo.l_real_offset = -1; > } > > return lmp; > diff --git a/gdb/solib-svr4.h b/gdb/solib-svr4.h > index 3078a092778..83d65842faa 100644 > --- a/gdb/solib-svr4.h > +++ b/gdb/solib-svr4.h > @@ -207,6 +207,10 @@ struct link_map_offsets > > /* Offset to l_name field in struct link_map. */ > int l_name_offset; > + > + /* Offset to l_real field in struct link_map. Available since glibc > + version v2.3.4. */ > + int l_real_offset; > }; > > /* Set the gdbarch methods for SVR4 systems. */ > > base-commit: e189bfd9b492a0361a37858b9a4709a52a92c803