This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 03/12] s390: Enable VDSO for static linking
- From: Stefan Liebler <stli at linux dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Cc: Heiko Carstens <heiko dot carstens at de dot ibm dot com>
- Date: Tue, 6 Aug 2019 16:08:02 +0200
- Subject: Re: [PATCH 03/12] s390: Enable VDSO for static linking
- References: <20190614152908.8101-1-adhemerval.zanella@linaro.org> <20190614152908.8101-3-adhemerval.zanella@linaro.org> <ea4b8954-a116-4436-1f92-5ae3a9decdba@linaro.org>
On 8/2/19 2:34 PM, Adhemerval Zanella wrote:
Ping.
On 14/06/2019 12:28, Adhemerval Zanella wrote:
Although s390 explicit does not enable vDSO for binaries without
(arch/s390/kernel/vdso.c:217), there is no indication in the code
the rationale for disabling it. In fact, I rebuilt a kernel with the
check removed and the vDSO does work for static build for supplied
symbols.
Hi Adhemerval,
Sorry, I haven't recognized this patch as it was hidden behind the
email-thread starting with "[PATCH 01/12] m68k: Remove vDSO support".
Please cc me if I'm not responding for s390 patches.
I've just had a look into the kernel arch/s390/kernel/vdso.c file
and I'm a little bit confused regarding the line number 217 (see my
excerpt below).
Just to be sure, have you removed the "if (!uses_interp)" or the "if
(!vdso_enabled)"?
/*
* This is called from binfmt_elf, we create the special vma for the
* vDSO and insert it into the mm struct tree
*/
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
unsigned long vdso_pages;
unsigned long vdso_base;
int rc;
217: if (!vdso_enabled)
return 0;
/*
* Only map the vdso for dynamically linked elf binaries.
*/
222: if (!uses_interp)
return 0;
As far as I know, vdso was disabled for statically linked binaries as
glibc had not supported it and thus nothing "useless" was mapped
(especially on 31bit).
I've also cc'ed Heiko. Perhaps he can also enable it on s390 for
statically linked binaries.
Nevertheless this patch breaks s390. I've just committed the attached
fix which adds the removed VDSO_SETUP macro definition.
Bye.
Stefan
commit cf6ac72fdd2026e91c0672ccf0eefd2e58920bdc
Author: Stefan Liebler <stli@linux.ibm.com>
Date: Tue Aug 6 14:15:09 2019 +0200
s390: Fix Enable VDSO for static linking
The commit 5e855c8954014bca7b0d6f07312ec09553695ffd
"s390: Enable VDSO for static linking" removed the definition of VDSO_SETUP
which leads to not setup the vdso symbols.
Instead it jumps to false addresses.
This patch just re adds the removed VDSO_SETUP macro definition.
ChangeLog:
* sysdeps/unix/sysv/linux/s390/init-first.c (VDSO_SETUP): New define.
diff --git a/sysdeps/unix/sysv/linux/s390/init-first.c b/sysdeps/unix/sysv/linux/s390/init-first.c
index 8c54d13935..a1ad9458e3 100644
--- a/sysdeps/unix/sysv/linux/s390/init-first.c
+++ b/sysdeps/unix/sysv/linux/s390/init-first.c
@@ -53,4 +53,6 @@ _libc_vdso_platform_setup (void)
VDSO_SYMBOL (getcpu) = p;
}
+#define VDSO_SETUP _libc_vdso_platform_setup
+
#include <csu/init-first.c>