From 636372ec17b3167da215d3995e87fe2d6331ad90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Tue, 27 Oct 2020 13:19:28 +0100 Subject: [PATCH] Fix XML ABI dumps that were generated with a faulty GCC and missed the variadic arguments when building without LTO --- ...utput-for-missing-variadic-arguments.patch | 90 +++++++++++++++++++ efivar.spec | 10 ++- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 0001-Fix-abidw-output-for-missing-variadic-arguments.patch diff --git a/0001-Fix-abidw-output-for-missing-variadic-arguments.patch b/0001-Fix-abidw-output-for-missing-variadic-arguments.patch new file mode 100644 index 0000000..45d4769 --- /dev/null +++ b/0001-Fix-abidw-output-for-missing-variadic-arguments.patch @@ -0,0 +1,90 @@ +From e9b282cbd147eac515c53aa500720de3a43366f3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 27 Oct 2020 13:06:15 +0100 +Subject: [PATCH] Fix abidw output for missing variadic arguments +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +GCC forgets to add the varidic arguments into debugging data if the +compilation unit is built with -flto option. As a result, the prebuilt +XML ABI dumps were missing the last argument at 4 functions (e.g. +efi_error_set()). + +This was unnoticed until Fedora enabled LTO globally and had to +disable LTO in efivar explicitly because efivar uses symbol versioning +with top-level assembler statements which is not compatible with LTO. + +Since then the abicheck failed: + +make[2]: Leaving directory '/builddir/build/BUILD/efivar-37/src' +abidiff \ + --suppr abignore \ + --headers-dir2 /builddir/build/BUILD/efivar-37/src/include/efivar/ \ + libefivar.abixml \ + libefivar.so +Functions changes summary: 0 Removed, 2 Changed (8 filtered out), 0 Added functions +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable +2 functions with some indirect sub-type change: + [C]'function int _efi_set_variable_variadic(efi_guid_t, const char*, uint8_t*, size_t, uint32_t)' at lib.c:44:1 has some indirect sub-type changes: + parameter 6 of type '...' was added + [C]'function int efi_error_set(const char*, const char*, int, int, const char*)' at error.c:86:1 has some indirect sub-type changes: + parameter 6 of type '...' was added +make[1]: *** [/builddir/build/BUILD/efivar-37/src/include/rules.mk:41: libefivar.abicheck] Error 4 +make[1]: Leaving directory '/builddir/build/BUILD/efivar-37/src' + +This patch corrects the pregenerated abixml files that were probably +generated with the faulty GCC. + + + + +Signed-off-by: Petr Písař +--- + src/libefiboot.abixml | 2 ++ + src/libefivar.abixml | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/src/libefiboot.abixml b/src/libefiboot.abixml +index 4a0253b..ab75cbb 100644 +--- a/src/libefiboot.abixml ++++ b/src/libefiboot.abixml +@@ -1800,6 +1800,7 @@ + + + ++ + + + +@@ -1809,6 +1810,7 @@ + + + ++ + + + +diff --git a/src/libefivar.abixml b/src/libefivar.abixml +index a719b8b..2dbb838 100644 +--- a/src/libefivar.abixml ++++ b/src/libefivar.abixml +@@ -393,6 +393,7 @@ + + + ++ + + + +@@ -467,6 +468,7 @@ + + + ++ + + + +-- +2.25.4 + diff --git a/efivar.spec b/efivar.spec index 9ff2c81..53ccd28 100644 --- a/efivar.spec +++ b/efivar.spec @@ -1,6 +1,6 @@ Name: efivar Version: 37 -Release: 13%{?dist} +Release: 14%{?dist} Summary: Tools to manage UEFI variables License: LGPL-2.1 URL: https://github.com/rhboot/efivar @@ -19,6 +19,10 @@ Source1: efivar.patches # Source1 patches reflect a git snapshot, this is a separate fix on top # with a gap in between Patch100: 0001-Fix-sys-block-sysfs-parsing-for-eMMC-s.patch +# Fix XML ABI dumps that were generated with a faulty GCC and missed the +# variadic arguments when building without LTO, bug #1863475, +# +Patch101: 0001-Fix-abidw-output-for-missing-variadic-arguments.patch %description efivar provides a simple command line interface to the UEFI variable facility. @@ -83,6 +87,10 @@ make abicheck %{_libdir}/*.so.* %changelog +* Tue Oct 27 2020 Petr Pisar - 37-14 +- Fix XML ABI dumps that were generated with a faulty GCC and missed the + variadic arguments when building without LTO (bug #1863475) + * Thu Aug 06 2020 Jeff Law - Remove explicit LTO bits from flags