Re: [OE-core] [PATCH 09/11] llvm: sort the lists in generated source reproducibibly

Khem Raj
2020-12-03T19:45:29Z

On Thu, Dec 3, 2020 at 5:37 AM Alexander Kanavin <alex.kanavin@gmail.com> wrote:
>
> Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
> ---
> ...r-sort-ClassInfo-lists-by-name-as-we.patch | 31 +++++++++++++++++++
> meta/recipes-devtools/llvm/llvm_git.bb | 3 +-
> 2 files changed, 33 insertions(+), 1 deletion(-)
> create mode 100644 meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch
>
> diff --git a/meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch b/meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch
> new file mode 100644
> index 0000000000..20eea060b1
> --- /dev/null
> +++ b/meta/recipes-devtools/llvm/llvm/0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch
> @@ -0,0 +1,31 @@
> +From 86940d87026432683fb6741cd8a34d3b9b18e40d Mon Sep 17 00:00:00 2001
> +From: Alexander Kanavin <alex.kanavin@gmail.com>
> +Date: Fri, 27 Nov 2020 10:11:08 +0000
> +Subject: [PATCH] AsmMatcherEmitter: sort ClassInfo lists by name as well
> +
> +Otherwise, there are instances which are identical in
> +every other field and therefore sort non-reproducibly
> +(which breaks binary and source reproducibiliy).
> +
> +Upstream-Status: Pending
> +Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
> +---
> + llvm/utils/TableGen/AsmMatcherEmitter.cpp | 5 ++++-
> + 1 file changed, 4 insertions(+), 1 deletion(-)
> +
> +diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
> +index ccf0959389b..1f801e83b7d 100644
> +--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
> ++++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
> +@@ -359,7 +359,10 @@ public:
> + // name of a class shouldn't be significant. However, some of the backends
> + // accidentally rely on this behaviour, so it will have to stay like this
> + // until they are fixed.
> +- return ValueName < RHS.ValueName;
> ++ if (ValueName != RHS.ValueName)
> ++ return ValueName < RHS.ValueName;
> ++ // All else being equal, we should sort by name, for source and binary reproducibility
> ++ return Name < RHS.Name;

this change looks good to me. it would be good to post it upstream as
well via phabricator to get additional reviews from LLVM community as
well.

> + }
> + };
> +
> diff --git a/meta/recipes-devtools/llvm/llvm_git.bb b/meta/recipes-devtools/llvm/llvm_git.bb
> index b146d0e6e3..43395f8cfc 100644
> --- a/meta/recipes-devtools/llvm/llvm_git.bb
> +++ b/meta/recipes-devtools/llvm/llvm_git.bb
> @@ -33,7 +33,8 @@ SRCREV = "ef32c611aa214dea855364efd7ba451ec5ec3f74"
> SRC_URI = "git://github.com/llvm/llvm-project.git;branch=${BRANCH} \
> file://0006-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch;striplevel=2 \
> file://0007-llvm-allow-env-override-of-exe-path.patch;striplevel=2 \
> - "
> + file://0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch;striplevel=2 \
> + "
>
> UPSTREAM_CHECK_GITTAGREGEX = "llvmorg-(?P<pver>\d+(\.\d+)+)"
>
> --
> 2.29.2
>
>
>
>