From: Marc Zyngier <maz@kernel.org>
To: Denis Nikitin <denik@chromium.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Nick Desaulniers <ndesaulniers@google.com>,
linux-kernel@vger.kernel.org, Manoj Gupta <manojgupta@google.com>,
Will Deacon <will@kernel.org>,
kvmarm@lists.cs.columbia.edu,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] KVM: arm64: nvhe: Fix build with profile optimization
Date: Thu, 22 Sep 2022 11:37:55 +0100 [thread overview]
Message-ID: <87h70zk83g.wl-maz@kernel.org> (raw)
In-Reply-To: <20220922053145.944786-1-denik@chromium.org>
On Thu, 22 Sep 2022 06:31:45 +0100,
Denis Nikitin <denik@chromium.org> wrote:
>
> Kernel build with clang and KCFLAGS=-fprofile-sample-use fails with:
>
> error: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.tmp.o: Unexpected SHT_REL
> section ".rel.llvm.call-graph-profile"
>
> Starting from 13.0.0 llvm can generate SHT_REL section, see
> https://reviews.llvm.org/rGca3bdb57fa1ac98b711a735de048c12b5fdd8086.
> gen-hyprel does not support SHT_REL relocation section.
>
> Remove ".llvm.call-graph-profile" SHT_REL relocation from kvm_nvhe
> to fix the build.
>
> Signed-off-by: Denis Nikitin <denik@chromium.org>
> ---
> V1 -> V2: Remove the relocation instead of disabling the profile-use flags.
> ---
> arch/arm64/kvm/hyp/nvhe/Makefile | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
> index b5c5119c7396..49ec950ac57b 100644
> --- a/arch/arm64/kvm/hyp/nvhe/Makefile
> +++ b/arch/arm64/kvm/hyp/nvhe/Makefile
> @@ -78,8 +78,10 @@ $(obj)/kvm_nvhe.o: $(obj)/kvm_nvhe.rel.o FORCE
>
> # The HYPREL command calls `gen-hyprel` to generate an assembly file with
> # a list of relocations targeting hyp code/data.
> +# Starting from 13.0.0 llvm emits SHT_REL section '.llvm.call-graph-profile'
> +# when profile optimization is applied. gen-hyprel does not support SHT_REL.
> quiet_cmd_hyprel = HYPREL $@
> - cmd_hyprel = $(obj)/gen-hyprel $< > $@
> + cmd_hyprel = $(OBJCOPY) -R .llvm.call-graph-profile $<; $(obj)/gen-hyprel $< > $@
I was really hoping that you'd just drop the flags from the CFLAGS
instead of removing the generated section. Something like:
diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
index b5c5119c7396..e5b2d43925b4 100644
--- a/arch/arm64/kvm/hyp/nvhe/Makefile
+++ b/arch/arm64/kvm/hyp/nvhe/Makefile
@@ -88,7 +88,7 @@ quiet_cmd_hypcopy = HYPCOPY $@
# Remove ftrace, Shadow Call Stack, and CFI CFLAGS.
# This is equivalent to the 'notrace', '__noscs', and '__nocfi' annotations.
-KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI), $(KBUILD_CFLAGS))
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI) -fprofile-sample-use, $(KBUILD_CFLAGS))
# KVM nVHE code is run at a different exception code with a different map, so
# compiler instrumentation that inserts callbacks or checks into the code may
However, I even failed to reproduce your problem using LLVM 14 as
packaged by Debian (if that matters, I'm using an arm64 build
machine). I build the kernel with:
$ make LLVM=1 KCFLAGS=-fprofile-sample-use -j8 vmlinux
and the offending object only contains the following sections:
arch/arm64/kvm/hyp/nvhe/kvm_nvhe.tmp.o: file format elf64-littleaarch64
Sections:
Idx Name Size VMA LMA File off Algn
0 .hyp.idmap.text 00000ae4 0000000000000000 0000000000000000 00000800 2**11
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .hyp.text 0000e988 0000000000000000 0000000000000000 00001800 2**11
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
2 .hyp.data..ro_after_init 00000820 0000000000000000 0000000000000000 00010188 2**3
CONTENTS, ALLOC, LOAD, DATA
3 .hyp.rodata 00002e70 0000000000000000 0000000000000000 000109a8 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
4 .hyp.data..percpu 00001ee0 0000000000000000 0000000000000000 00013820 2**4
CONTENTS, ALLOC, LOAD, DATA
5 .hyp.bss 00001158 0000000000000000 0000000000000000 00015700 2**3
ALLOC
6 .comment 0000001f 0000000000000000 0000000000000000 00017830 2**0
CONTENTS, READONLY
7 .llvm_addrsig 000000b8 0000000000000000 0000000000000000 0001784f 2**0
CONTENTS, READONLY, EXCLUDE
8 .altinstructions 00001284 0000000000000000 0000000000000000 00015700 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
9 __jump_table 00000960 0000000000000000 0000000000000000 00016988 2**3
CONTENTS, ALLOC, LOAD, RELOC, DATA
10 __bug_table 0000051c 0000000000000000 0000000000000000 000172e8 2**2
CONTENTS, ALLOC, LOAD, RELOC, DATA
11 __kvm_ex_table 00000028 0000000000000000 0000000000000000 00017808 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
12 .note.GNU-stack 00000000 0000000000000000 0000000000000000 00027370 2**0
CONTENTS, READONLY
So what am I missing to trigger this issue? Does it rely on something
like PGO, which is not upstream yet? A bit of handholding would be
much appreciated.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Denis Nikitin <denik@chromium.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, James Morse <james.morse@arm.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Nick Desaulniers <ndesaulniers@google.com>,
Manoj Gupta <manojgupta@google.com>,
David Brazdil <dbrazdil@google.com>,
linux-arm-kernel@lists.infradead.org,
kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] KVM: arm64: nvhe: Fix build with profile optimization
Date: Thu, 22 Sep 2022 11:37:55 +0100 [thread overview]
Message-ID: <87h70zk83g.wl-maz@kernel.org> (raw)
In-Reply-To: <20220922053145.944786-1-denik@chromium.org>
On Thu, 22 Sep 2022 06:31:45 +0100,
Denis Nikitin <denik@chromium.org> wrote:
>
> Kernel build with clang and KCFLAGS=-fprofile-sample-use fails with:
>
> error: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.tmp.o: Unexpected SHT_REL
> section ".rel.llvm.call-graph-profile"
>
> Starting from 13.0.0 llvm can generate SHT_REL section, see
> https://reviews.llvm.org/rGca3bdb57fa1ac98b711a735de048c12b5fdd8086.
> gen-hyprel does not support SHT_REL relocation section.
>
> Remove ".llvm.call-graph-profile" SHT_REL relocation from kvm_nvhe
> to fix the build.
>
> Signed-off-by: Denis Nikitin <denik@chromium.org>
> ---
> V1 -> V2: Remove the relocation instead of disabling the profile-use flags.
> ---
> arch/arm64/kvm/hyp/nvhe/Makefile | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
> index b5c5119c7396..49ec950ac57b 100644
> --- a/arch/arm64/kvm/hyp/nvhe/Makefile
> +++ b/arch/arm64/kvm/hyp/nvhe/Makefile
> @@ -78,8 +78,10 @@ $(obj)/kvm_nvhe.o: $(obj)/kvm_nvhe.rel.o FORCE
>
> # The HYPREL command calls `gen-hyprel` to generate an assembly file with
> # a list of relocations targeting hyp code/data.
> +# Starting from 13.0.0 llvm emits SHT_REL section '.llvm.call-graph-profile'
> +# when profile optimization is applied. gen-hyprel does not support SHT_REL.
> quiet_cmd_hyprel = HYPREL $@
> - cmd_hyprel = $(obj)/gen-hyprel $< > $@
> + cmd_hyprel = $(OBJCOPY) -R .llvm.call-graph-profile $<; $(obj)/gen-hyprel $< > $@
I was really hoping that you'd just drop the flags from the CFLAGS
instead of removing the generated section. Something like:
diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
index b5c5119c7396..e5b2d43925b4 100644
--- a/arch/arm64/kvm/hyp/nvhe/Makefile
+++ b/arch/arm64/kvm/hyp/nvhe/Makefile
@@ -88,7 +88,7 @@ quiet_cmd_hypcopy = HYPCOPY $@
# Remove ftrace, Shadow Call Stack, and CFI CFLAGS.
# This is equivalent to the 'notrace', '__noscs', and '__nocfi' annotations.
-KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI), $(KBUILD_CFLAGS))
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI) -fprofile-sample-use, $(KBUILD_CFLAGS))
# KVM nVHE code is run at a different exception code with a different map, so
# compiler instrumentation that inserts callbacks or checks into the code may
However, I even failed to reproduce your problem using LLVM 14 as
packaged by Debian (if that matters, I'm using an arm64 build
machine). I build the kernel with:
$ make LLVM=1 KCFLAGS=-fprofile-sample-use -j8 vmlinux
and the offending object only contains the following sections:
arch/arm64/kvm/hyp/nvhe/kvm_nvhe.tmp.o: file format elf64-littleaarch64
Sections:
Idx Name Size VMA LMA File off Algn
0 .hyp.idmap.text 00000ae4 0000000000000000 0000000000000000 00000800 2**11
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .hyp.text 0000e988 0000000000000000 0000000000000000 00001800 2**11
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
2 .hyp.data..ro_after_init 00000820 0000000000000000 0000000000000000 00010188 2**3
CONTENTS, ALLOC, LOAD, DATA
3 .hyp.rodata 00002e70 0000000000000000 0000000000000000 000109a8 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
4 .hyp.data..percpu 00001ee0 0000000000000000 0000000000000000 00013820 2**4
CONTENTS, ALLOC, LOAD, DATA
5 .hyp.bss 00001158 0000000000000000 0000000000000000 00015700 2**3
ALLOC
6 .comment 0000001f 0000000000000000 0000000000000000 00017830 2**0
CONTENTS, READONLY
7 .llvm_addrsig 000000b8 0000000000000000 0000000000000000 0001784f 2**0
CONTENTS, READONLY, EXCLUDE
8 .altinstructions 00001284 0000000000000000 0000000000000000 00015700 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
9 __jump_table 00000960 0000000000000000 0000000000000000 00016988 2**3
CONTENTS, ALLOC, LOAD, RELOC, DATA
10 __bug_table 0000051c 0000000000000000 0000000000000000 000172e8 2**2
CONTENTS, ALLOC, LOAD, RELOC, DATA
11 __kvm_ex_table 00000028 0000000000000000 0000000000000000 00017808 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
12 .note.GNU-stack 00000000 0000000000000000 0000000000000000 00027370 2**0
CONTENTS, READONLY
So what am I missing to trigger this issue? Does it rely on something
like PGO, which is not upstream yet? A bit of handholding would be
much appreciated.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Denis Nikitin <denik@chromium.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, James Morse <james.morse@arm.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Nick Desaulniers <ndesaulniers@google.com>,
Manoj Gupta <manojgupta@google.com>,
David Brazdil <dbrazdil@google.com>,
linux-arm-kernel@lists.infradead.org,
kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] KVM: arm64: nvhe: Fix build with profile optimization
Date: Thu, 22 Sep 2022 11:37:55 +0100 [thread overview]
Message-ID: <87h70zk83g.wl-maz@kernel.org> (raw)
In-Reply-To: <20220922053145.944786-1-denik@chromium.org>
On Thu, 22 Sep 2022 06:31:45 +0100,
Denis Nikitin <denik@chromium.org> wrote:
>
> Kernel build with clang and KCFLAGS=-fprofile-sample-use fails with:
>
> error: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.tmp.o: Unexpected SHT_REL
> section ".rel.llvm.call-graph-profile"
>
> Starting from 13.0.0 llvm can generate SHT_REL section, see
> https://reviews.llvm.org/rGca3bdb57fa1ac98b711a735de048c12b5fdd8086.
> gen-hyprel does not support SHT_REL relocation section.
>
> Remove ".llvm.call-graph-profile" SHT_REL relocation from kvm_nvhe
> to fix the build.
>
> Signed-off-by: Denis Nikitin <denik@chromium.org>
> ---
> V1 -> V2: Remove the relocation instead of disabling the profile-use flags.
> ---
> arch/arm64/kvm/hyp/nvhe/Makefile | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
> index b5c5119c7396..49ec950ac57b 100644
> --- a/arch/arm64/kvm/hyp/nvhe/Makefile
> +++ b/arch/arm64/kvm/hyp/nvhe/Makefile
> @@ -78,8 +78,10 @@ $(obj)/kvm_nvhe.o: $(obj)/kvm_nvhe.rel.o FORCE
>
> # The HYPREL command calls `gen-hyprel` to generate an assembly file with
> # a list of relocations targeting hyp code/data.
> +# Starting from 13.0.0 llvm emits SHT_REL section '.llvm.call-graph-profile'
> +# when profile optimization is applied. gen-hyprel does not support SHT_REL.
> quiet_cmd_hyprel = HYPREL $@
> - cmd_hyprel = $(obj)/gen-hyprel $< > $@
> + cmd_hyprel = $(OBJCOPY) -R .llvm.call-graph-profile $<; $(obj)/gen-hyprel $< > $@
I was really hoping that you'd just drop the flags from the CFLAGS
instead of removing the generated section. Something like:
diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
index b5c5119c7396..e5b2d43925b4 100644
--- a/arch/arm64/kvm/hyp/nvhe/Makefile
+++ b/arch/arm64/kvm/hyp/nvhe/Makefile
@@ -88,7 +88,7 @@ quiet_cmd_hypcopy = HYPCOPY $@
# Remove ftrace, Shadow Call Stack, and CFI CFLAGS.
# This is equivalent to the 'notrace', '__noscs', and '__nocfi' annotations.
-KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI), $(KBUILD_CFLAGS))
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI) -fprofile-sample-use, $(KBUILD_CFLAGS))
# KVM nVHE code is run at a different exception code with a different map, so
# compiler instrumentation that inserts callbacks or checks into the code may
However, I even failed to reproduce your problem using LLVM 14 as
packaged by Debian (if that matters, I'm using an arm64 build
machine). I build the kernel with:
$ make LLVM=1 KCFLAGS=-fprofile-sample-use -j8 vmlinux
and the offending object only contains the following sections:
arch/arm64/kvm/hyp/nvhe/kvm_nvhe.tmp.o: file format elf64-littleaarch64
Sections:
Idx Name Size VMA LMA File off Algn
0 .hyp.idmap.text 00000ae4 0000000000000000 0000000000000000 00000800 2**11
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .hyp.text 0000e988 0000000000000000 0000000000000000 00001800 2**11
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
2 .hyp.data..ro_after_init 00000820 0000000000000000 0000000000000000 00010188 2**3
CONTENTS, ALLOC, LOAD, DATA
3 .hyp.rodata 00002e70 0000000000000000 0000000000000000 000109a8 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
4 .hyp.data..percpu 00001ee0 0000000000000000 0000000000000000 00013820 2**4
CONTENTS, ALLOC, LOAD, DATA
5 .hyp.bss 00001158 0000000000000000 0000000000000000 00015700 2**3
ALLOC
6 .comment 0000001f 0000000000000000 0000000000000000 00017830 2**0
CONTENTS, READONLY
7 .llvm_addrsig 000000b8 0000000000000000 0000000000000000 0001784f 2**0
CONTENTS, READONLY, EXCLUDE
8 .altinstructions 00001284 0000000000000000 0000000000000000 00015700 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
9 __jump_table 00000960 0000000000000000 0000000000000000 00016988 2**3
CONTENTS, ALLOC, LOAD, RELOC, DATA
10 __bug_table 0000051c 0000000000000000 0000000000000000 000172e8 2**2
CONTENTS, ALLOC, LOAD, RELOC, DATA
11 __kvm_ex_table 00000028 0000000000000000 0000000000000000 00017808 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
12 .note.GNU-stack 00000000 0000000000000000 0000000000000000 00027370 2**0
CONTENTS, READONLY
So what am I missing to trigger this issue? Does it rely on something
like PGO, which is not upstream yet? A bit of handholding would be
much appreciated.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2022-09-22 10:38 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-20 8:20 [PATCH] KVM: arm64: nvhe: Disable profile optimization Denis Nikitin
2022-09-20 8:20 ` Denis Nikitin
2022-09-20 9:33 ` Marc Zyngier
2022-09-20 9:33 ` Marc Zyngier
2022-09-20 9:33 ` Marc Zyngier
2022-09-21 0:08 ` Denis Nikitin
2022-09-21 0:08 ` Denis Nikitin
2022-09-21 0:08 ` Denis Nikitin
2022-09-21 6:02 ` Denis Nikitin
2022-09-21 6:02 ` Denis Nikitin
2022-09-21 6:02 ` Denis Nikitin
2022-09-21 17:25 ` Marc Zyngier
2022-09-21 17:25 ` Marc Zyngier
2022-09-21 17:25 ` Marc Zyngier
2022-09-22 5:31 ` [PATCH v2] KVM: arm64: nvhe: Fix build with " Denis Nikitin
2022-09-22 5:31 ` Denis Nikitin
2022-09-22 5:31 ` Denis Nikitin
2022-09-22 10:37 ` Marc Zyngier [this message]
2022-09-22 10:37 ` Marc Zyngier
2022-09-22 10:37 ` Marc Zyngier
2022-09-23 5:01 ` Denis Nikitin
2022-09-23 5:01 ` Denis Nikitin
2022-09-23 5:01 ` Denis Nikitin
2022-09-23 6:04 ` Manoj Gupta
2022-09-29 16:13 ` Denis Nikitin
2022-09-29 16:13 ` Denis Nikitin
2022-09-29 16:13 ` Denis Nikitin
2022-10-06 16:28 ` Denis Nikitin
2022-10-06 16:28 ` Denis Nikitin
2022-10-06 16:28 ` Denis Nikitin
2022-10-09 2:20 ` Marc Zyngier
2022-10-09 2:20 ` Marc Zyngier
2022-10-09 2:20 ` Marc Zyngier
2022-10-11 2:15 ` Denis Nikitin
2022-10-11 2:15 ` Denis Nikitin
2022-10-11 2:15 ` Denis Nikitin
2022-10-13 11:09 ` Marc Zyngier
2022-10-13 11:09 ` Marc Zyngier
2022-10-13 11:09 ` Marc Zyngier
2022-10-13 19:02 ` Denis Nikitin
2022-10-13 19:02 ` Denis Nikitin
2022-10-13 19:02 ` Denis Nikitin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h70zk83g.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=denik@chromium.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manojgupta@google.com \
--cc=ndesaulniers@google.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.