All of lore.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests BUG] x86: debug.c compilation error with --target-efi
@ 2022-02-10 11:57 Alexandru Elisei
  2022-02-10 17:13 ` Sean Christopherson
  0 siblings, 1 reply; 3+ messages in thread
From: Alexandru Elisei @ 2022-02-10 11:57 UTC (permalink / raw)
  To: seanjc, pbonzini, thuth, drjones, kvm

When compiling kvm-unit-tests configured with --target-efi I get the following
error:

[..]
gcc -mno-red-zone -mno-sse -mno-sse2  -fcf-protection=full -m64 -O1 -g -MMD -MF x86/.debug.d -fno-strict-aliasing -fno-common -Wall -Wwrite-strings -Wempty-body -Wuninitialized -Wignored-qualifiers -Werror -Wno-missing-braces  -fno-omit-frame-pointer  -fno-stack-protector    -Wno-frame-address  -DTARGET_EFI -maccumulate-outgoing-args -fshort-wchar -fPIC  -Wclobbered  -Wunused-but-set-parameter  -Wmissing-parameter-type  -Wold-style-declaration -Woverride-init -Wmissing-prototypes -Wstrict-prototypes -std=gnu99 -ffreestanding -I /path/to/kvm-unit-tests/lib -I /path/to/kvm-unit-tests/lib/x86 -I lib   -c -o x86/debug.o x86/debug.c
ld -T /path/to/kvm-unit-tests/x86/efi/elf_x86_64_efi.lds -Bsymbolic -shared -nostdlib -o x86/debug.so \
	x86/debug.o x86/efi/efistart64.o lib/libcflat.a
ld: x86/debug.o: relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with -fPIC
make: *** [/path/to/kvm-unit-tests/x86/Makefile.common:51: x86/debug.so] Error 1
rm x86/emulator.o x86/tsc.o x86/msr.o x86/tsc_adjust.o x86/idt_test.o x86/sieve.o x86/s3.o x86/asyncpf.o x86/rmap_chain.o x86/init.o x86/xsave.o x86/debug.o x86/pmu.o x86/kvmclock_test.o x86/pcid.o x86/umip.o x86/setjmp.o x86/eventinj.o x86/hyperv_connections.o x86/apic.o x86/dummy.o x86/hypercall.o x86/vmexit.o x86/tsx-ctrl.o x86/hyperv_synic.o x86/smap.o x86/hyperv_stimer.o x86/efi/efistart64.o x86/smptest.o

The error does not happen if the test is not configured with --target-efi.

I bisected the error to commit 9734b4236294 ("x86/debug: Add framework for
single-step #DB tests"). Changing the Makefile to build x86/debug.o when
!TARGET_EFI has fixed the issue for me (it might be that the inline assembly
added by the commit contains absolute addresses, but my knowledge of x86
assembly is sketchy at best):

diff --git a/x86/Makefile.x86_64 b/x86/Makefile.x86_64
index a3cb75ae5868..7532de46e0fd 100644
--- a/x86/Makefile.x86_64
+++ b/x86/Makefile.x86_64
@@ -21,9 +21,9 @@ cflatobjs += lib/x86/usermode.o
 tests = $(TEST_DIR)/apic.$(exe) \
          $(TEST_DIR)/emulator.$(exe) $(TEST_DIR)/idt_test.$(exe) \
          $(TEST_DIR)/xsave.$(exe) $(TEST_DIR)/rmap_chain.$(exe) \
-         $(TEST_DIR)/pcid.$(exe) $(TEST_DIR)/debug.$(exe) \
-         $(TEST_DIR)/ioapic.$(exe) $(TEST_DIR)/memory.$(exe) \
-         $(TEST_DIR)/pku.$(exe) $(TEST_DIR)/hyperv_clock.$(exe)
+         $(TEST_DIR)/pcid.$(exe) $(TEST_DIR)/ioapic.$(exe) \
+         $(TEST_DIR)/memory.$(exe) $(TEST_DIR)/pku.$(exe) \
+         $(TEST_DIR)/hyperv_clock.$(exe)
 tests += $(TEST_DIR)/syscall.$(exe)
 tests += $(TEST_DIR)/tscdeadline_latency.$(exe)
 tests += $(TEST_DIR)/intel-iommu.$(exe)
@@ -43,6 +43,7 @@ ifneq ($(TARGET_EFI),y)
 tests += $(TEST_DIR)/access_test.$(exe)
 tests += $(TEST_DIR)/svm.$(exe)
 tests += $(TEST_DIR)/vmx.$(exe)
+tests += $(TEST_DIR)/debug.$(exe)
 endif

 ifneq ($(fcf_protection_full),)

For reference:

$ gcc --version
gcc (GCC) 11.1.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cat config.mak
SRCDIR=/path/to/kvm-unit-tests
PREFIX=/usr/local
HOST=x86_64
ARCH=x86_64
ARCH_NAME=x86_64
PROCESSOR=x86_64
CC=gcc
CFLAGS=
LD=ld
OBJCOPY=objcopy
OBJDUMP=objdump
AR=ar
ADDR2LINE=addr2line
TEST_DIR=x86
TEST_SUBDIR=x86/efi
FIRMWARE=
ENDIAN=
PRETTY_PRINT_STACKS=yes
ENVIRON_DEFAULT=yes
ERRATATXT=/path/to/kvm-unit-tests/errata.txt
U32_LONG_FMT=
WA_DIVIDE=
GENPROTIMG=genprotimg
HOST_KEY_DOCUMENT=
TARGET_EFI=y
GEN_SE_HEADER=

Thanks,
Alex

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [kvm-unit-tests BUG] x86: debug.c compilation error with --target-efi
  2022-02-10 11:57 [kvm-unit-tests BUG] x86: debug.c compilation error with --target-efi Alexandru Elisei
@ 2022-02-10 17:13 ` Sean Christopherson
  2022-02-14 11:16   ` Alexandru Elisei
  0 siblings, 1 reply; 3+ messages in thread
From: Sean Christopherson @ 2022-02-10 17:13 UTC (permalink / raw)
  To: Alexandru Elisei; +Cc: pbonzini, thuth, drjones, kvm

On Thu, Feb 10, 2022, Alexandru Elisei wrote:
> When compiling kvm-unit-tests configured with --target-efi I get the following
> error:
> 
> [..]
> gcc -mno-red-zone -mno-sse -mno-sse2  -fcf-protection=full -m64 -O1 -g -MMD -MF x86/.debug.d -fno-strict-aliasing -fno-common -Wall -Wwrite-strings -Wempty-body -Wuninitialized -Wignored-qualifiers -Werror -Wno-missing-braces  -fno-omit-frame-pointer  -fno-stack-protector    -Wno-frame-address  -DTARGET_EFI -maccumulate-outgoing-args -fshort-wchar -fPIC  -Wclobbered  -Wunused-but-set-parameter  -Wmissing-parameter-type  -Wold-style-declaration -Woverride-init -Wmissing-prototypes -Wstrict-prototypes -std=gnu99 -ffreestanding -I /path/to/kvm-unit-tests/lib -I /path/to/kvm-unit-tests/lib/x86 -I lib   -c -o x86/debug.o x86/debug.c
> ld -T /path/to/kvm-unit-tests/x86/efi/elf_x86_64_efi.lds -Bsymbolic -shared -nostdlib -o x86/debug.so \
> 	x86/debug.o x86/efi/efistart64.o lib/libcflat.a
> ld: x86/debug.o: relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with -fPIC
> make: *** [/path/to/kvm-unit-tests/x86/Makefile.common:51: x86/debug.so] Error 1
> rm x86/emulator.o x86/tsc.o x86/msr.o x86/tsc_adjust.o x86/idt_test.o x86/sieve.o x86/s3.o x86/asyncpf.o x86/rmap_chain.o x86/init.o x86/xsave.o x86/debug.o x86/pmu.o x86/kvmclock_test.o x86/pcid.o x86/umip.o x86/setjmp.o x86/eventinj.o x86/hyperv_connections.o x86/apic.o x86/dummy.o x86/hypercall.o x86/vmexit.o x86/tsx-ctrl.o x86/hyperv_synic.o x86/smap.o x86/hyperv_stimer.o x86/efi/efistart64.o x86/smptest.o
> 
> The error does not happen if the test is not configured with --target-efi.
> 
> I bisected the error to commit 9734b4236294 ("x86/debug: Add framework for
> single-step #DB tests"). Changing the Makefile to build x86/debug.o when
> !TARGET_EFI has fixed the issue for me (it might be that the inline assembly
> added by the commit contains absolute addresses, but my knowledge of x86
> assembly is sketchy at best):

Fix posted: https://lore.kernel.org/all/20220210092044.18808-1-zhenzhong.duan@intel.com

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [kvm-unit-tests BUG] x86: debug.c compilation error with --target-efi
  2022-02-10 17:13 ` Sean Christopherson
