Blame netdump.h

Packit bf408e
/* netdump.h
Packit bf408e
 *
Packit bf408e
 * Copyright (C) 2002-2009, 2017-2018 David Anderson
Packit bf408e
 * Copyright (C) 2002-2009, 2017-2018 Red Hat, Inc. All rights reserved.
Packit bf408e
 *
Packit bf408e
 * This program is free software; you can redistribute it and/or modify
Packit bf408e
 * it under the terms of the GNU General Public License as published by
Packit bf408e
 * the Free Software Foundation; either version 2 of the License, or
Packit bf408e
 * (at your option) any later version.
Packit bf408e
 *
Packit bf408e
 * This program is distributed in the hope that it will be useful,
Packit bf408e
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bf408e
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit bf408e
 * GNU General Public License for more details.
Packit bf408e
 *
Packit bf408e
 * Author: David Anderson
Packit bf408e
 */
Packit bf408e
Packit bf408e
#include <elf.h>
Packit bf408e
#include "vmcore.h"
Packit bf408e
Packit bf408e
#define MIN_NETDUMP_ELF32_HEADER_SIZE \
Packit bf408e
        sizeof(Elf32_Ehdr)+sizeof(Elf32_Phdr)+sizeof(Elf32_Phdr)
Packit bf408e
#define MIN_NETDUMP_ELF64_HEADER_SIZE \
Packit bf408e
        sizeof(Elf64_Ehdr)+sizeof(Elf64_Phdr)+sizeof(Elf64_Phdr)
Packit bf408e
#define MIN_NETDUMP_ELF_HEADER_SIZE \
Packit bf408e
        MAX(MIN_NETDUMP_ELF32_HEADER_SIZE, MIN_NETDUMP_ELF64_HEADER_SIZE)
Packit bf408e
Packit Service 2d41f0
#define NETDUMP_ELF_HEADER_SPARE_SIZE 128
Packit Service 2d41f0
/*
Packit Service 2d41f0
 * "Safe" size, as in covering the ELF header and the first two program headers
Packit Service 2d41f0
 * plus any "padding" in-between, like section headers.
Packit Service 2d41f0
 */
Packit Service 2d41f0
#define SAFE_NETDUMP_ELF_HEADER_SIZE \
Packit Service 2d41f0
	(MIN_NETDUMP_ELF_HEADER_SIZE+NETDUMP_ELF_HEADER_SPARE_SIZE)
Packit Service 2d41f0
Packit bf408e
#define NT_TASKSTRUCT 4
Packit bf408e
#define NT_DISKDUMP   0x70000001
Packit bf408e
Packit bf408e
#ifdef NOTDEF
Packit bf408e
/*
Packit bf408e
 *  Note: Based upon the original, abandoned, proposal for
Packit bf408e
 *  its contents -- keep around for potential future use.
Packit bf408e
 */
