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

[xen master] x86/pv: Fix build with Clang and CONFIG_PERF_COUNTERS



commit 0009feff8b54b55b4dfdea0c26b2c6ba9ecdf2ba
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Thu Jan 2 19:46:19 2025 +0000
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Mon Jan 6 12:26:42 2025 +0000

    x86/pv: Fix build with Clang and CONFIG_PERF_COUNTERS
    
    Clang, of at least verion 17 complains:
    
      arch/x86/pv/hypercall.c:30:10: error: variable 'eax' is used uninitialized
      whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
         30 |     if ( !compat )
            |          ^~~~~~~
      arch/x86/pv/hypercall.c:87:29: note: uninitialized use occurs here
         87 |     perfc_incra(hypercalls, eax);
            |                             ^~~
    
    This function is forced always_inline to cause compat to be
    constant-propagated through, but that is only a heuristic to try and get the
    compiler to do what we want, not a gurantee that it does.
    
    Clang doesn't appear to be able to see that the only case where compat is
    true (and therefore the if() is false) is when there's an else clause on the
    end which sets eax too.
    
    Initialise eax to -1, which ought to be optimised out, but if for whatever
    reason it happens not to be, then perfc_incra() will fail it's bounds check
    and do nothing.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 xen/arch/x86/pv/hypercall.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/arch/x86/pv/hypercall.c b/xen/arch/x86/pv/hypercall.c
index 2febade44b..17581d232e 100644
--- a/xen/arch/x86/pv/hypercall.c
+++ b/xen/arch/x86/pv/hypercall.c
@@ -21,7 +21,7 @@ static void always_inline
 _pv_hypercall(struct cpu_user_regs *regs, bool compat)
 {
     struct vcpu *curr = current;
-    unsigned long eax;
+    unsigned long eax = -1; /* Clang -Wsometimes-uninitialized */
 
     ASSERT(guest_kernel_mode(curr, regs));
 
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.