Message ID | 20220319165538.510074-1-bero@lindev.ch |
---|---|
State | New |
Headers | show |
Series | recipes-core/ovmf: Fix build with gcc 12 | expand |
Just disable Werror with appropriate comments describing why we are Doing it until the issues are fixed On Sat, Mar 19, 2022 at 9:55 AM Bernhard Rosenkränzer via lists.openembedded.org <bero=lindev.ch@lists.openembedded.org> wrote: > From: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> > > edk2 doesn't compile with gcc 12 - due to 2 legitimate bugs (trying to > use a file handle as if it were a string) and 2 new warnings in code > using -Werror (they need further investigation to determine if they're > legitimate bugs or false positives; in the mean time we can keep things > building by disabling the warnings for the particular lines triggering > them). > > The proper fixes have already been submitted upstream at > https://github.com/tianocore/edk2/pull/2602 > Will not submit the workarounds for the warnings upstream for now. > > Signed-off-by: Bernhard Rosenkränzer < > bernhard.rosenkraenzer.ext@huawei.com> > --- > ...nfusion-between-file-handle-and-name.patch | 44 +++++++++++++++++++ > ...orkaround-for-gcc-12-build-failure-2.patch | 33 ++++++++++++++ > ...-workaround-for-gcc-12-build-failure.patch | 28 ++++++++++++ > meta/recipes-core/ovmf/ovmf_git.bb | 3 ++ > 4 files changed, 108 insertions(+) > create mode 100644 > meta/recipes-core/ovmf/ovmf/edk2-fix-confusion-between-file-handle-and-name.patch > create mode 100644 > meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure-2.patch > create mode 100644 > meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure.patch > > diff --git > a/meta/recipes-core/ovmf/ovmf/edk2-fix-confusion-between-file-handle-and-name.patch > b/meta/recipes-core/ovmf/ovmf/edk2-fix-confusion-between-file-handle-and-name.patch > new file mode 100644 > index 0000000000..98023f93c2 > --- /dev/null > +++ > b/meta/recipes-core/ovmf/ovmf/edk2-fix-confusion-between-file-handle-and-name.patch > @@ -0,0 +1,44 @@ > +From 74e7ad4e400ea3f942805e70df4d3ed6990759f3 Mon Sep 17 00:00:00 2001 > +From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= <bero@lindev.ch> > +Date: Tue, 8 Mar 2022 18:56:23 +0100 > +Subject: [PATCH] GenFfs: Don't treat a file handle as a string > +MIME-Version: 1.0 > +Content-Type: text/plain; charset=UTF-8 > +Content-Transfer-Encoding: 8bit > + > +The current code tries to print the file handle as a string on error. > +Do what it is meant to do instead: Print the file name. > + > +Upstream-Status: Submitted [https://github.com/tianocore/edk2/pull/2602] > +Signed-off-by: Bernhard Rosenkränzer <bero@lindev.ch> > +--- > + BaseTools/Source/C/GenFfs/GenFfs.c | 2 +- > + BaseTools/Source/C/GenSec/GenSec.c | 2 +- > + 2 files changed, 2 insertions(+), 2 deletions(-) > + > +diff --git a/BaseTools/Source/C/GenFfs/GenFfs.c > b/BaseTools/Source/C/GenFfs/GenFfs.c > +index 949025c33325..06e009e279ce 100644 > +--- a/BaseTools/Source/C/GenFfs/GenFfs.c > ++++ b/BaseTools/Source/C/GenFfs/GenFfs.c > +@@ -542,7 +542,7 @@ GetAlignmentFromFile(char *InFile, UINT32 *Alignment) > + PeFileBuffer = (UINT8 *) malloc (PeFileSize); > + if (PeFileBuffer == NULL) { > + fclose (InFileHandle); > +- Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of > %s", InFileHandle); > ++ Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of > %s", InFile); > + return EFI_OUT_OF_RESOURCES; > + } > + fread (PeFileBuffer, sizeof (UINT8), PeFileSize, InFileHandle); > +diff --git a/BaseTools/Source/C/GenSec/GenSec.c > b/BaseTools/Source/C/GenSec/GenSec.c > +index d54a4f9e0a7d..1ad92de1d50e 100644 > +--- a/BaseTools/Source/C/GenSec/GenSec.c > ++++ b/BaseTools/Source/C/GenSec/GenSec.c > +@@ -1062,7 +1062,7 @@ GetAlignmentFromFile(char *InFile, UINT32 > *Alignment) > + PeFileBuffer = (UINT8 *) malloc (PeFileSize); > + if (PeFileBuffer == NULL) { > + fclose (InFileHandle); > +- Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of > %s", InFileHandle); > ++ Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of > %s", InFile); > + return EFI_OUT_OF_RESOURCES; > + } > + fread (PeFileBuffer, sizeof (UINT8), PeFileSize, InFileHandle); > diff --git > a/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure-2.patch > b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure-2.patch > new file mode 100644 > index 0000000000..e7b7269d82 > --- /dev/null > +++ > b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure-2.patch > @@ -0,0 +1,33 @@ > +From: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> > +Date: Fri, 18 Mar 2022 17:28:47 +0100 > +Subject: [PATCH] Disable gcc >= 12 stringop-overflow warning > + > +gcc 12 warns about a stringop-overflow with SetDevicePathEndNode > +potentially copying 4 bytes to an area of 1 byte. > +Since edk2 is built with -Werror, this breaks the build. > + > +It is not immedaitely clear whether this is a false warning or if > +SetDevicePathEndNode is being used incorrectly somewhere, but since > +the code seems to work, ignore the warning for the time being to > +keep things buildable. > + > +This should be investigated properly at some point. > + > +Upstream-Status: Inappropriate [Workaround to keep things going, should > be fixed properly] > +Signed-off-by: Bernhard Rosenkränzer < > bernhard.rosenkraenzer.ext@huawei.com> > + > +diff --git a/BaseTools/Source/C/DevicePath/DevicePathUtilities.c > b/BaseTools/Source/C/DevicePath/DevicePathUtilities.c > +index 2ffefa8cee..32c02bdf82 100644 > +--- a/BaseTools/Source/C/DevicePath/DevicePathUtilities.c > ++++ b/BaseTools/Source/C/DevicePath/DevicePathUtilities.c > +@@ -318,7 +318,10 @@ SetDevicePathEndNode ( > + ) > + { > + ASSERT (Node != NULL); > ++#pragma GCC diagnostic push > ++#pragma GCC diagnostic ignored "-Wstringop-overflow" > + memcpy (Node, &mUefiDevicePathLibEndDevicePath, sizeof > (mUefiDevicePathLibEndDevicePath)); > ++#pragma GCC diagnostic pop > + } > + > + /** > diff --git > a/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure.patch > b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure.patch > new file mode 100644 > index 0000000000..048112e3fc > --- /dev/null > +++ > b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure.patch > @@ -0,0 +1,28 @@ > +From: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> > +Date: Fri, 18 Mar 2022 17:28:47 +0100 > +Subject: [PATCH] Disable gcc >= 12 dangling-pointer warning > + > +gcc 12 warns about a pointer into outStream being preserved after > outStream > +goes out of scope. Since edk2 is built with -Werror, this breaks the > build. > + > +This exact use happens to work with all compilers currently used, > +so ignore the warning for the time being to keep things buildable. > + > +Upstream-Status: Inappropriate [Workaround to keep things going, should > be fixed properly] > +Signed-off-by: Bernhard Rosenkränzer < > bernhard.rosenkraenzer.ext@huawei.com> > + > +diff --git a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c > b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c > +index 4e9b499f8d..5f0e75eeda 100644 > +--- a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c > ++++ b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c > +@@ -2825,7 +2825,10 @@ SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, > BoolInt reInit, > + > + nowPos64 = p->nowPos64; > + RangeEnc_Init(&p->rc); > ++#pragma GCC diagnostic push > ++#pragma GCC diagnostic ignored "-Wdangling-pointer" > + p->rc.outStream = &outStream.vt; > ++#pragma GCC diagnostic pop > + > + if (desiredPackSize == 0) > + return SZ_ERROR_OUTPUT_EOF; > diff --git a/meta/recipes-core/ovmf/ovmf_git.bb b/meta/recipes-core/ovmf/ > ovmf_git.bb > index b15d40eac8..5f255b46b2 100644 > --- a/meta/recipes-core/ovmf/ovmf_git.bb > +++ b/meta/recipes-core/ovmf/ovmf_git.bb > @@ -21,6 +21,9 @@ SRC_URI = "gitsm:// > github.com/tianocore/edk2.git;branch=master;protocol=https \ > file://0003-ovmf-Update-to-latest.patch \ > file://0005-debug-prefix-map.patch \ > file://0006-reproducible.patch \ > + file://edk2-fix-confusion-between-file-handle-and-name.patch \ > + file://edk2-workaround-for-gcc-12-build-failure.patch \ > + file://edk2-workaround-for-gcc-12-build-failure-2.patch > " > > PV = "edk2-stable202202" > -- > 2.35.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#163472): > https://lists.openembedded.org/g/openembedded-core/message/163472 > Mute This Topic: https://lists.openembedded.org/mt/89892121/1997914 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ > raj.khem@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > >
diff --git a/meta/recipes-core/ovmf/ovmf/edk2-fix-confusion-between-file-handle-and-name.patch b/meta/recipes-core/ovmf/ovmf/edk2-fix-confusion-between-file-handle-and-name.patch new file mode 100644 index 0000000000..98023f93c2 --- /dev/null +++ b/meta/recipes-core/ovmf/ovmf/edk2-fix-confusion-between-file-handle-and-name.patch @@ -0,0 +1,44 @@ +From 74e7ad4e400ea3f942805e70df4d3ed6990759f3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= <bero@lindev.ch> +Date: Tue, 8 Mar 2022 18:56:23 +0100 +Subject: [PATCH] GenFfs: Don't treat a file handle as a string +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The current code tries to print the file handle as a string on error. +Do what it is meant to do instead: Print the file name. + +Upstream-Status: Submitted [https://github.com/tianocore/edk2/pull/2602] +Signed-off-by: Bernhard Rosenkränzer <bero@lindev.ch> +--- + BaseTools/Source/C/GenFfs/GenFfs.c | 2 +- + BaseTools/Source/C/GenSec/GenSec.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/BaseTools/Source/C/GenFfs/GenFfs.c b/BaseTools/Source/C/GenFfs/GenFfs.c +index 949025c33325..06e009e279ce 100644 +--- a/BaseTools/Source/C/GenFfs/GenFfs.c ++++ b/BaseTools/Source/C/GenFfs/GenFfs.c +@@ -542,7 +542,7 @@ GetAlignmentFromFile(char *InFile, UINT32 *Alignment) + PeFileBuffer = (UINT8 *) malloc (PeFileSize); + if (PeFileBuffer == NULL) { + fclose (InFileHandle); +- Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of %s", InFileHandle); ++ Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of %s", InFile); + return EFI_OUT_OF_RESOURCES; + } + fread (PeFileBuffer, sizeof (UINT8), PeFileSize, InFileHandle); +diff --git a/BaseTools/Source/C/GenSec/GenSec.c b/BaseTools/Source/C/GenSec/GenSec.c +index d54a4f9e0a7d..1ad92de1d50e 100644 +--- a/BaseTools/Source/C/GenSec/GenSec.c ++++ b/BaseTools/Source/C/GenSec/GenSec.c +@@ -1062,7 +1062,7 @@ GetAlignmentFromFile(char *InFile, UINT32 *Alignment) + PeFileBuffer = (UINT8 *) malloc (PeFileSize); + if (PeFileBuffer == NULL) { + fclose (InFileHandle); +- Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of %s", InFileHandle); ++ Error(NULL, 0, 4001, "Resource", "memory cannot be allocated of %s", InFile); + return EFI_OUT_OF_RESOURCES; + } + fread (PeFileBuffer, sizeof (UINT8), PeFileSize, InFileHandle); diff --git a/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure-2.patch b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure-2.patch new file mode 100644 index 0000000000..e7b7269d82 --- /dev/null +++ b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure-2.patch @@ -0,0 +1,33 @@ +From: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> +Date: Fri, 18 Mar 2022 17:28:47 +0100 +Subject: [PATCH] Disable gcc >= 12 stringop-overflow warning + +gcc 12 warns about a stringop-overflow with SetDevicePathEndNode +potentially copying 4 bytes to an area of 1 byte. +Since edk2 is built with -Werror, this breaks the build. + +It is not immedaitely clear whether this is a false warning or if +SetDevicePathEndNode is being used incorrectly somewhere, but since +the code seems to work, ignore the warning for the time being to +keep things buildable. + +This should be investigated properly at some point. + +Upstream-Status: Inappropriate [Workaround to keep things going, should be fixed properly] +Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> + +diff --git a/BaseTools/Source/C/DevicePath/DevicePathUtilities.c b/BaseTools/Source/C/DevicePath/DevicePathUtilities.c +index 2ffefa8cee..32c02bdf82 100644 +--- a/BaseTools/Source/C/DevicePath/DevicePathUtilities.c ++++ b/BaseTools/Source/C/DevicePath/DevicePathUtilities.c +@@ -318,7 +318,10 @@ SetDevicePathEndNode ( + ) + { + ASSERT (Node != NULL); ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wstringop-overflow" + memcpy (Node, &mUefiDevicePathLibEndDevicePath, sizeof (mUefiDevicePathLibEndDevicePath)); ++#pragma GCC diagnostic pop + } + + /** diff --git a/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure.patch b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure.patch new file mode 100644 index 0000000000..048112e3fc --- /dev/null +++ b/meta/recipes-core/ovmf/ovmf/edk2-workaround-for-gcc-12-build-failure.patch @@ -0,0 +1,28 @@ +From: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> +Date: Fri, 18 Mar 2022 17:28:47 +0100 +Subject: [PATCH] Disable gcc >= 12 dangling-pointer warning + +gcc 12 warns about a pointer into outStream being preserved after outStream +goes out of scope. Since edk2 is built with -Werror, this breaks the build. + +This exact use happens to work with all compilers currently used, +so ignore the warning for the time being to keep things buildable. + +Upstream-Status: Inappropriate [Workaround to keep things going, should be fixed properly] +Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> + +diff --git a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c +index 4e9b499f8d..5f0e75eeda 100644 +--- a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c ++++ b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c +@@ -2825,7 +2825,10 @@ SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit, + + nowPos64 = p->nowPos64; + RangeEnc_Init(&p->rc); ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wdangling-pointer" + p->rc.outStream = &outStream.vt; ++#pragma GCC diagnostic pop + + if (desiredPackSize == 0) + return SZ_ERROR_OUTPUT_EOF; diff --git a/meta/recipes-core/ovmf/ovmf_git.bb b/meta/recipes-core/ovmf/ovmf_git.bb index b15d40eac8..5f255b46b2 100644 --- a/meta/recipes-core/ovmf/ovmf_git.bb +++ b/meta/recipes-core/ovmf/ovmf_git.bb @@ -21,6 +21,9 @@ SRC_URI = "gitsm://github.com/tianocore/edk2.git;branch=master;protocol=https \ file://0003-ovmf-Update-to-latest.patch \ file://0005-debug-prefix-map.patch \ file://0006-reproducible.patch \ + file://edk2-fix-confusion-between-file-handle-and-name.patch \ + file://edk2-workaround-for-gcc-12-build-failure.patch \ + file://edk2-workaround-for-gcc-12-build-failure-2.patch " PV = "edk2-stable202202"