From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:41632) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RxMLv-0000ld-55 for qemu-devel@nongnu.org; Tue, 14 Feb 2012 12:39:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RxMLq-00035A-AB for qemu-devel@nongnu.org; Tue, 14 Feb 2012 12:39:43 -0500 Received: from david.siemens.de ([192.35.17.14]:29363) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RxMLq-00034r-1h for qemu-devel@nongnu.org; Tue, 14 Feb 2012 12:39:38 -0500 Message-ID: <4F3A9C51.3040701@siemens.com> Date: Tue, 14 Feb 2012 18:39:29 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <4F333AAA.1070601@cn.fujitsu.com> <4F333CEC.7080007@cn.fujitsu.com> In-Reply-To: <4F333CEC.7080007@cn.fujitsu.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC][PATCH 08/16 v6] target-i386: add API to get dump info List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wen Congyang Cc: Eric Blake , HATAYAMA Daisuke , Dave Anderson , qemu-devel , Luiz Capitulino On 2012-02-09 04:26, Wen Congyang wrote: > Dump info contains: endian, class and architecture. The next > patch will use these information to create vmcore. > > Signed-off-by: Wen Congyang > --- > cpu-all.h | 3 +++ > dump.h | 10 ++++++++++ > target-i386/arch-dump.c | 34 ++++++++++++++++++++++++++++++++++ > 3 files changed, 47 insertions(+), 0 deletions(-) > create mode 100644 dump.h > > diff --git a/cpu-all.h b/cpu-all.h > index 290c43a..268d1f6 100644 > --- a/cpu-all.h > +++ b/cpu-all.h > @@ -23,6 +23,7 @@ > #include "qemu-tls.h" > #include "cpu-common.h" > #include "memory_mapping.h" > +#include "dump.h" > > /* some important defines: > * > @@ -531,11 +532,13 @@ int cpu_write_elf64_note(int fd, CPUState *env, int cpuid, > int cpu_write_elf32_note(int fd, CPUState *env, int cpuid, > target_phys_addr_t *offset); > int cpu_add_extra_memory_mapping(MemoryMappingList *list); > +int cpu_get_dump_info(ArchDumpInfo *info); > #else > #define cpu_get_memory_mapping(list, env) > #define cpu_write_elf64_note(fd, env, cpuid, offset) ({ -1; }) > #define cpu_write_elf32_note(fd, env, cpuid, offset) ({ -1; }) > #define cpu_add_extra_memory_mapping(list) ({ 0; }) > +#define cpu_get_dump_info(info) ({ -1; }) Please use static inlines where possible (applies to earlier patches as well). > #endif > > #endif /* CPU_ALL_H */ > diff --git a/dump.h b/dump.h > new file mode 100644 > index 0000000..a36468b > --- /dev/null > +++ b/dump.h > @@ -0,0 +1,10 @@ License header missing. > +#ifndef DUMP_H > +#define DUMP_H > + > +typedef struct ArchDumpInfo { > + int d_machine; /* Architecture */ > + int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ > + int d_class; /* ELFCLASS32 or ELFCLASS64 */ > +} ArchDumpInfo; > + > +#endif > diff --git a/target-i386/arch-dump.c b/target-i386/arch-dump.c > index d96f6ae..92a53bc 100644 > --- a/target-i386/arch-dump.c > +++ b/target-i386/arch-dump.c > @@ -15,6 +15,7 @@ > > #include "cpu.h" > #include "cpu-all.h" > +#include "dump.h" > #include "monitor.h" > > /* PAE Paging or IA-32e Paging */ > @@ -538,3 +539,36 @@ int cpu_add_extra_memory_mapping(MemoryMappingList *list) > #endif > return 0; > } > + > +int cpu_get_dump_info(ArchDumpInfo *info) > +{ > + bool lma = false; > + RAMBlock *block; > + > +#ifdef TARGET_X86_64 > + lma = !!(first_cpu->hflags & HF_LMA_MASK); > +#endif > + > + if (lma) { > + info->d_machine = EM_X86_64; > + } else { > + info->d_machine = EM_386; > + } > + info->d_endian = ELFDATA2LSB; > + > + if (lma) { > + info->d_class = ELFCLASS64; > + } else { > + info->d_class = ELFCLASS32; > + } > + > + QLIST_FOREACH(block, &ram_list.blocks, next) { > + if (!lma && (block->offset + block->length > UINT_MAX)) { > + /* The memory size is greater than 4G */ > + info->d_class = ELFCLASS32; Is that correct, or did you rather mean ELFCLASS64? > + break; > + } > + } > + > + return 0; > +} Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux