All of lore.kernel.org
 help / color / mirror / Atom feed
From: Coiby Xu <coxu@redhat.com>
To: Baoquan He <bhe@redhat.com>
Cc: Veronika Kabatova <vkabatov@redhat.com>,
	kexec@lists.infradead.org, ebiederm@xmission.com
Subject: Re: Compile error ppc64le: Cannot find symbol for section 11: .text.unlikely.
Date: Wed, 1 Dec 2021 10:26:37 +0800	[thread overview]
Message-ID: <20211201022637.izwnmy57nc4xxljv@Rk> (raw)
In-Reply-To: <20211201021926.3xfabf5zbzidvrwa@Rk>

On Wed, Dec 01, 2021 at 10:19:26AM +0800, Coiby Xu wrote:
>On Wed, Nov 24, 2021 at 09:47:43PM +0800, Baoquan He wrote:
>>On 11/24/21 at 01:47pm, Veronika Kabatova wrote:
>>>Hi,
>>>
>>>for a while we've been seen the following error when compiling
>>>the mainline kernel with gcc 11.2 and binutils 2.37:
>>>
>>>00:02:32 Cannot find symbol for section 11: .text.unlikely.
>>>00:02:32 kernel/kexec_file.o: failed
>>>00:02:32 make[3]: *** [scripts/Makefile.build:287: kernel/kexec_file.o] Error 1
>>>00:02:32 make[3]: *** Deleting file 'kernel/kexec_file.o'
>>>00:02:32 make[2]: *** [Makefile:1846: kernel] Error 2
>>>00:02:32 make[2]: *** Waiting for unfinished jobs....
>>>
>>>The error only happens with ppc64le. I've tested this with cross
>>>compilation, but the only reference to the error I found suggests
>>>the same happens with the native compiles as well:
>>>
>>>https://github.com/groeck/linux-build-test/commit/142cbefbc0d37962c9a6c7f28ee415ecd5fd1e98
>>>
>>>In case it matters, the config used is the Fedora config with
>>>kselftest options enabled, which you can grab from
>>>
>>>https://gitlab.com/redhat/red-hat-ci-tools/kernel/cki-internal-pipelines/cki-trusted-contributors/-/jobs/1760752896/artifacts/raw/artifacts/kernel-mainline.kernel.org-ppc64le-e4e737bb5c170df6135a127739a9e6148ee3da82.config
>>>
>>>
>>>I've reached out to the Fedora compiler folks and Nick Clifton
>>>suggested this is a problem with the kernel:
>>>
>>>    This message comes from the recordmcount tool, which is part of the kernel
>>>    sources:
>>>
>>>    linux/scripts/recordmcount.[ch]
>>>
>>>    It appears to be triggered when a compiler update causes code to be
>>>    rearranged. The problem has been reported before in various forums,
>>>    but in particular I found this reference:
>>>
>>>    https://lore.kernel.org/lkml/20201204165742.3815221-2-arnd@kernel.org/
>>>
>>>    The point of which to me at least is that this is a kernel issue rather than
>>>    a compiler issue.  Ie there must be some weak symbols in kexec_file.o file
>>>    which need to be moved elsewhere.
>>
>>It could be arch_kexec_kernel_verify_sig() in kernel/kexec_file.c which
>>is __weak, but not implemented in any ARCH. If true, this has been
>>pointed out by Eric in one patch thread from Coiby.
>>
>>[PATCH v3 1/3] kexec: clean up arch_kexec_kernel_verify_sig
>>http://lkml.kernel.org/r/20211018083137.338757-2-coxu@redhat.com
>>
>>Maybe Coiby can fetch above config file and run the test to check.
>
>"[PATCH v3 1/3] kexec: clean up arch_kexec_kernel_verify_sig" alone
>would fix the error. If I turn arch_kexec_apply_relocations{_add,} into
  ^^^^^
  wouldn't 

Sorry I made a typo.

>static function, the error would be gone. As attached is the patch would
>make this error disappear.
>
>However, s390 and x86 have its own implementation of
>arch_kexec_apply_relocations_add. This makes it looks like to be gcc's
>issue.
>
>
>>
>>Thanks
>>Baoquan
>>
>
>-- 
>Best regards,
>Coiby

