From a05af27aec00eacf533ff111ba8eb3dec328d9af Mon Sep 17 00:00:00 2001
From: Kurt Mahan <kmahan@freescale.com>
Date: Thu, 22 May 2008 11:20:53 -0600
Subject: [PATCH] Initial vDSO header changes.

LTIBName: mcfv4e-vdso-headers
Signed-off-by: Kurt Mahan <kmahan@freescale.com>
---
 include/asm-m68k/auxvec.h |    9 +++++++++
 include/asm-m68k/elf.h    |   31 +++++++++++++++++++++++++++++++
 include/asm-m68k/page.h   |    5 +++++
 3 files changed, 45 insertions(+), 0 deletions(-)

--- a/include/asm-m68k/auxvec.h
+++ b/include/asm-m68k/auxvec.h
@@ -1,4 +1,13 @@
 #ifndef __ASMm68k_AUXVEC_H
 #define __ASMm68k_AUXVEC_H
+/*
+ * Architecture-neutral AT_ values in 0-17, leave some room
+ * for more of them.
+ */
+
+#ifdef CONFIG_VSYSCALL
+/* Entry point to the vsyscall page */
+#define	AT_SYSINFO_EHDR		33
+#endif
 
 #endif
--- a/include/asm-m68k/elf.h
+++ b/include/asm-m68k/elf.h
@@ -136,4 +136,35 @@ typedef struct user_m68kfp_struct elf_fp
 
 #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
 
+/*
+ * VDSO
+ */
+#ifdef CONFIG_VSYSCALL
+extern unsigned int vdso_enabled;
+
+#define	VDSO_BASE		((unsigned long)current->mm->context.vdso)
+#define	VDSO_SYM(x)		(VDSO_BASE + (unsigned long)(x))
+
+#define	VSYSCALL_AUX_ENT					\
+	if (vdso_enabled)					\
+		NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE);
+
+/* additional pages */
+#define ARCH_HAS_SETUP_ADDITIONAL_PAGES	1
+
+struct linux_binprm;
+extern int arch_setup_additional_pages(struct linux_binprm *bprm,
+				       int executable_stack);
+
+#else
+/* no VSYSCALL_AUX_ENT */
+#define	VSYSCALL_AUX_ENT
+#endif
+
+#define ARCH_DLINFO						\
+do {								\
+	/* vsyscall entry */					\
+	VSYSCALL_AUX_ENT;					\
+} while (0);
+
 #endif
--- a/include/asm-m68k/page.h
+++ b/include/asm-m68k/page.h
@@ -252,4 +252,9 @@ static inline __attribute_const__ int __
 
 #include <asm-generic/page.h>
 
+#ifdef CONFIG_VSYSCALL
+/* vDSO support */
+#define __HAVE_ARCH_GATE_AREA
+#endif
+
 #endif /* _M68K_PAGE_H */
