lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1345345030-22211-55-git-send-email-andi@firstfloor.org>
Date:	Sat, 18 Aug 2012 19:56:50 -0700
From:	Andi Kleen <andi@...stfloor.org>
To:	linux-kernel@...r.kernel.org
Cc:	x86@...nel.org, mmarek@...e.cz, linux-kbuild@...r.kernel.org,
	JBeulich@...e.com, akpm@...ux-foundation.org,
	Andi Kleen <ak@...ux.intel.com>, Andy Lutomirski <luto@....edu>
Subject: [PATCH 54/74] x86, lto, vdso: Don't duplicate vvar address variables

From: Andi Kleen <ak@...ux.intel.com>

Every includer of vvar.h currently gets own static variables
for all the vvar addresses. Generate just one set each for the
main kernel and for the vdso. This saves some data space.

Cc: Andy Lutomirski <luto@....edu>
Signed-off-by: Andi Kleen <ak@...ux.intel.com>
---
 arch/x86/include/asm/vvar.h    |   27 +++++++++++++++++----------
 arch/x86/vdso/vclock_gettime.c |    1 +
 arch/x86/vdso/vma.c            |    1 +
 3 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/arch/x86/include/asm/vvar.h b/arch/x86/include/asm/vvar.h
index d76ac40..1fd06a8 100644
--- a/arch/x86/include/asm/vvar.h
+++ b/arch/x86/include/asm/vvar.h
@@ -24,27 +24,34 @@
 /* The kernel linker script defines its own magic to put vvars in the
  * right place.
  */
-#define DECLARE_VVAR(offset, type, name) \
-	EMIT_VVAR(name, offset)
+#define DECLARE_VVAR(type, name) \
+	EMIT_VVAR(name, VVAR_OFFSET_ ## name)
+
+#elif defined(__VVAR_ADDR)
+
+#define DECLARE_VVAR(type, name)					\
+	type const * const vvaraddr_ ## name =				\
+	(void *)(VVAR_ADDRESS + (VVAR_OFFSET_ ## name));
 
 #else
 
-#define DECLARE_VVAR(offset, type, name)				\
-	static type const * const vvaraddr_ ## name =			\
-		(void *)(VVAR_ADDRESS + (offset));
+#define DECLARE_VVAR(type, name)					\
+	extern type const * const vvaraddr_ ## name;
 
 #define DEFINE_VVAR(type, name)						\
 	type name							\
 	__attribute__((section(".vvar_" #name), aligned(16))) __visible
+#endif
 
 #define VVAR(name) (*vvaraddr_ ## name)
 
-#endif
-
 /* DECLARE_VVAR(offset, type, name) */
 
-DECLARE_VVAR(0, volatile unsigned long, jiffies)
-DECLARE_VVAR(16, int, vgetcpu_mode)
-DECLARE_VVAR(128, struct vsyscall_gtod_data, vsyscall_gtod_data)
+#define VVAR_OFFSET_jiffies 0
+DECLARE_VVAR(volatile unsigned long, jiffies)
+#define VVAR_OFFSET_vgetcpu_mode 16
+DECLARE_VVAR(int, vgetcpu_mode)
+#define VVAR_OFFSET_vsyscall_gtod_data 128
+DECLARE_VVAR(struct vsyscall_gtod_data, vsyscall_gtod_data)
 
 #undef DECLARE_VVAR
diff --git a/arch/x86/vdso/vclock_gettime.c b/arch/x86/vdso/vclock_gettime.c
index 885eff4..007eac4 100644
--- a/arch/x86/vdso/vclock_gettime.c
+++ b/arch/x86/vdso/vclock_gettime.c
@@ -10,6 +10,7 @@
 
 /* Disable profiling for userspace code: */
 #define DISABLE_BRANCH_PROFILING
+#define __VVAR_ADDR 1
 
 #include <linux/kernel.h>
 #include <linux/posix-timers.h>
diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c
index fe08e2b..4432cfc 100644
--- a/arch/x86/vdso/vma.c
+++ b/arch/x86/vdso/vma.c
@@ -3,6 +3,7 @@
  * Copyright 2007 Andi Kleen, SUSE Labs.
  * Subject to the GPL, v.2
  */
+#define __VVAR_ADDR 1
 #include <linux/mm.h>
 #include <linux/err.h>
 #include <linux/sched.h>
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