Message ID | 20230919083827.8423-1-rpalethorpe@suse.com |
---|---|
State | Accepted |
Headers | show |
Series | kvm: Fix Nix build failure by moving -fno-stack-protector to CFLAGS | expand |
Hi, pvorel should have a look whether it doesn't break the other systems where -fno-stack-protector is needed, but otherwise: Reviewed-by: Martin Doucha <mdoucha@suse.cz> On 19. 09. 23 10:38, Richard Palethorpe wrote: > Nix (and by extension NixOS) uses a binutils wrapper of some sort to > allow switching between toolchains. This seems to be causing a problem > for the KVM tests although it may not be unique to Nix. > > gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -DCOMPILE_PAYLOAD -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx\ > -mno-sse -fno-pie -c -o lib_guest.o lib_guest.c > as -c -o bootstrap_x86_64.o bootstrap_x86_64.S > gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -DCOMPILE_PAYLOAD -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx\ > -mno-sse -fno-pie -c -o lib_x86.o lib_x86.c > gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -I../../../include -I../../../include -I../../../include/old/ -DCOMPILE_PAYLOAD -ff\ > reestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx -mno-sse -fno-pie -nostdlib -Wl,--build-id=none -fno-stack-protector -z noexe\ > cstack -no-pie -Wl,-T/home/rich/kernel/ltp/testcases/kernel/kvm/linker/x86_64.lds -o kvm_pagefault01-payload.elf kvm_pagefault01.c lib_guest\ > .o bootstrap_x86_64.o lib_x86.o > /nix/store/inq79dwl8sz1ygmfbgsmg77i5cwmdjpz-binutils-2.40/bin/ld: lib_x86.o: in function `kvm_init_guest_vmcb': > lib_x86.c:(.text+0x7b3): undefined reference to `__stack_chk_fail' > collect2: error: ld returned 1 exit status > make: *** [Makefile:58: kvm_pagefault01-payload.o] Error 1 > > __stack_chk_fail is added to lib_x86.o which means that > -fstack-protector somehow gets added to the compilation of lib_x86.o. > > Swapping -fno-stack-protector from the LD flags to the C flags ensures > it is disabled when compiling lib_x86.o. > > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> > --- > testcases/kernel/kvm/Makefile | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/testcases/kernel/kvm/Makefile b/testcases/kernel/kvm/Makefile > index d9eb10728..ce4a5ede2 100644 > --- a/testcases/kernel/kvm/Makefile > +++ b/testcases/kernel/kvm/Makefile > @@ -8,8 +8,8 @@ include $(top_srcdir)/include/mk/testcases.mk > ASFLAGS = > CPPFLAGS += -I$(abs_srcdir)/include > GUEST_CPPFLAGS = $(CPPFLAGS) -DCOMPILE_PAYLOAD > -GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx -mno-sse > -GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -fno-stack-protector -z noexecstack > +GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -fno-stack-protector -mno-mmx -mno-sse > +GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -z noexecstack > GUEST_LDLIBS = > KVM_LD ?= $(LD) >
Hello, Martin Doucha <mdoucha@suse.cz> writes: > Hi, > pvorel should have a look whether it doesn't break the other systems > where -fno-stack-protector is needed, but otherwise: > > Reviewed-by: Martin Doucha <mdoucha@suse.cz> Compilation appears to be fine: https://github.com/richiejp/ltp/actions/runs/6232857602/job/16916865952 The tests just TCONF on my hardware, but I guess the risk of breaking the test at runtime is low?
Hi Richie, > Hello, > Martin Doucha <mdoucha@suse.cz> writes: > > Hi, > > pvorel should have a look whether it doesn't break the other systems > > where -fno-stack-protector is needed, but otherwise: > > Reviewed-by: Martin Doucha <mdoucha@suse.cz> > Compilation appears to be fine: > https://github.com/richiejp/ltp/actions/runs/6232857602/job/16916865952 > The tests just TCONF on my hardware, but I guess the risk of breaking > the test at runtime is low? I'll test tonight Buildroot toolchains, which usually find errors which aren't spot by our github CI. Kind regards, Petr
Hi all, [I Cc Fabrice and Buildroot ML] On Tue, 19 Sept 2023 at 14:51, Martin Doucha <mdoucha@suse.cz> wrote: > > Hi, > pvorel should have a look whether it doesn't break the other systems > where -fno-stack-protector is needed, but otherwise: Yesterday night I tested the current LTP master with ./utils/test-pkg. Some Bootlin toolchains keep failing (bootlin-x86-64-musl, bootlin-x86-64-glibc): CC testcases/kernel/kvm/lib_x86.o gbr-test-pkg/bootlin-x86-64-musl/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/11.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: lib_x86.o: in function `kvm_init_guest_vmcb': lib_x86.c:(.text+0x7c8): undefined reference to `__stack_chk_fail' collect2: error: ld returned 1 exit status Problems are only on x86_64, other archs (aarch64, riscv64, mipsel, amv7r) are OK. NOTE: In Buildroot LTP is currently disabled when musl is used due 5.11 headers requirement for musl toolchain [1], but I temporarily remove this requirement to get more testing. That's why there are also musl results. It looks like this patch actually fixes it, thus: Acked-by: Petr Vorel <pvorel@suse.cz> There are even more kvm test related results [2], but I suspect they are more related to the Buildroot toolchain than LTP itself: CC testcases/kernel/kvm/lib_guest.o bootstrap_x86_64.S: Assembler messages: bootstrap_x86_64.S:16: Error: unknown pseudo-op: `.code16' bootstrap_x86_64.S:19: Error: unknown mnemonic `cli' -- `cli' bootstrap_x86_64.S:21: Error: unknown mnemonic `lgdt' -- `lgdt kvm_gdt32_desc' bootstrap_x86_64.S:23: Error: operand 1 must be an integer register -- `mov $0x11,%eax' bootstrap_x86_64.S:24: Error: operand 1 must be an integer register -- `mov %eax,%cr0' bootstrap_x86_64.S:26: Error: unknown mnemonic `jmp' -- `jmp $3*8,$protected_mode_entry' bootstrap_x86_64.S:28: Error: unknown pseudo-op: `.code32' Kind regards, Petr [1] https://git.busybox.net/buildroot/commit/?id=5e1c238b7202c3b04d9eab94e429c5580c77444b [2] http://autobuild.buildroot.net/results/6fe953a989a83da67e7ec228ab1668998928ad11/build-end.log > > Reviewed-by: Martin Doucha <mdoucha@suse.cz> > > On 19. 09. 23 10:38, Richard Palethorpe wrote: > > Nix (and by extension NixOS) uses a binutils wrapper of some sort to > > allow switching between toolchains. This seems to be causing a problem > > for the KVM tests although it may not be unique to Nix. > > > > gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -DCOMPILE_PAYLOAD -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx\ > > -mno-sse -fno-pie -c -o lib_guest.o lib_guest.c > > as -c -o bootstrap_x86_64.o bootstrap_x86_64.S > > gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -DCOMPILE_PAYLOAD -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx\ > > -mno-sse -fno-pie -c -o lib_x86.o lib_x86.c > > gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -I../../../include -I../../../include -I../../../include/old/ -DCOMPILE_PAYLOAD -ff\ > > reestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx -mno-sse -fno-pie -nostdlib -Wl,--build-id=none -fno-stack-protector -z noexe\ > > cstack -no-pie -Wl,-T/home/rich/kernel/ltp/testcases/kernel/kvm/linker/x86_64.lds -o kvm_pagefault01-payload.elf kvm_pagefault01.c lib_guest\ > > .o bootstrap_x86_64.o lib_x86.o > > /nix/store/inq79dwl8sz1ygmfbgsmg77i5cwmdjpz-binutils-2.40/bin/ld: lib_x86.o: in function `kvm_init_guest_vmcb': > > lib_x86.c:(.text+0x7b3): undefined reference to `__stack_chk_fail' > > collect2: error: ld returned 1 exit status > > make: *** [Makefile:58: kvm_pagefault01-payload.o] Error 1 > > > > __stack_chk_fail is added to lib_x86.o which means that > > -fstack-protector somehow gets added to the compilation of lib_x86.o. > > > > Swapping -fno-stack-protector from the LD flags to the C flags ensures > > it is disabled when compiling lib_x86.o. > > > > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> > > --- > > testcases/kernel/kvm/Makefile | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/testcases/kernel/kvm/Makefile b/testcases/kernel/kvm/Makefile > > index d9eb10728..ce4a5ede2 100644 > > --- a/testcases/kernel/kvm/Makefile > > +++ b/testcases/kernel/kvm/Makefile > > @@ -8,8 +8,8 @@ include $(top_srcdir)/include/mk/testcases.mk > > ASFLAGS = > > CPPFLAGS += -I$(abs_srcdir)/include > > GUEST_CPPFLAGS = $(CPPFLAGS) -DCOMPILE_PAYLOAD > > -GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx -mno-sse > > -GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -fno-stack-protector -z noexecstack > > +GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -fno-stack-protector -mno-mmx -mno-sse > > +GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -z noexecstack > > GUEST_LDLIBS = > > KVM_LD ?= $(LD) > > > > -- > Martin Doucha mdoucha@suse.cz > SW Quality Engineer > SUSE LINUX, s.r.o. > CORSO IIa > Krizikova 148/34 > 186 00 Prague 8 > Czech Republic > > > -- > Mailing list info: https://lists.linux.it/listinfo/ltp
Hello, Petr Vorel <petr.vorel@gmail.com> writes: > Hi all, > > [I Cc Fabrice and Buildroot ML] > > On Tue, 19 Sept 2023 at 14:51, Martin Doucha <mdoucha@suse.cz> wrote: >> >> Hi, >> pvorel should have a look whether it doesn't break the other systems >> where -fno-stack-protector is needed, but otherwise: > > Yesterday night I tested the current LTP master with ./utils/test-pkg. Some > Bootlin toolchains keep failing (bootlin-x86-64-musl, bootlin-x86-64-glibc): > > CC testcases/kernel/kvm/lib_x86.o > gbr-test-pkg/bootlin-x86-64-musl/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/11.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: > lib_x86.o: in function `kvm_init_guest_vmcb': > lib_x86.c:(.text+0x7c8): undefined reference to `__stack_chk_fail' > collect2: error: ld returned 1 exit status > > Problems are only on x86_64, other archs (aarch64, riscv64, mipsel, amv7r) > are OK. I think only x86_64 is supported. > > NOTE: In Buildroot LTP is currently disabled when musl is used due 5.11 > headers requirement for musl toolchain [1], but I temporarily remove this > requirement to get more testing. That's why there are also musl results. > > It looks like this patch actually fixes it, thus: > Acked-by: Petr Vorel <pvorel@suse.cz> Right, it's not just Nix then. I will merge it. > > There are even more kvm test related results [2], but I suspect they are more > related to the Buildroot toolchain than LTP itself: > > CC testcases/kernel/kvm/lib_guest.o > bootstrap_x86_64.S: Assembler messages: > bootstrap_x86_64.S:16: Error: unknown pseudo-op: `.code16' > bootstrap_x86_64.S:19: Error: unknown mnemonic `cli' -- `cli' > bootstrap_x86_64.S:21: Error: unknown mnemonic `lgdt' -- `lgdt kvm_gdt32_desc' > bootstrap_x86_64.S:23: Error: operand 1 must be an integer register -- > `mov $0x11,%eax' > bootstrap_x86_64.S:24: Error: operand 1 must be an integer register -- > `mov %eax,%cr0' > bootstrap_x86_64.S:26: Error: unknown mnemonic `jmp' -- `jmp > $3*8,$protected_mode_entry' > bootstrap_x86_64.S:28: Error: unknown pseudo-op: `.code32' For me I would at the least we need V=1 enabled or the names and versions of the tools being used to guess what is wrong here. mov $0x11,%eax looks like a really simple op to put 11 in EAX using AT&T/GAS syntax. If that goes wrong then possibly the wrong syntax is expected by the assembler or else a previous line is confusing it.
> Hello, > Petr Vorel <petr.vorel@gmail.com> writes: > > Hi all, > > [I Cc Fabrice and Buildroot ML] > > On Tue, 19 Sept 2023 at 14:51, Martin Doucha <mdoucha@suse.cz> wrote: > >> Hi, > >> pvorel should have a look whether it doesn't break the other systems > >> where -fno-stack-protector is needed, but otherwise: > > Yesterday night I tested the current LTP master with ./utils/test-pkg. Some > > Bootlin toolchains keep failing (bootlin-x86-64-musl, bootlin-x86-64-glibc): > > CC testcases/kernel/kvm/lib_x86.o > > gbr-test-pkg/bootlin-x86-64-musl/host/opt/ext-toolchain/bin/../lib/gcc/x86_64-buildroot-linux-musl/11.3.0/../../../../x86_64-buildroot-linux-musl/bin/ld: > > lib_x86.o: in function `kvm_init_guest_vmcb': > > lib_x86.c:(.text+0x7c8): undefined reference to `__stack_chk_fail' > > collect2: error: ld returned 1 exit status > > Problems are only on x86_64, other archs (aarch64, riscv64, mipsel, amv7r) > > are OK. > I think only x86_64 is supported. Yes (+ i386). Thanks, I forgot on it. > > NOTE: In Buildroot LTP is currently disabled when musl is used due 5.11 > > headers requirement for musl toolchain [1], but I temporarily remove this > > requirement to get more testing. That's why there are also musl results. > > It looks like this patch actually fixes it, thus: > > Acked-by: Petr Vorel <pvorel@suse.cz> > Right, it's not just Nix then. I will merge it. +1 > > There are even more kvm test related results [2], but I suspect they are more > > related to the Buildroot toolchain than LTP itself: > > CC testcases/kernel/kvm/lib_guest.o > > bootstrap_x86_64.S: Assembler messages: > > bootstrap_x86_64.S:16: Error: unknown pseudo-op: `.code16' > > bootstrap_x86_64.S:19: Error: unknown mnemonic `cli' -- `cli' > > bootstrap_x86_64.S:21: Error: unknown mnemonic `lgdt' -- `lgdt kvm_gdt32_desc' > > bootstrap_x86_64.S:23: Error: operand 1 must be an integer register -- > > `mov $0x11,%eax' > > bootstrap_x86_64.S:24: Error: operand 1 must be an integer register -- > > `mov %eax,%cr0' > > bootstrap_x86_64.S:26: Error: unknown mnemonic `jmp' -- `jmp > > $3*8,$protected_mode_entry' > > bootstrap_x86_64.S:28: Error: unknown pseudo-op: `.code32' > For me I would at the least we need V=1 enabled or the names and > versions of the tools being used to guess what is wrong here. I'm not sure if I find some spare time in my after-work time. If yes, I'll post logs. Kind regards, Petr > mov $0x11,%eax looks like a really simple op to put 11 in EAX using > AT&T/GAS syntax. If that goes wrong then possibly the wrong syntax is > expected by the assembler or else a previous line is confusing it.
diff --git a/testcases/kernel/kvm/Makefile b/testcases/kernel/kvm/Makefile index d9eb10728..ce4a5ede2 100644 --- a/testcases/kernel/kvm/Makefile +++ b/testcases/kernel/kvm/Makefile @@ -8,8 +8,8 @@ include $(top_srcdir)/include/mk/testcases.mk ASFLAGS = CPPFLAGS += -I$(abs_srcdir)/include GUEST_CPPFLAGS = $(CPPFLAGS) -DCOMPILE_PAYLOAD -GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx -mno-sse -GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -fno-stack-protector -z noexecstack +GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -fno-stack-protector -mno-mmx -mno-sse +GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -z noexecstack GUEST_LDLIBS = KVM_LD ?= $(LD)
Nix (and by extension NixOS) uses a binutils wrapper of some sort to allow switching between toolchains. This seems to be causing a problem for the KVM tests although it may not be unique to Nix. gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -DCOMPILE_PAYLOAD -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx\ -mno-sse -fno-pie -c -o lib_guest.o lib_guest.c as -c -o bootstrap_x86_64.o bootstrap_x86_64.S gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -DCOMPILE_PAYLOAD -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx\ -mno-sse -fno-pie -c -o lib_x86.o lib_x86.c gcc -I/home/rich/kernel/ltp/testcases/kernel/kvm/include -I../../../include -I../../../include -I../../../include/old/ -DCOMPILE_PAYLOAD -ff\ reestanding -O2 -Wall -fno-asynchronous-unwind-tables -mno-mmx -mno-sse -fno-pie -nostdlib -Wl,--build-id=none -fno-stack-protector -z noexe\ cstack -no-pie -Wl,-T/home/rich/kernel/ltp/testcases/kernel/kvm/linker/x86_64.lds -o kvm_pagefault01-payload.elf kvm_pagefault01.c lib_guest\ .o bootstrap_x86_64.o lib_x86.o /nix/store/inq79dwl8sz1ygmfbgsmg77i5cwmdjpz-binutils-2.40/bin/ld: lib_x86.o: in function `kvm_init_guest_vmcb': lib_x86.c:(.text+0x7b3): undefined reference to `__stack_chk_fail' collect2: error: ld returned 1 exit status make: *** [Makefile:58: kvm_pagefault01-payload.o] Error 1 __stack_chk_fail is added to lib_x86.o which means that -fstack-protector somehow gets added to the compilation of lib_x86.o. Swapping -fno-stack-protector from the LD flags to the C flags ensures it is disabled when compiling lib_x86.o. Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> --- testcases/kernel/kvm/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)