/* * Create ELF notes for one CPU */ static void add_elf_notes(int cpu) { struct save_area *sa = (void *) 4608 + store_prefix(); void *ptr; memcpy((void *) (4608UL + sa->pref_reg), sa, sizeof(*sa)); ptr = (u64 *) per_cpu_ptr(crash_notes, cpu); ptr = fill_cpu_elf_notes(ptr, sa); memset(ptr, 0, sizeof(struct elf_note)); }
static void *notes_init(Elf64_Phdr *phdr, void *ptr, u64 notes_offset) { struct save_area *sa; void *ptr_start = ptr; int i; ptr = nt_prpsinfo(ptr); for (i = 0; zfcpdump_save_areas[i]; i++) { sa = zfcpdump_save_areas[i]; if (sa->pref_reg == 0) continue; ptr = fill_cpu_elf_notes(ptr, sa); } ptr = nt_vmcoreinfo(ptr); memset(phdr, 0, sizeof(*phdr)); phdr->p_type = PT_NOTE; phdr->p_offset = relocate(notes_offset); phdr->p_filesz = (unsigned long) PTR_SUB(ptr, ptr_start); phdr->p_memsz = phdr->p_filesz; return ptr; }