Skip to contentSkip to conversation

Make sysenter support optional

PATCH In review Matt Mackall 4 participants 9 messages Dec 28, 2005 – Dec 30, 2005 2 messages not in the archive

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Make sysenter support optional

This adds configurable sysenter support on x86. This saves about 5k on small systems.

$ size vmlinux-baseline vmlinux
   text    data     bss     dec     hex filename
2920821  523232  190652 3634705  377611 vmlinux-baseline
2920558  518376  190652 3629586  376212 vmlinux
arch/i386/kernel/Makefile +1 -1
Index: 2.6.15-misc/arch/i386/kernel/Makefile
===================================================================
@@ -31,7 +31,7 @@ obj-$(CONFIG_X86_NUMAQ)		+= numaq.o
 obj-$(CONFIG_X86_SUMMIT_NUMA)	+= summit.o
 obj-$(CONFIG_KPROBES)		+= kprobes.o
 obj-$(CONFIG_MODULES)		+= module.o
-obj-y				+= sysenter.o vsyscall.o
+obj-$(CONFIG_SYSENTER)		+= sysenter.o vsyscall.o
 obj-$(CONFIG_ACPI_SRAT) 	+= srat.o
 obj-$(CONFIG_HPET_TIMER) 	+= time_hpet.o
 obj-$(CONFIG_EFI) 		+= efi.o efi_stub.o
