From: "Bret Barkelew" <bret.barkelew@microsoft.com>
To: Andrew Fish <afish@apple.com>,
edk2-devel-groups-io <devel@edk2.groups.io>
Cc: Ken Taylor <Ken_Taylor@phoenix.com>
Subject: Re: [EXTERNAL] Re: [edk2-devel] ECC: Won't somebody PLEASE think of the... test structures.
Date: Fri, 25 Sep 2020 02:57:14 +0000 [thread overview]
Message-ID: <MW4PR21MB1857EABB8471AF0D6CDE3247EF360@MW4PR21MB1857.namprd21.prod.outlook.com> (raw)
In-Reply-To: <DA2D0B2D-CC1D-405B-9F1D-160872165447@apple.com>
[-- Attachment #1.1: Type: text/plain, Size: 4876 bytes --]
Andrew,
That’s actually what got me here. EccCheck runs as part of our CI now (but it didn’t when I wrote these tests a year ago). I need to either figure out how to get this code to pass EccCheck in a reasonable way, or just not contribute the tests and say “go to Mu for the tests, if you want them”.
Skipping the contribution isn’t a desirable outcome at all for a number of reasons, not the least of which is that we (MS and others) are trying encourage all contributions to come with tests, so the process of writing them needs to be simple and painless.
- Bret
From: Andrew Fish<mailto:afish@apple.com>
Sent: Thursday, September 24, 2020 7:48 PM
To: edk2-devel-groups-io<mailto:devel@edk2.groups.io>; Bret Barkelew<mailto:Bret.Barkelew@microsoft.com>
Cc: Ken Taylor<mailto:Ken_Taylor@phoenix.com>
Subject: [EXTERNAL] Re: [edk2-devel] ECC: Won't somebody PLEASE think of the... test structures.
Bret,
I’ve had this issue with EFI code too. It will compile with for DEBUG and RELEASE as the optimizer removes the memcpy/memset. So you only see a build failure when you compiler NOOPT (and there are no intrinsic libs). I mostly see this in platform code when I try to compile a single driver/lib NOOPT and it fails to link due to the missing intrinsic.
The easy to enforce this is to compile with optimizations enabled and don’t enable intrinsic libs. Not sure if that is really practical from the test point of view.
Seems the tool caught the coding style violation so I guess we could try to “make running that tool easier”. Maybe hooking into patchcheck.py, making some kind of githook, or adding a git command?
Thanks,
Andrew Fish
On Sep 24, 2020, at 7:25 PM, Bret Barkelew via groups.io<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgroups.io%2F&data=02%7C01%7Cbret.barkelew%40microsoft.com%7Cd438e9952e1c476285f608d860fd7e71%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637365989149774199&sdata=SaAatm8guPgl%2F63Sc%2B0AAbReBqeBPuKBJZjAmEWstU8%3D&reserved=0> <bret.barkelew=microsoft.com@groups.io<mailto:bret.barkelew=microsoft.com@groups.io>> wrote:
So for context, this is a new host-based test that should only run within a platform OS, so intrinsics aren’t the big deal that they would be in FW code.
But we do need to figure out how to simultaneously adhere to the coding convention while enabling test authoring.
Or we chose to not enforce quite as many things for tests.
I’d prefer the first.
- Bret
From: Ken Taylor<mailto:Ken_Taylor@phoenix.com>
Sent: Thursday, September 24, 2020 6:57 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Bret Barkelew<mailto:Bret.Barkelew@microsoft.com>
Subject: [EXTERNAL] RE: ECC: Won't somebody PLEASE think of the... test structures.
If the structure is a non-static local variable, most compilers will silently inject an intrinsic call to memcpy in function initialization. This leads to an intermittent linker error.
If the compiler you use automatically supports an intrinsic memcpy in the given architecture or optimizes out the memcpy, it will build for you and you won’t know you need to link to an intrinsic support library in order to build cross platform. This leads to code that builds for you, but not for me.
Regards,
-Ken.
From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> [mailto:devel@edk2.groups.io] On Behalf Of Bret Barkelew via groups.io<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgroups.io%2F&data=02%7C01%7Cbret.barkelew%40microsoft.com%7Cd438e9952e1c476285f608d860fd7e71%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637365989149784192&sdata=RYkXf9eJ%2B%2BAAFofHhAD2BisFsokbP28A6pyE5iaqRpo%3D&reserved=0>
Sent: Thursday, September 24, 2020 6:23 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Subject: [edk2-devel] ECC: Won't somebody PLEASE think of the... test structures.
ERROR - EFI coding style error
ERROR - *Error code: 5007
ERROR - *There should be no initialization of a variable as part of its declaration
ERROR - *file: //home/corthon/_uefi/edk2_qemu_ci/edk2/MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/VariablePolicyUnitTest.c
ERROR - *Line number: 333
ERROR - *Variable Name: MatchCheckPolicy
EccCheck no likey:
SIMPLE_VARIABLE_POLICY_ENTRY ValidationPolicy = {
{
VARIABLE_POLICY_ENTRY_REVISION,
sizeof(VARIABLE_POLICY_ENTRY) + sizeof(TEST_VAR_1_NAME),
sizeof(VARIABLE_POLICY_ENTRY),
TEST_GUID_1,
TEST_POLICY_MIN_SIZE_NULL,
TEST_POLICY_MAX_SIZE_NULL,
TEST_POLICY_ATTRIBUTES_NULL,
TEST_POLICY_ATTRIBUTES_NULL,
VARIABLE_POLICY_TYPE_NO_LOCK
},
TEST_VAR_1_NAME
};
But you can’t init this structure separately without addressing each field.
Can a brother get an override?
- Bret
<95B370A7BEED49AAB797022E8F260C8F.png>
[-- Attachment #1.2: Type: text/html, Size: 12911 bytes --]
[-- Attachment #2: 956D9B34BE2C49FA8D0841584A830F55.png --]
[-- Type: image/png, Size: 139 bytes --]
next prev parent reply other threads:[~2020-09-25 2:57 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-25 1:23 ECC: Won't somebody PLEASE think of the... test structures Bret Barkelew
2020-09-25 1:56 ` Ken Taylor
2020-09-25 2:25 ` Bret Barkelew
2020-09-25 2:46 ` Bret Barkelew
2020-09-25 2:48 ` [edk2-devel] " Andrew Fish
2020-09-25 2:57 ` Bret Barkelew [this message]
2020-09-26 2:52 ` [EXTERNAL] " Andrew Fish
2020-09-27 3:40 ` Bret Barkelew
2020-09-28 18:16 ` Laszlo Ersek
2020-09-25 7:31 ` Laszlo Ersek
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-list 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=MW4PR21MB1857EABB8471AF0D6CDE3247EF360@MW4PR21MB1857.namprd21.prod.outlook.com \
--to=devel@edk2.groups.io \
/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