Openembedded Core Discussions
 help / color / mirror / Atom feed
From: "mark.yang" <mark.yang@lge.com>
To: openembedded-core@lists.openembedded.org
Subject: Re: Distro wide LTO broken?
Date: Thu, 06 Nov 2025 02:07:04 -0800	[thread overview]
Message-ID: <192740.1762423624433535076@lists.openembedded.org> (raw)
In-Reply-To: <CAMKF1srtMC5ATe8Cm81aUFwZ5B+uazzx6RPvOggodB_BK1gfHQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 7046 bytes --]

On Tue, Sep 30, 2025 at 11:55 PM, Khem Raj wrote:

> 
> On Tue, Sep 30, 2025 at 12:50 AM William Kennington
> <william@wkennington.com> wrote:
> 
>> 
>> On Mon, Sep 29, 2025 at 7:58 PM Khem Raj <raj.khem@gmail.com> wrote:
>> 
>>> 
>>> On Mon, Sep 29, 2025 at 5:19 PM William Kennington
>>> <william@wkennington.com> wrote:
>>> 
>>>> 
>>>> On Mon, Sep 29, 2025 at 11:43 AM Khem Raj <raj.khem@gmail.com> wrote:
>>>> 
>>>>> 
>>>>> On Mon, Sep 29, 2025 at 3:51 AM William Kennington via
>>>>> lists.openembedded.org
>>>>> <william=wkennington.com@lists.openembedded.org> wrote:
>>>>> 
>>>>>> 
>>>>>> If I add the following to my distro, the build breaks for the openssl
>>>>>> and other core packages due to having build path impurities in the
>>>>>> static libraries created.
>>>>>> 
>>>>>> ```
>>>>>> require conf/distro/include/lto.inc
>>>>>> DISTRO_FEATURES += "lto"
>>>>>> ```
>>>>>> 
>>>>>> The errors I get are all like
>>>>>> ```
>>>>>> ERROR: openssl-3.5.2-r0 do_package_qa: QA Issue: File
>>>>>> /usr/lib/libssl.a in package openssl-staticdev contains reference to
>>>>>> TMPDIR [buildpaths]
>>>>>> ERROR: openssl-3.5.2-r0 do_package_qa: QA Issue: File
>>>>>> /usr/lib/libcrypto.a in package openssl-staticdev contains reference
>>>>>> to TMPDIR [buildpaths]
>>>>>> ERROR: openssl-3.5.2-r0 do_package_qa: Fatal QA errors were found, failing
>>>>>> task.
>>>>>> ERROR: Logfile of failure stored in:
>>>>>> /home/builder/yocto/build/tmp/work/cortexa76-cortexa55-crypto-oe-linux/openssl/3.5.2/temp/log.do_package_qa.118335
>>>>>> 
>>>>>> ERROR: Task
>>>>>> (/srv/yocto/poky/meta/recipes-connectivity/openssl/openssl_3.5.2.bb:do_package_qa)
>>>>>> 
>>>>>> failed with exit code '1'
>>>>>> ```
>>>>>> 
>>>>>> Probably there is just some kind of flag missing in the LTO build
>>>>>> options to filter out the build directory, as -ffile-prefix-map and
>>>>>> whatnot are already present in the builds. I haven't yet figured out
>>>>>> exactly what is contributing to this impurity.
>>>>> 
>>>>> Inspect the .a files ( maybe using strings or binary viewing tools
>>>>> like xxd ), with LTO they are flat objects with additional information
>>>>> for
>>>>> LTO to work and I think it will give more information.
>>>> 
>>>> Yeah, I believe it's just a single remapping we are missing somewhere
>>>> that is allowing the extra string to be added into the binary. It's
>>>> been a while since I've worked on this kind of impurity stripping, so
>>>> it will probably take a bit to get used to the tooling again.
>>>> Hopefully I find the root cause and we can strip it out
>>>> 
>>>> An example invocation looks like the following. All other object files
>>>> I looked at share the same impurity which ends up in the static
>>>> library later
>>>> ```
>>>> aarch64-oe-linux-gcc -mcpu=cortex-a76.cortex-a55+crypto
>>>> -mbranch-protection=standard -fstack-protector-strong -O2
>>>> -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security
>>>> --sysroot=/home/builder/yocto/build/tmp/work/cortexa76-cortexa55-crypto-oe-linux/openssl/3.5.2/recipe-sysroot
>>>> 
>>>> -I. -Iinclude -Iapps/include -I../sources/openssl-3.5.2
>>>> -I../sources/openssl-3.5.2/include
>>>> -I../sources/openssl-3.5.2/apps/include -fPIC -pthread
>>>> -Wa,--noexecstack -O2 -g -flto -ffat-lto-objects -fuse-linker-plugin
>>>> -ffile-prefix-map=/home/builder/yocto/build/tmp/work/cortexa76-cortexa55-crypto-oe-linux/openssl/3.5.2/s
>>>> 
>>>> ources/openssl-3.5.2=/usr/src/debug/openssl/3.5.2
>>>> -ffile-prefix-map=/home/builder/yocto/build/tmp/work/cortexa76-cortexa55-
>>>> crypto-oe-linux/openssl/3.5.2/build=/usr/src/debug/openssl/3.5.2
>>>> -ffile-prefix-map=/home/builder/yocto/build/tmp/work/cortexa76-cortexa55-crypto-oe-linux/openssl/3.5.2/recipe-sysroot=
>>>> 
>>>> -ffile-prefix-map=/home/builder/yocto/build/tmp/work/cortexa76-cortexa55-crypto-oe-linux/openssl/3.5.2/recipe-sysroot-native=
>>>> 
>>>> -pipe -DOPENSSL_USE_NODELETE -DOPENSSL_PIC
>>>> -DOPENSSLDIR="\"/usr/lib/ssl-3\""
>>>> -DENGINESDIR="\"/usr/lib/engines-3\""
>>>> -DMODULESDIR="\"/usr/lib/ossl-modules\"" -DOPENSSL_BUILDING_OPENSSL
>>>> -DNDEBUG -MMD -MF apps/lib/libapps-lib-app_x509.d.tmp -c -o
>>>> apps/lib/libapps-lib-app_x509.o ../sources/openssl-3.5.2/apps/l
>>>> ib/app_x509.c
>>>> ```
>>>> and the partial strings dump with the impurity looks like
>>>> ```
>>>> vtmp
>>>> unsigned int
>>>> /usr/src/debug/openssl/3.5.2
>>>> ../sources/openssl-3.5.2/apps/lib/app_x509.c
>>>> /home/builder/yocto/build/tmp/work/cortexa76-cortexa55-crypto-oe-linux/openssl/3.5.2/build
>>>> 
>>>> include/openssl
>>>> /usr/lib/aarch64-oe-linux/gcc/aarch64-oe-linux/15.2.0/include
>>>> ../sources/openssl-3.5.2/include/openssl
>>>> /usr/include
>>>> ../sources/openssl-3.5.2/apps/lib
>>>> ../sources/openssl-3.5.2/apps/include
>>>> app_x509.c
>>>> ```
>>> 
>>> If you already know its coming from app_x509.c, then you have
>>> narrowed it down a step. Next, would be
>> 
>> To be fair, it's basically every invocation of `gcc ... -c` that
>> produces it. I just picked an arbitrary file that was easy to find
>> that happens to carry the issue.
>> 
>> 
>>> to build just this file with -dD -E option and inspect if it contains
>>> any live string containing
>>> "/home/builder/yocto/build/tmp/work/cortexa76-cortexa55-crypto-oe-linux/openssl/3.5.2/build"
>>> 
>>> if it does not find it. then perhaps build the assembly output with
>>> -fverbose-asm -S
>>> option and look for this string in the generated asm file.
>> 
>> I ran this, and didn't see anything containing the path. I think it's
>> just a bug with the handling of `-ffile-prefix-map` because it looks
>> like the PWD being used is exactly listed
>> 
>> Tried the latest snapshot of gcc 15 too just to see if they fixed
>> anything. Nothing in the git log looks relevant and it doesn't fix the
>> issue.
>> 
>> Did some more digging and found out that if i remove
>> `-ffat-lto-objects` I don't have the issue anymore.
>> Seems like maybe this is related to
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109805
> 
> yeah seems to be the problem you are seeing as well. For tests try passing
> 
> 
> LDFLAGS += "${DEBUG_PREFIX_MAP}"
> 
> and see if it helps.
> 
>> 
>> 
>>> 
>>> 
>>>> 
>>>>> 
>>>>> 
>>>>>> Prior to rebasing on the latest master, LTO was working fine globally.
>>>>> 
>>>>> what is the delta we are talking about here ?
>>>> 
>>>> Sadly this was long ago `25d60ac6f61cc186b4c5a961554bee583736fd17`
>>>> from early 2024. Doing any kind of bisection is probably pointless so
>>>> I just need to figure out this new impurity (or maybe just the check
>>>> got added since then)
>>> 
>>> Yeah that will take too long to bisect so leave that aside.
>>> 
>>> 
>>>> 
>>>> 
>>>>> 
>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

I'm wondering if `-ffat-lto-objects` is strictly necessary for LTO.

[-- Attachment #2: Type: text/html, Size: 7209 bytes --]

  reply	other threads:[~2025-11-06 10:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-29  1:22 Distro wide LTO broken? William Kennington
2025-09-29 18:42 ` [OE-core] " Khem Raj
2025-09-30  0:19   ` William Kennington
2025-09-30  2:58     ` Khem Raj
2025-09-30  7:49       ` William Kennington
2025-09-30 14:55         ` Khem Raj
2025-11-06 10:07           ` mark.yang [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-09-29  5:56 Distro Wide LTO Broken? William Kennington

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=192740.1762423624433535076@lists.openembedded.org \
    --to=mark.yang@lge.com \
    --cc=openembedded-core@lists.openembedded.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