qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC][PATCH 08/16 v6] target-i386: add API to get dump


From: Wen Congyang
Subject: Re: [Qemu-devel] [RFC][PATCH 08/16 v6] target-i386: add API to get dump info
Date: Wed, 15 Feb 2012 11:30:13 +0800
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100413 Fedora/3.0.4-2.fc13 Thunderbird/3.0.4

At 02/15/2012 01:39 AM, Jan Kiszka Wrote:
> 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 <address@hidden>
>> ---
>>  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).

OK

> 
>>  #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.

There is no license in other header files.

> 
>> +#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?

Yes, it should be ELFCLASS64.

Thanks
Wen Congyang

> 
>> +            break;
>> +        }
>> +    }
>> +
>> +    return 0;
>> +}
> 
> Jan
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]