Packit bf408e
#ifndef NT_KDUMPINFO
Packit bf408e
#define NT_KDUMPINFO 7
Packit bf408e
#endif
Packit bf408e
Packit bf408e
#endif  /* NOTDEF */
Packit bf408e
Packit bf408e
struct pt_load_segment {
Packit bf408e
	off_t file_offset;
Packit bf408e
	physaddr_t phys_start;
Packit bf408e
	physaddr_t phys_end;
Packit bf408e
	physaddr_t zero_fill;
Packit bf408e
};
Packit bf408e
Packit bf408e
struct vmcore_data {
Packit bf408e
	ulong flags;
Packit bf408e
	int ndfd;
Packit bf408e
	FILE *ofp;
Packit bf408e
	uint header_size;
Packit bf408e
	char *elf_header;
Packit bf408e
	uint num_pt_load_segments;
Packit bf408e
	struct pt_load_segment *pt_load_segments;
Packit bf408e
        Elf32_Ehdr *elf32;
Packit bf408e
        Elf32_Phdr *notes32;
Packit bf408e
        Elf32_Phdr *load32;
Packit bf408e
        Elf64_Ehdr *elf64;
Packit bf408e
        Elf64_Phdr *notes64;
Packit bf408e
        Elf64_Phdr *load64;
Packit bf408e
        Elf64_Shdr *sect0_64;
Packit bf408e
        void *nt_prstatus;
Packit bf408e
        void *nt_prpsinfo;
Packit bf408e
        void *nt_taskstruct;
Packit bf408e
	ulong task_struct;
Packit bf408e
	uint page_size;
Packit bf408e
	ulong switch_stack;
Packit bf408e
	uint num_prstatus_notes;
Packit bf408e
	void *nt_prstatus_percpu[NR_CPUS];
Packit bf408e
	void *vmcoreinfo;
Packit bf408e
	uint size_vmcoreinfo;
Packit bf408e
/* Backup Region, first 640K of System RAM. */
Packit bf408e
#define KEXEC_BACKUP_SRC_END	0x0009ffff
Packit bf408e
	uint num_qemu_notes;
Packit bf408e
	void *nt_qemu_percpu[NR_CPUS];
Packit bf408e
	ulonglong backup_src_start;
Packit bf408e
	ulong backup_src_size;
Packit bf408e
	ulonglong backup_offset;
Packit bf408e
	ulong arch_data;
Packit bf408e
#define arch_data1 arch_data
Packit bf408e
	ulong phys_base;
Packit bf408e
	ulong arch_data2;
Packit bf408e
	void *nt_vmcoredd_array[NR_DEVICE_DUMPS];
Packit bf408e
	uint  num_vmcoredd_notes;
Packit bf408e
};
Packit bf408e
Packit bf408e
#define DUMP_ELF_INCOMPLETE  0x1   /* dumpfile is incomplete */
Packit bf408e
Packit bf408e
/*
Packit bf408e
 * S390 CPU timer ELF note
Packit bf408e
 */
Packit bf408e
#ifndef NT_S390_TIMER
Packit bf408e
#define NT_S390_TIMER 0x301
Packit bf408e
#endif
Packit bf408e
Packit bf408e
/*
Packit bf408e
 * S390 TOD clock comparator ELF note
Packit bf408e
 */
Packit bf408e
#ifndef NT_S390_TODCMP
Packit bf408e
#define NT_S390_TODCMP 0x302
Packit bf408e
#endif
Packit bf408e
Packit bf408e
/*
Packit bf408e
 * S390 TOD programmable register ELF note
Packit bf408e
 */
Packit bf408e
#ifndef NT_S390_TODPREG
Packit bf408e
#define NT_S390_TODPREG 0x303
Packit bf408e
#endif
Packit bf408e
Packit bf408e
/*
Packit bf408e
 * S390 control registers ELF note
Packit bf408e
 */
Packit bf408e
#ifndef NT_S390_CTRS
Packit bf408e
#define NT_S390_CTRS 0x304
Packit bf408e
#endif
Packit bf408e
Packit bf408e
/*
Packit bf408e
 * S390 prefix ELF note
Packit bf408e
 */
Packit bf408e
#ifndef NT_S390_PREFIX
Packit bf408e
#define NT_S390_PREFIX 0x305
Packit bf408e
#endif
Packit bf408e
Packit bf408e
/*
Packit bf408e
 * S390 vector registers 0-15 upper half note (16 * u64)
Packit bf408e
 */
Packit bf408e
#ifndef NT_S390_VXRS_LOW
Packit bf408e
#define NT_S390_VXRS_LOW 0x309
Packit bf408e
#endif
Packit bf408e
Packit bf408e
/*
Packit bf408e
 * S390 vector registers 16-31 note (16 * u128)
Packit bf408e
 */
Packit bf408e
#ifndef NT_S390_VXRS_HIGH
Packit bf408e
#define NT_S390_VXRS_HIGH 0x30a
Packit bf408e
#endif
Packit bf408e
Packit bf408e
#define MAX_KCORE_ELF_HEADER_SIZE (32768)
Packit bf408e
Packit bf408e
struct proc_kcore_data {
Packit bf408e
	uint flags;
Packit bf408e
	uint segments;
Packit bf408e
	char *elf_header;
Packit bf408e
	size_t header_size;
Packit bf408e
	Elf64_Phdr *load64;
Packit bf408e
	Elf64_Phdr *notes64;
Packit bf408e
	Elf32_Phdr *load32;
Packit bf408e
	Elf32_Phdr *notes32;
Packit bf408e
	void *vmcoreinfo;
Packit bf408e
	uint size_vmcoreinfo;
Packit bf408e
};