From patchwork Sun Aug 14 11:01:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 14563 Received: (qmail 121259 invoked by alias); 14 Aug 2016 11:02:10 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 121114 invoked by uid 89); 14 Aug 2016 11:02:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.3 required=5.0 tests=BAYES_50, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=resource, 67, dan, personality X-HELO: mx1.redhat.com Subject: Re: [PATCH] Use sysdep.o from libc.a in libpthread.a on more architectures [BZ #20452] To: =?UTF-8?Q?Dan_Hor=c3=a1k?= References: <20160811124019.C0107401EA74B@oldenburg.str.redhat.com> <20160811164456.adfd34722fc6cfd92e52ce22@danny.cz> Cc: libc-alpha@sourceware.org From: Florian Weimer Message-ID: <272e675b-48aa-a2d3-15a7-b508d92fd105@redhat.com> Date: Sun, 14 Aug 2016 13:01:57 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: <20160811164456.adfd34722fc6cfd92e52ce22@danny.cz> On 08/11/2016 04:44 PM, Dan HorĂ¡k wrote: > On Thu, 11 Aug 2016 14:40:19 +0200 > fweimer@redhat.com (Florian Weimer) wrote: > >> This changes microblaze, powerpc, sparc, tile, in addition to x86, >> which was changed in commit e67330ab57bfd0f964539576ae7dcc658c456724. > > How about s390(x)? The original qemu issue is also there - see > https://bugzilla.redhat.com/show_bug.cgi?id=1352625#c6 (and the closed > duplicate above) Thanks. Here's a new patch, tested on x86_64, i386, ppc, ppc64, s390, s390x. Florian Do not override objects in libc.a in other static libraries [BZ #20452] With this change, we no longer add sysdep.o and similar objects which are present in libc.a to other static libraries. 2016-08-14 Florian Weimer [BZ #20452] Avoid additional copies of objects in libc.a in static libraries. * sysdeps/ia64/nptl/Makefile (libpthread-shared-only-routines): Add ptw-sysdep, ptw-sigblock, ptw-sigprocmask. * sysdeps/mips/Makefile (librt-shared-only-routines): Add rt-sysdep. * sysdeps/mips/nptl/Makefile (libpthread-shared-only-routines): Add nptl-sysdep. * sysdeps/s390/nptl/Makefile (libpthread-shared-only-routines): Add ptw-sysdep. * sysdeps/unix/alpha/Makefile (librt-shared-only-routines): Add rt-sysdep. * sysdeps/unix/sysv/linux/alpha/Makefile (libpthread-shared-only-routines): Add ptw-sysdep, ptw-sigprocmask, ptw-rt_sigaction. * sysdeps/unix/sysv/linux/ia64/Makefile (librt-shared-only-routines): Add rt-sysdep. * sysdeps/unix/sysv/linux/i386/Makefile (libpthread-shared-only-routines): Add libc-do-syscall. * sysdeps/unix/sysv/linux/microblaze/Makefile (libpthread-shared-only-routines): Add sysdep. * sysdeps/unix/sysv/linux/powerpc/Makefile (librt-shared-only-routines): Add rt-sysdep. (libpthread-shared-only-routines): Add sysdep. * sysdeps/unix/sysv/linux/s390/Makefile (librt-shared-only-routines): Add rt-sysdep. * sysdeps/unix/sysv/linux/sparc/Makefile (librt-shared-only-routines): Add rt-sysdep. (libpthread-shared-only-routines): Add sysdep. * sysdeps/unix/sysv/linux/tile/Makefile (libpthread-shared-only-routines): Likewise. diff --git a/sysdeps/ia64/nptl/Makefile b/sysdeps/ia64/nptl/Makefile index 48f1327..1e6be8e 100644 --- a/sysdeps/ia64/nptl/Makefile +++ b/sysdeps/ia64/nptl/Makefile @@ -21,4 +21,5 @@ endif ifeq ($(subdir),nptl) libpthread-routines += ptw-sysdep ptw-sigblock ptw-sigprocmask +libpthread-shared-only-routines += ptw-sysdep ptw-sigblock ptw-sigprocmask endif diff --git a/sysdeps/mips/Makefile b/sysdeps/mips/Makefile index 3d35523..7c1d779 100644 --- a/sysdeps/mips/Makefile +++ b/sysdeps/mips/Makefile @@ -9,6 +9,7 @@ endif ifeq ($(subdir),rt) librt-sysdep_routines += rt-sysdep +librt-shared-only-routines += rt-sysdep endif ifeq ($(subdir),debug) diff --git a/sysdeps/mips/nptl/Makefile b/sysdeps/mips/nptl/Makefile index 117744f..dda154d 100644 --- a/sysdeps/mips/nptl/Makefile +++ b/sysdeps/mips/nptl/Makefile @@ -21,4 +21,5 @@ endif ifeq ($(subdir),nptl) libpthread-sysdep_routines += nptl-sysdep +libpthread-shared-only-routines += nptl-sysdep endif diff --git a/sysdeps/s390/nptl/Makefile b/sysdeps/s390/nptl/Makefile index 5734b98..3a391c8 100644 --- a/sysdeps/s390/nptl/Makefile +++ b/sysdeps/s390/nptl/Makefile @@ -21,4 +21,5 @@ endif ifeq ($(subdir),nptl) libpthread-routines += ptw-sysdep +libpthread-shared-only-routines += ptw-sysdep endif diff --git a/sysdeps/unix/alpha/Makefile b/sysdeps/unix/alpha/Makefile index 441aa02..0660847 100644 --- a/sysdeps/unix/alpha/Makefile +++ b/sysdeps/unix/alpha/Makefile @@ -1,3 +1,4 @@ ifeq ($(subdir),rt) librt-sysdep_routines += rt-sysdep +librt-shared-only-routines += rt-sysdep endif diff --git a/sysdeps/unix/sysv/linux/#Makefile# b/sysdeps/unix/sysv/linux/#Makefile# new file mode 100644 index 0000000..8a76888 --- /dev/null +++ b/sysdeps/unix/sysv/linux/#Makefile# @@ -0,0 +1,203 @@ +ifeq ($(subdir),csu) +sysdep_routines += errno-loc +endif + +ifeq ($(subdir),assert) +CFLAGS-assert.c += -DFATAL_PREPARE_INCLUDE='' +CFLAGS-assert-perr.c += -DFATAL_PREPARE_INCLUDE='' +endif + +ifeq ($(subdir),malloc) +CFLAGS-malloc.c += -DMORECORE_CLEARS=2 +endif + +ifeq ($(subdir),misc) +include $(firstword $(wildcard $(sysdirs:=/sysctl.mk))) + +sysdep_routines += clone llseek umount umount2 readahead \ + setfsuid setfsgid epoll_pwait signalfd \ + eventfd eventfd_read eventfd_write prlimit \ + personality + +CFLAGS-gethostid.c = -fexceptions +CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=0x80000000-__getpagesize()" + +# Note that bits/mman-linux.h is listed here though the file lives in the +# top-level bits/ subdirectory instead of here in sysdeps/.../linux/bits/. +# That is just so that other (non-Linux) configurations for whom the +# bits/mman-linux.h definitions work well do not have to duplicate the +# contents of the file. The file must still be listed in sysdep_headers +# here and in any non-Linux configuration that uses it; other +# configurations will not install the file. +sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \ + sys/klog.h \ + sys/user.h sys/prctl.h \ + sys/kd.h sys/soundcard.h sys/vt.h \ + sys/quota.h sys/fsuid.h \ + scsi/sg.h scsi/scsi.h scsi/scsi_ioctl.h sys/pci.h \ + sys/ultrasound.h sys/raw.h sys/personality.h sys/epoll.h \ + bits/a.out.h sys/inotify.h sys/signalfd.h sys/eventfd.h \ + sys/timerfd.h sys/fanotify.h bits/eventfd.h bits/inotify.h \ + bits/signalfd.h bits/timerfd.h bits/epoll.h \ + bits/socket_type.h bits/syscall.h bits/sysctl.h \ + bits/mman-linux.h + +tests += tst-clone tst-clone2 tst-fanotify tst-personality + +# 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 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. +# +# The generated header is compiled with `-ffreestanding' to avoid any +# circular dependencies against the installed implementation headers. +# Such a dependency would require the implementation header to be +# installed before the generated header could be built (See bug 15711). +# In current practice the generated header dependencies do not include +# any of the implementation headers removed by the use of `-ffreestanding'. + +$(objpfx)bits/syscall%h $(objpfx)bits/syscall%d: ../sysdeps/unix/sysv/linux/sys/syscall.h + $(make-target-directory) + { \ + echo '/* Generated at libc build time from kernel syscall list. */';\ + echo ''; \ + echo '#ifndef _SYSCALL_H'; \ + echo '# error "Never use directly; include instead."'; \ + echo '#endif'; \ + echo ''; \ + $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ + echo ''; \ + $(if $(abi-variants), \ + $(foreach v,$(abi-variants),\ + $(CC) -ffreestanding -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ + -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 $(abi-$(v)-condition),\ + echo '#if $(abi-$(v)-condition)';) \ + cat $(@:.d=.h).new$(v); \ + $(if $(abi-$(v)-condition),echo '#endif';) \ + rm -f $(@:.d=.h).new$(v); \ + ), \ + $(CC) -ffreestanding -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,$(abi-variants),$(@:.h=.d)-t$(v)) > $(@:.h=.d)-t3 +else + cat $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) \ + > $(@:.h=.d)-t3 +endif + 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). +-include $(objpfx)bits/syscall.d +endif +generated += bits/syscall.h bits/syscall.d +endif + +ifeq ($(subdir),time) +sysdep_headers += sys/timex.h bits/timex.h + +sysdep_routines += ntp_gettime ntp_gettimex +endif + +ifeq ($(subdir),socket) +sysdep_headers += net/if_ppp.h net/ppp-comp.h \ + net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \ + net/if_slip.h net/if_packet.h net/if_shaper.h +sysdep_routines += cmsg_nxthdr +CFLAGS-recvmmsg.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-sendmmsg.c = -fexceptions -fasynchronous-unwind-tables +endif + +ifeq ($(subdir),sunrpc) +sysdep_headers += nfs/nfs.h +endif + +ifeq ($(subdir),termios) +sysdep_headers += termio.h +endif + +ifeq ($(subdir),posix) +sysdep_headers += bits/initspin.h + +sysdep_routines += sched_getcpu + +tests += tst-affinity tst-affinity-pid + +CFLAGS-fork.c = $(libio-mtsafe) +CFLAGS-getpid.o = -fomit-frame-pointer +CFLAGS-getpid.os = -fomit-frame-pointer +endif + +ifeq ($(subdir),inet) +sysdep_headers += netinet/if_fddi.h netinet/if_tr.h \ + netipx/ipx.h netash/ash.h netax25/ax25.h netatalk/at.h \ + netrom/netrom.h netpacket/packet.h netrose/rose.h \ + neteconet/ec.h netiucv/iucv.h +sysdep_routines += netlink_assert_response +endif + +# Don't compile the ctype glue code, since there is no old non-GNU C library. +inhibit-glue = yes + +ifeq ($(subdir),dirent) +sysdep_r +outines += getdirentries getdirentries64 +endif + +ifeq ($(subdir),nis) +CFLAGS-ypclnt.c = -DUSE_BINDINGDIR=1 +endif + +ifeq ($(subdir),io) +sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \ + sync_file_range fallocate fallocate64 +sysdep_headers += bits/fcntl-linux.h +endif + +ifeq ($(subdir),elf) +sysdep-rtld-routines += dl-brk dl-sbrk dl-getcwd dl-openat64 dl-opendir \ + dl-fxstatat64 + +libof-lddlibc4 = lddlibc4 + +others += pldd +install-bin += pldd +$(objpfx)pldd: $(objpfx)xmalloc.o +endif + +ifeq ($(subdir),rt) +CFLAGS-mq_send.c += -fexceptions +CFLAGS-mq_receive.c += -fexceptions +endif + +ifeq ($(subdir),nscd) +sysdep-CFLAGS += -DHAVE_EPOLL -DHAVE_SENDFILE -DHAVE_INOTIFY -DHAVE_NETLINK +CFLAGS-gai.c += -DNEED_NETLINK +endif + +ifeq ($(subdir),nptl) +tests += tst-setgetname tst-align-clone tst-getpid1 \ + tst-thread-affinity-pthread tst-thread-affinity-pthread2 \ + tst-thread-affinity-sched +endif diff --git a/sysdeps/unix/sysv/linux/.#Makefile b/sysdeps/unix/sysv/linux/.#Makefile new file mode 120000 index 0000000..015baef --- /dev/null +++ b/sysdeps/unix/sysv/linux/.#Makefile @@ -0,0 +1 @@ +fweimer@oldenburg.str.redhat.com.21509:1469874129 \ No newline at end of file diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile index c089545..3b523b7 100644 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ b/sysdeps/unix/sysv/linux/alpha/Makefile @@ -40,4 +40,5 @@ endif # math ifeq ($(subdir),nptl) # pull in __syscall_error routine, __sigprocmask, __syscall_rt_sigaction libpthread-routines += ptw-sysdep ptw-sigprocmask ptw-rt_sigaction +libpthread-shared-only-routines += ptw-sysdep ptw-sigprocmask ptw-rt_sigaction endif diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile index b015ff7..6073a9f 100644 --- a/sysdeps/unix/sysv/linux/i386/Makefile +++ b/sysdeps/unix/sysv/linux/i386/Makefile @@ -31,6 +31,7 @@ endif # libpthread uses six-argument inline syscalls. ifeq ($(subdir),nptl) libpthread-sysdep_routines += libc-do-syscall +libpthread-shared-only-routines += libc-do-syscall endif ifeq ($(subdir),resource) diff --git a/sysdeps/unix/sysv/linux/ia64/Makefile b/sysdeps/unix/sysv/linux/ia64/Makefile index 1de62c5..4d6766d 100644 --- a/sysdeps/unix/sysv/linux/ia64/Makefile +++ b/sysdeps/unix/sysv/linux/ia64/Makefile @@ -19,6 +19,7 @@ endif ifeq ($(subdir),rt) librt-routines += rt-sysdep +librt-shared-only-routines += rt-sysdep endif ifeq ($(subdir),nptl) diff --git a/sysdeps/unix/sysv/linux/microblaze/Makefile b/sysdeps/unix/sysv/linux/microblaze/Makefile index 44a838f..d178bc6 100644 --- a/sysdeps/unix/sysv/linux/microblaze/Makefile +++ b/sysdeps/unix/sysv/linux/microblaze/Makefile @@ -5,4 +5,5 @@ endif ifeq ($(subdir),nptl) # pull in __syscall_error routine libpthread-routines += sysdep -endif \ No newline at end of file +libpthread-shared-only-routines += sysdep +endif diff --git a/sysdeps/unix/sysv/linux/powerpc/Makefile b/sysdeps/unix/sysv/linux/powerpc/Makefile index c89ed9e..2cfb46e 100644 --- a/sysdeps/unix/sysv/linux/powerpc/Makefile +++ b/sysdeps/unix/sysv/linux/powerpc/Makefile @@ -8,6 +8,7 @@ abi-64-v2-condition := __WORDSIZE == 64 && _CALL_ELF == 2 ifeq ($(subdir),rt) librt-routines += rt-sysdep +librt-shared-only-routines += rt-sysdep endif ifeq ($(subdir),stdlib) @@ -34,4 +35,5 @@ ifeq ($(subdir),nptl) libpthread-routines += sysdep libpthread-sysdep_routines += elision-lock elision-unlock elision-timed \ elision-trylock +libpthread-shared-only-routines += sysdep endif diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile index 497ffd5..f8ed013 100644 --- a/sysdeps/unix/sysv/linux/s390/Makefile +++ b/sysdeps/unix/sysv/linux/s390/Makefile @@ -6,6 +6,7 @@ abi-64-condition := __WORDSIZE == 64 ifeq ($(subdir),rt) librt-routines += rt-sysdep +librt-shared-only-routines += rt-sysdep endif ifeq ($(subdir),stdlib) diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile index e67aecf..a67d199 100644 --- a/sysdeps/unix/sysv/linux/sparc/Makefile +++ b/sysdeps/unix/sysv/linux/sparc/Makefile @@ -6,6 +6,7 @@ abi-64-condition := __WORDSIZE == 64 ifeq ($(subdir),rt) librt-routines += rt-sysdep +librt-shared-only-routines += rt-sysdep endif ifeq ($(subdir),sysvipc) @@ -15,4 +16,5 @@ endif ifeq ($(subdir),nptl) # pull in __syscall_error routine libpthread-routines += sysdep +libpthread-shared-only-routines += sysdep endif diff --git a/sysdeps/unix/sysv/linux/tile/Makefile b/sysdeps/unix/sysv/linux/tile/Makefile index 1c1cfff..43acea3 100644 --- a/sysdeps/unix/sysv/linux/tile/Makefile +++ b/sysdeps/unix/sysv/linux/tile/Makefile @@ -25,4 +25,5 @@ endif ifeq ($(subdir),nptl) # pull in __syscall_error routine libpthread-routines += sysdep +libpthread-shared-only-routines += sysdep endif