From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from outpost1.zedat.fu-berlin.de (outpost1.zedat.fu-berlin.de [130.133.4.66]) by sourceware.org (Postfix) with ESMTPS id 48F883858D1E for ; Wed, 4 Jan 2023 09:26:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 48F883858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=physik.fu-berlin.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=zedat.fu-berlin.de Received: from inpost2.zedat.fu-berlin.de ([130.133.4.69]) by outpost.zedat.fu-berlin.de (Exim 4.95) with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (envelope-from ) id 1pD022-0014gU-Qx; Wed, 04 Jan 2023 10:25:58 +0100 Received: from p57bd9ae3.dip0.t-ipconnect.de ([87.189.154.227] helo=[192.168.178.81]) by inpost2.zedat.fu-berlin.de (Exim 4.95) with esmtpsa (TLS1.3) tls TLS_AES_128_GCM_SHA256 (envelope-from ) id 1pD022-001Uqq-Ki; Wed, 04 Jan 2023 10:25:58 +0100 Message-ID: <61cb548d-f5ee-bd6c-6d5f-b80e10f4be9e@physik.fu-berlin.de> Date: Wed, 4 Jan 2023 10:25:57 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: Update on the glibc segfault issue on Alpha Content-Language: en-US To: Adhemerval Zanella Netto , "debian-alpha@lists.debian.org" Cc: gentoo-alpha@lists.gentoo.org, GNU C Library , Florian Weimer References: <999879fc-9cb3-1efa-165b-36a5418f2e41@physik.fu-berlin.de> <86f86d4e-b9d5-1caf-a5ac-018bb95b38bc@linaro.org> From: John Paul Adrian Glaubitz In-Reply-To: <86f86d4e-b9d5-1caf-a5ac-018bb95b38bc@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Original-Sender: glaubitz@physik.fu-berlin.de X-Originating-IP: 87.189.154.227 X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,JMQ_SPF_NEUTRAL,KAM_DMARC_STATUS,NICE_REPLY_A,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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: Hi Adhemerval! On 1/3/23 13:09, Adhemerval Zanella Netto wrote: > Thanks, this commits helps narrow down the issue. The 73fc4e28b9464f0e refactor did not > add the GL(dl_phdr) and GL(dl_phnum) for static case, relying on the __ehdr_start symbol > to get the correct values. > > The issue is for some archs, alpha for instance, the hidden weak reference is not making > the static linker to define the __ehdr_start address correctly: it is being set to 0 and > thus GL(dl_phdr) and GL(dl_phnum) are set to invalid values. > > And I am not sure if the hidden weak __ehdr_start does work on all architectures, so I > think it would be safer to just restore the previous behavior to setup GL(dl_phdr) and > GL(dl_phnum) for static and we can simplify __ehdr_start fallback case to not use > a weak ref (as for PIE). I am checking if the following patch trigger any regression, > at least for alpha it fixes the static failures: > > diff --git a/csu/libc-start.c b/csu/libc-start.c > index 543560f36c..63a3eceaea 100644 > --- a/csu/libc-start.c > +++ b/csu/libc-start.c > @@ -271,18 +271,10 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), > So we can set up _dl_phdr and _dl_phnum even without any > information from auxv. */ > > - extern const ElfW(Ehdr) __ehdr_start > -# if BUILD_PIE_DEFAULT > - __attribute__ ((visibility ("hidden"))); > -# else > - __attribute__ ((weak, visibility ("hidden"))); > - if (&__ehdr_start != NULL) > -# endif > - { > - assert (__ehdr_start.e_phentsize == sizeof *GL(dl_phdr)); > - GL(dl_phdr) = (const void *) &__ehdr_start + __ehdr_start.e_phoff; > - GL(dl_phnum) = __ehdr_start.e_phnum; > - } > + extern const ElfW(Ehdr) __ehdr_start attribute_hidden; > + assert (__ehdr_start.e_phentsize == sizeof *GL(dl_phdr)); > + GL(dl_phdr) = (const void *) &__ehdr_start + __ehdr_start.e_phoff; > + GL(dl_phnum) = __ehdr_start.e_phnum; > } > > __tunables_init (__environ); > diff --git a/sysdeps/unix/sysv/linux/dl-parse_auxv.h b/sysdeps/unix/sysv/linux/dl-parse_auxv.h > index bf9374371e..5913c9d6e5 100644 > --- a/sysdeps/unix/sysv/linux/dl-parse_auxv.h > +++ b/sysdeps/unix/sysv/linux/dl-parse_auxv.h > @@ -56,6 +56,10 @@ void _dl_parse_auxv (ElfW(auxv_t) *av, dl_parse_auxv_t auxv_values) > if (GLRO(dl_sysinfo_dso) != NULL) > GLRO(dl_sysinfo) = auxv_values[AT_SYSINFO]; > #endif > +#ifndef SHARED > + GL(dl_phdr) = (void*) auxv_values[AT_PHDR]; > + GL(dl_phnum) = auxv_values[AT_PHENT]; > +#endif > > DL_PLATFORM_AUXV > } I can confirm that this patch fixes the problem for me. I have uploaded a manually built glibc package with the patch applied to Debian »unreleased« so that the buildds can resume building packages again. Would it be possible to backport this patch to 2.36 once it has been merged with the current development tree? The reason is that I don't think that Debian is going to switch to anything beyond 2.36 anytime soon due to the upcoming feature freeze in January. Thanks, Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913