From patchwork Sun Oct 29 16:21:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 23953 Received: (qmail 20862 invoked by alias); 29 Oct 2017 16:21:30 -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 20843 invoked by uid 89); 29 Oct 2017 16:21:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-oi0-f66.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=gTra7bU36uAVfo2Rsf8Njnm+y71lp/9zc62Bx7QYs+M=; b=XQU0Pee3EmAaEwc+rbWHqIF5e7KYNg4PgCk8WMe6hBts4KVbA01FQgth3UNWYgYdYm Q2N4I0Lu60NdvXSYM8jTmc2nd0mYdRGS6dRh7ainmZduvqKj0H58/IuV5+Yt3JJOaCxd icwl+s5igU3lEL2ki4o5LhGEDIx68n6e2F1Im2+OMZlkQIhPg/5XBQMqNuKJiyEha1GL PdKCBNV8DBy75wUDX7+zXXiCvBJ+ThVm+Bz8IOuZ8qI7L9mUxyxLFw5WNPV7XkZ+amfV yCvDBBP1kYmN4HQp3dCZQGLWinLuhYJFJpnYukwyr558+YfQRtRqp0obMmEOOYiGnN+/ 0jag== X-Gm-Message-State: AMCzsaX8Wsqe6roOaYwYieljbsYsv/NbiZV5p66UX3oXsuEo1gj2kRfu YMkfpzJAugj9dYaMkdRZOurD6UqJxh0XKQeocQU= X-Google-Smtp-Source: ABhQp+RBAf+czxJEXmzYtOF2ZaSXFRoPK83p2jBvGq4Nksh/OMbZQQ2OR7cbSGWNYs7lidH6YnKSq/J18yYEDh8oKc0= X-Received: by 10.157.85.147 with SMTP id m19mr4673245oth.50.1509294079295; Sun, 29 Oct 2017 09:21:19 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <87y3nuku8a.fsf@linux-m68k.org> References: <20171029020657.GA13103@gmail.com> <87y3nuku8a.fsf@linux-m68k.org> From: "H.J. Lu" Date: Sun, 29 Oct 2017 09:21:18 -0700 Message-ID: Subject: Re: [PATCH] Use newly built crt*.o files to build shared objects [BZ #22362] To: Andreas Schwab Cc: GNU C Library On Sun, Oct 29, 2017 at 5:35 AM, Andreas Schwab wrote: > On Okt 28 2017, "H.J. Lu" wrote: > >> diff --git a/csu/Makefile b/csu/Makefile >> index fd668a5d00..b9803be0ff 100644 >> --- a/csu/Makefile >> +++ b/csu/Makefile >> @@ -77,6 +77,11 @@ crtstuff = crti crtn >> install-lib += $(crtstuff:=.o) >> extra-objs += $(crtstuff:=.o) >> >> +ifneq ($(multidir),.) >> +multilib-extra-objs = $(addprefix $(multidir)/, $(install-lib)) >> +extra-objs += $(multilib-extra-objs) >> +endif >> + >> extra-objs += abi-note.o init.o >> asm-CPPFLAGS += -I$(objpfx). >> >> @@ -147,3 +152,9 @@ $(objpfx)abi-tag.h: $(..)abi-tags >> done >> if test -r $@.new; then mv -f $@.new $@; \ >> else echo >&2 'This configuration not matched in $<'; exit 1; fi >> + >> +ifneq ($(multidir),.) >> +$(addprefix $(objpfx)$(multidir)/, $(install-lib)): $(addprefix $(objpfx), $(install-lib)) >> + $(make-target-directory) >> + ln -f $(objpfx)/$(@F) $@ >> +endif > > Only a symlink . -> $(multidir) is needed. Like this? >> diff --git a/nptl/Makefile b/nptl/Makefile >> index d819349f43..314cbda46a 100644 >> --- a/nptl/Makefile >> +++ b/nptl/Makefile > > Same here. If the updated patch is OK, I will submit a separate patch to convert nptl/Makefile to symlink. Thanks. From 3242db2138de7e0786ee3806f8bd016925d06099 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 28 Oct 2017 17:41:16 -0700 Subject: [PATCH] Use newly built crt*.o files to build shared objects [BZ #22362] When multi-lib GCC is used to build glibc, the search order of GCC driver for crt*.o is -B*/`gcc -print-multi-directory`, the installed diretory, -B*/. This patch adds multi-lib support to csu/Makefile so that -B/glibc-build-directory/csu/ will pick up the newly built crt*.o. Tested on x86-64 for i686 and x32. [BZ #22362] * Makerules (make-link-multidir): New. * config.make.in (multidir): New. * configure.ac (libc_cv_multidir): New. AC_SUBST. * configure: Regenerated. * csu/Makefile [$(multidir) != .](multilib-extra-objs): New. [$(multidir) != .](extra-objs): Add $(multilib-extra-objs). [$(multidir) != .]($(addprefix $(objpfx)$(multidir)/, $(install-lib))): New target. --- Makerules | 9 +++++++++ config.make.in | 1 + configure | 6 ++++++ configure.ac | 5 +++++ csu/Makefile | 10 ++++++++++ 5 files changed, 31 insertions(+) diff --git a/Makerules b/Makerules index bbfbefe33f..522de25cfd 100644 --- a/Makerules +++ b/Makerules @@ -1079,6 +1079,11 @@ rm -f $@.new $(SHELL) $(..)scripts/rellns-sh $< $@.new mv -f $@.new $@ endef +define make-link-multidir +$(patsubst %/,cd %,$(objpfx)); \ + $(LN_S) . $(multidir) 2> /dev/null; \ + test -L $(multidir) +endef else # If we have no symbolic links don't bother with rellns-sh. define make-link @@ -1086,6 +1091,10 @@ rm -f $@.new $(LN_S) $< $@.new mv -f $@.new $@ endef +define make-link-multidir +$(make-target-directory) +ln -f $(objpfx)/$(@F) $@ +endef endif ifeq (yes,$(build-shared)) diff --git a/config.make.in b/config.make.in index fd2dbc91d1..bd84a5747d 100644 --- a/config.make.in +++ b/config.make.in @@ -21,6 +21,7 @@ includedir = @includedir@ datarootdir = @datarootdir@ localstatedir = @libc_cv_localstatedir@ localedir = @localedir@ +multidir= @libc_cv_multidir@ # Should we use and build ldconfig? use-ldconfig = @use_ldconfig@ diff --git a/configure b/configure index 6010977c58..c8697d9b1a 100755 --- a/configure +++ b/configure @@ -594,6 +594,7 @@ mach_interface_list DEFINES static_nss profile +libc_cv_multidir libc_cv_pie_default libc_cv_pic_default shared @@ -6698,6 +6699,11 @@ fi $as_echo "$libc_cv_pie_default" >&6; } +# Set the `multidir' variable by grabbing the variable from the compiler. +# We do it once and save the result in a generated makefile. +libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory` + + diff --git a/configure.ac b/configure.ac index 148f7d1682..9f25c9fa0f 100644 --- a/configure.ac +++ b/configure.ac @@ -1783,6 +1783,11 @@ fi rm -f conftest.*]) AC_SUBST(libc_cv_pie_default) +# Set the `multidir' variable by grabbing the variable from the compiler. +# We do it once and save the result in a generated makefile. +libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory` +AC_SUBST(libc_cv_multidir) + AC_SUBST(profile) AC_SUBST(static_nss) diff --git a/csu/Makefile b/csu/Makefile index fd668a5d00..e42a32b3eb 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -77,6 +77,11 @@ crtstuff = crti crtn install-lib += $(crtstuff:=.o) extra-objs += $(crtstuff:=.o) +ifneq ($(multidir),.) +multilib-extra-objs = $(addprefix $(multidir)/, $(install-lib)) +extra-objs += $(multilib-extra-objs) +endif + extra-objs += abi-note.o init.o asm-CPPFLAGS += -I$(objpfx). @@ -147,3 +152,8 @@ $(objpfx)abi-tag.h: $(..)abi-tags done if test -r $@.new; then mv -f $@.new $@; \ else echo >&2 'This configuration not matched in $<'; exit 1; fi + +ifneq ($(multidir),.) +$(addprefix $(objpfx)$(multidir)/, $(install-lib)): $(addprefix $(objpfx), $(install-lib)) + $(make-link-multidir) +endif -- 2.13.6