diff mbox series

[4.4,22/38] elfcore: fix building with clang

Message ID 20210208145806.154119176@linuxfoundation.org
State Superseded
Headers show
Series None | expand

Commit Message

Greg KH Feb. 8, 2021, 3 p.m. UTC
From: Arnd Bergmann <arnd@arndb.de>


commit 6e7b64b9dd6d96537d816ea07ec26b7dedd397b9 upstream.

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.

Link: https://lkml.kernel.org/r/20201204165742.3815221-2-arnd@kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Cc: Nathan Chancellor <natechancellor@gmail.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Barret Rhoden <brho@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 include/linux/elfcore.h |   22 ++++++++++++++++++++++
 kernel/Makefile         |    1 -
 kernel/elfcore.c        |   25 -------------------------
 3 files changed, 22 insertions(+), 26 deletions(-)
 delete mode 100644 kernel/elfcore.c

Comments

Pavel Machek Feb. 9, 2021, 12:52 p.m. UTC | #1
Hi!

> From: Arnd Bergmann <arnd@arndb.de>

> 

> commit 6e7b64b9dd6d96537d816ea07ec26b7dedd397b9 upstream.

> 

> 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.


4.4 has this:

config BINFMT_ELF32
        bool
        default y if MIPS32_O32 || MIPS32_N32
                select ELFCORE

in arch/mips. So I believe we'll see problems in that
configuration...?

Best regards,
							Pavel
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Greg KH Feb. 9, 2021, 1:01 p.m. UTC | #2
On Tue, Feb 09, 2021 at 01:52:52PM +0100, Pavel Machek wrote:
> Hi!

> 

> > From: Arnd Bergmann <arnd@arndb.de>

> > 

> > commit 6e7b64b9dd6d96537d816ea07ec26b7dedd397b9 upstream.

> > 

> > 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.

> 

> 4.4 has this:

> 

> config BINFMT_ELF32

>         bool

>         default y if MIPS32_O32 || MIPS32_N32

>                 select ELFCORE

> 

> in arch/mips. So I believe we'll see problems in that

> configuration...?


Hm, did I miss a patch to backport?  This is needed to keep 4.4 building
with newer versions of gcc.  Well, close to building, I'm still haveing
local issues with 10.2.0 and the 4.4.y tree right now...

thanks,

greg k-h
Greg KH Feb. 9, 2021, 7:10 p.m. UTC | #3
On Tue, Feb 09, 2021 at 02:01:37PM +0100, Greg Kroah-Hartman wrote:
> On Tue, Feb 09, 2021 at 01:52:52PM +0100, Pavel Machek wrote:

> > Hi!

> > 

> > > From: Arnd Bergmann <arnd@arndb.de>

> > > 

> > > commit 6e7b64b9dd6d96537d816ea07ec26b7dedd397b9 upstream.

> > > 

> > > 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.

> > 

> > 4.4 has this:

> > 

> > config BINFMT_ELF32

> >         bool

> >         default y if MIPS32_O32 || MIPS32_N32

> >                 select ELFCORE

> > 

> > in arch/mips. So I believe we'll see problems in that

> > configuration...?

> 

> Hm, did I miss a patch to backport?  This is needed to keep 4.4 building

> with newer versions of gcc.  Well, close to building, I'm still haveing

> local issues with 10.2.0 and the 4.4.y tree right now...


Not a gcc issue, looks like a binutils issue on my side...

And the builders seem to have worked ok.

thanks,

greg k-h
diff mbox series

Patch

--- a/include/linux/elfcore.h
+++ b/include/linux/elfcore.h
@@ -55,6 +55,7 @@  static inline int elf_core_copy_task_xfp
 }
 #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
@@ -69,5 +70,26 @@  elf_core_write_extra_phdrs(struct coredu
 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 */
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -77,7 +77,6 @@  obj-$(CONFIG_TASK_DELAY_ACCT) += delayac
 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/
--- a/kernel/elfcore.c
+++ /dev/null
@@ -1,25 +0,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;
-}