@ 2022-02-14 11:16   ` Alexandru Elisei
  0 siblings, 0 replies; 3+ messages in thread
From: Alexandru Elisei @ 2022-02-14 11:16 UTC (permalink / raw)
  To: Sean Christopherson; +Cc: pbonzini, thuth, drjones, kvm

Hi,

On Thu, Feb 10, 2022 at 05:13:43PM +0000, Sean Christopherson wrote:
> On Thu, Feb 10, 2022, Alexandru Elisei wrote:
> > When compiling kvm-unit-tests configured with --target-efi I get the following
> > error:
> > 
> > [..]
> > gcc -mno-red-zone -mno-sse -mno-sse2  -fcf-protection=full -m64 -O1 -g -MMD -MF x86/.debug.d -fno-strict-aliasing -fno-common -Wall -Wwrite-strings -Wempty-body -Wuninitialized -Wignored-qualifiers -Werror -Wno-missing-braces  -fno-omit-frame-pointer  -fno-stack-protector    -Wno-frame-address  -DTARGET_EFI -maccumulate-outgoing-args -fshort-wchar -fPIC  -Wclobbered  -Wunused-but-set-parameter  -Wmissing-parameter-type  -Wold-style-declaration -Woverride-init -Wmissing-prototypes -Wstrict-prototypes -std=gnu99 -ffreestanding -I /path/to/kvm-unit-tests/lib -I /path/to/kvm-unit-tests/lib/x86 -I lib   -c -o x86/debug.o x86/debug.c
> > ld -T /path/to/kvm-unit-tests/x86/efi/elf_x86_64_efi.lds -Bsymbolic -shared -nostdlib -o x86/debug.so \
> > 	x86/debug.o x86/efi/efistart64.o lib/libcflat.a
> > ld: x86/debug.o: relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with -fPIC
> > make: *** [/path/to/kvm-unit-tests/x86/Makefile.common:51: x86/debug.so] Error 1
> > rm x86/emulator.o x86/tsc.o x86/msr.o x86/tsc_adjust.o x86/idt_test.o x86/sieve.o x86/s3.o x86/asyncpf.o x86/rmap_chain.o x86/init.o x86/xsave.o x86/debug.o x86/pmu.o x86/kvmclock_test.o x86/pcid.o x86/umip.o x86/setjmp.o x86/eventinj.o x86/hyperv_connections.o x86/apic.o x86/dummy.o x86/hypercall.o x86/vmexit.o x86/tsx-ctrl.o x86/hyperv_synic.o x86/smap.o x86/hyperv_stimer.o x86/efi/efistart64.o x86/smptest.o
> > 
> > The error does not happen if the test is not configured with --target-efi.
> > 
> > I bisected the error to commit 9734b4236294 ("x86/debug: Add framework for
> > single-step #DB tests"). Changing the Makefile to build x86/debug.o when
> > !TARGET_EFI has fixed the issue for me (it might be that the inline assembly
> > added by the commit contains absolute addresses, but my knowledge of x86
> > assembly is sketchy at best):
> 
> Fix posted: https://lore.kernel.org/all/20220210092044.18808-1-zhenzhong.duan@intel.com

Thanks for the heads-up, I missed it because it didn't have kvm-unit-tests
in the subject line.

Thanks,
Alex

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-02-14 11:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-10 11:57 [kvm-unit-tests BUG] x86: debug.c compilation error with --target-efi Alexandru Elisei
2022-02-10 17:13 ` Sean Christopherson
2022-02-14 11:16   ` Alexandru Elisei

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.