Hi Pedro,
I just re-sent in readable format.
Thanks,
Minh Nguyen
On 5/7/2023 12:39 PM, Minh Nguyen wrote:
Hi Pedro,
Firstly, thanks for your comments, let me explain.
- "C99 flexible array members have been well defined and well
supported for maybe 20 years in GCC (https://godbolt.org/z/9qxKar4f6)"
=>*Yes, I agree and there's no****comment from my side* *but this is completely different with current issue, why? Please see
the bellow****explanation.*
- When we define the PCD to map with any structure in .dec file, BaseTools
will gen/*PcdValueInit.c*/.
In this file, there're a lot of using
"/*__FIELD_SIZE(REST_EX_SERVICE_DEVICE_PATH_DATA, DevicePath);*/"
and this is the definiton of this macro "/*#define __FIELD_SIZE(TYPE, Field)
(sizeof((TYPE *)0)->Field)*/".
When using "/*__STATIC_ASSERT((__FIELD_SIZE(REST_EX_SERVICE_DEVICE_PATH_DATA,
DevicePath) >= 3) || *//**//*(__FIELD_SIZE(REST_EX_SERVICE_DEVICE_PATH_DATA, DevicePath) == 0),
"Input buffer exceeds the buffer array");*/",
"/*(sizeof((TYPE *)0)->Field*/" will be an error (*error: invalid
application of ‘sizeof’ to incomplete type **EFI_DEVICE_PATH_PROTOCOL[]*)
=> cause error on "__STATIC_ASSERT" because _Static_assert requires its
first parameter to be a constant expression => the error message when compile
this code is "*Line 257 Value {0x03,0x0b,0x25,0x00,0x00,0x1b,****0x21,0xdc,0x35,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,****0x00,0x00,0x00,0x00,0x00,0x01,0x7f,0xff,0x04,0x00}:293:19: error:
expression in static assertion is not an integer*".
- An other demonstation on other platforms in this behavior: You can check
at*edk2-platforms/Features/Intel/SystemInformation/SmbiosFeaturePkg/SmbiosFeaturePkg.dec*
and I try it in my platform.
gAmpereTokenSpaceGuid.PcdSmbiosType0BiosInformation|{0x0}|SMBIOS_TABLE_TYPE0|0xB000000C{
<HeaderFiles>
IndustryStandard/SmBios.h
<Packages>
MdePkg/MdePkg.dec
Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec
}
gAmpereTokenSpaceGuid.PcdSmbiosType0BiosInformation.Vendor|0x1
gAmpereTokenSpaceGuid.PcdSmbiosType0BiosInformation.BIOSCharacteristicsExtensionBytes[0]|0x33
This is the declaration to map PcdSmbiosType0BiosInformation with
SMBIOS_TABLE_TYPE0 structure and
the declaration BIOSCharacteristicsExtensionBytes is "*UINT8
BIOSCharacteristicsExtensionBytes[2];*".
If we remove the number of elements (2) to flexible array, we will see the
same error like
"*Index of BIOSCharacteristicsExtensionBytes[0]:361:19: error: expression
in static assertion is not an integer."*
=> CONCLUSION: This is not problem of compiler, it just comes from the way BaseTools gen
/*PcdValueInit.c*/ and definition of macros. I hope above explanation satisfy
your concern.
Thanks,
Minh Nguyen
On 5/6/2023 5:57 AM, Pedro Falcato wrote:
On Fri, May 5, 2023 at 6:12 PM Minh Nguyen via groups.io
<minhnguyen1=os.amperecomputing....@groups.io> wrote:
From: Vu Nguyen<vungu...@os.amperecomputing.com>
It requires a fixed size array to store the content of device path PCD.
Add the array size to solve this issue.
Signed-off-by: Minh Nguyen<minhnguy...@os.amperecomputing.com>
Cc: Abner Chang<abner.ch...@amd.com>
Cc: Igor Kulchytskyy<ig...@ami.com>
Cc: Nick Ramirez<nrami...@nvidia.com>
Reviewed-by: Abner Chang<abner.ch...@amd.com>
---
RedfishPkg/Include/Pcd/RestExServiceDevicePath.h | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/RedfishPkg/Include/Pcd/RestExServiceDevicePath.h
b/RedfishPkg/Include/Pcd/RestExServiceDevicePath.h
index 91b1198297c2..57fc199f61f2 100644
--- a/RedfishPkg/Include/Pcd/RestExServiceDevicePath.h
+++ b/RedfishPkg/Include/Pcd/RestExServiceDevicePath.h
@@ -4,6 +4,7 @@
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ Copyright (c) 2023, Ampere Computing LLC. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -14,6 +15,8 @@
#include <Protocol/DevicePath.h>
+#define MAX_DEVICE_PATH_NODE 40
+
typedef enum {
DEVICE_PATH_MATCH_MAC_NODE = 1,
DEVICE_PATH_MATCH_PCI_NODE = 2,
@@ -32,7 +35,7 @@ typedef struct {
//
0x03,0x0b,0x25,0x00,0x00,0x50,0x56,0xc0,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
// 0x7f,0xff,0x04,0x00}
//
- EFI_DEVICE_PATH_PROTOCOL DevicePath[];
+ EFI_DEVICE_PATH_PROTOCOL DevicePath[MAX_DEVICE_PATH_NODE];
} REST_EX_SERVICE_DEVICE_PATH_DATA;
This doesn't work (changes the meaning) and may possibly break ABI.
What error do you get? What compiler?
C99 flexible array members have been well defined and well supported
for maybe 20 years in GCC (https://godbolt.org/z/9qxKar4f6)
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#104271): https://edk2.groups.io/g/devel/message/104271
Mute This Topic: https://groups.io/mt/98710278/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-