s390: don't build vdso32 with clang

clang does not support 31 bit object files on s390, so skip
the 32-bit vdso here, and only build it when using gcc to compile
the kernel.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Arnd Bergmann 2019-04-08 23:26:15 +02:00 коммит произвёл Martin Schwidefsky
Родитель c1afcaec2a
Коммит 96ca7674ea
3 изменённых файлов: 9 добавлений и 6 удалений

Просмотреть файл

@ -388,6 +388,9 @@ config COMPAT
(and some other stuff like libraries and such) is needed for (and some other stuff like libraries and such) is needed for
executing 31 bit applications. It is safe to say "Y". executing 31 bit applications. It is safe to say "Y".
config COMPAT_VDSO
def_bool COMPAT && !CC_IS_CLANG
config SYSVIPC_COMPAT config SYSVIPC_COMPAT
def_bool y if COMPAT && SYSVIPC def_bool y if COMPAT && SYSVIPC

Просмотреть файл

@ -86,7 +86,7 @@ obj-$(CONFIG_TRACEPOINTS) += trace.o
# vdso # vdso
obj-y += vdso64/ obj-y += vdso64/
obj-$(CONFIG_COMPAT) += vdso32/ obj-$(CONFIG_COMPAT_VDSO) += vdso32/
chkbss := head64.o early_nobss.o chkbss := head64.o early_nobss.o
include $(srctree)/arch/s390/scripts/Makefile.chkbss include $(srctree)/arch/s390/scripts/Makefile.chkbss

Просмотреть файл

@ -29,7 +29,7 @@
#include <asm/vdso.h> #include <asm/vdso.h>
#include <asm/facility.h> #include <asm/facility.h>
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT_VDSO
extern char vdso32_start, vdso32_end; extern char vdso32_start, vdso32_end;
static void *vdso32_kbase = &vdso32_start; static void *vdso32_kbase = &vdso32_start;
static unsigned int vdso32_pages; static unsigned int vdso32_pages;
@ -55,7 +55,7 @@ static vm_fault_t vdso_fault(const struct vm_special_mapping *sm,
vdso_pagelist = vdso64_pagelist; vdso_pagelist = vdso64_pagelist;
vdso_pages = vdso64_pages; vdso_pages = vdso64_pages;
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT_VDSO
if (vma->vm_mm->context.compat_mm) { if (vma->vm_mm->context.compat_mm) {
vdso_pagelist = vdso32_pagelist; vdso_pagelist = vdso32_pagelist;
vdso_pages = vdso32_pages; vdso_pages = vdso32_pages;
@ -76,7 +76,7 @@ static int vdso_mremap(const struct vm_special_mapping *sm,
unsigned long vdso_pages; unsigned long vdso_pages;
vdso_pages = vdso64_pages; vdso_pages = vdso64_pages;
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT_VDSO
if (vma->vm_mm->context.compat_mm) if (vma->vm_mm->context.compat_mm)
vdso_pages = vdso32_pages; vdso_pages = vdso32_pages;
#endif #endif
@ -223,7 +223,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
return 0; return 0;
vdso_pages = vdso64_pages; vdso_pages = vdso64_pages;
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT_VDSO
mm->context.compat_mm = is_compat_task(); mm->context.compat_mm = is_compat_task();
if (mm->context.compat_mm) if (mm->context.compat_mm)
vdso_pages = vdso32_pages; vdso_pages = vdso32_pages;
@ -280,7 +280,7 @@ static int __init vdso_init(void)
int i; int i;
vdso_init_data(vdso_data); vdso_init_data(vdso_data);
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT_VDSO
/* Calculate the size of the 32 bit vDSO */ /* Calculate the size of the 32 bit vDSO */
vdso32_pages = ((&vdso32_end - &vdso32_start vdso32_pages = ((&vdso32_end - &vdso32_start
+ PAGE_SIZE - 1) >> PAGE_SHIFT) + 1; + PAGE_SIZE - 1) >> PAGE_SHIFT) + 1;