x32: Generate <asm/unistd_x32.h>
authorH. Peter Anvin <hpa@zytor.com>
Tue, 14 Feb 2012 22:38:31 +0000 (14:38 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Mon, 20 Feb 2012 20:51:00 +0000 (12:51 -0800)
Generate <asm/unistd_x32.h>; this exports x32 system call numbers to
user space.

[ v2: Enclose all arguments to syshdr in '' so empty arguments aren't
      dropped on the floor. ]

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/include/asm/Kbuild
arch/x86/include/asm/unistd.h
arch/x86/syscalls/Makefile

index 986954f..f9c0d3b 100644 (file)
@@ -25,3 +25,4 @@ header-y += vsyscall.h
 
 genhdr-y += unistd_32.h
 genhdr-y += unistd_64.h
+genhdr-y += unistd_x32.h
index 21f77b8..dab5349 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef _ASM_X86_UNISTD_H
 #define _ASM_X86_UNISTD_H 1
 
+/* x32 syscall flag bit */
+#define __X32_SYSCALL_BIT      0x40000000
+
 #ifdef __KERNEL__
 # ifdef CONFIG_X86_32
 
 #else
 # ifdef __i386__
 #  include <asm/unistd_32.h>
-# else
+# elif defined(__LP64__)
 #  include <asm/unistd_64.h>
+# else
+#  include <asm/unistd_x32.h>
 # endif
 #endif
 
index 89dd958..8051c31 100644 (file)
@@ -10,8 +10,10 @@ syshdr := $(srctree)/$(src)/syscallhdr.sh
 systbl := $(srctree)/$(src)/syscalltbl.sh
 
 quiet_cmd_syshdr = SYSHDR  $@
-      cmd_syshdr = $(CONFIG_SHELL) '$(syshdr)' $< $@ \
-                  $(syshdr_abi_$(basetarget)) $(syshdr_pfx_$(basetarget))
+      cmd_syshdr = $(CONFIG_SHELL) '$(syshdr)' '$<' '$@' \
+                  '$(syshdr_abi_$(basetarget))' \
+                  '$(syshdr_pfx_$(basetarget))' \
+                  '$(syshdr_offset_$(basetarget))'
 quiet_cmd_systbl = SYSTBL  $@
       cmd_systbl = $(CONFIG_SHELL) '$(systbl)' $< $@
 
@@ -24,6 +26,11 @@ syshdr_pfx_unistd_32_ia32 := ia32_
 $(out)/unistd_32_ia32.h: $(syscall32) $(syshdr)
        $(call if_changed,syshdr)
 
+syshdr_abi_unistd_x32 := common,x32
+syshdr_offset_unistd_x32 := __X32_SYSCALL_BIT
+$(out)/unistd_x32.h: $(syscall64) $(syshdr)
+       $(call if_changed,syshdr)
+
 syshdr_abi_unistd_64 := common,64
 $(out)/unistd_64.h: $(syscall64) $(syshdr)
        $(call if_changed,syshdr)
@@ -33,7 +40,7 @@ $(out)/syscalls_32.h: $(syscall32) $(systbl)
 $(out)/syscalls_64.h: $(syscall64) $(systbl)
        $(call if_changed,systbl)
 
-syshdr-y                       += unistd_32.h unistd_64.h
+syshdr-y                       += unistd_32.h unistd_64.h unistd_x32.h
 syshdr-y                       += syscalls_32.h
 syshdr-$(CONFIG_X86_64)                += unistd_32_ia32.h
 syshdr-$(CONFIG_X86_64)                += syscalls_64.h