On Tue, 28 Jan 2014 14:21:56 +0800 qiaonuohan <qiaonuo...@cn.fujitsu.com> wrote:
> flatten format will be used when writing kdump-compressed format. The format > is > also used by makedumpfile, you can refer to the following URL to get more > detailed information about flatten format of kdump-compressed format: > http://sourceforge.net/projects/makedumpfile/ > > The two functions here are used to write start flat header and end flat header > to vmcore, and they will be called later when flatten format is used. > > struct MakedumpfileHeader stored at the head of vmcore is used to indicate the > vmcore is in flatten format. > > struct MakedumpfileHeader { > char signature[16]; /* = "makedumpfile" */ > int64_t type; /* = 1 */ > int64_t version; /* = 1 */ > }; > > And struct MakedumpfileDataHeader, with offset and buf_size set to -1, is used > to indicate the end of vmcore in flatten format. > > struct MakedumpfileDataHeader { > int64_t offset; /* = -1 */ > int64_t buf_size; /* = -1 */ > }; > > Signed-off-by: Qiao Nuohan <qiaonuo...@cn.fujitsu.com> > Reviewed-by: Laszlo Ersek <ler...@redhat.com> This patch breaks git bisect: /home/lcapitulino/work/src/upstream/qmp-unstable/dump.c:689:12: error: ‘write_start_flat_header’ defined but not used [-Werror=unused-function] /home/lcapitulino/work/src/upstream/qmp-unstable/dump.c:715:12: error: ‘write_end_flat_header’ defined but not used [-Werror=unused-function] cc1: all warnings being treated as errors make[1]: *** [dump.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [subdir-x86_64-softmmu] Error 2 > --- > dump.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > include/sysemu/dump.h | 17 +++++++++++++++++ > 2 files changed, 59 insertions(+), 0 deletions(-) > > diff --git a/dump.c b/dump.c > index c9d3492..f233b3e 100644 > --- a/dump.c > +++ b/dump.c > @@ -686,6 +686,48 @@ static int create_vmcore(DumpState *s) > return 0; > } > > +static int write_start_flat_header(int fd) > +{ > + uint8_t *buf; > + MakedumpfileHeader mh; > + int ret = 0; > + > + memset(&mh, 0, sizeof(mh)); > + strncpy(mh.signature, MAKEDUMPFILE_SIGNATURE, > + strlen(MAKEDUMPFILE_SIGNATURE)); > + > + mh.type = cpu_to_be64(TYPE_FLAT_HEADER); > + mh.version = cpu_to_be64(VERSION_FLAT_HEADER); > + > + buf = g_malloc0(MAX_SIZE_MDF_HEADER); > + memcpy(buf, &mh, sizeof(mh)); > + > + size_t written_size; > + written_size = qemu_write_full(fd, buf, MAX_SIZE_MDF_HEADER); > + if (written_size != MAX_SIZE_MDF_HEADER) { > + ret = -1; > + } > + > + g_free(buf); > + return ret; > +} > + > +static int write_end_flat_header(int fd) > +{ > + MakedumpfileDataHeader mdh; > + > + mdh.offset = END_FLAG_FLAT_HEADER; > + mdh.buf_size = END_FLAG_FLAT_HEADER; > + > + size_t written_size; > + written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); > + if (written_size != sizeof(mdh)) { > + return -1; > + } > + > + return 0; > +} > + > static ram_addr_t get_start_block(DumpState *s) > { > GuestPhysBlock *block; > diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h > index 19fafb2..b32b390 100644 > --- a/include/sysemu/dump.h > +++ b/include/sysemu/dump.h > @@ -14,12 +14,29 @@ > #ifndef DUMP_H > #define DUMP_H > > +#define MAKEDUMPFILE_SIGNATURE "makedumpfile" > +#define MAX_SIZE_MDF_HEADER (4096) /* max size of > makedumpfile_header */ > +#define TYPE_FLAT_HEADER (1) /* type of flattened format */ > +#define VERSION_FLAT_HEADER (1) /* version of flattened format */ > +#define END_FLAG_FLAT_HEADER (-1) > + > typedef struct ArchDumpInfo { > int d_machine; /* Architecture */ > int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ > int d_class; /* ELFCLASS32 or ELFCLASS64 */ > } ArchDumpInfo; > > +typedef struct QEMU_PACKED MakedumpfileHeader { > + char signature[16]; /* = "makedumpfile" */ > + int64_t type; > + int64_t version; > +} MakedumpfileHeader; > + > +typedef struct QEMU_PACKED MakedumpfileDataHeader { > + int64_t offset; > + int64_t buf_size; > +} MakedumpfileDataHeader; > + > struct GuestPhysBlockList; /* memory_mapping.h */ > int cpu_get_dump_info(ArchDumpInfo *info, > const struct GuestPhysBlockList *guest_phys_blocks);