• Nathan Chancellor's avatar
    x86/coco: Define cc_vendor without CONFIG_ARCH_HAS_CC_PLATFORM · e4596477
    Nathan Chancellor authored
    After commit a9ef2774 ("x86/kvm: Fix SEV check in
    sev_map_percpu_data()"), there is a build error when building
    x86_64_defconfig with GCOV using LLVM:
    
      ld.lld: error: undefined symbol: cc_vendor
      >>> referenced by kvm.c
      >>>               arch/x86/kernel/kvm.o:(kvm_smp_prepare_boot_cpu) in archive vmlinux.a
    
    which corresponds to
    
      if (cc_vendor != CC_VENDOR_AMD ||
          !cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
                return;
    
    Without GCOV, clang is able to eliminate the use of cc_vendor because
    cc_platform_has() evaluates to false when CONFIG_ARCH_HAS_CC_PLATFORM is
    not set, meaning that if statement will be true no matter what value
    cc_vendor has.
    
    With GCOV, the instrumentation keeps the use of cc_vendor around for
    code coverage purposes but cc_vendor is only declared, not defined,
    without CONFIG_ARCH_HAS_CC_PLATFORM, leading to the build error above.
    
    Provide a macro definition of cc_vendor when CONFIG_ARCH_HAS_CC_PLATFORM
    is not set with a value of CC_VENDOR_NONE, so that the first condition
    can always be evaluated/eliminated at compile time, avoiding the build
    error altogether. This is very similar to the situation prior to
    commit da86eb96 ("x86/coco: Get rid of accessor functions").
    Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
    Acked-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Message-Id: <20240202-provide-cc_vendor-without-arch_has_cc_platform-v1-1-09ad5f2a3099@kernel.org>
    Fixes: a9ef2774 ("x86/kvm: Fix SEV check in sev_map_percpu_data()", 2024-01-31)
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e4596477
coco.h 512 Bytes