diff options
author | Joseph Myers <joseph@codesourcery.com> | 2011-12-22 18:22:50 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2011-12-22 18:22:50 +0000 |
commit | 154bfc16225aaa3d3104e758eed2a17297131599 (patch) | |
tree | 7c944bbebea49f962ea036f95e1ae13b61c988c3 /sysdeps/unix/sysv/linux | |
parent | 16c6f99208229d7222fd26499749e56137322a3c (diff) | |
download | glibc-154bfc16225aaa3d3104e758eed2a17297131599.tar.gz glibc-154bfc16225aaa3d3104e758eed2a17297131599.tar.xz glibc-154bfc16225aaa3d3104e758eed2a17297131599.zip |
Support building bits/syscall.h for any number of subarch variants.
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 66 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/Makefile | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/Makefile | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/Makefile | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/Makefile | 7 |
5 files changed, 61 insertions, 32 deletions
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 30320269c5..e684b160f0 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -39,8 +39,27 @@ install-others += $(inst_includedir)/bits/syscall.h tests += tst-clone # Generate the list of SYS_* macros for the system calls (__NR_* macros). -# For bi-arch platforms, the CPU/Makefile defines {32,64}bit-predefine and -# we generate a file that uses <bits/wordsize.h>. + +# If there is more than one syscall list for different architecture +# variants, the CPU/Makefile defines syscall-list-variants to be a +# list of names for those variants (e.g. 32bit 64bit), and, for each +# variant, defines syscall-list-$(variant)-options to be compiler +# options to cause <asm/unistd.h> to define the desired list of +# syscalls and syscall-list-$(variant)-condition to be the condition +# for those options to use in a C #if condition. +# syscall-list-includes may be defined to a list of headers to include +# in the generated header, if the default does not suffice. + +ifndef syscall-list-variants +syscall-list-variants := default +syscall-list-default-options := +syscall-list-default-condition := +endif + +ifndef syscall-list-includes +syscall-list-includes := bits/wordsize.h +endif + $(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/sys/syscall.h $(make-target-directory) { \ @@ -50,37 +69,30 @@ $(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/sys/syscal echo '# error "Never use <bits/syscall.h> directly; include <sys/syscall.h> instead."'; \ echo '#endif'; \ echo ''; \ - $(CC) -E -MD -MP -MF $(@:.h=.d)-t1 -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(sysincludes) $< $(addprefix -U,$(64bit-predefine)) \ - $(addprefix -D,$(32bit-predefine)) -D_LIBC -dM | \ - sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ - LC_ALL=C sort > $(@:.d=.h).new32; \ - $(CC) -E -MD -MP -MF $(@:.h=.d)-t2 -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(sysincludes) $< $(addprefix -U,$(32bit-predefine)) \ - $(addprefix -D,$(64bit-predefine)) -D_LIBC -dM | \ + $(foreach h,$(syscall-list-includes), echo '#include <$(h)>';) \ + echo ''; \ + $(foreach v,$(syscall-list-variants),\ + $(CC) -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ + -x c $(sysincludes) $< $(syscall-list-$(v)-options) \ + -D_LIBC -dM | \ sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ - LC_ALL=C sort > $(@:.d=.h).new64; \ - if cmp -s $(@:.d=.h).new32 $(@:.d=.h).new64; then \ - cat $(@:.d=.h).new32; \ - else \ - echo '#include <bits/wordsize.h>'; \ - echo ''; \ - LC_ALL=C comm -12 $(@:.d=.h).new32 $(@:.d=.h).new64; \ - echo '#if __WORDSIZE == 64'; \ - LC_ALL=C comm -13 $(@:.d=.h).new32 $(@:.d=.h).new64; \ - echo '#else'; \ - LC_ALL=C comm -23 $(@:.d=.h).new32 $(@:.d=.h).new64; \ - echo '#endif'; \ - fi; \ - rm -f $(@:.d=.h).new32 $(@:.d=.h).new64; \ + LC_ALL=C sort > $(@:.d=.h).new$(v); \ + $(if $(syscall-list-$(v)-condition),\ + echo '#if $(syscall-list-$(v)-condition)';) \ + cat $(@:.d=.h).new$(v); \ + $(if $(syscall-list-$(v)-condition),echo '#endif';) \ + rm -f $(@:.d=.h).new$(v); \ + ) \ } > $(@:.d=.h).new mv -f $(@:.d=.h).new $(@:.d=.h) ifneq (,$(objpfx)) - sed $(sed-remove-objpfx) $(@:.h=.d)-t1 $(@:.h=.d)-t2 > $(@:.h=.d)-t3 + sed $(sed-remove-objpfx) \ + $(foreach v,$(syscall-list-variants),$(@:.h=.d)-t$(v)) > $(@:.h=.d)-t3 else - cat $(@:.h=.d)-t1 $(@:.h=.d)-t2 > $(@:.h=.d)-t3 + cat $(foreach v,$(syscall-list-variants),$(@:.h=.d)-t$(v)) \ + > $(@:.h=.d)-t3 endif - rm -f $(@:.h=.d)-t1 $(@:.h=.d)-t2 + rm -f $(foreach v,$(syscall-list-variants),$(@:.h=.d)-t$(v)) mv -f $(@:.h=.d)-t3 $(@:.h=.d) $(inst_includedir)/bits/syscall.h: $(objpfx)syscall-list.h $(+force) diff --git a/sysdeps/unix/sysv/linux/powerpc/Makefile b/sysdeps/unix/sysv/linux/powerpc/Makefile index d1281cf469..55311a4fc1 100644 --- a/sysdeps/unix/sysv/linux/powerpc/Makefile +++ b/sysdeps/unix/sysv/linux/powerpc/Makefile @@ -1,4 +1,9 @@ -64bit-predefine = __powerpc64__ +syscall-list-variants := 32bit 64bit +syscall-list-32bit-options := -U__powerpc64__ +syscall-list-32bit-condition := __WORDSIZE == 32 +syscall-list-64bit-options := -D__powerpc64__ +syscall-list-64bit-condition := __WORDSIZE == 64 + ifeq ($(subdir),rt) librt-routines += rt-sysdep endif diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile index 72eae688db..fb20fb05ac 100644 --- a/sysdeps/unix/sysv/linux/s390/Makefile +++ b/sysdeps/unix/sysv/linux/s390/Makefile @@ -1,4 +1,9 @@ -64bit-predefine = __s390x__ +syscall-list-variants := 32bit 64bit +syscall-list-32bit-options := -U__s390x__ +syscall-list-32bit-condition := __WORDSIZE == 32 +syscall-list-64bit-options := -D__s390x__ +syscall-list-64bit-condition := __WORDSIZE == 64 + ifeq ($(subdir),rt) librt-routines += rt-sysdep endif diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile index 9cb2a634d5..96bf0bbd16 100644 --- a/sysdeps/unix/sysv/linux/sparc/Makefile +++ b/sysdeps/unix/sysv/linux/sparc/Makefile @@ -1,4 +1,8 @@ -64bit-predefine = __sparc_v9__ __arch64__ +syscall-list-variants := 32bit 64bit +syscall-list-32bit-options := -U__sparc_v9__ -U__arch64__ +syscall-list-32bit-condition := __WORDSIZE == 32 +syscall-list-64bit-options := -D__sparc_v9__ -D__arch64__ +syscall-list-64bit-condition := __WORDSIZE == 64 ifeq ($(subdir),rt) librt-routines += rt-sysdep diff --git a/sysdeps/unix/sysv/linux/x86_64/Makefile b/sysdeps/unix/sysv/linux/x86_64/Makefile index 6e2741a967..9c9e6151d1 100644 --- a/sysdeps/unix/sysv/linux/x86_64/Makefile +++ b/sysdeps/unix/sysv/linux/x86_64/Makefile @@ -1,5 +1,8 @@ -32bit-predefine = __i386__ -64bit-predefine = __x86_64__ +syscall-list-variants := 32bit 64bit +syscall-list-32bit-options := -D__i386__ -U__x86_64__ +syscall-list-32bit-condition := __WORDSIZE == 32 +syscall-list-64bit-options := -U__i386__ -D__x86_64__ +syscall-list-64bit-condition := __WORDSIZE == 64 ifeq ($(subdir),misc) sysdep_routines += ioperm iopl |