diff options
Diffstat (limited to 'kernel/crash_core.c')
| -rw-r--r-- | kernel/crash_core.c | 55 | 
1 files changed, 5 insertions, 50 deletions
| diff --git a/kernel/crash_core.c b/kernel/crash_core.c index 825284baaf46..eb53f5ec62c9 100644 --- a/kernel/crash_core.c +++ b/kernel/crash_core.c @@ -4,6 +4,7 @@   * Copyright (C) 2002-2004 Eric Biederman  <ebiederm@xmission.com>   */ +#include <linux/buildid.h>  #include <linux/crash_core.h>  #include <linux/utsname.h>  #include <linux/vmalloc.h> @@ -378,53 +379,6 @@ phys_addr_t __weak paddr_vmcoreinfo_note(void)  }  EXPORT_SYMBOL(paddr_vmcoreinfo_note); -#define NOTES_SIZE (&__stop_notes - &__start_notes) -#define BUILD_ID_MAX SHA1_DIGEST_SIZE -#define NT_GNU_BUILD_ID 3 - -struct elf_note_section { -	struct elf_note	n_hdr; -	u8 n_data[]; -}; - -/* - * Add build ID from .notes section as generated by the GNU ld(1) - * or LLVM lld(1) --build-id option. - */ -static void add_build_id_vmcoreinfo(void) -{ -	char build_id[BUILD_ID_MAX * 2 + 1]; -	int n_remain = NOTES_SIZE; - -	while (n_remain >= sizeof(struct elf_note)) { -		const struct elf_note_section *note_sec = -			&__start_notes + NOTES_SIZE - n_remain; -		const u32 n_namesz = note_sec->n_hdr.n_namesz; - -		if (note_sec->n_hdr.n_type == NT_GNU_BUILD_ID && -		    n_namesz != 0 && -		    !strcmp((char *)¬e_sec->n_data[0], "GNU")) { -			if (note_sec->n_hdr.n_descsz <= BUILD_ID_MAX) { -				const u32 n_descsz = note_sec->n_hdr.n_descsz; -				const u8 *s = ¬e_sec->n_data[n_namesz]; - -				s = PTR_ALIGN(s, 4); -				bin2hex(build_id, s, n_descsz); -				build_id[2 * n_descsz] = '\0'; -				VMCOREINFO_BUILD_ID(build_id); -				return; -			} -			pr_warn("Build ID is too large to include in vmcoreinfo: %u > %u\n", -				note_sec->n_hdr.n_descsz, -				BUILD_ID_MAX); -			return; -		} -		n_remain -= sizeof(struct elf_note) + -			ALIGN(note_sec->n_hdr.n_namesz, 4) + -			ALIGN(note_sec->n_hdr.n_descsz, 4); -	} -} -  static int __init crash_save_vmcoreinfo_init(void)  {  	vmcoreinfo_data = (unsigned char *)get_zeroed_page(GFP_KERNEL); @@ -443,7 +397,7 @@ static int __init crash_save_vmcoreinfo_init(void)  	}  	VMCOREINFO_OSRELEASE(init_uts_ns.name.release); -	add_build_id_vmcoreinfo(); +	VMCOREINFO_BUILD_ID();  	VMCOREINFO_PAGESIZE(PAGE_SIZE);  	VMCOREINFO_SYMBOL(init_uts_ns); @@ -455,7 +409,7 @@ static int __init crash_save_vmcoreinfo_init(void)  	VMCOREINFO_SYMBOL(_stext);  	VMCOREINFO_SYMBOL(vmap_area_list); -#ifndef CONFIG_NEED_MULTIPLE_NODES +#ifndef CONFIG_NUMA  	VMCOREINFO_SYMBOL(mem_map);  	VMCOREINFO_SYMBOL(contig_page_data);  #endif @@ -464,6 +418,7 @@ static int __init crash_save_vmcoreinfo_init(void)  	VMCOREINFO_LENGTH(mem_section, NR_SECTION_ROOTS);  	VMCOREINFO_STRUCT_SIZE(mem_section);  	VMCOREINFO_OFFSET(mem_section, section_mem_map); +	VMCOREINFO_NUMBER(SECTION_SIZE_BITS);  	VMCOREINFO_NUMBER(MAX_PHYSMEM_BITS);  #endif  	VMCOREINFO_STRUCT_SIZE(page); @@ -483,7 +438,7 @@ static int __init crash_save_vmcoreinfo_init(void)  	VMCOREINFO_OFFSET(page, compound_head);  	VMCOREINFO_OFFSET(pglist_data, node_zones);  	VMCOREINFO_OFFSET(pglist_data, nr_zones); -#ifdef CONFIG_FLAT_NODE_MEM_MAP +#ifdef CONFIG_FLATMEM  	VMCOREINFO_OFFSET(pglist_data, node_mem_map);  #endif  	VMCOREINFO_OFFSET(pglist_data, node_start_pfn); | 
