From 0ab0291b84b45f2389a019af2c88bf5169d14f64 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 26 May 2012 10:46:59 -0700 Subject: [PATCH] Convert WORDSIZE[32|64]/ld entries to abi-variants --- ChangeLog | 46 +++++++++++++++++ Makeconfig | 56 +++++++++++++++++---- Makefile | 23 +++++++-- include/stubs-biarch.h | 12 ----- scripts/lib-names.awk | 51 ++++--------------- scripts/soversions.awk | 11 ---- shlib-versions | 19 ------- sysdeps/unix/sysv/linux/Makefile | 53 ++++++++++--------- sysdeps/unix/sysv/linux/i386/Implies | 1 + sysdeps/unix/sysv/linux/i386/Makefile | 3 ++ sysdeps/unix/sysv/linux/powerpc/Makefile | 11 ++-- sysdeps/unix/sysv/linux/s390/Makefile | 11 ++-- sysdeps/unix/sysv/linux/sparc/Makefile | 10 ++-- sysdeps/unix/sysv/linux/x86/Makefile | 14 ++++++ sysdeps/unix/sysv/linux/x86_64/64/Makefile | 2 + sysdeps/unix/sysv/linux/x86_64/Implies | 1 + sysdeps/unix/sysv/linux/x86_64/Makefile | 6 --- sysdeps/unix/sysv/linux/x86_64/x32/Makefile | 3 ++ sysdeps/x86_64/64/shlib-versions | 1 - sysdeps/x86_64/x32/shlib-versions | 1 - 20 files changed, 186 insertions(+), 149 deletions(-) delete mode 100644 include/stubs-biarch.h create mode 100644 sysdeps/unix/sysv/linux/i386/Implies create mode 100644 sysdeps/unix/sysv/linux/x86/Makefile create mode 100644 sysdeps/unix/sysv/linux/x86_64/64/Makefile diff --git a/ChangeLog b/ChangeLog index cf0d9e79ae..66249fc179 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,49 @@ +2012-05-30 H.J. Lu + + [BZ #14112] + * Makeconfig (default-abi): New macro. + (abi-includes): Likewise. + ($(common-objpfx)soversions.mk): Remove WORDSIZE check. Use + $(abi-$(default-abi)-lib-soname) for soname if defined. + ($(common-objpfx)gnu/lib-names.stmp): Generate from + abi-variants. + * Makefile (installed-stubs): Likewise. + * include/stubs-biarch.h: Removed. + * scripts/lib-names.awk: Only handle one library at a time. + * scripts/soversions.awk: Remove WORDSIZE support. + * shlib-versions: Remove WORDSIZE and i.86/s390x/powerpc64 ld + entries. + * sysdeps/unix/sysv/linux/Makefile (syscall-list-variants): + Removed. + (syscall-list-default-condition): Likewise. + (syscall-list-default-condition): Likewise. + (syscall-list-includes): Likewise. + ($(objpfx)bits/syscall%h $(objpfx)bits/syscall%d): Replace + syscall-list-* with abi-*. Handle undefined abi-variants. + * sysdeps/unix/sysv/linux/i386/Makefile (default-abi): New macro. + * sysdeps/unix/sysv/linux/i386/Implies: New file. + * sysdeps/unix/sysv/linux/x86/Makefile: Likewise. + * sysdeps/unix/sysv/linux/x86_64/64/Makefile: Likewise. + * sysdeps/unix/sysv/linux/x86_64/Implies: Add unix/sysv/linux/x86. + * sysdeps/unix/sysv/linux/x86_64/Makefile (syscall-list-variants): + Removed. + (syscall-list-32-options): Likewise. + (syscall-list-32-condition): Likewise. + (syscall-list-64-options): Likewise. + (syscall-list-64-condition): Likewise. + * sysdeps/unix/sysv/linux/x86_64/x32/Makefile (default-abi): New + macro. + * sysdeps/unix/sysv/linux/powerpc/Makefile (syscall-list-*): + Renamed to ... + (abi-*): This. + (abi-64-ld-soname): New macro. + * sysdeps/unix/sysv/linux/s390/Makefile: Likewise. + * sysdeps/unix/sysv/linux/sparc/Makefile (syscall-list-*): + Renamed to ... + (abi-*): This. + * sysdeps/x86_64/64/shlib-versions: Remove ld entry. + * sysdeps/x86_64/x32/shlib-versions: Likewise. + 2012-05-30 Joseph Myers * sysdeps/unix/sysv/linux/kernel-features.h diff --git a/Makeconfig b/Makeconfig index b4b2963d00..df7545fd71 100644 --- a/Makeconfig +++ b/Makeconfig @@ -791,6 +791,24 @@ ifeq (yes, $(build-shared)) sed '/^[ ]*#/d;/^[ ]*$$/d' $< > $@T mv -f $@T $@ +# To generate a header to support more than one ABI for different +# architecture variants, the CPU/Makefile defines abi-variants to be a +# list of names for those variants (e.g. 32 64), and, for each variant, +# defines abi-$(variant)-condition to be the condition for those options +# to use in a C #if condition. abi-includes may be defined to a list of +# headers to include in the generated header, if the default does not +# suffice. + +ifdef abi-variants +ifndef default-abi +default-abi = $(firstword $(abi-variants)) +endif +endif + +ifndef abi-includes +abi-includes := bits/wordsize.h +endif + # Process the shlib-versions file, which tells us what shared library # version numbers to use when we install shared objects on this system. # We need to wait until $(subdirs) is complete. @@ -816,24 +834,17 @@ $(common-objpfx)soversions.i: $(..)scripts/soversions.awk \ -f $^ > $@T mv -f $@T $@ $(common-objpfx)soversions.mk: $(common-objpfx)soversions.i $(..)Makeconfig - (seen_DEFAULT=0; seen_WORDSIZE32=0; seen_WORDSIZE64=0; \ - while read which lib number setname; do \ + (while read which lib number setname; do \ eval seen_$$which=1; \ test x"$$which" != xABI || echo abi-name = "$$lib"; \ test x"$$which" = xDEFAULT || continue; \ case $$number in \ [0-9]*) echo "$$lib.so-version=.$$number"; \ echo "all-sonames+=$$lib=$$lib.so\$$($$lib.so-version)";;\ - *) echo "$$lib.so-version=$$number"; \ + *) echo "$$lib.so-version=\$$(if \$$(abi-$(default-abi)-$$lib-soname),\$$(abi-$(default-abi)-$$lib-soname),$$number)"; \ echo "all-sonames+=$$lib=\$$($$lib.so-version)";;\ esac; \ done; \ - case "$$seen_DEFAULT$$seen_WORDSIZE32$$seen_WORDSIZE64" in \ - 100) echo biarch = no;; \ - 101) echo biarch = 32;; \ - ?1?) echo biarch = 64;; \ - *) echo >&2 BUG; exit 2;; \ - esac; \ echo soversions.mk-done = t;) < $< > $@T; exit 0 mv -f $@T $@ endif @@ -850,8 +861,31 @@ $(common-objpfx)gnu/lib-names.h: $(common-objpfx)gnu/lib-names.stmp; @: $(common-objpfx)gnu/lib-names.stmp: $(..)scripts/lib-names.awk \ $(common-objpfx)soversions.i $(make-target-directory) - @rm -f ${@:stmp=T} $@ - LC_ALL=C $(AWK) -f $^ > ${@:stmp=T} + { \ + echo '/* This file is automatically generated.';\ + echo ' It defines macros to allow user program to find the shared'; \ + echo ' library files which come as part of GNU libc. */'; \ + echo '#ifndef __GNU_LIB_NAMES_H'; \ + echo '#define __GNU_LIB_NAMES_H 1'; \ + echo ''; \ + $(if $(abi-includes), \ + $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ + echo '';) \ + $(if $(abi-variants), \ + $(foreach v,$(abi-variants),\ + $(if $(abi-$(v)-condition),\ + echo '#if $(abi-$(v)-condition)'; \ + ($(foreach s,$(all-sonames), \ + $(if $(abi-$(v)-$(firstword $(subst =, ,$(s)))-soname),\ + echo $(firstword $(subst =, ,$(s)))=$(abi-$(v)-$(firstword $(subst =, ,$(s)))-soname);, \ + echo $(s);))) \ + | LC_ALL=C $(AWK) -v multi=1 -f $(firstword $^) | LC_ALL=C sort;) \ + $(if $(abi-$(v)-condition),echo '#endif';)), \ + ($(foreach s,$(all-sonames), echo $(s);)) \ + | LC_ALL=C $(AWK) -f $(firstword $^) | LC_ALL=C sort;) \ + echo ''; \ + echo '#endif /* gnu/lib-names.h */'; \ + } > ${@:stmp=T} $(move-if-change) ${@:stmp=T} ${@:stmp=h} touch $@ endif diff --git a/Makefile b/Makefile index c0a0cfb828..89588c1e8a 100644 --- a/Makefile +++ b/Makefile @@ -170,14 +170,29 @@ others: $(common-objpfx)testrun.sh subdir-stubs := $(foreach dir,$(subdirs),$(common-objpfx)$(dir)/stubs) -ifeq ($(biarch),no) +ifndef abi-variants installed-stubs = $(inst_includedir)/gnu/stubs.h else -installed-stubs = $(inst_includedir)/gnu/stubs-$(biarch).h +installed-stubs = $(inst_includedir)/gnu/stubs-$(default-abi).h -$(inst_includedir)/gnu/stubs.h: include/stubs-biarch.h $(+force) +$(inst_includedir)/gnu/stubs.h: $(common-objpfx)soversions.mk $(+force) $(make-target-directory) - $(INSTALL_DATA) $< $@ + { \ + echo '/* This file is automatically generated.';\ + echo " This file selects the right generated file of \`__stub_FUNCTION' macros";\ + echo ' based on the architecture being compiled for. */'; \ + echo ''; \ + $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ + echo ''; \ + $(foreach v,$(abi-variants),\ + $(if $(abi-$(v)-condition),\ + echo '#if $(abi-$(v)-condition)'; \ + echo '# include '); \ + $(if $(abi-$(v)-condition),echo '#endif';) \ + rm -f $(@:.d=.h).new$(v); \ + ) \ + } > $(@:.d=.h).new + mv -f $(@:.d=.h).new $(@:.d=.h) install-others-nosubdir: $(installed-stubs) endif diff --git a/include/stubs-biarch.h b/include/stubs-biarch.h deleted file mode 100644 index fc086bd894..0000000000 --- a/include/stubs-biarch.h +++ /dev/null @@ -1,12 +0,0 @@ -/* This file selects the right generated file of `__stub_FUNCTION' macros - based on the architecture being compiled for. */ - -#include - -#if __WORDSIZE == 32 -# include -#elif __WORDSIZE == 64 -# include -#else -# error "unexpected value for __WORDSIZE macro" -#endif diff --git a/scripts/lib-names.awk b/scripts/lib-names.awk index 77e6668515..ccb7b7f431 100644 --- a/scripts/lib-names.awk +++ b/scripts/lib-names.awk @@ -1,18 +1,17 @@ # awk script for soversions.i -> gnu/lib-names.h; see Makeconfig. -$1 != "DEFAULT" { multi = 1 } - # { - lib = $2; - version = $3; - if ($3 !~ /^[0-9]/) { - soname = $3; - extra = $3; + split($1, fields, "=") + lib = fields[1]; + soname = version = fields[2]; + sub(/^.*=/, "", soname); + sub(/^lib.*\.so\./, "", version); + if ($soname !~ /^lib/) { + extra = soname; sub(/\.so.*$/, "", extra); } else { - soname = lib ".so." $3; extra = ""; } soname = "\"" soname "\""; @@ -26,41 +25,9 @@ $1 != "DEFAULT" { multi = 1 } } END { - print "/* This file is automatically generated."; - print " It defines macros to allow user program to find the shared"; - print " library files which come as part of GNU libc. */"; - print "#ifndef __GNU_LIB_NAMES_H"; - print "#define __GNU_LIB_NAMES_H 1"; - print ""; - - pfx = multi ? "# define " : "#define "; for (elt in macros) { split(elt, x); - line = sprintf("%-40s%s", pfx x[2], macros[elt]); - if (x[1] in lines) - lines[x[1]] = lines[x[1]] "\n" line; - else - lines[x[1]] = line; + pfx = multi ? "# define " : "#define "; + printf("%-40s%s\n", pfx x[2], macros[elt]); } - - if (multi) { - # Print these in a fixed order so the result is identical - # on both sides of the coin. - if (!("WORDSIZE32" in lines)) - lines["WORDSIZE32"] = lines["DEFAULT"]; - if (!("WORDSIZE64" in lines)) - lines["WORDSIZE64"] = lines["DEFAULT"]; - print "#include \n"; - print "#if __WORDSIZE == 32"; - cmd = "LC_ALL=C sort"; print lines["WORDSIZE32"] | cmd; close(cmd); - print "#else" - cmd = "LC_ALL=C sort"; print lines["WORDSIZE64"] | cmd; close(cmd); - print "#endif"; - } - else { - cmd = "LC_ALL=C sort"; print lines["DEFAULT"] | cmd; close(cmd); - } - - print ""; - print "#endif /* gnu/lib-names.h */" } diff --git a/scripts/soversions.awk b/scripts/soversions.awk index 55577ccc7e..dc8afdc205 100644 --- a/scripts/soversions.awk +++ b/scripts/soversions.awk @@ -7,17 +7,6 @@ BEGIN { { thiscf = $1 } -$2 ~ /WORDSIZE[3264]/ { - if ((config ~ thiscf) && !othercf) { - othercf = $3; - sub(/@CPU@/, cpu, othercf); - sub(/@VENDOR@/, vendor, othercf); - sub(/@OS@/, os, othercf); - configs[othercf] = $2; - } - next; -} - $2 == "ABI" { if ((config ~ thiscf) && !abiname) { abiname = $3; diff --git a/shlib-versions b/shlib-versions index b8ed1e9b7d..9344590083 100644 --- a/shlib-versions +++ b/shlib-versions @@ -18,11 +18,6 @@ # library has no third column. The defaults must precede the entries they # apply to. # -# An entry with WORDSIZE* in the second column gives an alternate -# configuration tuple whose macros will be conditionally defined in -# gnu/lib-names.h; @CPU@, @VENDOR@, @OS@ can be used in the third -# column to compose the alternate tuple matched against the patterns here. - # Configuration DEFAULT Earliest symbol set # ------------- --------------- ------------------------------ @@ -30,17 +25,6 @@ s390x-.*-linux.* DEFAULT GLIBC_2.2 powerpc64-.*-linux.* DEFAULT GLIBC_2.3 .*-.*-gnu-gnu.* DEFAULT GLIBC_2.2.6 -# Configuration WORDSIZE[32|64] Alternate configuration -# ------------- ---------- ----------------------- -x86_64-.*-.* WORDSIZE32 i686-@VENDOR@-@OS@ -i.86-.*-.* WORDSIZE64 x86_64-@VENDOR@-@OS@ -s390x-.*-.* WORDSIZE32 s390-@VENDOR@-@OS@ -s390-.*-.* WORDSIZE64 s390x-@VENDOR@-@OS@ -powerpc64-.*-.* WORDSIZE32 powerpc-@VENDOR@-@OS@ -powerpc.*-.*-.* WORDSIZE64 powerpc64-@VENDOR@-@OS@ -sparc64.*-.*-.* WORDSIZE32 sparc-@VENDOR@-@OS@ -sparc.*-.*-.* WORDSIZE64 sparc64-@VENDOR@-@OS@ - # Configuration ABI Identifier for ABI data files # ------------- ---------- ----------------------------- sparc64.*-.*-.* ABI sparc64-@OS@ @@ -70,12 +54,9 @@ sparc64.*-.*-linux.* libc=6 GLIBC_2.2 .*-.*-gnu-gnu.* libc=0.3 # The dynamic loader also requires different names. -i.86-.*-linux.* ld=ld-linux.so.2 sparc64.*-.*-linux.* ld=ld-linux.so.2 GLIBC_2.2 sparc.*-.*-linux.* ld=ld-linux.so.2 sh.*-.*-linux.* ld=ld-linux.so.2 GLIBC_2.2 -s390x-.*-linux.* ld=ld64.so.1 GLIBC_2.2 -powerpc64.*-.*-linux.* ld=ld64.so.1 GLIBC_2.3 # We use the ELF ABI standard name for the default. .*-.*-.* ld=ld.so.1 diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 70fd137dbc..21b560790e 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -43,25 +43,14 @@ tests += tst-clone # Generate the list of SYS_* macros for the system calls (__NR_* macros). # 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 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 +# variants, the CPU/Makefile defines abi-variants to be a list of names +# for those variants (e.g. 32 64), and, for each variant, defines +# abi-$(variant)-options to be compiler options to cause +# to define the desired list of syscalls and abi-$(variant)-condition to +# be the condition for those options to use in a C #if condition. +# abi-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)bits/syscall%h $(objpfx)bits/syscall%d: ../sysdeps/unix/sysv/linux/sys/syscall.h $(make-target-directory) { \ @@ -71,31 +60,41 @@ $(objpfx)bits/syscall%h $(objpfx)bits/syscall%d: ../sysdeps/unix/sysv/linux/sys/ echo '# error "Never use directly; include instead."'; \ echo '#endif'; \ echo ''; \ - $(foreach h,$(syscall-list-includes), echo '#include <$(h)>';) \ + $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ echo ''; \ - $(foreach v,$(syscall-list-variants),\ + $(if $(abi-variants), \ + $(foreach v,$(abi-variants),\ $(CC) -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(sysincludes) $< $(syscall-list-$(v)-options) \ + -x c $(sysincludes) $< $(abi-$(v)-options) \ -D_LIBC -dM | \ sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ LC_ALL=C sort > $(@:.d=.h).new$(v); \ - $(if $(syscall-list-$(v)-condition),\ - echo '#if $(syscall-list-$(v)-condition)';) \ + $(if $(abi-$(v)-condition),\ + echo '#if $(abi-$(v)-condition)';) \ cat $(@:.d=.h).new$(v); \ - $(if $(syscall-list-$(v)-condition),echo '#endif';) \ + $(if $(abi-$(v)-condition),echo '#endif';) \ rm -f $(@:.d=.h).new$(v); \ - ) \ + ), \ + $(CC) -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ + -x c $(sysincludes) $< \ + -D_LIBC -dM | \ + sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ + LC_ALL=C sort;) \ } > $(@:.d=.h).new mv -f $(@:.d=.h).new $(@:.d=.h) +ifdef abi-variants ifneq (,$(objpfx)) sed $(sed-remove-objpfx) \ - $(foreach v,$(syscall-list-variants),$(@:.h=.d)-t$(v)) > $(@:.h=.d)-t3 + $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) > $(@:.h=.d)-t3 else - cat $(foreach v,$(syscall-list-variants),$(@:.h=.d)-t$(v)) \ + cat $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) \ > $(@:.h=.d)-t3 endif - rm -f $(foreach v,$(syscall-list-variants),$(@:.h=.d)-t$(v)) + rm -f $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) mv -f $(@:.h=.d)-t3 $(@:.h=.d) +else + mv -f $(@:.h=.d)-t $(@:.h=.d) +endif ifndef no_deps # Get the generated list of dependencies (probably /usr/include/asm/unistd.h). diff --git a/sysdeps/unix/sysv/linux/i386/Implies b/sysdeps/unix/sysv/linux/i386/Implies new file mode 100644 index 0000000000..ccc7eaa8a4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/i386/Implies @@ -0,0 +1 @@ +unix/sysv/linux/x86 diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile index fc5a524ebf..f4585d788a 100644 --- a/sysdeps/unix/sysv/linux/i386/Makefile +++ b/sysdeps/unix/sysv/linux/i386/Makefile @@ -1,3 +1,6 @@ +# The default ABI is 32. +default-abi := 32 + ifeq ($(subdir),misc) sysdep_routines += ioperm iopl vm86 call_pselect6 call_fallocate sysdep_headers += sys/elf.h sys/perm.h sys/reg.h sys/vm86.h sys/debugreg.h sys/io.h diff --git a/sysdeps/unix/sysv/linux/powerpc/Makefile b/sysdeps/unix/sysv/linux/powerpc/Makefile index 55311a4fc1..f6dccd9a3f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/Makefile +++ b/sysdeps/unix/sysv/linux/powerpc/Makefile @@ -1,8 +1,9 @@ -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 +abi-variants := 32 64 +abi-32-options := -U__powerpc64__ +abi-32-condition := __WORDSIZE == 32 +abi-64-options := -D__powerpc64__ +abi-64-condition := __WORDSIZE == 64 +abi-64-ld-soname := ld64.so.1 ifeq ($(subdir),rt) librt-routines += rt-sysdep diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile index fb20fb05ac..45b1922338 100644 --- a/sysdeps/unix/sysv/linux/s390/Makefile +++ b/sysdeps/unix/sysv/linux/s390/Makefile @@ -1,8 +1,9 @@ -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 +abi-variants := 32 64 +abi-32-options := -U__s390x__ +abi-32-condition := __WORDSIZE == 32 +abi-64-options := -D__s390x__ +abi-64-condition := __WORDSIZE == 64 +abi-64-ld-soname := ld64.so.1 ifeq ($(subdir),rt) librt-routines += rt-sysdep diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile index d769c48526..96b783e5bb 100644 --- a/sysdeps/unix/sysv/linux/sparc/Makefile +++ b/sysdeps/unix/sysv/linux/sparc/Makefile @@ -1,8 +1,8 @@ -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 +abi-variants := 32 64 +abi-32-options := -U__sparc_v9__ -U__arch64__ +abi-32-condition := __WORDSIZE == 32 +abi-64-options := -D__sparc_v9__ -D__arch64__ +abi-64-condition := __WORDSIZE == 64 ifeq ($(subdir),rt) librt-routines += rt-sysdep diff --git a/sysdeps/unix/sysv/linux/x86/Makefile b/sysdeps/unix/sysv/linux/x86/Makefile new file mode 100644 index 0000000000..cf4a55cf0c --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86/Makefile @@ -0,0 +1,14 @@ +# We don't need any header files. +abi-includes := + +abi-variants := 32 64 x32 + +abi-32-options := -D__i386__ -U__x86_64__ +abi-32-condition := !defined __x86_64__ +abi-32-ld-soname := ld-linux.so.2 +abi-64-options := -U__i386__ -D__x86_64__ -U__ILP32__ -D__LP64__ +abi-64-condition := defined __x86_64__ && defined __LP64__ +abi-64-ld-soname := ld-linux-x86-64.so.2 +abi-x32-options := -U__i386__ -D__x86_64__ -D__ILP32__ -U__LP64__ +abi-x32-condition := defined __x86_64__ && defined __ILP32__ +abi-x32-ld-soname := ld-linux-x32.so.2 diff --git a/sysdeps/unix/sysv/linux/x86_64/64/Makefile b/sysdeps/unix/sysv/linux/x86_64/64/Makefile new file mode 100644 index 0000000000..a7b6dc5a53 --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86_64/64/Makefile @@ -0,0 +1,2 @@ +# The default ABI is 64. +default-abi := 64 diff --git a/sysdeps/unix/sysv/linux/x86_64/Implies b/sysdeps/unix/sysv/linux/x86_64/Implies index 8d91c80097..c7a65c9386 100644 --- a/sysdeps/unix/sysv/linux/x86_64/Implies +++ b/sysdeps/unix/sysv/linux/x86_64/Implies @@ -1 +1,2 @@ +unix/sysv/linux/x86 unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/x86_64/Makefile b/sysdeps/unix/sysv/linux/x86_64/Makefile index 59a6b0a8ba..dd4ab59c5a 100644 --- a/sysdeps/unix/sysv/linux/x86_64/Makefile +++ b/sysdeps/unix/sysv/linux/x86_64/Makefile @@ -1,9 +1,3 @@ -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 sysdep_headers += sys/perm.h sys/reg.h sys/debugreg.h sys/io.h diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/Makefile b/sysdeps/unix/sysv/linux/x86_64/x32/Makefile index aa78238a0d..ecbdefb2d3 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/Makefile +++ b/sysdeps/unix/sysv/linux/x86_64/x32/Makefile @@ -1,3 +1,6 @@ +# The default ABI is x32. +default-abi := x32 + ifeq ($(subdir),misc) sysdep_routines += arch_prctl endif diff --git a/sysdeps/x86_64/64/shlib-versions b/sysdeps/x86_64/64/shlib-versions index c79748734e..50dd908403 100644 --- a/sysdeps/x86_64/64/shlib-versions +++ b/sysdeps/x86_64/64/shlib-versions @@ -1,4 +1,3 @@ # Configuration DEFAULT Earliest symbol set # ------------- --------------- ------------------------------ x86_64-.*-linux.* DEFAULT GLIBC_2.2.5 -x86_64-.*-linux.* ld=ld-linux-x86-64.so.2 GLIBC_2.2.5 diff --git a/sysdeps/x86_64/x32/shlib-versions b/sysdeps/x86_64/x32/shlib-versions index d9f63e1067..ae3979b12e 100644 --- a/sysdeps/x86_64/x32/shlib-versions +++ b/sysdeps/x86_64/x32/shlib-versions @@ -1,7 +1,6 @@ # Configuration DEFAULT Earliest symbol set # ------------- --------------- ------------------------------ x86_64-.*-linux.* DEFAULT GLIBC_2.16 -x86_64-.*-linux.* ld=ld-linux-x32.so.2 GLIBC_2.16 # Configuration ABI Identifier for ABI data files # ------------- ---------- -----------------------------