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

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
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -388,6 +388,9 @@ config COMPAT
	  (and some other stuff like libraries and such) is needed for
	  executing 31 bit applications.  It is safe to say "Y".

config COMPAT_VDSO
	def_bool COMPAT && !CC_IS_CLANG

config SYSVIPC_COMPAT
	def_bool y if COMPAT && SYSVIPC

+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ obj-$(CONFIG_TRACEPOINTS) += trace.o

# vdso
obj-y				+= vdso64/
obj-$(CONFIG_COMPAT)		+= vdso32/
obj-$(CONFIG_COMPAT_VDSO)	+= vdso32/

chkbss := head64.o early_nobss.o
include $(srctree)/arch/s390/scripts/Makefile.chkbss
+5 −5
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@
#include <asm/vdso.h>
#include <asm/facility.h>

#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT_VDSO
extern char vdso32_start, vdso32_end;
static void *vdso32_kbase = &vdso32_start;
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_pages = vdso64_pages;
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT_VDSO
	if (vma->vm_mm->context.compat_mm) {
		vdso_pagelist = vdso32_pagelist;
		vdso_pages = vdso32_pages;
@@ -76,7 +76,7 @@ static int vdso_mremap(const struct vm_special_mapping *sm,
	unsigned long vdso_pages;

	vdso_pages = vdso64_pages;
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT_VDSO
	if (vma->vm_mm->context.compat_mm)
		vdso_pages = vdso32_pages;
#endif
@@ -223,7 +223,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
		return 0;

	vdso_pages = vdso64_pages;
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT_VDSO
	mm->context.compat_mm = is_compat_task();
	if (mm->context.compat_mm)
		vdso_pages = vdso32_pages;
@@ -280,7 +280,7 @@ static int __init vdso_init(void)
	int i;

	vdso_init_data(vdso_data);
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT_VDSO
	/* Calculate the size of the 32 bit vDSO */
	vdso32_pages = ((&vdso32_end - &vdso32_start
			 + PAGE_SIZE - 1) >> PAGE_SHIFT) + 1;