[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] x86/build: use --orphan-handling linker option if available


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Mon, 7 Mar 2022 12:06:18 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Zm398PVYfwhoOOx5KbPcWKDdvz31L6nypnsbIg8q0q8=; b=fl48AGHiIR3bx0t06CbLXIyOTN4TlHLY4gCFpIlNJHt9tw4PmZNUSek4RfvnOGJPHqrQ4Y1liYfXQkSK+x7iQd+psT0/X+ifiv4WzhlFS+h5Kd8cSycuf6sWriSPMV0tfZN8DGcEpRX6g6Wsw3NtGt46uis/BvHhO7Lb8PT2GMz3WefoUpClhT/PBnkj1crRQvzx5HWULbtAjRuTvYx/9HHEdt1To9ipcK9v8TgVBozCet/LFK6y3V+L9AO2v9N83Si9kqgyVe9RxxJ3X1mkBqh0ZdspENeJkO03ZkJXQz6vE80ITRhBznDuLDiDXCJlQh6zqI/843sduXH9fulJVA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MKC6AIlGlg6jl2piluRSMvFav30H45VdiAncc0qBwSxMWHkbVypqMWZSou6V2E2MuG69VKz1OEuQhB4AUyek94F2cNilBzfvB+YHrbmYEUqfqZ2mATNf5heUws/ZAadFHuLtsnMo4SNTDfK9b7hUiXbOPsHZ62Rav6pfEl8yUgpp2t8vtZySSd84tVDDKuOu3XD1nMmumr1JmQusidqAeF5+LpsQ8Fv4YrWqdTke2YDdG3lsmGI+H7aRuLVXxV3C4oc9RbY9ThIVf1r8HhEtbsoTqiZ0M25ZoGmjeetEfiOkyESrh8qQfg7MT8SLWzYA2Qn3XfwZan5mKo5htqC/pw==
  • Authentication-results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Mon, 07 Mar 2022 11:06:37 +0000
  • Ironport-data: A9a23:UG6qWapr+ytH8hoRH02YjoFt8LdeBmIaZRIvgKrLsJaIsI4StFCzt garIBmHO/2DM2H0Kop0YIq+8xhSvZCGzIQxTgRv+381Qi8UpJuZCYyVIHmrMnLJJKUvbq7GA +byyDXkBJppJpMJjk71atANlVEliefQAOCU5NfsYkidfyc9IMsaoU8lyrZRbrJA24DjWVvW4 Yyq+aUzBXf+s9JKGjNMg068gEsHUMTa4Fv0aXRnOJinFHeH/5UkJMp3yZOZdhMUcaENdgKOf M7RzanRw4/s10xF5uVJMFrMWhZirrb6ZWBig5fNMkSoqkAqSicais7XOBeAAKv+Zvrgc91Zk b1wWZKMpQgBGYzpnMkBawJiGixlIbYbxI/JPFe7rpnGp6HGWyOEL/RGCUg3OcsT+/ptAHEI/ vsdQNwPRknd3aTsmuv9E7QywJR4RCXoFNp3VnVI1zbWAOxgWZnea67L+cVZzHE7gcUm8fP2O ZdEOGQ1MEWojxtnHks9L8oOzOiUomTVKwNfkmKanZcb7D2GpOB2+Oe0a4eEEjCQfu1Kmm6Iq 2SA+H72ajkKOdraxTeb/3aEgu7UgTi9SI8UDKe/9PNhnBuU3GN7IB8cWEa/oPK5olWjQN8ZI EsRkhfCtoBrqhbtFIOkGUTl/jjU5XbwRua8DcUdySSJ57bs+DyQC3MYVWN9WNI7m8spEGlCO kCyo/vlAjlmsbuwQH2b96uJoT7aBRX5PVPudgdfE1JbvoCLTJUby0uWE409SPLdYsjdRGmoq w1muhTSkFn6YSQj86ygtW7KjDu3znQiZl5kv16HNo5JA+4QWWJEW2BKwQWBhRqjBNzAJrVkg JTjs5LChN3i9bnXyESwrBwlRdlFHcqtPjzGmkJIFJI87Tmr8HPLVdkOvG8jdRkxbZ1UKWOBj KrvVeR5vsM7AZdXRfUvP9LZ5zoCl8AM6ugJptiLN4ETM/CdhSeM/T10ZF744oweuBNErE3LA r/CKZzEJS9DUcxPlWPqL89Age5D7n1vngv7GMGkpylLJJLDPRZ5v59eawDQBg34hYvZyDjoH yF3bJPbm00CC7SlOkE6M+c7dDg3EJTyPrivw+R/fe+fOAt2XmYnDv7a27Q6fIJ52a9Sk4/1E ruVACe0FHKXaaX7FDi3
  • Ironport-hdrordr: A9a23:VtSbWq0OJvEWVc96G3uYfgqjBVByeYIsimQD101hICG9Lfb2qy n+ppgmPEHP5Qr5OEtApTiBUJPwJk800aQFm7X5Wo3SITUO2VHYV72KiLGN/9SOIVydygcw79 YET0E6MqyNMbEYt7eK3ODbKadY/DDvysnB7o2/vhRQpENRGtldBm9Ce3im+yZNNW977PQCZf 6hDp0tnUveRZ1bVLXyOlA1G8z44/HbnpPvZhALQzYh9Qm1lDutrJr3CQKR0BsyWy5Ghe5Kyx mOryXJooGY992rwB7V0GHeq7xQhdva09NGQOiBkNIcJDnAghuhIK5hR7qBljYop/zH0idgrP D85zMbe+hj4XLYeW+45TPrxgnbyT4rr0TvzFeJ6EGT1vDRdXYfMY5slIhZehzW5w4Lp9dnyp 9G2Gqfqt5+EQ7AtD6V3amGazha0m6P5VYym+8aiHJSFaEEbqVKkIAZ9ERJVL8dASPB7pw9Gu UGNrCR2B9vSyLaU5nlhBgu/DT1NU5DXStuA3Jy9/B96gIm0kyQlCAjtY4idnRpzuNId3AL3Z WADk1SrsA8ciYnV9MMOA4/e7rENoXse2O7DIvAGyWvKEk4U0i93qIfpo9FoN2XRA==
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Mon, Mar 07, 2022 at 09:18:42AM +0100, Jan Beulich wrote:
> On 04.03.2022 10:19, Roger Pau Monné wrote:
> > On Fri, Mar 04, 2022 at 09:02:08AM +0100, Jan Beulich wrote:
> >> On 03.03.2022 16:09, Roger Pau Monné wrote:
> >>> On Thu, Mar 03, 2022 at 01:17:03PM +0100, Jan Beulich wrote:
> >>>> On 03.03.2022 12:19, Roger Pau Monné wrote:
> >>>>> On Wed, Mar 02, 2022 at 03:19:35PM +0100, Jan Beulich wrote:
> >>>>>> As was e.g. making necessary 4b7fd8153ddf ("x86: fold sections in final
> >>>>>> binaries"), arbitrary sections appearing without our linker script
> >>>>>> placing them explicitly can be a problem. Have the linker make us aware
> >>>>>> of such sections, so we would know that the script needs adjusting.
> >>>>>>
> >>>>>> To deal with the resulting warnings:
> >>>>>> - Retain .note.* explicitly for ELF, and discard all of them (except 
> >>>>>> the
> >>>>>>   earlier consumed .note.gnu.build-id) for PE/COFF.
> >>>>>> - Have explicit statements for .got, .plt, and alike and add assertions
> >>>>>>   that they're empty. No output sections will be created for these as
> >>>>>>   long as they remain empty (or else the assertions would cause early
> >>>>>>   failure anyway).
> >>>>>> - Collect all .rela.* into a single section, with again an assertion
> >>>>>>   added for the resulting section to be empty.
> >>>>>> - Extend the enumerating of .debug_* to ELF. Note that for Clang adding
> >>>>>>   of .debug_macinfo is necessary. Amend this by its Dwarf5 counterpart,
> >>>>>>   .debug_macro, then as well (albeit more may need adding for full
> >>>>>>   coverage).
> >>>>>>
> >>>>>> Suggested-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> >>>>>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> >>>>>> ---
> >>>>>> I would have wanted to make this generic (by putting it in
> >>>>>> xen/Makefile), but the option cannot be added to LDFLAGS, or else
> >>>>>> there'll be a flood of warnings with $(LD) -r. (Besides, adding to
> >>>>>> LDFLAGS would mean use of the option on every linker pass rather than
> >>>>>> just the last one.)
> >>>>>>
> >>>>>> Retaining of .note in xen-syms is under question. Plus if we want to
> >>>>>> retain all notes, the question is whether they wouldn't better go into
> >>>>>> .init.rodata. But .note.gnu.build-id shouldn't move there, and when
> >>>>>> notes are discontiguous all intermediate space will also be assigned to
> >>>>>> the NOTE segment, thus making the contents useless for tools going just
> >>>>>> by program headers.
> >>>>>>
> >>>>>> Newer Clang may require yet more .debug_* to be added. I've only played
> >>>>>> with versions 5 and 7 so far.
> >>>>>>
> >>>>>> Unless we would finally drop all mentioning of Stabs sections, we may
> >>>>>> want to extend to there what is done for Dwarf here (allowing the EFI
> >>>>>> conditional around the section to also go away).
> >>>>>>
> >>>>>> See also 
> >>>>>> https://sourceware.org/pipermail/binutils/2022-March/119922.html.
> >>>>>
> >>>>> LLD 13.0.0 also warns about:
> >>>>>
> >>>>> ld: warning: <internal>:(.symtab) is being placed in '.symtab'
> >>>>> ld: warning: <internal>:(.shstrtab) is being placed in '.shstrtab'
> >>>>> ld: warning: <internal>:(.strtab) is being placed in '.strtab'
> >>>>>
> >>>>> So seeing your mail where you mention GNU ld not needing those, I
> >>>>> think we would need to add them anyway for LLVM ld.
> >>>>
> >>>> Hmm, that's ugly. How do I recognize LLVM ld? I can't simply use a
> >>>> pre-processor conditional keying off of __clang__, as that used as the
> >>>> compiler doesn't mean their ld is also in use (typically the case on
> >>>> Linux).
> >>>
> >>> Hard to tell, `ld -v` for LLD will typically contain '^LLD' I think,
> >>> but I don't really like matching on human readable output like this.
> >>
> >> Same here. But Linux'es ld-version.sh looks to be doing just that.
> > 
> > OK, so be it then. We can always improve afterwards, as I don't really
> > have any better suggestion ATM.
> > 
> >>>> I also don't want to add these uniformly, for now knowing what
> >>>> side effects their mentioning might have with GNU ld.
> >>>
> >>> Wouldn't it be fine to just place them at the end, just like it's
> >>> done by default by ld?
> >>>
> >>> Are you worried about not getting the proper type if mentioned in the
> >>> linker script?
> >>
> >> I'm worried of about any kind of anomaly that could be caused by
> >> mentioning sections which a linker doesn't expect to be named in
> >> a script. That's hardly something they would even test their
> >> linkers against.
> > 
> > I've raised a bug with LLD:
> > 
> > https://github.com/llvm/llvm-project/issues/54194
> > 
> > To see whether this behavior is intended.

