linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michael Matz <matz@suse.de>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: "Jiri Slaby" <jirislaby@kernel.org>,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"Nathan Chancellor" <nathan@kernel.org>,
	"Martin Liška" <mliska@suse.cz>,
	"Borislav Petkov" <bpetkov@suse.de>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Ard Biesheuvel" <ardb@kernel.org>
Subject: Re: [PATCH v3 6/7] kbuild: use obj-y instead extra-y for objects placed at the head
Date: Wed, 26 Oct 2022 17:09:49 +0000 (UTC)	[thread overview]
Message-ID: <alpine.LSU.2.20.2210261653340.29399@wotan.suse.de> (raw)
In-Reply-To: <CAK7LNASs_8yjxLj-DxsFkej67b5JbHbRu9NgmtzT8+zdCcuPiQ@mail.gmail.com>

Hello,

On Thu, 27 Oct 2022, Masahiro Yamada wrote:

> > To be precise: I know of no linker (outside LTO-like modes) that processes
> > archives in a different order than first-to-last-member (under
> > whole-archive), but that's not guaranteed anywhere.  So relying on
> > member-order within archives is always brittle.
> 
> The objects in an archive are linked first-to-last-member for a long time.
> This is the assumption which we have relied on for a long time.

Sure, that doesn't mean it's guaranteed, for this I'm just devils 
advocate.  As I said, it's the mode of operation of all currently existing 
linkers I know, so for the forseeable future you can continue to rely on 
it.  But as soon as LTO enters the picture that all breaks down, as you 
see here.

Consider how LTO works, the granularity of shuffling stuff around is the 
functions of all inputs, not the object files.  So, even if you say
  obj1.o obj2.o
on the link command line, and supposed there are two functions in each of 
obj1 and obj2, then it may just so happen that LTO partitions the program 
such that it ends up with partitions
  part1 : obj1:foo obj2:bar
  part2 : obj1:bar obj2:foo
now, suddenly there is no order between part1 and part2 anymore that 
would faithfully represent the original order between obj1 and obj2 
functions.  Of course the partitioning algorithm could be changed, but 
that would limit the effectiveness of LTO.

> We assume the initcall order is preserved.
> The call order within each of core_initcall, arch_initcall,
> device_initcall, etc.
> is the order of objects in built-in.a, in other words,
> the order they appear in Makefiles.

If you rely on relative order of these, then you will probably see 
interesting effects in LTO mode eventually.

> So, this is happening on (not-upstreamed-yet) GCC LTO only?

I don't know.  As any kind of whole-program transformations is in 
principle cross-file on per-function basis (that's the whole purpose) I 
would imagine that you can see these effects in all compilers, if you try 
hard enough.

> > There are only two ways of guaranteeing an ordering: put non-LTO-.o files
> > at certain places of the link command, or, better, use a linker script to
> > specify an order.
> 
> The objects directly given in the command line are linked in the same order,
> even under LTO mode. Is this what you mean?

If they don't contain LTO code then yes, they are linked 
in exactly the given order.  If they do, they become part of the LTO blob 
whose ordering isn't precisely influenced by cmdline order.

> Any documentation about that?

I think so, but I can't point my finger to anything.  Several parts of the 
toolchain rely on that (so the kernel is not alone), but those are either 
carefully avoiding LTO or using other ordering means like linker script to 
achieve what they need.


Ciao,
Michael.

  reply	other threads:[~2022-10-26 17:09 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-24 18:19 [PATCH v3 0/7] kbuild: various cleanups Masahiro Yamada
2022-09-24 18:19 ` [PATCH v3 1/7] kbuild: hard-code KBUILD_ALLDIRS in scripts/Makefile.package Masahiro Yamada
2022-09-28 19:09   ` Nicolas Schier
2022-09-24 18:19 ` [PATCH v3 2/7] kbuild: list sub-directories in ./Kbuild Masahiro Yamada
2022-09-24 19:37   ` kernel test robot
2022-09-24 20:27   ` kernel test robot
2022-09-25  0:28     ` Masahiro Yamada
2022-09-26 21:06       ` Nick Desaulniers
2022-09-28  8:32         ` Masahiro Yamada
2022-09-28 19:30   ` Nicolas Schier
2022-09-24 18:19 ` [PATCH v3 3/7] kbuild: move .vmlinux.objs rule to Makefile.modpost Masahiro Yamada
2022-09-28 19:35   ` Nicolas Schier
2022-09-24 18:19 ` [PATCH v3 4/7] kbuild: move vmlinux.o rule to the top Makefile Masahiro Yamada
2022-09-28 19:37   ` Nicolas Schier
2022-09-24 18:19 ` [PATCH v3 5/7] kbuild: unify two modpost invocations Masahiro Yamada
2022-09-28 19:59   ` Nicolas Schier
2022-09-28 21:05     ` Masahiro Yamada
2022-09-24 18:19 ` [PATCH v3 6/7] kbuild: use obj-y instead extra-y for objects placed at the head Masahiro Yamada
2022-09-28 20:15   ` Nicolas Schier
2022-10-24 18:24   ` Jiri Slaby
2022-10-25 12:26     ` Michael Matz
2022-10-26  8:35       ` Jiri Slaby
2022-10-26 11:20         ` Ard Biesheuvel
2022-10-26 16:29       ` Masahiro Yamada
2022-10-26 17:09         ` Michael Matz [this message]
2022-09-24 18:19 ` [PATCH v3 7/7] kbuild: remove head-y syntax Masahiro Yamada
2022-09-29 15:21   ` Nicolas Schier
2022-10-18  8:16   ` Jiri Slaby
2022-10-18  9:12     ` Masahiro Yamada
2022-09-26 21:39 ` [PATCH v3 0/7] kbuild: various cleanups Nick Desaulniers

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=alpine.LSU.2.20.2210261653340.29399@wotan.suse.de \
    --to=matz@suse.de \
    --cc=ardb@kernel.org \
    --cc=bpetkov@suse.de \
    --cc=jirislaby@kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=mliska@suse.cz \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=peterz@infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).