All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] initramfs: fix clang build failure
@ 2020-12-04 16:57 Arnd Bergmann
  2020-12-04 16:57 ` [PATCH 2/2] elfcore: fix building with clang Arnd Bergmann
  2020-12-05  0:34 ` [PATCH 1/2] initramfs: fix clang build failure Andrew Morton
  0 siblings, 2 replies; 3+ messages in thread
From: Arnd Bergmann @ 2020-12-04 16:57 UTC (permalink / raw)
  To: Andrew Morton, Nathan Chancellor, Nick Desaulniers
  Cc: Arnd Bergmann, Barret Rhoden, linux-kernel, clang-built-linux

From: Arnd Bergmann <arnd@arndb.de>

There is only one function in init/initramfs.c that is in the .text
section, and it is marked __weak. When building with clang-12 and
the integrated assembler, this leads to a bug with recordmcount:

./scripts/recordmcount  "init/initramfs.o"
Cannot find symbol for section 2: .text.
init/initramfs.o: failed

I'm not quite sure what exactly goes wrong, but I notice that this
function is only ever called from an __init function, and normally
inlined. Marking it __init as well is clearly correct and it
leads to recordmcount no longer complaining.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 init/initramfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/init/initramfs.c b/init/initramfs.c
index 1f97c0328a7a..55b74d7e5260 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -535,7 +535,7 @@ extern unsigned long __initramfs_size;
 #include <linux/initrd.h>
 #include <linux/kexec.h>
 
-void __weak free_initrd_mem(unsigned long start, unsigned long end)
+void __weak __init free_initrd_mem(unsigned long start, unsigned long end)
 {
 #ifdef CONFIG_ARCH_KEEP_MEMBLOCK
 	unsigned long aligned_start = ALIGN_DOWN(start, PAGE_SIZE);
-- 
2.27.0


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

* [PATCH 2/2] elfcore: fix building with clang
  2020-12-04 16:57 [PATCH 1/2] initramfs: fix clang build failure Arnd Bergmann
@ 2020-12-04 16:57 ` Arnd Bergmann
  2020-12-05  0:34 ` [PATCH 1/2] initramfs: fix clang build failure Andrew Morton
  1 sibling, 0 replies; 3+ messages in thread
From: Arnd Bergmann @ 2020-12-04 16:57 UTC (permalink / raw)
  To: Andrew Morton, Nathan Chancellor, Nick Desaulniers
  Cc: Arnd Bergmann, Al Viro, Kees Cook, Eric W. Biederman,
	Alexei Starovoitov, Sami Tolvanen, linux-kernel,
	clang-built-linux

From: Arnd Bergmann <arnd@arndb.de>

kernel/elfcore.c only contains weak symbols, which triggers
a bug with clang in combination with recordmcount:

Cannot find symbol for section 2: .text.
kernel/elfcore.o: failed

Move the empty stubs into linux/elfcore.h as inline functions.
As only two architectures use these, just use the architecture
specific Kconfig symbols to key off the declaration.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/linux/elfcore.h | 22 ++++++++++++++++++++++
 kernel/Makefile         |  1 -
 kernel/elfcore.c        | 26 --------------------------
 3 files changed, 22 insertions(+), 27 deletions(-)
 delete mode 100644 kernel/elfcore.c

diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h
index 46c3d691f677..de51c1bef27d 100644
--- a/include/linux/elfcore.h
+++ b/include/linux/elfcore.h
@@ -104,6 +104,7 @@ static inline int elf_core_copy_task_fpregs(struct task_struct *t, struct pt_reg
 #endif
 }
 
+#if defined(CONFIG_UM) || defined(CONFIG_IA64)
 /*
  * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
  * extra segments containing the gate DSO contents.  Dumping its
@@ -118,5 +119,26 @@ elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset);
 extern int
 elf_core_write_extra_data(struct coredump_params *cprm);
 extern size_t elf_core_extra_data_size(void);
+#else
+static inline Elf_Half elf_core_extra_phdrs(void)
+{
+	return 0;
+}
+
+static inline int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
+{
+	return 1;
+}
+
+static inline int elf_core_write_extra_data(struct coredump_params *cprm)
+{
+	return 1;
+}
+
+static inline size_t elf_core_extra_data_size(void)
+{
+	return 0;
+}
+#endif
 
 #endif /* _LINUX_ELFCORE_H */
diff --git a/kernel/Makefile b/kernel/Makefile
index aac15aeb9d69..dddf51266719 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -97,7 +97,6 @@ obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
 obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
 obj-$(CONFIG_TRACEPOINTS) += tracepoint.o
 obj-$(CONFIG_LATENCYTOP) += latencytop.o
-obj-$(CONFIG_ELFCORE) += elfcore.o
 obj-$(CONFIG_FUNCTION_TRACER) += trace/
 obj-$(CONFIG_TRACING) += trace/
 obj-$(CONFIG_TRACE_CLOCK) += trace/
diff --git a/kernel/elfcore.c b/kernel/elfcore.c
deleted file mode 100644
index 57fb4dcff434..000000000000
--- a/kernel/elfcore.c
+++ /dev/null
@@ -1,26 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include <linux/elf.h>
-#include <linux/fs.h>
-#include <linux/mm.h>
-#include <linux/binfmts.h>
-#include <linux/elfcore.h>
-
-Elf_Half __weak elf_core_extra_phdrs(void)
-{
-	return 0;
-}
-
-int __weak elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
-{
-	return 1;
-}
-
-int __weak elf_core_write_extra_data(struct coredump_params *cprm)
-{
-	return 1;
-}
-
-size_t __weak elf_core_extra_data_size(void)
-{
-	return 0;
-}
-- 
2.27.0


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

* Re: [PATCH 1/2] initramfs: fix clang build failure
  2020-12-04 16:57 [PATCH 1/2] initramfs: fix clang build failure Arnd Bergmann
  2020-12-04 16:57 ` [PATCH 2/2] elfcore: fix building with clang Arnd Bergmann
@ 2020-12-05  0:34 ` Andrew Morton
  1 sibling, 0 replies; 3+ messages in thread
From: Andrew Morton @ 2020-12-05  0:34 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Nathan Chancellor, Nick Desaulniers, Arnd Bergmann,
	Barret Rhoden, linux-kernel, clang-built-linux

On Fri,  4 Dec 2020 17:57:33 +0100 Arnd Bergmann <arnd@kernel.org> wrote:

> There is only one function in init/initramfs.c that is in the .text
> section, and it is marked __weak. When building with clang-12 and
> the integrated assembler, this leads to a bug with recordmcount:
> 
> ./scripts/recordmcount  "init/initramfs.o"
> Cannot find symbol for section 2: .text.
> init/initramfs.o: failed

That looks like recordmcount is being silly?

> I'm not quite sure what exactly goes wrong, but I notice that this
> function is only ever called from an __init function, and normally
> inlined. Marking it __init as well is clearly correct and it
> leads to recordmcount no longer complaining.

That works, too.

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

end of thread, other threads:[~2020-12-05  0:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-04 16:57 [PATCH 1/2] initramfs: fix clang build failure Arnd Bergmann
2020-12-04 16:57 ` [PATCH 2/2] elfcore: fix building with clang Arnd Bergmann
2020-12-05  0:34 ` [PATCH 1/2] initramfs: fix clang build failure Andrew Morton

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.