Got a reply back from the LLD folks, and they consider the GNU ld
behavior quirky. Linux linker script does explicitly mention .symtab,
.strtab and shstrtab:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a840c4de56

So Xen should be safe to do the same.

> >>>>>> --- a/xen/arch/x86/Makefile
> >>>>>> +++ b/xen/arch/x86/Makefile
> >>>>>> @@ -120,6 +120,8 @@ syms-warn-dup-y := --warn-dup
> >>>>>>  syms-warn-dup-$(CONFIG_SUPPRESS_DUPLICATE_SYMBOL_WARNINGS) :=
> >>>>>>  syms-warn-dup-$(CONFIG_ENFORCE_UNIQUE_SYMBOLS) := --error-dup
> >>>>>>  
> >>>>>> +orphan-handling-$(call ld-option,--orphan-handling=warn) += 
> >>>>>> --orphan-handling=warn
> >>>>>
> >>>>> Might be better to place in xen/Kconfig with the CC checks?
> >>>>
> >>>> Well. I've tried to stay away from complaining if people introduce
> >>>> new tool chain capability checks in Kconfig. But I'm not going to
> >>>> add any myself (unless things would become really inconsistent) up
> >>>> and until we have actually properly discussed the upsides and
> >>>> downsides of either model. Doing this via email (see the "Kconfig
> >>>> vs tool chain capabilities" thread started in August 2020) has
> >>>> proven to not lead anywhere. I'm really hoping that we can finally
> >>>> sort this in Bukarest.
> >>>>
> >>>>> I'm also wondering whether we could add the flag here into XEN_LDFLAGS
> >>>>> and EFI_LDFLAGS, as those options are only used together with the
> >>>>> linker script in the targets on the Makefile.
> >>>>
> >>>> Not for XEN_LDFLAGS at least, and undesirable for EFI_LDFLAGS. See
> >>>> the respective post-commit message remark.
> >>>
> >>> But the calls to LD in order to generate $(TARGET)-syms do not use -r,
> >>> and are all using the linker script, so it should be fine to use
> >>> --orphan-handling=warn there?
> >>
> >> But XEN_LDFLAGS is also used elsewhere together with -r. (Whether
> >> that's actually correct is a different question.)
> >>
> >>> Could we do something like:
> >>>
> >>> $(TARGET)-syms: XEN_LDFLAGS += ...
> >>>
> >>> And similar for $(TARGET).efi?
> >>
> >> Yes, this ought to be possible, but would again lead to the option
> >> being passed on all three linking stages instead of just the final
> >> one. When there are many warnings (e.g. because of the same kind of
> >> section appearing many times), it's not helpful to see the flood
> >> three times (or likely even six times, once for xen-syms and once
> >> for xen.efi).
> > 
> > OK, I think our build system is already quite chatty, so wouldn't
> > really care about seeing repeated messages there. We can find a way to
> > generalize passing options to the final linker step if/when we need to
> > add more.
> > 
> > I'm fine with doing the LLD fixup as a separate patch, so:
> > 
> > Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> 
> Thanks. However, something is wrong here. Unlike in my local builds, the
> pre-push build test I did after committing this triggered a massive amount
> (tens of thousands) of objdump warnings:
> 
> CU at offset ... contains corrupt or unsupported version number: 0
> Invalid pointer size (0) in compunit header, using 4 instead

That's weird, I wasn't aware we had any objdump calls after the final
image is linked.

> Helpfully it doesn't say whether that's xen-syms, xen-efi, or both. I'll
> have to investigate and fix; I can only guess at this point that this
> might be triggered by a difference in .config, or be hidden by some
> other change I have in my local tree.

Hm, I didn't see any of those when doing my test build on FreeBSD, but
didn't check with gcc.

Thanks, Roger.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.