forked from pool/grub2
Accepting request 792408 from home:michael-chang:gcc10
- Fix GCC 10 build fail (bsc#1158189) * 0001-mdraid1x_linux-Fix-gcc10-error-Werror-array-bounds.patch * 0002-zfs-Fix-gcc10-error-Werror-zero-length-bounds.patch OBS-URL: https://build.opensuse.org/request/show/792408 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=353
This commit is contained in:
parent
ddf5f70a27
commit
a531c295e8
@ -0,0 +1,52 @@
|
||||
From fe8a83722bf1af7ea3949e6d96e7906407f78d5c Mon Sep 17 00:00:00 2001
|
||||
From: Michael Chang <mchang@suse.com>
|
||||
Date: Wed, 25 Mar 2020 13:52:51 +0800
|
||||
Subject: [PATCH 1/2] mdraid1x_linux: Fix gcc10 error -Werror=array-bounds
|
||||
|
||||
We bumped into the build error while testing gcc-10 pre-release.
|
||||
|
||||
../../grub-core/disk/mdraid1x_linux.c: In function 'grub_mdraid_detect':
|
||||
../../grub-core/disk/mdraid1x_linux.c:181:15: error: array subscript <unknown> is outside array bounds of 'grub_uint16_t[0]' {aka 'short unsigned int[0]'} [-Werror=array-bounds]
|
||||
181 | (char *) &sb.dev_roles[grub_le_to_cpu32 (sb.dev_number)]
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
../../grub-core/disk/mdraid1x_linux.c:98:17: note: while referencing 'dev_roles'
|
||||
98 | grub_uint16_t dev_roles[0]; /* Role in array, or 0xffff for a spare, or 0xfffe for faulty. */
|
||||
| ^~~~~~~~~
|
||||
../../grub-core/disk/mdraid1x_linux.c:127:33: note: defined here 'sb'
|
||||
127 | struct grub_raid_super_1x sb;
|
||||
| ^~
|
||||
cc1: all warnings being treated as errors
|
||||
|
||||
Apparently gcc issues the warning when trying to access sb.dev_roles
|
||||
array's member, since it is a zero length array as the last element of
|
||||
struct grub_raid_super_1x that is allocated sparsely without extra
|
||||
chunks for the trailing bits, so the warning looks legitimate in this
|
||||
regard.
|
||||
|
||||
As the whole thing here is doing offset computation, it is undue to use
|
||||
syntax that would imply array member access then take address from it
|
||||
later. Instead we could accomplish the same thing through basic array
|
||||
pointer arithmetic to pacify the warning.
|
||||
|
||||
Signed-off-by: Michael Chang <mchang@suse.com>
|
||||
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
---
|
||||
grub-core/disk/mdraid1x_linux.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/disk/mdraid1x_linux.c b/grub-core/disk/mdraid1x_linux.c
|
||||
index 7cc80d3df..c980feba4 100644
|
||||
--- a/grub-core/disk/mdraid1x_linux.c
|
||||
+++ b/grub-core/disk/mdraid1x_linux.c
|
||||
@@ -178,7 +178,7 @@ grub_mdraid_detect (grub_disk_t disk,
|
||||
return NULL;
|
||||
|
||||
if (grub_disk_read (disk, sector,
|
||||
- (char *) &sb.dev_roles[grub_le_to_cpu32 (sb.dev_number)]
|
||||
+ (char *) (sb.dev_roles + grub_le_to_cpu32 (sb.dev_number))
|
||||
- (char *) &sb,
|
||||
sizeof (role), &role))
|
||||
return NULL;
|
||||
--
|
||||
2.16.4
|
||||
|
87
0002-zfs-Fix-gcc10-error-Werror-zero-length-bounds.patch
Normal file
87
0002-zfs-Fix-gcc10-error-Werror-zero-length-bounds.patch
Normal file
@ -0,0 +1,87 @@
|
||||
From 30379c2280c5b4514abafc2492e081209a330cb0 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Chang <mchang@suse.com>
|
||||
Date: Wed, 25 Mar 2020 14:28:15 +0800
|
||||
Subject: [PATCH 2/2] zfs: Fix gcc10 error -Werror=zero-length-bounds
|
||||
|
||||
We bumped into the build error while testing gcc-10 pre-release.
|
||||
|
||||
In file included from ../../include/grub/file.h:22,
|
||||
from ../../grub-core/fs/zfs/zfs.c:34:
|
||||
../../grub-core/fs/zfs/zfs.c: In function 'zap_leaf_lookup':
|
||||
../../grub-core/fs/zfs/zfs.c:2263:44: error: array subscript '<unknown>' is outside the bounds of an interior zero-length array 'grub_uint16_t[0]' {aka 'short unsigned int[0]'} [-Werror=zero-length-bounds]
|
||||
2263 | for (chunk = grub_zfs_to_cpu16 (l->l_hash[LEAF_HASH (blksft, h, l)], endian);
|
||||
../../include/grub/types.h:241:48: note: in definition of macro 'grub_le_to_cpu16'
|
||||
241 | # define grub_le_to_cpu16(x) ((grub_uint16_t) (x))
|
||||
| ^
|
||||
../../grub-core/fs/zfs/zfs.c:2263:16: note: in expansion of macro 'grub_zfs_to_cpu16'
|
||||
2263 | for (chunk = grub_zfs_to_cpu16 (l->l_hash[LEAF_HASH (blksft, h, l)], endian);
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
In file included from ../../grub-core/fs/zfs/zfs.c:48:
|
||||
../../include/grub/zfs/zap_leaf.h:72:16: note: while referencing 'l_hash'
|
||||
72 | grub_uint16_t l_hash[0];
|
||||
| ^~~~~~
|
||||
|
||||
Here I'd like to quote from the gcc document [1] which seems best to
|
||||
explain what is going on here.
|
||||
|
||||
"Although the size of a zero-length array is zero, an array member of
|
||||
this kind may increase the size of the enclosing type as a result of
|
||||
tail padding. The offset of a zero-length array member from the
|
||||
beginning of the enclosing structure is the same as the offset of an
|
||||
array with one or more elements of the same type. The alignment of a
|
||||
zero-length array is the same as the alignment of its elements.
|
||||
|
||||
Declaring zero-length arrays in other contexts, including as interior
|
||||
members of structure objects or as non-member objects, is discouraged.
|
||||
Accessing elements of zero-length arrays declared in such contexts is
|
||||
undefined and may be diagnosed."
|
||||
|
||||
The l_hash[0] is apparnetly an interior member to the enclosed structure
|
||||
while l_entries[0] is the trailing member. And the offending code tries
|
||||
to access members in l_hash[0] array that triggers the diagnose.
|
||||
|
||||
Given that the l_entries[0] is used to get proper alignment to access
|
||||
leaf chunks, we can accomplish the same thing through the ALIGN_UP macro
|
||||
thus eliminating l_entries[0] from the structure. In this way we can
|
||||
pacify the warning as l_hash[0] now becomes the last member to the
|
||||
enclosed structure.
|
||||
|
||||
[1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
|
||||
|
||||
Signed-off-by: Michael Chang <mchang@suse.com>
|
||||
---
|
||||
grub-core/fs/zfs/zfs.c | 5 ++++-
|
||||
include/grub/zfs/zap_leaf.h | 1 -
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c
|
||||
index 2f72e42bf..b5e10fd0b 100644
|
||||
--- a/grub-core/fs/zfs/zfs.c
|
||||
+++ b/grub-core/fs/zfs/zfs.c
|
||||
@@ -141,7 +141,10 @@ ZAP_LEAF_NUMCHUNKS (int bs)
|
||||
static inline zap_leaf_chunk_t *
|
||||
ZAP_LEAF_CHUNK (zap_leaf_phys_t *l, int bs, int idx)
|
||||
{
|
||||
- return &((zap_leaf_chunk_t *) (l->l_entries
|
||||
+ grub_properly_aligned_t *l_entries;
|
||||
+
|
||||
+ l_entries = (grub_properly_aligned_t *) ALIGN_UP((grub_addr_t)l->l_hash, sizeof (grub_properly_aligned_t));
|
||||
+ return &((zap_leaf_chunk_t *) (l_entries
|
||||
+ (ZAP_LEAF_HASH_NUMENTRIES(bs) * 2)
|
||||
/ sizeof (grub_properly_aligned_t)))[idx];
|
||||
}
|
||||
diff --git a/include/grub/zfs/zap_leaf.h b/include/grub/zfs/zap_leaf.h
|
||||
index 95c67dcba..11447c166 100644
|
||||
--- a/include/grub/zfs/zap_leaf.h
|
||||
+++ b/include/grub/zfs/zap_leaf.h
|
||||
@@ -70,7 +70,6 @@ typedef struct zap_leaf_phys {
|
||||
*/
|
||||
|
||||
grub_uint16_t l_hash[0];
|
||||
- grub_properly_aligned_t l_entries[0];
|
||||
} zap_leaf_phys_t;
|
||||
|
||||
typedef union zap_leaf_chunk {
|
||||
--
|
||||
2.16.4
|
||||
|
@ -1,3 +1,10 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Mar 24 08:17:33 UTC 2020 - Michael Chang <mchang@suse.com>
|
||||
|
||||
- Fix GCC 10 build fail (bsc#1158189)
|
||||
* 0001-mdraid1x_linux-Fix-gcc10-error-Werror-array-bounds.patch
|
||||
* 0002-zfs-Fix-gcc10-error-Werror-zero-length-bounds.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Mar 20 10:36:54 UTC 2020 - Michael Chang <mchang@suse.com>
|
||||
|
||||
|
@ -291,6 +291,9 @@ Patch511: grub2-gfxmenu-support-scrolling-menu-entry-s-text.patch
|
||||
Patch601: risc-v-fix-computation-of-pc-relative-relocation-offset.patch
|
||||
Patch602: risc-v-add-clzdi2-symbol.patch
|
||||
Patch603: grub-install-define-default-platform-for-risc-v.patch
|
||||
# Fix gcc-10 build fail
|
||||
Patch610: 0001-mdraid1x_linux-Fix-gcc10-error-Werror-array-bounds.patch
|
||||
Patch611: 0002-zfs-Fix-gcc10-error-Werror-zero-length-bounds.patch
|
||||
# bsc#1166409 - Grub netbooting does not search for grub.cfg files with mac
|
||||
# address or ip address in filename
|
||||
Patch700: 0001-normal-Move-common-datetime-functions-out-of-the-nor.patch
|
||||
@ -594,6 +597,8 @@ swap partition while in resuming
|
||||
%patch601 -p1
|
||||
%patch602 -p1
|
||||
%patch603 -p1
|
||||
%patch610 -p1
|
||||
%patch611 -p1
|
||||
%patch700 -p1
|
||||
%patch701 -p1
|
||||
%patch702 -p1
|
||||
|
Loading…
Reference in New Issue
Block a user