lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAKwvOdnhPhXc+V2aTzpyCDCeCmFtzPe+-7+YrRrPeWDF1f5s1A@mail.gmail.com>
Date:   Thu, 28 Jun 2018 08:40:14 -0400
From:   Nick Desaulniers <ndesaulniers@...gle.com>
To:     Will Deacon <will.deacon@....com>
Cc:     ghackmann@...roid.com, Catalin Marinas <catalin.marinas@....com>,
        linux-arm-kernel@...ts.infradead.org,
        LKML <linux-kernel@...r.kernel.org>,
        Matthias Kaehlcke <mka@...omium.org>,
        Greg Hackmann <ghackmann@...gle.com>
Subject: Re: [PATCH] arm64: remove no-op -p linker flag

On Thu, Jun 28, 2018 at 5:38 AM Will Deacon <will.deacon@....com> wrote:
>
> On Wed, Jun 27, 2018 at 12:46:14PM -0700, Greg Hackmann wrote:
> > Linking the ARM64 defconfig kernel with LLVM lld fails with the error:
> >
> >   ld.lld: error: unknown argument: -p
> >   Makefile:1015: recipe for target 'vmlinux' failed
> >
> > Without this flag, the ARM64 defconfig kernel successfully links with
> > lld and boots on Dragonboard 410c.

Ha! Just one single unknown linker flag, to link and boot? That's not too bad.

> > After digging through binutils source and changelogs, it turns out that
> > -p is only relevant to ancient binutils installations targeting 32-bit
> > ARM.  binutils accepts -p for AArch64 too, but it's always been
> > undocumented and silently ignored.

Nothing in the man pages for ld in regards to -p.  Seems like it was
shortform for "--no-pipeline-knowledge: Stop the linker knowing about
the pipeline length".

Looks like it was added to binutils via this commit in 1999:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=7ca69e9e10ef290eb3dd62a1e6bebbe4c87fa202

And removed in 2004:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=dea514f51da1051f9f3cd7a746e3b68085aa1a72

arch/arm/Makefile has -p as a LD_FLAGS.  Is it actually needed there
too, or can it be removed from there?  I assume we'll want to use lld
for arm32 at some point.

> > A comment in
> > ld/emultempl/aarch64elf.em explains that it's "Only here for backwards
> > compatibility".

Yep: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=ld/emultempl/aarch64elf.em;h=edc548f65298e563481bdd9d547fcb9c6b13da04;hb=HEAD#l405

armelf.em also has that comment.

Looks like -p has been in arch/arm64/Makefile since the initial commit
that added that file. So likely copy+pasted from arch/arm/Makefile.

commit 8c2c3df31e3b ("arm64: Build infrastructure"):
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm64/Makefile?id=8c2c3df31e3b87cb5348e48776c366ebd1dc5a7a

And it looks like arch/arm/Makefile has has -p since the move to git
for Linux 2.6:

commit 1da177e4c3f4 ("Linux-2.6.12-rc2")
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm/Makefile?id=1da177e4c3f41524e886b7f1b8a0c1fc7321cac2

So nothing in the kernel commit history to hint at what it was ever used for.

As long as you have a version of binutils that not 14 years old, you
should be good.

Reviewed-by: Nick Desaulniers <ndesaulniers@...gle.com>

-- 
Thanks,
~Nick Desaulniers

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