From 49e0333f5a0743cdcc99777218524d6a6cd5ec34 Mon Sep 17 00:00:00 2001
>From: Coiby Xu <coxu@redhat.com>
>Date: Mon, 18 Oct 2021 15:52:46 +0800
>Subject: [PATCH] fix error "ppc64le: Cannot find symbol for section 11:
> .text.unlikely."
>
>---
> include/linux/kexec.h | 13 -------------
> kernel/kexec_file.c   | 40 ++++++++++++++++------------------------
> 2 files changed, 16 insertions(+), 37 deletions(-)
>
>diff --git a/include/linux/kexec.h b/include/linux/kexec.h
>index 0c994ae37..1476470a1 100644
>--- a/include/linux/kexec.h
>+++ b/include/linux/kexec.h
>@@ -186,20 +186,7 @@ void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name);
> /* Architectures may override the below functions */
> int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
> 				  unsigned long buf_len);
>-void *arch_kexec_kernel_image_load(struct kimage *image);
>-int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
>-				     Elf_Shdr *section,
>-				     const Elf_Shdr *relsec,
>-				     const Elf_Shdr *symtab);
>-int arch_kexec_apply_relocations(struct purgatory_info *pi,
>-				 Elf_Shdr *section,
>-				 const Elf_Shdr *relsec,
>-				 const Elf_Shdr *symtab);
> int arch_kimage_file_post_load_cleanup(struct kimage *image);
>-#ifdef CONFIG_KEXEC_SIG
>-int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
>-				 unsigned long buf_len);
>-#endif
> int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
>
> extern int kexec_add_buffer(struct kexec_buf *kbuf);
>diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
>index 8347fc158..e0afe36d3 100644
>--- a/kernel/kexec_file.c
>+++ b/kernel/kexec_file.c
>@@ -71,7 +71,7 @@ static void *kexec_image_load_default(struct kimage *image)
> 				 image->cmdline_buf_len);
> }
>
>-void * __weak arch_kexec_kernel_image_load(struct kimage *image)
>+static void * arch_kexec_kernel_image_load(struct kimage *image)
> {
> 	return kexec_image_load_default(image);
> }
>@@ -89,25 +89,6 @@ int __weak arch_kimage_file_post_load_cleanup(struct kimage *image)
> 	return kexec_image_post_load_cleanup_default(image);
> }
>
>-#ifdef CONFIG_KEXEC_SIG
>-static int kexec_image_verify_sig_default(struct kimage *image, void *buf,
>-					  unsigned long buf_len)
>-{
>-	if (!image->fops || !image->fops->verify_sig) {
>-		pr_debug("kernel loader does not support signature verification.\n");
>-		return -EKEYREJECTED;
>-	}
>-
>-	return image->fops->verify_sig(buf, buf_len);
>-}
>-
>-int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
>-					unsigned long buf_len)
>-{
>-	return kexec_image_verify_sig_default(image, buf, buf_len);
>-}
>-#endif
>-
> /*
>  * arch_kexec_apply_relocations_add - apply relocations of type RELA
>  * @pi:		Purgatory to be relocated.
>@@ -117,7 +98,7 @@ int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
>  *
>  * Return: 0 on success, negative errno on error.
>  */
>-int __weak
>+static int
> arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section,
> 				 const Elf_Shdr *relsec, const Elf_Shdr *symtab)
> {
>@@ -134,7 +115,7 @@ arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section,
>  *
>  * Return: 0 on success, negative errno on error.
>  */
>-int __weak
>+static int
> arch_kexec_apply_relocations(struct purgatory_info *pi, Elf_Shdr *section,
> 			     const Elf_Shdr *relsec, const Elf_Shdr *symtab)
> {
>@@ -184,13 +165,24 @@ void kimage_file_post_load_cleanup(struct kimage *image)
> }
>
> #ifdef CONFIG_KEXEC_SIG
>+static int kexec_image_verify_sig(struct kimage *image, void *buf,
>+		unsigned long buf_len)
>+{
>+	if (!image->fops || !image->fops->verify_sig) {
>+		pr_debug("kernel loader does not support signature verification.\n");
>+		return -EKEYREJECTED;
>+	}
>+
>+	return image->fops->verify_sig(buf, buf_len);
>+}
>+
> static int
> kimage_validate_signature(struct kimage *image)
> {
> 	int ret;
>
>-	ret = arch_kexec_kernel_verify_sig(image, image->kernel_buf,
>-					   image->kernel_buf_len);
>+	ret = kexec_image_verify_sig(image, image->kernel_buf,
>+			image->kernel_buf_len);
> 	if (ret) {
>
> 		if (IS_ENABLED(CONFIG_KEXEC_SIG_FORCE)) {
>-- 
>2.33.1
>


-- 
Best regards,
Coiby


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  reply	other threads:[~2021-12-01  2:30 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-24 12:47 Compile error ppc64le: Cannot find symbol for section 11: .text.unlikely Veronika Kabatova
2021-11-24 13:47 ` Baoquan He
2021-12-01  2:19   ` Coiby Xu
2021-12-01  2:26     ` Coiby Xu [this message]
2021-12-03 15:54     ` Veronika Kabatova
2022-02-25  3:46       ` Coiby Xu
2022-03-02  7:46         ` Coiby Xu
2022-03-02 10:52           ` Veronika Kabatova
2022-03-03  0:49             ` Coiby Xu

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=20211201022637.izwnmy57nc4xxljv@Rk \
    --to=coxu@redhat.com \
    --cc=bhe@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=kexec@lists.infradead.org \
    --cc=vkabatov@redhat.com \
    /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.