grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 3/6] commands/i386/pc/sendkey: Fix "writing 1 byte into a reg


From: Glenn Washburn
Subject: Re: [PATCH 3/6] commands/i386/pc/sendkey: Fix "writing 1 byte into a region of size 0" build error
Date: Fri, 11 Mar 2022 11:09:16 -0600

On Fri, 11 Mar 2022 00:35:57 +0100
Daniel Kiper <daniel.kiper@oracle.com> wrote:

> Latest GCC may complain in that way:
> 
>   commands/i386/pc/sendkey.c: In function ‘grub_sendkey_postboot’:
>   commands/i386/pc/sendkey.c:223:21: error: writing 1 byte into a region of 
> size 0 [-Werror=stringop-overflow=]
>     223 |   *((char *) 0x41a) = 0x1e;
>         |   ~~~~~~~~~~~~~~~~~~^~~~~~

I'm curious why I'm not seeing this. It looks like the target was
i386-pc, correct? I'm guessing this is on GCC11. What compiler are you
using? Any extra CFLAGS? Anything else I might need to reproduce?

Glenn

> 
> The volatile keyword addition helps and additionally assures us the
> compiler will not optimize out fixed assignments.
> 
> Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
> ---
>  grub-core/commands/i386/pc/sendkey.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/grub-core/commands/i386/pc/sendkey.c 
> b/grub-core/commands/i386/pc/sendkey.c
> index 26d9acd3d..ab4bca9e9 100644
> --- a/grub-core/commands/i386/pc/sendkey.c
> +++ b/grub-core/commands/i386/pc/sendkey.c
> @@ -220,8 +220,8 @@ grub_sendkey_postboot (void)
>  
>    *flags = oldflags;
>  
> -  *((char *) 0x41a) = 0x1e;
> -  *((char *) 0x41c) = 0x1e;
> +  *((volatile char *) 0x41a) = 0x1e;
> +  *((volatile char *) 0x41c) = 0x1e;
>  
>    return GRUB_ERR_NONE;
>  }
> @@ -236,8 +236,8 @@ grub_sendkey_preboot (int noret __attribute__ ((unused)))
>    oldflags = *flags;
>    
>    /* Set the sendkey.  */
> -  *((char *) 0x41a) = 0x1e;
> -  *((char *) 0x41c) = keylen + 0x1e;
> +  *((volatile char *) 0x41a) = 0x1e;
> +  *((volatile char *) 0x41c) = keylen + 0x1e;
>    grub_memcpy ((char *) 0x41e, sendkey, 0x20);
>  
>    /* Transform "any ctrl" to "right ctrl" flag.  */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]