All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v2] toolchain-external: adjust logic for musl dynamic linker symlink
Date: Sun, 25 Jun 2017 19:15:58 +0200	[thread overview]
Message-ID: <20170625171558.GE3673@scaer> (raw)
In-Reply-To: <54333c1e-cebc-8d11-cdc5-d87b5fd8a268@mind.be>

Thomas, All,

On 2017-06-24 23:49 +0200, Arnout Vandecappelle spake thusly:
> On 24-06-17 23:14, Thomas Petazzoni wrote:
> > This commit changes the strategy to know what symlink should be
> > created for the musl dynamic linker. For now, we have in Buildroot the
> > logic to decide what the symlink name should be. However, despite
> > numerous fixes, there are still some cases that are missing, such as
> > mips64el-n32, where the symlink is ld-musl-mipsn32el.so.1.
> > 
> > So, instead of trying to make Buildroot aware of all the possible
> > names, simply get it from the external toolchain.
> > 
> > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> 
> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

Not from me, see below (the worst offender being the missing LC_ALL).

>  With some nits.
> 
> > ---
> > Changes since v1:
> >  - As suggested by Yann E. Morin, build a sample program, and get its
> >    program interpreter with readelf, in order to find the program
> >    interpreter.
> > 
> > Note: I have tried to refactor this with the check_musl function in
> > toolchain/helpers.mk, with the idea of introducing a function
> > get_program_interpreter that would, given CC/READELF would return the
> > program interpreter path. However, for the life of me, I couldn't get
> > a make function invoking multiple shell commands to return a string.
> 
>  Huh?
> 
> get_program_interpreter = $(shell \
>  	echo 'void main(void) {}' | $(TOOLCHAIN_EXTERNAL_CC) -x c -o
> $(BUILD_DIR)/.br-toolchain-test.tmp - >/dev/null 2>&1; \
>  	$(TOOLCHAIN_EXTERNAL_READELF) -l $(BUILD_DIR)/.br-toolchain-test.tmp 2>
> /dev/null | sed -r -e '/.*Requesting program interpreter: (.+)\]$$/!d; s//\1/')
> 
> $(warning $(get_program_interpreter))
> 
> toolchain/helpers.mk:496: /lib/ld-musl-i386.so.1

Yup, works for me too...

Although I prefer such long macros be defined rather than assigned.

> > ---
> >  toolchain/toolchain-external/pkg-toolchain-external.mk | 17 +++--------------
> >  1 file changed, 3 insertions(+), 14 deletions(-)
> > 
> > diff --git a/toolchain/toolchain-external/pkg-toolchain-external.mk b/toolchain/toolchain-external/pkg-toolchain-external.mk
> > index 8269345..938f73d 100644
> > --- a/toolchain/toolchain-external/pkg-toolchain-external.mk
> > +++ b/toolchain/toolchain-external/pkg-toolchain-external.mk
> > @@ -476,21 +476,10 @@ endef
> >  # of the dynamic library loader. We just need to create a symbolic
> >  # link to libc.so with the appropriate name.
> >  ifeq ($(BR2_TOOLCHAIN_EXTERNAL_MUSL),y)
> > -ifeq ($(BR2_i386),y)
> > -MUSL_ARCH = i386
> > -else ifeq ($(BR2_ARM_EABIHF),y)
> > -MUSL_ARCH = armhf
> > -else ifeq ($(BR2_mips):$(BR2_SOFT_FLOAT),y:y)
> > -MUSL_ARCH = mips-sf
> > -else ifeq ($(BR2_mipsel):$(BR2_SOFT_FLOAT),y:y)
> > -MUSL_ARCH = mipsel-sf
> > -else ifeq ($(BR2_sh),y)
> > -MUSL_ARCH = sh
> > -else
> > -MUSL_ARCH = $(ARCH)
> > -endif
> >  define TOOLCHAIN_EXTERNAL_MUSL_LD_LINK
> > -	ln -sf libc.so $(TARGET_DIR)/lib/ld-musl-$(MUSL_ARCH).so.1
> > +	$(Q)echo 'void main(void) {}' | $(TOOLCHAIN_EXTERNAL_CC) -x c -o $(BUILD_DIR)/.br-toolchain-test.tmp - >/dev/null 2>&1; \
> > +	PROGRAM_INTERPRETER=`$(TOOLCHAIN_EXTERNAL_READELF) -l $(BUILD_DIR)/.br-toolchain-test.tmp 2> /dev/null | sed -r -e '/.*Requesting program interpreter: (.+)\]$$/!d; s//\1/'` ; \
> 
>  Perhaps split this ridiculously long line after the | ? Perhaps also split the
> two sed expressions with two -e.
> 
>  I personally prefer sed -n -e '/.../s//\1/p' but I don't care much.

Also:
  - force LC_ALL=C when calling readelf, to avoid any translation,
  - remove the generated file.

Regards,
Yann E. MORIN.

>  Regards,
>  Arnout
> 
> > +	ln -sf libc.so $(TARGET_DIR)/$${PROGRAM_INTERPRETER}
> >  endef
> >  endif
> >  
> > 
> 
> -- 
> Arnout Vandecappelle                          arnout at mind be
> Senior Embedded Software Architect            +32-16-286500
> Essensium/Mind                                http://www.mind.be
> G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
> LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
> GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

      reply	other threads:[~2017-06-25 17:15 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-24 21:14 [Buildroot] [PATCH v2] toolchain-external: adjust logic for musl dynamic linker symlink Thomas Petazzoni
2017-06-24 21:49 ` Arnout Vandecappelle
2017-06-25 17:15   ` Yann E. MORIN [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170625171558.GE3673@scaer \
    --to=yann.morin.1998@free.fr \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.