* [PATCH 0/3] UML fixes for tip:x86/syscall
@ 2011-12-06 1:05 H. Peter Anvin
2011-12-06 1:05 ` [PATCH 1/3] um: Run host archheaders, allow use of host generated headers H. Peter Anvin
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: H. Peter Anvin @ 2011-12-06 1:05 UTC (permalink / raw)
To: Jeff Dike, Richard Weinberger
Cc: Ingo Molnar, Thomas Gleixner, user-mode-linux-devel, linux-kbuild,
linux-kernel, H. Peter Anvin
From: "H. Peter Anvin" <hpa@linux.intel.com>
The patch series currently in -tip as x86/syscall, which builds
syscall tables from a simple text file also broke UML.
I intend to apply this patch to tip:x86/syscall, but if the UML folks
would either holler or ack that would be appreciated.
This patch series enables using generated host header files in UML,
and then uses the new x86 generated syscall tables in the same uniform
style as the native kernel.
The native kernel relies on asm-offsets.h to generate the syscall
fencepost symbols automatically (it is done that way rather in the
script to make the future extension to multiple supported ABIs work
better.) On UML, asm-offsets.h is generated globally, but
user-constants.h has per-subarchitecture support; it feels a little
like an odd place for it but I put the fenceposts there. The UML
folks might want to holler if that is too broken.
arch/um/Makefile | 9 +++++-
arch/x86/um/Makefile | 3 +-
arch/x86/um/sys_call_table_32.S | 26 ------------------
arch/x86/um/sys_call_table_32.c | 55 +++++++++++++++++++++++++++++++++++++++
arch/x86/um/sys_call_table_64.c | 31 ++++++++-------------
arch/x86/um/user-offsets.c | 15 ++++++++++
6 files changed, 91 insertions(+), 48 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] um: Run host archheaders, allow use of host generated headers
2011-12-06 1:05 [PATCH 0/3] UML fixes for tip:x86/syscall H. Peter Anvin
@ 2011-12-06 1:05 ` H. Peter Anvin
2011-12-08 22:06 ` richard -rw- weinberger
2011-12-06 1:05 ` [PATCH 2/3] um: Generate headers before generating user-offsets.s H. Peter Anvin
2011-12-06 1:05 ` [PATCH 3/3] x86, um: Use the same style generated syscall tables as native H. Peter Anvin
2 siblings, 1 reply; 5+ messages in thread
From: H. Peter Anvin @ 2011-12-06 1:05 UTC (permalink / raw)
To: Jeff Dike, Richard Weinberger
Cc: Ingo Molnar, Thomas Gleixner, user-mode-linux-devel, linux-kbuild,
linux-kernel, H. Peter Anvin
From: "H. Peter Anvin" <hpa@linux.intel.com>
Run the "archheaders" target for the host architecture, for
architectures (like x86, now) that want to generate some of the
necessary header files.
Add $(HOST_DIR)/include/generated to the include path so we then pick
them up.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
arch/um/Makefile | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/arch/um/Makefile b/arch/um/Makefile
index 7730af6..00210e9 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -64,7 +64,8 @@ USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\
#This will adjust *FLAGS accordingly to the platform.
include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
-KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include
+KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include \
+ -I$(HOST_DIR)/include/generated
# -Derrno=kernel_errno - This turns all kernel references to errno into
# kernel_errno to separate them from the libc errno. This allows -fno-common
@@ -96,6 +97,10 @@ endef
KBUILD_KCONFIG := $(HOST_DIR)/um/Kconfig
+archheaders:
+ $(Q)$(MAKE) -C '$(KBUILD_SRC)' KBUILD_SRC= \
+ ARCH=$(SUBARCH) O='$(objtree)' archheaders
+
archprepare: include/generated/user_constants.h
LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
--
1.7.6.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] um: Generate headers before generating user-offsets.s
2011-12-06 1:05 [PATCH 0/3] UML fixes for tip:x86/syscall H. Peter Anvin
2011-12-06 1:05 ` [PATCH 1/3] um: Run host archheaders, allow use of host generated headers H. Peter Anvin
@ 2011-12-06 1:05 ` H. Peter Anvin
2011-12-06 1:05 ` [PATCH 3/3] x86, um: Use the same style generated syscall tables as native H. Peter Anvin
2 siblings, 0 replies; 5+ messages in thread
From: H. Peter Anvin @ 2011-12-06 1:05 UTC (permalink / raw)
To: Jeff Dike, Richard Weinberger
Cc: Ingo Molnar, Thomas Gleixner, user-mode-linux-devel, linux-kbuild,
linux-kernel, H. Peter Anvin
From: "H. Peter Anvin" <hpa@linux.intel.com>
In case we need generated header files for the values in
user-offsets.h, make sure we build generated header files before
user-offsets.s is built.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
arch/um/Makefile | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/um/Makefile b/arch/um/Makefile
index 00210e9..9548ddc 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -140,7 +140,7 @@ archclean:
# Generated files
-$(HOST_DIR)/um/user-offsets.s: FORCE
+$(HOST_DIR)/um/user-offsets.s: __headers FORCE
$(Q)$(MAKE) $(build)=$(HOST_DIR)/um $@
define filechk_gen-asm-offsets
--
1.7.6.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] x86, um: Use the same style generated syscall tables as native
2011-12-06 1:05 [PATCH 0/3] UML fixes for tip:x86/syscall H. Peter Anvin
2011-12-06 1:05 ` [PATCH 1/3] um: Run host archheaders, allow use of host generated headers H. Peter Anvin
2011-12-06 1:05 ` [PATCH 2/3] um: Generate headers before generating user-offsets.s H. Peter Anvin
@ 2011-12-06 1:05 ` H. Peter Anvin
2 siblings, 0 replies; 5+ messages in thread
From: H. Peter Anvin @ 2011-12-06 1:05 UTC (permalink / raw)
To: Jeff Dike, Richard Weinberger
Cc: Ingo Molnar, Thomas Gleixner, user-mode-linux-devel, linux-kbuild,
linux-kernel, H. Peter Anvin
From: "H. Peter Anvin" <hpa@linux.intel.com>
Now when the native kernel uses a single style of generated system
call table, follow suite for UML and implement the same style, all in
C. This requires __NR_syscall_max and NR_syscalls to be generated; on
native this is done in asm-headers.h but that file is common to all
UML architectures; therefore put it in user-headers.h instead which
already have accommodations for architecture-specific values.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
arch/x86/um/Makefile | 3 +-
arch/x86/um/sys_call_table_32.S | 26 ------------------
arch/x86/um/sys_call_table_32.c | 55 +++++++++++++++++++++++++++++++++++++++
arch/x86/um/sys_call_table_64.c | 31 ++++++++-------------
arch/x86/um/user-offsets.c | 15 ++++++++++
5 files changed, 84 insertions(+), 46 deletions(-)
delete mode 100644 arch/x86/um/sys_call_table_32.S
create mode 100644 arch/x86/um/sys_call_table_32.c
diff --git a/arch/x86/um/Makefile b/arch/x86/um/Makefile
index 8fb5840..5d065b2 100644
--- a/arch/x86/um/Makefile
+++ b/arch/x86/um/Makefile
@@ -37,7 +37,8 @@ subarch-$(CONFIG_MODULES) += ../kernel/module.o
USER_OBJS := bugs_$(BITS).o ptrace_user.o fault.o
extra-y += user-offsets.s
-$(obj)/user-offsets.s: c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS)
+$(obj)/user-offsets.s: c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS) \
+ -Iarch/x86/include/generated
UNPROFILE_OBJS := stub_segv.o
CFLAGS_stub_segv.o := $(CFLAGS_NO_HARDENING)
diff --git a/arch/x86/um/sys_call_table_32.S b/arch/x86/um/sys_call_table_32.S
deleted file mode 100644
index a7ca80d..0000000
--- a/arch/x86/um/sys_call_table_32.S
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <linux/linkage.h>
-/* Steal i386 syscall table for our purposes, but with some slight changes.*/
-
-#define sys_iopl sys_ni_syscall
-#define sys_ioperm sys_ni_syscall
-
-#define sys_vm86old sys_ni_syscall
-#define sys_vm86 sys_ni_syscall
-
-#define old_mmap sys_old_mmap
-
-#define ptregs_fork sys_fork
-#define ptregs_execve sys_execve
-#define ptregs_iopl sys_iopl
-#define ptregs_vm86old sys_vm86old
-#define ptregs_clone sys_clone
-#define ptregs_vm86 sys_vm86
-#define ptregs_sigaltstack sys_sigaltstack
-#define ptregs_vfork sys_vfork
-
-.section .rodata,"a"
-
-#include "../kernel/syscall_table_32.S"
-
-ENTRY(syscall_table_size)
-.long .-sys_call_table
diff --git a/arch/x86/um/sys_call_table_32.c b/arch/x86/um/sys_call_table_32.c
new file mode 100644
index 0000000..b897fca
--- /dev/null
+++ b/arch/x86/um/sys_call_table_32.c
@@ -0,0 +1,55 @@
+/*
+ * System call table for UML/i386, copied from arch/x86/kernel/syscall_*.c
+ * with some changes for UML.
+ */
+
+#include <linux/linkage.h>
+#include <linux/sys.h>
+#include <linux/cache.h>
+#include <generated/user_constants.h>
+
+#define __NO_STUBS
+
+/*
+ * Below you can see, in terms of #define's, the differences between the x86-64
+ * and the UML syscall table.
+ */
+
+/* Not going to be implemented by UML, since we have no hardware. */
+#define stub_iopl sys_ni_syscall
+#define sys_ioperm sys_ni_syscall
+
+#define sys_vm86old sys_ni_syscall
+#define sys_vm86 sys_ni_syscall
+
+#define old_mmap sys_old_mmap
+
+#define ptregs_fork sys_fork
+#define ptregs_execve sys_execve
+#define ptregs_iopl sys_iopl
+#define ptregs_vm86old sys_vm86old
+#define ptregs_clone sys_clone
+#define ptregs_vm86 sys_vm86
+#define ptregs_sigaltstack sys_sigaltstack
+#define ptregs_vfork sys_vfork
+
+#define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void sym(void) ;
+#include <asm/syscalls_32.h>
+
+#undef __SYSCALL_I386
+#define __SYSCALL_I386(nr, sym, compat) [ nr ] = sym,
+
+typedef void (*sys_call_ptr_t)(void);
+
+extern void sys_ni_syscall(void);
+
+sys_call_ptr_t sys_call_table[] __cacheline_aligned = {
+ /*
+ * Smells like a compiler bug -- it doesn't work
+ * when the & below is removed.
+ */
+ [0 ... __NR_syscall_max] = &sys_ni_syscall,
+#include <asm/syscalls_32.h>
+};
+
+int syscall_table_size = sizeof(sys_call_table);
diff --git a/arch/x86/um/sys_call_table_64.c b/arch/x86/um/sys_call_table_64.c
index 99522f7..797a639 100644
--- a/arch/x86/um/sys_call_table_64.c
+++ b/arch/x86/um/sys_call_table_64.c
@@ -1,11 +1,12 @@
/*
- * System call table for UML/x86-64, copied from arch/x86_64/kernel/syscall.c
+ * System call table for UML/x86-64, copied from arch/x86/kernel/syscall_*.c
* with some changes for UML.
*/
#include <linux/linkage.h>
#include <linux/sys.h>
#include <linux/cache.h>
+#include <generated/user_constants.h>
#define __NO_STUBS
@@ -34,31 +35,23 @@
#define stub_sigaltstack sys_sigaltstack
#define stub_rt_sigreturn sys_rt_sigreturn
-#define __SYSCALL(nr, sym) extern asmlinkage void sym(void) ;
-#undef _ASM_X86_UNISTD_64_H
-#include "../../x86/include/asm/unistd_64.h"
+#define __SYSCALL_64(nr, sym, compat) extern asmlinkage void sym(void) ;
+#include <asm/syscalls_64.h>
-#undef __SYSCALL
-#define __SYSCALL(nr, sym) [ nr ] = sym,
-#undef _ASM_X86_UNISTD_64_H
+#undef __SYSCALL_64
+#define __SYSCALL_64(nr, sym, compat) [ nr ] = sym,
typedef void (*sys_call_ptr_t)(void);
extern void sys_ni_syscall(void);
-/*
- * We used to have a trick here which made sure that holes in the
- * x86_64 table were filled in with sys_ni_syscall, but a comment in
- * unistd_64.h says that holes aren't allowed, so the trick was
- * removed.
- * The trick looked like this
- * [0 ... UM_NR_syscall_max] = &sys_ni_syscall
- * before including unistd_64.h - the later initializations overwrote
- * the sys_ni_syscall filler.
- */
-
sys_call_ptr_t sys_call_table[] __cacheline_aligned = {
-#include <asm/unistd_64.h>
+ /*
+ * Smells like a compiler bug -- it doesn't work
+ * when the & below is removed.
+ */
+ [0 ... __NR_syscall_max] = &sys_ni_syscall,
+#include <asm/syscalls_64.h>
};
int syscall_table_size = sizeof(sys_call_table);
diff --git a/arch/x86/um/user-offsets.c b/arch/x86/um/user-offsets.c
index ca49be8..5edf4f4 100644
--- a/arch/x86/um/user-offsets.c
+++ b/arch/x86/um/user-offsets.c
@@ -8,6 +8,18 @@
#include <asm/ptrace.h>
#include <asm/types.h>
+#ifdef __i386__
+#define __SYSCALL_I386(nr, sym, compat) [nr] = 1,
+static char syscalls[] = {
+#include <asm/syscalls_32.h>
+};
+#else
+#define __SYSCALL_64(nr, sym, compat) [nr] = 1,
+static char syscalls[] = {
+#include <asm/syscalls_64.h>
+};
+#endif
+
#define DEFINE(sym, val) \
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
@@ -77,4 +89,7 @@ void foo(void)
DEFINE(UM_PROT_READ, PROT_READ);
DEFINE(UM_PROT_WRITE, PROT_WRITE);
DEFINE(UM_PROT_EXEC, PROT_EXEC);
+
+ DEFINE(__NR_syscall_max, sizeof(syscalls) - 1);
+ DEFINE(NR_syscalls, sizeof(syscalls));
}
--
1.7.6.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/3] um: Run host archheaders, allow use of host generated headers
2011-12-06 1:05 ` [PATCH 1/3] um: Run host archheaders, allow use of host generated headers H. Peter Anvin
@ 2011-12-08 22:06 ` richard -rw- weinberger
0 siblings, 0 replies; 5+ messages in thread
From: richard -rw- weinberger @ 2011-12-08 22:06 UTC (permalink / raw)
To: H. Peter Anvin
Cc: Jeff Dike, Richard Weinberger, Ingo Molnar, Thomas Gleixner,
user-mode-linux-devel, linux-kbuild, linux-kernel
On Tue, Dec 6, 2011 at 2:05 AM, H. Peter Anvin <hpa@linux.intel.com> wrote:
> From: "H. Peter Anvin" <hpa@linux.intel.com>
>
> Run the "archheaders" target for the host architecture, for
> architectures (like x86, now) that want to generate some of the
> necessary header files.
>
> Add $(HOST_DIR)/include/generated to the include path so we then pick
> them up.
>
> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
> ---
> arch/um/Makefile | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/arch/um/Makefile b/arch/um/Makefile
> index 7730af6..00210e9 100644
> --- a/arch/um/Makefile
> +++ b/arch/um/Makefile
> @@ -64,7 +64,8 @@ USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\
> #This will adjust *FLAGS accordingly to the platform.
> include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
>
> -KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include
> +KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include \
> + -I$(HOST_DIR)/include/generated
>
> # -Derrno=kernel_errno - This turns all kernel references to errno into
> # kernel_errno to separate them from the libc errno. This allows -fno-common
> @@ -96,6 +97,10 @@ endef
>
> KBUILD_KCONFIG := $(HOST_DIR)/um/Kconfig
>
> +archheaders:
> + $(Q)$(MAKE) -C '$(KBUILD_SRC)' KBUILD_SRC= \
> + ARCH=$(SUBARCH) O='$(objtree)' archheaders
> +
This does not work, KBUILD_SRC is empty.
I'm not a kbuild expert, but I think the usage of KBUILD_SRC is in general
not allowed.
--
Thanks,
//richard
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-12-08 22:06 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-06 1:05 [PATCH 0/3] UML fixes for tip:x86/syscall H. Peter Anvin
2011-12-06 1:05 ` [PATCH 1/3] um: Run host archheaders, allow use of host generated headers H. Peter Anvin
2011-12-08 22:06 ` richard -rw- weinberger
2011-12-06 1:05 ` [PATCH 2/3] um: Generate headers before generating user-offsets.s H. Peter Anvin
2011-12-06 1:05 ` [PATCH 3/3] x86, um: Use the same style generated syscall tables as native H. Peter Anvin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox