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 <we...@cn.fujitsu.com> > --- > 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