include/asm-i386/elf.h +2 -0
Index: 2.6.15-misc/include/asm-i386/elf.h
===================================================================
@@ -134,11 +134,13 @@ extern int dump_task_extended_fpu (struc
 #define VSYSCALL_ENTRY	((unsigned long) &__kernel_vsyscall)
 extern void __kernel_vsyscall;
 
+#ifdef CONFIG_SYSENTER
 #define ARCH_DLINFO						\
 do {								\
 		NEW_AUX_ENT(AT_SYSINFO,	VSYSCALL_ENTRY);	\
 		NEW_AUX_ENT(AT_SYSINFO_EHDR, VSYSCALL_BASE);	\
 } while (0)
+#endif
 
 /*
  * These macros parameterize elf_core_dump in fs/binfmt_elf.c to write out
init/Kconfig +8 -0
Index: 2.6.15-misc/init/Kconfig
===================================================================
@@ -352,6 +352,14 @@ config VM86
           XFree86 to initialize some video cards via BIOS. Disabling this
           option saves about 6k.
 
+config SYSENTER
+	depends X86
+	default y
+	bool "Enable syscalls via sysenter" if EMBEDDED
+	help
+	  Disabling this feature removes sysenter handling as well as
+	  vsyscall fixmaps.
+ 
 config CC_OPTIMIZE_FOR_SIZE
 	bool "Optimize for size"
 	default y if ARM || H8300
include/asm-i386/processor.h +6 -0
Index: 2.6.15-misc/include/asm-i386/processor.h
===================================================================
@@ -709,8 +709,14 @@ extern void select_idle_routine(const st
 #define cache_line_size() (boot_cpu_data.x86_cache_alignment)
 
 extern unsigned long boot_option_idle_override;
+
+#ifdef CONFIG_SYSENTER
 extern void enable_sep_cpu(void);
 extern int sysenter_setup(void);
+#else
+#define enable_sep_cpu()
+static inline int sysenter_setup(void) { return 0; }
+#endif
 
 #ifdef CONFIG_MTRR
 extern void mtrr_ap_init(void);
Signature · 1 line
Mathematics is the supreme nostalgia of our time.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 2 lines

This adds configurable sysenter support on x86. This saves about 5k on small systems.

You not only remove the sysenter support but also the vdso. And the later is a very bad idea. It is already today basically impossible to have reliable backtraces without the vdso and the unwind info it contains for signal handlers. And things can only get worse in future.
The magic heuristics in the compiler are not reliable. It's simply the
wrong face, this in a interface between the kernel and the libc, the compiler should not have such knowledge.

The vdso should be mandatory for all configurations.

Signature · 1 line
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖
#3 lore raw
Quoted 11 lines · Ulrich Drepper
Quoted 2 lines

This adds configurable sysenter support on x86. This saves about 5k on small systems.

You not only remove the sysenter support but also the vdso. And the later is a very bad idea. It is already today basically impossible to have reliable backtraces without the vdso and the unwind info it contains for signal handlers. And things can only get worse in future.
The magic heuristics in the compiler are not reliable. It's simply the
wrong face, this in a interface between the kernel and the libc, the compiler should not have such knowledge.

Quoted 1 line

The vdso should be mandatory for all configurations.

It's under CONFIG_EMBEDDED. Think uclibc. Think systems without interactive shells.

Signature · 1 line
Mathematics is the supreme nostalgia of our time.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#5 lore raw
Quoted 2 lines

It's under CONFIG_EMBEDDED. Think uclibc. Think systems without interactive shells.

Interactive or not has absolutely nothing to do with this. And other libcs have the same issues wrt to backtraces. And finally, there is unfortunately no way to prevent somebody from using glibc on an "embedded" kernel and I have no interest in getting "bug reports" caused by this kind of user error.

Signature · 1 line
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖
#6 lore raw
Quoted 4 lines · Ulrich Drepper
Quoted 2 lines

It's under CONFIG_EMBEDDED. Think uclibc. Think systems without interactive shells.

Interactive or not has absolutely nothing to do with this.

Ok, let me be explicit: think systems with absolutely no facility for recording or displaying a backtrace.

Quoted 2 lines

And other
libcs have the same issues wrt to backtraces.

As far as I'm aware, uclibc has no vdso support, so it might as well not exist for systems using it.

Signature · 1 line
Mathematics is the supreme nostalgia of our time.
#7 lore raw
Quoted 2 lines · Matt Mackall

Ok, let me be explicit: think systems with absolutely no facility for recording or displaying a backtrace.

You don't know much about unwinding, do you? The same information is needed for C++ exception handling, thread cancellation, etc. Now go on and tell me you don't need this either.

Quoted 2 lines

As far as I'm aware, uclibc has no vdso support, so it might as well not exist for systems using it.

And I told you that the support which magically makes all this sometimes work without the unwind info in the vdso will sooner or later break. Then whatever other libc is out there has to get vdso support to be able to function correctly.

Signature · 1 line
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖
#8 lore raw
Quoted 7 lines · Ulrich Drepper
Quoted 2 lines · Matt Mackall

Ok, let me be explicit: think systems with absolutely no facility for recording or displaying a backtrace.

You don't know much about unwinding, do you? The same information is needed for C++ exception handling, thread cancellation, etc. Now go on and tell me you don't need this either.

On (presumbly small) embedded devices?
Please be serious.

Bernd

Signature · 3 lines
Firmix Software GmbH                   http://www.firmix.at/
mobil: +43 664 4416156                 fax: +43 1 7890849-55
          Embedded Linux Development and Services
#9 lore raw
In reply to Matt Mackall
Quoted 2 lines · Matt Mackall

This adds configurable sysenter support on x86. This saves about 5k on small systems.

note that this also turns off vsyscalls. Right now vsyscalls are mostly about sysenter support, but that's not fundamentally so. 4k of the 5k savings come from the turn-off-vsyscalls portion.

Ingo

#10 lore raw
Quoted 9 lines · Ingo Molnar
Quoted 2 lines · Matt Mackall

This adds configurable sysenter support on x86. This saves about 5k on small systems.

note that this also turns off vsyscalls. Right now vsyscalls are mostly about sysenter support, but that's not fundamentally so. 4k of the 5k savings come from the turn-off-vsyscalls portion.

Yes, this patch would more properly be CONFIG_VSYSCALL.

Signature · 1 line
Mathematics is the supreme nostalgia of our time.