Commit 96ca7674 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Martin Schwidefsky

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: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent c1afcaec
...@@ -388,6 +388,9 @@ config COMPAT ...@@ -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 ...@@ -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 @@ ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment