d2eea68e7d
One of the nice ideas behind paravirt is that CONFIG_XEN=y can be included in a standard configuration and be no worse for native booting than as a Xen guest. The glibc feature that supports the vDSO "nosegneg" note is designed specifically to make this easy. You just have to flip one bit at boot time. This patch makes Xen flip the bit, so a CONFIG_XEN=y kernel on bare hardware does not make glibc use the less-optimized library builds. Signed-off-by: Roland McGrath <roland@redhat.com> Acked-by: Jeremy Fitzhardinge <jeremy@xensource.com> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
45 lines
1.6 KiB
ArmAsm
45 lines
1.6 KiB
ArmAsm
/*
|
|
* This supplies .note.* sections to go into the PT_NOTE inside the vDSO text.
|
|
* Here we can supply some information useful to userland.
|
|
*/
|
|
|
|
#include <linux/version.h>
|
|
#include <linux/elfnote.h>
|
|
|
|
/* Ideally this would use UTS_NAME, but using a quoted string here
|
|
doesn't work. Remember to change this when changing the
|
|
kernel's name. */
|
|
ELFNOTE_START(Linux, 0, "a")
|
|
.long LINUX_VERSION_CODE
|
|
ELFNOTE_END
|
|
|
|
#ifdef CONFIG_XEN
|
|
/*
|
|
* Add a special note telling glibc's dynamic linker a fake hardware
|
|
* flavor that it will use to choose the search path for libraries in the
|
|
* same way it uses real hardware capabilities like "mmx".
|
|
* We supply "nosegneg" as the fake capability, to indicate that we
|
|
* do not like negative offsets in instructions using segment overrides,
|
|
* since we implement those inefficiently. This makes it possible to
|
|
* install libraries optimized to avoid those access patterns in someplace
|
|
* like /lib/i686/tls/nosegneg. Note that an /etc/ld.so.conf.d/file
|
|
* corresponding to the bits here is needed to make ldconfig work right.
|
|
* It should contain:
|
|
* hwcap 1 nosegneg
|
|
* to match the mapping of bit to name that we give here.
|
|
*
|
|
* At runtime, the fake hardware feature will be considered to be present
|
|
* if its bit is set in the mask word. So, we start with the mask 0, and
|
|
* at boot time we set VDSO_NOTE_NONEGSEG_BIT if running under Xen.
|
|
*/
|
|
|
|
#include "../xen/vdso.h" /* Defines VDSO_NOTE_NONEGSEG_BIT. */
|
|
|
|
.globl VDSO_NOTE_MASK
|
|
ELFNOTE_START(GNU, 2, "a")
|
|
.long 1 /* ncaps */
|
|
VDSO_NOTE_MASK:
|
|
.long 0 /* mask */
|
|
.byte VDSO_NOTE_NONEGSEG_BIT; .asciz "nosegneg" /* bit, name */
|
|
ELFNOTE_END
|
|
#endif
|