forked from mirrors/linux
		
	elfcore: fix building with clang
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>
This commit is contained in:
		
							parent
							
								
									55d5b7dd64
								
							
						
					
					
						commit
						6e7b64b9dd
					
				
					 3 changed files with 22 additions and 27 deletions
				
			
		| 
						 | 
				
			
			@ -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 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in a new issue