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>
|
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
|
Patch601: risc-v-fix-computation-of-pc-relative-relocation-offset.patch
|
||||||
Patch602: risc-v-add-clzdi2-symbol.patch
|
Patch602: risc-v-add-clzdi2-symbol.patch
|
||||||
Patch603: grub-install-define-default-platform-for-risc-v.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
|
# bsc#1166409 - Grub netbooting does not search for grub.cfg files with mac
|
||||||
# address or ip address in filename
|
# address or ip address in filename
|
||||||
Patch700: 0001-normal-Move-common-datetime-functions-out-of-the-nor.patch
|
Patch700: 0001-normal-Move-common-datetime-functions-out-of-the-nor.patch
|
||||||
@ -594,6 +597,8 @@ swap partition while in resuming
|
|||||||
%patch601 -p1
|
%patch601 -p1
|
||||||
%patch602 -p1
|
%patch602 -p1
|
||||||
%patch603 -p1
|
%patch603 -p1
|
||||||
|
%patch610 -p1
|
||||||
|
%patch611 -p1
|
||||||
%patch700 -p1
|
%patch700 -p1
|
||||||
%patch701 -p1
|
%patch701 -p1
|
||||||
%patch702 -p1
|
%patch702 -p1
|
||||||
|
Loading…
Reference in New Issue
Block a user