mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
buildid: stash away kernels build ID on init
Parse the kernel's build ID at initialization so that other code can print a hex format string representation of the running kernel's build ID. This will be used in the kdump and dump_stack code so that developers can easily locate the vmlinux debug symbols for a crash/stacktrace. [swboyd@chromium.org: fix implicit declaration of init_vmlinux_build_id()] Link: https://lkml.kernel.org/r/CAE-0n51UjTbay8N9FXAyE7_aR2+ePrQnKSRJ0gbmRsXtcLBVaw@mail.gmail.com Link: https://lkml.kernel.org/r/20210511003845.2429846-4-swboyd@chromium.org Signed-off-by: Stephen Boyd <swboyd@chromium.org> Acked-by: Baoquan He <bhe@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Jessica Yu <jeyu@kernel.org> Cc: Evan Green <evgreen@chromium.org> Cc: Hsin-Yi Wang <hsinyi@chromium.org> Cc: Dave Young <dyoung@redhat.com> Cc: Vivek Goyal <vgoyal@redhat.com> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Cc: Matthew Wilcox <willy@infradead.org> Cc: Petr Mladek <pmladek@suse.com> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Sasha Levin <sashal@kernel.org> Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Deacon <will@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7eaf3cf3b7
commit
83cc6fa004
|
@ -10,4 +10,7 @@ int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id,
|
||||||
__u32 *size);
|
__u32 *size);
|
||||||
int build_id_parse_buf(const void *buf, unsigned char *build_id, u32 buf_size);
|
int build_id_parse_buf(const void *buf, unsigned char *build_id, u32 buf_size);
|
||||||
|
|
||||||
|
extern unsigned char vmlinux_build_id[BUILD_ID_SIZE_MAX];
|
||||||
|
void init_vmlinux_build_id(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <linux/srcu.h>
|
#include <linux/srcu.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
|
#include <linux/buildid.h>
|
||||||
#include <linux/writeback.h>
|
#include <linux/writeback.h>
|
||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
#include <linux/cpuset.h>
|
#include <linux/cpuset.h>
|
||||||
|
@ -913,6 +914,7 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
|
||||||
set_task_stack_end_magic(&init_task);
|
set_task_stack_end_magic(&init_task);
|
||||||
smp_setup_processor_id();
|
smp_setup_processor_id();
|
||||||
debug_objects_early_init();
|
debug_objects_early_init();
|
||||||
|
init_vmlinux_build_id();
|
||||||
|
|
||||||
cgroup_init_early();
|
cgroup_init_early();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
#include <linux/buildid.h>
|
#include <linux/buildid.h>
|
||||||
|
#include <linux/cache.h>
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pagemap.h>
|
#include <linux/pagemap.h>
|
||||||
|
@ -172,3 +173,17 @@ int build_id_parse_buf(const void *buf, unsigned char *build_id, u32 buf_size)
|
||||||
{
|
{
|
||||||
return parse_build_id_buf(build_id, NULL, buf, buf_size);
|
return parse_build_id_buf(build_id, NULL, buf, buf_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned char vmlinux_build_id[BUILD_ID_SIZE_MAX] __ro_after_init;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* init_vmlinux_build_id - Compute and stash the running kernel's build ID
|
||||||
|
*/
|
||||||
|
void __init init_vmlinux_build_id(void)
|
||||||
|
{
|
||||||
|
extern const void __start_notes __weak;
|
||||||
|
extern const void __stop_notes __weak;
|
||||||
|
unsigned int size = &__stop_notes - &__start_notes;
|
||||||
|
|
||||||
|
build_id_parse_buf(&__start_notes, vmlinux_build_id, size);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue