This fixes the problem with clang+llvm-objcopy, please install this patch

On Fri, Nov 22, 2024 at 3:07 AM Ross Burton via lists.openembedded.org
<ross.burton=arm....@lists.openembedded.org> wrote:
>
> There are two behavioural differences between the objcopy in binutils
> and llvm which resulted in build failures when building systemd with
> clang:
>
> 1) If the section specified in --dump-section doesn't exist, binutils
> set an exit code of 0 whereas llvm sets 1.  This means we need to handle
> the exit code so that we raise exceptions on unexpected failures, but
> return an empty byte string if the segment isn't found.
>
> 2) binutils writes the section to the file name directly, whereas llvm
> writes to a temporary file and renames.  This means we can't read the
> open fd directly, and instead need to re-open the file to read it.
>
> Signed-off-by: Ross Burton <ross.bur...@arm.com>
> ---
>  meta/recipes-core/systemd/dlopen-deps.inc | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/meta/recipes-core/systemd/dlopen-deps.inc 
> b/meta/recipes-core/systemd/dlopen-deps.inc
> index eaf6ca1f79a..e0b333398c2 100644
> --- a/meta/recipes-core/systemd/dlopen-deps.inc
> +++ b/meta/recipes-core/systemd/dlopen-deps.inc
> @@ -12,9 +12,17 @@ python package_generate_dlopen_deps() {
>          import tempfile, subprocess
>
>          with tempfile.NamedTemporaryFile() as f:
> -            cmd = [d.getVar("OBJCOPY"), "--dump-section", 
> f"{segment}={f.name}", filename]
> -            subprocess.run(cmd, check=True)
> -            return f.read()
> +            try:
> +                cmd = [d.getVar("OBJCOPY"), "--dump-section", 
> f"{segment}={f.name}", filename]
> +                subprocess.run(cmd, check=True)
> +                with open(f.name, "rb") as f2:
> +                    return f2.read()
> +            except subprocess.CalledProcessError as e:
> +                # binutils-objcopy has 0 exit code if the segment can't be 
> found, but llvm-objcopy
> +                # does not. Assume the failure isn't critical and ignore 
> errors.
> +                if e.returncode == 1:
> +                    return b""
> +                raise e
>
>      def parse(buffer, is_little):
>          deps = []
> --
> 2.34.1
>
>
> 
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#207643): 
https://lists.openembedded.org/g/openembedded-core/message/207643
Mute This Topic: https://lists.openembedded.org/mt/109720382/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to